Здравствуй, юное талантливое дарование. Я очень рад, что ты все-таки решил взяться за такое сложное, но увлекательное дело, как модостроение.
Сомневаешься в своих силах? Глянь такие моды, как Комплекс, ТФС, ЭфИкс, или SW Warlords. Поверь, ты можешь так же. Ты можешь даже лучше.
Впрочем, довольно лирики.
Начнем от печки. Каждый модостроитель должен уметь делать с движком все. Я не имею ввиду, что ты обязан уметь делать все одинаково хорошо – тебе как бы никто не запрещает специализироваться в какой-то определенной области – 3D-моделирование, работа с текстурами, спецэффектами, скриптами. Просто ты должен представлять, что как устроено и как это работает. Хотя бы условно.
Вступление затянулось.
Итак, ты хочешь сделать самый великий мод всех времен и народов. Дерзай. Очень вероятно, что ты найдешь единомышленников, помощников, команду и т.д., но ты должен понимать, что ты и сам должен уметь подступиться к движку...
Часть 0. Системные требования:Прямые руки. Обязательное условие – расти они должны из плечевых суставов.
Острый и пытливый ум.
Любознательность. Умение ковырять движок и понимать, какая функция за что отвечает. Для ленивых есть Верфи и Кладбище.
Часть 0.5. Набор линков для модостроителя:http://forums.relicnews.com/forumdisplay.php?f=72 — ХВ2-модостроительный раздел буржуйки.
http://homeworld.wikia.com/wiki/Main_Page — Энциклопедия Хиигара, нужна лишь для поиска концепт-артов.
http://homeworldarchives.com/hw2comp/ - Концепт-арты по ХВ2 и ХВ1.
http://hw2wiki.net/wiki.hw2.info/KarosGraveyard.html — Главная модостроительная библиотека. Содержит все необходимые линки и описания переменных.
http://shipyards.relicnews.com/ - Верфи. Описания кораблей, характеристик, конецпт-арты.
Если все это есть, то...
Часть 1. Начало.Все, что мы делаем – будет очень сильно зависеть от наших планов.
Предполагается, что Homeworld2 уже установлен и пропатчен до версии 1.1.
Предположим, достаточно традиционная в последнее время задача – добавить в игру Тобари. Просто Тобари, без каких-то заморочек с балансом.
Прежде всего, нужно получить материал для работы. Скачиваем и устанавливаем Spooky`s RAT 2.0.0. Искать придется на Реликах.
Распаковываем следующие файлы:
Внимание! У вас нет прав для просмотра скрытого текста.
Создаем в установочной папке ХВ2 папку Data и сваливаем туда все это, сохраняя иерархию. Учтите, что папка Data должна быть одна. Если путь выглядит так: %HW2_ROOT%/data/data..., то начнутся проблемы..)
Но это не столь важно.
Открываем файл Race.lua блокнотом (я рекомендую Notepad++), ругаемся матом, закрываем.
Файл компилирован, а это значит, что расковырять его можно только с помощью декомпилятора. Нужен родной LuaDC, но и он не идеален.
В интернете хватает мануалов по работе с LuaDC, на тех же Реликах, например, поэтому мы едем дальше.
Допустим, что Race.lua и все другие скрипты мы декомпилировали.
Кстати. По линкам на Кладбище можно найти и полностью декомпилированную и в значительной степени пригодную к использованию папку Data.
Открываем его, ффтыкаем шозахерь (с), и пишем:
NotPlayable=0
Playable=1
races = {
{
"Invalid",
"Invalid",
"",
"",
0,
NotPlayable,
"",
},
{
"Hiigaran",
"$1100",
"hyperspace_gate",
"etg/special/SPECIAL_ABILITIES_HYPERSPACE_IN",
9.5,
Playable,
"HGN_",
},
{
"Vaygr",
"$1101",
"hyperspace_gate_vgr",
"etg/special/SPECIAL_ABILITIES_HYPERSPACE_IN",
9.5,
Playable,
"VGR_",
},
{
"Tobari",
"Tobari", -- вот такой двойной дефис на Луа — комментарий. Пользуйтесь.
"hyperspace_gate_Vgr",
"etg/special/SPECIAL_ABILITIES_HYPERSPACE_IN",
9.5,
Playable,
"Tbr_",
},
}
иными словами – вписываем Тобари на место кого-то еще. Система не ругается... и косяки могут полезть уже в кампании. Кстати, функцию рандомного выбора расы лучше вырезать — глючит.
И НИКОГДА НЕ ВЫРЕЗАЙТЕ САМУЮ ПЕРВУЮ РАСУ — Invalid. Иначе сбоить будет гарантированно. С вылетами.Открываем familylist.lua, и вписываем в него семейства, необходимые для определения...
{
name = "Corvette_Tbr", },
{
name = "Frigate_Tbr", },
{
name = "Carrier_Tbr", },
{
name = "Utility_Tbr", },
{
name = "Probe_Tbr", },
{
name = "SubSystem_Tbr", },
Вписываем это где-то в начале. Будьте внимательны.
Переименовываем корабли.
Hgn_carrier Tbr_Carrier
Hgn_assaultcorvette Tbr_Gunship
Hgn_Assaultfrigate Tbr_Frigate
Hgn_resoursecollector Tbr_Harvester
Vgr_Probe Tbr_Probe
Харвестер -- это для прикола)))
Вспоминаем, что нас не интересуют подсистемы.
Вспоминаем, что карриер -- единственный крупный корабль у Тобари.
Стало быть, ресерч модуль есть изначально.
Идем в Tbr_Carrier.ship, оставляем там от:
StartShipHardPointConfig(NewShipType, "Production 1", "HardpointProduction1", "System", "Production", "Destroyable", "", "Hgn_C_Production_Fighter", "", "", "", "", "", "", "")
StartShipHardPointConfig(NewShipType, "Production 2", "HardpointProduction2", "System", "Production", "Destroyable", "", "Hgn_C_Production_Corvette", "", "", "", "", "", "", "")
StartShipHardPointConfig(NewShipType, "Production 3", "HardpointProduction3", "System", "Production", "Destroyable", "", "Hgn_C_Production_Frigate", "Hgn_C_Production_FrigateAdvanced", "", "", "", "", "", "")
StartShipHardPointConfig(NewShipType, "Generic 1", "HardpointGeneric1", "System", "Generic", "Destroyable", "", "Hgn_C_Module_Research", "Hgn_C_Module_Hyperspace", "Hgn_C_Module_PlatformControl", "Hgn_C_Module_CloakGenerator", "Hgn_C_Module_HyperspaceInhibitor", "Hgn_C_Module_FireControl", "Hgn_C_Module_ResearchAdvanced", "Hgn_C_Module_BuildSpeed")
StartShipHardPointConfig(NewShipType, "Generic 2", "HardpointGeneric2", "System", "Generic", "Destroyable", "", "Hgn_C_Module_Research", "Hgn_C_Module_Hyperspace", "Hgn_C_Module_PlatformControl", "Hgn_C_Module_CloakGenerator", "Hgn_C_Module_HyperspaceInhibitor", "Hgn_C_Module_FireControl", "Hgn_C_Module_ResearchAdvanced", "Hgn_C_Module_BuildSpeed")
StartShipHardPointConfig(NewShipType, "Sensors 1", "HardpointSensors1", "System", "Sensors", "Destroyable", "", "Hgn_C_Sensors_DetectHyperspace", "Hgn_C_Sensors_AdvancedArray", "Hgn_C_Sensors_DetectCloaked", "", "", "", "", "")
StartShipHardPointConfig(NewShipType, "Engine", "Hardpoint_Engine", "System", "Innate", "Damageable", "Hgn_C_Engine", "", "", "", "", "", "", "", "")
StartShipHardPointConfig(NewShipType, "Resource", "Hardpoint_Resource", "System", "Innate", "Damageable", "Hgn_C_Innate_Resource", "", "", "", "", "", "", "", "")
только строки:
StartShipHardPointConfig(NewShipType, "Generic 1", "HardpointGeneric1", "System", "Innate", "Damageable", "tbr_module_research", "")
StartShipHardPointConfig(NewShipType, "Engine", "Hardpoint_Engine", "System", "Innate", "Damageable", "Tbr_C_Engine", "", "", "", "", "", "", "", "")
StartShipHardPointConfig(NewShipType, "Resource", "Hardpoint_Resource", "System", "Innate", "Damageable", "Tbr_C_Innate_Resource", "", "", "", "", "", "", "", "")
Остальное можно или удалить, или закомментировать.Не забывайте — комментарий на Lua – двойной дефис (--).
Т.е. мы в первый же слот проставляем ресерч модуль, и делаем его вечным и неубиваемым.
Ресерч модуля у нас нет. Сейчас сделаем. Берем выдранный ранеее vgr_c_module_research, переименовываем его в tbr_module_research.
Аналогично переименовываем Hgn_c_engine в Tbr_C_Engine и Hgn_C_Innate_Resource в Tbr_C_Innate_Resource.
Далее прописываем семейства в карриере.
addAbility(NewShipType, "CanBuildShips", 1, "Corvette_Tbr, Frigate_Tbr, Carrier_Tbr, Utility_Tbr, Probe_Tbr", "Utility, Corvette, Frigate, SubSystemModule, Capital")
т.е. он может строить все, включая самое себя. Но для начала нужно пробежаться по всем .ship-файлам, найти там строки вида
NewShipType.BuildFamily = "xxx_Hgn"
и поисправлять их на строки вида
NewShipType.BuildFamily = "xxx_Tbr"
Теперь начинается самое интересное.
Создаем, или кидаем скрипты Building and Research в Scripts.
Нас интересует минимум кораблей и минимум ресерчей, посему клонируем Вайгровский пакет билдресерчей и переименовываем его Tobari. Однако build.lua лучше взять хиигарский.
Далее думаем, или опять же вспоминаем, как мы хотели построить дерево ресерчей...
Посколько подсистем нету, то открываем Build.lua, и удаляем все упоминания о подсистемах вообще, а так же из
RequiredShipSubSystems = "",
Оставляем хиигарский карриер, ассолтфрегат, ассолткорвет, ресурсколлектор и пробку. Быстро их переименовываем так, как было указано выше.
Параллельно открываем research.lua. Что мы хотим? Подсистем нету, ergo, делаем активацией. Значит, оставляем родные вайгровские "CorvetteTech" и "FrigateTech".
"FrigateTech" дублируем, переименовываем в "CarrierSummon", исправляем все описания, меняем
TargetType = Family,
TargetName = "Frigate",
на
TargetType = Ship,
TargetName = "Tbr_Carrier",
Едем дальше. Дальше нам встречается "SuperCapHealthUpgrade1", "SuperCapHealthUpgrade2", "SuperCapSpeedUpgrade1" и "SuperCapSpeedUpgrade2"
Аналогично исправляем на
TargetType = Ship,
TargetName = "Tbr_Carrier",
...т.к. у нас только карриер и других крупных кораблей не предвидится.
Остальное выправляем по аналогии.
Однако.
Допустим, ганшипам мы хоти сделать апгрейд на огневую мощь.
Копируем любую пару конфигов, например, "CorvetteHealthUpgrade1" и "CorvetteHealthUpgrade2", переименовываем их в "CorvetteDamageUpgrade1" и "CorvetteDamageUpgrade2", и меняем
UpgradeName = "MAXHEALTH",
UpgradeValue = 1.6,
Icon = Icon_Health,
на
UpgradeName = "WeaponDamage",
UpgradeValue = 1.4,
Icon = Icon_Ability,
Подсистем у нас нет. Поэтому все упоминания о необходимых подсистемах исправляем на
RequiredSubSystems = "Research",
С этим вроде понятно.
Итого, что мы имеем? Расу Тобарей...)
Стоп.
Мы забыли прописать им Startingfleet.
Копируем любой стартингфлит-конфиг, переименовываем в Tobari00, и прописываем там карриер и шесть харвестеров.
PersistantData =
{
StrikeGroups = {},
Squadrons =
{
{
type = "tbr_Carrier",
subsystems = {},
shiphold = {},
name = "",
size = 1,
number = 1, },
{
type = "Tbr_Harvester",
subsystems = {},
shiphold = {},
name = "",
size = 1,
number = 6, },
},
Research = {}, }
И все. Со скриптовой частью мы закончили. Хотя наверняка вам захочется что-то изменить.
Часть 2. Локаль.Это нужно, скорее, для перевода. Ничто не мешает писать названия и описания прямо в скрипты, другой вопрос, что это неудобно и куда удобнее сделать в скрипте ссылку вида “$1234”, ведущую в словарь. А переписывать словари удобнее, чем скрипт, согласитесь.
Удобнее всего взять готовый словарь из архива English.big и переписывать его. Критично, что словарь должен быть в кодировке UCS-2 Little Endian. Иначе все тексты превращаются в ряды вопросительных знаков.
Удобнее всего сваливать все в один-два своих словаря, чтобы не путаться в готовых, не путать других и самому не заблудиться, что вы и куда вписывали. Хотя если вы не поклонник опенсорса, то можно ковырять и шифровать исходные словари – это затруднит потрошение вашего мода.
Итак, сопируйте словарь Ships.ucs. Свалите его в Data/locale/English. Он содержит информацию по кораблям и подсистемам, но нас она не интересует. Вычистите словарь, напишите в начале первой строки цифру 8000, отступите на одно нажатие Tab и задумайтесь. Возьмите скрипт localedat.lua, включите мозг и добавьте свой словарь по аналогии. Сохраните, вернитесь к словарю.
Теперь смотрите. Впишите после этих восьми тысяч «Tobari», без кавычек, откройте Race.lua, найдите строку, в которой вы писали «Tobari» – она будет второй по счету и приведите этот фрагмент к следующему виду:
{
"Tobari",
"$8000", -- $8000 – это ссылка в словарь.
"hyperspace_gate_Vgr",
"etg/special/SPECIAL_ABILITIES_HYPERSPACE_IN",
9.5,
Playable,
"Tbr_",
},
Вот так же, по аналогии, допишите остальные строки. Можно применять следующие теги:
<b></b>
– жирный текст.
<c=xxxxxx></c>
– цветной текст. Задается как шестизначный гекс. Регистр не критичен.
\n – переход на следующую строку.
Другие просто не работают. Хотя не бойтесь экспериментировать.
Кроме того, учтите, что словари нельзя «пересекать». Т.е. если один словарь содержит значения с 2000 до 5000, а затем сразу с 6000 до 7000, то второй словарь нельзя начинать со значения 5500 – вылетит с ошибкой пересечения словарей. Точно так же второй словарь нельзя начинать с тысячи, а затем перескакивать на 8000. Включайте логику.
Начинать безопасно их (словари) можно с 8000 или где-то немного раньше. Предельные значения – около сорока тысяч — там уже начинаются тексты кампании.Но тридцати тысяч строк должно хватить для любого мода. В крайнем случае, теоретически, можно перевалить и за 50000 и продолжить до 100000 и далее. Крайний предел пока не обнаружен.)
Группа: Пользователи
Регистрация: 31.08.2010