最新の10件
ページ | 日付 |
---|---|
en:guid:febuildergba:work_support | 2023/06/08 20:25 |
guide:febuildergba:作品支援 | 2023/06/08 20:24 |
最新の10件
ページ | 日付 |
---|---|
en:guid:febuildergba:work_support | 2023/06/08 20:25 |
guide:febuildergba:作品支援 | 2023/06/08 20:24 |
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の道の形は、以下のデータ構造です。
結構変なデータ構造になります。
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座標、つまり、上から下へ、分割してデータに格納していきます。
道は、8×8のタイルで構成されています。
そのため、道の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 = 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] 道の終点。