simutransのマップを自作する時のメモです。
simutransのマップは自作出来ます、自作したマップはいったん読み込ませてゲームデータに変えたら編集は出来ないみたいです。つまり自作したマップでゲーム開始時の状態を設定できますが、その後はゲーム内で編集する事になります。
simutransのマップはppmかbmpの画像ファイルで、1マスが1ピクセルで、そのピクセルの8bitグレースケールの値が高さを表します。よく『simutransのマップは明度が高さを表す』と言われますが、ppmもbmpもRGB色空間(赤緑青)なので、わざわざHSV色空間(色相、彩度、明度)に変換して明度を得て使っているとも思われず("明るさ"を"明度"と言っているだけかもですが、明度という用語を使うとHSVのと混同しやすいので、なんともです)、、、まあ 8bitグレースケールの値を使っているだけのようです。
で、その高さと値の対応ですが、日本語wikiや海外のサイトに載っています、載っていますがなんだか釈然としない値です。
うーん、なんだか規則性が見れませんし、実際にその値でやってみても微妙にずれる事があったりします。で、いろいろやって調べてみました。
まずは、グレースケールBMP(8bitBMP)で、上記サイトの値を使っていろいろな高さを試してみましたが、うまくいきません。たとえば海外サイトの情報でやると、
高さ14,13,12,10,9,8,7,5,4,3,1,0,-1,-3,-4,-5,-7,-8,-9,-11,-12,-13,-15,-16,-17
となり、11,6,2,-2,-6,-10,-14が無く、間が二段階の坂で繋がれてしまいます。
そこで、0x00~0xffまでの値を連続的に変えたBMPファイルを作りそれをsimutransに読み込ませてみました。
 |
| 256×256のサイズで、1ライン目は00、2ライン目は01、3ライン目は02、、、256ライン目はFFとなるBMPファイル |
これをsimutoransに読み込ませてみます。
 |
| map高さ調査simutoransでの表示(海-2) |
 |
| map高さ調査simutoransでの表示(海-20) |
おお、ちゃんと一段ずつ表示されました。
どうも高さと値の関係は以下のようであるようです。
高さ グレースケール値
-17 0 ~ 7
-16 8 ~ 15
-15 16 ~ 23
-14 24 ~ 31
-13 32 ~ 39
-12 40 ~ 47
-11 48 ~ 55
-10 56 ~ 63
-9 64 ~ 71
-8 72 ~ 79
-7 80 ~ 87
-6 88 ~ 95
-5 96 ~ 103
-4 104 ~ 111
-3 112 ~ 119
-2 120 ~ 127
-1 128 ~ 135
0 136 ~ 143
1 144 ~ 151
2 152 ~ 159
3 160 ~ 167
4 168 ~ 175
5 176 ~ 183
6 184 ~ 191
7 192 ~ 199
8 200 ~ 207
9 208 ~ 215
10 216 ~ 223
11 224 ~ 231
12 232 ~ 239
13 240 ~ 247
14 248 ~ 255
なんのことはない単に8区切りでした、、、
注:この結果ですが、simutrans 120.4.1で、
[height_map_conversion_version_new ON]
[pak_height_conversion_factor != 2]
の時の値です。まあ今後デフォルトで使う限りこの値ではあります。
simutransのバージョンや設定での違いを次に書きました。
【ゲーム】simutrans 自作マップ 高度についてバージョンと設定値での違い