Добавление нового оружия в игру.В данной статье я подробно распишу как добавить новое оружие в игру на основе существующего путём "клонирования".
Для начала, маленькое отступление.
-----------------------------------------------------------------------------------------------------------------------------------------------На всякий случай напомню три главных правила при редактировании хемулей машин и оружия:
1.
Соблюдать регистр букв.(Если имя, к примеру, оружия в настройках - Storm_01, то и в продаже оно должно быть Storm_01 а не storm_01.)
2.
Пробелы в именах недопустимы.(Если имя оружия - Storm_01, то оно и должно быть Storm_01 а не Storm 01.)
3.
Внимательность и точность.(Достаточно в скрипте пропустить, или добавить лишний слеш/точку/стрелку (и т.д.) и игра вылетит.
---------------------------------------------------------------------------------------------------------------------------------------------------Итак приступим.
Сейчас я добавляю в Меридиан второй Максим, так что буду всё описывать пошагово, как делаю сам.
(Не переживайте, в Махине процесс полностью идеентичен)
Используемые материалы: гелевая шариковая ручка и лист бумаги.
(можно, конечно, создать текстовый документ, но мне на бумаге проще)
Используемый софт: TME, "Блокнот" и "Фотошоп".
Игра, естественно, должна быть распакована.
(У меня она, правда, нераспакована. Просто у меня на другом винте лежат распакованные ресурсы всех трёх игр, беру когда что-то надо оттуда, так мне удобнее.)
Перво-наперво придумываем имя для оружия и записываем на листок первую строчку:
Имя на русском - Максим МК2Весь процесс добавления состоит из нескольких частей.
------------------------------------------------------------------------------------------------------------------------------------------ Часть 1 - Дублирование моделей и прописывание их для движка------------------------------------------------------------------------------------------------------------------------------------------1. Заходим в папку data\models\guns и создаём папку maxim02
2. Записываем на листке: Путь для моделей - data\models\guns\maxim02
3. Находим в data\models\guns файлы модели:
sml_maxim01.sam
sml_maxim01_gun.sam
4. Открывем модель лафета sml_maxim01.sam в ТМЕ и смотрим какие используются текстуры (покраска/объём/горелая):
- Спойлер
Получаем: sml_maxim01.dds, sml_maxim01b.tga и gun_8.dds
5. Открывем модель оружия sml_maxim01_gun.sam в ТМЕ и смотрим какие используются текстуры (покраска/объём/горелая):
- Спойлер
Получаем те-же: sml_maxim01.dds, sml_maxim01b.tga и gun_8.dds
6. Копируем модели и текстуры и вставляем в (созданную) папку data\models\guns\maxim02
7. Переименовываем sml_maxim01.sam в maxim02.sam, а sml_maxim01_gun.sam в maxim02_gun.sam
8. Проверяем, должны быть такие файлы:
data\models\guns\maxim02\maxim02.sam
data\models\guns\maxim02\maxim02_gun.sam
data\models\guns\maxim02\sml_maxim01.dds
data\models\guns\maxim02\sml_maxim01b.tga
data\models\guns\maxim02\gun_8.dds
Записываем на листок:
Файлы моделей - maxim02.sam и maxim02_gun.sam9. Открываем data\models\guns\maxim02\sml_maxim01.dds в Фотошопе.
- Спойлер
Немного перекрашиваем, чтоб новый Максим визуально отличался, и сохраняем его с такими (DXT2) настройками:
- Спойлер
10. Открываем в "Блокноте" data\models\animmodels.xml
11. Вбиваем в поиск имя стандартной модели лафета максима (sml_maxim01.sam) и находим описание модели:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<model
id="maxim01"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01.sam">
</model>
12. Копируем весь блок, и тут-же вставляем, получаем две идеинтичные модели:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<model
id="maxim01"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01.sam">
</model>
<model
id="maxim01"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01.sam">
13. Новосозданной модели меняем путь и имя файла модели (берём записанные на листе (параметр file=)), и даём новое имя - maxim02 (параметр id=)
- Спойлер
- Код: Ctrl+A, Ctrl+C
<model
id="maxim01"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01.sam">
</model>
<model
id="maxim02"
shadow="1"
windwavy="0"
file="data\models\guns\maxim02\maxim02.sam">
</model>
14. Вбиваем в поиск имя стандартной модели пушки максима (sml_maxim01_gun.sam) и находим описание модели:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<model
id="maxim01gun"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01_gun.sam">
<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>
15. Копируем весь блок, и тут-же вставляем, получаем две идеинтичные модели:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<model
id="maxim01gun"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01_gun.sam">
<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>
<model
id="maxim01gun"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01_gun.sam">
<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>
16. Новосозданной модели меняем путь и имя файла модели (берём записанные на листе (параметр file=)), и даём новое имя - maxim02 (параметр id=)
- Спойлер
- Код: Ctrl+A, Ctrl+C
<model
id="maxim01gun"
shadow="1"
windwavy="0"
file="data\models\guns\sml_maxim01_gun.sam">
<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>
<model
id="maxim02gun"
shadow="1"
windwavy="0"
file="data\models\guns\maxim02\maxim02_gun.sam">
<action
name="MOVE1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MAXIM_FIRE_SOUND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
<action
name="STAND1">
<lp
id="LP_FIRE01"
effect_id="ET_PS_MACHINEGUN_STAND"
restartOnAnimationChange="1"
ImmediateRemove="0" />
</action>
</model>
На листок записываем:
Имена моделей - maxim02 и maxim02gun18. Сохраняем изменения в animmodels.xml
19. Открываем в "Блокноте" data\models\servers.xml, копируем любой блок, и дублируем дважды, получаем например:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Item
id="cub"
file="data\models\AnimModels.xml" />
<Item
id="cub"
file="data\models\AnimModels.xml" />
<Item
id="cub"
file="data\models\AnimModels.xml" />
20. На двух новых меняем имена моделей (берём с листа):
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Item
id="cub"
file="data\models\AnimModels.xml" />
<Item
id="maxim02"
file="data\models\AnimModels.xml" />
<Item
id="maxim02gun"
file="data\models\AnimModels.xml" />
21. Сохраняем изменения в servers.xml
22. Копируем обе новые созданные записи:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Item
id="maxim02"
file="data\models\AnimModels.xml" />
<Item
id="maxim02gun"
file="data\models\AnimModels.xml" />
23. Вставляем их во
ВСЕ servers.xml
ВСЕХ карт вашей игры.
Для Меридиана это:
data\maps\r5m1\servers.xml
data\maps\r5m2\servers.xml
data\maps\r6m1\servers.xml
data\maps\r6m2\servers.xml
data\maps\sin\servers.xml
data\maps\menu\servers.xml (необязательно, только если хотите использовать в меню)
Для Махины:
data\maps\r1m1\servers.xml
data\maps\r1m2\servers.xml
data\maps\r1m3\servers.xml
data\maps\r1m4\servers.xml
data\maps\r2m1\servers.xml
data\maps\r2m2\servers.xml
data\maps\r3m1\servers.xml
data\maps\r3m2\servers.xml
data\maps\r4m1\servers.xml
data\maps\r4m2\servers.xml
data\maps\mainmenu\servers.xml (необязательно, только если хотите использовать в меню)
Если этого не сделать, на картах, в servers.xml которых модели непрописаны, вместо них будет выведен ящик.
Всё, с моделями закончили.
На листе у нас:
Имя на русском - Максим МК2
Путь для моделей - data\models\guns\maxim02
Файлы моделей - maxim02.sam и maxim02_gun.sam
Имена моделей - maxim02 и maxim02gun
------------------------------------------------------------------------------------------------------------------------------------------ Часть 2 - Дублирование оружия------------------------------------------------------------------------------------------------------------------------------------------1. Открываем data\gamedata\gameobjects\smallguns.xml, вбиваем в поиск имя стандартного максима (maxim01) и находим его описание:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim01"
ModelFile = "maxim01"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>
2. Копируем весь блок и тут-же вставляем, получаем два Максима:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim01"
ModelFile = "maxim01"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>
<Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim01"
ModelFile = "maxim01"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>
3. Во втором (новом) блоке меняем имя модели (параметр ModelFile =) на имя нашего ОРУЖИЯ (берём с листка(maxim02))
(Лафет (maxim02_gun) прописывать не нужно, он "цепляется" движком игры автоматически)
Так-же даём новое имя оружия для продажи в магазинах - maxim02 (параметр Name =)
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim01"
ModelFile = "maxim01"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>
<Prototype
Class = "PlasmaBunchLauncher"
Name = "maxim02"
ModelFile = "maxim02"
ResourceType = "SMALL_GUN"
NodeScale = "1 1 1"
Mass = "1.0"
BulletPrototype = "someLaserBeamGreen"
ExplosionType = "LASER"
FiringEffect = "none"
Damage = "65"
FiringRate = "90"
GroupingAngle = "0.3"
FiringRange = "800"
RecoilForce = "0"
FiringType = "Laser"
Price = "53200"
Decal = "DC_LASER"
ChargeSize = "35"
RechargingTime = "3"
Durability = "400"/>
Сохраняем smallguns.xml
Записываем на листок:
Имя оружия для продажи - maxim02Оружие готово.
Здесь так-же можно менять его характеристики (скорострельность/скорость перезарядки/цена/тип патрона/эффект выстрела/эффект при попадании и т.д.)
На листе у нас:
Имя на русском - Максим МК2
Путь для моделей - data\models\guns\maxim02
Файлы моделей - maxim02.sam и maxim02_gun.sam
Имена моделей - maxim02 и maxim02gun
Имя оружия для продажи - maxim02---------------------------------------------------------------------------------------------------------------------------------------------- Часть 3.1 - Прописывание оружия в продажу (для проверки) в Меридиан----------------------------------------------------------------------------------------------------------------------------------------------1. Открываем в "Блокноте" data\maps\r5m1\dynamicscene.xml
2. Вбиваем в поиск TheApple_Shop и находим магазин, примерно такой блок:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Object
Name="TheApple_Shop"
Belong="1110"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="kpvtS01" />
<Item
PosX="2"
PosY="0"
Flags="16"
Prototype="vulcan01" />
<Item
PosX="4"
PosY="0"
Flags="16"
Prototype="rapier01" />
</GunsAndGadgets>
</Object>
3. Дублируем одну из пушек и даём ей наше имя для продажи (берём с листка (параметр Prototype=))
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Object
Name="TheApple_Shop"
Belong="1110"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="kpvtS01" />
<Item
PosX="2"
PosY="0"
Flags="16"
Prototype="vulcan01" />
<Item
PosX="4"
PosY="0"
Flags="16"
Prototype="rapier01" />
<Item
PosX="4"
PosY="0"
Flags="16"
Prototype="maxim02" />
</GunsAndGadgets>
</Object>
Сохраняем dynamicscene.xml
P.S. Если у вас в продаже ничего нет (чистая игра), то блок будет выглядеть так:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Object
Name="TheApple_Shop"
Belong="1110"
Prototype="shop">
</Object>
В этом случае вам нужно заменить его этим:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Object
Name="TheApple_Shop"
Belong="1110"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="maxim02" />
</GunsAndGadgets>
</Object>
Теперь наше оружие можно купить в Малом яблоке
---------------------------------------------------------------------------------------------------------------------------------------------- Часть 3.2 - Прописывание оружия в продажу (для проверки) в Махину----------------------------------------------------------------------------------------------------------------------------------------------1. Открываем в "Блокноте" data\maps\r1m1\dynamicscene.xml
2. Вбиваем в поиск TheGloohoe_Shop и находим магазин, примерно такой блок:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Object
Name="TheGloohoe_Shop"
Belong="1008"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="additional_fuel_tank" />
<Item
PosX="1"
PosY="0"
Flags="16"
Prototype="additional_durability" />
<Item
PosX="0"
PosY="1"
Flags="16"
Prototype="cooling_system_guns" />
</GunsAndGadgets>
</Object>
3. Дублируем одну из пушек и даём ей наше имя для продажи (берём с листка (параметр Prototype=))
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Object
Name="TheGloohoe_Shop"
Belong="1008"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="additional_fuel_tank" />
<Item
PosX="1"
PosY="0"
Flags="16"
Prototype="additional_durability" />
<Item
PosX="0"
PosY="1"
Flags="16"
Prototype="cooling_system_guns" />
<Item
PosX="0"
PosY="1"
Flags="16"
Prototype="maxim02" />
</GunsAndGadgets>
</Object>
Сохраняем dynamicscene.xml
P.S. Если у вас в продаже ничего нет (чистая игра), то блок будет выглядеть так:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Object
Name="TheGloohoe_Shop"
Belong="1008"
Prototype="shop">
</Object>
В этом случае вам нужно заменить его этим:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Object
Name="TheGloohoe_Shop"
Belong="1008"
Prototype="shop">
<GunsAndGadgets>
<Item
PosX="0"
PosY="0"
Flags="16"
Prototype="maxim02" />
</GunsAndGadgets>
</Object>
Теперь наше оружие можно купить в Глухом
---------------------------------------------------------------------------------------------------------------------------------------------- Часть 4 - Добавление иконки для оружия----------------------------------------------------------------------------------------------------------------------------------------------1. Открываем папку data\if\ico\inventorydlg\weapon
2. Находим файл maxim01.dds, копируем его, вставляем здесь же и переименовываем в maxim02.dds
В итоге должно быть два одинаковых файла:
data\if\ico\inventorydlg\weapon\maxim01.dds
data\if\ico\inventorydlg\weapon\maxim02.dds
3. Открываем maxim02.dds в Фотошопе:
- Спойлер
Немного перекрашиваем и сохраняем с такими (DXT3) настройками:
- Спойлер
4. Открываем в "Блокноте" data\if\ico\modelicons.xml дублируем любой блок (но именно с двумя путями), например:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Item id="vector01"
file="data\if\ico\InventoryDlg\weapon\vector01.dds"
file1="data\if\ico\InventoryDlg\weapon\vector01.dds"/>
<Item id="vector01"
file="data\if\ico\InventoryDlg\weapon\vector01.dds"
file1="data\if\ico\InventoryDlg\weapon\vector01.dds"/>
5. Во втором (новом) блоке имя модели (оружия) из листка (параметр id=) и меняем имя файла иконки на тот, что только-что сделали:
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Item id="vector01"
file="data\if\ico\InventoryDlg\weapon\vector01.dds"
file1="data\if\ico\InventoryDlg\weapon\vector01.dds"/>
<Item id="maxim02"
file="data\if\ico\InventoryDlg\weapon\maxim02.dds"
file1="data\if\ico\InventoryDlg\weapon\maxim02.dds"/>
---------------------------------------------------------------------------------------------------------------------------------------------- Часть 5 - Добавление имени оружия (на русском) ----------------------------------------------------------------------------------------------------------------------------------------------Открываем в "Блокноте" data\if\diz\model_names.xml и дублируем любой блок.
В параметр id= вставляем (с листка) Имя оружия для продажи.
В параметр value= вставляем (с листка) Имя на русском.
- Спойлер
- Код: Ctrl+A, Ctrl+C
<Item
id="maxim02"
locForm="0"
value="Максим МК2" />
---------------------------------------------------------------------------------------------------------------------------------------------- Часть 6 - Добавление описания оружия (на русском) для Энциклопедии (Махина) и Путевых заметок (Меридиан)----------------------------------------------------------------------------------------------------------------------------------------------Открываем в "Блокноте" data\if\strings\uidescription.xml и дублируем любой блок.
В параметр id= вставляем (с листка) Имя оружия для продажи.
В параметр value= вставляем (из фантазии) описание на русском.
- Спойлер
- Код: Ctrl+A, Ctrl+C
<string
id="maxim02_diz"
value="Усовершенствованная модель малого импульсного лазера, отличается повышенной мощностью и скорострельностью." />
============================================================================================================
Ну вот и всё. "Максим МК2" добавлен в игру. Теперь заходим в игру и проверяем:
- Спойлер
У меня всё в норме, чего и вам желаю. Удачи.
Автор bat13 06.01.2014
Третий Закон: Любая достаточно развитая технология неотличима от магии. (Кларк)