Hier der Code:
;; requires Block Bounce Unrestrictor patch
;; - fixes glitch with buster beetle's block and a few other things
JMP MarioBelow : JMP Return : JMP Return : JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP Return
!BouncePalette = $08 ; 0-7/8-F
!BounceTile = $0040 ; 0000-01FF (top-left 8x8)
!ShatterType = $00 ; 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
JSL $028663
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
Was müsste ich ändern, damit der Glitch verschwindet?


















