POS_VS_NEXT	EQU	2450H	; ＶＳでネクストセレクト表示
POS_END_NEXT	EQU	3070H	; ＧＰでネクストセレクト表示
POS_GIVEUP	EQU	2060H	; ギブアップ表示	
POS_YESNO	EQU	4078H	; イエスノー表示
;*********************************************************************
;	mario kart << pause ON screen >>
;					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	PAUSE_MAIN
		GLB	set_pause_char
		EXT	sound_set,Call_BGM
		EXT	Calc_cursor,Calc_cursor2,sound_myerase
		EXT	Clear_engine,Cut_SE
		EXT	Set_over_char,Init_gameover,Set_gameover
		EXT	Set_objcount
;----------------------------------------------------------------------
		EXT	param_screenA,param_screenB
		EXT	clear_sub_Z,clear_spbuff
		EXT	Disp_result
		EXT	debug_FLAG,disp_watch,Main_debug
		EXT	Set_objmeter
		ext	Repeat_trigger
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		ext	Trigger_sound_1
		ext	Save_replay,Erase_sprite
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		EXT	Start_title
		EXT	RACE_RETRY,Next_race
		EXT	Start_K_select,Start_C_select
		EXT	RAM_editer_B
		EXT	Disp_watch
		EXT	Clear_allOBJ
		EXT	Reform_sprite
		EXT	BD_sprite,Disp_mykart
		EXT	Call_bank0
		ext	Pause_off_sound
		glb	Disp_player
;----------------------------------------------------------------------
		EXTEND
objdata	SECT	REL
		mem16
		idx16
;*********************************************************************
;		ポーズ 処理
;*********************************************************************
;			fedcba9876543210
ON_pause	EQU	1000000000000000B	; ポーズ中レベル
OPEN_pause	EQU	0100000000000000B	; ポーズ開始トリガ
EXIT_pause	EQU	0010000000000000B	; ポーズ終了トリガ 
END_pause	EQU	0001000000000000B	; ゲームキャラ再転送トリガ
PROCESS_pause	EQU	0000000000001111B	; ポーズ中 index
;---------------------------------------------------------------------
param_select	DW	param_screenA,param_screenB
;---------------------------------------------------------------------
;	ポーズのメインルーチン
;---------------------------------------------------------------------
PAUSE_MAIN
		LDX	<SEQ_register
		LDA	#EXIT_pause
		BIT	!pause_status
		BVS	open_pause
		BNE	exit_pause
		BMI	every_pause
		RTL
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
open_pause	JSR	(!open_select,X)	; ポーズに入った瞬間



		bit	ghost_flag
		bpl	skip$
		
		ldx	#player_r1
		stz	<_flag,x		; カート消去
		jsl	>Erase_sprite



skip$		lda	#0ffffh
		sta	!pause_entry
		bit	!replay_flag		; リプレイ チェック
		bmi	exit$
		lda	#0			; 1P 録画終了
		sta	>reclap_switch+0
		stz	!replay_flag		; フラグクリア





exit$
		RTL
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
every_pause	JSR	(!every_select,X)	; ポーズ中処理
		RTL
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
exit_pause	JSR	(!exit_select,X)	; ポーズ解除の瞬間
		RTL
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
open_select	dw	Open_pause	;open_GP	; 0
		dw	Open_pause	;open_GP_1	; 2
		dw	Open_pause	;open_GP_2	; 4
		dw	Open_pause	;open_VS	; 6
		dw	Open_pause	;open_TM_1	; 8
		dw	Open_pause	;open_TM_2	; a
		dw	Open_pause	;open_BT	; c
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
every_select	dw	Every_pause2	;every_GP	; 0
		dw	Every_pause	;every_GP_1	; 2
		dw	Every_pause	;every_GP_2	; 4
		dw	Every_pause	;every_VS	; 6
		dw	Every_pause	;every_TM_1	; 8
		dw	Every_pause	;every_TM_2	; a
		dw	Every_pause	;every_BT	; c
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
exit_select	dw	exit_GP		; 0
		dw	exit_GP_1	; 2
		dw	exit_GP_2	; 4
		dw	exit_VS2	; 6
		dw	exit_TM_1	; 8
		dw	exit_TM_2	; a
		dw	exit_BT		; c



;*********************************************************************
;	はじめてポーズにはいったときの処理
;*********************************************************************
Open_pause	LDA	#OPEN_pause+END_pause+PROCESS_pause
		TRB	!pause_status
		LDX	#0
		JSR	Set_pause_char
		LDA	#1			; いいえ
		STA	!pause_cursor
		LDA	#0
		JMP	Erase_allOBJ		;(RTS)

;*********************************************************************
;	ポーズ中のリタイアしますか表示
;*********************************************************************
		ext	Set_watch_1p,Set_watch_2p
Every_pause2
		jsr	Set_watch_1p
		jsr	Set_watch_2p
; - - - - - - - - - - - - - - - - - - - -
Every_pause
		BIT	!replay_flag
		BMI	replay$
		LDA	!pause_index
		BNE	entry$
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		SEP	#00100000B
		MEM8
		LDA	!debug_FLAG
		AND	#00001000B
		BEQ	entry$
		LDA	#00100000B		; <<RAM EDIT MODE ON>>
		TSB	!debug_FLAG
		REP	#00100000B
		MEM16
		jsr	param_screenB
		jsr	Set_objcount
		JSL	>RAM_editer_B
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
entry$		REP	#00100000B
		MEM16
		JSL	>Main_debug
		SEP	#00100000B
		MEM8
		LDA	#00100000B		; <<RAM EDIT MODE OFF>>
		TRB	!debug_FLAG
		REP	#00100000B
		MEM16
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		ldx	!pause_index
		jsr	(!param_select,x)
		jsr	Set_objcount
;- - - - - - - - - - - - - - - - - - - - - - 
		jsr	Disp_giveup
;- - - - - - - - - - - - - - - - - - - - - - 
		JSL	>Reform_sprite
		jsr	clear_spbuff		; clear buffer
;- - - - - - - - - - - - - - - - - - - - - - 
		LDX	!pause_index		;Ｂボタンでも
		LDA	<button_trigger+0,x	;決定可能
		AND	#B_button+ST_button
		BEQ	exit$
;
		lda	#10h
		sta	!pause_wait
;
		lda	!pause_cursor
		bne	pause_exit$
		lda	<game_status
		beq	pause_over$
		cmp	#04
		bne	pause_exit$
pause_over$	jsl	>sound_set		; ポーズ解除はしない！
		bra	replay$
pause_exit$	lda	#8000h
		sta	!bando_off

		lda	!pause_cursor
		bne	replay$

		SEP	#00100000B
		MEM8

		lda	#3fh
		sta	<41h
		lda	#0
		sta	<42h
		sta	<43h

		REP	#00100000B
		MEM16
;- - - - - - - - - - - - - - - - - - - - - - 
replay$		
		LDA	#EXIT_pause
		TSB	!pause_status
;- - - - - - - - - - - - - - - - - - - - - - 
exit$	
		RTS
;- - - - - - - - - - - 




;---------------------------------------------------------------------
; ギブアップ表示
;---------------------------------------------------------------------
Disp_giveup	LDA	#button_trigger+1
		CLC
		ADC	!pause_index
		TAY
		LDA	#0100H
		LDX	#pause_cursor
		JSR	Calc_cursor2
		LDA	#POS_GIVEUP
		LDY	#pause_test
		JSR	Sprite_set
;- - - - - - - - - - - - - - - - - - - - - - 
		LDA	#(POS_YESNO-0010H)
		LDX	!pause_cursor
		BEQ	skip$
		LDA	#(POS_YESNO+1000H-0010H)
skip$		LDY	#pause_sign
		JMP	Sprite_set_FR
;*********************************************************************
;	ポーズ解除後の処理
;	( はい、いいえ　を選択した後の共通処理 )
;*********************************************************************
Exit_pause	
;- - - - - - - - - - - - - - - - - - - - - - 
check_retire	BIT	!replay_flag
		BMI	replay$
		LDA	!pause_cursor		; リタイアするか？
		BNE	goback_entry		; no->skip
		BEQ	retire$
;- - - - - - - - - - - - - - - - - - - - - - 
replay$		
	;;	JSL	>BGM_clear		; リプレイリタイア
		STZ	!pause_cursor
	;;	INC	!pause_status		
	;;	INC	!pause_status
retire$		INC	!pause_status		; リタイアした
		JSL	>Clear_engine
		RTS
;- - - - - - - - - - - - - - - - - - - - - - 
goback_entry	
		LDA	#END_pause		;== ゲームにもどる==
		TRB	!pause_status
		BNE	end_pause
		ldy	!bando_timer
		bne	end_pause
		TSB	!pause_status
		lda	#0005h
		sta	!bando_timer
		LDX	#2			; ゲームキャラ転送
		JSR	Set_pause_char
		LDA	#0
		JMP	Erase_allOBJ

;- - - - - - - - - - - - - - - - - - - - - - 
end_pause	lda	!bando_timer
		dec	a
		bne	skip$
		lda	!bando_off
		beq	skip1$
		jsl	>Pause_off_sound	; ポーズ解除/サウンド ON
skip1$		stz	!bando_timer
		stz	!pause_status		;== ポーズ終了 ====
		rts
;- - - - - - - - - - - - - - - - - - - - - - 
skip$		sta	!bando_timer
		rts
;- - - - - - - - - - - - - - - - - - - - - - 





;*********************************************************************
;	ポーズ解除後の処理分岐	( ＶＳレース )
;		( はい、いいえ　を選択した後の処理 )
;*********************************************************************
Call_winnerBGM	

		tya				; 勝利者のＢＧＭ
		eor	#02h	
		tay
		ldx	<player_index,y  
		lda	<_status,x
		lsr	a
		adc	#0ch
		jsl	>Call_BGM

		rts
;- - - - - - - - - - - - - - - - - - - - - - - 
exit_VS2	LDA	!pause_status
		AND	#00FFH
		ASL	A
		TAX
		JMP	(!VS_retire2,X)
;- - - - - - - - - - - - - - - - - - - - - - 
VS_retire2	dw	check_retire		; 0 リタイアチェック
		dw	goback_game		; 1 
		dw	end_pause		; 2
;- - - - - - - - - - - - - - - - - - - - - - 
		ext	VSresult_A,VSresult_B
goback_game	
;





		jsr	Clear_game
;
		lda	#VSresult_B
		ldy	!pause_index
		beq	skip$
		lda	#VSresult_A
skip$		sta	!oam_vector
		jsr	Call_winnerBGM

		jmp	goback_entry
;- - - - - - - - - - - - - - - - - - - - - - 

Clear_game	
		stz	!slot_flag+0
		stz	!slot_flag+2

stop_kart	ldx	#player_r0
		jsr	kartwork_clear
		ldx	#player_r1
kartwork_clear	stz	<_velocityX,x
		stz	<_velocityY,x
		stz	<_muteki_timer,x
	;;;	stz	<_sunder_timer,x
		stz	<_obake_timer,x
		lda	#4000h
		and	<kart_status,x
		sta	<kart_status,x

		lda	#ON_goal+STOP_engine
		ora	<_flag,x
		sta	<_flag,x

		rts
;*********************************************************************
;	ポーズ解除後の処理分岐	( バトル )
;		( はい、いいえ　を選択した後の処理 )
;*********************************************************************
exit_BT		LDA	!pause_status
		AND	#00FFH
		ASL	A
		TAX
		JMP	(!BT_retire,X)
;- - - - - - - - - - - - - - - - - - - - - - 
BT_retire	dw	check_retire		; 0 リタイアチェック
		dw	goback_battle		; 1 
		dw	end_pause		; 2
;- - - - - - - - - - - - - - - - - - - - - - 
		ext	BTresult1,BTresult2
goback_battle	lda	#BTresult1
		ldy	!pause_index
		beq	skip$
		lda	#BTresult2
skip$		sta	!oam_vector
	;;;;	jsr	Call_winnerBGM
		jsr	Clear_game
		jmp	goback_entry
;- - - - - - - - - - - - - - - - - - - - - - 
		rts






;---------------------------------------------------------------------
;	***** ***** ***** ***** ***** 
;---------------------------------------------------------------------
exit_VS		LDA	!pause_status
		AND	#00FFH
		ASL	A
		TAX
		JMP	(!VS_retire,X)
;- - - - - - - - - - - - - - - - - - - - - - 
VS_retire	dw	check_retire		; 0 リタイアチェック
		dw	check_winner		; 1 
		dw	demo_winner		; 2 勝ち負けデモ
		dw	VS_next			; 3 ゲーム終了セレクト
		dw	wait_fadeout		; 4 終了ウェイト
;---------------------------------------------------------------------
;		敗者のチェック(VS)		; << 1 frame >>
;---------------------------------------------------------------------
check_winner	LDX	!pause_index
		LDA	#4			; 色減算する
		STA	!window_index,X
		LDA	#60*2			; 減算タイマ
		STA	!pause_timer
		INC	!pause_status
		RTS	
;---------------------------------------------------------------------
;		勝ち負けデモ(VS)		; << TIMER >>
;---------------------------------------------------------------------
demo_winner	DEC	!pause_timer		; ウェイト
		BNE	exit$
		INC	!pause_status
exit$		RTS
;---------------------------------------------------------------------
;		ネクストゲームチェック(VS)	; << WAIT >>
;---------------------------------------------------------------------
		ext	Lapcheck_replay
VS_next		
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		jsl	>Lapcheck_replay
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		lda	!backup_timer
		bne	down_timer$
		ldx	!backup_trigger		; トリガはあるか ?
		beq	skip$
		lda	<button_status+0
		and	#L_button+R_button+Y_button
		cmp	#L_button+R_button+Y_button
		bne	skip$
		lda	<button_trigger+0
		and	#X_button
		beq	skip$
		lda	#20h
		jsl	>Trigger_sound_1
		lda	#30			; Initial timer
		sta	!backup_timer
;- - - - - - - - - - - - - - - - - - - -
down_timer$	cmp	#30-1			; Set timming
		bne	down$
		ldx	!backup_trigger		; データセーブ！
		jsl	>Save_replay
down$		dec	!backup_timer
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
skip$
		LDA	#0			; OAM パラメータセット
		JSR	Erase_allOBJ		; OAM 消去
						; OAM スタートセット
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		JSL	>Repeat_trigger		; オートリピート処理
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
VS_nextentry	LDA	#trigger_repeat+1	; カーソル処理
		CLC
		ADC	!pause_index
		TAY

		LDA	!replay_flag
		LSR	A
		LDA	#0400H			; 0,1,2,3
		BCS	skip$
		LDA	#0300H			; 0,1,2,3,4  リプレイ選択可
skip$		LDX	#pause_cursor
		JSR	Calc_cursor2
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		JSR	Display_VSnext		; 画面表示
		JSR	Check_yeskey
		CLC
		BEQ	exit$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
		JSL	>sound_set		; << 1 frame >>
		INC	!pause_status
		LDA	!pause_cursor
		ASL	A
		TAX
		lda	#8000h
		trb	!replay_flag		; リプレイモード OFF
		lda	#8000h
		trb	!static_work		; リトライ記憶 OFF
		cpx	#8			; リプレイ (ON/OFF)
		beq	jumper$
		lda	<SEQ_register
		cmp	#08			; タイムアタック？
		bne	jumper$
		bit	!ghost_flag
		bvc	jumper$
  		lda	#0ffffh			; ゴースト ON
		sta	!g_kart_flag
jumper$		JSR	(!VSretry_select,X)
		SEC
exit$		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
pos_VS_retire	DB	24h
		DB	24h+0eh*1
		DB	24h+0eh*2
		DB	24h+0eh*3
		DB	24h+0eh*4

VSretry_select	DW	Change_course,Retry_entry
		DW	Change_kart,Retry_start
		DW	Replay_entry
;----------------------------------------------------------------------
Replay_entry	lda	#8000h			; リプレイモード ON
		tsb	!replay_flag
		jmp	Retry_check
;- - - - - - - - - - - - - - - - - - - - -
Retry_entry	lda	<game_status
		cmp	#04			; タイムアタック？
		bne	skip$
		lda	#8000h			; リトライ記憶 ON
		tsb	!static_work
skip$		jmp	Retry_check
;- - - - - - - - - - - - - - - - - - - - -



;*********************************************************************
;	ポーズ解除後の処理分岐	( タイムアタック )
;		( はい、いいえ　を選択した後の処理 )
;*********************************************************************
exit_TM_1
exit_TM_2	LDA	!pause_status
		AND	#00FFH
		ASL	A
		TAX
		JMP	(!TM_retire,X)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TM_retire	dw	check_retire		; 0 リタイアチェック
		dw	TM_init			; 1 
		dw	TM_wait			; 2
		dw	VS_next			; 3
		dw	wait_fadeout		; 4
;---------------------------------------------------------------------
;		タイムアタック			; ( 1frame )
;---------------------------------------------------------------------
TM_init		INC	!pause_status
		LDX	!pause_index
		LDA	#4			; 色減算する
		STA	!window_index,X
		LDA	#60H			; 減算タイマ
		STA	!pause_timer

		jsl	>BGM_clear
		jsl	>Cut_SE
		lda	#STOP_engine
		ora	!_flag+player_r0
		sta	!_flag+player_r0

		BIT	!static_work
		BPL	exit$
		LDA	#1
		STA	!pause_cursor
exit$		RTS		
;---------------------------------------------------------------------
;		減算タイマ			; << TIMER >>
;---------------------------------------------------------------------
TM_wait		DEC	!pause_timer		; ウェイト
		BNE	exit$
		INC	!pause_status
exit$		RTS
;---------------------------------------------------------------------
;
;
;
;
;
;*********************************************************************
;	ポーズ解除後の処理分岐	( グランプリ )	
;		( はい、いいえ　を選択した後の処理 )
;*********************************************************************

;*********************************************************************
;	ＧＰ用リタイアセレクト ( 1P MODE )
;*********************************************************************
exit_GP_1
exit_GP_2	
		LDA	!pause_status
		AND	#00FFH
		ASL	A
		TAX
		JMP	(!retire_GP1P,X)
;- - - - - - - - - - - - - - - - - - - - - - -
add_GPover	equ	7-3
;- - - - - - - - - - - - - - - - - - - - - - -
retire_GP1P
		dw	check_retire		; 0
		dw	init_1down		; 1
		dw	main_1down		; 2
		dw	over_check		; 3
		dw	GP_retry		; 4
		dw	GP_wait			; 5
		dw	GP_fadeout		; 6
;- - - - - - - - - - - - - - - - - - - - - - -
		dw	init_GPover		; 7
		dw	main_GPover		; 8
		dw	wait_key		; 9
		dw	wait_fadeout		; 10
;---------------------------------------------------------------------
;	カート 1 DOWN DEMO			<< 1 frame >>
;---------------------------------------------------------------------
init_1down
		JSL	>BGM_clear
		jsr	Set_register
		jsr	Down_window
		jsr	Erase_allOBJ_X		; cf. screen param set
						; oambuffer clear
		jsr	Init_1lost
		ldx	#4
		jsr	Set_bomb_char		; 爆発キャラクタセット
		lda	#120
		jmp	next_pause
;---------------------------------------------------------------------
;	カート 1 DOWN DEMO			<< TIMER >>
;---------------------------------------------------------------------
main_1down	jsr	grid_clear
		jsr	Set_register
		jsr	Erase_allOBJ_X
		jsr	Main_1lost
		jsr	Reform_SPR		; 
		jmp	wait_pause
;---------------------------------------------------------------------
;	ゲームオーバーチェック			<< 1 frame >>
;---------------------------------------------------------------------
over_check	
		jsr	Set_register
		lda	!player_count,x
		cmp	#2
		bcc	skip$
		txy
		jsr	Check_mykart
		jmp	next_pause
skip$	
		txy
		jsr	Check_mykart
		lda	!pause_status
		clc
		adc	#add_GPover
		jmp	set_pause
;---------------------------------------------------------------------
;	ＧＰmode  "つづける／やめる"  ( 1P用 )	<< WAIT >>
;---------------------------------------------------------------------
GP_retry	jsr	Set_register
		jsr	Erase_allOBJ_X		; ＯＢＪ消去
		jmp	GPretry_common
;---------------------------------------------------------------------
;	プレイヤーを減らされたのをみせる	<< TIMER >>
;---------------------------------------------------------------------
GP_wait		jsr	Set_register
		jsr	Erase_allOBJ_X
		jsr	Display_GPnext
		jsr	wait_pause
		bcc	wait$
		lda	!pause_cursor		; << 1 frame >>
		asl	a
		tax
		jsr	(!GP_select,x)
wait$		jsr	Set_objmeter
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
GP_select	DW	Retry_check,Retry_start
;---------------------------------------------------------------------
;	フェードアウトウェイト(process change)
;---------------------------------------------------------------------
GP_fadeout	rts
;---------------------------------------------------------------------
;	ゲームオーバーイニシャル
;---------------------------------------------------------------------
init_GPover	jsr	Set_register
		jsl	>Set_over_char
		jsl	>Init_gameover
		lda	#100h		
		jmp	next_pause
;---------------------------------------------------------------------
;	ゲームオーバーメイン
;---------------------------------------------------------------------
main_GPover	jsr	Set_register
		jsr	Erase_allOBJ_X
		jsl	>Set_gameover
		jmp	wait_pause
;---------------------------------------------------------------------



;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
					; ポーズＳＥＱスキップ
set_pause	SEP	#00100000B
		MEM8
		sta	!pause_status
		REP	#00100000B
		MEM16
		rts
wait_pause	clc
		dec	!pause_timer
		bne	exit_100
next_pause	sta	!pause_timer
		inc	!pause_status
		sec
exit_100	rts			; clc -> wait中, sec -> SEQnext 
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
					; プレイヤーindex のセット
Sub_register	lda	#2		; サブ側
		bra	register_skip
Set_register	lda	#0		; ポーズ側
register_skip	eor	!pause_index
		tax
		lda	<player_index,x
		sta	<register
		stx	<screen_register
		lda	!obj_V,x
		sta	<screen_obj_V
		rts
obj_V		dw	0,7000h
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
					; 色減算セット
Down_window	lda	#4
		sta	!window_index,x
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
					; ＯＡＭ buffer 次回でオールクリア
Reform_SPR	
		jsl	>Reform_sprite
		ldx	!pause_index		
		lda	<sprite_count
		sta	!backup_A,x
		rts
Reform_SPR_sub
		jsl	>Reform_sprite
		lda	!pause_index		
		eor	#2
		tax
		lda	<sprite_count
		sta	!backup_A,x
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;	リタイア時にマップ上のカートも消す
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sprite_start	dw	70h+420h,70h+200h
sprite_mykart	dw	80h,84h
;- - - - - - - - - - - - - - - - - - - - - - - - - -
Check_mykart	ldx	!sprite_start,y
		lda	!sprite_mykart,y		
		sta	<0
;- - - - - - - - - - - - - - - - - - - - - - - - - -
		ldy	#4*8
		SEP	#00100000B
		MEM8
loop$		lda	<sprite_C,x
		cmp	<0
		beq	erase$
		inx
		inx
		inx
		inx
		dey
		bne	loop$
		REP	#00100000B
		MEM16
		rts
		mem8
erase$		lda	#0f0h
		sta	<sprite_V+0,x
		sta	<sprite_V+4,x
		sta	<sprite_V+8,x
		sta	<sprite_V+12,x
		REP	#00100000B
		MEM16
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


;*********************************************************************
;	ＧＰ用リタイアセレクト ( 2P MODE )
;*********************************************************************
		ext	Set_raceOBJ
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
exit_GP		LDA	!pause_status
		AND	#00FFH
		ASL	A
		TAX
		JMP	(!retire_select,X)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
						; ポーズ側/ サブ側
pr_0		equ	(pros_0-pros_root)/2	; 死亡  / オーバー
pr_1		equ	(pros_1-pros_root)/2	; 死亡  / クリア
pr_2		equ	(pros_2-pros_root)/2	; 死亡	/ 死亡
pr_3		equ	(pros_3-pros_root)/2	; オーバー / オーバー
pr_4		equ	(pros_4-pros_root)/2	; オーバー / クリア
pr_5		equ	(pros_5-pros_root)/2	; オーバー / 死亡
pr_6		equ	(pros_6-pros_root)/2	; 1P MODE
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
retire_select
pros_root
		dw	check_retire		;0 リタイアチェック
		dw	demo_1down_init		;1 
		dw	demo_1down		;2 １ロストデモ
		dw	check_gameover		;3 ゲームオーバーチェック
;- - - - - - - - - - - - - - - - - - - - - - 
pros_0		;死亡/オーバー
		dw	init_over_sub		;13
		dw	main_over_sub		;14
		dw	next_retry		;15 player -1
		dw	wait_time		;16
		dw	wait_fadeout		;17
;- - - - - - - - - - - - - - - - - - - - - - 
pros_1		;死亡/クリア
		dw	clear_race		;7 player -1
		dw	wait_fadeout		;8
;- - - - - - - - - - - - - - - - - - - - - - 
pros_2		;死亡/死亡
		dw	next_retry2		;4 player -1
		dw	wait_time2		;5
		dw	wait_fadeout		;6
;- - - - - - - - - - - - - - - - - - - - - - 
pros_3		;オーバー/オーバー
		dw	init_over		;18
		dw	init_over_sub		;19
		dw	main_over_all		;20
		dw	wait_key		;21
		dw	wait_fadeout		;22
;- - - - - - - - - - - - - - - - - - - - - - 
pros_4		;オーバー/クリア
		dw	init_over		;9
		dw	main_over		;10
		dw	clear_race		;11 player -1
		dw	wait_fadeout		;12
;- - - - - - - - - - - - - - - - - - - - - - 
pros_5		;オーバー/死亡
		dw	init_over		;23
		dw 	main_over		;24
		dw	set_pchar		;25
		dw	next_retry		;26 player -1
		dw	wait_time		;27
		dw	wait_fadeout		;28
;- - - - - - - - - - - - - - - - - - - - - - 
pros_6		; 1P ONLY になったとき
		dw	init_1down		; 1
		dw	main_1down		; 2
		dw	over_check		; 3
		dw	GP_retry		; 4
		dw	GP_wait			; 5
		dw	GP_fadeout		; 6
		dw	init_GPover		; 7
		dw	main_GPover		; 8
		dw	wait_key		; 9
		dw	wait_fadeout		; 10
;---------------------------------------------------------------------
;	カート１ダウンデモ			<< 1 FRAME >>
;---------------------------------------------------------------------
					; 死亡 / 不参加
					; オーバー / 不参加
goto_1P		lda	#pr_6		; ( 1P MODE )
		jmp	set_pause
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
demo_1down_init	
		JSL	>BGM_clear
;- - - - - - - - - - - - - - - - - - - - 
		lda	!player_count+0
		beq	goto_1P
		lda	!player_count+2
		beq	goto_1P
;- - - - - - - - - - - - - - - - - - - - ;  上画面チェック
		ldx	#0		
		jsr	check_goal
		jsr	call_down
;- - - - - - - - - - - - - - - - - - - - ;　下画面チェック
		ldx	#2
		jsr	check_goal
		jsr	call_down
		lda	#120
		jmp	next_pause
;- - - - - - - - - - - - - - - - - - - - - - - - - -
call_down	ldy	<player_index,x
		sty	<register	; カートindex セット
		lda	!goal_flag	; ゴールフラグをチェック
		and	#03000h		; してデモを行なうかどうか
		beq	skip$		; 決定している
		cpx	!pause_index
		bne	exit$
skip$		
	;;	jsr	Erase_allOBJ_X
		jsr	Init_1lost
		ldx	#4
		jsr	Set_bomb_char	; 爆発キャラクタセット
exit$		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - -
check_goal	ldy	<player_index,x
		lda	!_flag,y
		and	#ON_goal		; ゴールインチェック
		beq	skip$			;
		lda	!rank_number,y
		cmp	#8			; 順位チェック
		bcs	skip2$			; 
		txa
		ora	#8000h			; クリアフラグセット
		sta	!clear_flag		; 
		bra	exit$
skip$
		lda	!kart_area,y
		beq	skip2$
		lda	#1			; driver's point = 0
		sta	!kart_area,y		; １ダウンしたとき
skip2$
		lda	!window_index,x		; 敗者ウィンドウ
		cmp	#14H			; ならばセットせず
		beq	exit$
		lda	#4
		sta	!window_index,x
exit$		rts
;---------------------------------------------------------------------
;	カート１ダウンデモ			<< TIMER >>
;---------------------------------------------------------------------
demo_1down

;- - - - - - - - - - - - - - - - - - - - ;  上画面チェック
		ldx	#0
		jsr	call_down2
;- - - - - - - - - - - - - - - - - - - - ;　下画面チェック
		ldx	#2
		jsr	call_down2		
		jmp	wait_pause
;- - - - - - - - - - - - - - - - - - - - - - - - - -
call_down2	stx	!pause_work
		ldy	<player_index,x
		sty	<register	; カートindex セット
		lda	!goal_flag	; ゴールフラグをチェック
		and	#03000h		; してデモを行なうかどうか
		beq	skip$		; 決定している
		cpx	!pause_index
		bne	exit$
skip$		jsr	Erase_allOBJ_X
		jsr	Main_1lost
		jsl	>Reform_sprite		
		ldx	!pause_work
		lda	<sprite_count
		sta	!backup_A,x
exit$		rts
;---------------------------------------------------------------------
;	 ゲームオーバーのチェック(GP)		<< 1 frame >>
;---------------------------------------------------------------------
check_gameover
		jsr	grid_clear

;- - - - - - - - - - - - - - - - - - - - ;  ポーズ画面チェック
		lda	!pause_index
		tax
		eor	#02
		tay
		lda	#1
		cmp	!player_count,x
		bcs	skip$
		bit	!clear_flag	; クリアチェック
		bmi	exit1$
		cmp	!player_count,y
		bcs	exit0$
		bcc	exit2$
skip$		bit	!clear_flag	; クリアチェック
		bmi	exit4$
		cmp	!player_count,y
		bcs	exit3$
		bcc	exit5$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

exit0$		lda	#pr_0		; 死亡 / オーバー
		jmp	set_pause
exit1$		lda	#pr_1		; 死亡 / クリア
		jmp	set_pause
exit2$		lda	#pr_2		; 死亡 / 死亡
		jmp	set_pause	
exit3$		lda	#pr_3		; オーバー / オーバー
		jmp	set_pause
exit4$		lda	#pr_4		; オーバー / クリア
		jmp	set_pause
exit5$		lda	#pr_5		; オーバー / 死亡
		jmp	set_pause
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


;---------------------------------------------------------------------
;	ＧＰmode  "つづける／やめる" 		<< WAIT >>
;---------------------------------------------------------------------
;- - - - - - - - - - - - - - - - - - - - - - -  ; { サブ画面側 }
next_retry2	lda	#2
		jsr	Erase_allOBJ
		lda	#2
		eor	!pause_index
		tax
		jsr	Disp_player
		jsr	Reform_SPR_sub
next_retry
;- - - - - - - - - - - - - - - - - - - - - - -  ; { ポーズ画面側 }
		lda	#0
		jsr	Erase_allOBJ		; OAM 消去
GPretry_common	jsr	Cursor_GPnext		; カーソル処理
		jsr	Display_GPnext		; 画面表示
		jsr	Reform_SPR		; 次回消去
		jsr	Check_yeskey
		clc				; flag set
		beq	exit$
;- - - - 
		jsr	Down_player		; << 1 frame >>
		jsl	>sound_set		; << 1 frame >>
		lda	#70
		ldy	!pause_cursor
		beq	skip$		
		lda	#10			; タイマ１
		stz	!player_count+0		; ゲーム終了
		stz	!player_count+2		; タイマ２
skip$		lda	#70
		jsr	next_pause
		sec				; flag set
exit$		rts
;---------------------------------------------------------------------
;	プレイヤーを減らされたのをみせる	<< TIMER >>
;---------------------------------------------------------------------
;- - - - - - - - - - - - - - - - - - - - - - - - - ; { サブ画面側 ｝
wait_time2	lda	#2
		jsr	Erase_allOBJ
		lda	#2
		eor	!pause_index
		tax
		jsr	Disp_player
		jsr	Set_objmeter
;- - - - - - - - - - - - - - - - - - - - - - - - - ; { ポーズ画面側 ｝
wait_time	jsr	Set_register
		jsr	Erase_allOBJ_X
		jsr	Display_GPnext
		jsr	wait_pause
		bcc	wait$
		lda	!pause_cursor		; << 1 frame >>
		asl	a
		tax
		jsr	(!retry_select,x)
wait$		jsr	Set_objmeter
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
retry_select	DW	Retry_check,Retry_start
;---------------------------------------------------------------------
;	フェードアウトウェイト(process change)	<< EXIT >>
;---------------------------------------------------------------------
wait_fadeout	RTS
;---------------------------------------------------------------------
;	サブ側ゲームクリア !			<< 1 frame >>
;---------------------------------------------------------------------
clear_race	ldy	!pause_index		; エリアクリア
		ldx	<player_index,y
		lda	<kart_area,x
		beq	skip$
		lda	#1
		sta	<kart_area,x
skip$
;- - - - - - - - - - - - - - - - - - - - - - - 
		jsl	>Cut_SE
	;;;	jsr	Call_winnerBGM
		jsr	Down_player
		jsr	NEXT_RACE
		jmp	next_pause
;---------------------------------------------------------------------
;	ゲームオーバーイニシャル		<< 1 frame >>
;---------------------------------------------------------------------
init_over_sub	jsr	Sub_register
		bra	io_100
init_over	jsr	Set_register
io_100		jsl	>Set_over_char
		jsl	>Init_gameover
		lda	#100h
		jmp	next_pause
;---------------------------------------------------------------------
;	ゲームオーバーメイン			<< TIMER >>
;---------------------------------------------------------------------
main_over_all	jsr	Set_register
		jsr	over_common
;- - - - - - - - - - - - - - - - - - - - - -
main_over_sub	jsr	Sub_register	
		jsr	over_common
		jmp	wait_pause
;- - - - - - - - - - - - - - - - - - - - - -
main_over	jsr	Set_register
		jsr	over_common
		jmp	wait_pause
;- - - - - - - - - - - - - - - - - - - - - -
over_common	jsr	Erase_allOBJ_X
		jsl	>Set_gameover
		rts
;---------------------------------------------------------------------
;	キーウェイト					<< WAIT >>
;---------------------------------------------------------------------
wait_key	lda	<button_trigger+0
		ora	<button_trigger+2
		and	#ST_button+B_button
		beq	exit$
		jsr	Retry_start
		jmp	next_pause
exit$		rts
;---------------------------------------------------------------------
;	サブ側に retry/end のチェック表示を行な		<< 1frame >>
;---------------------------------------------------------------------
set_pchar	lda	!pause_index
		eor	#2
		sta	!pause_index
		ldx	#0
		jsr	Set_pause_char
		jmp	next_pause
;#####################################################################
;		汎用ルーチン
;#####################################################################



;--------------------------------------------------------------------
;	グリッドのクリア
;--------------------------------------------------------------------
grid_clear	ldy	!pause_index
		ldx	<player_index,y
		lda	<kart_area,x
		beq	skip$
		lda	#1
		sta	<kart_area,x
skip$		rts
;--------------------------------------------------------------------
; 	ポーズ時のＯＢＪ表示
;--------------------------------------------------------------------
		glb	Display_VSnext
;- - - - - - - - - - - - - - - - - - - - - - 
					; VS/TM/BT NEXT の表示
Display_VSnext	LDA	#POS_VS_NEXT
		LDY	#mes_VS_next
		JSR	Sprite_set
;- - - - - - - - - - - - - - - - - - - - - - 
		LDA	!replay_flag
		LSR	A
		BCC	skip_replay$
		LDA	#POS_VS_NEXT+0e00h*4	; REPLAY 表示
		LDY	#mes_replay
		JSR	Sprite_set
skip_replay$
;- - - - - - - - - - - - - - - - - - - - - - 
		LDX	!pause_cursor		; display cursor
		LDA	!pos_VS_retire-1,X
		AND	#0FF00H
		CLC
		ADC	#((POS_VS_NEXT&00ffh)-0010H)
skip$		LDY	#pause_sign
		JMP	Sprite_set_FR

		glb	Display_GPnext
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
					; GP NEXT の表示
Display_GPnext	LDA	#POS_END_NEXT
		LDY	#end_next
		JSR	Sprite_set
;
		LDA	#(POS_END_NEXT-0010H)
		LDX	!pause_cursor
		BEQ	skip$
		LDA	#(POS_END_NEXT-0010H+1000H)
skip$		LDY	#pause_sign
		JSR	Sprite_set_FR
		ldx	!pause_index
		JMP	Disp_player
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Cursor_GPnext				; カーソル処理
		LDA	#button_trigger+1
		CLC
		ADC	!pause_index
		TAY
		LDA	#0100H
		LDX	#pause_cursor
		JMP	Calc_cursor2
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
					; 残りプレイヤーの表示
Disp_player	lda	!player_count,x
		beq	exit$
		dec	a
		beq	exit$
;- - - - - - -
		cmp	#4
		bcc	skip$
		lda	#4
;- - - - - - -
skip$		sta	<0			; counter
		ldy	<player_index,x
		ldx	<_status,y
;- - - - - - -
		ldy	!type$,x
		lda	#(POS_END_NEXT+002Ch-0400h)
;- - - - - - -
loop$		pha				; >>
		phy				;  >>
		JSR	Sprite_tetre
		ply				;  <<
		pla				; <<
		clc
		adc	#0011h
		dec	<0			; counter
		bne	loop$
;- - - - - - -
exit$		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - -
type$		dw	2320h
		dw	2522h
		dw	2124h
		dw	2726h
		dw	2728h
		dw	252ah
		dw	232ch
		dw	212eh
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
						; キーチェック
Check_yeskey	LDX	!pause_index
		LDA	<button_trigger,X
		AND	#ST_button+B_button
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

;---------------------------------------------------------------------
;	プログラム分岐
;---------------------------------------------------------------------
		EXT	BGM_clear
		EXT	NEXT_RACE
;- - - - - - - - - - - - - - - - - - - - - - - - - - - 	
						; マップやりなおし！
Retry_check	ldx	!pause_index
		stx	<screen_register
		LDY	!clear_flag
		BNE	skip$
		JMP	RACE_RETRY
skip$		JMP	NEXT_RACE
;- - - - - - - - - - - - - - - - - - - - - - - - - - - 
						; タイトルにもどる
Retry_start	LDX	#Start_title
		JSL	>Call_bank0
		JSL	>BGM_clear
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - 
						; コースセレクトにもどる
Change_course	LDX	#Start_C_select
		JSL	>Call_bank0
		JSL	>BGM_clear
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - 
						; カートセレクトにもどる
Change_kart	LDX	#Start_K_select
		JSL	>Call_bank0
		JSL	>BGM_clear
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - 
						; プレイヤー１ダウン
Down_player	ldx	!pause_index
		lda	!player_count,x
		beq	skip$
		dec	!player_count,x
skip$		txa
		eor	#2
		tax
		bit	!clear_flag
		bmi	exit$
		lda	!player_count,x
		beq	exit$
		dec	!player_count,x
exit$		rts
;---------------------------------------------------------------------
;	ポーズのキャラクター転送サブルーチン
;---------------------------------------------------------------------
pause_char	EQU	7FBC00H
race_char	EQU	7F6C00H
bomb_char	EQU	7FC800H
over_vram
pause_vram	DW	5000H,6000H
bomb_vram	DW	5000H,6000H,4000H
pause_data	DW	pause_char,race_char
pause_bank	DW	pause_char/10000h,race_char/10000h
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Set_bomb_char	LDA	#bomb_char
		STA	!trans_address
		LDA	#7FH
		STA	!trans_bank
		LDA	!bomb_vram,x
		BRA	vramset
;- - - - - - - - 
Set_pause_char	LDY	!pause_index

set_pause_char	LDA	!pause_data,X		; Set ROM address
		STA	!trans_address		
		LDA	!pause_bank,X
		STA	!trans_bank
		LDA	!pause_vram,Y		; Set VRAM address
vramset		STA	!trans_vram
		LDA	#400H			; Set trans count
		STA	!trans_count
		RTS
;---------------------------------------------------------------------
;$
;$
;= = = = = utility = = = = 
;$
;$
;---------------------------------------------------------------------
;		ＯＡＭバッファをすべてクリアーする
;---------------------------------------------------------------------
		EXT	Clear_allOBJ
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Erase_allOBJ	eor	!pause_index		;!
		tax
Erase_allOBJ_X	jmp	Clear_allOBJ
;####################################################################
;	ＶＳ／タイムアタック終了後のＳＥＱ
;####################################################################
		GLB	call_pause1
		GLB	call_pause_VS,call_pause_GP
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
call_pause1	LDY	<screen_register	; Y= vram address select
		LDX	#0			; X= pause character set
		JMP	set_pause_char
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
call_pause_VS	lda	<screen_register
		sta	!pause_index
		ldx	<game_status
		jmp	VS_next			; キーが押されたならば !
						; Ｃフラグセットとなる
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
call_pause_GP	lda	<screen_register
		sta	!pause_index
		ldx	<game_status
		jmp	next_retry		; キーが押されたならば !
						; Ｃフラグセットとなる
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 




;####################################################################
;		１ＬＯＳＴデモ表示
;####################################################################
		GLB	Init_1lost,Main_1lost,Set_bomb_char
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Init_1lost	LDX	<register
		LDA	#SEQ_1lost-2
		STA	<_anime_pointer,X
;- - - - - - 
		lda	#STOP_engine
		ora	<_flag,x
		sta	<_flag,x
;- - - - - - 
		STZ	<_anime_timer,X
		STZ	<_anime_mail,X
		stz	<_anime_bank,x	; サウンドのフラグ用
		JSL	>Clear_engine
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Main_1lost
		LDX	<register
		LDA	<_anime_mail,X
		BNE	exit$
		JSR	Anime
		LDY	!data_select,X
		BPL	skip$
;- - -
		ldx	<register	; 消失サウンド ＯＮ！
		lda	<_anime_bank,x
		bne	sound$
		dec	<_anime_bank,x
		txa			; 消失サウンド 
		and	#0100h
		jsl	>sound_myerase
sound$
;- - -
		LDA	#5880H
		CLC
		ADC	<screen_obj_V
		JSL	>BD_sprite
		JSL	>Reform_sprite
		BRA	exit$
;
skip$		SEP	#00100000B
		MEM8
		LDA	!frash_kart,Y
		STA	<attribute+1
		REP	#00100000B
		MEM16
;
		LDX	#Disp_mykart
		JSL	>Call_bank0
;- - - 
exit$		
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
frash_kart	DB	00H,39H,3DH
;####################################################################
;		アニメーション
;####################################################################
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		;
		DEC	<_anime_mail,X		;W
		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
		ASL	A			;W(CLC)
		TAX
		RTS
;####################################################################
;		汎用ルーチン
;####################################################################
;**********************************************************************
;
;**********************************************************************









;**********************************************************************
;	残りのキャラクタ
;**********************************************************************
;	Y =  data pointer


Sprite_tetre	
		ldx	<sprite_count
;- - - - - - - - - - - - - - - - - - -  ; 8x8 キャラクタ の 16x16 セット
		clc
		adc	<screen_obj_V
		sta	<sprite_H+0,x	
		adc	#0008h		; clc
		sta	<sprite_H+4,x
		adc	#0800h
		sta	<sprite_H+12,x
		sbc	#0008h-1	; clc
		sta	<sprite_H+8,x
;- - - - - - - - - - - - - - - - - - -  ; 8x8 キャラクタ の 16x16 セット
		tya
		sta	<sprite_C+0,x
		inc	a
		sta	<sprite_C+4,x
		ora	#10h
		sta	<sprite_C+12,x
		dec	a
		sta	<sprite_C+8,x
;- - - - - - - - - - - - - - - - - - - -
		txa
		clc
		adc	#10h
		sta	<sprite_count
		rts
;**********************************************************************
;	たてよこキャラ単位スプライトのセット
;**********************************************************************
wk_counter	EQU	0
wk_attribute	EQU	1
wk_position	EQU	2
wk_mainpos	EQU	4
wk_addition	EQU	6
wk_flag		EQU	8
frash_attr	EQU	10
;----------------------------------------------------------------------
;exsample
;		LDA	#4040H		low(Hposition) high(Vposition)
;		LDY	#DP
;		JSR	Sprite_set
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;DP		db	4			; counter
;		db	20h			; attr
;		dw	0000h			; offset position
;		db	24h,34h,56h,43h		; character number
;		db	0			; end code
;----------------------------------------------------------------------
		GLB	SPRITE_SET,Sprite_set
SPRITE_SET	JSR	Sprite_set
		RTL
;----------------------------------------------------------------------
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Sprite_set_FR	PHA
		LDA	#0
		STA	<frash_attr
		PLA
		BRA	set_entry
Sprite_set	STZ	<frash_attr
set_entry	STA	<wk_mainpos	; A= position
					; Y= data point
		LDX	<sprite_count	; X= sprite count
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		SEP	#00100000B
		MEM8
next$		LDA	!0,Y		; counter
		BEQ	exit$
		STA	<wk_flag
		AND	#3FH
		STA	<wk_counter
		INY
		LDA	!0,Y		; attribute
		EOR	<frash_attr
		STA	<wk_attribute
		INY
		REP	#00100001B
		MEM16
		LDA	!0,Y		; H,V position
		ADC	<screen_obj_V
		ADC	<wk_mainpos	; offset position
		STA	<wk_position
;- - - - - - - - - - - - - - - - - - - - -
		LDA	<wk_flag
;			 76543210
		AND	#01100000B	; 0 ?
		BEQ	s1$		; yes
		CMP	#00100000B	; 1 ?
		BEQ	s2$		; yes
		CMP	#01000000B	; 2 ?
		BEQ	s3$		; yes
;- - - - - - - - - - - - - - - - - - - - -
		LDA	#1000H		; V +10H
		BRA	skip100$
s3$		LDA	#0800H		; V +8H
		BRA	skip100$
s2$		LDA	#0010H		; H +10H
		BRA	skip100$
s1$		LDA	#0008H		; H +8H
skip100$	STA	<wk_addition
;- - - - - - - - - - - - - - - - - - - - -
		INY
		INY
		SEP	#00100000B
		MEM8
;- - - - - - - - - - - - - - - - - - - ; ライト
loop$		LDA	!0,Y
		STA	<sprite_C,X
		LDA	<wk_attribute
		STA	<sprite_A,X
		REP	#00100001B
		MEM16
		LDA	<wk_position
		STA	<sprite_H,X
		ADC	<wk_addition
		STA	<wk_position
		SEP	#00100000B
		MEM8
		BIT	<wk_flag
		BMI	skip$
		INY
skip$		INX
		INX
		INX
		INX
		DEC	<wk_counter
		BNE	loop$
		BRA	next$
;- - - - - - - - - - - - - - - - - - - 
exit$		REP	#00100000B
		MEM16
		STX	<sprite_count
		RTS
;- - - - - - - - - - - - - - - - - - - 
;
;
;
;
;
;######################################################################
;		スプライトデータ
;######################################################################
;--------------------------------------------------------------------
;	１ＬＯＳＴのスプライトデータ
;--------------------------------------------------------------------
	include	lost_demo.dat
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
;	日本語 version data
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
	if	JAP_VER

	include	pause_jap.dat	

	endif
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
;	英語 version data
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
	if	ENG_VER

pause_test	db	4,29H			; GIVEUP(RETIRE)?
		dw	0000H
		db	000h,001h,002h,003h
		db	4,29H
		dw	0800H
		db	010h,011h,012h,013h
		db	3,29H
		dw	0028H
		db	0ah,01dh,004h
		db	3,29H
		dw	0828H
		db	0bh,01eh,014h

		db	3,29H			; YES-NO
		dw	(POS_YESNO-POS_GIVEUP)
		db	1bh,19h,0eh
		db	2,29H
		dw	(POS_YESNO-POS_GIVEUP+1000H)
		db	17h,06h
		db	0
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
pause_sign	db	1,29H			;カーソル
		dw	0000H
		db	05h,0
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
end_next
		db	5,29h			; RETRY
		dw	0000h		
		db	0dh,19h,07h,0dh,1bh
		db	3,29h			; END
		dw	1000h
		db	19h,17h,1ah
		db	0
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
mes_VS_next	
		db	6,29h			; CHANGE COURSE
		dw	0000h
		db	0fh,15h,16h,17h,18h,19h
		db	6,29h
		dw	0034h
		db	0fh,06h,09h,0dh,0eh,19h

		db	5,29h			; RETRY
		dw	0000h+0e00h*1
		db	0dh,19h,07h,0dh,1bh

;
		db	6,29h			; CHANGE DRIVER
		dw	0000h+0e00h*2
		db	0fh,15h,16h,17h,18h,19h
		db	6,29h
		dw	0034h+0e00h*2
		db	1ah,0dh,08h,1ch,19h,0dh
;
		db	3,29h			; END
		dw	0000h+0e00h*3
		db	19h,17h,1ah

		db	0

mes_replay	db	6,29h
		dw	0000h
		db	0dh,19h,1fh,0ch,16h,1bh
		db	0

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --



;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
	endif	
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --
	END
