ホームトップ基本操作メニューバーSABSSMILE研究室特別講座解析資料

特別講座

ここではSMILEから離れて、バイナリエディタでのマップの弄くり方や、
チェックサムの改造の仕方を説明します。
1/24 追記:SMILEにもうマップエディタ付いちゃったんで、
このページは殆ど意味無いです。
5/6 追記:SNES9xなどを起動したときに表示される、
「チェックサム」の改造の仕方を追加。
5/22 追記:スクロールの編集の仕方を追加。
まぁ興味があったら読んでくださいな。
ポーズマップ改造
チェックサム改造
スクロールの編集
-




-ポーズマップ改造


まず、バイナリエディタが無いと話になりませんので、ベクター辺りで適当にDLしましょう。
ちなみに管理者はhgBedというソフトを使っています。
DLしたら、スーパーメトロイドのROMを開いてみましょう。訳のワカラン文字列がズラァァァァァァと並んでると思います。
これは16進法といい、10進法が0〜9まで行ったら位が上がるのに対し、16進数は0〜16まで行ったら位が上がる、といった進法です。
通常は「00,01,02,03,04,05,06,07,08,09,0A,0B,0C,0D,0E,0F」と表記します。

それから、基本的にデータは上書きで行います。
設定やらオプションやらで「上書き」のところにチェックを入れておきましょう。

設定が完了したら、今度は実際に書き換えてみます。
左側のアドレスが「1A8200」の部分まで移動してみましょう。
なにやら「1F 00」という数字が並んでいます。
その中に、「CE 0C」という文字列があると思います。とりあえず「CE」の部分を「10」にでも変えてみましょう。
そしたらブリンスタへ行ってみましょう。

ウヒョオ!カワッタ(゜∀゜)

もうこうなったら全部「10 0C」の支配下にしてしまいましょう。

(#0w0)ウェイイイイイイイイ(死

ここで覚えておきたいのが、数値の並び方の法則です。
基本形は、2Byte単位(1Byte=「00」などの文字列)でブロックの情報が保存されています。
最初の1Byteは配置するブロック、次の1Byteはブロックの向きが設定されています。
ブロックの向きは、「0C」がそのまま、「4C」が左右反転、「8C」が上下反転となっています。

マップデータが保存されている範囲は、

・1A8200〜1A91FF:ブリンスタ
・1A9200〜1AA1FF:クレテリア
・1AA200〜1AB1FF:ノルフェア
・1AB200〜1AC1FF:難破船
・1AC200〜1AD1FF:マリーディア
・1AD200〜1AE1FF:ツーリアン
・1AE200〜1AF1FF:スペースコロニー

となっています。

基本が分かったら、後は配置したいブロックを配置するだけです。
とりあえず、有効なブロックリストを掲示しておきます。

10〜1B
1F
20〜2F
4D〜4F
5E〜5F
6D〜6F
76〜77
8E〜8F
CE


また、全てを改造できるわけではなく、以下のような制約があります。

・マップ部屋やセーブ部屋などに配置さていれるアイコンは配置できない
・マップデータロードでロードされる座標は変えられない



とまぁ長々と書きましたが、SMILE作者さんに投稿する予定なんで、そのうち消えると思いマフ(死




-チェックサム改造


SNES9xを起動したとき、オリジナルでは白い文字が表示されますが、
改造後だと黄色の文字に変わってしまって、気に食わない人、いませんか?
実は白文字から黄文字に変わってしまうのは、「チェックサム」という物が、改造後には変わってしまうことが原因です。
ここでは、その「チェックサム」を指定する方法を説明します。

そもそも、チェックサムとは何なのか。
チェックサムとは、ROMが改造されていないか、正常なROMになっているか、という事をチェックする機能です。
ここで説明していることを簡潔に言えば、そのチェックをかいくぐろう、という話です

さてさて、では実際に改造に取り組んでみます。
まず、チェックサムを正常にしたいROMを開いてROM情報を見ます。

見事にエラーが発生しています。
ここで注目してもらいたいのが、「Actual Checksum」という項目です。
この数値を特定のアドレスに指定することで、チェックサムを指定することが出来ます。

次に、「Actual Checksum」の値をビット反転させてください。
ビット反転の手順は、
16進数を2進数に変換→その数値の「0」と「1」を反転→出来た数値を再び16進数に変換
という感じです。
16進数を2進数に変換する方法が分からない場合は、アクセサリの「電卓」機能を使うと良いでしょう。

数値が出来上がったら、バイナリエディタで「81DC」まで移動してください。
そこに、「20 07 DF F8」という数値があると思います。
これがROM内で指定されているチェックサムの数値です(ROM情報の「Header ChecksumHeader」「Checksum Compliment」と同じ数値)。
ここに、先程作った2つの数値を、反転数値→通常数値の順で書き込みます。
といっても、普通に書き込んだら駄目です。
「FE31」だったら「31FE」と言うように、2文字づつ上下を反転させて書き込んでください。

書き込んだら、ROMを起動して確認してみてください。

はい変わったー
最初に表示される文字が白くなっていたら成功です。


とまぁ長々と書きましたが、これを変えなくてもゲームプレイに支障は無いです。
いわば自己満足
暇があったらドゾー




-スクロールの編集


ここでは、今まで不可能だった、「S」アイテムによるスクロールの制限の方法を解説します。

まず、例として、部屋「$792FD」を使用します。
部屋を開いたら、一番左端にある「S」アイテムをクリック、編集画面を開きます。
開いたら、そこに書いてあるIndex2とIndexの値を覚えます。
そして、Index2の値とIndexの値をつなげた値に$70200を足します(十六進数、ヘッダ無しの場合は$70000)。$9399+$70200=$79599となります。

数値が出たら、バイナリエディタでスーパーメトロイドのROMを開き、アドレス「$79599」まで移動します。
そこに、「$00 01 80」という文字列があると思います。これがスクロールを制御している文字列です。
では、実際にどのように変えていけば良いのか。

最初の1Byte($00)は変えるスクリーンを示しています。
ではこの「$00」とはどのスクリーンを示しているのか。以下の図をご覧ください。

一番左上から始まり、一番右に達したら一段下がり、また一番右に達したら・・・と言う風に続いています。
さて、この図の中に$00は何処にあるでしょうか。一番左上にありますね。
よって、この1Byteは一番左上のスクリーンを変える、という事を示しています。

真ん中の1Byte(01)は最初の1Byteで指定したスクリーンをどう変えるか、という事を示しています。
「$00」はスクロールしない(SMILEで見ると赤)、「$01」は少しスクロール(SMILEで見ると青)、「$02」はスクロール全開(SMILEで見ると緑)を示しています。

最後の1Byte($80)は命令の終了を意味します。命令の最後には必ずこれが付いていますので、覚えておいてください。

大体の命令が3Byte単位で記録されていますが、中には複数のスクリーンを変える命令も存在します。
Index2$93、Index$8Fの「S」アイテムの命令が保存されているところ($7958F)までバイナリエディタで移動します。
そこに、「$00 00 02 00 06 02 80」という文字列があると思います。
さっきと違って文字が増えていますが、基本は変わっていません。
これは、「$00」スクリーンを「$00」に、「$02」スクリーンを「$00」に、「$06」スクリーンを「$02」に変えるという事を示しています。
これから分かるように、命令は「変えるスクリーン→それをどう変えるか→変えるスクリーン・・・命令終了」という様な並び方になっています。

また、新しい命令を追加したい場合は、「$7EBA0」に書き込んでください。
書き込んだら、書き込んだアドレスから$70200を引いた値を、それぞれ「S」アイテムのIndex2とIndexに設定、配置してください。


文章構成だめぽorz