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