;*********************************************************************
;	mario kart << ひっつきＯＢＪデモ >>
;					Programed by H.Yajima
;*********************************************************************

		INCLUDE	../../SFX/RP5C77
		INCLUDE	../../SFX/RP5A22
		INCLUDE	../../DSP/D77C25
		INCLUDE	../../../kimura/join/work.def
		INCLUDE	../../../kimura/join/buffer.def
		INCLUDE	../DEF/object.def
		glb	Sprite_poo

		ext	poo_0,tetre16_v
		ext	flower_0,monon16
		ext	poo,pooX
;--------------------------------------------------------------------
		EXTEND
objprog	SECT	REL
		mem16
		idx16
;*********************************************************************
;		ひっつきチョロプー				
;*********************************************************************
poo_work	equ	1ce0h
;- - - - - - - - - - - - - - - - - - - - - - - - - -
_obj_forward	equ	00	; coin work
_obj_sX		equ	02
_obj_sY		equ	04
_obj_vX		equ	06
_obj_vY		equ	08
_obj_timer	equ	10
_obj_wait	equ	12
_total_timer	equ	14
;--------------------------------------------------------------------
;	_poo_status	**** **** **** ****
;			|	ひっつきチョロプーの index		
;			+----	ひっつき中   (1)
;				ひっつき OFF (0)
;			0 = ひっつきチェック	
;- - - - - - - - - - - - - - - - -
_process	equ	28h
;--------------------------------------------------------------------
end_call	rts

Sprite_poo	ldx	<register
		lda	<_poo_status,x
		beq	end_call
		bpl	skip0$
		jmp	main_poo

;--------------------------------------------------------------------
;	ひっつき終了の処理
;--------------------------------------------------------------------
skip0$
		ldy	#poo_work
		lda	<screen_register
		beq	entry$
		ldy	#poo_work+10h

entry$		lda	!_obj_timer,y
		bne	skip$

		lda	#08000h		; Initial
		sta	!_obj_sX,y
		lda	#05000h
		sta	!_obj_sY,y
		ldx	!frame_part
		lda	>_vX_start,x
		sta	!_obj_vX,y	
		ldx	!obj_type
		lda	>_vY_start,x
		sta	!_obj_vY,y
		lda	>_vT_start,x
		sta	!_obj_timer,y
		ldx	<register

skip$		
;--------------------------------------------------------------------
		lda	!_obj_sX,y	; 座標の移動
		clc
		adc	!_obj_vX,y
		sta	!_obj_sX,y
		lda	!_obj_sY,y
		clc
		adc	!_obj_vY,y
		sta	!_obj_sY,y
		lda	#0060h		; 重力計算
		clc
		adc	!_obj_vY,y
		sta	!_obj_vY,y
;--------------------------------------------------------------------
		SEP	#00100000B
		MEM8			; 座標セット
		lda	!_obj_sY+1,y
		clc
		adc	<screen_obj_V+1
		sta	<position_V+0
		lda	!_obj_sX+1,y
		sta	<position_H+0
		lda	#0ffh
		sta	<position_V+1
		sta	<position_H+1
		REP	#00100000B
		MEM16
		stz	<attribute	; 反転セット
		lda	!_obj_vY,y
		bmi	skip2$
		lda	#8000h
		sta	<attribute
skip2$
;
;---------------------------------------------- ; カウント UP ----
		lda	!_obj_timer,y
		dec	a
		sta	!_obj_timer,y
		bne	exit$
;---------------------------------------------- ; ひっつき終了 ---
		lda	<_poo_status,x
		stz	<_poo_status,x	
		tay
		lda	#0
		sta	!_process,y

		lda	!pole_object_A
		cpx	#player_r0
		beq	skip_1$
		lda	!pole_object_B

skip_1$		sta	!_object_A,y		; INDEX 再セット
		rts
;---------------------------------------------- ; デモプー表示
exit$		lda	!pole_attribute
		tsb	<attribute	
		ldx	!course_type
		jmp	(process$,x)

process$	dw	poo_type
		dw	poo_type
		dw	poo_type
		dw	item_type
		dw	poo_type
		dw	item_type
		dw	poo_type
		dw	poo_type
poo_type	ldx	#poo_0
		jmp	tetre16_v
item_type	ldx	#flower_0
		jmp	monon16
;--------------------------------------------------------------------
;	ひっついているときの処理
;--------------------------------------------------------------------
main_poo	stz	<attribute
		lda	<screen_register
		asl	a
		asl	a
		asl	a
		adc	<frame_counter
		and	#03fh
		tax	
		SEP	#00100001B
		MEM8
		lda	#0ffh
		sta	<position_V+1
		sta	<position_H+1
		lda	>test_pooV,x
		adc	#058h-1
		clc
		adc	<screen_obj_V+1
		sta	<position_V
		lda	>test_pooH,x
		clc
		adc	#80h
		sta	<position_H
		REP	#00100000B
		MEM16
		ldx	#poo_0
		jmp	tetre16_v
;--------------------------------------------------------------------
bank83	sect	rel
;--------------------------------------------------------------------
test_pooV	
		db	00,02,03,04,04,04,03,02
		db	00,-2,-3,-4,-4,-4,-3,-2
		db	00,02,03,04,04,04,03,02
		db	00,00,00,00,00,00,00,00

		db	00,00,00,00,01,01,01,01
		db	02,02,02,02,01,01,01,01
		db	00,-3,-6,-9,-0Ah,-0Ch,-0Ch,-0Ch
		db	-0Ch,-0Ch,-0Ch,-0Ah,-9,-6,-3,00

test_pooH	
		db	00,02,03,03,02,00,-2,-3
		db	-3,-2,00,02,03,03,02,00
		db	-2,-3,-3,-2,00,00,00,00
		db	02,00,00,00,00,00,00,00

		db	00,01,01,01,02,02,02,02
		db	02,02,02,02,01,01,01,00
		db	00,00,00,00,00,00,00,00
		db	00,00,00,00,00,00,00,00
;--------------------------------------------------------------------
_vT_start	dw	00030h,00020h,00030h,00030h
		dw	00020h,00030h,00020h,00030h
_vY_start	dw	0fa00h,0fc00h,0fa00h,0fa00h
		dw	0fc00h,0fa00h,0fc00h,0fa00h
_vX_start	dw	00100h,0ff00h
;--------------------------------------------------------------------
		END
