pixiの使い方(仮)
※このページは未完成です
現在、spritetoolはあまり使われていません SMWCでもpixi用のspriteが非常に多いです
最新ver1.40(2023/07/27)
spritetool との違い
①.新しくClusterスプライトが追加できるようになった
ステージにエフェクトをつけるのが主流。20個まで置ける
②.新しくExtendedスプライトが追加できるようになった
ハンマーブロスのハンマーとかのスプライト。
マリオのファイアボールを除き8個まで置ける(このパッチを使うと16個まで置ける)。
③.新しくMinorExtendedスプライトが追加できるようになった
ブロックの破片とかのスプライト。12個まで置ける
④.全スプライト共有のルーチンが作成できるようになった
容量を節約できる。
⑤.ルナマジでスプライト1つ毎に設定できる4つのバイト(Extension)とjsonファイル1つ毎に設定できる2つのバイト(Property)が追加された。
・・・ほかにもあるが紹介はここまで
基本 -これだけ使えればOK-
解凍したフォルダに新しく[list.txt]を作成
基本はspritetoolと書き方は同じ だけど、pixiでは特殊な書き方がある ↓readmeより引用
普通に書く
00 Blue.cfg
01 Green.json
レベルを設定する、先頭の105,106にレベル名を入れる
105:B0 Red.cfg
105:B1 Yellow.json
106:B0 Boo.cfg
Clusterスプライト
CLUSTER:
00 flower.asm
01 fish.asm
Extendedスプライト
EXTENDED:
00 hammer.asm
01 boomerang.asm
MinorExtendedスプライト
MINOREXTENDED:
00 ZZ.asm
pixiで挿入する
list.txtに挿入するスプライトを書き込んだら pixi.exeに自分のromを入力して挿入完了
pixi.exeの注意
フォルダーのパスに日本語が入っていると
エラーになることがある
修正するものがCにあった気がするけど普通にCドライブ近いところとかにおけば解決する話
Trashkasの使い方
なんとなく使えたので追加しとく。
まず自作物公開場からConvert toolを落としてこよう。
中にtrashkas.exeとかなんか入ってると思う。
このフォルダにスプライトのasmファイルを持ってきて、trashkas.exeにドラッグ&ドロップする。もしくは、asmが複数あってめんどい場合はtrashkasをダブルクリックすれば一括で変更してくれる。
変換して、ASMの知識がある人はいろいろチェックして動作するか見てみるとよろしい。
稀に変換がうまく行ってない時があるためこの作業は大事。まあ普通にPIXIでぶち込んでみてエラー出ないかとか上手く動作するかとか見ればいいけどな(゚Д゚) テストプレイは入念に。
SA-1に対応させたい場合は先にこの変換を行ってからSA-1互換性を持たせた方が良い、でもどちらでも上手く動作することを確認済み。これでSprite toolのサンプルスプライトがPIXIで使えるね!
※勢いで書いてみたので読みにくかったり補足したいことあったりしたら勝手に書き換えといて結構です。
※どうやらConvert toolに添付されているSA-1変換ツールは最新のSA-1パッチ(自分の環境ではバージョン1.40)には未対応のようです。
最新のSA-1パッチでも行けました!
cfg editorの使い方
基本的にはTweakerと同じ感じで編集可能。
defaultタブで設定できる最低限の事は書いとく。
$1656 | |
Can be jumped on |
チェックで踏んで倒したりasmで定義した任意の動作をさせれる。 チェックなしで踏むとダメージ、スピンで踏める |
Disappear in a cloud of smoke | チェックで倒すときに煙がでる(Pパックンのような感じ) |
$1662 | |
Sprite clipping | 他のスプライトに対する当たり判定の大きさを定義可能 |
Fall straight down when killed |
「Can be jumped on」にチェックが入っており、 「Dies when jumped on」にチェックが入ってない場合、 踏むと落下して死ぬ。 |
$166E | |
Use second graphic page |
チェックするとグラフィックページの0x300を使用し、しないと0x200が使われる。 要するに、例えば0x31Aにグラフィックを描いたならこれをチェックしないと正常に表示されない。 |
Palette | 使用パレットを変更できる。8〜Fまでが使用可能~ |
Disable fireball killing | チェックでファイアが効かなくなる |
Disable cape killing | チェックでマントスピンが効かなくなる |
$167A | |
Don't Disable clipping when star killed | 必ずチェックする事(でないと倒した時バグりやすい) |
Invincible to star/cape/fire/bouncing blk |
チェックでスター、マント、ファイア、ブルブルブロックに対して無敵になる。 但しヨッシーに乗っているとダメージを受けなくなる。 ダメージを与えたければasm内でその処理を書く必要がある。 |
$1686 | |
inedible | チェックででっていうで食べれなくなる |
Stay in Yoshi's mouth |
チェックするとでっていうですぐに飲み込めなくなる。 ただ吐き出した時の挙動を入れとかないと可笑しくなる |
Don't interact with other sprites | チェックで他のスプライトと反応しなくなる |
Spawns new sprites |
チェックすると他のスプライトを特定のタイミングでスポーンさせる。(マントガメの様な感じ) 出すスプライトはasmで定義する |
Don't interact with objects |
オブジェクトと一切反応しなくなる (カメーンの様に壁をすり抜けてくるスプライトでは必ずチェックすること) |
$190F | |
Can't be killed by sliding | チェックする事でスライディング(マントでの軟着地や坂滑り)で倒せなくなる。 |
Takes 5 fireballs to kill |
チェックすることで5発ファイアを当てないと倒せなくなる。 Disable fireball killingにチェックしている場合は無意味 |
Don't tum into a coin with silver POW | チェックすると銀Pスイッチで銀コインにならなくなる。 |
•左下の方にあるプルダウンボックスでスプライトの分類(通常、シューター、ジェネレータなど)を変更可能(合わせてasmも弄らないと上手く動かないけど)
•File pointerで参照するasmファイルを変更可能。
その他いろいろあるけど、とりあえず中学生でも読めるような単語ばっかりなので弄ってぶち込んでテストプレイを繰り返せばいいかも。
怪しい項目だったり、ジェネレータ、シューターの値を弄ったりして可笑しくなっても自己責任です。
あと、PIXI付属のものだとLunarMagicというタブがありこれを開くとLMで表示される説明とかプレビューアイコンとかいろいろ編集できる。更にCustom listタブでExtra bitなども設定可能なのでいろいろ弄ってみよう。
ちなみに一応.jsonファイルも弄れる(というかこの拡張子にして保存しないとLMプレビューの情報は保存されない。.jsonはメモ帳で見るとよくわからないが内容は殆どcfgと同じ。)
スプライト講座
pixiが使えることは前提です
65c816プログラミングや 65c816資料などの読解は特に必要ないです
1-1 initとmain
これはプログラミングでいうところの
「何も実行しないプログラム」
すべてのスプライトはこの形が入っています
print "INIT ",pc ;最初の一回だけ実行 RTL ;終了 print "MAIN ",pc ;常に実行 RTL ;終了
カスタムスプライトでは以下の分も加えます
(使用上バグることがある?)
print "INIT ",pc ;最初の一回だけ実行 RTL ;終了 print "MAIN ",pc ;常に実行 PHB ;Bレジスタをプッシュ(今は考えない) PHK ;Kレジスタをプッシュ(今は考えない) PLB ;Bレジスタでプル(今は考えない) JSR Sprite ;12行目に行く PLB ;Bレジスタでプル(今は考えない) RTL ;終了 Sprite: ;Spriteラベル ;今後ここに書いていく RTS ;Spriteの終了8行目に戻る
JSR命令:
- ラベルにジャンプする
- RTSで戻ってくる。
1-2 基本動作用のコード
Sprite: LDA #$00 %SubOffScreen() ;画面外に出たらデスポーン ;JSR sub_gfx ;グラフィックルーチン(後々解説する) LDA $9D ;画面が止まっているときは BNE return ;何もせずに終了する JSL $01802A|!BankB ;スプライトを動かす JSL $018032|!BankB ;甲羅などスプライト同士の判定 JSL $01A7DC|!BankB ;マリオとスプライトの判定 LDA !sprite_blocked_status,x ;スプライト壁判定の変数 AND #$03 : BNE + LDA !157C,x ;\ EOR #$01 ;|左右の壁に当たったら反転させる STA !157C,x ;/ + LDA !sprite_blocked_status,x AND #$0C : BNE + STZ !sprite_speed_y,x ;天井や地面にいるときY速度を0にする + return: RTS
1-3 グラフィックを描画する(1タイルのみ)
グラフィックを描画するルーチンを作成する。
sub_gfx: %GetDrowInfo() ;$00と$01に画面上の座標を取得 LDA $00 : STA $0300|!Base2,y ;X座標を指定する LDA $01 : STA $0301|!Base2,y ;Y座標を指定する LDA #$24 : STA $0302|!Base2,y ;タイルを指定する LDA !sprite_oam_properties,x ORA $64 ;できれば入れる STA $0303|!Base2,y ;タイル情報を指定する(この場合はconfigの通り) LDY #$00 ;値は転送タイル数-1 LDA #$02 ;タイルの大きさ(00の時は8x8 02の時は16x16) %FinishOAMWrite() RTS
2-1 実践編-動かないスプライト-
マリオ関係のスプライトはCにもうあるので別のゲームのスプライトを作ってみよう
今回作るのはネジみたいな砲台です。

https://img.atwiki.jp/sm4wiki_mix/attach/136/480/neji.bin
sprite: LDA #$00 %SubOffScreen() ;画面外の判定 JSR sub_gfx ;グラフィックルーチン LDA $9D : BNE return ;止まってるときは終了 JSL $018032|!BankB ;スプライト同士の判定 JSL $01A7DC|!BankB ;マリオとの判定 LDA !C2,x JSL $0086DF|!BankB ;Aの値によってワープ先を変える dw matu,agaru,mawaru,sagaru matu: ;ステータス「待つ」のコード LDA !1540,x BNE return ;タイマーの!1504が0以外の時は終了 %SubHorzPos() ;マリオとの距離を$0Eに入れる REP #$21 ;Aを16bit幅に+キャリーフラグをクリア LDA $0E ;マリオとスプライトが2マス以上の時終わり ADC #$0020 CMP #$0040 SEP #$20 ;Aを8bit幅に+他のフラグは変化しない BCC + RTS + LDA #$02 STA !1540,x ;タイマーを2に設定 STA !1504,x ;表示タイルを#$02にする INC !C2,x ;ステータスを「上がる」に変える return: RTS agaru: LDA !1540,x : BNE + ;タイマーが0以外の時終わる LDA #$60 : STA !1540,x ;タイマーを60に設定 LDA #$04 : STA !1504,x ;表示タイルを
投票コーナー
今後追加してほしいページに投票しよう