改造ポケモンを製作しています。現在はポケットモンスタージャスティスを製作中です!2010/4/1にショートverを公開しました!

はじめに...

色々とややこしいですが根気を持って。
今回は日本語版エメラルドを使います。

必要なもの

・バイナリエディタ(Stirlingなど)
・AdvanceMap1.9
・16進数計算のできる電卓
・ちょこっとメモするようにテキストエディタ

では早速

オフセットの検索
AMを使って空いているオフセットを検索します。
大体700バイトぐらい空いていればよろしいのではないでしょうか。
そしてそのオフセットをテキストエディタにメモしておきます。
タイルセット番号の計算
これには公式があって、10進数で表すと、
タイルセット番号 = ( タイルセットのヘッダオフセット - タイルセット0のヘッダオフセット ) / 24
となります。

16進数だと、
タイルセット番号 = ( タイルセットのヘッダオフセット - タイルセット0のヘッダオフセット ) / 18
だから注意してね。

今回は「$9158E0」のあたりに空きスペースを見つけたので、それを使って計算したいと思います。
あ、そうそう。日本語版エメラルドのタイルセット0のヘッダオフセットは「$3B7B24」にあるらしい。

これを公式に代入して...
タイルセット番号 = ( $9158E0 - $3B7B24 ) / 24 = $393E7
これを10進数に変換して、「234471」が今回のタイルセット番号です!!!


と言いたいところですが、奇数はいけないらしいのです。と言うことでですね、「1」を足すんですよ。
その結果タイルセット番号は「234472」になります。
タイルセット番号の計算
で、さっきの式を変形して、ヘッダのオフセットを求めます。
タイルセットのヘッダオフセット = タイルセット0のヘッダオフセット + タイルセット番号 * 24
これが10進数版の公式。エメラルドだとこれに8を足さなければいけないという噂が。つまりこうなる。
タイルセットのヘッダオフセット = タイルセット0のヘッダオフセット + タイルセット番号 * 24 + 8

16進数にすると、
タイルセットのヘッダオフセット = タイルセット0のヘッダオフセット + タイルセット番号 * 18 ( + 8 )
になるのかな。(カッコ)はエメラルドの場合です。

今回はエメラルドを使っているのでこの「+8」が重要。代入して、
タイルセットのヘッダオフセット = $3B7B24 + $393E7 * 24 + 8 = $9158EC
だから、正しいヘッダのオフセットは「$9158EC」となります。
画像データの挿入
これはいくらでも後で改変が効くので、ひとまず「00」で80バイト分挿入します。つまり「00」を80回書けばいいわけ。
で、どこから書き始めるかというと、タイルセットヘッダが24バイト分あるから、それを飛ばして今回は「$915904」から挿入します。
そこから80バイトに渡ってずらーっと書き並べます。こんな感じ。黒い印から始まっています。(すでにヘッダは挿入済み。ご勘弁を。)

パレットデータの挿入
これが意外と量が多いんです。でも便宜上くっつけます。512バイトあります
面倒なので何も入れずそのFFのままスキップしたいと思います。
電卓で画像データの終わった次のオフセットを10進数に変換して512を足して求めてください。
今回は「9525588($915954) + 512 = 9526100($915B54)」となりました。
と言うことでそこの部分を放置してその次のアドレスへとジャンプしてくださいね。大体このぐらいの長さがあります。

ブロックデータの挿入
次はブロックデータを挿入します。ブロックデータって何ぞ?と言う人がいるかもしれませんが、赤線で囲ったところがそうです。

この一マス分が16バイトあります。つまりブロック一個で16バイト。二つで32バイト。
と言う風に計算していきます。とても単純。挿入したいだけ書き連ねます。おそらく上限は64*8個ぐらいまでかな。タイルセット1のサイズを見ると。
まぁそうやって00を欲しいタイルの分だけ書き連ねていきます。今回は8個追加してみました。ちょっと多く見えるのは別のデータですのでお気になさらず。後述します。

ブロックの動作データの挿入
これはですね、ちょっと伝わりづらいんですがいわゆるAMのブロックエディタのマップのアクションと背景の効果っていうやつです。
ブロック一つにつきRSEだと2バイト、FRLGだと4バイト使います。今回はエメラルドでブロックを8個挿入したから、「2 * 8 = 16」バイト分挿入します。

タイルセットヘッダの挿入
これが厄介なのかな。ちょっと面倒です。
合計24バイトあって、先頭から色々と書き連ねていきます。

まず最初の1バイトは画像データの種類です。「00」で未圧縮画像、「01」で圧縮済み画像です。よく分からないのでひとまず圧縮済みの「01」ということにします。

次の1バイトはタイルセット1にするか2にするかです。ここで決まります。「00」でタイルセット1、「01」でタイルセット2です。
タイルセット1は色々と面倒らしいのでタイルセット2である「01」にします。

次にワンクッション、「00 00」が入ります。

次の4バイトはタイルセット画像のオフセットです。
今回は「$915904」なので、逆順で「04 59 91」。これじゃ足りないので末尾に「08」をつけて「04 59 91 08」となります。

そして次はパレットののオフセット。
「$915954」にあるから「54 59 91 08」。また最後に「08」をつけています。

で、ブロックデータ。
「$915B04」より「04 5B 91 08」です。絶対に「08」を忘れないように。

次の8バイト(4 + 4)はRSEとFRLGで分かれます。まずは4バイト。
RSEの場合ここには動作データのオフセットが入り、FRLGの場合はアニメーションの設定が入ります
今回はエメラルドですから、動作データのオフセットを挿入します。今回は「$915B84」に入っているので、「84 5B 91 08」です。おなじみ「08」。
FRLGの場合、特にアニメーションを使用していない場合、「00 00 00 00」が入ります。アニメーションを使用した場合にどうなるかは分かりません。

次の4バイトは先程とは逆に、RSEの場合はアニメーションの設定が入り、FRLGの場合には動作データのオフセットが入ります。
今回アニメーションは特に使用しないので「00 00 00 00」とします。あった場合はどうすればよいのか、私には分かりません。(大事なことなので二回言います)
FRLGの場合は上と同じようにすればよいのではないでしょうか。

ということで、これを結合すると
01 01 00 00 04 59 91 08 54 59 91 08 04 5B 91 08 84 5B 91 08 00 00 00 00
となります。これをヘッダのオフセットとして計算して24バイト分空けておいたところへ挿入します。


これで作業は終了です。あとはAMを起動して、タイルセット2のところに先程計算したタイルセット番号を入力して変更してみます。
するとまぁ、見事なまでに追加されているわけでございます。

よく分からない点などございましたらコメント欄までお寄せください。それでは。

メニュー

"移転済み"

どなたでも編集できます

メンバー募集!