11.いろんな処理
タイルの変更1
タイルの変更2
アイテム生成
ブロックの破片スプライト生成
跳ねるタイルスプライト生成
敵を倒すスプライト生成
エフェクト表示
タイルの変更1
LDA #$01 ;生成するタイルの種類
STA $9C
JSL $00BEB0
RTS
$9A、$98の座標の位置に生成されます。
$1933=1の時はレイヤー2上に生成されます。
生成するタイルの種類(16xタイル番号)
01:ブランクタイル(025)
02:ブランクタイル(025)
03:ツタ(006)
04:草のタイル(049)
05:回り続けるクルクルブロック(048)
06:通常のコイン(02B)
07:タイルセット特有の特殊タイル(0A2)
08:チョロプー出現後の穴(0C6)
09:タイルセット特有の特殊タイル(152)
0A:クルクルブロック(10枚コイン)(11B)
0B:?ブロック(10枚コイン(123)
0C:クルクルブロック(11E)
0D:プンプンブロック(132)
0E:上からのみバウンドする音符ブロック(113)
0F:上からのみバウンドする音符ブロック(115)
10:全方向バウンドする音符ブロック(116)
11:横から跳ね返されるクルクルブロック(12B)
12:ルーレット用のブロック(12C)
13:ON・OFFブロック(112)
14:土管の左側(168)
15:土管の右側(169)
16:プンプンブロック(132)
17:タイルセット特有の特殊タイル(15E)
18:ブランクタイル(025)
19:金網の回転扉の枠(9タイル分)
1A:金網の回転扉(9タイル分)
1B:ブランクタイル(4タイル分)
タイルの変更2
$9A、$98の座標の位置に生成されます。
$1933=1の時はレイヤー2上に生成されます。
JSRルーチンを2回使ってるので、RelocOffsetに気をつけてください。
アイテムの生成
一般スプライトはX=0〜9の10枠しか使えませんが、
ブロックから出現したアイテムとストックアイテムは11枠、12枠も使えます。
ブロックの破片スプライト生成
PHB
LDA #$02
PHA
PLB
LDA #$00 ;黄色の破片
JSL $028663
PLB
アキュムレータの値が0の時は、クルクルブロックを崩したときと同じ黄色の破片に、
0で無いときは、ブルブルブロックが壊れたときと同じ虹色の破片になります。
スプライトですので、ブロックがレイヤー2にある場合は座標の修正が必要です。
跳ねるタイルスプライト生成
PHX
PHY
LDA #$0F
TRB $9A
TRB $98 ;座標の正規化
LDX #$00 ;グラフィックの種類
LDY #$03
LOOP100:
LDA $1699,y
BEQ LBL100
DEY
BPL LOOP100 ;既にスプライト枠が一杯なので
LDY #$03 ;最後のスプライトに上書きする
LDA $1699,y
CMP #$07
BNE LBL100 ;そのスプライトがクルクルブロックを戻すものだったら
LDA $9A ;座標データを退避し、
PHA
LDA $9B
PHA
LDA $98
PHA
LDA $99
PHA
LDA $16A5,y ;そのスプライトの座標を格納
STA $9A
LDA $16AD,y
STA $9B
LDA $16A1,y
CLC
ADC #$0C
AND #$F0
STA $98
LDA $16A9,y
ADC #$00
STA $99
LDA $16C1,y ;そのスプライトが戻すはずだったタイルに
STA $9C
JSL $00BEB0 ;即座に変更
PLA
STA $99 ;座標を戻す
PLA
STA $98
PLA
STA $9B
PLA
STA $9A
LBL100:
LDA $028789,x
STA $1901,y
TXA
INC A
STA $1699,y
LDA #$01
STA $169D,y
LDA $9A
STA $16A5,y
LDA $9B
STA $16AD,y
LDA $98
STA $16A1,y
LDA $99
STA $16A9,y
LDA #$08 ;タイマ
STA $16C5,y
LDA #$0D ;終了時生成ブロック設定
STA $16C1,y
LDA $1933
LSR A
ROR
STA $08
LDX #$00 ;跳ねる向き
LDA $02873A,x
STA $16B1,y
LDA $02873E,x
STA $16B5,y
TXA
ORA $08
STA $16C9,y ;レイヤー2フラグ
PLY
PLX
グラフィックの種類
0: クルクルブロック
1: 音符ブロック
2: ?ブロック
3: Pスイッチ
4: ルーレットブロック
5: ON/OFFブロック
6: 跳ねないクルクルブロック
終了時生成ブロック設定
タイマが0になったときに、指定されたタイルを生成します。
値と生成するタイルの関係はタイルの変更1のリストと同じです。
0の時は何も生成しません。
跳ねる向き
0: 上向き
1: 右向き
2: 左向き
3: 下向き
このスプライトにおいては、レイヤー2の座標修正をブロックのソース上で行う必要はありません。
自動的に修正されます。
回転してるクルクルブロックを、一定時間後に通常のクルクルブロックに戻すスプライトもこれです。
しかしながら、このスプライトは最大で4つまでしか存在できません。
4つ存在してる状態で、どれかのスプライトを消して、無理矢理新たにスプライトを作ると、
消されたスプライトが担当していたクルクルブロックが元に戻らなくなってしまいます。
そこで、そのようなときには消されるスプライトが担当しているクルクルブロックを即座に
通常のクルクルブロックに戻しています。
なお、ソースが冗長になるため、毒キノコブロックの方ではこの処理は省いてあります。
敵を倒すスプライト生成
上にいる敵スプライトを吹っ飛ばします。
PHY
LDA #$0F
TRB $9A
TRB $98 ;座標の正規化
LDY #$03
LOOP200:
LDA $16CD,y
BEQ LBL200
DEY
BPL LOOP200
INY
LBL200:
LDA $9A
STA $16D1,y
LDA $9B
STA $16D5,y
LDA $98
STA $16D9,y
LDA $99
STA $16DD,y
LDA $1933
BEQ LBL201
LDA $9A ;レイヤー2時の座標修正
SEC
SBC $26
STA $16D1,y
LDA $9B
SBC $27
STA $16D5,y
LDA $98
SEC
SBC $28
STA $16D9,y
LDA $99
SBC $29
STA $16DD,y
LBL201:
LDA #$01
STA $16CD,y
LDA #$06
STA $18F8,y
PLY
エフェクト表示
煙
JSL $028A44
ブロックの位置に表示。
Pスイッチが出てくる?ブロックなどで表示される。
コインを取ったときのキラキラ
JSL $05B34A
スコアスプライト
LDA #$10 ;スコアの種類
JSL $00F38A