;ゲームオーバーのサウンドは Call_BGM でコール
;*********************************************************************
;	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
;----------------------------------------------------------------------
		ext	Pause_off_sound
		ext	Call_BGM
		GLB	Set_over_char
		GLB	Init_gameover,Set_gameover,Open_gameover
		glb	Init_katimake,Set_kati,Set_make
		ext	Sprite_set
		ext	Reform_sprite
		ext	sound_rankout
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
		glb	Set_out_char1,Set_out_char2
		glb	Init_rankout,Set_rankout
;----------------------------------------------------------------------
		ORG	over_work
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
over_G	DS	10
over_A	DS	10
over_M	DS	10
over_O	DS	10
over_V	DS	10
over_E	DS	10
over_R	DS	10
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
_pX	EQU	0
_pY	EQU	2
_sX	EQU	4
_sY	EQU	6
_cn	EQU	8
;----------------------------------------------------------------------
	COMN
work	DS	2
counter	DS	2
posX	DS	2
posY	DS	2
bound	DS	2
;----------------------------------------------------------------------
		EXTEND
objdata	SECT	REL
		mem16
		idx16
;####################################################################
;		かちまけ処理
;####################################################################

;*********************************************************************
;		かちまけキャライニシャル
;*********************************************************************
km_vram		dw	5c00h,5d00h,5e00h
		dw	6c00h,6d00h,6e00h

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
km_char		EQU	7FB600H
km_rom		dw	km_char+0,km_char+200h,km_char+400h
		dw	km_char+0,km_char+200h,km_char+400h
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Init_katimake	PHB
		PHK
		PLB
		dec	a		; -1
		cmp	#6		; 0 から 5　
		bcc	skip$	
		lda	#5		; 6 以上は 5
skip$		asl	a
		tax
		lda	#200h
		sta	!trans_count
		lda	!km_rom,x
		sta	!trans_address
		lda	#km_char/65536
		sta	!trans_bank
		lda	!km_vram,x
		sta	!trans_vram
		plb
		rtl
;*********************************************************************
;		かちまけキャラセット
;*********************************************************************
pos_km		equ	3448h
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Set_kati	PHB
		PHK
		PLB
;
;- - - - - - - - - - - - - - - - - - - - - - 
		lda	#pos_km
		ldy	#win_sprite
		jsr	Common_set
;- - - - - - - - - - - - - - - - - - - - - - 
		jsr	count_win
		lda	#pos_km+40h
		jsr	OBJ_bigword
;- - - - - - - - - - - - - - - - - - - - - - 
		jsr	count_lost
		lda	#pos_km+58h	
		jsr	OBJ_bigword
;- - - - - - - - - - - - - - - - - - - - - - 
;
		JSL	>Reform_sprite
		plb
		rtl
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Set_make	PHB
		PHK
		PLB
;
;- - - - - - - - - - - - - - - - - - - - - - 
		lda	#pos_km
		ldy	#lost_sprite
		jsr	Common_set
;- - - - - - - - - - - - - - - - - - - - - - 
		jsr	count_win
		lda	#pos_km+40h
		jsr	OBJ_bigword
;- - - - - - - - - - - - - - - - - - - - - - 
		jsr	count_lost
		lda	#pos_km+58h
		jsr	OBJ_bigword
;- - - - - - - - - - - - - - - - - - - - - - 
		JSL	>Reform_sprite
		plb
		rtl
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Common_set	pha
		jsr	Sprite_set
		pla
		ldy	#score_sprite
		jmp	Sprite_set
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
count_win	lda	#0
		bra	count_entry	
; - - - - - - - - - - - - - - - - - - - 
count_lost	lda	#2
count_entry	eor	<screen_register
		ldx	<game_status
		cpx	#6
		bne	skip$	
		clc
		adc	#4
skip$		tax
		ldy	!m_win_count,x
		rts
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 






;$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$
;--------------------------------------------------------------------
;	日本語バージョン
;--------------------------------------------------------------------
	if	JAP_VER
;- - - - -
win_sprite	db	4,29h
		dw	0000h
		db	0c6h,0c7h,0cah,0cbh
		db	4,29h
		dw	0800h
		db	0c8h,0c9h,0cch,0cdh
		db	0
lost_sprite	db	4,29h
		dw	0000h
		db	0ceh,0cfh,0d2h,0d3h
		db	4,29h
		dw	0800h
		db	0d0h,0d1h,0d4h,0d5h
		db	0

;- - - - - 
score_sprite
		db	1,29h
		dw	0028h
		db	0d6h
		db	1,29h
		dw	0050h
		db	0ech
		db	1,29h
		dw	0068h
		db	0eeh
;- - - - - 
		db	1,29h
		dw	0828h
		db	0d7h
		db	1,29h
		dw	0850h
		db	0edh
		db	1,29h
		dw	0868h
		db	0efh
		db	0
;- - - - - 

		endif
;--------------------------------------------------------------------
;	英語バージョン
;--------------------------------------------------------------------

	if	ENG_VER

win_sprite	db	3,29h
		dw	0000h
		db	0c8h,0cah,0cch
		db	3,29h
		dw	0800h
		db	0c9h,0cbh,0cdh
		db	0
lost_sprite	db	4,29h
		dw	0000h
		db	0ceh,0d0h,0d2h,0d4h
		db	4,29h
		dw	0800h
		db	0cfh,0d1h,0d3h,0d5h
		db	0
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
score_sprite
		db	1,29h		; ! ;
		dw	0024h
		db	0d7h
		db	1,29h		; ! ;
		dw	0824h
		db	0ech
;- - - - - - - - 
		db	1,29h		; --- ;
		dw	0550h
		db	0d6h
;- - - - - - - - -
		db	1,29h		; W - L ;
		dw	0f747h
		db	0edh
		db	1,29h
		dw	0f75fh
		db	0eeh
;- - - - - - - - -
		db	0

	endif


;$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$
;
;
;
;
;
;
;
;
;
;
;- - - - - - - - - - - - - - - - - - - - - -
OBJ_bigword	phy			;>>
		tax			;  >>
		tya			
		LSR	A
		LSR	A
		LSR	A
		LSR	A
		beq	skip$
		tay
		txa			;  <<
		jsr	OBJ_bigbyte
skip$		txa			; x = position data
		CLC
		ADC	#8
		ply			;<<
;- - - - - - - - - - - - - - - - - - - - - -
					; y = number data 
					; a = position VH
OBJ_bigbyte	pha			; >>
		ldx	<sprite_count		
		clc
		adc	<screen_obj_V
		sta	<sprite_H+0,x
		tya
		and	#0fh
		tay
		lda	!number_high+0,y
		and	#00ffh
		ora	#2900h
		sta	<sprite_C+0,x
		inc	a
		sta	<sprite_C+4,x
		lda	<sprite_H+0,x
		CLC
		ADC	#0800h
		sta	<sprite_H+4,x
		txa
		CLC
		ADC	#8
		sta	<sprite_count
		plx			; <<
		rts
;- - - - - - - - - - - - - - - - - - - - - -
number_high	db	0d8h,0dah,0dch,0deh,0e0h
		db	0e2h,0e4h,0e6h,0e8h,0eah
;*********************************************************************
;		GAME OVER NMI 処理
;*********************************************************************
;#####################################################################
;		ランクアウト処理
;#####################################################################
rankout2_VRAM	dw	5e00h,6e00h
rankout1_VRAM	dw	5c00h,6c00h
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Set_out_char2	LDX	<screen_register
		LDA	#MOJI_buffer+1000H+400H
		LDY	!rankout2_VRAM,x
		BRA	skip_1000
;- - - - - - - - - - - - - - - - - - - - - - - - - -
Set_out_char1	LDX	<screen_register
		LDA	#MOJI_buffer+1000H
		LDY	!rankout1_VRAM,x
skip_1000	STA	!trans_address
		STY	!trans_vram
		LDA	#400H
		STA	!trans_count
		LDA	#BANK		MOJI_buffer
		STA	!trans_bank
		RTS
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Init_rankout
		LDY	<screen_register
		lda	#48h
		sta	!rankout_SEtimer,y
		LDX	!over_select,Y
		LDY	#rankout_data
		JSR	Init_block
		RTS
;--------------------------------------------------------------------
Set_rankout	LDY	<screen_register
		LDX	!over_select,Y	; ワーク先頭の index
		STX	<register

;- - - - - - - - - - - - - - - - - - - - - - -
		lda	!rankout_SEtimer,y
		beq	skip$
		dec	a
		sta	!rankout_SEtimer,y
		bne	skip$
		jsl	>sound_rankout
skip$
;- - - - - - - - - - - - - - - - - - - - - - -

		LDA	#9		; 全体の個数
		STA	<counter
loop$		LDX	<register
		LDA	#6400H
		LDY	#6200H		; バウンド係数
		JSR	Move_sprite
		JSR	Set_sprite
		LDA	<register
		CLC
		ADC	#10
		STA	<register
		DEC	<counter
		BNE	loop$
		RTS
;- - - - - - - - - - - - - - - - - - - - - - -
rd	equ	05ch		; rankout data X corner pos
rankout_data	
		db	rd+00H,0FEH-0CH*6,8
		db	rd+08H,0FEH-0CH*6,9
		db	rd+10H,0FEH-0CH*6,10
		db	rd+18H,0FEH-0CH*6,11
		db	rd+20H,0FEH-0CH*6,12
		db	rd+28H,0FEH-0CH*6,13
		db	rd+38H,0FEH-0CH*6,14
		db	rd+40H,0FEH-0CH*6,15
		db	rd+48H,0FEH-0CH*6,16
		db	0
;- - - - - - - - - - - - - - - - - - - - - - -


;####################################################################
;		ゲームオーバー処理
;####################################################################
;*********************************************************************
;		GAME OVER NMI 処理
;*********************************************************************
over_vram	DW	5000H,6000H
;
;$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$
;;	over_char	EQU	7FB400H		; 日本語 version
over_char	EQU	7FB000H			; 英語 version
;$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$
;
;	X=0 ... 1p , X=2 ... 2p
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Set_over_char	PHB
		PHK
		PLB
		STZ	!player_count,X		; GAME OVER
		LDA	#400H
		STA	!trans_count
		LDA	#over_char
		STA	!trans_address
		LDA	#over_char/65536
		STA	!trans_bank
		LDA	!over_vram,X
		STA	!trans_vram
		PLB
		RTL
;*********************************************************************
;		Game Over Sprite Animation
;*********************************************************************
over_select	dw	00h
		dw	80h
;- - - - - - - - - - - - - - - - - - - - - - - - - -
	IF	JAP_VER
over_data	db	058H,0FEH-0CH*0,0
		db	064H,0FEH-0CH*1,1
		db	070H,0FEH-0CH*2,2
		db	088H,0FEH-0CH*3,3
		db	094H,0FEH-0CH*4,4
		db	0A0H,0FEH-0CH*5,5
		db	0ACH,0FEH-0CH*6,6
		db	0
	ENDIF
;- - - - - - - - - - - - - - - - - - - - - - - - - -
;
;- - - - - - - - - - - - - - - - - - - - - - - - - -
ov		equ	060h

	IF	ENG_VER

over_data	db	ov+000H,0FEH-0CH*0,0
		db	ov+008H,0FEH-0CH*1,1
		db	ov+010H,0FEH-0CH*2,2
		db	ov+018H,0FEH-0CH*3,3
		db	ov+028H,0FEH-0CH*4,4
		db	ov+030H,0FEH-0CH*5,5
		db	ov+038H,0FEH-0CH*6,6
		db	ov+040H,0FEH-0CH*7,7
		db	0
	ENDIF
;- - - - - - - - - - - - - - - - - - - - - - - - - -
;
;
;
;--------------------------------------------------------------------

Init_gameover	
		lda	!goal_flag
		and	#2000h
		bne	skip$

		jsl	>Pause_off_sound
		lda	#14h
		jsl	>Call_BGM
skip$		
Open_gameover
		PHB
		PHK
		PLB
		LDY	<screen_register
		LDX	<player_index,y

	;;;;;	STZ	<driver_point,x
		STZ	<kart_area,x

		LDX	!over_select,Y
		LDY	#over_data
		JSR	Init_block
		PLB
		RTL
;--------------------------------------------------------------------
Set_gameover	PHB
		PHK
		PLB
;- - - - - - - - - - - - - - - - - - - - - - -
		LDY	<screen_register
		LDX	!over_select,Y
		STX	<register
		LDA	#8
		STA	<counter
loop$		LDX	<register
		LDA	#4800H		; 
		LDY	#6C00H		; 
		JSR	Move_sprite
		JSR	Set_sprite
		LDA	<register
		CLC
		ADC	#10
		STA	<register
		DEC	<counter
		BNE	loop$
		PLB
		RTL
;- - - - - - - - - - - - - - - - - - - - - - -




;--------------------------------------------------------------------
;	ブロック単位ＯＢＪの初期設定
;--------------------------------------------------------------------
Init_block
loop$		LDA	!0,Y
		AND	#000FFH
		BEQ	exit$
		XBA
		STA	>over_work+_pX,X
		LDA	!1,Y
		AND	#000FFH
		XBA
		STA	>over_work+_pY,X
		lda	#0
		STA	>over_work+_sX,X
		STA	>over_work+_sY,X
		LDA	!2,Y
		AND	#00FFH
		ASL	A
		STA	>over_work+_cn,X
;- - - - - - - - - - - - - - - - - - - - - - -
		INY
		INY
		INY
		TXA
		CLC
		ADC	#10
		TAX
		BRA	loop$
exit$		RTS		
;--------------------------------------------------------------------
;	ブロック単位ＯＢＪの座標移動
;--------------------------------------------------------------------
Move_sprite
;- - - - - - - - - - - - - - - - - - -
		STY	<bound		; バウンド係数
		STA	<work		; 下位置 set
		LDA	>over_work+_sY,X
		CLC
		ADC	#0028H		; 重力
		BMI	skip0$
		CMP	#0300H		; スピードリミット
		BCS	skip$
skip0$		STA	>over_work+_sY,X
skip$
		LDA	>over_work+_pY,X
		CLC
		ADC	>over_work+_sY,X
		BMI	skip2$
		CMP	<work
		BCC	skip2$
;- - - - - - - - - - - - - - - - - - -
		SEP	#00100000B
		MEM8
		lda	#dsp_multiply
		sta	!DSP_data
		REP	#00100000B
		MEM16
		lda	>over_work+_sY,X
		eor	#0ffffh
		inc	a
		sta	!DSP_data
		lda	<bound		; バウンド係数
		sta	!DSP_data
		lda	!DSP_data
		sta	>over_work+_sY,X
;- - - - - - - - - -
		LDA	<work		; 停止
;- - - - - - - - - - - - - - - - - - -
skip2$		STA	>over_work+_pY,X
		RTS





;--------------------------------------------------------------------
;	ブロック単位ＯＢＪのＯＡＭセット
;--------------------------------------------------------------------
Set_sprite
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
		LDA	#0
		SEP	#00100000B
		MEM8
		LDA	>over_work+_pX+1,X	;ポジションのセット
		STA	<posX
		LDA	>over_work+_pY+1,X
		CLC
		ADC	<screen_obj_V+1
		STA	<posY
;- - - - - - - - - - - - - - - - - - - - - - - - - - -
		LDA	>over_work+_cn,X
		TAY
		LDX	!over_character,Y
		TXY
		LDX	<sprite_count
		LDA	!0,Y
		BNE	sp_1char		
;- - - - - - - - - - - - - - - - - - - - - - - - - - -



;= 4x4 sprite = = = = = = = = = = = = = = = = = = = = =
;				

	if	JAP_VER

sp_4char	
		LDA	<posX		
		STA	<sprite_H+04,X
		STA	<sprite_H+12,X
		SEC
		SBC	#8
		STA	<sprite_H+00,X
		STA	<sprite_H+08,X
;
		LDA	<posY
		SEC
		SBC	#8
		STA	<sprite_V+08,X
		STA	<sprite_V+12,X
		SEC
		SBC	#8
		STA	<sprite_V+00,X
		STA	<sprite_V+04,X
;
		LDA	!1,Y
		STA	<sprite_A+00,X
		STA	<sprite_A+04,X
		STA	<sprite_A+08,X
		STA	<sprite_A+12,X
;
		LDA	!2,Y
		STA	<sprite_C+00,X
		LDA	!3,Y
		STA	<sprite_C+04,X
		LDA	!4,Y
		STA	<sprite_C+08,X
		LDA	!5,Y
		STA	<sprite_C+12,X
			
		REP	#00100001B
		MEM16
		TXA
		ADC	#10H
		STA	<sprite_count
		RTS

	endif

;= 2x1 sprite = = = = = = = = = = = = = = = = = = = = =


	if	ENG_VER
;- - - - - - - - - - - - - 
		mem8

		LDA	<posX
		SEC
		SBC	#4
		STA	<sprite_H+00,X
		STA	<sprite_H+04,X
;
		LDA	<posY
		SEC
		SBC	#8
		STA	<sprite_V+00,X
		SEC
		SBC	#8
		STA	<sprite_V+04,X
;
		LDA	!1,Y
		STA	<sprite_A+00,X
		STA	<sprite_A+04,X
;
		LDA	!2,Y
		STA	<sprite_C+00,X
		LDA	!3,Y
		STA	<sprite_C+04,X
;
		REP	#00100001B
		MEM16
		TXA
		ADC	#8
		STA	<sprite_count
		RTS

	endif


;= 1x1 sprite = = = = = = = = = = = = = = = = = = = = =

		mem8
sp_1char
		LDA	<posX		
		SEC
		SBC	#4
		STA	<sprite_H+00,X
		LDA	<posY	
		SEC
		SBC	#8
		STA	<sprite_V+00,X
		LDA	!1,Y		
		STA	<sprite_A+00,X
		LDA	!2,Y		
		STA	<sprite_C+00,X
		INX
		INX
		INX
		INX
		STX	<sprite_count
		REP	#00100000B
		MEM16
		RTS

;$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$
;--------------------------------------------------------------------
;	日本語 version
;--------------------------------------------------------------------
	if	JAP_VER
;- - - - - - - - - -
over_character	DW	data_G,data_A,data_M
		DW	data_O,data_V,data_E,data_R
;- - - - - - - - - - - - - - - - - - - - - - -
data_G		DB	00h,29h
		DB	06h,07h,08h,09h		; character
;- - - - - - - - - - - - - - - - - - - - - - -
data_R
data_V
data_A		DB	01h,29h,05h
;- - - - - - - - - - - - - - - - - - - - - - -
data_M		db	00h,29h
		db	0ah,0bh,0ch,0dh
;- - - - - - - - - - - - - - - - - - - - - - -
data_O		db	00h,29h
		db	0eh,0fh,10h,11h
;- - - - - - - - - - - - - - - - - - - - - - -
data_E		db	00h,29h
		db	12h,13h,14h,15h
;- - - - - - - - - - - - - - - - - - - - - - -
	endif
;--------------------------------------------------------------------
;	英語 version
;--------------------------------------------------------------------

	if	ENG_VER

over_character	DW	data_G,data_A,data_M,data_E
		DW	data_O,data_V,data_Ex,data_R

		DW	out_R,out_A,out_N,out_K,out_E,out_D
		DW	out_O,out_U,out_T

;- - - - - - - - - - - - - - - - - - - - - - -
data_G		db	00h,39h,01h,00h
data_A		db	00h,39h,03h,02h
data_M		db	00h,39h,05h,04h
data_E		db	00h,39h,07h,06h
data_O		db	00h,39h,09h,08h
data_V		db	00h,39h,0bh,0ah
data_Ex		db	00h,39h,0dh,0ch
data_R		db	00h,39h,0fh,0eh
;- - - - - - - - - - - - - - - - - - - - - - -
out_R		db	00h,3bh,0e7h,0e6h
out_A		db	00h,3bh,0e9h,0e8h
out_N		db	00h,3bh,0ebh,0eah
out_K		db	00h,3bh,0edh,0ech
out_E		db	00h,3bh,0efh,0eeh
out_D		db	00h,3bh,0f1h,0f0h
out_O		db	00h,3bh,0f3h,0f2h
out_U		db	00h,3bh,0f5h,0f4h
out_T		db	00h,3bh,0f7h,0f6h
;- - - - - - - - - - - - - - - - - - - - - - -
	endif

;$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$-$
		END
