スプライト関係(主にボス)
<ファイアを5発ではなく指定した回数当てたら倒せるようにする> ※cfgエディタでファイアを5発当てたら倒せるにチェックを入れておいてください。 LDA #$28 ;効果音(ブル・ボスへのダメージ) STA $1DFC LDA #$00 ;ファイアカウントをリセット STA $1528,x INC $151C,x ;ファイアカウントの代わりのカウントを1つUP LDA $151C,x CMP #$0A BEQ DEATH ;カウントが10だったらDEATHへ DEATH スプライト死亡処理。 <甲羅系のスプライトを指定した回数当てたら倒せるようにする> CheckHurt LDY #$0B ; sprite is being kicked INTERACT_LOOP LDA $14C8,y ; \ if the sprite status is.. CMP #$09 ; | ...shell-like BCS PROCESS_SPRITE ; / NEXT_SPRITE DEY BPL INTERACT_LOOP RTS PROCESS_SPRITE PHX TYX JSL $03B6E5 ; get sprite clipping B routine PLX JSL $03B69F ; get sprite clipping A routine JSL $03B72B ; check for contact routine BCC NEXT_SPRITE PHX TYX JSL $01AB72 ; show sprite contact gfx routine LDA $14C8,x ; \ if the sprite isn't shell-like, don't kill CMP #$0A ; | BEQ NO_KILL ; / LDA #$02 ; \ Kill thrown sprite STA $14C8,x ; / LDA #$10 ; \ Set killed Y speed STA SPRITE_X_SPEED,x ; / LDY #$00 ; Set killed X speed LDA SPRITE_Y_SPEED,x BPL SET_SPEED SET_SPEED LDA #$10 STA SPRITE_X_SPEED,x NO_KILL PLX HANDLE_HIT LDA #$28 ;効果音(ブル・ボスへのダメージ) STA $1DFC ; / LDA #$B4 ;適当なタイマーをFREEZE_TIMERとして定義しておく。 STA FREEZE_TIMER,x ; / LDA #$FF ;FREEZE_TIMERと同様。次の攻撃までのタイマー STA ATTACK_TIMER,x INC $1570,x ;ヒットカウントを1増やす LDA $1570,x ;ヒットカウントが3未満の時RETURN3へ CMP #$03 ;BCCは未満ですが、BNEを使った方がPYUAの経験上確実かもしれません。 BCC RETURN3 LDA #$02 ; \ Kill sprite STA $14C8,x ここからのボス死亡処理はボスを倒した後の処理のページをご参照下さい。 RETURN3 RTS <ワープ> ※要はスプライトの座標指定。これを応用してマリオの位置と同じ座標にし、マリオの描画を消せば、あたかもマリオが違うキャラになったかのように見せる事ができる。 LDA #$44 ;ワープの効果音(カメックの魔法の音) STA $1DFC LDA #$E0 ;x座標下バイト AND #$F0 STA $E4,x LDA #$00 ;x座標上バイト(ページ) STA $14E0,x LDA #$E0 ;y座標下バイト AND #$F0 STA $D8,x LDA #$00 ;y座標上バイト(ページ) STA $14D4,x ※ちなみにマリオの座標は下記の通り、順にx座標下バイト、上バイト、y座標下バイト、上バイトとなっています。 $94,$95,$96,$97
BACK