6.スプライトの生成
標準スプライトを生成する
カスタムスプライトを生成する
エキストラスプライトを生成する
スコアスプライトを生成する
特殊エフェクトを描画する


標準スプライトを生成する
以下のルーチンを呼び出して下さい。
生成したスプライトのインデックス番号がYレジスタに格納されます。
このルーチンを実行したスプライトと同じ位置に生成されるので、
位置を変えたい場合は$E4,xや$D8,xなどを弄ってください。
(ルーチンを実行したスプライト内で、生成したスプライト情報を弄る場合は、$E4,xではなく$00E4,yになることに注意してください。)

しかしながら、一部のスプライトはこのままではいけません。
◆ブルブルブロック($9E,x = 53)、鍵、バルーン、ヨッシーの翼、Pスイッチは、$14C8,xを9にする必要があります。
 すなわち、スプライト生成時に
LDA #$09
STA $14C8,y
とする必要があります。
◆ブルブルブロックが消滅するまでのタイムは$1540,xです。
このタイムを0にすると、永遠に消えません。
◆キラーの向きは$C2,xで決まります。
$C2,x
00:右向き
01:左向き
02:上向き
03:下向き
04:右上
05:右下
06:左下
07:左上
◆ヨッシー/チビヨッシー/移動する通常コインと銀コインは、
 単純にパレットだけで種類が決まります。
 パレット情報は$15F6,xです。
$15F6,x
00:金色
02:銀色
04:黄色
06:青色
08:赤色
0A:緑色
◆ヨッシーの卵の色は$15F6,xで決まります。
$14C8,x=8では即中身のスプライトになります。
$14C8,x=9で卵が割れる演出の後、中身のスプライトを生成します。
卵の中身は$151C,xの値がそのままスプライト番号になります。
したがって、マグナムキラーを生む卵を作ることも可能です。
しかしながら、生まれたスプライトは$14C8,x=8となってしまうので
Pスイッチやブルブルブロックは消えますし、鍵は飛んで行ってしまいます。
◆Pスイッチは、$151C,x=0(デフォルト)で青スイッチ、$151C,x=1で銀スイッチになります。
 余談ですが、$151C,x=2とすると、ONOFFスイッチがOFFになるPスイッチになります。
また、デフォルトではパレットが金色なので、$15F6,xに適切な値を代入する必要があります。
◆メッセージブロックがメッセージ1のものかメッセージ2のものかは、
 初期設定で決まるのではなく、メッセージブロックを叩いたときの位置座標で決まります。
◆跳ねるパタパタは、$160E,x=0(デフォルト)で高く跳ね、$160E,x=1で低く跳ねます。
◆飛ぶ?ブロックは、$157C,x=1にしておかないと、グラフィックが左右反転してしまいます。
 中身は、$151C,xで決まります。
$151C,x
0:コイン(デフォルト)
1:ファイア
2:羽根
3:1UPキノコ
また、$C2,x=1で叩いた後のプンプンブロック(スプライト)になります。
◆移動するプンプンブロックは、$151C,x=0(デフォルト)でブロック生成モードに、$151C,x=1でブロック消化モードになります。
 $1534,x=0(デフォルト)でメインマップ用の動きに、$1534,x=1でサブマップ用の動きになります。
 $1909に#$FFを代入すると、マリオがプンプンブロック(オブジェクト)に乗るまでその場で待機します。
 なお、LevelASMなりで毎フレーム$157C,xの値を弄り続ければ、このスプライトの動きを制御できます。
◆ジュゲムの場合、同じ座標にジュゲムの雲($9E,x=87)を生成する必要があります。
 ジュゲムの雲を生成するときは、$167A,x=82にしないと、踏み殺せてしまいます。
 $151C,x=1にすると、フィッシングジュゲムになります。
 無理矢理複数のジュゲムを生成しても正常には動きません。
◆金網のノコノコは、初期速度を設定してやる必要があります。
 また、$1632,x=0(デフォルト)で金網の表側に、$1632,x=1で金網の裏側になります。
◆崩れるブロックの中身は$C2,xの値がそのままスプライト番号になります。
 よってブロックの中身をキラーや1UPキノコなどにもできます。
◆チョロプーは、$C2,x=0(デフォルト)で隠れてる状態、
 $C2,x=1で飛び上がり、$C2,x=2で落下、$C2,x=3で横を向いて歩き出します。
 $151C,x=0(デフォルト)で追いかけ、$151C,x=1で歩くだけになります。
◆マントガメは、$C2,x=0(デフォルト)で着地状態、
 $C2,x=1で飛び立ち、$C2,x=2で飛行状態になります。
 $1534,x=1で光るマントガメになります。
◆口笛ブルは、$1602,x=0(デフォルト)でグースカを起こし、$1602,x=1でマントガメを呼びます。
◆シャボン玉の中身は、$C2,xで決まります。
$C2,x
0:クリボン(デフォルト)
1:ボム兵
2:プクプク
3:キノコ
◆グルグル/回転リフト/三つ叉リフトは$187B,xに半径を代入してやる必要があります。
 回転方向は初期設定で決まるのではなく、位置座標で決まります。
◆ウニラ/チェーンソー/ガリガリ/リフト/チョロボン/ケセラン/パセランの移動方向は$C2,xで決まります。
◆クッパの石像は、$C2,x=0(デフォルト)でマリオに熱い視線を送り、$C2,x=1で炎を吐き、$C2,x=2で跳ねます。
 デフォルトではパレットが銀色なので、跳ねる石像の場合は$15F6,xに適切な値を代入する必要があります。
 余談ですが、何もしない石像をロープや雲の上などに乗せて下から叩くと…?
◆上向きの木のトゲは、$C2,x=0で下移動待機、$C2,x=1で下移動、$C2,x=2で上移動待機、$C2,x=3で上移動となります。
◆時間制限リフトのタイマーは$1570,xです。カウント4のリフトは$FF、カウント1のリフトは$3Fです。
 $C2,xを1にすると、カウントが減り始めます。
◆バサバサは、$C2,x=0で天井に停まってる状態、$C2,x=1で始めっから飛んできます。
 後者の場合、y軸方向の初期速度を設定する必要があります。
◆コントロールコインは$C2,xで移動方向が決まります。
 $190Cが終了までのタイマーです。
◆ノコノコの甲羅は、$9E,x=$DA〜$DFとするのではなく、
通常のノコノコを生成した上で、$14C8,x=9としてください。
◆キノコ類/マントは、$C2,x=0で動いてる状態、$C2,x=1で止まってる状態です。
 キノコ類/ファイア/スター/ヨッシーの卵/ジャンプ台/Pスイッチ/鍵は、$1540,xが0で無い間はニョキニョキと上昇する状態になります。
 マントはさらに$154C,xにも同じ値を入れ、初期速度を設定する必要があります。


カスタムスプライトを生成する
以下のルーチンを呼び出して下さい。
生成したスプライトのインデックス番号がYレジスタに格納されます。
イニシャルルーチンは実行されないので、初期設定が必要なら、ちゃんと設定する必要があります。


エキストラスプライトを生成する
以下のルーチンを呼び出して下さい。
標準/カスタムスプライトと独立しており、ファイアボールの他に最大8個まで生成できます。
生成したスプライトのインデックス番号がYレジスタに格納されます。

エキストラスプライトの種類は、
00:何も存在してない状態
01:煙
02:ブイブイの吐く炎
03:跳ねる炎が残す火の粉
04:ハンマー
(05:マリオのファイアボール)
06:カロンが投げる骨
07:溶岩の飛沫
08:トーピードを放つ手
09:
0A:ボーナスの雲が投げてくるコイン
0B:ピーパックンの炎
0C:ポンキーが放出する炎
0D:ブルの野球ボール
0E:ハナチャンの花
0F:煙
10:スピンジャンプ時に出る小さな星
11:ヨッシーの炎
12:水中の泡

スコアスプライトを生成する
以下のルーチンを呼び出して下さい。
標準/カスタムスプライトと独立しており、最大6個まで生成できます。
生成したスプライトのインデックス番号がYレジスタに格納されます。

スコアスプライトの種類は、
00:何も存在してない状態
01:10
02:20
03:40
04:80
05:100
06:200
07:400
08:800
09:1000
0A:2000
0B:4000
0C:8000
0D:1UP
0E:2UP
0F:3UP
10:5UP(グラフィックはバグる)

特殊エフェクトを描画する
◆煙などを描画
特殊エフェクトの種類は、
00:何も存在してない状態
01:煙
02:ジャンプが跳ね返されたときのエフェクト
03:小さな煙
◆ジャンプが跳ね返されたときのエフェクトを描画
JSR GET_DRAW_INFO
JSL $01AB99
◆スター時やゴール玉などのキラキラ
◆バブルの火の粉

          JSR GET_DRAW_INFO
          LDA $14
          AND #$0F
          BNE FIRE_R
          JSL $0285DF
FIRE_R    RTS
◆飛び散るブロックの破片
          LDA $E4,x ;x座標下位バイト
          STA $9A
          LDA $D8,x ;y座標下位バイト
          STA $98
          LDA #$02
          PHA
          PLB
          JSL $028663
          RTS