凱歌の号砲・都市を作る

(1). 都市データ解析
Mi-24改 の作り方 に書いたと同様、エディタ で mapdata フォルダ の中の 改造したい
マップデータファイル を開きます。 ここでは例として 全国・瀬戸マップ ( map059.dat ) を
使ってます。  16進電卓 もあった方がやりやすいっす。
いろいろやる前に バックアップ だけはしっかり取っておきましょう。
この map059.dat を見ますと、ヘッダ部分があって、
  00A0 に マップ番号、
  00B4・00B8 にマップの上下左右の大きさ ( 30 = 10進で 48hex ) 、
  00C0 に マップ内の 都市・空港・港の総数 が記述されてます。
都市を10コ増やす場合は、このマップでは 00C0 の値が 27 なので 10 足して 31 に
書き換える必要があります。 こうしとかないと都市データの記述を増やしても、マップに
反映されません。 逆に 都市の記述がこの数値より少ない場合は、左上スミに 耐久力が
ゼロの無名の町 ができちゃいます ( この町では補給とかはできません )。

10進数と16進数を区別するために、これ以降16進数については、例えば 31 の場合なら
0x31 みたいに書きます。 上のを例とすると、0x27 + 10 = 0x31。 こんな感じっすね。
アドレスの方も 0x00C0 みたいに記述します。
ヘッダの後 ( 0x00D0 から 0x48CF まで ) に 48×48=2304コ のデータが続きます。
1つ目が 左上スミ のマスのデータ。 以降は右の hex へと続き、48コで1列分です。
この部分は Красная☆ さんの掲示板で、迷いの地 さんが詳細に解明・報告されました。
どうもありがとうございます。 以下に引用させていただきますと、
各データは8バイト。 意味を持つのは1コ目と5コ目の数値。

1コ目のデータは 地形 を意味してます。
  0x02 が 平地、0x03 が 田園、0x04 が  森、 0x06 が 砂丘、0x07 が 丘陵、
  0x08 が 山 、0x0A が 浅瀬、0x0B が 海/湖、0x10 が 町 、0x11 が 市街地、
  0x18 が 都市、0x19 が 空港、0x1A が 港、という具合です。 詳細は こちら
これは、カーソルを合わせた場所がどんな地形か画面下に表示するのに利用してます。
また、部隊の移動できる範囲を表示する際にも使うのでしょう。 都市を増やす場合は、
対応する箇所のデータを書き換えた方がいいかもしれません。 が、別に書き換えなくとも
ちゃんと都市機能は働きます。 海や山の真ん中に都市を作った場合、周囲が進入禁止
なので地上部隊を配置しても一歩も動けなくなります。 ヘリなら大丈夫ですが。

5コ目のデータ。
これは、その hex に隣接する道路が存在するかどうか、また、存在する場合は、上なのか
下なのか・或いは右上と左下両方に・というふうに方向までわかるという数値でした。
  上:0x01  右上:0x02  右下:0x04  下:0x08  左下:0x10  左上:0x20
という具合です。 また、多方向に道路がある場合は、足しちゃいます。
  上と下にある場合:上を示す 0x01 と 下を示す 0x08 を足して 0x09 になる
  右上・下・左下にある場合も同様に 0x02 と 0x08 と 0x10 を足して 0x1A になる
  右上・右下・左下・左上にある場合 : 0x02 + 0x04 + 0x10 + 0x20 = 0x36 になる
すごいですね。 これを解析した 迷いの地 さんの努力に敬意を表します。
この数値も、部隊の移動できる範囲を表示する際に使われてると思います。

次に、どの hex のデータが、どこのアドレスに記されているかの計算式を。
例えば、大和が捕獲できる場所 ( 左上スミ基準で ) は、左6番目・下22番目の hex
ですが、そのデータは 0x2078 にあります。 計算式は以下の通り。
     0xD0 + ( a - 1 ) * 8 + ( b - 1 ) * 0x180
左上隅の hex を1番目とした場合、aが右に何番目、bが下に何番目ってことです。
また、地域戦用の小マップの場合は 32×32=1024コ のデータが 0x00D0 から
0x20CF まで 並んでます。 この場合の計算式は次のようになります。
     0xD0 + ( a - 1 ) * 8 + ( b - 1 ) * 0x100
最後に 0x48D0 から 都市データ が続きます。 1件64バイト。 1件目を例にとると、
  0x48D0 : 都市名
  0x48F0 : 国籍 ( 0x00:BLUE 0x01:RED 0x02:YELLOW 0x03:GREEN 0x04:中立 )
  0x48F8 : 初期耐久力
  0x48FC : MAX 耐久力
  0x4900 : 左端のhexを0として 右へ何hex目か ( 0x03 なら左端から4コ目 )
  0x4904 : 上端のhexを0として 下へ何hex目か ( 0x01 なら上端の1コ下 )
  0x4908 : 種類 ( 0x02:都市 0x03:拠点 0x04:空港 0x08:港 )
  0x4909 : 配置の可/不可 ( 0x00:不可 0x01:可 )
(2). 書き換えてみる
と、上記のようにいろんなことがわかったので実験。
最初は松山方面。 都市は増やさずに、空港を海の上に移動してみたり、都市名を
変えたり、港以外は配置不可能にしたりしてみたりしました。
山松ってなんだよ?
あんまり重いんで、64色に減色したうえに70%圧縮の jpg 画像 ( それでも 53kB )
(3). 都市を追加してみる
次に広島方面。 都市を2つ増やしてみました。 部隊配置もできるようにしました。
    ( どこだ は 0x01 0x01 に、どこだ2 は 0x00 0x04 に作ってます )
自分の住んでる県の駅すべてを都市にして 『 桃鉄 』 みたいなマップにするのもいいなぁ。
どこだって何処なんだよ?
やっぱり重いんで、64色に減色したうえに70%圧縮の jpg 画像 ( それでも 61kB )
コーエー殿、画像の使用に問題がありましたら御一報下さい。


Back