get paid to paste

Superkoopa

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Super Koopa disassembly
; By nekoh
;
; If extra bit is not set this will act like the red caped swooping super koopa, if the 
; extra bit is set it will act like the rising super koopa.
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite init JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

                    print "INIT ",pc
                    LDA !7FAB10,x
                    AND #$04
                    BEQ NotSet
                    LDY #$00                
                    LDA $D1                   
                    SEC                       
                    SBC !E4,X       
                    STA $0F                   
                    LDA $D2                   
                    SBC !14E0,X     
                    BPL Return01AD41          
                    INY                            
                    TYA                       
                    STA !157C,X             
                    LDA !E4,X       
                    AND #$10                
                    BEQ CODE_018547           
                    LDA #$10                ; \ Can be jumped on 
                    STA !1656,X   ; / 
                    LDA #$80                
                    STA !1662,X   
                    LDA #$10                
                    STA !1686,X   
                    RTL                       ; Return 

CODE_018547:        INC !1534,X             
                    RTL                       ; Return 

NotSet:             LDA #$28                
                    STA !AA,X    
                    LDY #$00                
                    LDA $D1                   
                    SEC                       
                    SBC !E4,X       
                    STA $0F                   
                    LDA $D2                   
                    SBC !14E0,X     
                    BPL Return01AD41          
                    INY                            
                    TYA                       
                    STA !157C,X     
Return01AD41:       RTL                                          


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite main code 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                           
                    print "MAIN ",pc
                    PHB                       
                    PHK                       
                    PLB                             
                    JSR SuperKoopa         
                    PLB                       
                    RTL                       ; Return 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite code JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DATA_02EB2F:        db $18,$E8

SuperKoopa:         JSR SuperKoopaGfx         
                    LDA !14C8,X             
                    CMP #$02                
                    BNE CODE_02EB49           
                    LDY #$04                
                    LDA $14     
                    AND #$04                
                    BEQ CODE_02EB44           
                    INY                       
CODE_02EB44:        TYA                       
                    STA !1602,X             
                    RTS                       ; Return 

CODE_02EB49:        LDA $9D     
                    BNE Return02EB7C          
                    JSR SubOffscreen0Bnk2   
                    JSL $01803A  
                    JSL $018022  
                    JSL $01801A
                    LDA !9E,X       
                    CMP #$73                
                    BEQ CODE_02EB7D           
                    LDY !157C,X     
                    LDA DATA_02EB2F,Y       
                    STA !B6,X    
                    JSR CODE_02EBF8         
                    LDA $13      
                    AND #$01                
                    BNE Return02EB7C          
                    LDA !AA,X    
                    CMP #$F0                
                    BMI Return02EB7C          
                    CLC                       
                    ADC #$FF                
                    STA !AA,X    
Return02EB7C:       RTS                       ; Return 

CODE_02EB7D:        LDA !C2,X     
                    JSL $0086DF          

SuperKoopaPtrs:     dw CODE_02EB8D           
                    dw CODE_02EBD1           
                    dw CODE_02EBE7            ;&$FFFF           

DATA_02EB89:        db $18,$E8

DATA_02EB8B:        db $01,$FF

CODE_02EB8D:        LDA $13      
                    AND #$00                
                    STA $01                   
                    STZ $00                   
                    LDY !157C,X     
                    LDA !B6,X    
                    CMP DATA_02EB89,Y       
                    BEQ CODE_02EBAB           
                    CLC                       
                    ADC DATA_02EB8B,Y       
                    LDY $01                   
                    BNE CODE_02EBA9           
                    STA !B6,X    
CODE_02EBA9:        INC $00                   
CODE_02EBAB:        INC !151C,X             
                    LDA !151C,X             
                    CMP #$30                
                    BEQ CODE_02EBCA           
CODE_02EBB5:        LDY #$00                
                    LDA $13      
                    AND #$04                
                    BEQ CODE_02EBBE           
                    INY                       
CODE_02EBBE:        TYA                       
                    LDY $00                   
                    BNE CODE_02EBC6           
                    CLC                       
                    ADC #$06                
CODE_02EBC6:        STA !1602,X             
                    RTS                       ; Return 

CODE_02EBCA:        INC !C2,X     
                    LDA #$D0                
                    STA !AA,X    
                    RTS                       ; Return 

CODE_02EBD1:        LDA !AA,X    
                    CLC                       
                    ADC #$02                
                    STA !AA,X    
                    CMP #$14                
                    BMI CODE_02EBDE           
                    INC !C2,X     
CODE_02EBDE:        STZ $00                   
                    JSR CODE_02EBB5         
                    INC !1602,X             
                    RTS                       ; Return 

CODE_02EBE7:        LDY !157C,X     
                    LDA DATA_02EB89,Y       
                    STA !B6,X    
                    LDA !AA,X    
                    BEQ CODE_02EBF8           
                    CLC                       
                    ADC #$FF                
                    STA !AA,X    
CODE_02EBF8:        LDY #$02                
                    LDA $13      
                    AND #$04                
                    BEQ CODE_02EC01           
                    INY                       
CODE_02EC01:        TYA                       
                    STA !1602,X             
                    RTS                       ; Return 


DATA_02EC06:        db $08,$08,$10,$00,$08,$08,$10,$00
                    db $08,$10,$10,$00,$08,$10,$10,$00
                    db $09,$09,$00,$00,$09,$09,$00,$00
                    db $08,$10,$00,$00,$08,$10,$00,$00
                    db $08,$10,$00,$00,$00,$00,$F8,$00
                    db $00,$00,$F8,$00,$00,$F8,$F8,$00
                    db $00,$F8,$F8,$00,$FF,$FF,$00,$00
                    db $FF,$FF,$00,$00,$00,$F8,$00,$00
                    db $00,$F8,$00,$00,$00,$F8,$00,$00
DATA_02EC4E:        db $00,$08,$08,$00,$00,$08,$08,$00
                    db $03,$03,$08,$00,$03,$03,$08,$00
                    db $FF,$07,$00,$00,$FF,$07,$00,$00
                    db $FD,$FD,$00,$00,$FD,$FD,$00,$00
                    db $FD,$FD,$00,$00

SuperKoopaTiles:    db $C8,$D8,$D0,$E0,$C9,$D9,$C0,$E2
                    db $E4,$E5,$F2,$E0,$F4,$F5,$F2,$E0
                    db $DA,$CA,$E0,$CF,$DB,$CB,$E0,$CF
                    db $E4,$E5,$E0,$CF,$F4,$F5,$E2,$CF
                    db $E4,$E5,$E2,$CF

DATA_02EC96:        db $02,$02,$02,$00,$02,$02,$02,$00
                    db $02,$02,$00,$00,$02,$02,$00,$00
                    db $82,$82,$80,$00,$82,$82,$80,$00
                    db $02,$02,$00,$00,$02,$02,$00,$00
                    db $02,$02,$00,$00

DATA_02ECBA:        db $00,$00,$00,$02,$00,$00,$00,$02
                    db $00,$00,$00,$02,$00,$00,$00,$02
                    db $00,$00,$02,$00,$00,$00,$02,$00
                    db $00,$00,$02,$00,$00,$00,$02,$00
                    db $00,$00,$02,$00

SuperKoopaGfx:      %GetDrawInfo()
                    LDA !157C,X     
                    STA $02                   
                    LDA !15F6,X     
                    AND #$0E                
                    STA $05                   
                    LDA !1602,X             
                    ASL                       
                    ASL                       
                    STA $03                   
                    PHX                       
                    STZ $04                   
CODE_02ECF7:        LDA $03                   
                    CLC                       
                    ADC $04                   
                    TAX                       
                    LDA $01                   
                    CLC                       
                    ADC DATA_02EC4E,X       
                    STA $0301|!Base2,Y         
                    LDA SuperKoopaTiles,X   
                    STA $0302|!Base2,Y          
                    PHY                       
                    TYA                       
                    LSR                       
                    LSR                       
                    TAY                       
                    LDA DATA_02ECBA,X       
                    STA $0460|!Base2,Y      
                    PLY                       
                    LDA $02                   
                    LSR                       
                    LDA DATA_02EC96,X       
                    AND #$02                
                    BEQ CODE_02ED4D           
                    PHP                       
                    PHX                       
                    LDX $15E9|!Base2               ; X = Sprite index 
                    LDA !1534,X             
                    BEQ CODE_02ED3B           
                    LDA $13B     
                    LSR                       
                    AND #$01                
                    PHY                       
                    TAY                       
                    LDA DATA_02ED39,Y       
                    PLY                       
                    BRA CODE_02ED44           


DATA_02ED39:        db $10,$0A

CODE_02ED3B:        LDA !9E,X       
                    CMP #$72                
                    LDA #$08                
                    BCC CODE_02ED44           
                    LSR                       
CODE_02ED44:        PLX                       
                    PLP                       
                    ORA DATA_02EC96,X       
                    AND #$FD                
                    BRA CODE_02ED52           

CODE_02ED4D:        LDA DATA_02EC96,X       
                    ORA $05                   
CODE_02ED52:        ORA $64                   
                    BCS CODE_02ED5F           
                    PHA                       
                    TXA                       
                    CLC                       
                    ADC #$24                
                    TAX                       
                    PLA                       
                    ORA #$40                
CODE_02ED5F:        STA $0303|!Base2,Y          
                    LDA $00                   
                    CLC                       
                    ADC DATA_02EC06,X       
                    STA $0300|!Base2,Y         
                    INY                       
                    INY                       
                    INY                       
                    INY                       
                    INC $04                   
                    LDA $04                   
                    CMP #$04                
                    BEQ SkipJump
                    JMP CODE_02ECF7           
SkipJump:           PLX                       
                    LDY #$FF                
                    LDA #$03                
                    JSL $01B7B3    
                    RTS                       ; Return 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Sprite Graphics Routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DATA_02D003:        db $40,$B0
DATA_02D005:        db $01,$FF
DATA_02D007:        db $30,$C0,$A0,$C0,$A0,$70,$60,$B0
DATA_02D00F:        db $01,$FF,$01,$FF,$01,$FF,$01,$FF


SubOffscreen0Bnk2:  STZ $03                   ; / 
                    JSR IsSprOffScreenBnk2  ; \ if sprite is not off screen, return 
                    BEQ Return02D090          ; / 
                    LDA $5B     ; \  vertical level 
                    AND #$01                ;  | 
                    BNE VerticalLevelBnk2     ; / 
                    LDA $03                   
                    CMP #$04                
                    BEQ CODE_02D04D           
                    LDA !D8,X       ; \ 
                    CLC                       ;  | 
                    ADC #$50                ;  | if the sprite has gone off the bottom of the level... 
                    LDA !14D4,X     ;  | (if adding 0x50 to the sprite y position would make the high byte >= 2) 
                    ADC #$00                ;  | 
                    CMP #$02                ;  | 
                    BPL OffScrEraseSprBnk2    ; /    ...erase the sprite 
                    LDA !167A,X   ; \ if "process offscreen" flag is set, return 
                    AND #$04                ;  | 
                    BNE Return02D090          ; / 
CODE_02D04D:        LDA $13      
                    AND #$01                
                    ORA $03                   
                    STA $01                   
                    TAY                       
                    LDA $1A    
                    CLC                       
                    ADC DATA_02D007,Y       
                    ROL $00                   
                    CMP !E4,X       
                    PHP                       
                    LDA $1B    
                    LSR $00                   
                    ADC DATA_02D00F,Y       
                    PLP                       
                    SBC !14E0,X     
                    STA $00                   
                    LSR $01                   
                    BCC CODE_02D076           
                    EOR #$80                
                    STA $00                   
CODE_02D076:        LDA $00                   
                    BPL Return02D090          
OffScrEraseSprBnk2: LDA !14C8,X             ; \ If sprite status < 8, permanently erase sprite 
                    CMP #$08                ;  | 
                    BCC OffScrKillSprBnk2     ; / 
                    LDY !161A,X ; \ Branch if should permanently erase sprite 
                    CPY #$FF                ;  | 
                    BEQ OffScrKillSprBnk2     ; / 
                    LDA #$00                ; \ Allow sprite to be reloaded by level loading routine 
                    PHX
                    TYX
                    STA !1938,X ; / 
                    PLX
OffScrKillSprBnk2:  STZ !14C8,X             ; Erase sprite 
Return02D090:       RTS                       ; Return 

VerticalLevelBnk2:  LDA !167A,X   ; \ If "process offscreen" flag is set, return 
                    AND #$04                ;  | 
                    BNE Return02D090          ; / 
                    LDA $13      ; \ Return every other frame 
                    LSR                       ;  | 
                    BCS Return02D090          ; / 
                    AND #$01                
                    STA $01                   
                    TAY                       
                    LDA $1C    
                    CLC                       
                    ADC DATA_02D003,Y       
                    ROL $00                   
                    CMP !D8,X       
                    PHP                       
                    LDA $1D  
                    LSR $00                   
                    ADC DATA_02D005,Y       
                    PLP                       
                    SBC !14D4,X     
                    STA $00                   
                    LDY $01                   
                    BEQ CODE_02D0C3           
                    EOR #$80                
                    STA $00                   
CODE_02D0C3:        LDA $00                   
                    BPL Return02D090          
                    BMI OffScrEraseSprBnk2    
IsSprOffScreenBnk2: LDA !15A0,X 
                    ORA !186C,X 
                    RTS                       ; Return

Pasted: Jul 30, 2018, 11:21:50 am
Views: 28