ФЭНДОМ


Список играбельных рас для ХВ2 удручающе мал. Всего две. Конечно, это хорошая традиция для конкретно серии Homeworld, но плохая — для стратегии. В этом мануале мы будем заниматься созданием новой расы, которая будет, в принципе, даже каноничной для ХВ2 — это таидане.

Приготовления

Для начала нам нужно достать декомпилированные файлы homeworld2.big. Это можно сделать с помощью UnfBig1.41, но тогда нужно ожидать, что не все нужные файлы будут корректно читаться, или с помощью интернета — где-то гуляет сборник «Лучшая декомпиляция homeworld2.big», спрашивайте в ближайшем моддинг-отделе. Не буду вдаваться в подробности, тем более, что UnfBig1.41 — программа простая, как говаривал AndrewN, да и уже давно есть мануал; а основы использования Всемирной Сети вы должны и сами знать.
Кроме того, советую, в качестве примеров, закачать и декомпилировать парочку модов, желательно от разных авторов: некоторые моддеры имеют привычку свой новый мод начинать на базе старого, отчего скрипты превращаются в небольшую помойку. Надо заметить, что и в оригинальных скриптах много лишней информации.

Кстати, о коде — на будущее. Старайтесь больше комментировать свой код, чтобы в нём могли разобраться последователи и ваши сотоварищи, но не перестарайтесь. Код должен быть просматриваемым и легкопонимаемым. Если вы сами с полпинка не можете вникнуть, что же вы написали — лучше или переписать, или обильно сдобрить комментариями. Как говорит закон Мэрфи — всё, что может быть понято превратно, будет понято превратно. Старайтесь использовать только то, что нужно — это и уменьшит время искания багов, и облегчит жизнь движку игры.
Вообще, старайтесь делать бэкапы: играйтесь со значениями во временной версии, например, находящейся непосредственно в папке %HW2_root%\Data, а окончательные изменения сохраняйте в другом месте. В дальнейшем, я буду опускать %HW2_root%, вы же знайте, что косая черта впереди всех — это обозначение корневого каталога с игрой.

И последнее — поставьте ХВ2 заново, сделайте бэкап папки с всей игрой, и сделайте копию ярлыка игры с параметром -OverrideBigFile. Если вы не знаете, что это такое, то смотрите любой мануал по запуску мода к ХВ2. И, в конце концов, что вы тогда делаете тут, раз не знаете это?..

Список рас

Но довольно наставлений, перейдём к делу. Напоминаю — мы делает таидашек.
Итак, для начала мы должны заставить игру видеть наших таиданчиков в списке рас, выбираемых при начале мультиплеерного сражения.
Находим файл %homeworld2.big_decompiled%\scripts\race.lua, открываем, и к значению races = {} копипастим ещё одну расу:

{ 
  "Taiidan", -- название расы, только для игрового движка;
  "Taiidan", -- название расы, видное в игре, возможна локализация;
  "hyperspace_gate_kpr", -- эффект гиперокна; будет жёлтое, киперовское;
  "etg/special/SPECIAL_ABILITIES_HYPERSPACE_IN", -- ещё какой-то эффект;
  9.5, -- время, нужное для начального гиперпрыжка;
  Playable, -- можно ли играть в мультиплеере с этой расой;
  "TDN_", -- префикс названия кораблей, которые может использовать раса;
},

Замечание: всё, что начинается с двойного тире —- и есть комментарии.

Нужно упомянуть о, так сказать, «naming convention», то есть, вы должны придерживаться определённых стандартов при именовании кораблей, функций итд. Это облегчит жизнь всем, кто будет работать над кодом с вами. Называть старайтесь просто и понятно, чтобы с первого взгляда можно было разобраться, кто это и что это. В случае с названиями рас в HW2 есть такая традиция: префиксы к расам обычно являются сочетанием их трёх согласных. Помните, «кртксть — сстр тлнт»? Так и тут: если хиигаряне, то HGN_; если вэйгры, то VGR_. Та же фишка и с прочими расами, будь то таидане (TDN_), кушане (KSN_), кадеши (KDS_), туранцы (TRN_) итд.

Итак, начало положено. Копируйте этот race.lua в папку \Data с сохранением оригинальной структуры — то есть, в \Data\scripts. В дальнейшем, делайте аналогично, я больше не буду говорить об этом.

В дополнение скажу, что всего в игре можно задействовать только 6 рас, максимум, и в оригинале задействованы уже 4: хиигаряне, вэйгры, Хранители и бентуси, с префиксом которых (BEN_ - смутно напоминает о дяде Бене из ЗВ, он же — Оби-Ван Кеноби) в игре нет кораблей: Великий Бентус существует под категорией «Мегалит», meg_bentus. Если вы не планируете в своём моде играться в оригинальную кампанию, то можете смело выкидывать бентусов и Хранителей из списка рас, тем самым увеличивая простор для расовой дифференциации. Но ежели вам и этого мало — то иначе как скриптовой магией этого не добьёшься. И для этого вам надо смотреть реализацию оной в модах вроде HWU или PTV.
Но для начала нам хватит и одной дополнительной расы, поэтому запускайте игру, выбирайте появившихся таидан в списке играбельных рас — и начинайте сражение!..

Исследования и строительство

...А вот фигушки. Игра вылетает, таидане навечно застревают в гипер-пространстве.
Что же произошло? Для выяснение этого нужно открыть файл \Bin\Release\Hw2.log. Этот волшебный файл — ваше чудесное спасение, панацея от многих проблем, потому что игровой движок здесь пишет всё, что он думает о вас, вашем моде, и что ему не нравится в нём.
И если пролистать этот лог до конца, то можно увидеть, что пишет он такие ругательства:

?Error: loading research file (data:scripts\Building and Research\Taiidan\research.lua)?-- FATAL EXIT --?researchmanager/70:!?--stack trace--??????????

В дальнейшем, при любом вылете или ошибке игры заходите в лог и по выданной записи ищите, где же вы накосячили. Если же лог пуст — то есть там ничего нет — то значит, что ошибки есть или в *.hod-файлах — или же что-то очень страшное и левое, что лечится только откатом и переделыванием. На этом всё про логи, я об этом упоминать уже не буду.

Итак, движку не нравится, что у нас нет ни исследований, ни (забегая чуть вперёд) — строительства. Нужно исправлять сей досадный недочёт: создаём в \Data\scripts\building and research\ папку с названием нашей расы — то бишь, taiidan, - и копипастим туда, от уже существующих рас, файлы build.lua и research.lua.
А теперь открываем оба файла и стираем всё, что находится между фигурными скобками у функций build = {} и research = {}. Пока что нам ни строительство, ни исследования не важны — мы ещё только хотим хотя бы запустить игру без лишних проблем.
Перед тем как снова попробовать запустить игру, посмотрим на сам конфиг. В любом из трёх, рассмотренных нами, *.lua-файлах были похожие строки:

Modifier = 0 
Ability = 1

Ничего особенного это не значит, кроме того, что здесь мы объявляем переменные, которые потом используются в скриптах вместо нулей, единичек, двоечек итд, что гораздо удобнее и нагляднее. Весьма примечательный пример улучшения читабельности кода.
А теперь — поехали!..

Корабли моей гавани

Ура! Оно запустилось, но, правда, только на чуть-чуть.
Логи ругаются, что у нас нет флота:

Level may have no ships

А это значит, что нужно срочно обзаводиться оным. Для начала мы возьмём те корабли, которые изначально предлагаются в ХВ2, а уже потом будем пытаться выковыривать нужные нам космолёты из ненужных нам модов: чужие модели обычно тянут за собой ворох непонятных файлов, что затрудняет и затормаживает тестирование, а нам это не нужно.
Итак, надо сделать так, чтобы у таидан были какие-нибудь корабли по загрузке карты.
Создаём \Data\scripts\startingfleets\taidan00.lua — точнее, копипастим конфиги уже какой-нибудь из созданных рас, и из всего богатства оставляем такой текст:

PersistantData =
{ 
 StrikeGroups = {}, 
 Squadrons =
 { 
   { 
     type = "Kpr_Destroyer", -- тут можно было и попроще кораблик, вроде Hgn_MotherShip, но я решил, раз уж у нас только один корабль, то пусть будет что-нибудь хорошее;
     subsystems = {}, -- нет подсистем (кроме «по умолчанию»);
     shiphold = {}, -- корабли в доках;
     name = "", -- имя, которое может быть использовано в скриптах — это больше к части синглплеерных забав;
     size = 1, -- вроде как кол-во кораблей в звене, но не работает, поэтому не уверен;
     number = 1, -- количество таких однотипных кораблей;
   }, 
 }, 
 Research = {}, -- нет изначально доступных исследований: правда, не знаю, уже исследованных, или просто доступных;
}

Если вы хотите, чтобы по выходу из гипера какой-нибудь из ваших кораблей выгрузил пару-тройку звеньев истребителей — это бывает полезно, когда нужно использовать корабль другой расы (иначе они просто гипернуться со всеми) - то нужно «записываться» в shiphold:

shiphold = {{type = "Vgr_Destroyer",},},

Тут надо помнить такую вещь: если выпускающий корабль в принципе не может построить выпускаемого, то он гипернётся рядом; то есть, если флагман выпустит эсминец из недр, то, в случае с носителем, тот выпрыгнет рядом.

Внимательный моддер заметит, что строчка, которую мы прописываем в shiphold, является первой строкой общего обозначения корабля. К сожалению, для кораблей, появляющихся из доков, действует только она: иначе можно было бы сделать выход эскадры а-ля matryoshka-style; не работает и параметр number, заставляя копипастить название корабля столько раз, сколько надо кораблей. Но с другой стороны, и для «основных» кораблей можно оставлять только эту, главную строчку: остальные параметры можно указывать по желанию: что будет не указано, то останется с параметрами по умолчанию:

{type = "Vgr_MotherShip",},
{
  type = "Vgr_ResourceCollector",
  number = 4;
},

Запускаем игру и долго радуемся кровавой мсте таидан. Для ещё большей веселухи можете впихнуть парочку-другую Саджууков на старте — для этого смотрите его название в %HW2_decompiled%\ship...

...Я тебя породил...

Но это ещё не всё — мы же хотим наладить полноценное производство кораблей! А чтобы построить корабль, нужно, собственно, две вещи — корабль-строитель и, соответственно, корабль, который строят.
Итак, мы сумели заставить корабли чужих рас появляться под знамёнами таидан. Но проблема в том, что хоть они и появляются в качестве стартового флота, но никто из них нам ничего строить не будет: для этого нам нужно обзавестись собственными кораблями (помните про префикс, который мы задавали при создании новой расы?).
Перекопируйте к себе из %HW2_decompiled%\ship папку с хиигарянским носителем. Переназовите как папку, так и его содержимое — там должны быть минимум три файла: *.hod (собственно, модель корабля), *.ship (его описание для инициализации игровым движком) и *.events (анимация и прочие дела) – в какой-нибудь tdn_carrier.
Затем пропишите в build.lua какие-нибудь кораблики, вроде вэйгрского перехватчика и хиигарянского десантного фрегата:

build =
{
  {
    Type = Ship, –- строим или корабль, или подсистему итд;
    ThingToBuild = "Vgr_Interceptor", -- название корабля;
    RequiredResearch = "", -- здесь пишем нужные ресёрчи для него;
    RequiredShipSubSystems = "", -- нужные подсистемы;
    DisplayPriority = 10, -- чем больше цифра, тем ниже в списках строительства будет появляться корабль; не должно повторяться;
    DisplayedName = "$8000", -- название корабля, видимое игроком;
    Description = "$8000", -- описание корабля, видимое игроком;
  },
  –- Повторите то же самое с «десантником» ))
}

Если вы запустите игру, то заметите две вещи:

  1. Первое, у вас появился лимит на истребители и фрегаты — то есть, игра смотрит, к какому классу принадлежит корабль, и самостоятельно определяет, сколько чего вы можете строить; правда, абордажных фрегатов у вас — 6 штук, наверное, потому, что вы играете не за хиигарян, которым прописано дополнительное правило-пенальти по абордажникам;
  2. Второе, вы не можете строить корабли вэйгров — хотя лимит на них и появился. Это всё потому, что у нашего псевдо-таиданского носителя прописано разрешение на строительство лишь хиигарянской «семьи» кораблей. Если в нашем флоте заведётся кто-нибудь из вэйгростроителей, то он, соответственно, сможет построить перехватчик вэйгров, но не сможет хиигарянский.

В принципе, можно завести только несколько несколько строительных кораблей с префиксом tdn_, а остальные забирать от вэйгров или хиигарян — по сути, по похожему принципу была сделана многорасовость в моде HWU, с возможностью строить с чужих производственных кораблей: они просто совместили все расы в одну, а затем уже скриптами снова разделили расы. Однако, ИМХО, это как-то неправильно. По крайней мере, на первый взгляд...
Возможность что-то строить прописывается в *.ship-файле корабля вот этой строчкой:

addAbility(
    NewShipType, "CanBuildShips", 1,
    -- эта строчка определяет, какие семейства кораблей может строить производитель;
    "Fighter_Hgn, Corvette_Hgn, Frigate_Hgn, Utility_Hgn, Platform_Hgn, SubSystem_Hgn,Shipyard_Hgn, Probe_Hgn",
    -- эта строчка показывает менюшки в интерфейсе;
    "Utility, Fighter, Corvette, Frigate, Platform, SubSystemModule, SubSystemSensors, Capital"
)

К какому семейству относится корабль, можно понять из этих строк:

NewShipType.BuildFamily = "SuperCap_Hgn" -- супертяж хиигарян, однако!;

Подробнее обо всех остальных функциях смотрите в отдельном мануале. А пока обратимся к самим семействам...

Дела семейные

//To be continued...

Смотрите также

Ссылки

  • homeworld.su - мануал AndrewN;
  • homeworld3.ru - мануал, в общем-то, того же AndrewN;
  • Буржуйка - мануал от одмена Всея Кафолической Буржуйки Moe;

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

Викия не будет доступна для последующих модификаций. Если вы желаете продолжать работать со страницей, то, пожалуйста, отключите расширение для блокировки рекламы.

Также на ФЭНДОМЕ

Случайная вики