;*********************************************************************
;	mario kart << move sprite >>
;					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	move_object,move_object_XY,move_XY
		GLB	Z_stop,Z_bound
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		GLB	Move_situation
		GLB	Copy_situation
;----------------------------------------------------------------------
		COMN
vector		DS	2
work		DS	2
test_VX		DS	2
test_VY		DS	2
;----------------------------------------------------------------------
		EXTEND
objprog	SECT	REL
		mem16
		idx16
;*********************************************************************
;		座標のコピー		
;*********************************************************************

;- - - - - - - - - - - - - - - - - - - - - - - - - - 
;表示位置のコピー
;		y	コピー元インデックス
;		x	コピー先インデックス
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Copy_situation	
;- - - - - - - - - - - - - - - - - - - - - - - - - - 
		lda	!_situationXH,y		; 座標のコピー
		sta	<_situationXH,x
		lda	!_situationYH,y
		sta	<_situationYH,x
		lda	!_situationXL,y
		sta	<_situationXL,x
		lda	!_situationYL,y
		sta	<_situationYL,x
		lda	!_situationZL,y
		sta	<_situationZL,x
		lda	!_situationZH,y
		sta	<_situationZH,x
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - 



;*********************************************************************
;		ジャンプ計算
;*********************************************************************
Z_stop		phx
		ldx	<register
		lda	<_situationZH+0,x	;負になったら
		bpl	Z_calc			;０でとめる
		stz	<_situationZL+1,x
		stz	<_situationZH+0,x
		bra	Z_calc
Z_bound		phx
		ldx	<register
		lda	<_situationZH+0,x	;負になったら
		bpl	Z_calc		
		stz	<_situationZL+1,x
		stz	<_situationZH+0,x
;- - - - - - - - - - - - - - - - - - - - - - - - 
		SEP	#00100000B
		MEM8
		lda	#dsp_multiply
		sta	!DSP_data
		REP	#00100000B
		MEM16
		lda	<_velocityZ,x
		sta	!DSP_data
		lda	#04000h
		sta	!DSP_data
		lda	!DSP_data
		sta	<_velocityZ,x
;- - - - - - - - - - - - - - - - - - - - - - - - 
Z_calc				
		lda	#0fff8h			;重力計算
		clc	
		adc	<_velocityZ,x
		sta	<_velocityZ,x
		plx
		INX
		INX
		JMP	(!0,X)
;*********************************************************************
;		OBJ ITEM MOVE
;*********************************************************************
move_XY		PLX
		INX
		STX	<vector
		LDX	#-2
move_object_XY	PHX
		LDX	<register
		BRA	set_VX
move_object	PHX
		LDX	<register	
;--------------------------------------------------------------------
		LDY	#0			; set Z
		LDA	<_velocityZ,X
		BPL	VZ_skip
		DEY				;
VZ_skip		CLC
		ADC	<_situationZL+1,X	; **** OOOO OOOO ****
		STA	<_situationZL+1,X
		SEP	#00100000B
		MEM8
		TYA
		ADC	<_situationZH+1,X	; OOOO **** **** ****
		STA	<_situationZH+1,X
		REP	#00100000B
		MEM16
;--------------------------------------------------------------------
set_VX		LDY	#0			; set X
		LDA	<_velocityX,X
		BPL	vx_skip
		DEY
vx_skip		CLC
		ADC	<_situationXL+1,X	; **** OOOO OOOO ****
		STA	<_situationXL+1,X
		SEP	#00100000B
		MEM8
		TYA
		ADC	<_situationXH+1,X	; OOOO **** **** ****
		STA	<_situationXH+1,X
;--------------------------------------------------------------------
		REP	#00100000B
		MEM16				; set Y 
		LDY	#0
		LDA	<_velocityY,X
		BPL	vy_skip
		DEY
vy_skip		CLC
		ADC	<_situationYL+1,X	; **** OOOO OOOO ****
		STA	<_situationYL+1,X
		SEP	#00100000B
		MEM8
		TYA
		ADC	<_situationYH+1,X	; OOOO **** **** ****
		STA	<_situationYH+1,X
		REP	#00100000B
		MEM16
;--------------------------------------------------------------------
		PLX
		INX
		INX
		JMP	(!0,X)
;*********************************************************************
;		Move situation
;*********************************************************************
;
;		LDX	<register	; obj work
;		LDY	#1000H		; move power ( 10Hdot )
;		LDA	<_poseQ,X	; move angle
;		JSL	Move_situation
;
;----------------------------------------------------------------------
Move_situation	
		PHA				;>>
		SEP	#00100000B
		MEM8
		LDA	#dsp_triangle		;B
		STA	!DSP_data		;B
		REP	#00100001B
		MEM16    
		PLA				;<<
		STA	!DSP_data		;W
		TYA  
		STA	!DSP_data		;W (power)
		LDA	>DSP_status
		BPL	$-4
		LDA	!DSP_data		;W (L * sin Q)
		PHA				; >>
		LDA	!DSP_data		;W (L * cos Q)
		EOR	#1111111111111111B
		INC	A
		PHA				;   >>
;- - - - - - - - - - - - - - - - - - - - - - - - - 

Entry_st	LDY	#0
		PLA				;   <<
		BPL	VY_skip
		DEY
VY_skip		ADC	<_situationYL+1,X	; CLC
		STA	<_situationYL+1,X
		SEP	#00100000B
		MEM8
		TYA
		ADC	<_situationYH+1,X
		STA	<_situationYH+1,X
		REP	#00100001B
		MEM16				; CLC
;- - - - - - - - - - - - - - - - - - - - - - - - - 
		LDY	#0
		PLA				;<<
		BPL	VX_skip
		DEY
VX_skip		ADC	<_situationXL+1,X
		STA	<_situationXL+1,X
		SEP	#00100000B
		MEM8
		TYA
		ADC	<_situationXH+1,X
		STA	<_situationXH+1,X
		REP	#00100001B
		MEM16				;CLC
;- - - - - - - - - - - - - - - - - - - - - - - - - 
		RTL
;- - - - - - - - - - - - - - - - - - - - - - - - - 
;*********************************************************************
;	カベあたりスピン
;*********************************************************************
		glb	Spin_kabe
Spin_kabe	lda	<_velocityX,x
		pha
		lda	<_velocityY,x
		pha
		jmp	>Entry_st
;- - - - - - - - - - - - - - - - - - - - - - - - - 
