Homeworld Remastered Collection

Homeworld Remastered Collection

Not enough ratings
日本人MOD製作者向けガイド③
By dengun
HWRMの日本人MOD製作者向けのガイドとなります。
ワークショップで公開中のA-test Template MODを利用していきます。
③では遊びながら触ってみるパラメーター変更編です。
   
Award
Favorite
Favorited
Unfavorite
shipファイルのパラメーター
shipフォルダに格納されている、
各種ユニットのshipファイルパラメーターについての簡単な解説です。
shipファイルはMODを弄る上で一番簡単で、一番分かりやすい変化が得られる場所です。
それらを弄りながら遊ぶ事は将来的にMODを弄るのにも役立つのです。


まずは、aaa_interceptorのshipファイルを見てみましょう。
NewShipType = StartShipConfig() NewShipType.displayedName = "Interceptor (x5)" NewShipType.sobDescription = "Anti-Fighter/Corvet" NewShipType.maxhealth = 50 NewShipType.regentime = 0 NewShipType.minRegenTime = 0 NewShipType.sideArmourDamage = 1 NewShipType.rearArmourDamage = 1 NewShipType.isTransferable = 1 NewShipType.useEngagementRanges = 0 NewShipType.unitCapsNumber = 3 NewShipType.SquadronSize = 5 NewShipType.formationSpacing = 30 NewShipType.passiveFormation = "Spear" NewShipType.defensiveFormation = "Delta" NewShipType.aggressiveFormation = "Claw" NewShipType.mass = 7 NewShipType.collisionMultiplier = 1.3 NewShipType.thrusterMaxSpeed = 270 NewShipType.mainEngineMaxSpeed = 315 NewShipType.rotationMaxSpeed = 100 NewShipType.thrusterAccelTime = 2 NewShipType.thrusterBrakeTime = 1 NewShipType.mainEngineAccelTime = 2 NewShipType.mainEngineBrakeTime = 1 NewShipType.rotationAccelTime = 0.6 NewShipType.rotationBrakeTime = 0.3 NewShipType.thrusterUsage = 0.25 NewShipType.accelerationAngle = 170 NewShipType.mirrorAngle = 30 NewShipType.secondaryTurnAngle = 90 NewShipType.maxBankingAmount = 85 NewShipType.descendPitch = 0 NewShipType.goalReachEpsilon = 25 NewShipType.slideMoveRange = 0 NewShipType.controllerType = "Ship" NewShipType.tumbleStaticX = 10 NewShipType.tumbleStaticY = 20 NewShipType.tumbleStaticZ = 5 NewShipType.tumbleDynamicX = 2 NewShipType.tumbleDynamicY = 10 NewShipType.tumbleDynamicZ = 5 NewShipType.tumbleSpecialDynamicX = 800 NewShipType.tumbleSpecialDynamicY = 1000 NewShipType.tumbleSpecialDynamicZ = 700 NewShipType.relativeMoveFactor = 6 NewShipType.swayUpdateTime = 2 NewShipType.swayOffsetRandomX = 10 NewShipType.swayOffsetRandomY = 10 NewShipType.swayOffsetRandomZ = 10 NewShipType.swayBobbingFactor = 0.05 NewShipType.swayRotateFactor = 0.1 NewShipType.dustCloudDamageTime = 160 NewShipType.nebulaDamageTime = 30 NewShipType.MinimalFamilyToFindPathAround = "SuperCap" NewShipType.mirrorAboveManeuver = "ImmelMann_speedy, OneEightyDegRightTurn, OneEightyDegLeftTurn, ImmelMann_speedy, ImmelMann_speedy, ImmelMann_speedy" NewShipType.mirrorBelowManeuver = "Split_S_speedy, OneEightyDegRightTurn, OneEightyDegLeftTurn, Split_S_speedy, Split_S_speedy, Split_S_speedy" NewShipType.specialTurnLeftManeuver = "NinetyDegLeftTurn, None, None" NewShipType.specialTurnRightManeuver = "NinetyDegRightTurn, None, None" NewShipType.testManeuver1 = "RollCW" NewShipType.testManeuver2 = "RollCCW" NewShipType.testManeuver3 = "Loop" NewShipType.BuildFamily = "Fighter_aaa" NewShipType.AttackFamily = "Fighter" NewShipType.DockFamily = "Fighter" NewShipType.AvoidanceFamily = "Strikecraft" NewShipType.DisplayFamily = "Fighter" NewShipType.AutoFormationFamily = "Fighter" NewShipType.CollisionFamily = "Small" NewShipType.ArmourFamily = "Unarmoured" NewShipType.UnitCapsFamily = "Fighter" NewShipType.fighterValue = 5 NewShipType.corvetteValue = 0 NewShipType.frigateValue = 0 NewShipType.neutralValue = 0 NewShipType.antiFighterValue = 16 NewShipType.antiCorvetteValue = 12 NewShipType.antiFrigateValue = 0 NewShipType.totalValue = 5 NewShipType.buildCost = 400 NewShipType.buildTime = 28 NewShipType.buildPriorityOrder = 20 NewShipType.retaliationRange = 4500 NewShipType.retaliationDistanceFromGoal = 160 NewShipType.visualRange = 1000 NewShipType.prmSensorRange = 2500 NewShipType.secSensorRange = 3000 NewShipType.detectionStrength = 1 NewShipType.TOIcon = "Triangle" NewShipType.TOScale = 1 NewShipType.TODistanceFade0 = 7000 NewShipType.TODistanceDisappear0 = 5000 NewShipType.TODistanceFade1 = 2500 NewShipType.TODistanceDisappear1 = 2000 NewShipType.TODistanceFade2 = 12000 NewShipType.TODistanceDisappear2 = 38500 NewShipType.TOGroupScale = 1.5 NewShipType.TOGroupMergeSize = 0 NewShipType.mouseOverMinFadeSize = 0.045 NewShipType.mouseOverMaxFadeSize = 0.1 NewShipType.healthBarStyle = 0 NewShipType.nlips = 0.00045 NewShipType.nlipsRange = 4000 NewShipType.nlipsFar = 0.0002 NewShipType.nlipsFarRange = 10000 NewShipType.SMRepresentation = "HardDot" NewShipType.meshRenderLimit = 10400 NewShipType.dotRenderLimit = 10 NewShipType.visibleInSecondary = 1 NewShipType.minLOD = 0.25 NewShipType.goblinsStartFade = 200 NewShipType.goblinsOff = 200 NewShipType.upLOD = 300 NewShipType.upLOD = 550 NewShipType.upLOD = 7700 NewShipType.downLOD = 315 NewShipType.downLOD = 565 NewShipType.downLOD = 7715 NewShipType.minimumZoomFactor = 0.75 NewShipType.selectionLimit = 60000 NewShipType.preciseATILimit = 0 NewShipType.selectionPriority = 75 NewShipType.militaryUnit = 1 addAbility(NewShipType, "MoveCommand", 1, 0) addAbility(NewShipType, "CanDock", 1, 1) NewShipType.dockTimeBetweenTwoFormations = 0.5 NewShipType.dockTimeBeforeStart = 0.5 NewShipType.dockNrOfShipsInDockFormation = 1 NewShipType.dockFormation = "dockline" NewShipType.queueFormation = "n_delta" NewShipType.ignoreRaceWhenDocking = 0 addAbility(NewShipType, "CanLaunch") NewShipType.launchTimeBetweenTwoFormations = 0.5 NewShipType.launchTimeBeforeStart = 0.5 NewShipType.launchNrOfShipsInDockFormation = 1 NewShipType.launchFormation = "n_delta" addAbility(NewShipType, "ParadeCommand", 1) addAbility(NewShipType, "WaypointMove") addAbility(NewShipType,"CanAttack",1,5,1,0,0.35,1,"Fighter, Corvette, Frigate, Utility, SmallCapitalShip, BigCapitalShip, Mothership","FlyBy_Interceptor_vs_Frigate",{ Fighter = "Flyby_Interceptor_vs_Fighter", },{ SubSystem = "TopAttack_Interceptor_vs_Subsystem", },{ SmallCapitalShip = "Flyby_Interceptor_vs_CapShip", },{ BigCapitalShip = "Flyby_Interceptor_vs_CapShip", },{ Mothership = "Flyby_Interceptor_vs_Mothership", },{ ResourceLarge = "Flyby_Interceptor_vs_ResourceLarge", }) addAbility(NewShipType, "GuardCommand", 1, 3000, 500) addAbility(NewShipType, "HyperspaceViaGateCommand", 1, 3, 1, 0.3) addAbility(NewShipType, "RetireAbility", 0, 0) LoadModel(NewShipType,1) StartShipWeaponConfig(NewShipType,"AutoGun","Weapon_Gun","Fire") addShield(NewShipType, "EMP", 75, 20) NewShipType.sobDieTime = 0.1 NewShipType.sobSpecialDieTime = 2 NewShipType.specialDeathSpeed = 40 NewShipType.chanceOfSpecialDeath = 0.25 NewShipType.deadSobFadeTime = 0 setEngineBurn(NewShipType,7,0.9,1,1,0,0.7,0.1,20) setEngineTrail(NewShipType,0,4,"trail_ribbon.tga",0.15,0.5,0.025,2); setEngineTrail(NewShipType,1,4,"trail_ribbon.tga",0.15,0.5,0.025,2); loadShipPatchList(NewShipType,"data:sound/sfx/ship/Hiigaran/Fighter/",0,"HScoutEng","")

感の良い人、英語の出来る人ならばこれだけで大体の事が理解できると思います。
いくつかの項目は、その文字の通りに作用しています。

shipファイルのガイドと情報の確保
↓では、参考サイトを引用していきます。
http://hw2wiki.net/wiki.hw2.info/VariableShip.html
このリンクは旧HW2の情報サイトです。
旧HW2の情報は現在でも非常に有用です。
もちろん、変更が加えられている部分もありますがそれでも役立ちます。


では、このサイトを丸ごとWeb翻訳にかけます。
https://translate.google.co.jp/translate?sl=en&tl=ja&js=y&prev=_t&hl=ja&ie=UTF-8&u=http%3A%2F%2Fhw2wiki.net%2Fwiki.hw2.info%2FVariableShip.html&edit-text=&act=url
↑グーグル先生のWeb翻訳機能は本当に助かります。
本当は書き出したいのですが、文字制限数で全部を書けません。
完全な日本語では無いものの、一応の目星がつけられる形になっています。


そして、Webの情報は永遠では有りません。
めぼしい情報を見つけたらそれを全て翻訳機にかけて、
原文と一緒に大事に保存しておきましょう。


この作業は中々馬鹿に出来ないもので、こうやって保存した資料が、
実際に数日後、数ヵ月後、数年後に役立つ場合もあります。
この手の参考資料もMODデータと同様にバックアップを取ってると心強いです。



実演、パラメーターを変更してみましょう!
aaa_interceptor.shipを使って実際にパラメーターを変更してみましょう。
まず、簡単な部分としてスピードの変更です。
NewShipType.thrusterMaxSpeed = 270 NewShipType.mainEngineMaxSpeed = 315 NewShipType.rotationMaxSpeed = 100

これが現在のスピードパラメーターですが、思い切って0を一つ増やしてみましょう。
NewShipType.thrusterMaxSpeed = 2700 NewShipType.mainEngineMaxSpeed = 3150 NewShipType.rotationMaxSpeed = 1000
これで貴方のインターセプターは通常の10倍の機動性を手に入れる事に成功しました。


では、次に生産コストと時間を削減してみましょう。
NewShipType.buildCost = 400 NewShipType.buildTime = 28

夢の大量生産はこれくらいしないと!
NewShipType.buildCost = 1 NewShipType.buildTime = 3
と、いう事でコストは1で、生産時間は3秒です。
ヒャッハー!


では少し変化球と行きましょう。
現在インターセプターは5機編成となっています。
少ないと寂しいよね・・・と、いう事で20機編成で行きましょう。
NewShipType.SquadronSize = 5

NewShipType.SquadronSize = 20


さて、この改造がどんな結果をもたらしたかというと・・・
MOD起動専用のショートカットで確認してみましょう!

大量に吐き出されるユニット。


驚愕の20機編成


弾丸以上のスピードと機動力を有し


もはやフリゲートのタレットは追従不能


中々愉快な結果になりましたwww
まずはこの辺のお遊びはオススメです。
ただし、
やる前は必ずバックアップを。
文字列の不足や誤挿入はクラッシュエラーなどを引き起こす為です。



Abilityについて
shipファイルの中にはaddAbilityから始る文字列があります。
これはユニットの能力を管理するコードで、
基本的な行動である移動や攻撃の他に、特殊な行動、能力など様々なものを設定できます。

と、言う訳で定番の参考サイト。
http://hw2bsg.org/wiki.hw2.info/FunctionaddAbility%3Fshow_comments=1.html

そして、翻訳。
https://translate.google.co.jp/translate?sl=en&tl=ja&js=y&prev=_t&hl=ja&ie=UTF-8&u=http%3A%2F%2Fhw2bsg.org%2Fwiki.hw2.info%2FFunctionaddAbility%253Fshow_comments%3D1.html&edit-text=&act=url


基本的には定番能力に関しては弄る部分は少ないですが、
細かなカスタマイズに応じて編集できます。


と、言う訳で実践してみましょう。
DefenseFieldAbilityあたりが手軽でしょうね。

aaa_interceptor.shipにはディフェンスシールドのコードは入っていません。
なので適当な場所に挿入していきます。
addAbility(NewShipType, "DefenseFieldAbility", 1, 0, 50, 600, 5, 1, 0.25, 125, "defensefield_sphere_spray")
いちいち手書きする必要はありません。
他のユニットのコードをコピペして数値だけカスタマイズします。
そして結果、無事にディフェンスシールドの展開が可能になりました。



このようにお手軽に能力は追加可能です。
ただし、上に示した資料は古いものです。
HWRMになってからHW1ユニットが統合されaddAbility関係に追加や修正などが見られます。
資料はあくまで方法論とヒントとして捉え、
実際に実装する際は必ず現状のAbilityコードと比較するようにすれば間違いないでしょう。




武器コードについての補足
まず参考情報
http://hw2wiki.net/wiki.hw2.info/FunctionStartShipWeaponConfig.html

そして翻訳
https://translate.google.co.jp/translate?hl=ja&sl=en&u=http://hw2wiki.net/wiki.hw2.info/FunctionStartShipWeaponConfig.html&prev=search


StartShipWeaponConfig(NewShipType,"AutoGun","Weapon_Gun","Fire")

簡単な意味
StartShipWeaponConfig(NewShipType,"wepnファイル名","HOD内で設定されてるジョイント座標","そのユニットのeventsファイルで使用されるアニメーション名")

HWで使用される武装はおおまかに、固定武装、砲塔武装の2種類が存在します。
この2種は武器性能設定ファイルである「wepnファイル」で定義されているのですが、
更にHODファイルでも、武装ジョイントという座標情報でも2種類に分けてあります。
まず、武装をユニットに搭載する場合は、その整合性を整えないといけません。

例で示したコードは
AutoGunという武器をWeapon_Gunの座標から発射。連動するイベントアニメーション名はFire。

となります。
この辺のお遊びは、wepnファイルとeventsファイルの仕組みを理解した上で触ると面白いです。
船を自作する際には必ず触れる部分でもありますので、また解説していきます。

ちょっとしたお遊びの追加コード。
StartShipWeaponConfig(NewShipType,"p_gan","Weapon_Gun","Fire")
キャピタル絶対殺すマンの完成です。


p_ganはDIOのバトルクルーザーで採用されている艦首固定大型プラズマランチャーです。
この武装はAutoGunと同じく固定式なのでそのまま流用可能でした。



エンジンの航跡、光、メッシュのアフターバーナー
HWに登場するユニットで、ファイター、コルベットは航跡を引きます。
またフリゲート以上のキャピタルシップにはメッシュ式のアフターバーナーが採用されています。

例aaa_interceptor
setEngineBurn(NewShipType,7,0.9,1,1,0,0.7,0.1,20) setEngineTrail(NewShipType,0,4,"trail_ribbon.tga",0.15,0.5,0.025,2); setEngineTrail(NewShipType,1,4,"trail_ribbon.tga",0.15,0.5,0.025,2);
インターセプターはファイターなので航跡設定。
aaa_interceptorにはエンジンノズルが2個あるのでsetEngineTrail2本分のコードがあります。


setEngineBurn
は根元から光るジェットエフェクトです。
参考ページ
http://hw2wiki.net/wiki.hw2.info/FunctionsetEngineBurn.html

翻訳
https://translate.google.co.jp/translate?hl=ja&sl=en&u=http://hw2wiki.net/wiki.hw2.info/FunctionsetEngineBurn.html&prev=search

setEngineTrail
はエンジンから伸びる光の帯です。
これを調整する事で長い期間航跡が残ったり短い期間で消えたりします。

参考情報
setEngineTrail(<rNewObjectType>, <iIndex>, <fTrailLingerTime>, <sTrailTextureName>, <fBulgeFrequency>, <fTextureScrollFactor>, <fTextureScaleactor>, <fDiameterFactor>) NewObjectタイプ インデックス TrailLinger時間 コース・テクスチャー名 ふくらみ頻度 テクスチャー・スクロール要因 テクスチャーScaleactor 直径要因
ちなみにエンジンノズルの情報はHODファイル側に座標として組み込まれています。
例えば多くの航跡を引くユニットを作る場合はHOD側の改造が必要です。



---------------------------------------------------
setEngineGlow

例aaa_destroyer
setEngineBurn(NewShipType, 12, 0.2, 0.5, 420, 1.02, 0.1, 0.25, 480); setEngineGlow(NewShipType, 1, 1, 1.02, 20, 300, 50, 1.5, {0.92, 0.21, 0.09, 0.25});

setengineglow(<rNewObjectType>、<fMaxTranslation>、<fFlickerMin>、<fFlickerMax>、<fFlickerFrequency>、<fBlurStartDistance>、<fBlurFullOnDistance>、<fMaxBlur>、<fGlowColor>) 説明: エンジン排気を管理します。 <RNewObjectType>:NewShipType。 <FMaxTranslation>:血管に沿っオフセットエンジン排気。 推奨値は1です。 <FFlickerMin>:フリッカ率が最小です。 1よりわずかに小さいの推奨値。 <FFlickerMax>:フリッカ率、最大。 1よりも若干の推奨値。 <FFlickerFrequency>:フリッカー周波数、ヘルツ。 <FBlurStartDistance>排気視線の方向に垂直な面内で叩解開始する距離。 <FBlurFullOnDistance>:排気はフルを打つする距離。 <FMaxBlur>:メートルでのビートの振幅、。 <FGlowColor>排気色(R、G、B、A)。
メッシュ式のアフターバーナーはHOD側で3Dデーターとして設定してあるメッシュに、
出力による変化、振動、色などを与えるコードです。
あまり弄りませんが、最後の排気色の部分を弄ると好みの色に変更することができます。



待機中音、発進音、移動音だと思われるコード
例aaa_destroyer
loadShipPatchList(NewShipType, "data:sound/sfx/ship/Vaygr/Carrier/", 0, "Engines/VDestroyerEng", "", 1, "Ambience/VDestroyerAmb", "");
あまり弄った事はありませんが、おそらく音関係のコード。
基本的には、元々あるHWユニットのコードをコピペして使っています。
もしも別の音を組み込みたいと思うなら弄ってみましょう。

余談ですが、サウンドの指定はアドレスで行われる場合が多いです。


6 Comments
dengun  [author] 5 Mar, 2016 @ 12:38am 
出来たら是非拝見させてくださいw
ガイドは順次進行させてその内にHODファイルの作成も解説していく予定です~
kemusi123 5 Mar, 2016 @ 12:27am 
なるほど、ありがとうございます。まあ子供の落書きよりひどいものしか作れてないので
まだまだ先になりそうですが…
dengun  [author] 4 Mar, 2016 @ 11:12pm 
HWで使われている3Dデータの形式はcbjファイルです。
これを扱えるモデリングソフトであれば何でも構わないはずです。
Blenderも当然扱えるソフトなので全然大丈夫だと思います。
kemusi123 4 Mar, 2016 @ 4:21pm 
ガイドを参考に色々弄っているのですが、3DデータはBlenderなどのソフトで制作すればいいのでしょうか?ユニットを試しに作ってみようと思いまして
dengun  [author] 2 Mar, 2016 @ 4:10am 
ここは戦艦ユニットをきりもみさせてもいいですよ!
kemusi123 1 Mar, 2016 @ 6:02pm 
homefrontのmodで早速試したところ、きりもみ回転しながらミサイルを放つ変態戦闘機になってしまった…