;*********************************************************************
;	mario kart sound set routine
;					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
;----------------------------------------------------------------------
		glb	sound_star,sound_kamebana
		glb	sound_missile,sound_banana
		glb	sound_rankout
		glb	sound_dosun_out
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		glb	sound_coin,sound_balloon
		glb	sound_crash,sound_kame
		glb	sound_myerase
		glb	sound_select,sound_set,sound_cancel
		glb	sound_hirahira
		glb	sound_rankup,sound_rankdown
		ext	Trigger_sound_1,Trigger_sound_2
		ext	SE_trigger_1,SE_trigger_2
		ext	BGM_fade_out
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		glb	sound_VScrash
		glb	sound_my_enemy,sound_my_dokan
		glb	sound_block,sound_wood,sound_ice
		glb	sound_block2
		glb	sound_enemy,sound_dokan,sound_enemyspin
		glb	sound_zusin
		glb	TRIGGER_SOUND
		glb	BGM_clear
		glb	sound_sunder
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 


		EXTEND
bank84		SECT	REL
		mem16
		idx16
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;		BGM のクリア	
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_sunder	rtl

	;	lda	#SE_sunder
	;	jml	(!screen_sound)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;		BGM のクリア	
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
BGM_clear	lda	<game_status	; ＧＰ mode ?
		bne	skip$
		lda	!goal_flag	; どちらかが winer ?
		and	#2000h
		bne	exit$
skip$		jmp	>BGM_fade_out
exit$		rtl
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;A/B　両画面 でのトリガジャンプ
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TRIGGER_SOUND	jml	(!screen_sound)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;ＯＢＪ衝突によるあたりの音(マイカー）
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sound_dosun_out	
		lda	#SE_dosun_out
		jml	(!screen_sound)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;ＯＢＪ衝突によるあたりの音(マイカー）
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sound_VScrash	lda	#SE_VScrash
		jml	(!screen_sound_A)
sound_my_enemy	lda	#SE_my_enemy
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_my_dokan	bne	skip$
		lda	#SE_my_dokan
		jml	(!screen_sound_A)
skip$		lda	#SE_my_dokan
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;ＢＧチェックによるあたりの音（カメ)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sound_block	
		phy			; >>
		phx				; >>
		jsr	check_distance	; 画面上の距離チェック
		phk				; program bank
		jsr	(!block_select$,x)	; sub jump!
		plx
		ply
		rtl				; <<
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
block_select$	dw	0,A_short$,A_mid$,A_long$
		dw	0,B_short$,B_mid$,B_long$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A_short$	lda	#SE_kame_block_S
		jml	(!screen_sound_A)
A_mid$		lda	#SE_kame_block_M
		jml	(!screen_sound_A)
A_long$		lda	#SE_kame_block_L
		jml	(!screen_sound_A)
B_short$	lda	#SE_kame_block_S
		jml	(!screen_sound_B)
B_mid$		lda	#SE_kame_block_M
		jml	(!screen_sound_B)
B_long$		lda	#SE_kame_block_L
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;ＢＧチェックによるあたりの音（ 敵車 )
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sound_block2	
		phy			; >>
		phx				; >>
		jsr	check_distance	; 画面上の距離チェック
		phk				; program bank
		jsr	(!block_select$,x)	; sub jump!
		plx
		ply
		rtl				; <<
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
block_select$	dw	0,A_short$,A_mid$,A_long$
		dw	0,B_short$,B_mid$,B_long$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A_short$	lda	#SE_kart_block_S
		jml	(!screen_sound_A)
A_mid$		lda	#SE_kart_block_M
		jml	(!screen_sound_A)
A_long$		lda	#SE_kart_block_L
		jml	(!screen_sound_A)
B_short$	lda	#SE_kart_block_S
		jml	(!screen_sound_B)
B_mid$		lda	#SE_kart_block_M
		jml	(!screen_sound_B)
B_long$		lda	#SE_kart_block_L
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_ice	
		phy
		phx				; >>
		jsr	check_distance	; 画面上の距離チェック
		phk				; program bank
		jsr	(!ice_select,x)		; sub jump!
		plx
		ply
		rtl				; <<
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ice_select	dw	0,A_short$,A_mid$,A_long$
		dw	0,B_short$,B_mid$,B_long$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A_short$	lda	#SE_kame_ice_S
		jml	(!screen_sound_A)
A_mid$		lda	#SE_kame_ice_M
		jml	(!screen_sound_A)
A_long$		lda	#SE_kame_ice_L
		jml	(!screen_sound_A)
B_short$	lda	#SE_kame_ice_S
		jml	(!screen_sound_B)
B_mid$		lda	#SE_kame_ice_M
		jml	(!screen_sound_B)
B_long$		lda	#SE_kame_ice_L
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_wood	
		phy
		phx
		jsr	check_distance	; 画面上の距離チェック
		phk				; program bank
		jsr	(!wood_select,x)	; sub jump!
		plx
		ply
		rtl				; <<
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
wood_select	dw	0,A_short$,A_mid$,A_long$
		dw	0,B_short$,B_mid$,B_long$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A_short$	lda	#SE_kame_wood_S
		jml	(!screen_sound_A)
A_mid$		lda	#SE_kame_wood_M
		jml	(!screen_sound_A)
A_long$		lda	#SE_kame_wood_L
		jml	(!screen_sound_A)
B_short$	lda	#SE_kame_wood_S
		jml	(!screen_sound_B)
B_mid$		lda	#SE_kame_wood_M
		jml	(!screen_sound_B)
B_long$		lda	#SE_kame_wood_L
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_zusin	

;- - - - - - - - - - - - - - - - - - - - - B screen zusin
		phx
;- - - 
		lda	<race_status		; レース中以外は
		cmp	#06h			; ズシンのＳＥはカット
		bne	exit$
;- - - 
		txa
		sec
		sbc	#40h
		tay
		lda	<_distance_B,x		; Bscreen
		cmp	!_distance_A,y		; Ascreen
		bcs	Bset$
		lda	!_distance_A,y
		cmp	#140h
		bcc	skip0$
		lda	<_distance_B,x
Bset$		ldx	#2+8
		cmp	#140h
		bcc	skip$
		lda	!_distance_A,y
		cmp	#140h
		bcs	exit$
skip0$		ldx	#2
skip$		cmp	#0a0h
		bcs	set$
		inx
		inx
		cmp	#060h
		bcs	set$
		inx
		inx
		cmp	#040h
		bcc	exit$
set$		phk				; program bank
		jsr	(!zusin_select,x)	; sub jump!
exit$		
		plx
		rtl
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
zusin_select	dw	0,A_short$,A_mid$,A_long$
		dw	0,B_short$,B_mid$,B_long$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A_short$	lda	#SE_zusin_S
		jml	(!screen_sound_A)
A_mid$		lda	#SE_zusin_M
		jml	(!screen_sound_A)
A_long$		lda	#SE_zusin_L
		jml	(!screen_sound_A)
B_short$	lda	#SE_zusin_S
		jml	(!screen_sound_B)
B_mid$		lda	#SE_zusin_M
		jml	(!screen_sound_B)
B_long$		lda	#SE_zusin_L
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;
;
;
;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
; ＯＢＪ衝突によるあたりの音(カメ）
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
; ＯＢＪ衝突によるあたりの音 (とばされてスピン）
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sound_enemy	lda	<_fire_register,x
		cmp	#player_r0
		bne	skip_2$
		lda	#SE_kame_enemy_S
		jml	(!screen_sound_A)
skip_2$		lda	#SE_kame_enemy_S
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
; ＯＢＪ衝突によるあたりの音 ( その場でスピン）
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sound_enemyspin	lda	<_fire_register,x
		cmp	#player_r0
		bne	skip_2$
;- - - - - - - - - - - - - - - - - - - - - - - -
		lda	#66h			; 近い
		jml	(!screen_sound_A)
skip_2$		lda	#66h			; 近い
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; 土管衝突音
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_dokan	bne	skip$
		lda	#SE_kame_dokan_S
		jml	(!screen_sound_A)
skip$		lda	#SE_kame_dokan_S
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
; ＯＢＪ衝突によるあたりの音(カメ）
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sound_kamebana	
		phy			; >>
		phx			; >>
		jsr	check_distance	; 画面上の距離チェック
		phk				; program bank
		jsr	(!banana_select,x)	; sub jump!
		plx			; <<
		ply			; <<
		rtl
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
banana_select	dw	0,A_short$,A_mid$,A_long$
		dw	0,B_short$,B_mid$,B_long$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
A_short$	lda	#SE_kame_bana_S
		jml	(!screen_sound_A)
A_mid$		lda	#SE_kame_bana_M
		jml	(!screen_sound_A)
A_long$		lda	#SE_kame_bana_L
		jml	(!screen_sound_A)
B_short$	lda	#SE_kame_bana_S
		jml	(!screen_sound_B)
B_mid$		lda	#SE_kame_bana_M
		jml	(!screen_sound_B)
B_long$		lda	#SE_kame_bana_L
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;
;
;
;
;
;
;
;
;
;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;	効果音
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
sound_myerase	bne	skip$			; マイカー消失音
		lda	#SE_myerase
		jmp	>Trigger_sound_1
skip$		lda	#SE_myerase
		jmp	>Trigger_sound_2
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_coin	lda	#SE_coin		; コイン音
		jml	(!screen_sound)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_balloon	lda	#SE_ballon		; 風船の割れる音
		jml	(!screen_sound)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_hirahira					; ヒラヒラ音
		lda	#SE_hirahira
		jml	(!screen_sound)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_crash	lda	#SE_crash		; マイカー衝突音
		jml	(!screen_sound)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_kame	bne	skip$			; カメ発射音
		lda	#SE_kame
		jml	(!screen_sound_A)
skip$		lda	#SE_kame
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_star	bne	skip$
		lda	#SE_star		; 敵 無敵 音
		jml	(!screen_sound_A)
skip$		lda	#SE_star
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;
;
;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_select					; セレクト音
		lda	#SE_select
		jmp	>Trigger_sound_1
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_set					; 決定音
		lda	#SE_set
		jmp	>Trigger_sound_1
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_cancel					; キャンセル音
		lda	#SE_cancel
		jmp	>Trigger_sound_1
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_rankout					; ランクアウト音
		lda	#SE_rankout
		jmp	>Trigger_sound_1
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;
;
;
;
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
						; y = player index
sound_rankup					; ランクの上がる音
		lda	#SE_rankup
		phx				; >>
		ldx	<_status,y
		lda	>type$,x
		plx				; <<
		jml	(!screen_sound)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
type$		DW	SE_rankup	; mario	
		DW	SE_rankup	; luige
		DW	SE_kuppa	; koopa	
		DW	SE_rankup	; peach	
		DW	SE_cong		; cong
		DW	SE_rankup	; kame
		DW	SE_rankup	; kinopio
		DW	SE_yossy	; yossy
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
						; y = player index
sound_rankdown					; ランクの下がる音
		phy				;>>
		phx				;  >>
		lda	!rank_number,y		; 上位のカートは？
		dec	a
		dec	a
		tax
		ldy	!rank_index,x
		ldx	<_flag,y
		bmi	exit$
		ldx	<_status,y
		lda	>type$,x
		beq	exit$
		plx				;  <<
		ply				;<<
		jml	(!screen_sound)
exit$		plx
		ply
		rtl
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
type$		DW	0		; mario	
		DW	0		; luige
		DW	SE_kuppa	; koopa	
		DW	0		; peach	
		DW	SE_cong		; cong
		DW	0		; kame
		DW	0		; kinopio
		DW	SE_yossy	; yossy
;======================================================================



;********************************************************************
;	通常の距離チェック
;********************************************************************
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;Ａスクリーンチェック

check_distance
		lda	<_distance_A,x		; 距離をチェック
		cmp	#120h
		bcs	skip$
	if	1
		SEP	#00100000B
		MEM8
		lda	<_posH_A+1,x		; 画面範囲をチェック
		inc	a
		REP	#00100000B
		MEM16
		bne	skip$
	endif
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;Ａ,Ｂ比較
		lda	<_distance_B,x
		cmp	#120h
		bcs	Aset$
	if	1
		SEP	#00100000B
		MEM8
		lda	<_posH_B+1,x
		inc	a
		REP	#00100000B
		MEM16
		bne	Aset$		
	endif
;- - - - - - - - - - - - - - - - - - -
		lda	<_distance_A,x
		cmp	<_distance_B,x
		bcs	Aset$
		bcc	Bset$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
;Ｂスクリーンチェック
skip$		lda	<_distance_B,x
		cmp	#120h
		bcs	return$

	if	1
		SEP	#00100000B
		MEM8
		lda	<_posH_B+1,x
		inc	a
		REP	#00100000B
		MEM16
		bne	return$
	endif
		bra	Bset$
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Aset$		txy
		ldx	#0
Aloop$		lda	>dist_data,x
		beq	return$		;遠いのはパス！
		cmp	!_distance_A,y
		inx
		inx
		bcs	Aloop$
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bset$		txy
		ldx	#8
Bloop$		lda	>dist_data-8,x
		beq	return$		;遠いのはパス！
		cmp	!_distance_B,y
		inx
		inx
		bcs	Bloop$
		rts
;- - - - - - - - - - - - - - - - - - - - -

return$		pla			; << del return value
		plx			; restore register
		ply			; restore register
		rtl			; sound call exit
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

;======================================================================
dist_data	dw	0c0h,60h,30h,0
;======================================================================
sound_banana
		ldx	<_status,y		; バナナ落とす音
		lda	!rank_number+player_r0
		cmp	!rank_number+player_r1
		bcs	skip$
		lda	>type_select,x
		jml	(!screen_sound_A)
skip$		lda	>type_select,x
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
sound_missile	lda	!rank_number+player_r0
		cmp	!rank_number+player_r1
		bcs	skip$
		lda	#SE_banana		; バナナ発射音
		jml	(!screen_sound_A)
skip$		lda	#SE_banana	
		jml	(!screen_sound_B)
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
type_select	DW	SE_kinoko	; mario	
		DW	SE_kinoko	; luige
		DW	SE_kuppa	; koopa	
		DW	SE_kinoko	; peach	
		DW	SE_cong		; cong
		DW	SE_kinoko	; kame
		DW	SE_kinoko	; kinopio
		DW	SE_yossy	; yossy
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;======================================================================
		glb	sound_1up
sound_1up	bne	skip$
		lda	#3bh
		jmp	>Trigger_sound_1
skip$		lda	#3bh
		jmp	>Trigger_sound_2
;======================================================================
		END
