&aname(BackImage);
[[アドオン開発]]

#div(start,border:solid 5px #eee,background-color:white,padding:1em,margin:1em)
&imgfolder(16/world_link.png); [[公式wikiの説明(英語)>https://simutrans-germany.com/wiki/wiki/en_BackImage]]
#div(end)

#contents
*画像の指定の仕方(建物) [#d0798557]
プログラマの方はよくご存知ですが、画像の指定は多次元配列(これはちょっと違うけど)になっています。それのシーケンス&br;
をちょっと書いてみようと思います。factoryのBackImageを例に考えてみましょう。&br;
&br;
 BackImage[0][0][0][0][0]=./syo-yu.0.1
 BackImage[0][1][0][0][0]=./syo-yu.0.0
 BackImage[0][0][1][0][0]=./syo-yu.0.1
 BackImage[0][1][1][0][0]=./syo-yu.0.0
&br;
それぞれ&br;
BackImage[向き][横][縦][高さ][アニメーション番号]=ファイル名.画像の縦.横&br;
となっています。&br;
 (注)99.00 makeobj40以降積雪時の画像のために[季節]が最後に加わり、
  BackImage[向き][横][縦][高さ][アニメーション番号][季節]
  のように使えます。(オプション)
  [季節]は[0]が通常時、[1]が積雪時です
  積雪時の画像を使用しない場合は省略可で、今までどおりの書き方ができます。
  BackImage[向き][横][縦][高さ][アニメーション番号]
-&size(12){99.00 makeobj40以降積雪時の画像のために[季節]が最後に加わり、};
&size(12){'''BackImage[向き][横][縦][高さ][アニメーション番号][季節]'''};
&size(12){のように使えます。};
&size(12){[季節]は[0]が通常時、[1]が積雪時です};
&size(12){積雪時の画像を使用しない場合は省略可で、今までどおりの書き方ができます。};
&size(12){'''BackImage[向き][横][縦][高さ][アニメーション番号]'''};
&br;
  (追記) 99.15 makeobj46(?)以降、画像のオフセットが設定できます。
  従来の画像指定の後ろに続けて、カンマ区切りで記述します。
  BackImage[向き][横][縦][高さ][アニメーション番号][季節]=ファイル名.縦位置.横位置,xオフセット,yオフセット
  オフセットを使用しない場合は省略可で、今までどおりの書き方ができます。
  BackImage[向き][横][縦][高さ][アニメーション番号][季節]=ファイル名.縦位置.横位置
-&size(12){99.15 makeobj46(?)以降、画像のオフセットが設定できます。};
&size(12){従来の画像指定の後ろに続けて、カンマ区切りで記述します。};
&size(12){'''BackImage[向き][横][縦][高さ][アニメーション番号][季節]=ファイル名.縦位置.横位置,xオフセット,yオフセット'''};
&size(12){オフセットを使用しない場合は省略可で、今までどおりの書き方ができます。};
&size(12){'''BackImage[向き][横][縦][高さ][アニメーション番号][季節]=ファイル名.縦位置.横位置'''};
&br;

[向き]は0,1,2,3で、それぞれ南、東、北、西の各向きを表しています。&br;
[横][縦]はそれぞれチップの位置を表しています。具体的には&br;

&ref(アドオン開発/datファイル記述リファレンス/flatmodel(2).png,nolink);

こんな感じに定義されます。この範囲内に建造物を書きましょう。高さを指定する事で上に伸ばす事も可能ですが、&br;
高さは64Pixelごとに上に伸びます。つまりこの箱を上に繋げると&br;

&ref(アドオン開発/datファイル記述リファレンス/flatmodel_tall.png,nolink);

こうなります。気をつけて描きましょう。&br;

アニメーション番号を指定すると、その部位のチップがどんどん切り替わってoilrigやsinemaのようにアニメーションします。&br;
あんまりにも懲りすぎるとサイズがでかくなるので気をつけましょう。&br;

元画像の座標は、(pak64なら)64ピクセル刻みで設定します。つまり、ひとつのピースは、64*64ピクセルです。256*256ピクセルの画像だと、
&ref(アドオン開発/datファイル記述リファレンス/gazozahyo.png,nolink);
このように16ピース使用できます。
ちなみに(有限会社`・ω・´)は絵を描くのにD-Pixedを使用してます。どうでもいいか。&br;

-----
[補足資料1] 2x2の建物を理解する~


**補足資料1 [#w523cea6]
下図のような2x2の土地に建物を作る場合を考えます~
&ref(アドオン開発/datファイル記述リファレンス/cut1.png,nolink);~

1枚のタイルで表示できる範囲は下図の範囲です。これを4枚用意します~
&ref(アドオン開発/datファイル記述リファレンス/cut2.png,nolink);~
&ref(アドオン開発/datファイル記述リファレンス/cut3.png,nolink);~

これを、それぞれのタイルの上に置いてみると、下図のようになります~
&ref(アドオン開発/datファイル記述リファレンス/cut4.png,nolink);~

これが2x2の土地に表示できる範囲です。高さが1の場合には建物はこの範囲内に描画する必要があります。~
もしこの範囲より上に構造物がはみ出す場合は、[高さ]の2層目を使う必要があります~

これをdatファイルで指定できるように、再び分割すると図のようになります~
&ref(アドオン開発/datファイル記述リファレンス/cut5.png,nolink);~

重なり合った部分はあってもなくても構いませんが、ないほうが画像データは軽くなります。~
重なりを取り除いて分割すると、図のようになります~
&ref(アドオン開発/datファイル記述リファレンス/cut6.png,nolink);~

※重要な注意点~
北西角の[0][0]に当たるタイルの画像(上図では黄緑色)に背景色の水色以外なにもない場合には、ゲームトラブルが起きます。1ドットの点でも構いませんから、必ず何かの画像を含めるようにしてください。

・・・・・・こんなことをしなくても、[[TileCutter>アドオン開発/画像#tilecutter]] を使えば簡単に画像の分割とdatファイルの作成をしてくれます。~

-----
[補足資料2]~

**補足資料2 [#kca743a7]
観光地・産業(dims=3,3,1)と(dims=3,2,2)の[横][縦]。dimsの[横][縦]は[東西のタイル数]・[南北のタイル数]の順だが、BackImageの[横][縦]は[南北の配列位置]・[東西の配列位置]の順。指定する順序が逆なのに注意。[向き]は1,2,4が基本(※例外として後述のような特殊な設定もある)。正方形のようにゲーム上でマップを回転させたとき4方向すべてが同じ形の場合は1で良い。長方形のように2パターンの形がある場合は最低2つの画像が必要なので2。4方向すべての形が異なる場合は4。
但し、不定形の場合でも次の説明と同じく、マップを回転させたとき全ての回転方向において下図中の[0][0]のタイルがないと正常なpakにならない。
&ref(アドオン開発/datファイル記述リファレンス/fig01_edit2.png,nolink);~

観光地・産業 これもdims=3,3,1。88.10.3(makeobj36)以降で不定形な建物が可能で、建物内に道路などを通すことができる。ただし、BackImage[0][0][0][0][0]は必ず必要。~
&ref(アドオン開発/datファイル記述リファレンス/fig02.png,nolink);~

車庫・ターミナル駅・港(dims=1,1,4)の[向き]と、バス停・鉄道駅(dims=1,1,2)の[向き]。%%駅ビルや市内建築物とはN,Sの方向が逆なのに注意。%%~
&ref(アドオン開発/datファイル記述リファレンス/fig03.png,nolink);~

[99.09以降]
駅(dims=1,1,16)の[向き]。dims=1,1,8の時は[0]〜[7]が使われる。~
&ref(アドオン開発/datファイル記述リファレンス/fig10.png,nolink);~
|奥|手前||
|[0]|[8]|南北 中間|
|[1]|[9]|東西 中間|
|[2]|[10]|南北 南端|
|[3]|[11]|東西 東端|
|[4]|[12]|南北 北端|
|[5]|[13]|東西 西端|
|[6]|[14]|南北 孤立|
|[7]|[15]|東西 孤立|

''市内建築物の向きは、自動設置の場合必ずしも正しく表示されません。下記の説明も間違っている可能性があります。''

市内建築物(dims=1,1,4)の[向き]。89.02(makeobj 38)以降で複数の向きが可能。向きは駅ビルと同じ。dims=1,1,1の場合は[0]のみが使用され、dims=1,1,2の場合は[0][1]のみが使用される。市内建築物の大きさはdims=1,1以外は不可。~
&ref(アドオン開発/datファイル記述リファレンス/fig05.png,nolink);~
-----
市内建築物[110.0以降]
市内建築物は自動では、同じ建物が隣どうしには建設されないようになっています。市内建築物の大きさはdims=1,1以外は不可です。~

dims=1,1,1の場合は[0]のみが使用される~
dims=1,1,2の場合は[0][1]はそれぞれ南北、東西の道路に面する。~
&ref(アドオン開発/datファイル記述リファレンス/city_2.png,nolink);~
dims=1,1,4の場合。[0][1][2][3]はそれぞれ南、東、北、西側の道路に面する。~
dims=1,1,8の場合。[4][5][6][7]はそれぞれ南東、北東、北西、南西の角地にのみ建設される。
&ref(アドオン開発/datファイル記述リファレンス/city_4and8.png,nolink);~
-----
''ここからの駅ビルの説明は、simutrans 100.0までのバージョンでは正しく表示されますが、今後のバージョンでは正しく表示されなくなります。''[1]と[3]が逆になります。

駅ビル(dims=1,1,4)の[向き]。車庫などとはN,Sの方向が逆なのに注意。dims=1,1,1の場合は[0]のみが使用され、dims=1,1,2の場合は[0][1]のみが使用される。~
&ref(アドオン開発/datファイル記述リファレンス/fig04.png,nolink);~

駅ビル(dims=2,1,4)の[向き][横][縦]。dims=1,1,1の場合は[0]のみが使用され、dims=1,1,2の場合は[0][1]のみが使用される。駅ビルの場合、dims=x,yがx<yであってはいけない。~
&ref(アドオン開発/datファイル記述リファレンス/fig06.png,nolink);~
-----
''ここからの駅ビルの説明は、simutrans 101.0以降のバージョンで正しく表示されます。過去のバージョンでは正しく表示されません。''[1]と[3]が逆になります。

駅ビル(dims=1,1,4)の[向き]。dims=1,1,1の場合は[0]のみが使用され、dims=1,1,2の場合は[0][1]のみが使用される。~
&ref(アドオン開発/datファイル記述リファレンス/ext01.png,nolink);~

駅ビル(dims=2,1,4)の[向き][横][縦]。dims=1,1,1の場合は[0]のみが使用され、dims=1,1,2の場合は[0][1]のみが使用される。駅ビルの場合、dims=x,yがx<yであってはいけない。~
&ref(アドオン開発/datファイル記述リファレンス/ext02.png,nolink);~

-----
港(dims=1,2,4)の[向き][横][縦]。港は4つの向きが必要です。~
&ref(アドオン開発/datファイル記述リファレンス/harbor01.png,nolink);~

港(dims=1,1,16)の[向き][横][縦]。(simutrans 101.0以降のバージョン、makeobj49以上でのみ使用可)~
&ref(アドオン開発/datファイル記述リファレンス/harbor02.png,nolink);~

**補足資料3 [#t1591153]
BackImage[0][0][0][0][0][0]=offset.0.0'',64,64'' のように任意で座標を指定すると、表示位置を相対的にずらすことが可能です。マイナスの値も指定可能です。
これにより、画像をタイル外まではみ出させることが可能です。
建築物に限らず、乗り物や標識にも使用可能です。
&ref(アドオン開発/画像/指定の仕方/offset_1.png,nolink);~
↑明るい緑色は、実際に指定した画像が表示される位置。
淡い緑色は本来の建設位置を表す目印。
 datでの表記は上記のとおりで、 ,x,y 。
 ずれる方向を平たく言えば、
 +x = 右
 +y = 下
 -x = 左
 -y = 上
 といった具合。
-----
&aname(symbol);