;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Bone Pile
; By Sonikku
; 
; Description: A sprite that stays wherever you put it, and if 
; Mario gets close, it turns into a Dry Bones that is getting up
; (Rather than being a completely new sprite altogether).
; It turns into a normal Dry Bones or a Dry Bones that throws
; bones depending on its X position.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; init JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

incsrc subroutinedefs_trasm.asm

Time = $30		; time before getting up
Range = $70

	dcb "INIT"
	LDA $E4,x
	LSR
	LSR
	LSR
	LSR
	AND #$01
	STA $C2,x
	RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main sprite JSL
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

	dcb "MAIN"
	PHB
	PHK
	PLB
	JSR SPRITEMAIN
	PLB
	RTL

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; main sprite routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SPRITE	dcb $30,$32
SPRITEMAIN
	JSR SUB_GFX		; load graphics
	JSL SubOffscreenX0 ; only process if on screen
	LDA $9D		; if sprites locked..
	BNE RETURN	; return
	LDA #$08	; if sprites status..
	CMP $14C8,x	; isn't 8..
	BNE RETURN	; return
	JSL $81802A	; update position based on speed
	LDA $1588,x	; if sprite is in the air
	AND #$04	; 
	BEQ NOGND	; it has y speed
	STZ $AA,x	; if on ground, no y speed
NOGND	JSL SubHorizPos ; determine..
	LDA $0F		; if mario..
	CLC		; is close..
	ADC #Range	; to this..
	CMP #$50	; sprite..
	BCS RETURN	; if he isn't, return
	LDY $C2,x	; index by x position..

	LDA SPRITE,y	; load sprite to transform into..

	STA $9E,x	; and store it.

	JSL $87F7D2	; reset init

	LDA #$08	; sprite's status..

	STA $14C8,x	; is 8.

	LDA #$01	; sprites stomp status..

	STA $1534,x	; is 1 now.
	LDA #Time	; set timer before..
	STA $1540,x	; getting up.
	LDA #$07	; play sound effect.
	STA $1DF9	; and store it
	LDA #$01	; make it face the same..
	STA $157C,x	; direction as original sprite.
RETURN	RTS		; return.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; graphics routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TILEMAP		dcb $2D,$2E
XDISP		dcb $F8,$00
SUB_GFX
	JSL GetDrawInfo

	LDA $15F6,x
	STA $02

	LDX #$00

LOOP	LDA $00
	CLC
	ADC XDISP,x
	STA $0300,y

	LDA $01
	STA $0301,y

	LDA TILEMAP,x
	STA $0302,y

	LDA $02
	ORA $64
	STA $0303,y

	INY
	INY
	INY
	INY

	INX
	CPX #$02
	BNE LOOP

	LDX $15E9
	LDY #$02
	LDA #$01
	JSL $81B7B3
	RTS

