AI(BOT)作成方法
ここではマップのCOOP化の方法を紹介しています。
ほぼ全編がPathmapping with Editor42 (aka ED42)の翻訳です。
ほぼ全編がPathmapping with Editor42 (aka ED42)の翻訳です。
目次
ツール紹介
Rexman Ai Path tools.zip
Pathfindingマップ(.raw)をEditor42用地形テクスチャ(.dds)に変換するツールです。
Pathfindingマップ(.raw)をEditor42用地形テクスチャ(.dds)に変換するツールです。
CW_Pathmapping_ToolKit.zip
undxt converter(フォルダ内の.ddsを.tgaに一括変換するツール)とTGA merge(複数枚のテクスチャを一枚にまとめるツール)が入っています。
undxt converter(フォルダ内の.ddsを.tgaに一括変換するツール)とTGA merge(複数枚のテクスチャを一枚にまとめるツール)が入っています。
Paint.net
.ddsや.tgaなどの画像ファイルを開けるフリーソフトです。Photoshopを持っていない人がBF1942のテクスチャを弄るときには必須のアイテム。
.ddsや.tgaなどの画像ファイルを開けるフリーソフトです。Photoshopを持っていない人がBF1942のテクスチャを弄るときには必須のアイテム。
DDS Converter
フォルダ内の.ddsを.pngに一括変換するツールです。
フォルダ内の.ddsを.pngに一括変換するツールです。
画像一括リサイザー
フォルダ内の画像ファイルを一括で回転できるツールです。
フォルダ内の画像ファイルを一括で回転できるツールです。
Batch Image Converter
フォルダ内の.pngを.tgaに一括変換するツールです。
フォルダ内の.pngを.tgaに一括変換するツールです。
念のためにGoogleDriveにも上げておきます。
Rexman Ai Path tools.zip
CW_Pathmapping_ToolKit.zip
genpathmaps_20041114.rar
Rexman Ai Path tools.zip
CW_Pathmapping_ToolKit.zip
genpathmaps_20041114.rar
作成方法
手順1:Coopに対応させる
Coop.conを「/(Map)/GameType/」の中に加えます。
Coop.conの中身は大体以下のようになります。
例
Game.setNumberOfTickets 1 100
Game.setNumberOfTickets 2 100
Game.setTicketLostPerMin 1 7
Game.setTicketLostPerMin 2 7
Game.setNumberOfTickets 1 100
Game.setNumberOfTickets 2 100
Game.setTicketLostPerMin 1 7
Game.setTicketLostPerMin 2 7
run SinglePlayer/SoldierSpawnTemplates
run SinglePlayer/SoldierSpawns
run SinglePlayer/SpawnpointManagerSettings
run SinglePlayer/ObjectSpawnTemplates
run SinglePlayer/ControlPointTemplates
run SinglePlayer/SoldierSpawns
run SinglePlayer/SpawnpointManagerSettings
run SinglePlayer/ObjectSpawnTemplates
run SinglePlayer/ControlPointTemplates
if v_arg1 == host
run ai
run SinglePlayer/ObjectSpawns
run SinglePlayer/ControlPoints
else
endIf
run ai
run SinglePlayer/ObjectSpawns
run SinglePlayer/ControlPoints
else
endIf
一応、Coopで遊ぶことが可能になりました。
ここで、Coopで遊ぶためには/(Map)/SinglePlayer/フォルダにファイルを追加しなければいけません。
ファイルの中身は/(Map)/Conquest/と同一でも問題はありません。
しかし、以下のようにBot専用リスポンも追加することができます。
ここで、Coopで遊ぶためには/(Map)/SinglePlayer/フォルダにファイルを追加しなければいけません。
ファイルの中身は/(Map)/Conquest/と同一でも問題はありません。
しかし、以下のようにBot専用リスポンも追加することができます。
例 Bot専用リスポン(SpawnpointManagerSettings.con)
spawnPointManager.group 1
spawnPointManager.groupTeam 1
spawnPointManager.groupIcon test1.tga
spawnPointManager.OnlyForAI 1
spawnPointManager.groupTeam 1
spawnPointManager.groupIcon test1.tga
spawnPointManager.OnlyForAI 1
この太字の記述を入れることによってBot専用のリスポンが可能になります。
これを利用すると乗り物にbotを乗せたままリスポンさせることも可能です。
これを利用すると乗り物にbotを乗せたままリスポンさせることも可能です。
手順2:AIの設定を弄る
AIの頭脳であるAIフォルダの中身について説明します。
大体coop対応マップには/(Map)/AI/のフォルダがあります。
このAIフォルダはAIの行動や戦術などのファイルが格納されています。
AIフォルダには以下の4種類のファイルが格納されています。
大体coop対応マップには/(Map)/AI/のフォルダがあります。
このAIフォルダはAIの行動や戦術などのファイルが格納されています。
AIフォルダには以下の4種類のファイルが格納されています。
Condition.con
Prerequisites.con
StrategicAreas.con
Strategies.con
Prerequisites.con
StrategicAreas.con
Strategies.con
手順3:AIの経路を設定する
はじめに
1.加工したいマップを用意します。
2.無印などのマップからAIファイル(<MAP>/AI/)とAIPathfinding(<MAP>/Pathfinding/)を加工したいマップにコピーします。
3.Editor42の準備をします。
4.作業用フォルダを用意します。
2.無印などのマップからAIファイル(<MAP>/AI/)とAIPathfinding(<MAP>/Pathfinding/)を加工したいマップにコピーします。
3.Editor42の準備をします。
4.作業用フォルダを用意します。
ステップ1 Pathfindingの地形テクスチャへの変換
歩兵用の経路マップを例にやってみたいと思います。まず、Infantry1level0Map.rawを地形テクスチャに変換する必要があります。
編集する時はLevel0map(Tank0Level0Map.raw、Infantry1Level0Map.raw、Boat2Level0Map.raw、LandingCraft3Level0Map.raw、Car4Level0Map.raw)を加工して下さい。
理由は、このLevel0Mapが一番詳細に経路を設定できるからです。
まず、地形テクスチャ変換に必要なRexman Ai Path tools.zipを展開します。
ここで、展開したフォルダにInfantry1level0Map.rawをコピーします。下の画像のようになるはずです。
編集する時はLevel0map(Tank0Level0Map.raw、Infantry1Level0Map.raw、Boat2Level0Map.raw、LandingCraft3Level0Map.raw、Car4Level0Map.raw)を加工して下さい。
理由は、このLevel0Mapが一番詳細に経路を設定できるからです。
まず、地形テクスチャ変換に必要なRexman Ai Path tools.zipを展開します。
ここで、展開したフォルダにInfantry1level0Map.rawをコピーします。下の画像のようになるはずです。
マップのタイプや大きさに合ったバッチファイル”_convertToLevelTexture.bat”をメモ帳で編集する必要があります。
ここで説明した箇所以外は編集しないで下さい、その後の作業に深刻な問題が起きる可能性があります。
それでは、実際にメモ帳で編集したいと思います。最初に開いた時に、下の画像のようになっているはずです。
ここで説明した箇所以外は編集しないで下さい、その後の作業に深刻な問題が起きる可能性があります。
それでは、実際にメモ帳で編集したいと思います。最初に開いた時に、下の画像のようになっているはずです。
画像の赤いアンダーラインの所がマップによって変える所です。
最初の赤いアンダーラインについては、Tank0Level0MapやLandingCraft3Level0Map.rawのように設定します。
ここでは、「Infantry1Level0Map」と設定します。
もし、 Tank0Level0Map.rawを編集したいなら、その箇所はTank0Level0Mapとします。
最初の赤いアンダーラインについては、Tank0Level0MapやLandingCraft3Level0Map.rawのように設定します。
ここでは、「Infantry1Level0Map」と設定します。
もし、 Tank0Level0Map.rawを編集したいなら、その箇所はTank0Level0Mapとします。
- 4 = Small map (4x4) or 1024x1024
- 8 = Medium map (8x8) or 2048x2048
- 16 = Large map (16x16) or 4096x4096
この画像の場合だと、16であるため、Largeマップを編集しようとしてることが分かります。
マップの大きさの確認方法は(Map)/Init/Terrain.conに
GeometryTemplate.worldSize 1024
上のように書かれています。
この場合、1024であるため、SmallMapです。そのため、上の画像の二番目のアンダーラインには4と入力します。
この場合、1024であるため、SmallMapです。そのため、上の画像の二番目のアンダーラインには4と入力します。
そして、加工したいマップに合うように変更したなら、_convertToLevelTexture.batを実行します。
そうすると、コマンドプロンプトの画面上に下の画像のように結果が表示されます。
そうすると、コマンドプロンプトの画面上に下の画像のように結果が表示されます。
バッチの実行に成功したなら、dds_terrainフォルダにTx*.ddsファイルが複数あるはずです。
それを加工したいマップの(Maps)/Texturesに全て入れましょう。
上書きする前に、事前に元の地形テクスチャをバックアップしましょう。
これを確認するために、Editor42で加工したいマップを選択すると、下の画像のようにinfantry用のpathmapが地形テクスチャに変わります。
それを加工したいマップの(Maps)/Texturesに全て入れましょう。
上書きする前に、事前に元の地形テクスチャをバックアップしましょう。
これを確認するために、Editor42で加工したいマップを選択すると、下の画像のようにinfantry用のpathmapが地形テクスチャに変わります。
ステップ2 Editor42で編集の準備
Editor42を起動していることを前提に説明します。
Pathマップを編集するために以下の準備をします。
- F2キーを押して、テクスチャモードへ移行します。
- Gキーを押すと、テクスチャの質を落とし、グリッド(格子状)を表示します。
- Fキーを押すと、霧を取り除きます。
左側に下の画像のようなテクスチャバーが表示されます。
機能を左から説明すると、ブラシの形、ブラシの大きさ、不透明度、テクスチャインターフェイス、ペイント全体のマップボタンになります。
機能を左から説明すると、ブラシの形、ブラシの大きさ、不透明度、テクスチャインターフェイス、ペイント全体のマップボタンになります。
- Eキーを押すか、右から2番目のボタンを選択すると、下の画像のTexture-Shadow root layerウインドウが表示されます。
このウインドウの中のChild LayerにあるDefaultを(マウスポインタが指している所)を選択すると、
下の画像のようなLayer Selectionウインドウが表示され、画像およびマウスポインタで選択しているPlain Colorを選択します。
下の画像のようなLayer Selectionウインドウが表示され、画像およびマウスポインタで選択しているPlain Colorを選択します。
そこを選択すると、下の画像のようなColorウインドウが表示されます。
画像のように純粋な黒と白を使います。純粋な黒の設定方法は、右の赤円を囲っている3つの数字欄を全て「0」にします。
純粋な白も同様に右の赤円を囲っている3つの数字欄を全て「255」にします。
どちらかの画像を選択し、Shadow root layerウインドウまで戻ります。
純粋な白も同様に右の赤円を囲っている3つの数字欄を全て「255」にします。
どちらかの画像を選択し、Shadow root layerウインドウまで戻ります。
上の画像のように、Lighting項目のAmbiantを「1.00」に、Sunを「0.00」に設定した後「OK」を押して戻ります。
これから実際に描いてみましょう。
ステップ3 Pathマップを描く
Editor42でBot用のPathマップを作ってみましょう。
テクスチャモードにして、ブラシのOpacityを100%にします(下の画像参照)。
ブラシの種類は下の画像のように2種類しか使用しません。
ここでは、左のブラシをドットブラシ、右のブラシを四角ブラシとします。
ここでは、左のブラシをドットブラシ、右のブラシを四角ブラシとします。
保存したい場合は "Tool"→"Save"→Texture"で出来ます。
それでは、実際に工場を例に説明します。
進行可能な色は黒、進行不可能な色は白になります。
工場周りをドットブラシを使って白線で囲みます。
進行可能な色は黒、進行不可能な色は白になります。
工場周りをドットブラシを使って白線で囲みます。
その際、建物周りの白線を下の画像のように4ピクセル以上広げておきます。
ここで白線内側を白に塗りたいので、工場を一時的に退避させます。
Oキーを押して、オブジェクトモードにして、工場を選択します。
選択すると、工場の色が変わりますので、マウスのホイールキーを使用してY軸方向(高さ)へ動かします。
そうすることで、工場のXZ座標に影響されず、内側を塗ることができます。
工場を動かした後、下の画像のようになるはずです。
Oキーを押して、オブジェクトモードにして、工場を選択します。
選択すると、工場の色が変わりますので、マウスのホイールキーを使用してY軸方向(高さ)へ動かします。
そうすることで、工場のXZ座標に影響されず、内側を塗ることができます。
工場を動かした後、下の画像のようになるはずです。
ここで、ドットブラシを使うと時間がかかるので、手間を省くために下の画像のように四角ブラシを使います。
オブジェクトモードへ移って、工場を元の位置に戻します。
しかし、車庫にPathマップが設定されていないので、再度編集します。
下の画像のように車庫にもPathマップを設定することが出来ました。
下の画像のように車庫にもPathマップを設定することが出来ました。
丁寧に塗り分けをしていけば、複雑な形の建物でもbotが思い通りに動くようになるでしょう。
同じ建物でも、配置する角度によって塗り方は大きく代わります。
変な角度で配置すると塗るのは大変ですし、45度に配置すると右下の部屋ではbotがまともに動かなくなりそうです。
変な角度で配置すると塗るのは大変ですし、45度に配置すると右下の部屋ではbotがまともに動かなくなりそうです。
ED42が作業中にクラッシュするかも知れません。テクスチャの保存はこまめに行いましょう。
ステップ4-1 地形テクスチャのpathfindingファイルへの変換(その1)
分割されて保存されている地形テクスチャ(.dds)を統合して最終的にpathfinding(.raw)へと戻します。
(訳者注:一部ツールが正常に動作しなかったため、別のソフトを使っての回避方法を ステップ4-2 に書いておきます。動作不良の原因が判明したらその旨加筆をお願いします。)
(訳者注:一部ツールが正常に動作しなかったため、別のソフトを使っての回避方法を ステップ4-2 に書いておきます。動作不良の原因が判明したらその旨加筆をお願いします。)
CW_Pathmapping_ToolKit.zipを解凍し、undxt converterを用意します。
Editor42上で編集したTx*.ddsと"undxt.exe"と"undxt.bat"を作業用フォルダに同梱します。フォルダのパスはreadmeを読む限り自由のようですが実際どうなんでしょうね…
バッチファイル"undxt.bat"をダブルクリックするとコマンドプロンプトが立ち上がり、テクスチャの拡張子が.ddsから.tgaに変換されます。
(訳者注:私の場合は一瞬コマンドプロンプトが立ち上がって消えてしまいます。フォルダのパスが原因かも知れません。 ステップ4-2 に回避方法を載せておきます。
そもそもIドライブって古いパソコンでしか見た覚えがなくて…USBのドライブ名変更とかで対処できるんだろうか?)
バッチファイル"undxt.bat"をダブルクリックするとコマンドプロンプトが立ち上がり、テクスチャの拡張子が.ddsから.tgaに変換されます。
(訳者注:私の場合は一瞬コマンドプロンプトが立ち上がって消えてしまいます。フォルダのパスが原因かも知れません。 ステップ4-2 に回避方法を載せておきます。
そもそもIドライブって古いパソコンでしか見た覚えがなくて…USBのドライブ名変更とかで対処できるんだろうか?)
undxt converterとともに展開されたtgaMergeを起動します。入出力のフォルダとファイル名、 マップサイズ を指定し、"Merge"を押すと一枚の大きなtgaファイルが出力されます。
今回は"Infantry1level0Map.raw"を改変しているため、ファイル名は"Infantry1level0Map.tga"とします。
今回は"Infantry1level0Map.raw"を改変しているため、ファイル名は"Infantry1level0Map.tga"とします。
このtgaファイルをPhtoshopやフリーソフト Paint.net などで開きます。画像ファイルはマップサイズの2倍の大きさになっているので、数字を半分にしてマップサイズに合わせます。
Phtoshopの場合は"Resample Image"で"Nearest Neighbor"を選択しておきましょう。
Paint.netを使うときには、サイズ50%で指定することもできます。「再サンプリング」は「直近」を選択しましょう。
サイズを変更したら、.bmp形式で保存します。Photoshopの場合は詳細な設定が必要みたいです。(詳細不明)
Paint.netの場合は8bitで保存すべきだと思います。(詳細不明)
最後にこのテクスチャをPathfinding(.raw)へと変換します。まず、Cドライブ直下に"genpathmaps"フォルダを作ります。
genpathmaps_20041114.rarを展開し、"genpathmaps"の中に入れます。(下の画像のショートカット、"Backup"フォルダは必要ありません)
genpathmaps_20041114.rarを展開し、"genpathmaps"の中に入れます。(下の画像のショートカット、"Backup"フォルダは必要ありません)
バッチファイル"genraw.bat"の上に"Infantry1level0Map.bmp"をドラッグ・アンド・ドロップするとコマンドプロンプトが開きます。
処理が終了すればCドライブ直下に"pathfinding output"が作られ、その中の"raw"フォルダにPathmapファイルが複数生成されています。
この複数のファイルすべてを編集中のマップに移動すると完成です。
ステップ4-2 地形テクスチャのpathfindingファイルへの変換(その2)
ステップ4-1 ではundxt converterが思うように動作しないという問題がありました。ここではundxt converterを使わずに.ddsから.tgaに一括変換する方法を紹介します。(.dds -> .png -> 反転 ->.tga)
(Paint.netを使えば一つ一つ変換することは可能ですが、テクスチャが64個とかありますから骨が折れます)
(Paint.netを使えば一つ一つ変換することは可能ですが、テクスチャが64個とかありますから骨が折れます)
まず DDS Converter を起動します。"Add"を押して変換するファイルを選択します。範囲選択(ドラッグ)やCtrlキーによる複数選択も可能です。すべて選択してしまいましょう。
"Browse"で出力フォルダを指定し、出力形式は"PNG"にします。"Convert"を押すと変換されたファイルが出力されます。
さて、bf1942において地形に貼ったテクスチャは、マップに対してうつぶせにして上下左右反対(=180度回転)にした状態でマップファイルに保存されています。
そのため、先ほどの作業で得られた.pngファイルも一枚一枚が逆になっていて、そのまま結合するだけでは変なPathfindingができあがってしまいます。
これを避けるために 画像一括リサイザー で画像の反転を行います。
そのため、先ほどの作業で得られた.pngファイルも一枚一枚が逆になっていて、そのまま結合するだけでは変なPathfindingができあがってしまいます。
これを避けるために 画像一括リサイザー で画像の反転を行います。
画像一括リサイザー を起動します。「出力設定1」で「サイズは変更しない」にチェックを入れ、出力先のファイルを指定します。
「ファイル名設定」で「リサイズ後の画像ファイル名に、文字を付加する」のチェックを外します。もしファイルの名前が変わってしまうと、結合に失敗するからです。
「画像設定」で「水平&垂直反転」にチェックを入れます。
変換したいファイルの入ったフォルダをウィンドウの中にドラッグ・アンド・ドロップすると、変換が始まります。
これで画像の反転が終了しました。最後に Batch Image Converter で.pngを.tgaに変換します。
Batch Image Converter を起動します。"Load Directory"で変換したいファイルの入ったフォルダを選択します。
出力先のフォルダを指定します。出力形式は"TGA"を選択します。
"Convert Images"で変換が始まります。"Done"と表示されたら変換終了です。
こうしてundxt converterを使わずに.ddsから.tgaへの一括変換ができるようになりました。後は ステップ4-1の途中 からと同じように、tgaMergeで結合し、
サイズを半分にして、.rawに変換すれば作業は終了です。
サイズを半分にして、.rawに変換すれば作業は終了です。
追記
ステップ4-2では.pngを通り道として拡張子の変換を行いましたが、これは単に「.pngが一番高画質っぽい」という偏見に基づいています。
(.jpgや.bmpで試してはみましたが、その後に生成された.tgaの画像でいずれも灰色のギザギザが発生しました。)
(.jpgや.bmpで試してはみましたが、その後に生成された.tgaの画像でいずれも灰色のギザギザが発生しました。)
ステップ4-2で用いたBatch Image Converterは本来.dds->.pngという変換もできるのですが、出力された画像がなぜか緑がかった状態になるので、この作業では別のソフトを使用しました。
ステップ4-2では多くのフリーソフトを使用しています。さらに作業を簡略化したり、.pngよりも劣化の少ない拡張子が扱えるソフトが存在するかも知れません。
いい方法が見つかればどんどん加筆してください。
いい方法が見つかればどんどん加筆してください。
手順4:AIの戦略を設定する
手順5:兵器の設定
兵器や武器に対するCOOPでの設定条件は、CONQUESTでの条件より厳しくなります。CONQUESTでは正常に遊べていたのにCOOPに移植した途端にエラーを吐くことがあります。この場合は「〇〇の部品がない」などエラーの詳細な内容が出るので改善は容易です。
また、そもそも兵器(乗り物)に対するbotのデータがなければbotは乗り物を無視しますし、そこに搭乗した状態でスポンさせる設定(APCや輸送機)にしているとゲームが落ちます。この場合はエラーの内容は表示されません。
スポンの記述を入れるとロード中にゲームが落ちる兵器もあります。FHSWのトータスなどがその例です。(原因不明)
他の兵器でも同様の現象が起きるようですが、原因を判断するにはすべてのスポンする兵器を二分探索で選択し、ロードを繰り返すほかないと思われます。
他の兵器でも同様の現象が起きるようですが、原因を判断するにはすべてのスポンする兵器を二分探索で選択し、ロードを繰り返すほかないと思われます。
FHやFHSWなどのMODは非常に複雑な作りになっており、強制終了してもエラーの内容が表示されないためCOOPでは不安定なのが現状です。根気よくエラーの原因を探ることも必要です。
参考リンク
コメント
- 詳細求む
-- 名無しさん (2011-11-10 22:52:20) - 兵塩!よくやったー! -- 名無しさん (2012-12-06 00:58:45)
- ツールリンク切れ… -- 名無しさん (2016-04-24 10:24:55)
添付ファイル
- AI49.jpg
- AI50.jpg
- AI54.jpg
- AI60.jpg
- aiforlevel1.jpg
- aiforlevel2.jpg
- aiforlevel3.jpg
- angle1.jpg
- angle2.jpg
- BIC1.jpg
- BIC2.jpg
- BIC2_2.jpg
- BIC3.jpg
- brushicon.jpg
- colorpicker1.jpg
- convert1.jpg
- convert10.jpg
- convert2.jpg
- convert3.jpg
- convert4.jpg
- convert5.jpg
- convert6.jpg
- convert7.jpg
- convert8.jpg
- convert9.jpg
- convert_bmp.jpg
- convert_size.jpg
- DC1.jpg
- DC1_2.jpg
- DC2.jpg
- DC2_2.jpg
- DC3.jpg
- DC3_2.jpg
- docks3.jpg
- dotbrush.jpg
- ESS_2.jpg
- genpath1.jpg
- genpath2.jpg
- genpath3.jpg
- line1.jpg
- ocbunker10.jpg
- ocbunker12.jpg
- ocbunker8.jpg
- opacityicon.jpg
- paint1.jpg
- paint2.jpg
- paint3.jpg
- paint4.jpg
- paint5.jpg
- paint6.jpg
- paint7.jpg
- paintnet1.jpg
- paintnet1.png
- paintnet1_2.jpg
- paintnet1_3.jpg
- paintnet2.jpg
- paintnet2.png
- paintnet2_2.jpg
- paintnet3.jpg
- paintnet3.png
- paintnet4.jpg
- panitnet4.jpg
- panitnet4.png
- resizer1.jpg
- resizer1_2.jpg
- resizer2.jpg
- resizer2_2.jpg
- resizer3.jpg
- resizer3_2.jpg
- save1.jpg
- save2.jpg
- seigo.jpg
- sqrbrush.jpg
- texinterface1.jpg
- texinterface2.jpg
- texselect.jpg
- textoolbar.jpg
- tgam1.jpg
- tgam2.jpg