カスタムブロックを設置してみましょう。
目次
bliteでブロックを作る
ブロックに触れたときの動作などをプログラミング(.asmファイル)して、それをアセンブルし、ROMに書き込み、16x16 Map Editorでグラフィックを設定して設置を行います。今回はプログラミングを省いて、既存のブロックを設置してみましょう。後に65C816でプログラミングして書き込んでみます。
入手
blktool互換ツールからuo_blite.zipをダウンロードできます。ダウンロードしたら展開して適当に整理して下さい。
UO版の利点はasm形式(プログラミング言語)で書いたものをまとめてアセンブル(機械語に翻訳)してくれるところです。次に詳解するBTSDでも同様の処理が出来ます。なお、block toolというのもあるが処理が重くなってしまうのでこちらの方がお勧めです。
自分でブロックの処理が書けるようになるのが目標ですが、まずは他の方々が製作した機能を利用させて頂きましょう。先ほどのページの下にblktool.zipがあると思いますのでこれもダウンロードします。展開したら/blockに入れて下さい。
使い方
- ファイル -> ROMを開くより書き込みたいROMを開きます。ROMのパスに半角スペースが含まれていると正常に実行できない可能性があります。
- /blockにブロック類(.blk)が入っていることを確認します。
- bltedit.exeを起動します。
- 書き込みたい16x16 Tile Mapのアドレスをm16に指定します。例えば200(16進数)としましょう。
- 右のリスト(*1)から書き込みたいブロックを選択します。例えばパワーアップのcape blockとしましょう。
- 「<<」ボタンをクリックします。
- ファイル -> 保存より保存先を選択します。上書きすることも出来ます。
- ファイル -> bliteにぶち込むより先ほど指定した保存先に上書きされます。
設置に関しては、Lunar Magicで説明しましたので、書き込んだアドレスをAct asに指定してやってみて下さい。但し、既に効果が指定されているタイル番号で他のAct asを指定すると複合された形で動作してしまいます。正常に動作しない場合も考えられますのでご注意下さい。
オリジナルブロックを作る(.asm編)
自分で.asmを書いてそれをbliteにぶち込むだけでxkasがアセンブルして書き込んでくれるので非常に便利なツールです。さて、騙されたと思って以下のアセンブリをcape.asmとして/block/test/cape.asmに保存してみましょう。
print "BELOW 0 ",pc LDA #$02 STA $19 RTS
続いてblkedit0.exeを実行し、Nameにブロック名(例えばマントブロックなど)、descriptionにブロックの説明を書き、BELOWに0と記入します。他は記入してはいけません。最後にASMにcape.asmと記入し、/block/testにSAVEします。
あとは先ほどと同様にcape.blkを導入し、設置したブロックをしたから叩くと……マントマリオになります。
.asmのOffset
音符ブロックに乗ったとき「びよ~ん」と音がし、マリオがはねます。ところが、下から叩いても音はせず跳ね返りもしません。このように真理夫の触れられた位置により処理を分岐できれば表現の可能性が広がりそうです。
bliteではABOVEやBELOW蘭にある数値(*2)をIDとして扱います。例えば、0をABOVE, BELOWに指定したとして、
print "ABOVE 0 ",pc ~上から触れた場合の処理~ RTS print "BELOW 0 ",pc ~下から触れた場合の処理~ RTS
と書くことで処理を分岐できます。また、
print "BELOW 0 ",pc ~BELOW = 0のときの処理~ RTS print "BELOW 1 ",pc ~BELOW = 1のときの処理~ RTS
と書くことで、BELOWに指定された数値に対して処理を分岐することが出来ます。こうすることで1つのアセンブリファイルでも複数の処理に対応でき、スペースの節約にもなります。
print "方向 ID ",pc
のIDの後には半角スペースが必要です。実際にはxkasがデバッグとして「"方向 ID " + この指令のアドレス」の文字列を出力するのでそれをOffsetとして書き込む……というものです。使用する分には上の感覚で十分でしょう。つまり、実行される最初を指定すると言うことです。
print "xxx ID ",pcを使って色々な挙動で実験してみました。
- BELOW
- 下の判定
- ABOVE
- 上の判定
- SIDES
- 左右の判定
- SPRUD
- スプライトの上下判定
- SPRLR
- スプライトの左右判定
- CAPE
- マントの回転攻撃判定
- FIRE
- ファイアーマリオでの攻撃判定
- RESV1
- 上の端(左右)の判定
- RESV2
- 未確認
- RESV3
- 下の端(左右)の判定
- RESV4
- RESV5
- RESV6
- RESV7
オリジナルブロックを作る(.bin編)
基本的にblkedit0.exeでASM蘭に.binのファイルを書くだけの違いですが、自分で.asmファイルをアセンブルして.binを作成しなければなりません。通常1から自作する場合は利点がないと言えます。SMW CentralのToolsからTRASMをダウンロードします。sprite toolがある場合はそのディレクトリに入っている可能性があります。
cape.asmを
LDA #$02 STA $19 RTS
と書きます。書いたらこのファイルをtrasm.exeに突っ込んでアセンブルします。出てきたcape.binを先ほどと同様の手順でROMに書き込めば終了です。
BTSDでブロックを作る
海外だとよく使われているようです。bliteが優秀なので特に使う必要はないかも知れません;
入手
SMW Centralの右側のメニューからToolsへ行き、そこでBTSDをダウンロードして下さい。当然、ダウンロードしたら適当な場所に展開して下さい。
使い方
- BTSDのあるディレクトリ内にブロックのデータを入れます。(*3)
- Blocktool Super Deluxe.exeを起動します。
- File -> OpenからROMを開きます。
- Data -> Edit databaseをクリックします。
- 新しく追加するには「Add」をクリックします。
- 続いて、BIN形式を追加する場合はBINタブを選択し、BIN pathにBTSDをルートとした相対パスを指定します。(*4)
- 説明が必要な場合はDescriptionに説明を書きます。
- 全て登録し終えたらOKを押します。なお、次回もdatabaseは記録されたままです。
- Block -> Insertよりブロックを選び、Map16のアドレスを指定してInsertを押します。
- 全部挿入し終えたらFile -> Saveより保存します。