注意
現在主流なのは「LevelASM」より「UberASM」みたいです。
なんぞこれー
ある特定のlevel全体にカスタムブロックの効果やスプライトコマンドの効果を反映できるというもの
要はこれを入れるとlevelごとにプログラムを書き込める欄ができるってこと。プログラムは、そのlevelにいる限り毎フレーム実行される。(特別な場合をのぞき)
ダウンロード(修復)
LevelASMを簡単に適用するためのIPS
過去スレからコピペ。問題あれば消してください。
649 名前: 壁に耳あり、障子にメアリーさん [sage] 投稿日: 2006/03/08(水) 00:26:33 話ぶった切ってゴメソ http://mudlava90.hp.infoseek.co.jp/smw/levelasm_quickinstall.zip >>17のLevelASMを簡単に導入するパッチです。513KBの未改造ROM用。 導入成功したのはいいものの、この後どうすればいいのかわかんね('A`) 各面毎に違ったコードを実行できるようですが、その領域が8バイトしか用意されてません。 多分どこか空いている場所(FFや00で埋まってる)にサブルーチンを書いてJSLでそこに飛ばすんだろうと 思われます。
SMW RATS Writerを使ったLevelASMの使い方
-
LevelASMを導入しよう
+SMW RATS Writerで、好きなコードを挿入しよう(BlockToolのコードを使う際には60(RTS)を6B(RTL)に変更するのを忘れずに)
+SMW RATS Writerで出てきたSNESアドレスを覚えよう
ここでは xxyyzzとしておく
+LevelASMのコードテーブルの適用したいステージのアドレスのところに
22 zz yy xx 6B と書こう。
※追加した分の00を消すのを忘れずに。
新型スクロール土管と併用可能な互換LevelASM
公式バージョンのLevelASMは新型スクロール土管と併用することができませんが、新型スクロール土管と併用が可能な互換LevelASMが存在します。
ダウンロード
基本的なlevelASMの使い方
1.準備
levelnum.ipsをパッチする。
levelasm_table.binをバイナリエディタで開く。
そうすると以下のようになっている。
0000000 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00 0000010 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00 0000020 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00 ・ ・ ・ 0000FF0 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00
これをコピーする。
コピーしたらROMをバイナリエディタで開き、$FE200に移動、上書き。
未改造だとはいらないので少しLunar Magicで弄って1MBにしましょう。
すると、このようになるはず。
00FE200 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00 00FE300 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00 00FE400 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00 ・ ・ ・ 00FF1F0 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00
これを
コードテーブル
といいます。
次にlevelasm_code.binをコピーし、ROMに上書きします。
どこでも構いませんが、コードテーブルに近い方がなにかと便利なので、ここでは$FE1C0に上書きします。
すると、
00FE1C0 5A DA 08 A5 71 D0 28 C2 20 AD 0B 01 C9 00 02 B0 00FE1D0 1E 0A 0A 0A 18 69 00 E0 8F F1 FF 7F A9 1F 6B 8F 00FE1E0 F3 FF 7F E2 20 A9 22 8F F0 FF 7F 22 F0 FF 7F 28 00FE1F0 FA 7A 22 8C 80 01 6B 00 00 00 00 00 00 00 00 00
これを
メインコード
といいます。
次に$24E3に移動してください。8C 80 01($01808C)となっていますので、これをメインコードのアドレス(SNESアドレス)に書き変えます。
$FE1C0にメインコードを置いたので、Lunar adressでSNESアドレスに変換すると、$FE1C0→$1FDFC0…よって
00024E3 7E C4 22 C0 DF 1F 22 B1 8A 02 68 85 1D 68 85 1C ~~~~~~~~
このように書き変えればいいわけですね。これで準備おkです。
メインコードの作成は新型スクロール土管と併用可能な互換LevelASMに同封のlac.ipsで代替することが出来ます。
2.コード作成(例です)
ASMを書いてTRASMにD&Dでbinファイル作成。
LDA #$01 STA $140D ;強制スピン RTL ;最後は必ずRTLにしてください
binをバイナリエディタで見るとこうなっているはず。
0000000 A9 01 8D 0D 14 6B
コードは完成です。
なおコードの作成に関しては65c816資料、65C816プログラミングで。
コマンドスプライトはだいたいlevelASMで挿入することができます。
3.挿入
さっきのコードをコピーしてROMの空いているところに貼り付けましょう。
00やFFが並んでいるところが空いている所です。
今回は$0100000に挿入します。
0100000 A9 01 8D 0D 14 6B
こうなりますね。
次にこのコードを特定のlevelに反映させます。(今回は105)
105のアドレスは関数電卓で【8×105+FE200】をすると出てきます。($FEA28)
バイナリエディタでこのアドレスに移動します。するとこうなってるはず。
00FEA20 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00 ↑;ここ
ここにさっき挿入したコードのアドレスを書き込みます。
$100000に挿入したのでこれをLunar adressでSNESアドレスに変換します。
$100000→$1FFE00
こうなりますね。
これを$FEA28から22 00 FE 1F 6Bと書き込みます。
00FEA20 6B 00 00 00 00 00 00 00 6B 00 00 00 00 00 00 00 ↑;ここ
するとこうなる。
00FEA20 6B 00 00 00 00 00 00 00 22 00 FE 1F 6B 00 00 00
これで終わりです。保存してMAP105をプレイしてみましょう!
最後まで書きました。
間違えがあったらすいません。
細かい説明は省きました。(これさえ分れば使えると思ったので)
3/17追加分
説明に不備があったため勝手に直しました。
これで一応変化が現れるハズです。まだ不備があるようなら勝手にどうぞ
RATSタグについて
Lunar Magicや他のツールが処理を上書きするのを防ぐためのもの
53 54 41 52 xx yy aa bb 例)保護したいテーブルの長さ(総byte数)を0201bytesとします。(1byte目:01/2byte目:02ですね) ・xxには総byte数1byte目 …01 ・yyには総byte数2byte目 …02 ・aaには(FF-総byte数1byte目) …FE ・bbには(FF-総byte数2byte目) …FD
したがってRATSタグは
53 54 41 52 01 02 FE FD
と入ります。自作展示場にこれを簡単に求めるツールがあります。
ちなみに、バイナリデータ53 54 41 52は文字列で"STAR"、反対から読むと"RATS"これがRATS保護と呼ばれる所以なのだろうね。
※ROM Allocation Tag System
UberASM
内容はこちらに移動しました
→ https://w.atwiki.jp/sm4wiki_mix/pages/144.html