; = = = = = OAM のデータアドレス = = = = = =
	include	../DAT/OBJ/OAM_data.def
;*********************************************************************
;	mario kart << sprite car >>
;					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/sound.def
		include	../DEF/effect.def
;----------------------------------------------------------------------
	glb	sand_select,sand_select2
;- - - - - - - - - - - - - - - - - - - - - - - - - -
	ext	sound_myerase,sound_hirahira
	ext	Trigger_sound_1,Trigger_sound_2
	ext	sound_my_enemy,TRIGGER_SOUND
	ext	mykart_state,enemy_state
;- - - - - - - - - - - - - - - - - - - - - - - - - -
	ext	check_mode_A,check_mode_B
	ext	dist_project,dist_screen
;- - - - - - - - - - - - - - - - - - - - - - - - - -
	ext	fire_check
	ext	sound_dosun_out,sound_VScrash
;- - - - - - - - - - - - - - - - - - - - - - - - - -
	GLB	zoom_size
	GLB	playercar_A,playercar_B
	GLB	car_A,car_B,car_Ab,car_Ba
	GLB	enemycar_A,enemycar_B,endcar_A,endcar_B
	GLB	demo_kart,Stop_trans
;----------------------------------------------------------------------
	GLB	kart_A,kart_A_mycar
	ext	sound_crash,sound_balloon
	glb	mapmode_check
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	ext	mapsprite_set_A,mapsprite_set_B
	ext	map_screen_B,map_screen_A
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
	EXT	disp_B_check
	EXT	jumpset_A,jumpset_B
	EXT	subst,subst_next,magna
	ext	trans_A,trans_B,trans_Amy,trans_Bmy
;
	EXT	project,project_Z,screen_A,screen_B,check_BG
	EXT	tetre16,tetre16_v,tetre8,tetre8_v
	EXT	double16,double16_v,double8,double8_v
	EXT	monon16,monon16_v,monon8,monon8_v
	EXT	attre,setobj,ret
	EXT	mycarA_center,mycarB_center,H_center,V_mycar,VH_mycar
	EXT	mycar_distance,max_distance
	EXT	OAM_option,Sprite_poo
	EXT	move_object_XY
;----------------------------------------------------------------------
	EXT	Player_slot
	EXT	debug_FLAG
;----------------------------------------------------------------------
	EXT	position_box,flipH_box
	EXT	position_mini,flipH_mini
	EXT	position_y2
;----------------------------------------------------------------------
	COMN
work		DS	2
addr		DS	4
;----------------------------------------------------------------------
		EXTEND
objprog	SECT	REL
		mem16
		idx16
;***********************************************************************
;		OAM SET
;***********************************************************************
setselect	ldy	<register
		lda	!_sunder_timer,y	; チビ ？
		beq	skip_1$

		lda	!_situationZL+1,y
		bne	skip_1$
		lda	!event_index,y
		cmp	#06h
		beq	erase$
		cmp	#08h
		beq	erase$

skip_1$		lda	!_obake_timer,y		; おばけ ？
		beq	skip$
		lda	<frame_counter
		lsr	a
		bcc	skip$
erase$		inx				; カート表示消去
		inx
skip$		ldy	2,x
		tyx
		jmp	(!0,x)

;####################################################################
;	カート メインコントロール
;####################################################################
		ext	Sprite_coin

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
endcar_A	dw	0
		dw	project,check_BG,enemy_state
		dw	attre_special,screen_A,jumpset_A
		dw	erase_car_A,subst,kart_A
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
endcar_B	dw	0
		dw	end_check,check_BG
		dw	project
		dw	attre_special,erase_car_B,setobj,kart_B
		dw	screen_B,jumpset_B,ret
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

end_check	lda	!ending_pattern
		and	#000010b
		bne	skip$
		inx
		inx
skip$		INX
		INX
		JMP	(!0,X)

;--------------------------------------------------------------------
;		マイカートメイン表示 ( １Ｐ上画面 ）
;--------------------------------------------------------------------
car_special_A	
		dw	erase_check
		dw	mykart_state
		dw	mycar_sound_A
		dw	disp_crash
		dw	check_BG
		dw	disp_my_item
		dw	fire_check
		dw	check_back_A
		dw	mycar_subst,nomal_A,zusin_A

;- - - - - - - - - - - - - - - - - - (通常時表示ルーチン）- - 

nomal_A		
		dw	mycar_A,ud_player,jumpset_A,option_A1
		dw	attre_special
		dw	setselect,kart$,obake$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
kart$		dw	setobj,kart_A_mycar,Sprite_coin,Sprite_poo,ret
obake$		dw	Sprite_coin,Sprite_poo,ret
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
car_goal_A	dw	erase_check,mykart_state,mycar_sound_A
		dw	check_BG
		dw	mycar_A,jumpset_A,option_A1,attre_special
		dw	setobj,kart_A_mycar,ret
;--------------------------------------------------------------------
;		マイカートメイン表示 ( ２Ｐ下画面 ）
;--------------------------------------------------------------------
car_special_B
		dw	erase_check
		dw	mykart_state
		dw	mycar_sound_B
		dw	disp_crash
		dw	disp_my_item
  		dw	fire_check
		dw	check_back_B
		dw	mycar_subst,nomal_B,zusin_B
;- - - - - - - - - - - - - - - - - - (通常時表示ルーチン）- - 

nomal_B		dw	mycar_B,ud_player,jumpset_B,option_B1
		dw	attre_special
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		dw	setselect,kart$,obake$
kart$		dw	setobj,kart_B_mycar,Sprite_coin,Sprite_poo
obake$		dw	Sprite_coin,Sprite_poo
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
car_goal_B	dw	erase_check,mykart_state,mycar_sound_B
		dw	mycar_B,jumpset_B,option_B1
		dw	attre_special,setobj,kart_B_mycar,ret



;============== 上画面 ==============================================
;--------------------------------------------------------------------
;		マイカートの分身 ( 計算カート ）
;--------------------------------------------------------------------

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; プレイヤー1の計算カート
;- - - - - - - - - - - - - - - - - - - -
car_calc_AP	dw	mykart_state
		dw	check_mode_A
		dw	calc_A_main,calc_A_erase,calc_A_ret,calc_A_map
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
car_A		DW	0
car_calc_A	dw	check_mode_A
		dw	calc_A_main,calc_A_erase,calc_A_ret,calc_A_map
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
calc_A_main	dw	project
		dw	check_BG
		dw	attre_special,screen_A,jumpset_A
		dw	erase_car_A,subst,kart_A
;- - - - - - - - - - - - - - - - - - - - -
calc_A_erase	dw	dist_project,check_BG
		dw	dist_screen
;- - - - - - - - - - - - - - - - - - - - -
calc_A_ret	dw	check_BG,ret
;- - - - - - - - - - - - - - - - - - - - -
calc_A_map	dw	check_BG
		dw	project_Z
		dw	attre_special
		dw	mapsprite_set_A,map_screen_A
		dw	ret
;--------------------------------------------------------------------


;--------------------------------------------------------------------
;		敵車のメインコントロール ( 計算カート )
;--------------------------------------------------------------------
enemycar_A	dw	0
		dw	check_mode_A
		dw	enemy_A_main,enemy_A_erase,enemy_A_ret,enemy_A_map
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
enemy_A_main	dw	project,check_BG,enemy_state
		dw	attre_special,screen_A,jumpset_A
		dw	erase_car_A,subst,kart_A
;- - - - - - - - - - - - - - - - - - - - -
enemy_A_erase	dw	dist_project,check_BG,enemy_state
		dw	dist_screen
;- - - - - - - - - - - - - - - - - - - - -
enemy_A_ret	dw	check_BG,enemy_state,ret
;- - - - - - - - - - - - - - - - - - - - -
enemy_A_map	dw	check_BG,enemy_state
		dw	project_Z
		dw	attre_special,mapsprite_set_A,map_screen_A
;- - - - - - - - - - - - - - - - - - - - -



;============== 下画面 ==============================================
;--------------------------------------------------------------------
;		; マイカートの分身 ( 計算カート )
;		; 敵車の分身 ( 計算カート )
;--------------------------------------------------------------------
car_calc_BP	dw	mykart_state
		dw	check_mode_B
		dw	calc_B_main,calc_B_erase,calc_B_ret,calc_B_map
;- - - - - - - - - - - - - - - - - - - - -
enemycar_B
car_B		dw	0
car_calc_B	dw	check_mode_B
		dw	calc_B_main,calc_B_erase,calc_B_ret,calc_B_map
;- - - - - - - - - - - - - - - - - - - - -
calc_B_main	dw	project
		dw	attre_special,erase_car_B,setobj,kart_B
		dw	screen_B,jumpset_B,ret
;- - - - - - - - - - - - - - - - - - - - -
calc_B_erase	dw	dist_project,dist_screen
;- - - - - - - - - - - - - - - - - - - - -
calc_B_ret	dw	ret
;- - - - - - - - - - - - - - - - - - - - -
calc_B_map	dw	project_Z
		dw	attre_special,mapsprite_set_B
		dw	map_screen_B
;--------------------------------------------------------------------
;
;
;
;
;============== プレイヤーの状態分岐 =================================

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
playercar_A	DW	0				; screen A 1p
		DW	calc_check_p
		DW	car_calc_AP,car_special_A,car_goal_A
playercar_B	DW	0
		DW	calc_check_p
		DW	car_calc_BP,car_special_B,car_goal_B
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
car_Ab		DW	0				; screen A 2p
		DW	index_check
		DW	car_calc_A,car_special_A2
car_Ba		DW	0				; screen B 1p
		DW	index_check
		DW	car_calc_B,car_special_B2
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dmmy_data	DW	car_dmmy_A-2,car_dmmy_B-2
car_dmmy_A	DW	check_BG,disp_my_item,fire_check,ret
car_dmmy_B	DW	disp_my_item,fire_check,ret
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
;
;
;
;
;
;
;
;
;--------------------------------------------------------------------
;		バックミラー時の固定カート(２Ｐ）
;--------------------------------------------------------------------
car_special_B2	DW	mycar_B,ud_player,jumpset_B,option_B1
		DW	attre_special
		DW	fall_check,kart_B_mycar
;--------------------------------------------------------------------
;		バックミラー時の固定カート (１Ｐ）
;--------------------------------------------------------------------
car_special_A2	DW	check_BG
		DW	mycar_A,ud_player,jumpset_A,option_A1
		DW	attre_special
		DW	fall_check,kart_A_mycar
;- - - - - - - - - - - - - - - - - - - - -
fall_check	txy
		ldx	<register
		lda	<_fall,x
		bne	exit$
		ldx	!2,y
		jmp	(!0,x)
exit$		rts
;*********************************************************************
;	カートの状態チェック
;*********************************************************************
;--------------------------------------------------------------------
;	計算／固定　のマイカーチェック
;--------------------------------------------------------------------
index_check	TXY
		LDX	<screen_register
		BIT	<player_index,x
		BVS	calc_exit
		BVC	calc_skip
calc_check	TXY
		LDX	<screen_register
		LDA	<camera_control,X
		BPL	calc_exit
calc_skip	INY
		INY
calc_exit	LDX	!2,Y	
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - - -
; プレイヤー用分岐
;- - - - - - - - - - -
calc_check_p	TXY
		LDX	<screen_register
		LDA	<camera_control,X
		BPL	exit$
		LDX	<register
		LDA	<_flag,X
		AND	#ON_goal
		BNE	skip$
;- - - - - - - - - - -
		LDX	!4,Y		; 固定カート
		JMP	(!0,X)
skip$		LDX	!6,Y		; ゴールインカート
		JMP	(!0,X)
exit$		LDX	!2,Y		; 計算カート
		JMP	(!0,X)
;--------------------------------------------------------------------
;	存在／幽霊 の固定カートチェック	
;--------------------------------------------------------------------
erase_check	LDY	<screen_register
		LDA	!erase_kart,Y
		BEQ	exit$
		LDX	!dmmy_data,Y
exit$		INX
		INX
		JMP	(!0,X)
;--------------------------------------------------------------------
;	マップモード／通常モード
;--------------------------------------------------------------------
mapmode_check	txy
		ldx	<screen_register
		bit	<player_index,x
		bvc	skip$
		iny
		iny
skip$		ldx	2,y
		jmp	(!0,x)
;--------------------------------------------------------------------
;
;
;
;
;
;
;
;
;
;
;####################################################################
;		カート各種コントロール
;####################################################################
;*********************************************************************
;item		カートアイテムセット
;*********************************************************************
disp_my_item	PHX			;>>
		PEA	BC_00_01	;  >>
		PLB			;   <
		JSL	>Player_slot
		PLB			;  <
		PLX			;<<
		INX
		INX
		JMP	(!0,X)
;*********************************************************************
;attribute 	カートアトリビュートセット
;*********************************************************************
attre_special	PHX				;WW
		LDX	<register		;W
		LDA	<_muteki_timer,X
		BEQ	exit_attre
		LDA	<frame_counter
		AND	#07H
		ASL	A
		TAY
		LDA	!flash_attr,Y
exit_attre	EOR	<_attribute,X		;W
		STA	<attribute		;W
		PLX				;WW
		INX
		INX
		JMP	(!0,X)
flash_attr	DW	0000H,0200H,0400H,0600H
		DW	0800H,0A00H,0C00H,0E00H
;*********************************************************************
;ERASE_CAR	カートを消す
;*********************************************************************
;	上画面の計算カートを消す
;----------------------------------------------------------------------
erase_car_A	TXY
		LDX	<register
;- - - - - - - - - - - - - - - - 
		lda	<_fall,x
		bne	OFF_display$
		lda	<_obake_timer,x
		beq	skip$	

		cmp	#D_obake_nomal
		bcs	frash$
		cmp	#D_obake_timer-D_obake_nomal
		bcs	OFF_display$
;- - - - - - - - - - - - - - - - 
frash$		lda	<frame_counter
		lsr	a
		bcc	OFF_display$
;- - - - - - - - - - - - - - - - 
skip$
		lda	<event_index,x
		tax
		lda	!index_bit,x
		and	#1011100B		; 6,8,C
		bne	OFF_display$
;- - - - - - - - - - - - - - - - 
ON_display$	tyx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - 
OFF_display$	RTS
;----------------------------------------------------------------------
;	下画面の計算カートを消す
;----------------------------------------------------------------------
erase_car_B	TXY
		LDX	<register
;- - - - - - - - - - - - - - - - 
		lda	<_fall,x
		bne	OFF_display$
		lda	<_obake_timer,x
		beq	skip$	
		cmp	#D_obake_nomal
		bcs	frash$
		cmp	#D_obake_timer-D_obake_nomal
		bcs	OFF_display$
;- - - - - - - - - - - - - - - - 
frash$		lda	<frame_counter
		lsr	a
		bcc	OFF_display$
;- - - - - - - - - - - - - - - - 
skip$		
		LDA	<event_index,X
		TAX
		LDA	!index_bit,x
		and	#01011100B		; 4,6,8.C
		beq	ON_display$

;- - - - - - - - - - - - - - - - 
OFF_display$	TYA
		CLC
		ADC	#6
		TAX		
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - 
ON_display$	TYX
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - 

;----------------------------------------------------------------------
		glb	index_bit
;- - - - - - - - - - - - - - - - 

index_bit	dw	0001h,0002h,0004h,0008h
		dw	0010h,0020h,0040h,0080h
		dw	0100h,0200h,0400h,0800h
		dw	1000h,2000h,4000h,8000h


;*********************************************************************
;UPDOWN_PLAYER	カートをがたがたゆらす
;*********************************************************************
power_speed	equ	0200h
dart_speed	equ	0080h
;----------------------------------------------------------------------
ud_player	phx
		ldx	<register

		ldy	!map_type	; おばけマップは特殊処理
		beq	obake_entry

		ldy	<_vF,x
		lda	<bg_data,x
		cmp	#40h
		bcc	ud_exit
		cmp	#80h		; 
		bcs	ud_exit
		cpy	#dart_speed
		bcc	ud_exit
		and	#1fh		; いらない
		tay
;- - - - - - - - - - - - - - - - - - - - - - -
ud_gata		lda	!dart_select,y
		sta	<0		; ゆれプログラム
		lda	<frame_counter
		and	#0111B
		asl	a			;clc
		tay
		lda	(<0),y
ud_set		adc	<position_V
		sta	<position_V
ud_exit		plx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - 
obake_entry	
		lda	<_vF,x
		cmp	#100h
		bcc	exit$
		lda	<_obake_bound,x		; つぎめバウンド用タイマ
		beq	skip$
		inc	a
		cmp	#8
		bcc	skip_1$		
		lda	#0
skip_1$		sta	<_obake_bound,x
		asl	a
		tay
		lda	!bound_data,y
		bra	ud_set
;- - - - - - - - - - - - - - - - - - - - - - - 
skip$		lda	<bg_data,x
		cmp	#42h			; 42H JUMP BG
		beq	entry$
	;;	cmp	#52h
	;;	bne	exit$
		ldy	#0
		bra	ud_gata
;- - - - - - - - - - - - - - - - 
entry$		lda	#1			; JUMP entry
		sta	<_obake_bound,x		
exit$		plx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - 
bound_data	dw	00,00,-1,-2,-2,-1,00,00
;- - - - - - - - - - - - - - - - - - - - - - - 
dart_select	
		dw	speed_circuit	; サーキット／おばけ通常
		dw	gata_jump	; おばけつぎめ
		dw	dart_data2	; クッパ城
		dw	speed_circuit	; 草原
		dw	dart_data0	; 砂浜 1
		dw	dart_data0	; 砂浜 2
		dw	dart_data0	; ダート
		dw	no_gata		; 氷

		dw	dart_data2	; 橋
		dw	no_gata		; ジャリ
		dw	dart_data0	; 砂
		dw	dart_data2	; 岩
		dw	dart_data2	; 雪
		dw	dart_data2	; 草
		dw	dart_data1	; 水
		dw	dart_data1	; 泥
;- - - - - - - - - - - - - - - - - - - - - - - - 
dart_data1	dw	00,01,00,01
		dw	00,01,00,01
dart_data2	dw	00,-1,-1,-3
		dw	-1,-1,00,00
dart_data0	dw	00,-1,-2,-2
		dw	-1,00,-1,00
;- - - - - - - - - - - - - - - - - - - - - - - - 
no_gata		
speed_circuit	dw	00,-1,00,-1,00,-1,00,-1
gata_jump	dw	-3,-3,-3,-3,-3,-3,-3,-3
;*********************************************************************
;ONLY_KART	マイカーだけ表示する
;*********************************************************************
		GLB	Disp_mykart				
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
disp_mycarA	dw	mycar_A,setobj,kart_A,ret
disp_mycarB	dw	mycar_B,setobj,kart_B_mycar,ret
Disp_mykart	LDX	<register
		lda	<_dmprocess,x
		beq	entry$
		RTS
;- - - - - - - - - - - - - - - - - - - - - - 
entry$		SEP	#00100000B
		MEM8
		LDA	<attribute+1
		BNE	skip$
		LDA	<_attribute+1,X
		STA	<attribute+1
skip$		LDA	<_attribute+0,X
		STA	<attribute+0
		REP	#00100000B
		MEM16
;- - - - - - - - - - - - - - - - - - - - - - 
		LDX	#disp_mycarA
		LDY	<screen_register
		BEQ	exit$
		LDX	#disp_mycarB
exit$		JMP	(!0,X)
;*********************************************************************
;MYCAR POSITION	マイカートのポジション
;*********************************************************************
mycar_A		TXY
		LDX	<register
		LDA	#mycar_distance	; mycar distance
		STA	<size
		STA	<_distance_A,X
		LDA	#V_mycar
		STA	<position_V	;(V position)
		STA	<_posV_A,X
		STA	<_shadow_A,X
		LDA	#H_center
		STA	<position_H	;(H position)
		STA	<_posH_A,X
		TYX
		INX
		INX
		JMP	(!0,X)
;--------------------------------------------------------------------
mycar_B		TXY
		LDX	<register

		LDA	#mycar_distance	
		STA	<size
		STA	<_distance_B,X
		LDA	#V_mycar+70H
		STA	<position_V	;(V position)
		STA	<_posV_B,X
		STA	<_shadow_B,X
		STA	<_shadow_BX,X
		LDA	#H_center
		STA	<position_H	;(H position)
		STA	<_posH_B,X
		STA	<_posH_BX,X

		TYX
		INX
		INX
		JMP	(!0,X)








;####################################################################
;		カートザブコントロール
;####################################################################
;*********************************************************************
;		デモカートプログラム
;*********************************************************************
demo_kart	DW	0
		DW	move_object_XY
	  	DW	position_check,attre_special
		DW	subst,kart_A
;- - - - - - - - - - - - - - - - - - - - - - - 
position_check	PHX
		LDX	<register
		LDA	<_situationXH,X
		CLC
		ADC	#0FF00H
		STA	<position_H
		LDA	<_situationYH,X
		CLC
		ADC	#0FF00H
		STA	<position_V
;;
		LDA	<_demokart_size,X
		ASL	A
		TAY
		LDA	!zoom_size,Y
		STA	<_distance_A,X
		STA	<size
;;
		PLX
		INX
		INX
		JMP	(!0,X)
;********************************************************************
;MYCAR OPTION	マイカートのオプション(けむり、水）
;********************************************************************
pose_SEQ	DB	0,1,2,3,4,5,6,7
		DB	8,8,9,9
		DB	10,10,11,11
demo_pose	db	0
		db	0	; lost pose
		db	0	; lost pose
		db	11	; win pose
		db	0	; lost pose
		db	0	; 
		db	0
		db	0
;--------------------------------------------------------------------
option_A1	PHX


		LDX	<register
;;
		LDA	<_trans_ptn_A,X
		STA	!smorke_work

		and	#7fffh
		lsr	a

		CMP	#160h/2
		and	#000fh
		BCC	skip$	
		tay
		lda	!demo_pose,y
		and	#00ffh
skip$		tay

		LDA	!pose_SEQ,Y
		AND	#00ffh
		STA	!smorke_pose

		lda	<_sunder_timer,x
		beq	nomal$
		lda	#sand_select3
		bra	set$
nomal$		lda	!sand_camera
set$		sta	!sand_index

		LDY	#smorke_r0
		JSR	Option_anime
		BCC	no_option

	;;	lda	!player_r0+_sunder_timer
	;;	bne	no_option

		LDA	!player_r0+_flag	; B 画面
		AND	#ON_goal
		BEQ	set_option
		BNE	no_option
;--------------------------------------------------------------------
option_B1	PHX

		LDX	<register
		LDA	<_trans_ptn_B,X
		STA	!smorke_work		

		and	#7fffh
		lsr	a
		CMP	#160h/2
		and	#000fh
		BCC	skip$	
		tay
		lda	!demo_pose,y
		and	#00ffh
skip$		tay

		LDA	pose_SEQ,Y
		AND	#00ffh
		STA	!smorke_pose

		lda	<_sunder_timer,x
		beq	nomal$
		lda	#sand_select3
		bra	set$
nomal$		lda	!sand_camera
set$		sta	!sand_index


		LDY	#smorke_r1
		JSR	Option_anime		; [ SEQ SET ]
		BCC	no_option

	;;	lda	!player_r1+_sunder_timer
	;;	bne	no_option

		LDA	!player_r1+_flag	; B 画面
		AND	#ON_goal
		BNE	no_option
set_option	
		LDA	!smorke_work
		LSR	A
		AND	#04000H			; flip check
		EOR	<_anime_attr,X		; attribute
		TAX				; X = attr
		SEP	#00100001B
		MEM8
		LDA	<position_V
		SBC	#10H
		XBA
		LDA	<position_H
		REP	#00100000B
		MEM16
		TAY
		JSR	OAM_option		; [ OAM SET ]
;
;--------------------------------------------------------------------
no_option	ldy	<register
		ldx	<event_index,y
		jsr	(!event_check,x)
;--------------------------------------------------------------------
		PLX				; <<
		INX
		INX
		JMP	(!0,X)

;*********************************************************************
;	イベントによるフラグセット
;*********************************************************************
event_check	dw	nomal$
		dw	jump$
		dw	fall_obake$
		dw	fall_fire$
		dw	fall_water$
		dw	area_out$
		dw	nomal$
		dw	jugem_lift$
;--------------------------------------------------------------------
nomal$
		rts

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; 	落ちたら各種のフラグを落とす
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
area_out$
fall_obake$
fall_fire$
fall_water$
		tyx
		stz	<_kart_handle,x		; ハンドル OFF
						; 首振り OFF
						; ドリフト OFF
		lda	#((ON_kubifuri+ON_drift+ON_spin)^0ffffh)
		and	<kart_status,x
		sta	<kart_status,x
		stz	<spin_counter,x		; バナナスピン OFF
						; アイテム使用無効
						; 無敵 OFF
		lda	#4	
		cmp	<_muteki_timer,x
		bcs	exit$
		sta	<_muteki_timer,x
		lda	#4000h
		and	<kart_status,x
		sta	<kart_status,x	; status clear

exit$		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
jugem_lift$
jump$		tyx
		lda	#((ON_kubifuri+ON_drift+ON_spin)^0ffffh)
		and	<kart_status,x
		sta	<kart_status,x
		stz	<special_trigger,x
		rts
;*********************************************************************
;		SELECT OPTION SPRITE ANIMATION
;*********************************************************************
sand_00		DB	00,00,00,01,00,02,00,03,80H
		DW	sand_00
sand_01		DB	00,04,00,05,00,06,00,07,80H
		DW	sand_01
sand_02		DB	00,08,00,09,00,10,00,11,80H
		DW	sand_02
sand_03		DB	00,12,00,13,00,14,00,15,80H
		DW	sand_03
sand_04		DB	00,16,00,17,00,18,00,19,80H
		DW	sand_04
sand_05		DB	00,20,00,21,00,22,00,23,80H
		DW	sand_05
sand_06		DB	00,24,00,25,00,26,00,27,80H
		DW	sand_06
sand_07		DB	00,28,00,29,00,30,00,31,80H
		DW	sand_07
sand_08		DB	00,32,00,33,00,34,00,35,80H
		DW	sand_08
sand_09		DB	00,36,00,37,00,38,00,39,80H
		DW	sand_09
sand_10		DB	00,40,00,41,00,42,00,43,80H
		DW	sand_10
sand_11		DB	00,44,00,45,00,46,00,47,80H
		DW	sand_11

sand_m0		db	00,48,00,49,00,50,00,51,80H
		dw	sand_m0
sand_m1		db	00,52,00,53,00,54,00,55,80H
		dw	sand_m1
sand_m2		db	00,56,00,57,00,58,00,59,80H
		dw	sand_m2

;--------------------------------------------------------------------
tm		EQU	02
kusa_00		DB	tm,00,tm+1,05,tm,02,tm+1,03,80H
		DW	kusa_00
kusa_01		DB	tm,04,tm+1,05,tm,06,tm+1,07,80H
		DW	kusa_01
kusa_02		DB	tm,08,tm+1,09,tm,10,tm+1,11,80H
		DW	kusa_02
kusa_03		DB	tm,12,tm+1,13,tm,14,tm+1,15,80H
		DW	kusa_03
kusa_04		DB	tm,16,tm+1,17,tm,18,tm+1,19,80H
		DW	kusa_04
kusa_05		DB	tm,20,tm+1,21,tm,22,tm+1,23,80H
		DW	kusa_05
kusa_06		DB	tm,24,tm+1,25,tm,26,tm+1,27,80H
		DW	kusa_06
kusa_07		DB	tm,28,tm+1,29,tm,30,tm+1,31,80H
		DW	kusa_07
kusa_08		DB	tm,32,tm+1,33,tm,34,tm+1,35,80H
		DW	kusa_08
kusa_09		DB	tm,36,tm+1,37,tm,38,tm+1,39,80H
		DW	kusa_09
kusa_10		DB	tm,40,tm+1,41,tm,42,tm+1,43,80H
		DW	kusa_10
kusa_11		DB	tm,40,tm+1,45,tm,46,tm+1,47,80H
		DW	kusa_11
;--------------------------------------------------------------------
dr_00		DB	00,00
		DB	00,01
		DB	00,02
		DB	02,03
		DB	02,04
		DB	04,05
		DB	04,06
		DB	06,07
		DB	080H
		DW	dr_00
;--------------------------------------------------------------------
su_00
		DB	01,0FFH

		DB	00,00
		DB	00,01
		DB	00,02
		DB	02,03
		DB	02,04
		DB	04,05
		DB	04,06
		DB	06,07
;
		DB	00,00
		DB	00,01
		DB	00,02
		DB	02,03
		DB	02,04
		DB	04,05
		DB	04,06
		DB	06,07
su_loop		DB	16,0FFH
		DB	80H
		DW	su_loop
;--------------------------------------------------------------------
kusa_stop_00	DB	08,30h
		DB	80h
		DW	kusa_stop_00
;- - - - - - - - - - - - - - - - - - - - - - 
stop_00		DB	0fh,06,0fh,07,80h
		DW	stop_00
stop_m0		DB	0fh,08,0fh,09,80h
		DW	stop_m0
;--------------------------------------------------------------------
de_00		DB	02,00
		DB	00,01
dd_special
		DB	04,02
		DB	00,01
		DB	02,03
		DB	00,01
		DB	01,04
		DB	00,01
		DB	04,05
		DB	16,01
de_loop	
	;;	DB	16,0FFH
		DB	16,05
		DB	16,01
		DB	80H
		DW	de_loop

sea_jump_00
		DB	02,02
		DB	00,01
		DB	01,03
		DB	00,01

sea_loop	DB	16,0FFH
		DB	80H
		DW	sea_loop



;*********************************************************************
;		DW	*ROMaddress,SEQaddress,attribute
;--------------------------------------------------------------------
code_sand	EQU	0
code_water	EQU	1*6
code_deth	EQU	2*6
code_kusa	EQU	3*6
code_spin_1	EQU	4*6
code_spin_2	EQU	5*6
code_drift_1	EQU	6*6
code_drift_2	EQU	7*6	
code_sea_jump	equ	8*6
code_water_stop	equ	9*6		; ISPK 展開時 Scene File 注意 !!
code_kusa_stop	equ	10*6
code_drift_mini	equ	11*6
;--------------------------------------------------------------------
sand_select	DW	drift_data,sd_data_X,0100H		;0 通常時もドリフト
		DW	water_data,sd_data_X,0000H		;1
		DW	deth_data,de_data,0000H			;2
		DW	kusa_data,ku_data,0000H			;3
		DW	spin_data,su_data,0100H			;4 momal spin
		DW	spin_data,su_data,0100H+0400H		;5 kusa spin
		DW	drift_data,sd_data_X,0100H+0400H	;6 nomal drift
		DW	drift_data,sd_data_X,0100H		;7 kusa drift
		DW	deth_data,sea_jump_data,0000H		;8
		DW	deth_data,stop_data,0000H		;9  水ストップ
		DW	kusa_data,kusa_stop_data,0000H		;10 草ストップ

sand_select2	DW	sand_data,sd_data,0100H	;0 通常時もドリフト
		DW	water_data,demo_water,0000H	;1
		DW	deth_data,de_data,0000H		;2
		DW	kusa_data,ku_data,0000H		;3
		DW	spin_data,su_data,0100H		;4 momal spin
		DW	spin_data,su_data,0100H+0400H	;5 kusa spin
		DW	sand_data,sd_data,0100H+0400H	;6 nomal drift
		DW	sand_data,sd_data,0100H	;7 kusa drift
		DW	deth_data,sea_jump_data,0000H	;8
		DW	deth_data,stop_data,0000H	;9  水ストップ
		DW	kusa_data,kusa_stop_data,0000H	;10 草ストップ

sand_select3	DW	sand_data,mini_sand,0100H	;0 通常時もドリフト
		DW	water_data,sd_data_X,0000H	;1
		DW	deth_data,de_data,0000H		;2
		DW	kusa_data,ku_data,0000H		;3
		DW	spin_data,su_data,0100H		;4 momal spin
		DW	spin_data,su_data,0100H+0400H	;5 kusa spin
		DW	sand_data,mini_sand,0100H+0400H	;6 nomal drift
		DW	sand_data,mini_sand,0100H	;7 kusa drift
		DW	deth_data,sea_jump_data,0000H	;8
		DW	deth_data,stop_data2,0000H	;9  水ストップ
		DW	kusa_data,kusa_stop_data,0000H	;10 草ストップ

;--------------------------------------------------------------------
;どの方向をむいても同じＳＥＱ
;- - - - - - - - - - - - - - - - -
stop_data	DW	stop_00
stop_data2	DW	stop_m0
;- - - - - - - - - - - - - - - - -
;方向別のＳＥＱ
;- - - - - - - - - - - - - - - - -
mini_sand	
		dw	sand_m0,sand_m0,sand_m1,sand_m1
		dw	sand_m2,sand_m2,sand_m2,sand_m2
		dw	sand_m2,sand_m2,sand_m2,sand_m2

demo_water	DW	sand_00,sand_00,sand_07,sand_07
		DW	sand_07,sand_07,sand_07,sand_07
		DW	sand_07,sand_09,sand_10,sand_11

sd_data_X
		DW	sand_00,sand_01,sand_02,sand_03
		DW	sand_03,sand_03,sand_06,sand_07
		DW	sand_08,sand_09,sand_10,sand_11

sd_data		
		DW	sand_00,sand_01,sand_02,sand_03
		DW	sand_04,sand_05,sand_06,sand_07
		DW	sand_08,sand_09,sand_10,sand_11

ku_data		DW	kusa_00,kusa_01,kusa_02,kusa_03
		DW	kusa_04,kusa_05,kusa_06,kusa_07
		DW	kusa_08,kusa_09,kusa_10,kusa_11

de_data		DW	de_00
dr_data		DW	dr_00
su_data		DW	su_00
sea_jump_data	DW	sea_jump_00
kusa_stop_data	DW	kusa_stop_00
;--------------------------------------------------------------------
;AN_0 ... 煙ほかオプションなし
;AN_1 ... けむり
;AN_2 ... 波打ち際
;AN_3 ... 水ポチャ
;AN_4 ... 草けむり
;AN_5 ... 通常状態（ドリフト／スピン）
;AN_6 ...
;AN_7 ... おばけ落ち
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
BGsmorke
	DW	AN_5,AN_5,AN_5,AN_5,AN_5,AN_5,AN_5,AN_5	;(00/80h)
	DW 	AN_5,AN_5,AN_5,AN_5,AN_5,AN_5,AN_5,AN_5	;(10H)
	DW 	AN_7,AN_3,AN_3,AN_0,AN_0,AN_0,AN_0,AN_0	;(20H)y
	DW 	AN_0,AN_0,AN_0,AN_0,AN_0,AN_0,AN_0,AN_0	;(30H)
	DW 	AN_5,AN_5,AN_5,AN_5,AN_5,AN_5,AN_5,AN_5	;(40H)
	DW 	AN_5,AN_5,AN_1,AN_1,AN_1,AN_4,AN_2,AN_2 ;(50H)
;---------------------------------------------------------------------
;--------------------------------------------------------------------
;===== nomal =========		通常状態
;--------------------------------------------------------------------
AN_5
		tyx
		lda	<_situationZL+1,x
		bne	jump$		
		stz	<_fall,x
;- - - - - - - - - - - - - - - - - - - - - - - スピンチェック - - - -
		jsr	check_spin
		bcs	entry_spin
;- - - - - - - - - - - - - - - - - - - - - - - ドリフトチェック - - - 
		bit	#ON_drift	
		bne	skip$
jump$		jmp	AN_0_entry	
skip$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;====== nomal/sand drift =======	通常でのドリフト
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		jsr	test_drift		;ドリフトカートゆれ！
;- - - - - - - - - - - - - - - - - - - - - - -
		ldy	#code_drift_1
		bit	!spin_attribute-1
		bpl	exit$
		ldy	#code_drift_2
exit$		rts

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;====== nomal/sand spin =======		砂地でのドリフト／スピン
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
entry_spin	ldy	#code_spin_1		;=== spin anime =====
		bit	!spin_attribute-1
		bpl	spin_skip
sand_spin	ldy	#code_spin_2
spin_skip	lda	<kart_status,x		;スピン方向チェック
		and	#SIDE_spin
		lsr	a
		xba
		sta	!smorke_work		;
		stz	!smorke_pose		; pose = 0
		rts
;--------------------------------------------------------------------
;===== smorke ======		けむり
;--------------------------------------------------------------------
AN_1		tyx

;- - - - - - - - - - - - - - - - - - - - - - - スピンチェック - - - -
		jsr	check_spin
		bcs	sand_spin
;- - - - - - - - - - - - - - - - - - - - - - - ドリフトチェック - - - 
		ldy	#code_drift_2	
		bit	#ON_drift	
		bne	AN_1_exit	
;- - - - - - - -
		lda	<_vF,x			; speed check
		cmp	#080H			;
		bcs	skip$
		jmp	AN_0_entry
;- - - - - - - -
skip$		ldy	#code_sand		; 砂煙
AN_1_exit	rts
;--------------------------------------------------------------------
;===== water =========		水際のパチャパチャ
;--------------------------------------------------------------------
AN_2		tyx
		stz	<_fall,x
		inc	<position_V
		inc	<position_V

		lda	<_vF,x
		cmp	#0020h
		bcs	water$
		jsr	check_spin
		bcc	skip$
water$		ldy	#code_water
		rts
skip$		stz	!smorke_work
		stz	!smorke_pose		; ポーズクリア
		ldy	#code_water_stop
exit$		rts
;--------------------------------------------------------------------
;===== kusa =========		草けむり
;--------------------------------------------------------------------
AN_4		tyx
		jsr	check_spin
		bcs	skip$
		lda	<_vF,x			; speed check
		cmp	#010H
		bcs	skip$
		ldy	#code_kusa_stop
		stz	!smorke_pose		; ポーズクリア
		rts
skip$		ldy	#code_kusa
		rts
;--------------------------------------------------------------------
;===== tinbotsu ======		おばけ落ち
;--------------------------------------------------------------------
AN_7		tyx
		inc	<_fall,x

		lda	!goal_kabe
		sta	>keycode_camera

		jmp	fall_demo
;--------------------------------------------------------------------
;===== tinbotsu ======		水に沈没
;--------------------------------------------------------------------
AN_3		tyx
		lda	<event_index,x
		ldy	!map_type
		cpy	#0ch			; クッパ城？
		bne	entry$			; no.
		cmp	#06h
		bne	AN_0_entry		; オプション消去

entry$		cmp	#3			; 0/2 ならば OK!
		bcc	skip$

		lda	!goal_kabe		; ミス セット
		sta	>keycode_camera

skip$		stz	!smorke_pose		; pose reset
		ldy	#code_deth		; 水ポチャアニメ
		rts
;--------------------------------------------------------------------
;===== tinbotsu ======		水切りジャンプ
;--------------------------------------------------------------------
sea_jump	tyx
		ldy	#code_sea_jump
		stz	!smorke_pose
		rts
;--------------------------------------------------------------------
;	煙ほかオプション無し （ 消去 ! ）
;--------------------------------------------------------------------
AN_0		tyx				;
AN_0_entry	pla				; << del return value
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
no_animation					; x = player register
		stz	<_fall,x		;
no_anime1	plx				;<< x = smorke register
no_anime2	stz	<_anime_start,X		;(ポインタリセット）
		stz	<_anime_register,X	;
		clc				;(オプション消去）
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;
;
;
;
;- - - - - - - - - - - - - - - - - - - - -
;	スピンチェック 
;- - - - - - - - - - - - - - - - - - - - -
check_spin	lda	<spin_counter,x	
		cmp	#400H
		bcs	on$
		lda	<kart_status,x
		bit	#ON_spin
		bne	on$
		clc
		rts
on$		sec
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;	ドリフトによるカートのゆれ！
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
test_drift	lda	<frame_counter
		and	#0111B
		asl	a			;clc
		tax
		lda	!test_data,x
		adc	<position_H
		sta	<position_H
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
test_data	dw	0,1,2,1
		dw	0,-1,-2,-1
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;	おばけ落ちによるカートの座標移動！
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
fall_demo	lda	<_fall,x
		cmp	#10h
		bcc	fall$
		lda	#0fh
fall$		asl	a			
		asl	a
		adc	<position_V
		sta	<position_V
		pla				;<<
		jmp	no_anime1
;*********************************************************************
;OPTION_ANIMATION オプションのアニメ
;*********************************************************************
moving_data	dw	0	; nomal
		dw	0	; jump
		dw	20h	; おばけおち
		dw	0ffffh	; マグマおち
		dw	24h	; 水おち
		dw	0	; 場外おち
		dw	0	; move by force
		dw	0	; つりさげ中
;- - - - - - - - - - - - - - - - - - - - - - -
Option_anime
		PHY				;>> smorke register
;;
;- - - - - - - - - - - - - - - - - - - - - - -
		LDA	<_situationZL+1,X	; Z check
		BEQ	skip$
;- - - - - - - - - - - - - - - - - - - - - - -
		cmp	#0200h
		bcs	clear$
		lda	<kart_status,x
		and	#ON_sea			; 水しぶき？
		beq	skip$
		txy
		jsr	sea_jump
		plx

		LDA	<_anime_pointer,X
		CMP	#sea_loop		;
		BCC	disp$

		phx
clear$	
		lda	#(ON_sea^0ffffh)	; フラグクリア
		and	<kart_status,x
		sta	<kart_status,x
		ldx	<register
		jmp	no_animation		; オプションクリア
;- - - - - - - - - - - - - - - - - - - - - - -
skip$
		lda	#(ON_sea^0ffffh)	; フラグクリア
		and	<kart_status,x
		sta	<kart_status,x
;- - - - - - - - - - - - - - - - - - - - - - -
; ＢＧチエックより
; カートの状態を優先
		ldy	<event_index,x		; 状態チェック
		lda	!moving_data,y		; BGcheck に変更
		beq	sos$
		bmi	yougan$
		cmp	#20h			; おばけおち？
		beq	skip2$
		ldy	<_situationZL+1,x	; 高さチェック
		beq	skip2$
		bne	skip1$
;- - - - - - - - - - - - - - - - - - - - - - -
yougan$		ldy	<_situationZL+1,x	; 溶岩チェック !!
		bne	jumper$
		lda	#24h
		bra	skip2$
;- - - - - - - - - - - - - - - - - - - - - - -
sos$		ldy	<_situationZL+1,x	; 溶岩チェック !!
		beq	skip1$
jumper$		lda	#40h
		bra	skip2$
;- - - - - - - - - - - - - - - - - - - - - - -
skip1$		lda	<bg_data,x	; BG check
skip2$		and	#01111110B
		txy				; y = kart register
		tax
		jsr	(!BGsmorke,x)

;- - - - - - - - - - - - - - - - - - - - - - -

		PLX				;<< smorke register
;;
disp$		TYA
		CLC
		ADC	!sand_index
		TAY

		LDA	!0,y
		STA	<_anime_register,X	; ROM address
		LDA	#07EH
		STA	<_anime_bank,X		; ROM bank
		LDA	!2,y
		STA	<work			; SEQ pointer
		LDA	!4,y
		STA	<_anime_attr,X		; attribute (bank)
;;
		LDA	!smorke_pose
		ASL	A
		TAY
		LDA	(<work),Y		;W
		BNE	goto$
;;						; 正面向きに近いとき
		stz	<_anime_start,X		;(ポインタリセット）
		stz	<_anime_register,X	;
		clc				;(オプション消去）
		rts
;;
goto$		DEC 	A			;W -2
		DEC	A			;W
		CMP	<_anime_start,X
		BEQ	move_anime
		STA	<_anime_start,X		; entry
		STA	<_anime_pointer,X	;W pointer reset!
		STZ	<_anime_timer,X		;W timer reset!
;*********************************************************************
move_anime	LDY	<_anime_pointer,X	;W <- SEQ pointer
		DEC	<_anime_timer,X		;W	timer>0 ?
		BPL	skip_move		;	yes -> anime
;------------------------------------------------
		INY
		INY
		STY	<_anime_pointer,X	;W ( pointer inc )
;------------------------------------------------
		LDA	!0,Y			;W(B)
		BIT	#0080H			;W(B)
		BEQ	set_character		;
		LDA	!1,Y			;W
		TAY				;WW Y=new pointer
		STY	<_anime_pointer,X	;
		LDA	!0,Y			;W(B)
;------------------------------------------------
set_character	AND	#00FFH			;W
		STA	<_anime_timer,X		;W(B) frame timer
;------------------------------------------------
skip_move	LDA	!1,Y			;W(OBJ block number)
		AND	#00FFH			;W
		CMP	#00FFH
		BEQ	pause_anime
		ASL	A			;W(CLC)
		ADC	<_anime_register,X	;W data register
		STA	<work+0			;W
		LDA	<_anime_bank,X		;W(B)
		STA	<work+2			;W
		LDA	[<work]			;W
		ADC	<_anime_register,X	;W
		STA	<block_pointer		;W data pointer
		SEC				; << FLAG ON >>
		RTS
;-------------------------------------------------------------------
pause_anime	CLC
		RTS
;
;
;
;
;*********************************************************************
;		接触ＯＢＪの表示
;*********************************************************************
;
;- - - - - - - - - - - - - - - - - - - - - - - - - 
;風船のわれる音チェック 	(mp4/6)
;--------------------------------------------------------------------
crash_stop	STZ	<_crash_timer,X		; flag clear
		PLX
		INX
		INX
		JMP	(!0,X)
;--------------------------------------------------------------------
disp_crash	PHX
		LDX	<register
		LDA	<_crash_timer,X
		BEQ	crash_clear
		BMI	crash_reset
		DEC	A
		STA	<_crash_timer,X		; flag
		BRA	disp_skip
;---------------------------------------------- ; position initial --
crash_reset
		LDY	<screen_register
		BIT	#04000H			; 
		BEQ	obj_crash
bg_crash
		INY
		INY
		INY
		INY
		and	#03fffh
		sta	<_crash_timer,x
		bra	skip_crash

obj_crash	AND	#03FFFH
		STA	<_crash_timer,X
;	
skip_crash	TXA				; A=register
		TYX				; X=screen register
		JSR	(!set_position,X)
		REP	#00100001B
		MEM16
		SBC	#0100FH			; CLC
		STA	<_crash_position,X
;---------------------------------------------- ; set display --------
disp_skip	LDA	<_crash_position,X
		STA	<work
		LDA	<_crash_timer,X
		ASL	A
		TAY
		LDX	<sprite_count

		LDA	!posdata_0,Y
		CLC
		ADC	<work
		STA	<sprite_H+0,X
		LDA	!posdata_1,Y
		CLC
		ADC	<work
		STA	<sprite_H+4,X
		LDA	!posdata_2,Y
		CLC
		ADC	<work
		STA	<sprite_H+8,X

		LDA	!chardata_0,Y
		STA	<sprite_C+0,X
		LDA	!chardata_1,Y
		STA	<sprite_C+4,X
		LDA	!chardata_2,Y
		STA	<sprite_C+8,X

		LDA	#0E0E0H
		STA	<sprite_H+12,X
		TXA
		CLC
		ADC	#10H
		STA	<sprite_count
		TXA			; sub control
		LSR	A
		LSR	A
		LSR	A
		LSR	A
		CLC
		ADC	<screen_sub
		TAX
		LDA	#0AAH
		STA	<0,X		; sub set
crash_clear	PLX
		INX
		INX
		JMP	(!0,X)
;---------------------------------------------------------------------
posdata_0	DW	00108H,00008H,0FF08H,0FE08H
	;;;;	DW	0FC08H,0FA08H,00008H,00008H
		DW	00008H,00008H,00008H,00008H

posdata_1	DW	00800H,00801H,00802H,00802H
		DW	00603H,00403H,08000H,08000H
posdata_2	DW	00810H,0080fH,0080eH,0080eH
		DW	0060dH,0040dH,08000H,08000H
chardata_0	DW	06D6AH,02D6AH,06D6AH,02D6AH
	;;;;	DW	06D6AH,02D6AH,06D68H,02D68H
		DW	06C2EH,02C2EH,06C2EH,02C2EH
chardata_2
chardata_1	DW	06D6CH,02D6CH,06D6CH,02D6CH
		DW	06D6CH,02D6CH,00044H,00044H
;---------------------------------------------------------------------
set_position	DW	crash_objA,crash_objB
		DW	crash_bgA,crash_bgB
;---------------------------------------------------------------------
left_data	EQU	6673H
right_data	EQU	668DH		
crash_hit_side	DW	left_hit_X	; X refrect
		DW	right_hit_X
		DW	left_hit_Y	; Y refrect
		DW	right_hit_Y
;---------------------------------------------------------------------
left_hit_Y	TYX			; vY +
		BIT	<_velocityX,X	; vX check
		BPL	left_hit
		BMI	right_hit
right_hit_Y	TYX			; vY -	
		BIT	<_velocityX,X	; vX check
		BPL	right_hit
		BMI	left_hit
left_hit_X	TYX			; vX +
		BIT	<_velocityY,X	; vY check
		BPL	right_hit
		BMI	left_hit
right_hit_X	TYX			; vX -
		BIT	<_velocityY,X	; vY check
		BMI	right_hit
left_hit	LDA	#left_data
		RTS
right_hit	LDA	#right_data
		RTS
;--------------------------------------------------------------------
crash_bgA	TAY
		LDX	<_crash_side,Y
		JMP	(!crash_hit_side,X)
crash_bgB	TAY
		LDX	<_crash_side,Y
		JSR	(!crash_hit_side,X)
		CLC
		ADC	#7000H
		RTS
crash_objA	
		TAX
;
;
		LDY	<_crash_index,X
		SEP	#00100000B
		MEM8
		LDA	<_posV_A,X
		ADC	!_posV_A,Y
		ROR	A
		XBA
		LDA	<_posH_A,X
		ADC	!_posH_A,Y
		ROR	A
		RTS
crash_objB	TAX
;
;
		LDY	<_crash_index,X
		SEP	#00100000B
		MEM8
		LDA	<_posV_B,X
		ADC	!_posV_B,Y
		ROR	A
		XBA
		LDA	<_posH_B,X
		ADC	!_posH_B,Y
		ROR	A
		RTS
		mem16
		idx16
;
;*********************************************************************
;CHECK BACK 	振り向きＯＢＪの表示
;*********************************************************************
;
check_back_A	
		PHX
		lda	<game_status
		cmp	#06h		; バトルモード ？
		beq	no_trigger_A2
		LDX	<register

		LDA	<_vF,x
		BEQ	no_trigger_A2
		LDY	<_backward_A,X
		CPY	#A_root
		BEQ	no_trigger_A
;
		LDA	<_kart_pose,X	
		BMI	no_trigger_A

		lda	<_status,x
		and	#03000h		; バトルの風船は無視
		bne	no_trigger_A

		LDA	!_posV_A,Y	; check screen V pos
		ADC	#0C0H		; FF40H -  FF70H
		CMP	#060H
		BCS	no_trigger_A

		LDA	!_posH_A,Y		; select pose
		CMP	#0FF00H
		BCC	no_trigger_A
		CMP	#0FF80H
		LDA	#0A000H			; right pose
		BCS	set_trigger_A
		LDA	#0C000H			; left pose
set_trigger_A	ORA	<_kart_pose,X
		STA	<_kart_pose,X
no_trigger_A	
;;
;;
		LDY	<_forward_A,X
		CPY	#A_root			; end ?
		BEQ	no_trigger_A2		; yes
		TYX
		LDA	<_status,X		; kart ?
		BMI	no_trigger_A2		; no

		LDA	<_kart_pose,x
		BMI	no_trigger_A2
		LDA	<_ptn_A,x
		AND	#7fffh
		BNE	no_trigger_A2

		LDA	<_posH_A,X		; select pose
		CMP	#0FF00H
		BCC	no_trigger_A2
		CMP	#0FF80H
		LDA	#0C000H			; left pose
		BCS	set_trigger_A2
		LDA	#0A000H			; right pose
set_trigger_A2	ORA	<_kart_pose,X
		STA	<_kart_pose,X
no_trigger_A2	PLX
		INX
		INX
		JMP	(!0,X)
;---------------------------------------------------------------------
check_back_B	PHX
		lda	<game_status
		cmp	#06h		; バトルモード ？
		beq	no_trigger_B2
		LDX	<register
;
		LDA	<_vF,x
		BEQ	no_trigger_B2
		LDY	<_backward_B,X
		CPY	#B_root
		BEQ	no_trigger_B
;
		LDA	<_kart_pose,X
		BMI	no_trigger_B

		lda	<_status,x
		and	#03000h		; バトルの風船は無視
		bne	no_trigger_B

		LDA	!_posV_B,Y		; check screen V pos
		ADC	#0C0H-070H		
		CMP	#060H
		BCS	no_trigger_B
;;
		LDA	!_posH_B,Y		; select pose
		BPL	no_trigger_A
		CMP	#0FF00H
		BCC	no_trigger_B
		CMP	#0FF80H	
		LDA	#0A000H			; right pose
		BCS	set_trigger_B
		LDA	#0C000H			; left pose
set_trigger_B	ORA	<_kart_pose,X
		STA	<_kart_pose,X
no_trigger_B	
;;
;;
		LDY	<_forward_B,X
		CPY	#B_root			; end ?
		BEQ	no_trigger_B2		; yes

		TYX
		LDA	<_status,X		; kart ?
		BMI	no_trigger_B2		; no
		LDA	<_ptn_B,x
		AND	#7fffh
		BNE	no_trigger_B2

entry_B		LDA	<_posH_B,X		; select pose
		CMP	#0FF00H
		BCC	no_trigger_B2
		CMP	#0FF80H
		LDA	#0C000H			; left pose
		BCS	set_trigger_B2
		LDA	#0A000H			; right pose
set_trigger_B2	ORA	<_kart_pose,X
		STA	<_kart_pose,X
no_trigger_B2	PLX
		INX
		INX
		JMP	(!0,X)
;====================================================================
;*********************************************************************
;		Stop_trans ( kart trans stop )
;		カートキャラ転送のストップ
;*********************************************************************
;- - - - - - - - - - - - - - - - - - - - 
Stop_trans	LDY	#0
loop$		LDX	!rank_index,Y
		BEQ	exit$
		LDA	<screen_register
		BNE	skip_1$
	;;	CPX	<camera_index+0
	;;	BEQ	skip_2$
		LDA	#140H		; min patern
		STA	<_ptn_A,X
		BRA	skip_2$	
skip_1$	
	;;	CPX	<camera_index+2
	;;	BEQ	skip_2$
		LDA	#140H		; min patern
		STA	<_ptn_B,X
skip_2$		INY
		INY
		BRA	loop$
exit$		RTS
;*********************************************************************
;		カート表示処理分岐
;*********************************************************************
mycar_subst	txa
		ldx	<register
		clc
		adc	<_dmindex,x	; 0
		tay
		ldx	!2,y
		jmp	(!0,x)
;- - - - - - - - - - - - - - - - - - - - -
process_subst	txa
		ldx	<register
		clc
		adc	<_dmprocess,x
		tay
		ldx	!2,y
		jmp	(!0,x)
;*********************************************************************
;	ブロック BG に 衝突したとき
;*********************************************************************
bound_sounds	dw	SE_my_block
		dw	SE_my_wood
		dw	SE_my_ice
		dw	SE_my_ice
;- - - - - - - - - - - - - - - - - - - 
mycar_sound_B
mycar_sound_A	phx
		ldx	<register
		ldy	<screen_register
		bit	<_BGcheck_flag,x
		bpl	skip_1$
;- - - - - - - - - - - - - - - - - - - 	; マイカーがＢＧに当たった瞬間

		lda	<bg_data,x
		and	#07h
		tax
		lda	!bound_sounds,x
		jsl	>TRIGGER_SOUND
		bra	exit$

skip_1$
;- - - - - - - - - - - - - - - - - - - 	; マイカーがスピンした瞬間
		lda	<_effect_flag,x
		bit	#effect_spin_c
		beq	skip_2$
		and	#(effect_spin_c^0ffffh)
		sta	<_effect_flag,x
		lda	#4
		sta	!coin_flag,y
		bra	exit$
;- - - - - - - - - - - - - - - - - - -  ; マイカーが衝突(カート同士）
skip_2$
		bit	#effect_mycrash
		beq	exit$
		and	#(effect_mycrash^0ffffh)
		sta	<_effect_flag,x
;- - - - - - - - - - - - - - - - - - -
;
;
;- - - - - - - - - - - - - - - - - - -
race$		lda	<_crash_index,x
		cmp	#1200h
		bcc	VS$
		jsl	>sound_my_enemy	; マイカーと敵
		bra	skip_3$
VS$		jsl	>sound_VScrash	; マイカー同士
skip_3$
;- - - - - - - - - - - - - - - - - - -
		lda	<_muteki_timer,x
		bne	exit$
		lda	!player_coin,y
		beq	exit$
		lda	<_dmindex,x
		bne	exit$

		lda	<_crash_index,x
		tax
		lda	<_HP,x
		and	#010h		; = have_big ( 相手はチビ？ )
		beq	exit$
;- - - - - - - - - - - - - - - - - - - - - -
coin_down$	lda	!coin_flag+0,y	; コインの落下
		cmp	#18
		beq	exit$
		lda	#16
		sta	!coin_flag+0,y
;- - - - - - - - - - - - - - - - - - - - - -
exit$		plx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;
;
;
;
;
;
;###################################################################
;###################################################################



;###################################################################
;###################################################################
;
;
;
;********************************************************************
;	ドッスンつぶされデモルーチン
;********************************************************************
zusin_A		dw	process_subst
		dw	zusin_A1,zusin_A2,zusin_A3,zusin_A4
		dw	nomal_A
zusin_B		dw	process_subst
		dw	zusin_B1,zusin_B2,zusin_B3,zusin_B4
		dw	nomal_B
;- - - - - - - - - - - - - - - - - - 
zusin_A1	dw	zusin_kiss_A
		dw	dm_posset_A
		dw	attre_special,setobj,kart_zusin,Sprite_poo
zusin_A2	dw	kiss_move
		dw	dm_posset_A
		dw	attre_special,setobj,kart_zusin,Sprite_poo
zusin_A3	dw	dm_anime,dm_posmove,dm_posset_A
		dw	kiss_check
		dw	attre_special,setobj,kart_zusin,Sprite_poo
zusin_A4	dw	return_player
		dw	dm_anime
		dw	dm_posset_A
		dw	attre_special,subst,kart_zusin
;- - - - - - - - - - - - - - - - - - 
zusin_B1	dw	zusin_kiss_B
		dw	dm_posset_B
		dw	attre_special,setobj,kart_zusin,Sprite_poo
zusin_B2	dw	kiss_move
		dw	dm_posset_B
		dw	attre_special,setobj,kart_zusin,Sprite_poo
zusin_B3	dw	dm_anime,dm_posmove,dm_posset_B
		dw	kiss_check
		dw	attre_special,setobj,kart_zusin,Sprite_poo
zusin_B4	dw	return_player
		dw	dm_anime
		dw	dm_posset_B
		dw	attre_special,subst,kart_zusin
;- - - - - - - - - - - - - - - - - - 

;********************************************************************
;	デモ各種プロセス
;********************************************************************
;- - - - - - - - - - - - - - - - - -
; (1) キャラクター転送
;- - - - - - - - - - - - - - - - - -
stop_offset	equ	06600h
;- - - - - - - - - - - - - - - - - -
zusin_kiss_B	phx			; >>
		ldx	<register
;
		lda	#16ah		; ポーズは転送した？
		ldy	<_sunder_timer,x
		beq	skip$		
		inc	a
		inc	a
;
skip$		sta	<_ptn_B,x	; 転送パターンセット
		cmp	<_trans_ptn_B,x
		beq	kiss_next
		bne	kiss_exit
;- - - - - - - - - - - - - - - - - -
zusin_kiss_A	phx
		ldx	<register
;
		lda	#16ah		; ポーズは転送した？
		ldy	<_sunder_timer,x
		beq	skip$		
		inc	a
		inc	a
;
skip$		sta	<_ptn_A,x		; 転送パターンセット
		cmp	<_trans_ptn_A,x
		bne	kiss_exit
kiss_next
		lda	<_poo_status,x
		and	#7fffh
		sta	<_poo_status,x

		lda	#8			; nomal patern
		sta	<_dmC,x			; character pointer	
		lda	#stop_offset
		sta	<_dmsY,x		; Y position
		stz	<_dmvY,x		; Y velocity
		lda	#08000h
		sta	<_dmsX,x		; X position
		stz	<_dmvX,x		; X velocity
		inc	<_dmprocess,x
		inc	<_dmprocess,x
		lda	#40			; 40 frame wait
		sta	<_dmtimer,x
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		lda	<_sunder_timer,x
		bmi	skip$
		beq	skip$
		lda	#30			; 30 frane wait
		sta	<_sunder_timer,x
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
skip$		plx
		INX
		INX
		JMP	(!0,X)

kiss_exit	plx			; <<
		rts
;- - - - - - - - - - - - - - - - - -
; (2) つぶされウェイト
;- - - - - - - - - - - - - - - - - -
		ext	speed_vxvy_BK
;- - - - - - - - - - - - - - - - - -
kiss_move	phx
		ldx	<register
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		lda	<_sunder_timer,x	; ある程度たってから
		dec	a			; sunder_timer = 1 のとき
		bne	sound_skip$
		lda	#10h			; 1P デカ
		cpx	#player_r0
		beq	sound$
		lsr	a			; 2P デカ
sound$		tsb	<sound_size
sound_skip$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		dec	<_dmtimer,x
		bne	exit$


		lda	<_poseQ,x
		adc	#08000h
		sta	<0		; = angle
		lda	#0040h
		sta	<2		; = speed
		jsl	>speed_vxvy_BK
		sta	<_velocityY,x
		lda	#1000h
		sta	<_situationZH,x

		lda	#0ffC0h		; 上に動く
		sta	<_dmvY,x
		inc	<_dmprocess,x	; 
		inc	<_dmprocess,x
		lda	#zusin_hirahira
		sta	<_dmpointer,x

		jsl	>sound_hirahira		; ひらひら音

exit$		plx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - -
; (3) ひらひら落ちるルーチン
;- - - - - - - - - - - - - - - - - -
kiss_check	phx
		ldx	<register
		lda	<_dmsY,x
		cmp	#stop_offset
		beq	next$
		cmp	#stop_offset-0D00h
		bne	exit$
		lda	#0040h
		sta	<_dmvY,x
		bra	exit$
next$	
		lda	#zusin_data
		sta	<_dmpointer,x
		stz	<_dmtimer,x
		inc	<_dmprocess,x
		inc	<_dmprocess,x
		stz	<_velocityX,x
		stz	<_velocityY,x

exit$		plx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - -
; (4) 復活デモ
;- - - - - - - - - - - - - - - - - -
return_player	phx
		ldx	<register		; けむりＯＢＪセット

		lda	<_dmpointer,x
		cmp	#zusin_1000
		bne	skip0$
		lda	<screen_register	; よみがえり SE
		jsl	>sound_myerase

skip0$		lda	<_dmC,x
		sec
		sbc	#10*2
		bmi	skip$
		tay
		lda	!option_data,y
		tay
;
		jsr	!oamset_S
;
skip$		lda	<_dmC,x
		cmp	#17*2
		beq	demoend$
		cmp	#12*2
		bne	exit$
;- - - - - - - - - - - - - - - - - - -
		lda	#0000h
		bit	<_sunder_timer,x
		bpl	skip_X$
		lda	#0080h
skip_X$		ldy	<screen_register
		bne	skip_0$
		sta	<_ptn_A,x
		bra	skip_1$
skip_0$		sta	<_ptn_B,x		;ノーマルポーズ
skip_1$		bra	exit$
;- - - - - - - - - - - - - - - - - - -
demoend$					; 終了
		lda	#400h
		ora	<kart_status,x
		sta	<kart_status,x

		lda	#2AH			; 残念サウンド
		jsl	>sos

		stz	<_kart_char_A,x		; 注意！！！！！
		stz	<_kart_char_B,x
		stz	<_dmindex,x		; reset index
		stz	<_dmprocess,x		; reset process
		stz	<_dmtimer,x		; reset timer
		stz	<_hit_timer,x		; 当たり許可
		stz	<_situationZH,x


;- - - - - - - - - - - - - - - - - -
exit$		plx
		INX
		INX
		JMP	(!0,X)		

sos		jml	(!screen_sound)



;********************************************************************
;		デモ SEQ DATA
;********************************************************************
zusin_data	db	03h,9*2		; グズグズデモ
		db	03h,4*2
		db	03h,9*2
		db	03h,4*2
		db	03h,9*2
zusin_1000	db	03h,4*2
;- - - - - - - - - - - - - - - - - -
		db	03h,11*2	; 復活デモ
		db	03h,12*2
		db	03h,13*2
		db	03h,14*2
		db	05h,15*2
		db	05h,16*2
loop$		db	05h,17*2
		db	80h
		dw	loop$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
zusin_hirahira	db	01h,4*2		; ひらひらデモ
		db	03h,3*2
		db	03h,2*2
		db	05h,1*2
		db	17h,0*2
		db	05h,1*2
		db	03h,2*2
		db	03h,3*2
		db	01h,4*2
		db	03h,5*2
		db	03h,6*2
		db	05h,7*2
		db	17h,8*2
		db	05h,7*2
		db	03h,6*2
		db	03h,5*2
		db	80h
		dw	zusin_hirahira
;********************************************************************
;	カートデータ
;********************************************************************
;
	include	car.dat
;
;- - - - - - - - - - - - - - - - - - - - - - -
kart_zusin	dw	zusin_anime	;( double16 )

		dw	zusin_0-2
		dw	zusin_1-2
		dw	zusin_2-2
		dw	zusin_3-2
		dw	zusin_4-2
		dw	zusin_5-2
		dw	zusin_6-2
		dw	zusin_7-2
		dw	zusin_8-2
		dw	zusin_9-2
		dw	zusin_10-2
;- - - - - - - - - - - - - - - - - - - - - - -
		dw	zusin_11-2	; 11	crash character
		dw	0		; 12 	kart clear
		dw	zusin_13-2	; 13	smorke 1
		dw	zusin_14-2	; 14	smorke 2
		dw	zusin_15-2	; 15	smorke 3
		dw	zusin_16-2	; 16 	smorke 4
		dw	zusin_17-2	; nomal
;- - - - - - - - - - - - - - - - - - - - - - -
zusin_0		dw	position0
		dw	kart_char0X
zusin_1		dw	position1
		dw	kart_char0X
zusin_2		dw	position2
		dw	kart_char0X
zusin_3		dw	position3
		dw	kart_char0X
zusin_11
zusin_10
zusin_4		dw	position4
		dw	kart_char0X
zusin_5		dw	position5
		dw	kart_char0X
zusin_6		dw	position6
		dw	kart_char0X
zusin_7		dw	position7
		dw	kart_char0X
zusin_8		dw	position8
		dw	kart_char0X
zusin_9		dw	position9
		dw	kart_char0X

zusin_17
zusin_16
zusin_15
zusin_14
zusin_13	DW	position_box
		DW	kart_char0X	
;- - - - - - - - - - - - - - - - - - - - - - -
position0	dw	0ffebh,0ffe0h
		dw	0ffech,0fff0h
position1	dw	0ffech,0ffe3h
		dw	0ffedh,0fff3h
position2	dw	0ffeeh,0ffe6h
		dw	0ffeeh,0fff6h
position3	dw	0ffefh,0ffeah
		dw	0ffefh,0fffah
position4	dw	0fff0h,0fff0h
		dw	0fff0h,00000h
position5	dw	0ffefh,0fff6h
		dw	0ffefh,00006h
position6	dw	0ffeeh,0fffah
		dw	0ffeeh,0000ah
position7	dw	0ffedh,0fffdh
		dw	0ffech,0000dh
position8	dw	0ffech,00000h
		dw	0ffebh,00010h
position9	dw	0ffefh,0fff0h
		dw	0ffefh,00000h
;- - - - - - - - - - - - - - - - - - - - - - -

zusin_anime	stx	<0
		ldx	<register
		lda	<_dmC,x
		cmp	#12*2
		beq	exit$	
		bcs	wide$
;- - - - - - - - - - - - - - - - - - - - - - -
small$		clc
		adc	<0
		tay
		ldx	!2,y
		jmp	double16
wide$		clc
		adc	<0
		tay
		bit	<_sunder_timer,x
		bmi	skip$
		ldx	!2,y
		jmp	tetre16
skip$		ldx	#kart_4X
		jmp	tetre16_v
exit$		rts
;********************************************************************
;	デモコントロールサブルーチン
;********************************************************************
dm_anime	phx
		ldx	<register
		dec	<_dmtimer,x
		bpl	exit$
		ldy	<_dmpointer,x
		lda	!0,y
		bit	#0080h		; <- special code read
		beq	skip$
		lda	!1,y		; <- loop address read
		tay
		sty	<_dmpointer,x
		lda	!0,y		; <- frame count read
skip$		and	#00ffh
		sta	<_dmtimer,x	; init タイマー
		lda	!1,y		; <- character count read
		and	#00ffh
		sta	<_dmC,x		; init キャラクター
		inc	<_dmpointer,x	; ポインタを進める
		inc	<_dmpointer,x
exit$		plx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
dm_posmove	txy
		ldx	<register
		lda	<_dmsX,x
		clc
		adc	<_dmvX,x
		sta	<_dmsX,x
		lda	<_dmsY,x
		clc
		adc	<_dmvY,x
		sta	<_dmsY,x
		tyx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
dm_posset_A	txy
		ldx	<register
	;;; 	lda	#mycar_distance	; mycar distance
		lda	#0ech
		sta	<size
		sta	<_distance_A,X
		lda	<_dmsX+1,x
		and	#000ffh
		ora	#0ff00h
		sta	<_posH_A,x
		sta	<position_H
		lda	<_dmsY+1,x
		and	#000ffh
		ora	#0ff00h
		sta	<_posV_A,x
		sta	<_shadow_A,x
		sta	<position_V
		tyx
		INX
		INX
		JMP	(!0,X)

dm_posset_B	txy
		ldx	<register
	;;;	lda	#mycar_distance	; mycar distance
		lda	#0ech
		sta	<size
		sta	<_distance_B,X
		lda	<_dmsX+1,x
		and	#000ffh
		ora	#0ff00h
		sta	<_posH_B,x
		sta	<position_H
		lda	<_dmsY+1,x
		clc
		adc	#00070h
		and	#000ffh
		ora	#0ff00h
		sta	<_posV_B,x
		sta	<_shadow_B,x
		sta	<position_V
		tyx
		INX
		INX
		JMP	(!0,X)
;- - - - - - - - - - - - - - - - - - - - - - - - - - -

oamset_S	phx
		ldx	<sprite_count	

		lda	!0,y
		clc
		adc	<screen_obj_V
		sta	<sprite_H+0,x
		lda	!2,y
		sta	<sprite_C+0,x
		lda	!4,y
		clc
		adc	<screen_obj_V
		sta	<sprite_H+4,x
		lda	!6,y
		sta	<sprite_C+4,x
		lda	!8,y
		clc
		adc	<screen_obj_V
		sta	<sprite_H+8,x
		lda	!10,y
		sta	<sprite_C+8,x
		lda	!12,y
		clc
		adc	<screen_obj_V
		sta	<sprite_H+12,x
		lda	!14,y
		sta	<sprite_C+12,x

		txa
		clc
		adc	#10h
		sta	<sprite_count
		txa
		LSR	A
		LSR	A
		LSR	A
		LSR	A
		adc	<screen_sub
		tax
		lda	#00aah
		sta	<0,x			; sub data set
		plx
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
option_data	dw	data_7		; 10
		dw	data_1		; 11
		dw	data_2		; 12
		dw	data_3		; 13
		dw	data_4		; 14
		dw	data_5		; 15
		dw	data_6		; 16
		dw	data_7		; 17
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
data_2		dw	05678h,06c2eh
		dw	0e0e0h,00000h
		dw	0e0e0h,00000h
		dw	0e0e0h,00000h
		dw	0e0e0h,00000h

data_1		dw	05678h,02c2eh
data_7		dw	0e0e0h,00000h
		dw	0e0e0h,00000h
		dw	0e0e0h,00000h
		dw	0e0e0h,00000h
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
data_3		dw	04670h,02b0eh
		dw	04680h,02b00h
		dw	05670h,02b04h
		dw	05680h,02b02h

data_4		dw	0e070h,0
		dw	04680h,02b0eh
		dw	05670h,02b02h
		dw	05680h,02b00h

data_5		dw	0e070h,0
		dw	0e080h,0
		dw	05670h,02b00h
		dw	05680h,02b0eh

data_6		dw	0e070h,0
		dw	0e080h,0
		dw	05670h,02b0eh
		dw	0e080h,0
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
		END
