最新の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ワールドマップの入れ替える方法について説明します。
マップ作成支援ツール
Map creator
サイズ | 64×64 |
画像アドレス | 0xB26A6C (圧縮) |
パレット | 0xB2715C |
サイズ | 480×320 |
画像アドレス | 0xB085F8 (無圧縮) |
パレット | 0xB1B278,B1B298,B1B2B8,B1B2D8 |
暗パレット | 0xB1B1F8,0xB1B218,0xB1B238,0xB1B258 |
サイズ | 240×160 |
画像アドレス | 0xB1E9B8 圧縮されてる |
パレット | 0xB23D3C,B23D5C,B23D7C,B23D9C |
TSA | 0xB237EC 圧縮されている |
サイズ | 240×160 |
画像アドレス | 0xB4BBA0 圧縮されている |
パレット | 0xB4FCD4 |
TSA | 0xB4F758 圧縮されている |
FE8ではTSA等を利用して、16色以上色を作ることが出来ます。
具体的には、GBAは、8*8のタイルから構成されたタイルデータを持ち、
そのタイルごとにパレットを切り替えて、16色を超える画像を出せます。
ただ、これはとても難しく、データを用意するのも大変なので、今回は利用しません。
今回は、すべて16色に限定して、楽にワールドマップを定義する方法について説明します。
(0番目を透過色にしないことをおすすめします。)
laqieerさんの解析資料を見てください。
アドレスとかいろいろ掲載されています。
彼の解析のおかげで、いろいろな事実が判明しました。
[FE8] World Map Graphic Insertion
http://feuniverse.us/t/fe8-world-map-graphic-insertion/1738/1
バイナリエディタ
http://www.vector.co.jp/soft/win95/util/se079072.html
NLZ-GBA Advance (または GBA Graphics Editor)
http://www.romhacking.net/utilities/529/
edge
http://takabosoft.com/edge
ワールドマップにしたいデータ
今回は、wikipediaにあるオーストラリ大陸の画像を入れてみます。
https://ja.wikipedia.org/wiki/%E3%82%AA%E3%83%BC%E3%82%B9%E3%83%88%E3%83%A9%E3%83%AA%E3%82%A2#/media/File:Australia_satellite_plane.jpg
FE8_AU_PATCH 大陸を全部AUに置き換えただけのパッチです。
参考にしてください。
http://ux.getuploader.com/FE4/download/243/FE8_AU_PATCH.7z
一番簡単なものからいきます。
ゲーム中に下の方に表示されるminimapを入れ替えてみます。
サイズ | 64×64 |
画像アドレス | 0xB26A6C (圧縮) |
パレット | 0xB2715C |
サイズ 64×64の 16色 png画像を用意してください。
今回はこの画像に差し替えてみます。
https://i.imgur.com/qNopQuX.png
NLZ-GBA Advance を立ち上げて、
左上の File handling をクリックし、
Load Rom で FE8聖魔のrom を読み込みます。
新規にromを読み込んだ場合は、
romをスキャンしてもいいかと聞かれるので、OKと答えます。
ROMと同じ場所に romの名前.nlzというキャッシュが作られます。
赤枠で囲った Compressed graphics にチェックが入っていることを確認してください。
緑枠で囲った Width に、8 と入力します。
青枠で囲った Offset に、B26A6C と入力します。
紫枠で囲った ROM Pallet offset に、 B2715C と入力します。
そうすると、ウィンドウに minimapが表示されます。
これらの設定は、変更するものの設定からきています。
サイズ | 64×64 → 64 / 8ドット単位 = 8 |
パレット | 0xB2715C → 0xというのは16進数というマークなのでそれ以降を入れる |
画像アドレス | 0xB26A6C 圧縮 → 圧縮されているのでCompressed graphicsを有効にします |
ゲーム中に操作することになるフィールドマップを入れ替えてみます。
フィールドマップは pallet map構造になっており、
4つのパレットを8*8タイルごとに切り替えて表示することができます。
が、そうすると話がややこしくなるので、ここでは 16色限定で話をします。
サイズ | 480×320 |
画像アドレス | 0xB085F8 (無圧縮) |
パレット | 0xB1B278 - |
暗パレット | 0xB1B1F8 - |
サイズ 480×320の 16色 png画像を用意してください。
注意:パレット 0番目の色を透過色にしてはいけません。絶対にダメです。
注意:パレット 0番目に何を指定しても黒(RGB(0,0,0))になります。
今回は、この画像におきかえてみます。
https://i.imgur.com/nBlcdtE.png
NLZ-GBA Advance を立ち上げて、
左上の File handling をクリックし、
Load Rom で FE8聖魔のrom を読み込みます。
赤枠で囲った Compressed graphics のチェックをオフにしてください。
緑枠で囲った Width に、60 と入力します。
青枠で囲った Offset に、B085F8 と入力します。
紫枠で囲った ROM Pallet offset に、 B1B278 と入力します。
そうすると、ウィンドウに ワールドマップが表示されます。
ここで、セーブ・・・するまえに、やることがあります。
ワールドマップは、8*8のタイルで4つのパレットを切り替えることで16色を超える色がだせるのですが、
今回これを利用しません。
どのタイルが、どの色を使うのかをpallet mapというデータで定義されていますが、
これを変更するのは少々やっかいなので、
代わりに、4つのパレットを全部同じ色にすることで、この問題を強引に解決します。
パレットは、0xB1B278 から、 0x20バイトずつ、4つあります。
今回、0xB1B278を設定したので、残りの3つを設定します。
パレット一覧 | |
B1B278 | (これはもう設定済み) |
B1B298 | これから設定する |
B1B2B8 | ↓ |
B1B2D8 | ↓ |
どうように、パレット B1B2B8 と B1B2D8も設定してください。
パレット一覧 | |
B1B278 | (これはもう設定済み) |
B1B298 | (これはもう設定済み) |
B1B2B8 | これから設定する |
B1B2D8 | ↓ |
追記
これ以外にもパレットがあるらしいです。
拠点を選択した時、ワールドマップが少し暗くなって、
台詞が始まりますが、このパレットは別の位置にあります。
暗くなるパレット一覧 |
B1B1F8 |
B1B218 |
B1B238 |
B1B258 |
A:pallet mapを指定してください。
pallet mapは、lz77で圧縮されているので、解凍してください。
解凍すると、 1200バイトのデータになります。
解凍後の pallet map をバイナリエディタで開いて書き換えてください。
mapを8*8のタイルに分割し、そのタイルが何番目のパレットを使うかを格納していきます。
1バイトに2タイルの情報がはいっています。
0x33 だった場合、
0x33 & 0xf == 1つ目のタイルは 0x3(つまり4番目のパレットを使う)
(0x33»8) & 0xf == 2つ目のタイルは 0x3(つまり4番目のパレットを使う)
これを1200バイト定義することで、すべてのタイルのパレット割り当てを定義してます。
1200バイト*2タイル=2400タイル
(480×320 は、 (480/8)*(320/8)=2400タイル)
修正後は、lz77で圧縮しromに書き戻してください。
このとき、サイズが超えてしまう場合は、移さないとだめでしょうね。
イベント等、序章のプロローグなどの、イベントで表示されるワールドマップを入れ替えます。
このマップも、8*8タイルごとで4つのパレットを切り替えて表示していますが、
フィールドのワールドマップとは違いTSAという方法で、切り替えを行っています。
TSAを操作すると、話がとてもややこしくなるので、
ここでも、4つとも同じパレットを設定することで話を進めます。
サイズ | 240×160 |
画像アドレス | 0xB1E9B8 圧縮されてる |
パレット | 0xB23D3C - |
TSA | 0xB237EC 圧縮されている |
240×160の16色pngを用意してください。
(注意:パレット 0番目の色を透過色にしてはいけません。絶対にダメです。)
今回はこの画像に置き換えます。
https://i.imgur.com/4RM8NNO.png
step_c01からstep_c06でやる加工前の元画像
https://i.imgur.com/tJSkuTa.png
まず最初にしないといけないことが一つあります。
イベント等、序章のプロローグで表示されるワールドマップは、 240×160なのですが、
そのまま、この画像を使うことができません。
以下のように、先頭8×8のタイルを後方に移動しなくてはいません。
そして、先頭の8×8をパレット0番で塗らないといけません。
必ず、先頭 8×8の部分が、
パレット0番の色で塗られていることを確認してください。
以上の処理をした画像をこれです。
もし、動作しない場合は、この画像と見比べてください。
画像ができたら、
次は、今までと同じように、NLZ-GBA Advanceで画像を入れます。
NLZ-GBA Advance を立ち上げて、
左上の File handling をクリックし、
Load Rom で FE8聖魔のrom を読み込みます。
赤枠で囲った Compressed graphics にチェックが入っていることを確認してください。
緑枠で囲った Width に、30 と入力します。
青枠で囲った Offset に、B1E9B8 と入力します。
紫枠で囲った ROM Pallet offset に、 B23D3C と入力します。
そうすると、ウィンドウに
イベント等、序章のプロローグなどのイベントで表示されるワールドマップが表示されます。
ここで・・・保存するまえに、やることがあります。
イベント等、序章のプロローグなどのイベントで表示されるワールドマップは、
TSAで、4つのパレットを8*8のタイルで切り替えて表示させています。
TSAの変更はいろいろと大変なので、4つのパレットをすべて同じ色にすることで対応します。
パレットは、0xB23D3C から、 0x20バイトずつ、4つあります。
今回、0xB23D3Cを設定したので、残りの3つを設定します。
パレット一覧 | |
B23D3C | (これはもう設定済み) |
B23D5C | これから設定する |
B23D7C | ↓ |
B23D9C | ↓ |
どうように、パレット B23D7C と B23D9Cも設定してください。
パレット一覧 | |
B23D3C | (これはもう設定済み) |
B23D5C | (これはもう設定済み) |
B23D7C | これから設定する |
B23D9C | ↓ |
A:がんばって、TSAを設定してください。
ゲームOPで一瞬だけ登場するワールドマップを入れ替えます。
この変更が一番ややこしいです。
難しい理由は、TSAを変更なくてはいけないためです。
そして、このTSAは圧縮されています。
OPをカットするパッチを使い、OPを消す予定の方は、
どうせ表示されないので無理して変更する必要はありません。
あえて、困難に挑みたい方は、がんばりましょう。
サイズ | 240×160 |
画像アドレス | 0xB4BBA0 圧縮されている |
パレット | 0xB4FCD4 |
TSA | 0xB4F758 圧縮されている |
今回は、この画像に置き換えます。
https://i.imgur.com/DW4i8QL.png
step_d01-step_d04でやる加工前の元画像
https://i.imgur.com/I0qC9T5.png
幅を追加したら、そのまま何もせずに、
保存して、edgeを終了します。
画像を追加する前に、まだやることがあります。
TSAデータを更新する必要があります。
このまま画像を追加しても、TSAによって崩れた画像になってしまいます。
TSAには、8*8のタイルに画像を分割し、そのタイルがどこの位置で、どのパレットを利用しているか、反転などの操作をするかなどのい情報が格納されています。
今回の利用するTSAはさらにそのデータがlz77で圧縮されているのでとてもやっかいです。
私の方で、普通の画像を正しく表示する圧縮されたTSAを作成しておきましたので、これをご利用ください。
これどう使うのか?
バイナリエディタで、romに追加します。
TSAは0xB4F758なので、この領域に上書きすればいい・・・というわけではありません。
TSAデータは圧縮に不向きなデータ構造をしており、
圧縮すると逆にデータ容量が増えてしまうことがあります。
そして、今回作成したTSAは、運が悪いことに、もともとのTSAより大きいデータです。
そのため、元の領域にいれてしまうと、romが壊れます。
仕方ないので、romの末尾に追加します。
今回は、無改造romなので、 0x01000000 に追加します。
やり方を次に説明します。
tsa.lz77.bin をバイナリエディタで開き、
全選択します。
tsa.lz77.bin は、FE8_AU_PATCHの中にはいっています。
http://ux.getuploader.com/FE4/download/243/FE8_AU_PATCH.7z
そして、追加したTSAを参照するように、プログラムを直します。
TSAは0xB4F758ですので、
これを参照している場所を探します。
0xB4F758はポインタです。
GBAはROMは0x08000000 以降に配置されるので、ポインタにするには 0x08000000 を足さないといけません。
TSA 0xB4F758 + 0x08000000 = 0x08B4F758
そして、GBAは、PCと同じく、リトルエンディアンなので、
2バイトずつ逆順に記述しないといけません。
0x08B4F758 ↓ 0x08 B4 F7 58 ↓ 0x58 0x58 F7 0x58 F7 B4 0x58 F7 B4 08 ↓ 0x58F7B408
よって、TSA 0xB4F758を参照するとき、
0x58F7B408 という値を利用します。
この値をromから検索してみると・・・
ROM末尾のアドレスは、 0x01000000 です。
ですが、参照するとは、ポインタにしないといけないので、
0x08000000 を足して、0x09000000になります 。
0x01000000 + 0x08000000 = 0x09000000
GBAは、リトルエンディアンなので、0x09000000を変換します。
0x09000000 ↓ 0x00 0x00 00 0x00 00 00 0x00 00 00 09 ↓ 0x00000009
TSAの追加と、参照の変更をしたら、一度ROMを保存します。
(保存する前にバックアップを忘れずに。)
やっと、画像を登録する準備ができした。
NLZ-GBA Advance を立ち上げて、
左上の File handling をクリックし、
Load Rom で FE8聖魔のrom を読み込みます。
赤枠で囲った Compressed graphics にチェックが入っていることを確認してください。
緑枠で囲った Width に、32 と入力します。(256/8=32)
青枠で囲った Offset に、B4BBA0 と入力します。
紫枠で囲った ROM Pallet offset に、 B4FCD4 と入力します。
そうすると、ウィンドウに
かなり崩れていますがワールドマップぽいのが表示されます。
崩れているのは、TSAを正しく設定していないためです。
A:正しいTSAデータを参照するようにしていますか?
step_d05当たりをよく確認してください。