Star Wolves 3: Civil War Guide

Моддинг от Aleksey_SR for Star Wolves 3: Civil War

Моддинг от Aleksey_SR

Overview

Данное руководство создано для “мелкого” модифицирования игры, которое вы, игроки, спокойно сможете сделать у себя. Большой (и главное, качественный) моддинг представляет собой написание Скриптового кода на языке программирования Lua версии 4.0.1, на котором написана игра. Этим самым, можно написать неплохой мод, что я и сделал с модом New Civil War для ЗВ:ГВ. Однако мало кому он по силам, и это очень сложный раздел программирования для вас, если вы еще не писали никаких кодов, хотя бы обыкновенных скриптов.Данное руководство будет постепенно обновляться.

Модифицирование музыкального плейлиста.

Нанем с музыки.
Вся музыка записана в игре в формате ogg , и лежит в директории //Папка_с_игрой//Data//Music. Чтобы изменить музыку на свою, вам необходимо вашу композицию сконвертировать в формат ogg через аудиоредактор, поддерживающий этот формат. После конвертации присваиваете имя файла игрового трека к вашему, и заменяете вашим треком уже существующий игровой.
В оригинальной версии игры (без модов вообще) количество треков равно:

  • 18 треков боевой музыки
  • 26 треков полетной музыки

То есть, заменить максимум треков с помощью такого способа вы сможете такое количество. Есть еще другие файлы, но они в общий плейлист не входят, и проигрываются по моментам игры (например, трек “menu.ogg” играет в главном меню игры)

Для увеличения количества треков вам необходимо зайти в файл “PlayLists.script”, который лежит по адресу //Папка_с_игрой//Data//Scripts//include. Открывать текстовым редактором.
В разных частях волков этот файл имеет разную структуру, однако в ГВ плейлист представлен, как Массив.

Мы видим, что все названия треков записаны в массив:

AmbientList = {“polet”,”polet2″,”polet3″,”polet4″,”polet5″,”polet6″,”polet7″,”polet8″,”polet9″, “polet10″,”polet11″,”polet12″,”polet13″,”polet14″,”polet15″,”polet16″,”polet17”, “polet18″,”polet19″,”polet20″,”polet21″,”polet22″,”polet23″,”polet24″,”polet25″,”polet26”};

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

AmbientList = {“polet”,”polet2″,”polet3″,”polet4″,”polet5″,”polet6″,”polet7″,”polet8″,”polet9″, “polet10″,”polet11″,”polet12″,”polet13″,”polet14″,”polet15″,”polet16″,”polet17”, “polet18″,”polet19″,”polet20″,”polet21″,”polet22″,”polet23″,”polet24″,”polet25″,”polet26”,”polet27″}; — мы добавили polet27

Новый трек необходимо предварительно добавить в папку Music!
И да, названия могут быть разными. Главное, чтобы они совпали с названиями композиций.

Для придания каждой локации своего неповторимого звучания, прописываете в папках локаций //Scripts//Locations// в файлах location.script (в самом конце файла)

Или InitMusic(); – случайный выбор
Или как здесь, с указанием конкретного трека:

AddMusicToPlayList(“Ambient2”) ; – трек Ambient2 и т.д. AddMusicToPlayList(“Ambient3”) ; AddMusicToPlayList(“Ambient8”) ; AddMusicToPlayList(“Ambient9”) ; AddMusicToBattlePlayList(“Battle1”) ; – трек Battle1 и т.д. AddMusicToBattlePlayList(“Battle2”) ; AddMusicToBattlePlayList(“Battle3”) ; StartPlayList(); – запуск плейлиста

Внимание! Написанные записи выше – условные. Функция называется AddMusicToPlayList() или AddMusicToBattlePlayList() . В скобках необходимо в кавычках указать название трека в Music. Иначе не будет работать.

Описание тегов файла Carcasses.xml (корабли, станции и прочее)

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

ОПИСАНИЕ СТРУКТУРЫ ФАЙЛА CARCASSES.XML

Основной файл, где лежит вся информация о кораблях в xml формате, это Carcasses.xml, лежащий по адресу Папка_с_игрой//Data//Game.

<BigShip name=”Mothership”>

Тип каркаса (BigShip или Interceptor или Corvette), уникальное имя (Mothership).

<short_name>#M_Name_Mothership</short_name>

Основное название корабля, встречаемое в космосе. Лежит в Data/LocData/English, в файлах m_carcasses или s_carcasses.

<hint>#M_Hint_Mothership</hint>

Второстепенное название корабля, встречаемое в окне базы или на торговой станции. Лежит там же.

<long_desc>#M_LDesc_Mothership</long_desc>

Полное описание корабля. Лежит там же.

<mesh_name>new_mothership</mesh_name>

IMD файл (3D модель). Лежит в Data//OBJECT.

<flat_image>new_mothership_icon</flat_image>

Файлы DDS (картинки корабля) в Data/TEXTURE/Interface/Carcass/32,64,128[/th] [/tr]

<hit_points>2000</hit_points>

Очки брони.

<mass>120000</mass>

Масса. Влияет на маневренность.

<disable_trade>true</disable_trade>

Запрет на продажу в магазине (если true).

<cost>99999</cost>

Истинная цена. В разных магазинах отличается из-за уникальных коэффициентов на цены.

<technology/>

Принадлежность к технологии расы (TECHNOLOGY_BERSERK, TECHNOLOGY_ALIEN, TECHNOLOGY_PRECURSOR, TECHNOLOGY_ANGOR).

<EPR>60</EPR>

Эквивалентная площадь радиоотражения. Насколько хорошо кораблик будет виден на радаре. У истребителей он обычно низкий.

<explosion_script>Big Ship</explosion_script>

Тип взрыва при гибели корабля (Big Ship, Station, Asteroids, Fighter, Transport)

<work_sound/>

Переводится как “рабочий звук”. Звук он и есть звук. Х.з, зачем он 🙂

<silence/>

“Тишина”, что типа расстояния с которого будет не слышен звук. Наверное.

<max_energy>250</max_energy>

Очки щитов.

<energy_restore>3</energy_restore>

Скорость восстановления щитов ( + показатель за секунду).

<max_speed>9</max_speed>

Макс. скорость, значение*100.

<maneurability>2</maneurability>

Маневренность , значение*10.

<steering_power>11000</steering_power>

Мощность разворота. Чем выше, тем больше маневренность.

<sensor_resolution>0.38</sensor_resolution>

Разрешающая способность радара (чем меньше, тем лучше обнаруживает малозаметную цель).

<sensor_length>140</sensor_length>

Дальность радара (в кликах).

<threat>3.5</threat>

“Страшность” корабля. Чем выше, тем больше очков за сбитие.

<mapping_name>new_mothership_icon</mapping_name>

Картинка DDS со слотами. Лежит в Data/TEXTURE//Interface//Carcass/Slots.

Подраздел вооружения:

<HolderProperties>
  • <big_guns>0</big_guns>

    Большие пушки.

  • <small_guns>0</small_guns>

    Малые пушки.

  • <rockets>0</rockets>

    Ракетные установки.

  • <systems>4</systems>

    Системы.

  • <turrets>5</turrets>

    Турели.

  • <gk_guns>0</gk_guns>

    ГК орудия.

  • <gk_turrets>0</gk_turrets>

    ГК турели.

</HolderProperties>

Конец раздела вооружения.

<engine_sound>Engine-Bigship.wav</engine_sound>

Звук двигателя.

<engine_start_sound/>

Звук, проигрываемый при начале движения корабля (рядом с двигателями).

_____________________________________________
ТЕГИ, КОТОРЫЕ ЕСТЬ ТОЛЬКО У БИГШИПОВ И СТАНЦИЙ:

<destroyed_mesh_name/>

Файл IMD (3D модель) разрушенного (сбитого корабля).

<cargoCapacity>3000</cargoCapacity>

Объем трюма. В ГВ значения не играет. Актуален в ЗВ2.

_____________________________________________
ТЕГИ, КОТОРЫЕ ЕСТЬ ТОЛЬКО У БИГШИПОВ:

Подраздел ангаров:

<BigShipHangar>
  • <hangar_count>6</hangar_count>

    Количество ангаров.

  • <max_hangar_count>6</max_hangar_count>

    Максимальное количество ангаров (в чем разница с верхним тегом – без понятия).

</BigShipHangar>

Конец раздела ангаров.

_____________________________________________
ТЕГИ, КОТОРЫЕ ЕСТЬ ТОЛЬКО У ИСТРЕБИТЕЛЕЙ:

<level>5</level>

Поколение истреба, от 1 до бесконечности (все, что больше 5, скриптами не воспринимается, и пилот не сможет сесть за истреб).

_____________________________________________

</BigShip>

Описание корабля закрыто.

Примечание: Больше пушечно-ракетных слотов, чем имеется в IMD, нельзя добавить. Лишние будут нерабочими. Имейте это в виду.

Добавление своего корабля в игру

У вас должны быть в наличии 3D модельки игровым форматом IMD (он делается так: в программе моделирования (например, 3DS Max) необходимо иметь плагин, который напрямую конвертирует в IMD. Как найду, выложу тут. А так же текстуры (в основном DDS, можно TGA, PNG…) для этой модели, которая уже оптимизирована под эту модель.
Так же нужен инструмент по работе с игровыми моделями – IMD Editor.

Ссылки:

  1. IMD Editor v3[sites.google.com]
  2. SW Editor by Star Rover Team[vk.com] (альтернатива с интуитивно-понятным интерфейсом)
  3. Плагин для 3DS Max для экспорта IMD моделей[sites.google.com]
  4. Плагин nVidia для фотошопа для DDS текстур[developer.nvidia.com]
  5. Старый набор от nVidia для работы с текстурами DDS[developer.nvidia.com]

Основное, чего игре “хватит” для корректной работы
  1. создаем по вышеизложенному плану описание в carcasses.xml. Вписываем в mesh_name имя файла 3D модели.
  2. отправляем 3D модель в папку DATAObject и текстуру DATATexture
  3. используйте всю свою фантазию, чтобы создать описания в файлах m_carcasses.loc или s_carcasses.loc. Заголовки описаний делайте такими же, как вы прописали в carcasses.xml, например, #M_Name_My_Fighter. Что-то не так – в игре увидите сообщение:
    Not found string: #M_Name_My_Fighter
  4. добавьте в DATATEXTUREInterfaceCarcassNNN картинки истребителей в ангаре и магазине, с названиями, указанными во flat_image. Ширина (в пикселях) должна быть равной названию той папки, куда помещаете рисунки. Рисунки должны находиться во всех трех папках, иначе вы можете в разных местах увидеть вместо картинок белые квадраты.
  5. добавляете в DATATEXTUREInterfaceCarcassSlots DDS-картинку размером 1024*1024, там должна быть схема (или большой рисунок) этого корабля. Чтобы отображались слоты, нужно создать в этой же папке файл с названием, указанным вами в <mapping_name> названием и расширением INI.

СЛОТЫ (дополнительно)

Как уже выше сказано, слоты – ячейки для оборудования, куда можно засунуть и вынуть модуль из корабля. В папке slots лежит 2 типа файлов (кроме системного ships.tuv): файлы с расширением dds (рисунки корабля, открывать редакторами с поддержкой данных форматов), и ini (сами слоты в текстовом виде, открываются любым текстовым редактором). Нам понадобятся оба файла, причем ини файл – больше всех.

ВНИМАНИЕ: к ЛЮБОМУ добавленному слоту НЕОБХОДИМО прописать новые ТТХ для корабля в Carcasses.xml!

Для начала, создадим новый текстовый файл, изменив его расширение на ini и обозвав таким именем, чтобы оно совпадало с именем в теге <mapping_name>. Я на примере разберу “Буревестник”:
 
Открываем его и видим следующие параметры. Основное на скриншоте:
 
Итак, мы видим необходимую информацию. Для начала определимся с картинкой корабля, вернее, где она указана. По параметру name = ships02 мы можем определить файл dds, где она лежит. Открываем его (открывать редактором, поддерживающим этот формат, или фотошопом с плагином dds от nVidia). Остальная информация на скриншоте. 
ВНИМАНИЕ: параметры Y могут отличаться. Это связано с тем, что движок автоматически сам подстраивает размер под данные координаты. Поэтому вы можете откинуть по 100 пикселей, если хотите.
 
Так вот. Если хотите добавить систему, вам необходимо просто добавить следующие строки:

[slotX1] type=SystemModule refpoint=systemX2 image_coord=X Y text_coord=X Y text_aligment=RIGHT

X1 = порядковый номер слота
X2 = порядковый номер системного рефпоинта
X, Y = соответственно, координаты по горизонтали и вертикали слота/текста
 
Вот так у меня получилось:
 
В игре же:
 
Теперь об оружии и прочем. Нам понадобится ИМД эдитор (или SW editor от команды Star Rover). Кидаем его в папку с игрой (можно в другое место, но в случае со SWE текстуры не прогрузятся и вы будете лицезреть белую модель), открываем ИМД модель (лежат в Data/Object) и смотрим.
 
Красным цветом отмечена пушка, оранжевым – ракета. Отсюда смотрим соответствие. Если оно есть, то слот будет принимать пушку/ракету и др. Если нет, то в игре будет сообщение: “Монтаж устройства в данный разъем невозможен!”
 
Добавим пушку на Буревестник раскраски игрока и назовем ее, как CENTER_2 (регистр не имеет значения, но лучше писать в 2х местах одинаково).
ВНИМАНИЕ: если хотите добавлять что-либо в этих редакторах, после КАЖДОГО изменения нажимайте ENTER.
 
Не забудем прописать новые ТТХ в Carcasses.xml и заходим в игру, чтобы проверить. Сразу скажу: если ошиблись с координатами, то ничего страшного. Но для исправления ошибки вам придется каждый раз перезагружать игру (ini файлы грузятся только один раз при запуске). Все работает.

Проделываете тоже самое со всеми орудиями.

ПРИМЕЧАНИЕ: если вы хотите модифицировать истребитель, который уже находится у вас в ангаре базы, и после изменений его ТТХ в игре они не отобразились, вам необходимо перейти в другую локацию, вынув корабль из ангара и поместив его в трюм. Приведу пример из своего опыта. Я хотел уменьшить у модифицированного под себя Змея mk2 с 4 до 2-ух систем, чтоб типа было, как в оригинале, все дела… Но при изменений его ТТХ я его забыл вынуть из трюма, да еще и забыл убрать с него все системы. В итоге при переходе из локации в другую у меня благополучно вылетела игра. Поэтому, лучше перестраховываться и не наступать на подобные грабли (тоже самое касается всяких бэкапов файлов, если не уверены, что изменения, которые вы вносите, не приведут к таким вот последствиям).

На этом знакомство со слотами завершено. Удачных вам поделок!

Добавление корабля в скрипты игры (его появление в игре)

Добавленный, или существующий корабль необходимо добавить в скрипты игры, чтобы его можно было встретить в космосе. Есть 3 способа это сделать:

  1. Добавить в трюм базы в начале игры/в какую-нибудь миссию.
  2. Добавить корабль в магазин(ы).
  3. Добавить неписишному игроку (в патрули системы, например).

На самом деле, есть много способов добавления, но я разберу основные.

Добавляем корабль в трюм базы

Если хотите добавить корабль в начало игры, идите по пути Data/Scripts в файл InitTeamScript.script. Добавляете туда строки:

mothership:AddShipToInventory(ship,quantity)
Параметр
Расшифровка
ship
Название корабля в Carcasses.xml. Определяется, как СТРОКА, поэтому название ОБЯЗАТЕЛЬНО с кавычками!
quantity
Количество

ВАЖНО: строку писать ПОСЛЕ строки mothership = CreateCarcass(…) !!!

То же самое с квестами, но тогда придется редактировать файлы script в папке(ах) Quests/mission_x

Добавляем корабль в магазин

Разберем ПРОСТОЙ способ добавления корабля в магазин. Более сложный трогать не буду, ибо вам проще юзать этот вариант (иной предполагает редактирование глобальных массивов и соотношение его товаров по количеству, что может понять не каждый).

Идем по этому же пути в файл InitTradeSystem.script и в самом конце добавляем строки

local Market=GetBlackMarket(location) (или GetWhiteMarket(location) для обычного магазина ) Market:ShipGoodsState(ship, quantuty, k_sell, k_buy);
Параметр
Расшифровка
location
Название локации. Определяется, как СТРОКА, поэтому название ОБЯЗАТЕЛЬНО с кавычками!
ship
Название корабля в Carcasses.xml. Определяется, как СТРОКА, поэтому название ОБЯЗАТЕЛЬНО с кавычками!
quantity
Количество
k_sell
Коэффициент цены продажи. Обычно высокий. Чем выше, тем дешевле можно продать.
k_buy
Коэффициент цены покупки. Обычно низкий. Чем ниже, тем дороже можно купить.

Обычно k_sell существует (исходя из примеров в этом файле) в диапазоне от 1 до 2, k_buy – от 0.8 до 0.2. Если прописать НУЛЕВЫЕ коэффициенты, то цена корабля упадет до нуля (некая халява XD).

ВАЖНО: изменения вступят в силу ТОЛЬКО после начала новой игры.

Добавляем корабль в генерацию в космосе

Тут тоже ничего сложного нет, просто придерживайтесь примеров в файле Create_flight_2.script (лежит в Data/Scripts/include)

Есть массивы кораблей, скажем, Патруля:

Pat_Fighters = { {{“Stormcrow_pat1″,2,”A”},{“Excalibur_pat1″,6,”D”},{“Hatchet_pat1″,6,”M”}}, }

Мы видим пример одного из звеньев. Первый параметр, собсно, сам корабль, второй – порядковый номер пилота, который находится в массивах Pat_Pilots, USS_Pilots, Vks_Pilots и т.д, третий параметр – выполняемая задача в звене. Каждая буква расписана в этом же файле, все интуитивно понятно 🙂

Просто меняем один из них на название корабля из Carcasses.xml. Если хотите, вы можете добавить уже оснащенный корабль. Название брать из ShipDescriptions.xml. Например, добавим сюда патрульную пантеру без модулей (Panthera_pat0):

{{“Panthera_pat0″,2,”A”},{“Excalibur_pat1″,6,”D”},{“Hatchet_pat1″,6,”M”}},

Мы добавили пантеру в состав конкретно ЭТОГО звена. Если хотите, вы можете добавить НОВЫЙ корабль в звено:

{{“Panthera_pat0″,2,”A”},{“Stormcrow_pat1″,2,”A”},{“Excalibur_pat1″,6,”D”},{“Hatchet_pat1″,6,”M”}},

Таким образом можно добавить не только истребитель, но и большой корабль. Принцип добавления тот же.

ВАЖНО: самое главное тут – внимательность. Иначе получите ошибку в игре (непрогрузка в локацию, или прочее).

Приобретение базы

2 способа:

  1. Добавление базы за место существующей в квесты игры. Миссии, где меняется база:
    • mission_2 (Жизнь торговца)
    • mission_4_1 (Неожиданная встреча, с наемниками)
    • mission_4_2 (Неожиданная встреча, с пиратами)
    • mission_4_5 (Аэрография)
    • mission_7g (Новая база)
    • mission_13a (b, c, d, e) (Спасение друга). ВНИМАНИЕ! Стоит блокировка на мазершип! Если ее не поменять, то при выходе из локации будет гейм овер!
    • mission_14a (Серые кардиналы за ВКС)
    • mission_15b (Точки над I, возможность сесть на Большой транспорт, затем на Лев)
    • mission_15d_1 (Расставляя акценты, в Приене)
    • mission_15e (Возвращение Берсерков)
    • mission_19a (Обновка)

    Менять параметры в строках NewFlight(groub,sign,ship,…), то есть, вместо ship – название базы (в КАВЫЧКАХ!)

  2. Добавление в генерацию в космосе у патрулей (см. способ для истребителей).

На этом большой раздел по разбору кораблей подошел к концу. Буду очень рад, если данные страницы текста вам помогут с манипуляциями кораблей 😉

SteamSolo.com