geschrieben am 07.06.2013 15:27:50
also...
hier ist der code von dem Block:
db $42 ; enable corner and inside offsets
JMP MarioBelow : JMP MarioAbove : JMP MarioSide : JMP SpriteV : JMP SpriteH : JMP MarioCape : JMP MarioFireBall : JMP MarioCorner : JMP HeadInside : JMP BodyInside
!Bouncetype = $00 ; 00 = bounce when hit
; 01 = do NOT bounce (Demo world style)
!Bricktype = $00 ; 00 = turn into coin when pow activated (set "block acts like" to 132!)
; 01 = do NOT turn into coin when pow activated (set "block acts like" to 130!)
!SMB3coin = $00 ; 00 = brick
; 01 = SMB3 coin (keep Bricktype to $00)
MarioBelow:
LDA $14AD
AND.b #!Bricktype-$01 ; depends on bricktype
BRA !SMB3coin<<2
BNE Pow ;if POW activated, do nothing (hey, you don't want a collectable shattering coin)
BRA $02
BEQ Pow
LDA $19
BNE MarioBig ; Shatter if Mario is big or flower or blahblah, bounce if mario is small (pretty obvious)
LDA #!Bouncetype
BNE Pow
LDA #$0F
TRB $9A
TRB $98 ; clear low nibble of X and Y position of contact
PHY
PHB ;preserve current bank
LDA #$02 ;push 02
PHA
PLB ;bank = 02
JSR iwannabounce ; block bounce sprite routine, ripped of SMB3 Brick bin file.
PLB ;restore bank
PLY
MarioAbove:
MarioSide:
MarioCorner:
HeadInside:
BodyInside:
MarioFireBall:
Pow:
RTL ; return
SpriteV:
LDA $14AD
AND.b #!Bricktype-$01 ; depends on bricktype
BRA !SMB3coin<<2
BNE Pow ; same thing
BRA $02
BEQ Pow
LDA $14C8,x
CMP #$09 ; do nothing if not a carryable sprite (since when you kick a shell upward, it is this status...)
BNE Pow
LDA $AA,x
BPL Pow ; only a rising sprite
LDA $0F
PHA ; if you don't do this, the sprite will be move slightly sideways
LDA $0A ; $0A-D hold the x/y of sprite contact
AND #$F0 ; have to clear the low nybble much like $98-9B
STA $9A
LDA $0B
STA $9B
LDA $0C
AND #$F0
STA $98
LDA $0D
STA $99
PHB
LDA #$02
PHA
PLB
LDA #$00 ;set to 0 for normal explosion, 1 for rainbow (throw blocks)
JSL $028663 ;breaking effect
PLB
LDA #$07
STA $1DFC
LDA #$02 ; Replace block with blank tile
STA $9C
JSL $00BEB0 ;ripped from another block, "shatter with sprite" or something
STZ $AA,x ; not sure it is usefull anyway
PLA
STA $0F ; explained above
JSR SpriteBlockInteract ; cause koopas and cie to be kicked if you break the block
JSR Points ; give 10 points
RTL
MarioCape:
LDA $14AD
AND.b #!Bricktype-$01 ; depends on bricktype
BRA !SMB3coin<<2
BNE Pow ; again
BRA $02
BEQ Pow
MarioBig:
LDA #$0F
TRB $9A
TRB $98 ; clear low nibble of X and Y position of contact
PHB
LDA #$02
PHA
PLB
LDA #$00 ;set to 0 for normal explosion, 1 for rainbow (throw blocks)
JSL $028663 ;breaking effect
PLB
LDA #$07
STA $1DFC
LDA #$02 ; Replace block with blank tile
STA $9C
JSL $00BEB0
JSR SpriteBlockInteract ; cause koopas and cie to be kicked if you break the block, again.
JSR Points ; give 10 points
return:
RTL
SpriteH:
LDA $14AD
AND.b #!Bricktype-$01 ; depends on bricktype
BRA !SMB3coin<<2
BNE return ; bah, you know...
BRA $02
BEQ return
LDA $14C8,x
CMP #$0A
BNE return ; only a kicked sprite
LDA $0A ; $0A-D hold the x/y of sprite contact
AND #$F0 ; have to clear the low nybble much like $98-9B
STA $9A
LDA $0B
STA $9B
LDA $0C
AND #$F0
STA $98
LDA $0D
STA $99
PHB
LDA #$02
PHA
PLB
LDA #$00 ;set to 0 for normal explosion, 1 for rainbow (throw blocks)
JSL $028663 ;breaking effect
PLB
LDA #$07
STA $1DFC
LDA #$02 ; Replace block with blank tile
STA $9C
JSL $00BEB0
LDY #$10 ;act like tile 130 to make the shell go backward
LDA #$30
STA $1693
JSR Points ; give 10 points
JSR SpriteBlockInteract ; cause koopas and cie to be kicked if you break the block. In this, case, I think it sucks, but eh, it is an emulation.
RTL
;;;;;;;;;;;;;;;;;;;ripped from the bin file, which was already ripped (and edited a bit) from $028818;;;;;;;
iwannabounce:
LDX #$00
LDY #$03 ; used for indexing
LDA $8789,x
STA $1901,y ; YXPPCCCT data of bounce sprite that is being shown
TXA
INC A ; LDA #$01 ?
STA $1699,y ; Block Bounce Sprite Image Table
LDA #$01 ;seems useless
STA $169D,y ; Block Bounce Sprite ? Table
LDA $9A
STA $16A5,y ; Block Bounce Sprite Xpos Low Byte Table
LDA $9B
STA $16AD,y ; Block Bounce Sprite Xpos High Byte Table
LDA $98
STA $16A1,y ; Block Bounce Sprite Ypos Low Byte Table
LDA $99
STA $16A9,y ; Block Bounce Sprite Ypos High Byte Table
LDA #$08
STA $16C5,y ; Block Bounce Sprite Bouncing Flag Table
LDA #$00
STA $16C1,y ; Block Bounce Sprite Turns Into Table
LDA $1933
LSR A
ROR A
STA $08
LDX #$00
LDA $873A,x
STA $16B1,y ; Block Bounce Sprite YSpeed Table
LDA $873E,x
STA $16B5,y ; Block Bounce Sprite XSpeed Table
TXA
ORA $08 ; seems useless too
STA $16C9,y ; Block Bounce Sprite ? Table
JSR SpriteBlockInteract
RTS
SpriteBlockInteract:
LDY #$03
ALoop1:
LDA $16CD,y ; Block Bounce Sprite Exists Flag Table
BEQ Missing4bytes
DEY
BPL ALoop1
INY ; equal to LDY #$00
Missing4bytes:
LDA $9A
STA $16D1,y
LDA $9B
STA $16D5,y
LDA $98
STA $16D9,y
LDA $99
STA $16DD,y
LDA $1933
BEQ Missing1Ebytes
LDA $9A
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
Missing1Ebytes:
LDA #$01
STA $16CD,y ; Block Bounce Sprite Exists Flag Table
LDA #$06
STA $18F8,y ; unknown!
RTS
Points:
LDA $0DB3
ASL A
ADC $0DB3
TAX
LDA $0F34,x
CLC
ADC #$01
STA $0F34,x
LDA $0F35,x
ADC #$00
STA $0F35,x
LDA $0F36,x
ADC #$00
STA $0F36,x
RTS
ich meine natürlich die Animation die entsteht, wenn der kleine mario unter den block springt.
wenn das ein sprite ist, dann weiss ich leider nicht, wie man das ändert.
habe mich mit sprites noch nicht beschäftigt. vielleicht kann mir jemand dabei helfen