;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; INIT and MAIN JSL targets
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

incsrc subroutinedefs_trasm.asm

		dcb "INIT"
		RTL		

		dcb "MAIN"			
		PHB
		PHK				
		PLB				
		JSR SPRITE_ROUTINE	
		PLB
		RTL     


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SPRITE_ROUTINE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SPRITE_ROUTINE	JSR SUB_GFX
		LDA $14C8,x		; \  return if
		CMP #$08		;  | sprite
		BNE RETURN		; /  status != 8
		LDA $9D			; \ return if
		BNE RETURN		; / sprites locked
		JSL SubOffscreenX0	; only process sprite while on screen

		JSL $818022             ; Update X position without gravity
        	JSL $81801A             ; Update Y position without gravity
		JSL $818032		; interact with other sprites

		LDA $187A		; \ if mario is on Yoshi, return because
		BNE RETURN		; / losing Yoshi is calculated elsewhere
		JSL $81A7DC		; \ skip to end if
		BCC RETURN		; / no interaction
		LDA $1490		; \ branch if mario
		BNE HASSTAR		; / has the star
		JSL $80F5B7		; hurt mario
RETURN		RTS

HASSTAR		LDA #$02		; \ kill
		STA $14C8,x		; / sprite
		RTS

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; GRAPHICS ROUTINE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

		GFXTMP1 = $02

FLAMETOP	dcb $0C,$0D
FLAMEBOTTOM	dcb $1C,$1D

SUB_GFX		JSL GetDrawInfo
		LDA $15E9		; \
		ASL A			;  | get
		CLC			;  | flame
		ADC $14			;  | frame
		LSR A			;  | index
		AND #%00000001		;  |
		STA GFXTMP1		; /

		LDA $00			; \
		CLC			;  | top
		ADC #$04		;  | X
		STA $0300,y		; /
		LDA $01			; \ top
		STA $0301,y		; / Y
		PHY			; \
		LDY GFXTMP1		;  | get
		LDA FLAMETOP,y		;  | tile #
		PLY			; /
		STA $0302,y		; set tile #
		LDA $15F6,x		; get sprite palette info
		ORA $64                 ; add in the priority bits from the level settings
		STA $0303,y             ; set properties
		INY			; \
		INY			;  | next OAM
		INY			;  | index
		INY			; /
		LDA $00			; \
		CLC			;  | bottom
		ADC #$04		;  | X
		STA $0300,y		; /
		LDA $01			; \
		CLC			;  | bottom
		ADC #$08		;  | Y
		STA $0301,y		; /
		PHY			; \
		LDY GFXTMP1		;  | get
		LDA FLAMEBOTTOM,y	;  | tile #
		PLY			; /
		STA $0302,y		; set tile #
		LDA $15F6,x		; get sprite palette info
		ORA $64                 ; add in the priority bits from the level settings
		STA $0303,y             ; set properties
		INY			; \
		INY			;  | next OAM
		INY			;  | index
		INY			; /
		LDY #$00		; #$00 means the tiles are 8x8
		LDA #$01		; This means we drew two tiles
		JSL $81B7B3		; don't draw if offscreen, set tile sizes
		RTS

