simutransのソースコードを読んで、tabファイルまたはdatファイルの記述方法と、pakを作成する際のdatファイルの項目について纏めたものになります。

この記事についてはstanderdとextendedでほぼ同じ内容になります。

誤りについてはsou7/soukoukiへ連絡いただければ幸いです。

datファイルとtabファイルの記法

pakを作成する際に書くdatファイルは、設定などを書くtabファイルと同じように処理をされます。この節では、それらの記述方法について解説します。

obj           =vehicle
intro_year    = 2002
icon          => file.0.1
EmptyImage[N] = file.1.0
EmptyImage[N,S,E,W]=file.1.1
Backimage[0-3][0-3][0-3][0][0][0-4]=image/thisbuilding.<$0*4+$1>.<($2+$3*4)%5>
------

ライン(line)

datファイルに記述されている、1行分の文字列です。 行の先頭の文字がシャープ(#)、半角空白または空(空行)の場合、無視されます。(コメント) 行の先頭の文字がハイフン(-)の場合、オブジェクトの記述の境目として扱われます。

キー(key)

objintro_yearEmptyImage[S]など、=の左側の部分をキーと呼びます。 項目、特性など様々な呼び方はあると思うのですが、この記事内ではソースコード内での名前であるキーに統一します。 dat内では、キーは大文字と小文字のどちらを使っても構いません。makeobjで処理される際に小文字に変換されます。 キーの右側の空白は除去されます。

同じオブジェクトのキーに複数回設定された場合、一番最初に設定したものが適用されます。例えば

name=hoge
name=huga

と2回設定した場合、nameの値は先に設定したhogeになります。

パラメーター(parameter)

EmptyImage[S]Backimage[0-3][0-3][0-3][0][0][0-4]S0-3など、キーの中の[]で囲まれた部分を、パラメーターと呼びます。 パラメーターは[0-26][n,s,e,w]のように複数個を一括で指定できます。 [0-26][1,3,5]のように数字を複数指定した場合、この後解説する展開の際に計算式に利用できます。

値(value)

vehicle2022> file.0.1image/thisbuilding.<$0*4+$1>.<($2+$3*4)%5>のような、=の右側の部分が値です。 <>で囲まれた部分については、後述する展開の処理が行われます。 数字や画像の指定など、一部の値は=との間の空白が読み飛ばされます。ただし、obj=vehicleのように読み飛ばされないものもあるので注意が必要です。

展開(expansion)

値の中の<>で囲まれた部分には、計算式を展開できます。 計算は加減乗除に加えて、割ったあまり(%)を使用できます。 $1$3のように$を使うと、パラメータを取得できます。例えば、hoge[0][1][2][3][4]=file<$0>.<$2+$3>.<($2+$3)*2>とすると、hoge[0][1][2][3][4]=file0.5.10と展開されます。 また、<>内の空白は読み飛ばされます。

一括指定と展開について議論しているフォーラム: https://forum.simutrans.com/index.php/topic,15133.msg150773.html