;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SMB3 Buster Beetle's Block
; Coded by SMWEdit
;
; Uses first extra bit: NO
;
; NOTE: use this sprite in conjunction w/ buster beetle, don't just insert it into a level, it will glitch
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

incsrc subroutinedefs_trasm.asm

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

		dcb "INIT"
		LDA #$0A		; \ make it an
		STA $14C8,x		; / activated shell
		RTL

		dcb "MAIN"		
		PHB
		PHK
		PLB
		JSR SPRITE_ROUTINE
		PLB
		RTL     


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; SPRITE ROUTINE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DYING		LDA #$53		; \ dies like
		STA $9E,x		; / a throwblock
		RTS

SPRITE_ROUTINE	JSR SUB_GFX
		LDA $14C8,x		; \  return if
		CMP #$02		;  | sprite status
		BEQ DYING		;  | is < 8, or
		CMP #$08		;  | branch to death
		BCC RETURN		; /  handler if dying
		LDA $9D			; \ return if
		BNE RETURN		; / sprites locked
		JSL SubOffscreenX0	; only process sprite while on screen

		LDA #$0A		; \ make it an
		STA $14C8,x		; / activated shell

		LDA $1588,x		; \  if not hitting
		AND #%00000011		;  | wall, then skip
		BEQ NOHITWALL		; /  this next code
		LDA #$02		; \ make sprite
		STA $14C8,x		; / start dying
NOHITWALL
       
RETURN		RTS

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

SUB_GFX		JSL GetDrawInfo
		LDA #$F0		; \ kill that annoying tile used
		STA $0309,y		; / for original shell tilemaps
		LDA $00			; \ Xpos
		STA $0300,y		; /
		LDA $01			; \ Ypos
		STA $0301,y		; / 
		LDA #$40		; \ tile
		STA $0302,y		; / number
		LDA $13			; \
		AND #%00000111		;  | cycle through palettes
		ASL A			; /
		ORA $64			; add in priority bits
		STA $0303,y		; set properties
		LDY #$02		; #$02 means the tiles are 16x16
		LDA #$00		; #$00 means one tile drawn
		JSL $81B7B3		; don't draw if offscreen, set tile size
		RTS

