Grand Prix Legends AI チュートリアル

by Mark Beckman / localizing by shutaro

日本語版 rev.003 Mar.25.2003 (rev.001 Feb.18.2003)

2005.08.08 移転による変更

以下に示すのは、Mark Beckman 氏による AI Tutorials (*) を意訳してみたものです。
某所で勢いで書いた当時のまま直してないところもあると思います。誤字脱字誤訳等々あったらごめんなさい。

* 元記事:m4driving AI Schooling forum, AI tutorials

GPL AI tutorials | Lesson 2 - Maxrace and Minrace

Lesson 1: Basic of making an AI car

* 元記事: http://forum.m4driving.sm/index.php?showtopic=35514

  1. AI positioning
  2. Replay
  3. Conversion - .trk
  4. Conversion - replay
  5. Records

1. AI positioning

ピットレーン、及びスターティンググリッド上の AI カーの位置は、各トラックフォルダにある track.ini で定義されます。
以下に全長 6800 メートル、右側に約 20 メートルのピットレーンがスタート/フィニッシュラインをまたいでいるトラックでの記述例を示します。
[pit_lane_0] 

(* ここまでに書かれている内容はとりあえず気にしないで ok *) 

stall_0 = 100.00 -18.20   (負の値がトラック進行方向に対して右側であることを示しています)
stall_1 = 90.00 -18.20 
stall_2 = 80.00 -18.20 
stall_3 = 70.00 -18.20 
stall_4 = 60.00 -18.20 
stall_5 = 50.00 -18.20 
stall_6 = 40.00 -18.20 
stall_7 = 30.00 -18.20 
stall_8 = 20.00 -18.20 
stall_9 = 10.00 -18.20    (スタート/フィニッシュラインから約 10 メートル)
stall_10 = 6788.00 -18.20 (ここからはスタート/フィニッシュラインより後方です)
stall_11 = 6778.00 -18.20 
stall_12 = 6768.00 -18.20 
stall_13 = 6758.00 -18.20 
stall_14 = 6748.00 -18.20 
stall_15 = 6738.00 -18.20 
stall_16 = 6728.00 -18.20 
stall_17 = 6718.00 -18.20 
stall_18 = 6708.00 -18.20 
stall_19 = 6698.00 -18.20 

[ starting_grid_0 ] 
; 2x2 staggered grid 
; polesitter on right 
; track length is <6800.33> 
; grid front center at <6786.00, 0.00> 
; width between boxes 5.00 
stall_0 = 6786.0 -2.50    (スタート/フィニッシュラインより 4 メートル後方)
stall_1 = 6786.0 2.50 
stall_2 = 6776.0 -2.50    (負の値はセンターラインより右側であることを示しています)
stall_3 = 6776.0 2.50     (正の値はセンターラインより左側であることを示しています) 
stall_4 = 6766.0 -2.50 
stall_5 = 6766.0 2.50 
stall_6 = 6756.0 -2.50 
stall_7 = 6756.0 2.50 
stall_8 = 6746.0 -2.50 
stall_9 = 6746.0 2.50 
stall_10 = 6736.0 -2.50 
stall_11 = 6736.0 2.50 
stall_12 = 6726.0 -2.50 
stall_13 = 6726.0 2.50 
stall_14 = 6716.0 -2.50 
stall_15 = 6716.0 2.50 
stall_16 = 6706.0 -2.50 
stall_17 = 6706.0 2.50 
stall_18 = 6685.0 -2.50 
stall_19 = 6685.0 2.50 
GPLRA でリプレイを開けば、トラックの正確な全長を知ることができます。もちろんトラック作者に聞いても分かりますが。

既存の各トラックの track.ini を使ってテストして学習してみてください。

2. Replay

Ok 、マシンに乗ってトラックを周回します。しかしこれはまだテスト段階です。コース中央を、ゆっくり、しかしスムーズにテストラップを走りましょう。

走り終えたら、スタート/フィニッシュラインより数秒前から 1 周してスタート/フィニッシュラインの数秒後までのリプレイを保存します。私の場合、だいたい、スターティンググリッド終端からターン 1 付近までとしています。ラップタイムも書き留めておきましょう。

3. Conversion -.trk

WinMip2 で各トラックの .dat ファイルをアンパックして、.trk ファイルを取得します(アンパックしたファイルはトラックのフォルダとは別に用意した方がよいでしょう)。

ただこのファイルはそのままでは使えません。トラック作成時に .gtk ファイルから .trk ファイルへのコンバートの前に行なうクリーニングという作業が必要です。
* Mark に .trk ファイルをメールすればクリーニングしてくれるようです。
* ここで言う「クリーニング」とは、各 wall の Unk3, Unk4 の値を取り除く(ゼロにする)作業です。
* 実はこのチュートリアルの初版を書いた後ですが、クリーニングを行なうユーティリティがリリースされていますが、これについては、別途 AI 作成手順を html 文書化する際に触れることにします。<チュートリアルとは別に書くつもりです

クリーニングされた .trk ファイルはトラックフォルダへコピーしてください。

4. Conversion - Replay

さーて、これ重要ですよ!!テストに出ます(うそです)。
次に示すファイルが既にトラックフォルダにあった場合、まずはこれらを取り除かなければなりません。

Race.LP
Pass1.LP
Pass2.LP
Maxrace.LP
Minrace.LP
Pit.LP
ただし、いきなりこれらのファイルを削除してしまうと、これまで正常に動いていたときの情報が失われてしまいますから、まずはこれらをバックアップしておいてから削除するようにしてください。

では、RPL2LP でテストラップのリプレイを開きましょう。ドライバー名とラップタイムが表示されますね。
「7th surface value not 0」とかいうようなメッセージが表示された場合、そのトラックの .trk ファイルはクリーニングできていないので 3. へ戻ってやり直しです。

さきほど書き留めておいたラップタイムを元に、使用するラップを選択したら、右側で作成する LP ファイルを選び、 Convert をクリックします。これを Race, Pass1, Pass2, Maxrace, Minrace, Pit のそれぞれの LP ファイル用に 6 回繰り返します。
* ここで選択できる LP ファイルは 11 種類ありますが、ここで書いた以外は Nascar 用なので不要です。
なお、まだここではテストですから 1 つのリプレイからすべての LP ファイルを作成したのでかまいません。

LP ファイルができあがったら、トラックに出て、AI 達があなたのテストラップどおりに走行するのを確認してみてください。

5. Records

ここは最も混乱する個所のひとつです。

AI が使う値 Records (*) は、3 メートルごとの値で、トラックに正確に適合していなければなりません。さもないと、コース中央を 40km/h でのろのろと徐行することになります。
正しい Records 値を得るには、まずはトラックの正確な全長が必要です。例えばそれが 6000 メートルならそれを 3 で割った 2000 ぐらい が Records 値となります。え、2000 ぐらい? そう、この値は 1 か 2 ほどの微調整が必要なのです。例えば 1998, 1999, 2000, 2001, 2002 といった具合に。
調整したらその都度、4. で書いた方法で 6 つの LP ファイルを再びコンバートしなおす必要があります。

これまでの経験では、トラック全長を 3 で割って 1 足した値、例えば全長が 6000 メートルなら 2001 、でいけるパターンが多いです。

そのトラックフォルダに既に LP ファイルがあると、Records 値がそこから読み込まれてしまいます。既に AI がある場合にまずそれらを削除しておかねばならなかったはこのためだったのです。

* Records は RpyToLp では LpRecords のことです。

GPL AI tutorials | Lesson 2 - Maxrace and Minrace


shupop