wp		EQU	0000H			; wood priority
;*********************************************************************
;	mario kart << sprite pole >>
;					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
		include	../DEF/effect.def
;----------------------------------------------------------------------
	EXT	Random
;- - - 
	glb	super_project
	ext	sound_zusin
	ext	Copy_situation
;- - -
	GLB	pole,poleX,pole_char,pole_char_B
	GLB	tire,tireX
	GLB	wood,woodX
	GLB	arch,archX
;----------------------------------------------------------------------
	GLB	rogo,rogoX
;----------------------------------------------------------------------
	GLB	hammer,hammerX
	GLB	option,optionX			;(BATTLE FUSEN)
	GLB	ball,ballX			;(BATTLE FIRE)
	GLB	gate				;(BATTLE GATE)
;----------------------------------------------------------------------
	GLB	option,optionX
	GLB	dokan,dokanX			;(CIRCUIT,SNOW)
	GLB	bubble,bubbleX			;(CASTLE)
	GLB	dossun,dossunX			; 
	GLB	rainbow_dossun,rainbow_dossunX	;(RAINBOW)
	GLB	wood,woodX			;(WOOD)
	GLB	flower,flowerX			;(FLOWER)
	GLB	poo,pooX			;(GRASS)
	GLB	fish,fishX			;(SAND)
;----------------------------------------------------------------------
	GLB	position_box,flipH_box,flipV_box
	GLB	position_mini,flipH_mini
	GLB	position_y2
;----------------------------------------------------------------------
	EXT	element,formate,convert,attitude
	EXT	project_arch,screen_arch_A,screen_arch_B,disp_arch
	EXT	jumpset_A,jumpset_B
	EXT	zoom_size
	EXT	attre,setobj,ret,subst,magna,disp_B_check
	EXT	project
	EXT	screen_AZ,screen_BZ,disp_B_check
	EXT	tetre16,tetre16_v,tetre8,tetre8_v
	EXT	double16,double16_v,double8,double8_v
	EXT	monon16,monon16_v,monon16_item,monon8,monon8_v,monon8_item
	EXT	check_BG
	EXT	move_object,project_Z
	EXT	Move_situation
	ext	Z_stop
;======================================================================
	glb	poo_0,flower_0
;====================
	COMN
work		DS	2
;======================================================================
		EXTEND
objprog	SECT	REL
		mem16
		idx16
;#######################################################################
;#####		プクプクＯＢＪ					########
;#######################################################################
;***********************************************************************
;		fish program
;***********************************************************************
bubble
bubbleX
fish		DW	0
		DW	project_Z,fish_copy,move_object,screen_AZ
		DW	check_mode_exit
		DW	subst,fish_char
;-----------------------------------------------------------------------
fishX		DW	0
		DW	fish_test,move_object
		DW	check_mode
		DW	project_Z,setobj,fish_char_B,screen_BZ,ret
;-----------------------------------------------------------------------
fish_char_B	DW	disp_B_check
fish_char	DW	fish_select,fish_z1,fish_z2
;-----------------------------------------------------------------------
fish_VX		DW	0060H,-030H,0020H,-070H
		DW	0030H,-040H,0000H,-050H
fish_VY		DW	0000H,0000H,0000H,0000H
		DW	0000H,0000H,0000H,0000H
fish_VZ		DW	0100H,0080H,0020H,00C0H
		DW	0120H,0100H,0060H,0070H
;-----------------------------------------------------------------------
fish_copy	phx
		ldx	<register
		lda	<_velocityX+40h,x
		sta	<_velocityX+00h,x
		lda	<_velocityY+40h,x
		sta	<_velocityY+00h,x
		lda	<_velocityZ+40h,x
		sta	<_velocityZ+00h,x
		plx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - - -



fish_test	PHX				;>>
		LDX	<register
;- - - - - - - - - - - - - - - - - - - - - - - - -
		LDA	<_velocityZ,X		;プクプクの重力
		SEC
		SBC	#0012H			
		STA	<_velocityZ,X
;- - - - - - - - - - - - - - - - - - - - - - - - -
		LDA	<_situationZL+1,X	; Z=0 ?
		BPL	ft_1000
;- - - - - - - - - - - - - - - - - - - - - - - - -
						;プクプク
						;スピードセット
;- - - - - - - - - - - - - - - - - - - - - - - - -
		jsl	>Random
		and	#00ffh
		clc
		adc	#0040h
		sta	<_velocityZ,x
;- - - - - - - - - - - - - - - - - - - - - - - - -
Xset		lda	<_situationXH,x
		sec
		sbc	<_initposX,x
		bpl	plus$
		cmp	#-0020h
		bcs	skip$
		jsr	random_M	;マイナス方向距離オーバー
		bra	skip_1$
plus$		cmp	#0020h
		bcc	skip$
		jsr	random_P	;プラス方向距離オーバー
		bra	skip_1$		
skip$		jsr	random_N
skip_1$		sta	<_velocityX,x
;- - - - - - - - - - - - - - - - - - - - - - - - -
Yset		lda	<_situationYH,x
		sec
		sbc	<_initposY,x
		bpl	plus$
		cmp	#-0020h
		bcs	skip$
		jsr	random_M	;マイナス方向距離オーバー
		bra	skip_1$
plus$		cmp	#0020h
		bcc	skip$
		jsr	random_P	;プラス方向距離オーバー
		bra	skip_1$		
skip$		jsr	random_N
skip_1$		sta	<_velocityY,x
;- - - - - - - - - - - - - - - - - - - - - - - - -
ft_1000		PLX				;<<
		INX
		INX
		JMP	(!0,X)

;- - - - - - - - - - - - - - - - - - - - - - - - -
random_N	jsl	>Random		;ノーマル
		and	#007fh
		lsr	a
		bcc	random_skip
		rts
random_M	jsl	>Random		;プラス方向へ戻す
		and	#007fh
		rts		
random_P	jsl	>Random		;マイナス方向へ戻す
		and	#007fh
random_skip	EOR	#1111111111111111B
		INC	A
		rts	
;#######################################################################
;#####		パックンフラワーＯＢＪ				########
;#######################################################################
;***********************************************************************
;		flower program
;***********************************************************************
flower		dw	0
		dw	check_mode
		dw	project_Z,screen_AZ
		dw	subst,flower_char
flowerX		dw	0
		dw	check_mode
		dw	project_Z
		dw	setobj,flower_char_B
		dw	screen_BZ,ret
;--------------------------------------------------------------------
fish_select	txy
		ldx	<register
	;;	lda	<_situationZL+1,x
	;;	cmp	#0100h
	;;	bcs	skip$
	;;	rts
;- - - - - - - - - - - - - - - - - - - - - - - - -
skip$		lda	<frame_counter
		and	#0010H
		beq	jump$
		iny
		iny
jump$		ldx	2,y
		jmp	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - - -



flower_select	TXY
		LDX	<register

		lda	<_BGcheck_status,x
		cmp	#4ch
		bne	skip$
		rts

skip$		LDA	<frame_counter
		AND	#0010H
		BEQ	flower_skip
		INY
		INY
flower_skip	LDX	2,Y
		JMP	(!0,X)
;--------------------------------------------------------------------
flower_char_B	DW	disp_B_check
flower_char	DW	flower_select,flower_z1,flower_z2
;--------------------------------------------------------------------
fish_z1
flower_z1	DW	magna,zoom_size
		DW	flower_0,flower_1,flower_1,flower_2
		DW	flower_3,flower_4,flower_5,flower_6
		DW	flower_7,flower_8,flower_9,flower_9
fish_z2
flower_z2	DW	magna,zoom_size
		DW	flower_0x,flower_1x,flower_1x,flower_2x
		DW	flower_3x,flower_4x,flower_5x,flower_6x
		DW	flower_7x,flower_8x,flower_9x,flower_9x
;- - - - - - - - - - - - - - - - - - - - -
flower_0	DW	monon16,2CC0H
flower_1	DW	monon16,2CC4H
flower_2	DW	monon16,2CC8H
flower_3	DW	monon16,2CCCH
flower_4	DW	monon16,2CE0H
flower_5	DW	monon8,2CE4H
flower_6	DW	monon8,2CE5H
flower_7	DW	monon8,2CF4H
flower_8	DW	monon8,2CF5H
flower_9	DW	monon8,2CF5H
;- - - - - - - - - - - - - - - - - - - - -
flower_0x	DW	monon16,2CC2H
flower_1x	DW	monon16,2CC6H
flower_2x	DW	monon16,2CCAH
flower_3x	DW	monon16,2CCEH
flower_4x	DW	monon16,2CE2H
flower_5x	DW	monon8,2CE6H
flower_6x	DW	monon8,2CE7H
flower_7x	DW	monon8,2CF6H
flower_8x	DW	monon8,2CF7H
flower_9x	DW	monon8,2CF7H
;#######################################################################
;#####		ドッスンＯＢＪ					########
;#######################################################################
rainbow_dossun	dw	0
		dw	set_Z
		dw	check_mode
		dw	project,frash_attre
		dw	screen_AZ,jumpset_A
		dw	subst,dossun_char
;--------------------------------------------------------------------
rainbow_dossunX	dw	0
		dw	move_object
		dw	move_test,dossun_select
		dw	check_mode
		dw	project,frash_attre,setobj,dossun_char_B
		dw	screen_BZ,jumpset_B,ret
;--------------------------------------------------------------------



;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
frash_attre	phx				; >>
		ldx	<register
		lda	<frame_counter
		and	#03h
		asl	a
		tay
		lda	!color_select,y
		sta	<attribute
		plx				; <<
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - - -
color_select	dw	0C00h,0000h,0600h,0000h
;#######################################################################
;#####		ドッスンＯＢＪ					########
;#######################################################################
_process	equ	_poseP
_timer		equ	_poseQ
;--------------------------------------------------------------------
dossun		dw	0
		dw	set_Z
		dw	check_mode
		dw	project,set_attre
		dw	screen_AZ,jumpset_A
		dw	subst,dossun_char
;--------------------------------------------------------------------
dossunX		dw	0
		dw	move_object
		dw	move_test,dossun_select
		dw	check_mode
;- - - - - -
		dw	project,set_attre,setobj,dossun_char_B
		dw	screen_BZ,jumpset_B,ret
;--------------------------------------------------------------------
dossun_select	dw	init_dossun	; 0
		dw	wait_dossun	; 1
		dw	down_dossun	; 2
		dw	stop_dossun1	; 3  stop1
		dw	stop_dossun2	; 4
		dw	up_dossun	; 5
;----------------------------------------------------------------------
set_attre	lda	#0600h
		sta	<attribute
		INX
		INX
		JMP	(!0,X)
;;----------------------------------------------------------------------
;ドッスン Ｚpos のコピー
;----------------------------------------------------------------------
set_Z		txy
		ldx	<register
;- - - - - - - - - - - - - - - - - - - - - - - - パラメータのコピー
		lda	<_situationZL+1+40h,x
		sta	<_situationZL+1+00h,x
		lda	<_process+40h,x
		sta	<_process+00h,x
		lda	<_pole_work+40h,x
		sta	<_pole_work+00h,x	
;- - - - - - - - - - - - - - - - - - - - - - - - 
		tyx
exit$		INX
		INX
		JMP	(!0,X)
;----------------------------------------------------------------------
;ドッスン初期セット
;----------------------------------------------------------------------
init_dossun	tyx
		stz	<_attribute,x
		lda	#0010h
		sta	<_situationZH,x
;- - - - - - - - - - - - - - - - - - - - - -
		stz	<_velocityX,x
		stz	<_velocityY,x
		stz	<_velocityY,x
;- - - - - - - - - - - - - - - - - - - - - -
		lda	#8100h
	;;	lda	#0
		ldy	<player_index+0
		bmi	skip$
		cmp	!_lap,y
		bcc	set$
skip$		ldy	<player_index+2
		bmi	exit$
		cmp	!_lap,y
		bcs	exit$
;- - - - - - - - - - - - - - - - - - - - - -
set$		jsl	>Random
		and	#007FH
		clc
		adc	#0010H
		jmp	next_pros
;- - - - - - - - - - - - - - - - - - - - - -
exit$		rts				; 1周目は落下ストップ
;----------------------------------------------------------------------
;ドッスン落下のウエイト
;----------------------------------------------------------------------
wait_dossun	tyx	
		dec	<_timer,x
		bne	exit$
		inc	<_process,x
		lda	#-0040h
		sta	<_velocityZ,x
exit$		rts
;----------------------------------------------------------------------
;ドッスン落下
;----------------------------------------------------------------------
down_dossun	tyx
		lda	<_situationZL+1,x
		bpl	exit$
;
		jsl	>sound_zusin
;
		stz	<_situationZL,x
		stz	<_situationZH,x
		stz	<_velocityZ,x
		lda	#120
		sta	<_pole_work,x
		lda	#14
		jmp	next_pros
exit$	
		sec			;　落下加速！
		lda	<_velocityZ,x
		sbc	#0020h
		sta	<_velocityZ,x
;
		rts
;----------------------------------------------------------------------
;ドッスンふみつけ状態
;----------------------------------------------------------------------
stop_dossun1				; ドッスンふるえ状態
		tya		
		sec
		sbc	#40h
		cmp	!_crash_index+player_r0		; screen 1
		bne	skip$
		lda	!_crash_timer+player_r0
		bne	fast$
skip$		cpy	!_crash_index+player_r1		; screen 2
		bne	slow$
		lda	!_crash_timer+player_r1
		bne	fast$
slow$		tyx				; タイマーもどり
		lda	<_pole_work,x		; ドットゆれ状態
		bra	wait_pros
fast$		tyx				; はやいもどり
		lda	#0ch
		sta	<_pole_work,x
		bra	wait_pros
;- - - - - - - - - - - - - - - - - -
stop_dossun2				; ドッスンウェイト状態	
		tya
		sec
		sbc	#40h
		cmp	!_crash_index+player_r0		; screen 1
		bne	skip$
		lda	!_crash_timer+player_r0
		bne	fast$
skip$		cpy	!_crash_index+player_r1		; screen 2
		bne	slow$
		lda	!_crash_timer+player_r1
		bne	fast$
slow$		tyx			; タイマーもどり
		bra	wait_pros
fast$		tyx			; はやいもどり
		lda	#20
		cmp	<_timer,x
		bcs	wait_pros
		sta	<_timer,x
		bra	wait_pros
;----------------------------------------------------------------------
;ドッスン上昇
;----------------------------------------------------------------------
up_dossun	tyx
		lda	#0040h
		sta	<_velocityZ,x
		lda	<_situationZH,x
		cmp	#0010h
		bcc	exit$
		stz	<_process,x
exit$		rts
;----------------------------------------------------------------------
;アニメＳＥＱ分岐
;----------------------------------------------------------------------
move_test	phx
		ldy	<register
		lda	!_process,y
		asl	a		;clc
		adc	2,x
		tax
		jsr	(!0,x)
		plx
		inx
		inx
		INX
		INX
		JMP	(!0,X)
;--------------------------------------------------------------------
;プロセス分岐
;--------------------------------------------------------------------
wait_pros	dec	<_timer,x	;タイマーが０でなければ exit
		bne	exit_pros
next_pros	sta	<_timer,x	;次回のタイマーセット
		inc	<_process,x
exit_pros	rts
;----------------------------------------------------------------------
dossun_char_B	DW	disp_B_check
dossun_char	DW	dossun_fire
		DW	magna,zoom_size
		DW	pole_0,pole_1,pole_2,pole_3
		DW	pole_4,pole_5,pole_6,pole_7
		DW	pole_8,pole_9,pole_10,pole_11
;----------------------------------------------------------------------
dossun_fire	ldy	<register
		lda	!_situationZL+1,y
		bne	exit$
		lda	!_process,y
		cmp	#3
		bne	exit$
		lda	<frame_counter
		lsr	a
		lda	#0
		adc	<position_V
		sta	<position_V
exit$		INX
		INX
		JMP	(!0,X)

;#######################################################################
;#####								########
;#######################################################################


;#######################################################################
;#####		チョロプーＯＢＪ				########
;#######################################################################
;***********************************************************************
;		move poo
;***********************************************************************
move_select	dw	init_poo	; position set
		dw	wait_poo	; poo wait 
		dw	open_poo
		dw	jump_init_poo
		dw	jump_poo
;----------------------------------------------------------------------
move_poo	TXY
		LDX	<register
		LDA	<_process,X
		ASL	A
		TAX
		JMP	(!move_select,X)
;----------------------------------------------------------------------
;		ポジションイニシャル
;----------------------------------------------------------------------
init_poo	
		ldx	<register
		STZ	<_situationZL+1,X	;(Z = 0)
		STZ	<_velocityZ,X		;(Zspeed = 0)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		JSL	>Random			; ウェイトタイマ
		AND	#003FH
		CLC
		ADC	#0010H
		BRA	next_process
;----------------------------------------------------------------------
;		出現ウエイト
;----------------------------------------------------------------------
wait_poo	LDX	<register
		LDA	#30
		BRA	wait_process
;----------------------------------------------------------------------
;		顔出しウエイト
;----------------------------------------------------------------------
open_poo	LDX	<register
		BRA	wait_process
;----------------------------------------------------------------------
;		ジャンプイニシャル
;----------------------------------------------------------------------
jump_init_poo	LDX	<register
		LDA	#0A0H
		STA	<_velocityZ,X
		BRA	next_process
;----------------------------------------------------------------------
;		ジャンプ中
;----------------------------------------------------------------------
jump_poo	LDX	<register
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		LDA	<_velocityZ,X
		SEC
		SBC	#0008H			; G
		STA	<_velocityZ,X
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		LDA	<_situationZL+1,X	; Z=0
		BPL	exit$
		STZ	<_situationZL+1,X
		STZ	<_process,X
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
exit$	
	;;	LDA	#0008H			; 通常あたりを外す
	;;	STA	<_hit_timer,X
		BRA	exit_process
;--------------------------------------------------------------------
;		プロセス分岐
;--------------------------------------------------------------------
wait_process	DEC	<_timer,X	;タイマーが０でなければ exit
		BNE	exit_process
next_process	STA	<_timer,X	;次回のタイマーセット
		INC	<_process,X	
exit_process	TYX
		INX
		INX
		JMP	(!0,X)
;--------------------------------------------------------------------
;		キャラクター分岐
;--------------------------------------------------------------------
poo_select	STX	<work
		LDX	<register
		LDA	<_process,X
		INC	A
		ASL	A		
		ADC	<work		;CLC
		TAY
		LDX	0,Y
		JMP	(!0,X)
;***********************************************************************
;		POO DATA
;***********************************************************************
;	ひっつきチョロプー
;--------------------------------------------------------------------
poo		DW	0,set_Z			; 通常チョロプー
		DW	check_mode
		DW	project_Z,screen_AZ
		DW	poo_erase1,subst,poo_char
;--------------------------------------------------------------------
pooX		DW	0
		DW	move_object,move_poo
		DW	check_mode
		DW	project_Z,poo_erase2
		DW	setobj,poo_char_B
		DW	screen_BZ,ret
;--------------------------------------------------------------------
poo_erase2	ldy	<register
		lda	!_pole_status,y
		bpl	exit$
		inx
		inx
		inx
		inx
exit$		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - -
poo_erase1	ldy	<register
		lda	!_pole_status,y
		bpl	exit$
		rts
exit$		INX
		INX
		JMP	(!0,X)
;--------------------------------------------------------------------
poo_char_B	DW	disp_B_check
poo_char	
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		dw	poo_select
		dw	poo_erase,poo_erase,poo_zoom1
		dw	poo_zoom2,poo_zoom2
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
poo_erase	dw	ret
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
poo_zoom1	DW	magna,zoom_size
		DW	poo_0X,poo_0X,poo_1X,poo_1X
		DW	poo_2X,poo_3X,poo_4X,poo_5X
		DW	poo_6X,poo_7X,poo_8X,poo_9X
poo_zoom2	DW	magna,zoom_size
		DW	poo_0,poo_0,poo_1,poo_1
		DW	poo_2,poo_3,poo_4,poo_5
		DW	poo_6,poo_7,poo_8,poo_9
;--------------------------------------------------------------------
poo_0		DW	tetre16_v		; (0) OBJ address pointer
		DW	position_box		; (2) OBJ position pointer 
		DW	poo_c0			; (4) OBJ character
		DW	2			; (6) offset V
		DW	0			; (8) flip H
		DW	flipV_box		; (A) flip V
;;
poo_1		DW	tetre16_v		; (0) OBJ address pointer
		DW	position_box		; (2) OBJ position pointer 
		DW	poo_c1			; (4) OBJ character
		DW	3			; (6) offset V
		DW	0			; (8) flip H
		DW	flipV_box		; (A) flip V
;;
poo_2		DW	double16_v		; (0)
		DW	position_Y2		; (2)
		DW	poo_c2			; (4)
		DW	3			; (6) offset V
		DW	0			; (8) flip H
		DW	flipV_Y2		; (A) flip V
;;
poo_3		DW	double16_v		; (0)
		DW	position_Y2		; (2)
		DW	poo_c2			; (4)
		DW	3			; (6)
		DW	0			; (8) flip H
		DW	flipV_Y2		; (A) flip V
;;
poo_4		DW	monon16_v,2EE0H,-2
poo_5		DW	monon16_v,2EE2H,-1
poo_6		DW	monon16_v,2EE4H,0
poo_7		DW	double8_v
		DW	position_y2
		DW	poo_c7
		DW	3
		DW	0
		DW	flipV_y2
poo_8		DW	monon8_v,2EE7H,-2
poo_9		DW	monon8_v,2EF7H,-1
;--------------------------------------------------------------------
poo_c0		DW	2EC0H,6EC0H,2EC2H,6EC2H
poo_c1		DW	2EC4H,6EC4H,2EC6H,6EC6H
poo_c2		DW	2EC8H,2ECAH
poo_c3		DW	2ECCH,2ECEH
poo_c7		DW	2EE6H,2EF6H
;--------------------------------------------------------------------
poo_0X		DW	double16_v		; (0) OBJ address pointer
		DW	position_X2		; (2) OBJ position pointer 
		DW	poo_c0			; (4) OBJ character
		DW	-1,0
		DW	flipV_X2
poo_1X		DW	double16_v		; (0) OBJ address pointer
		DW	position_X2		; (2) OBJ position pointer 
		DW	poo_c1			; (4) OBJ character
		DW	-1,0
		DW	flipV_X2
poo_2X		DW	monon16_v,2EC8H,-2	; (0)
poo_3X		DW	monon16_v,2ECCH,-2	; (0)
;
poo_4X		DW	double8_v
		DW	position_x2
		DW	poo_c4X
		DW	-2,0
		DW	flipV_x2
poo_5X		DW	double8_v
		DW	position_x2
		DW	poo_c5X
		DW	-2,0
		DW	flipV_x2
poo_6X		DW	double8_v
		DW	position_x2
		DW	poo_c6X
		DW	-2,0
		DW	flipV_x2
poo_7X		DW	monon8_v,2EE6H,-2
poo_8X		DW	monon8_v,2EE8H,-2
poo_9X		DW	monon8_v,2EF8H,-2
;--------------------------------------------------------------------
poo_c4X		DW	2EE0H,2EE1H
poo_c5X		DW	2EE2H,2EE3H
poo_c6X		DW	2EE4H,2EE5H
;#######################################################################
;#####		ドカンＯＢＪ					########
;#######################################################################
;***********************************************************************
;		DOKAN DATA
;***********************************************************************
attr_check	lda	!map_number
		cmp	#13h
		bne	skip$
		ldy	<register
		lda	#0400h
		ldy	<register
		sta	!_attribute,y
skip$		INX
		INX
		JMP	(!0,X)
;--------------------------------------------------------------------
dokan
tire
pole		dw	0
		dw	check_mode
		dw	project_Z,attr_check,attre
		dw	screen_AZ
		dw	subst,pole_char
;--------------------------------------------------------------------
dokanX
tireX
poleX		dw	0
		dw	check_mode
		dw	project_Z,attr_check,attre,setobj,pole_char_B
		dw	screen_BZ,ret
;-------------------------------------------------------------------
check_mode	txy
		ldx	<register
		bit	<_pole_status,x
		bmi	ret$
		ldx	<screen_register
		bit	<player_index,x
		bvs	ret$
		lda	!obj_count_A,x		; リミットをこえた？
		cmp	!obj_limit
		bcs	limit$
		tyx
		INX
		INX
		JMP	(!0,X)
limit$		jmp	super_project
ret$		rts		
;-------------------------------------------------------------------
check_mode_exit	txy
		ldx	<screen_register
		bit	<player_index,x
		bvs	ret$
		lda	!obj_count_A,x		; リミットをこえた？
		cmp	!obj_limit
		bcs	limit$
		tyx
		INX
		INX
		JMP	(!0,X)
limit$	
ret$		rts		
;-------------------------------------------------------------------


;- - - - - - - - - - - - - - - - - - - - - - - - - - -
super_project	ldx	<register
		SEP	#00100000B
		MEM8	
		lda	#dsp_project
		sta	!DSP_data
		REP	#00100000B
		MEM16
		lda	<_situationXH,x
		asl	a
		asl	a
		sta	!DSP_data
		lda	<_situationYH,x
		asl	a
		asl	a
		sta	!DSP_data
		lda	#0
		sta	!DSP_data
		lda	<screen_register
		lsr	a
		lsr	a
		LDA	>DSP_status
		BPL	$-4
		lda	!DSP_data
		lda	>0
		lda	!DSP_data
		lda	>0
		lda	!DSP_data
		bcc	skip$
		sta	<_distance_B,x
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
skip$		sta	<_distance_A,x
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - -







;*********************************************************************
;		pole CHARACTER SELECT
;*********************************************************************
pole_char_B	DW	disp_B_check
pole_char	DW	magna,zoom_size
		DW	pole_0,pole_1,pole_2,pole_3
		DW	pole_4,pole_5,pole_6,pole_7
		DW	pole_8,pole_9,pole_10,pole_11
;*********************************************************************
;		pole CHARACTER DATA
;*********************************************************************
pole_0		DW	tetre16		; (0) OBJ address pointer
		DW	position_box	; (2) OBJ position pointer 
		DW	tire_char0	; (4) OBJ character
;--------------------------------------------------------------------
pole_1		DW	tetre16_v	; (0) OBJ address pointer
		DW	position_box	; (2) OBJ position pointer 
		DW	tire_char1	; (4) OBJ character
		DW	2		; (6) offset V
;--------------------------------------------------------------------
pole_2		DW	tetre16_v	; (0) OBJ address pointer
		DW	position_2x2	; (2) OBJ position pointer 
		DW	tire_char2	; (4) OBJ character
		DW	4		; (6) offset V
;--------------------------------------------------------------------
pole_3		DW	tetre16_v	; (0) OBJ address pointer
		DW	position_2x2	; (2) OBJ position pointer 
		DW	tire_char3	; (4) OBJ character
		DW	6		; (6) offset V
;--------------------------------------------------------------------
tire_char0	DW	2EC0H,6EC0H,2EC2H,6EC2H
tire_char1	DW	2EC4H,6EC4H,2EC6H,6EC6H
tire_char2	DW	2EC8H,2ECAH,2EC8H,2ECAH
tire_char3	DW	2ECCH,2ECEH,2ECCH,2ECEH
tire_char7	DW	2EE6H,2EF6H,2EE6H,2EF6H
;--------------------------------------------------------------------
pole_4		DW	monon16_v,2EE0H,0
pole_5		DW	monon16_v,2EE2H,0
pole_6		DW	monon16_v,2EE4H,0	
;--------------------------------------------------------------------
pole_7		DW	tetre8_v	; (0) OBJ address pointer
		DW	position_2x2x2	; (2) OBJ position pointer 
		DW	tire_char7	; (4) OBJ character
		DW	1		; (6) offset V
;--------------------------------------------------------------------
pole_8		DW	monon8_v,2EE7H,-1
pole_9		DW	monon8_v,2EF7H,0
pole_10		DW	monon8_v,2EE8H,0
pole_11		DW	monon8_v,2EF8H,1
;--------------------------------------------------------------------
;
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\					\
;\	BATTLE MODE 			\
;\					\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;
;#######################################################################
;#####		バトル用風船キャラクタ				########
;#######################################################################
;***********************************************************************
;		風船キャラクタ
;***********************************************************************
ball		DW	0
		dw	erase_ball
		DW	project
		DW	attre,screen_AZ,jumpset_A
		DW	subst,ball_char
;- - - - - - - - - - - - - - - - - - - - - - - - - - - 
ballX		DW	0
		DW	move_ball
		dw	erase_ball
		DW	project,attre
		DW	setobj,ball_char_B
		DW	screen_BZ,jumpset_B,ret
;--------------------------------------------------------------------
ball_char_B	DW	disp_B_check
ball_char	DW	magna,zoom_size
		DW	ball_0,ball_1,ball_1,ball_2
		DW	ball_3,ball_4,ball_5,ball_6
		DW	ball_7,ball_8,ball_9,ball_A
;--------------------------------------------------------------------
tes	EQU	0
ball_0		DW	monon16,2320H+tes
ball_1		DW	monon16_item,2322H+tes
ball_2		DW	monon16_item,2324H+tes
ball_3		DW	monon16_item,2326H+tes
ball_4		DW	monon16_item,2328H+tes
ball_5		DW	monon8_item,232AH+tes
ball_6		DW	monon8_item,232BH+tes
ball_7		DW	monon8_item,232CH+tes
ball_8		DW	monon8_item,233AH+tes
ball_9		DW	monon8_item,233BH+tes
ball_A		DW	monon8_item,233CH+tes
;--------------------------------------------------------------------
erase_ball	phx
		ldx	<register
		ldy	<_option_owner,x
		ldx	<_obake_timer,y
		beq	disp$

		cpy	#player_r0
		beq	screenA$
screenB$	lda	<screen_register
		bne	frash$
		beq	skip$
screenA$	lda	<screen_register
		beq	frash$
skip$		cpx	#D_obake_nomal
		bcs	frash$
		cpx	#(D_obake_timer-D_obake_nomal)
		bcs	erase$
frash$		lda	<frame_counter
		lsr	a
		bcc	disp$
erase$		plx
		rts
disp$		plx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - - - - -



		ext	Erase_sprite
move_ball	phx
;
		ldx	<register
		lda	<_status,x
		and	#01000h		; ボールを消去する！
		beq	skip$
		jsl	>Erase_sprite
		plx
		rts
;
skip$		ldy	<_option_owner,x
		jsr	Copy_situation
		lda	<_option_Q,x
		clc
		adc	#0400h
		sta	<_option_Q,x	
		ldy	#0400h
		jsl	>Move_situation
		plx
		INX
		INX
		JMP	(!0,X)
;--------------------------------------------------------------------
		
;
;
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\				\
;\	ROGO ARCH		\
;\				\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;
gate
option
optionX
hammerX
hammer
rogo
rogoX
arch
archX		dw	0
;
;
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\				\
;\	WOOD BRIDE		\
;\				\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;
;#######################################################################
;#####		おばけ橋ＯＢＪ					########
;#######################################################################
;*********************************************************************
;		おばけ橋プログラム
;*********************************************************************
wood		DW	0
		DW	project,screen_AZ
		DW	subst,wood_char
;--------------------------------------------------------------------
woodX		DW	0
		DW	project,setobj,wood_char_B
		DW	screen_BZ,ret
;*********************************************************************
;		おばけ橋キャラクター
;*********************************************************************
wood_char_B	DW	disp_B_check
wood_char	DW	magna,zoom_size
		DW	wood_0,wood_1,wood_2,wood_3
		DW	wood_4,wood_5,wood_6,wood_7
		DW	wood_8,wood_9,wood_A,wood_B
;--------------------------------------------------------------------
wood_0		DW	tetre16		; (0) OBJ address pointer
		DW	position_wood16	; (2) OBJ position pointer 
		DW	wood_char0	; (4) OBJ character
wood_1		DW	tetre16		; (0) OBJ address pointer
		DW	position_wood16	; (2) OBJ position pointer 
		DW	wood_char1	; (4) OBJ character
wood_2		DW	tetre16		; (0) OBJ address pointer
		DW	position_wood16	; (2) OBJ position pointer 
		DW	wood_char2	; (4) OBJ character
wood_3		DW	tetre16		; (0) OBJ address pointer
		DW	position_wood16	; (2) OBJ position pointer 
		DW	wood_char3	; (4) OBJ character
wood_4		DW	tetre8		; (0) OBJ address pointer
		DW	position_wood8	; (2) OBJ position pointer 
		DW	wood_char4	; (4) OBJ character
wood_5		DW	tetre8		; (0) OBJ address pointer
		DW	position_wood8	; (2) OBJ position pointer 
		DW	wood_char5	; (4) OBJ character
wood_6		DW	tetre8		; (0) OBJ address pointer
		DW	position_wood8	; (2) OBJ position pointer 
		DW	wood_char6	; (4) OBJ character
wood_7		DW	tetre8		; (0) OBJ address pointer
		DW	position_wood8	; (2) OBJ position pointer 
		DW	wood_char7	; (4) OBJ character
;- - - - - - - - - - - - - - 
wood_8		dw	monon8_v,wp+0ee8h,06h
wood_9		dw	monon8_v,wp+0ef8h,06h
wood_A		dw	monon8_v,wp+0ee9h,06h
wood_B		dw	monon8_v,wp+0ef9h,06h
;--------------------------------------------------------------------
nchar		equ	0e84h
wood_char0	DW	wp+0EC0H,wp+0EC2H,wp+0EC4H,wp+nchar
wood_char1	DW	wp+0EC6H,wp+0EC8H,wp+0ECAH,wp+nchar
wood_char2	DW	wp+0ECCH,wp+0ECEH,wp+nchar,wp+nchar
wood_char3	DW	wp+0EE0H,wp+0EE2H,wp+nchar,wp+nchar
wood_char4	DW	wp+0EE4H,wp+0EE4H,wp+0EF4H,wp+nchar
wood_char5	DW	wp+0EE5H,wp+0EF5H,wp+nchar,wp+nchar
wood_char6	DW	wp+0EE6H,wp+0EF6H,wp+nchar,wp+nchar
wood_char7	DW	wp+0EE7H,wp+0EF7H,wp+nchar,wp+nchar
;--------------------------------------------------------------------
position_wood16	DW	00000H-3,0FFF8H
		DW	00010H-3,0FFF8H
		DW	00020H-3,0FFF8H
		DW	00020H-3,0FFF8H
position_wood8	DW	00000H-2,0FFFCH
		DW	00008H-2,0FFFCH
		DW	00010H-2,0FFFCH
		DW	00010H-2,0FFFCH
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;
;
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;\				\
;\	POSITION DATA		\
;\				\
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
;
;#######################################################################
;#####		SPRITE POSITION					########
;#######################################################################
;**********************************************************************
;		SPRITE POSITION DATA
;**********************************************************************
;--------------------------------------------------------------------
;		box size 16x16	
;--------------------------------------------------------------------
position_box	DW	0FFE0H,0FFF0H
		DW	0FFE0H,00000H
		DW	0FFF0H,0FFF0H
		DW	0FFF0H,00000H
flipH_box	DW	0FFE0H,00000H
		DW	0FFE0H,0FFF0H
		DW	0FFF0H,00000H
		DW	0FFF0H,0FFF0H
flipV_box	DW	0FFF0H,0FFF0H
		DW	0FFF0H,00000H
		DW	0FFE0H,0FFF0H
		DW	0FFE0H,00000H
;--------------------------------------------------------------------
;		mini size 16x16
;--------------------------------------------------------------------
position_mini	DW	0FFE8H,0FFF4H
		DW	0FFE8H,0FFFCH
		DW	0FFF0H,0FFF4H
		DW	0FFF0H,0FFFCH
flipH_mini	DW	0FFE8H,0FFFCH
		DW	0FFE8H,0FFF4H
		DW	0FFF0H,0FFFCH
		DW	0FFF0H,0FFF4H
;--------------------------------------------------------------------
;		X1,Y2(16x16) x1,y2(8x8)
;--------------------------------------------------------------------
position_Y2	DW	0FFE0H,0FFF8H
		DW	0FFF0H,0FFF8H
position_y2	DW	0FFF0H,0FFFCH
		DW	0FFF8H,0FFFCH
flipV_Y2	DW	0FFF0H,0FFF8H
		DW	0FFE0H,0FFF8H
flipV_y2	DW	0FFF8H,0FFFCH
		DW	0FFF0H,0FFFCH
;--------------------------------------------------------------------
;		X2,Y1(16x16) x2,y1(8x8)
;--------------------------------------------------------------------
position_X2	DW	0FFF0H,0FFF0H
		DW	0FFF0H,00000H
position_x2	DW	0FFF8H,0FFF8H
		DW	0FFF8H,00000H
flipV_X2	DW	0FFF8H,0FFF0H
		DW	0FFF8H,00000H
flipV_x2	DW	0FFFCH,0FFF8H
		DW	0FFFCH,00000H
;--------------------------------------------------------------------
;		special position
;--------------------------------------------------------------------
position_2x2	DW	0FFE0H,0FFF8H
		DW	0FFF0H,0FFF8H
		DW	0FFE0H,0FFF8H
		DW	0FFF0H,0FFF8H
position_2x2x2	DW	0FFF0H,0FFFCH	
		DW	0FFF8H,0FFFCH
		DW	0FFF0H,0FFFCH
		DW	0FFF8H,0FFFCH
;--------------------------------------------------------------------
		END
