;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Sumo brother disassembly
; By nekoh
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite init JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

incsrc subroutinedefs_trasm.asm

	RAM_SpriteDir   = $157C
	RAM_NoJumpTimer = $1504
	RAM_StateTimer  = $1540
	RAM_SpriteState = $C2

                    dcb "INIT"


                    LDY #$00                
                    LDA $D1                   
                    SEC                       
                    SBC $E4,X       
                    STA $0F            
	LDA #$20
	STA $15AC,X       
                    LDA $D2                   
                    SBC.W $14E0,X     
                    BPL Return01AD41          
                    INY                             
                    TYA                       
                    STA $157C,X     

;JSR SubHorzPosBnk3
;LDA XSpeedtable,y

LDA #$27
STA $B6,x
        JSL $818022 

Return01AD41:       RTL                       


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; sprite main code 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                           
                    dcb "MAIN"
                    PHB                       
                    PHK                       
                    PLB                             
                    JSR PorcuPuffer         
                    PLB                       
                    RTL                       ; Return 

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

PorcuPuffAccel:     db $01,$FF
PorcuPuffMaxSpeed:  db $10,$F0

PorcuPuffer:        JSR PorcuPufferGfx         
                    LDA $9D     
                    BNE Return038586          
                    LDA $14C8,X             
                    CMP #$08                
                    BNE Return038586          
                    JSL SubOffscreenX0  
                    JSL $81803A  
                    JSL SubHorizPos     
                    TYA                       
                    STA $157C,X     
                    LDA $14     
                    AND #$03                
                    BNE CODE_03855E           
                    ;LDA $B6,X    ; \ Branch if at max speed 
                    ;CMP PorcuPuffMaxSpeed,Y ;  | 
                    ;BEQ CODE_03855E           ; / 
                    ;CLC                       ; \ Otherwise, accelerate 
                    ;ADC PorcuPuffAccel,Y    ;  | 
                    ;STA $B6,X    ; / 
CODE_03855E:        ;LDA $B6,X    
                    ;PHA                       
                    ;LDA $17BD               
                    ;ASL                       
                    ;ASL                       
                    ;ASL                       
                    ;CLC                       
                    ;ADC $B6,X    
                    ;STA $B6,X    
                    ;JSL $818022   
                    ;PLA     

JSR SetUpMovement

         JSL $818022 
         

                    JSL $819138         
                    ;LDY #$04
	LDA $1558,x
	BNE splash

	LDA $AA,X
	INC
	INC			;More INC = fast fall
	INC
	TAY                

                    LDA.W $164A,X     ;in water flag        
                    BEQ CODE_038580           
                    LDY #$FC                
	LDA $15AC,X	;timer for jump
	BEQ Jump
	;BRA CODE_038580
	BRA float
Jump:

	LDA #$44		;distance required to try jumping
	STA $00
	JSR Proximity		;
	BEQ float
	;LDA #$A8		
	;STA $AA,X
LDA #$0F
STA $1558,x	

	LDA #$70
	STA $15AC,x
	BRA Skip


float:	LDY #$FC
CODE_038580:        STY $AA,X    
Skip:
                    JSL $81801A   
Return038586:       RTS                       ; Return 

splash:

CMP #$04	;(F - 4) (by default) frames spent dipping in the water before jumping
BCC attack
LDA #$10	;speed of dipping
STA $AA,x
BRA Skip
attack:

LDA #$A8	;*****TWEAK THIS FOR DIFFERENT JUMP HEIGHTS*****
STA $AA,x
BRA Skip





TimeInState:
	dcb $11,$28	;$11 originally
	
XSpeedtable:
	DCB $27,$D9	;31,cf	;&&&&TWEAK THESE FOR DIFFERENT X SPEEDS&&&&
JumpTable:
	DCB $20,$DF	;25,dc

SetUpMovement:


;LDA $14
;AND #$1F
;BNE rtns

LDA.W $164A,X     ;in water flag        	
BEQ rtns


LDA #$98	;distance required before attempting to turn around
STA $00
JSR Proximity
BNE rtns
JSL SubHorizPos
LDA XSpeedtable,y
STA $B6,x

rtns:
	RTS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; PorcuPuffer graphics routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

PorcuPufferDispX:   db $F8,$08,$F8,$08,$08,$F8,$08,$F8
PorcuPufferDispY:   db $F8,$F8,$08,$08
PorcuPufferTiles:   db $86,$C0,$A6,$C2,$86,$C0,$A6,$8A
PorcuPufferGfxProp: db $0F,$0F,$0F,$0F,$4F,$4F,$4F,$4F

PorcuPufferGfx:     JSL GetDrawInfo    
                    LDA $14     
                    AND #$04                
                    STA $03                   
                    LDA $157C,X     
                    STA $02                   
                    PHX                       
                    LDX #$03                
CODE_0385B4:        LDA $01                   
                    CLC                       
                    ADC PorcuPufferDispY,X  
                    STA $0301,Y         
                    PHX                       
                    LDA $02                   
                    BNE CODE_0385C6           
                    TXA                       
                    ORA #$04                
                    TAX                       
CODE_0385C6:        LDA $00                   
                    CLC                       
                    ADC PorcuPufferDispX,X  
                    STA $0300,Y         
                    LDA PorcuPufferGfxProp,X 
                    ORA $64                   
                    STA $0303,Y          
                    PLA                       
                    PHA                       
                    ORA $03                   
                    TAX                       
                    LDA PorcuPufferTiles,X  
                    STA $0302,Y          
                    PLX                       
                    INY                       
                    INY                       
                    INY                       
                    INY                       
                    DEX                       
                    BPL CODE_0385B4           
                    PLX                       
                    LDY #$02                
                    LDA #$03                
                    JSL $81B7B3      
                    RTS                       ; Return 

;=========================================;
;Proximity (horizontal)		          ;
;"A" will have 1 if the sprite is in range;
;Otherwise it's 0			  ;
;=========================================;

;Store the range to check from in 00, then jump to this routine.
;E.g.
;LDA #$12
;STA $00
;JSR Proximity


DirFix: dcb $FF,$00
Proximity:
	LDA $E4,x		;\
	SEC			; |
	SBC $94			; |
	PHA			; |
	JSL SubHorizPos	; | Check sprite range ..
	PLA			; |
	EOR DirFix,y		; |
	CMP $00			; | ; If Range > !Temp return. 
	BCS poopfarts			; |
	LDA #$01		; | A = #$01.
	RTS			; |
poopfarts:
	LDA #$00		; | A = #$00 if not in range.
	RTS			;/
