FE8聖魔の光石で、\\ ワールドマップに自由に道を引く方法を説明します。 ====== そもそも道を引くには? ====== ワールドマップで道を引くイベント命令は、以下のようになります。\\ 魔伝への道を引く 40900000 1b000000 ヴェルニへ道を引く 40900000 09000000 40900000 XX000000 XX=道ID で、道を引くことが出来ます。\\ 道を引く命令は他にもあります。(aeraさんのWMcode.txtより)\\ 40900000 XX000000 道を出す(上で解説しましたね) 40910000 XX000000 静かに道を出す 40920000 XX000000 道を消す また、主人公を拠点へ転送する命令もあります\\ 60C30000 00000F00 XX000000 40850000 00000000 XX=拠点ID (他にも移動命令は有ります) その他の命令は、こちらをご覧ください。\\ NG MANSIONの[FE8]WMイベントコード\\ http://ngmansion.webcrow.jp/wp/2016/02/22/fe8wm%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89/ ====== ワールドマップの道データ ====== ワールドマップ道データは、\\ 0x1F6340 から順番に並んでいます。\\ (laqieerさんのコメントを参考にしています)\\ \\ 道のデータは以下の12バイトのデータです。\\ これが、 0x1F6340 から、道IDの順番に格納されています。\\ struct route{ void* pointer1; //道の形を定義するポインタ byte 起点拠点ID; //道の開始起点となる拠点ID byte 終点拠点ID; //道の終点起点となる拠点ID byte zero1; //謎 00固定 byte zero2; //謎 00固定 void* pointer2; //道を主人公がたどるパスを定義するポインタ //nullを指定すると、拠点間の最短ルートを通る。 //直線の道ならばnullでok. }; 拠点IDとは、ProjectFEGBAの自動イベントの拠点コードです。\\ ====== pointer1の内容 道の形 ====== pointer1の道の形は、以下のデータ構造です。\\ 結構変なデータ構造になります。\\ struct route_pointer1 { byte X座標; //ワールドマップ座標 / 8 を書く byte Y座標; //ワールドマップ座標 / 8 を書く byte 個数; //このY行目にタイルがX方向にいくつ並んでいるか byte dummy1; //必ず 0x01 になるらしい //このY行のXデータが 個数 分続く. struct route_line { byte タイル番号 // (tile & 0xFF) - 1 0からスタート byte タイルフラグ // 回転ないなら0 、回転があればそれ以外の数字? } route_line arr[X軸個数]; }; route_pointer1[Y軸個数]; 終端データ FF 00 00 00 道をY座標、つまり、上から下へ、分割してデータに格納していきます。\\ \\ 道は、8x8のタイルで構成されています。\\ そのため、道のX座標とY座標は、ワールドマップ座標/8 したものになります。\\ \\ 例えば、こういうL字型の道があったとしたら、\\ AB CDEF その道の形を定義するpointer1の先にある内容はこうなります。\\ X座標 = AのX / 8 Y座標 = AのY / 8 個数 = ABの2つだから2 dummy1= 常に1 Aタイル番号 Aタイル番号フラグ Bタイル番号 Bタイル番号フラグ C座標 = CのX / 8 C座標 = CのY / 8 個数 = CDEFの4つだから4 dummy1= 常に1 Cタイル番号 Cタイル番号フラグ Dタイル番号 Dタイル番号フラグ Eタイル番号 Eタイル番号フラグ Fタイル番号 Fタイル番号フラグ FF 終端データ 00 00 00 と、いう風になります。\\ \\ これをいちいち手で書くと辛いので、laqieerさんがツールを作ってくれました。\\ [FE8] World Map Routes Insertion\\ http://feuniverse.us/t/fe8-world-map-routes-insertion/1718 \\ \\ \\ タイルセット番号とタイル番号フラグを知りたい方は、このプログラムを詳しくて見てみるといいです。\\ \\ ====== pointer2の内容 パス ====== とりあえず、普通の道だったら、 pointer2 = 00000000 (null)を指定しておけば、 拠点間を直線で移動してくれます。 struct position{ BYTE nazo_header1; BYTE nazo_header2; BYTE zero1; BYTE zero2; u16 x; u16 y; }; 終端 FF FF FF FF \\ 道の起点から、移動するマップの座標をマップのワールド座標で記載する。\\ ワールド座標とは、 拠点等を設置するときに使う WORD(u16 リトルエンディアン)の座標系です。\\ \\ 道の起点から、position position position ... と位置を記載していき、 FF FF FF FF の終端コードで終わる。\\ \\ \\ 道の起点と、道の終点の座標は不要。あくまでも途中の経路の座標を書く。\\ \\ つまり、道の起点と道の終点が、直角で折れ曲がるL字を書く場合は、\\ L字の角のposition1つだけと終端コードFF FF FF FF になる。\\ 道の起点 [position] [FF FF FF FF] 道の終点。\\ ====== 道データ ====== [[:WM命令:道]]