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)
obj
やintro_year
、EmptyImage[S]
など、=
の左側の部分をキーと呼びます。
項目、特性など様々な呼び方はあると思うのですが、この記事内ではソースコード内での名前であるキーに統一します。
dat内では、キーは大文字と小文字のどちらを使っても構いません。makeobjで処理される際に小文字に変換されます。
キーの右側の空白は除去されます。
同じオブジェクトのキーに複数回設定された場合、一番最初に設定したものが適用されます。例えば
name=hoge
name=huga
と2回設定した場合、nameの値は先に設定したhogeになります。
パラメーター(parameter)
EmptyImage[S]
やBackimage[0-3][0-3][0-3][0][0][0-4]
のS
、0-3
など、キーの中の[]
で囲まれた部分を、パラメーターと呼びます。
パラメーターは[0-26]
や[n,s,e,w]
のように複数個を一括で指定できます。
[0-26]
や[1,3,5]
のように数字を複数指定した場合、この後解説する展開の際に計算式に利用できます。
値(value)
vehicle
、2022
、> file.0.1
、image/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