View Single Post
Old 01-27-2010, 08:39 PM   #23
Ten
Главнокомандующийp2ambassador
 
Ten's Avatar
 
Faction:
Стражи Садов Кадеша

Join Date: Feb 2004
Location: Great Nebula
Posts: 2,514
Re: [HW:C] Вопросы по модостроительству

Прохождение за кушан/таидан? Или альтернативная история без притеснений крупных киитов мелкими, в силу чего последние свободно могут использовать уже готовые и зарекомендовавшие себя решения, а не изобретать велосипед?

Для начала – как и в ХВ1, в ХВК все корабли рассортированы по папкам в зависимости от расы:
  • race_beast – неуклюжий плюшевый зверёк со странным именем (с);
  • race_derelict – разнокалиберные обломки и прочий космический мусор техногенного происхождения;
  • race_kushan – кушане, сиречь хигаряне;
  • race_p1 – туранские рейдеры;
  • race_sectсектоиды сектанты Сомтау собственной персоной
  • race_taidan – имперские и республиканские корабли таидан в ассортименте;
  • race_traders – Бентузи, Фаал-Корумы, исследовательские станции и прочие корабли, не попавшие в одну из предыдущих категорий.
Далее. За каждым кораблём в этих папках закреплены файлы следующих расширений: .shp (конфиг), .lod (пути к моделям разных уровней детализации) и .mad (при наличии у корабля анимации), а также папка с одноимённым названием, в которой, собственно, и хранятся модели с текстурами. Поскольку количество кораблей на расу и их названия жёстко задаются в экзешнике, придётся перезаписывать конфиги, а также папку с геометрией, т.к. горизонтальные двоеточия (..) для выхода на уровень выше не прокатят.


Если браться за перехватчик, для начала в папке с игрой создаём папку race_sect и в неё из папки race_kushan, что в Cataclysm.big, копируем файлы kheavyinterceptor.shp, kheavyinterceptor.lod, ну и саму папку kheavyinterceptor. После этого необходимо открыть файл kheavyinterceptor.shp и слегонца его подправить:
  1. Прежде всего нужно сменить название секции конфига в первой строчке:

    Code:
    [sAcolyte]
  2. Аналогично необходимо изменить название lod-файла и путь к mex-файлу (в последнем хранятся описатели опорных точек модели):

    Code:
    LODFile                             sAcolyte.lod
    pMexData                            sAcolyte\Rl0\LOD0\kHeavyInterceptor.mex
    Кстати, сам mex-файл можно не переименовывать, главное правильно указать путь к нему.
  3. Поскольку в двиг зашито, что аколит собирается в АКВ, необходимо добавить к перехватчику точки стыковки и её анимацию. Для этого в оригинальном sacolyte.shp ищем раздел Dock Points и выходим на следующий кусок текста:

    Code:
    ;Dock Points
    ;=---------=
    NUMBER_OF_DOCK_POINTS           1
    
    ; format is DockPoint           name,type,flyawaydist,mindist,maxdist,[headingdirection,updirection]  (0=up,1=right,2=forward,4=down,5=left,6=back) for direction
    DockPoint                       Link,DPT_Link,185,185,200,0,2
    Заменяем им соответствующий раздел в новом файле. Также ищем раздел Animation в конце конфига аколита, получаем:

    Code:
    ;Animation
    ;=--------=
    NUMBER_OF_ANIMS	4
    
    ANIM	0	CombatIn
    ANIM	1	CombatOut
    ANIM	2	Link
    ANIM	3	Unlink
    Переносим эти строчки в раздел Animation конфига перехватчика. Конечно, необходимых для анимации объектов вроде ракетниц у него нет, но при ошибках в анимации движок её просто не будет проигрывать, а вот при её отсутствии успешно полетит в направлении форточки, так что прописывать всё равно придётся. Так же, как выяснилось опытным путём, понадобится указать параметр linkDistance, иначе перехватчики при попытке сборки в АКВ будут вести себя не очень-то прилично. В разделе Special ищем строчку

    Code:
    linkDistance                        50.0
    и добавляем её в раздел Special конфига перехватчика.
  4. Теперь пушки, а конкретно – ракетницы. Хотя опорных точек в mex-файле перехватчика для них не предусмотрено, игра «знает» об их наличии, поэтому при залпе вылетает самостоятельно, причём опять в форточку. Чтобы вылетали всё-таки ракеты, нужно скопировать описатели пушек из конфига аколита (раздел Weapons) и поместить их после описания пушек перехватчика, а параметр NUMBER_OF_GUNS (общее количество орудий) выставить в 4.
  5. Ну и по мелочи – неплохо бы указать, что корабль модернизируется в ангаре (разработчики хваки почему-то посчитали, что «Клинок» – само совершенство, и дорабатывать его больше никогда не придётся ). Для этого ищем раздел Basic Ship Stats и добавляем в его конец строчку из исходного sacolyte.shp:

    Code:
    UpgradeByDocking					TRUE

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

;Название Раздела
;=--------------=

С настройкой shp-файла покончено. Переименовываем kheavyinterceptor.shp в sacolyte.shp, kheavyinterceptor.lod в sacolyte.lod, а папку kheavyinterceptor в sacolyte (это можно было сделать сразу, но возникла бы путаница в названиях старого и нового конфигов, поэтому с переименованием решил подождать).


Теперь нужно подкорректировать lod-файл, в котором хранятся пути к моделям различной детализации. Как и в случае с mex-файлом, имена geo/peo-файлов можно не изменять, главное чтобы к ним правильно был прописан путь, т.е. игра смогла их найти:

Code:
[Auto-Generated LOD file]
pointColor                  255,0,0


type0                       MESH
pMeshFile0                  sAcolyte\Rl0\LOD0\kHeavyInterceptor.geo
mOn0                        1.0
bOn0                        106531
mOff0                       1.0
bOff0                       118368

type1                       MESH
pMeshFile1                  sAcolyte\Rl0\LOD1\kHeavyInterceptor.geo
mOn1                        1.0
bOn1                        377243
mOff1                       1.0
bOff1                       419159

type2                       MESH
pMeshFile2                  sAcolyte\Rl0\LOD2\kHeavyInterceptor.geo
mOn2                        1.0
bOn2                        1883515
mOff2                       1.0
bOff2                       2092795

type3                       MESH
pMeshFile3                  sAcolyte\Rl0\LOD3\kHeavyInterceptor.geo
mOn3                        1.0
bOn3                        4105586
mOff3                       1.0
bOff3                       4561762

type4                       MESH
pMeshFile4                  sAcolyte\Rl0\LOD4\kHeavyInterceptor.geo
mOn4                        1.0
bOn4                        390581984
mOff4                       1.0
bOff4                       433980000
При желании хоть все пять путей можно привязать к одному и тому же файлу геометрии, тогда корабль будет куда лучше смотреться при отдалении камеры.


И последний штрих – кэш текстур. Для экономии памяти и возможности использовать одну текстуру для нескольких моделей они хранятся отдельно, кроме того, в игре есть листниг текстур: файл textures.ll, в котором хранятся их имена, размеры по горизонтали и вертикали, контрольные суммы – в общем, вся необходимая информация, чтобы было легко искать дубли и не грузить лишнего в память (не забываем, что двиг первого ХВ начал разрабатываться в 1997 году, когда возможности настольных компьютеров в плане обработки 3D-графики были весьма скромными). Судя по всему, размеры текстур тоже подхватывается из этого файла (а не из lif-ок, в которых они хранятся), и если он не совпадает с реальным, текстура накладывается неправильно и смотрится прескверно. Стало быть, записи листинга необходимо либо изменять (это придётся делать ручками, т.к. листинг создаётся на этапе преобразования текстур из psd в lif), либо удалять, что приведёт лишь к незаметному падению производительности.

Для добавления/удаления/просмотра записей в textures.ll есть реликовская утилита liflist.exe, слегка модифицированная для ХВК, чтобы обойти макс. ограничение на количество текстур в листинге (12000). Для неё понадобится список текстур, который можно сделать с помощью команды dir, дописав руками недостающее, либо несколькими щелчками в TEXTURES.LL Tool v2.0.0 от Spooky. Запускаем её, открываем файл textures.ll (он лежит в корне Cataclysm.big), пока идёт загрузка, переходим на вкладку «Texture Removal», ждём окончания, переключателем устанавливаем версию для Cataclysm, ставим галочку напротив «Race Sect» и жмём кнопку «Make Removal.mif». Ждём, пока количество обработанных записей с средней «колонке» не будет равно их общему количеству, после чего получаем искомый Removal.mif со списком текстур, записи о которых и будут удалены из textures.ll. В принципе, для замены аколита на перехватчик в mif-файле можно оставить лишь следующие строчки:

Code:
TEXTURES += race_sect\sacolyte\rl0\LOD0\page0.lif
TEXTURES += race_sect\sacolyte\rl0\LOD0\page1.lif
TEXTURES += race_sect\sacolyte\rl0\LOD0\page2.lif
TEXTURES += race_sect\sacolyte\rl0\LOD1\page0.lif
TEXTURES += race_sect\sacolyte\rl0\LOD1\page1.lif
TEXTURES += race_sect\sacolyte\rl0\LOD1\page2.lif
TEXTURES += race_sect\sacolyte\rl0\LOD2\page0.lif
TEXTURES += race_sect\sacolyte\rl0\LOD2\page1.lif
TEXTURES += race_sect\sacolyte\rl0\LOD3\page0.lif
TEXTURES += race_sect\sacolyte\rl0\LOD3\page1.lif
TEXTURES += race_sect\sacolyte\rl0\LOD4\page0.lif
TEXTURES += race_sect\sacolyte\rl0\LOD4\page1.lif
(я вообще любитель тонкой настройки всего и вся ), но для дальнейших экспериментов с сектантами лучше удалить из листинга все их текстуры – так много проще будет отлавливать возможные ошибки (вопреки ключу ХВК не пишет на диск журнал отладки).

Вернёмся к liflist, которым и будем править листинг. Эта утилита консольная, для того, чтобы ею воспользоваться, необходимо в обязательном порядке поместить файлы textures.ll и Removal.mif в папку DataSrc, после чего запустить программу со следующими параметрами:

Code:
liflist.exe S DataSrc\textures.ll DataSrc\Removal.mif
Если не дружите с консолью (хотя крайне желательно – без владения компьютером на «продвинутом» уровне даже моддингом заниматься практически безсмысленно), можно рядом с liflist.exe в блокноте создать файл liflist.bat и скопировав в него строку запуска, а во второй строке написав команду pause, и запустить. После выполнения программы все записи в mif-файле будут удалены из textures.ll. Кладём его в корень папки с ХВК и запускаем игру.

Собственно, на этом всё – теперь вместо аколита получили кушанский «Блэйд», который, тем не менее, умеет собираться в АКВ (как бы парадоксально это не выглядело) и из ниоткуда пулять ракетами


Аналогичным образом мультибим заменяется на ионник, разве что возни меньше, т.к. у кушанских фрегатов нет анимации, да и в эсминцы они, к счастью, не собираются. Зато толку от них ноль: мультибимское фигуряние, видимо, тоже зашито в движок, в итоге обновлённые фрегаты роят-крутятся и практически не стреляют. В общем, если хочешь, пробуй, должно получиться, только не забудь про параметры MultiBeamRangeRatio, repositionTime, circleRange и fullMovementFreedom раздела Special, также придётся поменять тип / размер пушки с GUN_Fixed / GUNSIZE_LARGE на GUN_HiddenGimble / GUNSIZE_SMALL, т.к. иначе фрегат стрелять отказывается категорически.

В качестве примера – готовые ионник и аколит (распаковать в папку с игрой):
Attached Files
File Type: rar hwc_intion_transfer_test.rar (329.1 KB, 18 views)

Last edited by Ten : 01-27-2010 at 09:12 PM.
Ten is offline   Reply With Quote