;; Edit1754's SMB3 Brick v1.0.1 ;; requires Block Bounce Unrestrictor patch ;; - fixes glitch with buster beetle's block and a few other things ;; Modified by MarioFanGamer to collect coins when shattered db $42 JMP MarioBelow : JMP Return : JMP Return JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP Return JMP Return : JMP Return : JMP Return !BouncePalette = $08 ; 0-7/8-F !BounceTile = $0040 ; 0000-01FF (top-left 8x8) !ShatterType = $01 ; change this to $01 for throw-block-like shatter effect if you want ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; !RAM_M16Tbl = $7EC275 ; same as the other patch, to avoid using more RAM than necessary !RAM_BounceTileTbl = $7EC271 !BPal = !BouncePalette&$07 !BTile = !BounceTile&$1FF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MarioCape: JSR CheckIfCoin NotSmall: JSR Shatter JSR SpriteKiller JSR Points RTL MarioBelow: JSR CheckIfCoin LDA.b $19 BNE NotSmall Small: LDX.b #$03 Loop: LDA.w $1699,x BEQ FoundSlot DEX BPL Loop DEC.w $18CD LDA.b #%11111100 TRB.w $18CD LDX $18CD LDA $1699,x CMP #$07 BNE FoundSlot JSR ResetTurnblock FoundSlot: LDA.b #%00001111 TRB.b $98 TRB.b $9A LDA.b #$01 STA.w $1699,x LDA.b #$00 STA.w $169D,x LDA.b $98 STA.w $16A1,x LDA.b $99 STA.w $16A9,x LDA.b $9A STA.w $16A5,x LDA.b $9B STA.w $16AD,x LDA.b #$C0 STA.w $16B1,x LDA.b #$00 STA.w $16B5,x LDA.b #$FF ; STA.w $16C1,x LDA.b #$08 STA.w $16C5,x LDA.w $1933 LSR ROR STA.w $16C9,x LDA.b #!BounceTile STA !RAM_BounceTileTbl,x LDA.b #!BPal<<1 ORA.b #!BTile>>8 STA.w $1901,x ;PHX TXA ASL TAX REP #%00100000 LDA.b $03 STA.l !RAM_M16Tbl,x SEP #%00100000 ;PLX JSR SpriteKiller RTL SpriteV: JSR CheckIfCoin LDA.w $1686,x AND.b #%00000100 BNE Return LDA.w $14C8,x CMP.b #$09 BCC Return CMP.b #$0B BCS Return LDA.b $0F CMP.b #$02 BEQ Return SprMain: REP #%00100000 LDA.b $0A STA.b $9A LDA.b $0C STA.b $98 LDA.b $0F PHA ; counts as 2 SEP #%00100000 LDA.b $03 PHA JSR Shatter PLA STA.b $03 PLA STA.b $0F PLA STA.b $10 JSR SpriteKiller JSR Points Return: RTL SpriteH: JSR CheckIfCoin LDA.w $14C8,x CMP.b #$0A BEQ SprMain RTL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CheckIfCoin: LDA $1693 STA $00 STY $01 REP #%00100000 LDA $00 CMP.w #$0132 ; acts like used block BEQ CoinPow ; don't behave like brick when POW enabled CMP.w #$002B ; acts like coin BEQ CoinNoPow ; don't behave like brick when POW disabled SEP #%00100000 RTS CoinPow: SEP #%00100000 LDA.w $14AD BNE IsCoin RTS CoinNoPow: SEP #%00100000 LDA.w $14AD BEQ IsCoin RTS IsCoin: PLA : PLA ; bypass RTS and head straight towards final RTL RTL Shatter: LDA.b #%00001111 TRB.b $98 TRB.b $9A LDA.b #$02 STA.b $9C JSL $00BEB0 PHB LDA.b #$02 PHA PLB LDA.b #!ShatterType PHY PHX JSL $028663 LDA $98 PHA LDA $99 PLA JSR CollectCoin PLA STA $99 PLA STA $98 PLX PLY PLB RTS SpriteKiller: LDX #$03 ; disassembled from original smb3.bin .C_8213 LDA $16CD,x BEQ .C_821C DEX BPL .C_8213 INX .C_821C LDA $9A STA $16D1,x LDA $9B STA $16D5,x LDA $98 STA $16D9,x LDA $99 STA $16DD,x LDA $1933 BEQ .C_8253 LDA $9A SEC SBC $26 STA $16D1,x LDA $9B SBC $27 STA $16D5,x LDA $98 SEC SBC $28 STA $16D9,x LDA $99 SBC $29 STA $16DD,x .C_8253 LDA #$01 STA $16CD,x LDA #$06 STA $18F8,x RTS Points: LDA $0DB3 ; disassembled from original smb3.bin ASL A ADC $0DB3 TAX LDA $0F34,X CLC ADC #$9D01 BIT $0F,X LDA $0F35,X ADC #$9D00 AND $0F,X LDA $0F36,X ADC #$9D00 ROL $0F,X RTS ResetTurnblock: LDA $9A ; from Custom Bounce Block patch's SMB3Brick.asm 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 LDA $04 PHA LDA $05 PHA LDA $06 PHA LDA $07 PHA JSL $00BEB0 PLA STA $07 PLA STA $06 PLA STA $05 PLA STA $04 PLA STA $99 PLA STA $98 PLA STA $9B PLA STA $9A RTS CollectCoin: LDA $98 SEC : SBC #$10 STA $98 LDA $99 SBC #$00 STA $99 JSR GetBlock STA $00 CPY #$00 BEQ .firstPage CPY #$02 BCS .return LDA $00 CMP #$2F BEQ .muncher CMP #$32 BNE .return .bluePOW LDA $14AD BEQ .return JSR Spawn_Coin .return RTS .muncher LDA $14AE BEQ .return JSR Spawn_Coin RTS .firstPage LDA $00 CMP #$2A BEQ .bluePOW CMP #$2B BNE .return LDA $14AD BNE .return .coin JSR Spawn_Coin RTS GetBlock: LDA $5B AND #$01 TAY LDA #$20 CPY #$01 BCC .Horz0 LDA #$1C .Horz0 BIT $5B BPL .Layer1_0 LSR A .Layer1_0 CPY #$01 BCC .Horz1 CMP $99 BCC .RangeOver LDA $9B CMP #$02 BCC .Next .RangeOver LDA #$FF TAY RTS .Horz1 CMP $9B BCC .RangeOver LDA $98 CMP #$B0 LDA $99 SBC #$01 BCS .RangeOver .Next LDA $1933 REP #$21 BEQ .Layer1_1 TYA BEQ .Horz2 LDA $98 ADC.w #$0E00 AND.w #$FFF0 STA $67 BRA + .Horz2 LDA $98 AND.w #$FFF0 STA $67 LDA $9A ADC.w #$1000 BRA .Common0 .Layer1_1 LDA $98 AND.w #$FFF0 STA $67 + LDA $9A .Common0 SEP #$20 LSR #4 STA $65 XBA CPY #$01 BCC .Horz3 STA $66 ASL $68 REP #$21 LDA.w #$0000 BRA .Common1 .Horz3 ASL A STA $4202 LDA #$D8 STA $4203 NOP STZ $66 REP #$21 LDA $4216 .Common1 ADC $67 ADC $65 ADC.w #$C800 STA $65 SEP #$20 LDA #$7F STA $67 LDA [$65] TAY DEC $67 LDA [$65] RTS Spawn_Coin: PHB LDA #$02 PHA ;show coin and stuff PLB JSL $02889D PLB %erase_block() RTS