/*-----------------------*/
/*	PUSH☆SOUND！MARK♪　*/
/*-----------------------*/
#include "d3m.hsp"			//d3getfps
#include "GuruGuruSMF4.hsp"	//MIDIスムーズ再生、フェード用
#include "kernel32.as"

#define ERROR_ALREADY_EXISTS $B7	//二重起動防止用

GGS4OpenDevice devDirectMusic		//MIDIオープン
//display→dialog	デバッグ用
#module
//============================================================================
//関数名：画面上移動
//機能：上下移動、レベル調節
//引数：５個			  増減したい項目、押したキー、押すキー、増やす値、使っている画面
//============================================================================
#deffunc move_on_screen	 var item , var key_on , int key_value , int value , int slct_sc

	getkey key,key_value
	if(key){
		//押しっぱー禁止
		if(key_on = 0){
			item += value
			key_on = 1	//押しっぱー
			if(slct_sc){
				mmplay 26
			}
		}
	}
	else{
		//押しっぱー初期化
		key_on = 0
	}
	return

#global

//============================================================================

//============================================================================
//機能：メイン処理(C言語風)
//============================================================================
*main

	gosub *psm_main	//push sound markメインへ

*exit
	gosub *termination_processing

	end

//============================================================================
//機能：push sound markの各機能呼び出し
//============================================================================
*psm_main

	gosub *first_disposal
	gosub *logo
	gosub *title_screen
	gosub *main_top
	
	goto *exit
	
//============================================================================
//機能：最初の処理
//============================================================================
*first_disposal
	
	CreateMutex 0, 0, "HSPTEST"
	GetLastError
	if(stat = ERROR_ALREADY_EXISTS){
		//2重軌道防止
		end
	}

	gosub *all_value_init	

	;初期化
	title  title_charact
	screen 0, screenw, screenh, 1

	gosub *make_bgm_lst
	
	return


//============================================================================
//機能：曲ロード
//============================================================================
*make_bgm_lst
	sdim bgm_name   , memory , (max_bgm_num+se_num)	//音楽名格納用

    bgm_name.0  = "midi/dq1_1_ドラゴンクエストのテーマ.mid"        
    bgm_name.1  = "midi/dq1_2_アレフガルドのテーマ.mid"            
    bgm_name.2  = "midi/ff6_1_Prelude(FFのテーマ).mid"             
    bgm_name.3  = "midi/FF6_2_Prelude(ピアノアレンジ).mid"         
    bgm_name.4  = "midi/FF6_3_決戦(FF6ボス).mid"                   
    bgm_name.5  = "midi/fz2_KEEP_ON_THE_BEAT.mid"                  
    bgm_name.6  = "midi/fz3_SAARI.mid"                             
    bgm_name.7  = "midi/fz4_PROME.mid"                             
    bgm_name.8  = "midi/fz6_DON'T_STOP！.mid"                      
    bgm_name.9  = "midi/fz8_YA-DA-YO.mid"                          
    bgm_name.10 = "midi/エキサイティング.mid"                      
    bgm_name.11 = "midi/キャプテン翼Ⅴ(選択画面).mid"              
    bgm_name.12 = "midi/きらきら星.mid"                            
    bgm_name.13 = "midi/この木なんの木(試).mid"                    
    bgm_name.14 = "midi/スーパーマリオワールド(ステージクリア).mid"
    bgm_name.15 = "midi/ナイトガンダム物語_ラストバトル.mid"       
    bgm_name.16 = "midi/パチンコファン(タイトル画面).mid"          
    bgm_name.17 = "midi/へべれけ(パスワード画面).mid"              
    bgm_name.18 = "midi/ボンバーキング(1オープニング).mid"         
    bgm_name.19 = "midi/ボンバーキング(2ステージ).mid"             
    bgm_name.20 = "midi/ボンバーキング(3ゲームオーバー).mid"       
    bgm_name.21 = "midi/マリオペイント(作曲例1).mid"               
    bgm_name.22 = "midi/銅鑼王２(タイトル画面).mid"                
    bgm_name.23 = "midi/natukage-simple_arrenge-.mid"              
    bgm_name.24 = "midi/猫踏んじゃった！.mid"                      
 
	bgm_name.25 = "se/b_015.mp3"          							//ロゴ音
    bgm_name.26 = "se/p.wav"          								//選択音
    bgm_name.27 = "se/se_sad03.wav"          						//結果発表
    bgm_name.28 = "se/others_05_cymbal.mp3"          				//総合点表示

	//MIDIロード
    repeat max_bgm_num
        GGS4AddListFromFile bgm_name.cnt , 0 , cnt
    loop
    
 	//se用
	repeat se_num , max_bgm_num
        mmload bgm_name.cnt , cnt
	loop    

	return

//============================================================================
//機能：グローバル変数設定
//============================================================================
*all_value_init
	
	title_charact = "PUSH☆SOUND！MARK♪"
	screenw 		= 640
	screenh 		= 480

	difficulty_level = 1
	fall_speed = 3

	title_bgm = 16
	option_bgm = 17
	select_bgm = 11
	logo_se = 25
	
	memory = 64			//格納文字数
	max_bgm_num = 25	//音楽数
    se_num = 4			//SE数
	
	//クリア画面で使用
	first_chara_y = 150
	
	//cls_or_goファイルで使用
	game_over = 20
	congratulation = 14
	pic_slct_index_num = 0
	
	//ギャラリーモードで使用
	memory = 32
    pic_num = 34
    clr_flg = 0					//クリアフラグ
	dim savedata,max_bgm_num
	
	//ファイル有無確認
	exist "save.dat"
	if(strsize = -1){
		//ファイル無い時、データ設定
		repeat max_bgm_num
			savedata.cnt = 0
		loop
	}
	else{
		//ファイルある時、データ読み込み
		bload "save.dat",savedata,strsize
		repeat max_bgm_num
			if(savedata.cnt = 1){
				clr_flg = 1	//一つでもクリアしている物があればギャラリーモード解禁
			}
		loop
		
	}
	//落下処理で使用
    MAX_BEAT = 768      //ビート最大数

	//一致処理で使用
	match_num = 0   //一致数
	miss_num = 0	//失敗数
	lost_num = 0    //見逃し
	dim miss_flg	//失敗フラグ

	repeat MAX_BEAT
		miss_flg.cnt = 0
	loop
	
    gosub *make_bgm_value

    //一致処理で使用
    left_key_x = screenw/2 - (bgm_name_font-1)
    right_key_x = screenw/2 +1
    key_height = 30
	pushing = 1
	
	return


//============================================================================
//機能：終了処理
//============================================================================
*termination_processing
	
	GGS4ClearList
	
	bsave "save.dat",savedata

	return

//============================================================================
//機能：ロゴ画面
//============================================================================
*logo
	//ロゴ表示
	buffer 1				;仮想のバッファ画面を用意
	picload "bn/bn.gif"		;仮想のバッファ画面に画像ファイルの読み込みと画像の表示
	logo_w = ginfo_winx
	logo_h = ginfo_winy

	screen 0				;メインのウィンドウを表示
	gsel 0

	mmplay logo_se
	//フェードアウト
	repeat 255
		onexit *exit
		redraw 0
		color 255,255,255:boxf								//背景白
		gmode 3,0,0,255-cnt									//フェードアウト
		pos (screenw/2 - logo_w/2) , (screenh/2 - logo_h/2)	//表示位置
		gcopy 1, 0, 0, screenw, screenh						;仮想のバッファ画面から一部の画像データを切り出し
		await 10											//1000で１秒
		redraw 1
	loop
	
	return

//============================================================================
//機能：タイトル画面
//============================================================================
*title_screen

	//パチンコファン再生
    GGS4Play 1 , title_bgm
	
	title_font = 48
	reverse_switch = 0

	//移動用文字初期化
	gaide_message = "PRESS ENTER KEY!♪"
	gaide_font_size = 24
	gaide_move_value = gaide_font_size
	gaide_start_x = screenw/2 - (gaide_font_size*strlen( gaide_message ))/2
	gaide_x = gaide_start_x
	gaide_y = 175
	Enter = 0
	title_through = 0
	
	copyright = "Copyright(c)2013 YELLOW PAPER Ⅱ All Rights Reserved."
	copyright_font = 18

	//ENTER押し待ち
	repeat
		onexit *exit
		
		//タイトル表示
		gosub *show_title

		if(title_through = 1){
			break;
		}

		//促し表示
		color 255 , 0 , 0
		gaide_x = gaide_x + gaide_move_value
		pos gaide_x , gaide_y
	 	font "HGP創英角ﾎﾟｯﾌﾟ体" , gaide_font_size
	 	if(Enter = 0){	
			mes gaide_message
		}
		
		//左移動待ち
		if(reverse_switch = 0){
			if(gaide_x >= screenw/2){
				gaide_move_value *= -1
				reverse_switch = 1
			}
		}
		else{
			//右移動待ち
			if(gaide_x <= gaide_start_x){
				gaide_move_value *= -1
				reverse_switch = 0
			}
		}			
	
		repeat 50
			getkey Enter,13
			if(Enter){
				title_through = 1
			}
			await 10
		loop
		
		redraw 1
	loop

	return

//============================================================================
//機能：メインメニュー画面
//============================================================================
*main_top
	
	//ボタン表示	
	gosub *show_button
	
	repeat
		onexit *exit
		gosub *show_title
		if(end_button = 1){
			break;
		}
		wait 100
		redraw 1

	loop

	return

//============================================================================
//機能：メイン終了へ
//============================================================================
*main_end
	end_button = 1
	return 
	
//============================================================================
//機能：タイトル表示
//============================================================================
*show_title	
	
	//画面クリア
	color 255 , 255 , 0 :boxf
	
	//タイトル表示
	color 0 , 255 , 0		
	pos 62 , screenh/6
 	font "HGP創英角ﾎﾟｯﾌﾟ体" , title_font
	mes "PUSH☆SOUND！MARK♪"
	
	//コピーライト表示
	color 0 , 0 , 0		
	pos screenw/2 - (copyright_font/2*strlen(copyright))/2 + 25 , screenh-30
	font "msgothic" , copyright_font
	mes copyright

	return

//============================================================================
//機能：ボタン表示(タイトル画面専用)
//============================================================================
*show_button
	
	button_y = 224
	button_w = 120
	button_h = 24
	button_between = 28
	
	pos (screenw/2 - button_w/2) , button_y
  	objsize button_w , button_h , button_between
 
	button gosub "スタート",*arcade
	button gosub "トレーニング",*training_mode
	if(clr_flg = 1){
		button gosub "ギャラリー",*gallery_mode
	}
	else{
		button gosub "ギャラリー",*dummy
	}
	button gosub "オプション",*option
	button gosub "終わる",*main_end
	
	return

//============================================================================
//機能：クリア前ギャラリーモード
//============================================================================
*dummy
	
	return

//============================================================================
//機能：タイトル画面へ戻る時の処理(音楽再生と項目表示し直し)
//============================================================================
*return_title
	
	mmstop
	GGS4Play 1 ,title_bgm

	cls 0

	gosub *show_button
	return

//=====================================================
//機能：オプション画面
//=====================================================
*option
	
	option_text = "オプションせってい！"
	ot_fs = 32	//オプションテキストのフォントサイズ

	arrow_y = 50
	
	down_on = 0
	up_on = 0
	right_on = 0
	left_on = 0

	mmstop
	GGS4Play 1,option_bgm

	cls 0

	repeat
		onexit *exit

		gosub *show_option_item
	
		//下移動
		if(arrow_y < 200){
			move_on_screen arrow_y , down_on , 40 , 50 , 0
		}
		//上移動
		if(arrow_y > 50){
			move_on_screen arrow_y , up_on , 38 , -50 , 0
		}

		//難易度変更
		if(arrow_y = 50){
			if(difficulty_level < 3){
				move_on_screen difficulty_level , right_on , 39 , 1 , 0
			}
			if(difficulty_level > 1){
				move_on_screen difficulty_level , left_on , 37 , -1 , 0
			}
		}
		//落下スピード変更
		if(arrow_y = 100){
			if(fall_speed < 5){
				move_on_screen fall_speed , right_on , 39 , 1 , 0
			}
			if(fall_speed > 1){
				move_on_screen fall_speed , left_on , 37 , -1 , 0
			}
		}
		//押しっぱおっけー
		if(arrow_y = 150){
			if(pushing < 1){
				move_on_screen pushing , right_on , 39 , 1 , 0
			}
			if(pushing > 0){
				move_on_screen pushing , left_on , 37 , -1 , 0
			}
		}
		//戻る
		if(arrow_y = 200){
			getkey Enter,13
			if(Enter){
				break;
			}
		}

		wait 1
		redraw 1
			
	loop

	gosub *return_title

	return

//============================================================================
//機能：オプションの項目表示
//============================================================================
*show_option_item
	
	redraw 0
	//画面クリア
	color 255 , 255 , 0 :boxf

	//オプションテキスト
	color 0 , 0 , 0		
	pos 0 , 0
 	font "HGP創英角ﾎﾟｯﾌﾟ体" , ot_fs
	mes option_text
	
	//説明表示
	color 0 , 0 , 0		
	pos screenw*2/3 , ot_fs/2
 	font "HGP創英角ﾎﾟｯﾌﾟ体" , 16
	mes "（↑、↓キーで移動！）"
	
	//難易度表示
	color 0 , 0 , 0		
	pos 50 , 50
	font "msgothic" , 18
	mes "難易度　"+difficulty_level+"　（１～３）左右キーで調節してね♪"

	//落下速度表示
	color 0 , 0 , 0		
	pos 50 , 100
	font "msgothic" , 18
	mes "落下スピード　"+fall_speed+"　（１～５）左右キーで調節してね♪"

	//押しっぱOK
	color 0 , 0 , 0		
	pos 50 , 150
	font "msgothic" , 18
	if(pushing = 1){
		mes "キー押したままOK　（YES）左右キーで調節してね♪"
	}
	else{
		mes "キー押したままOK　 （NO）左右キーで調節してね♪"
	}
	
	//戻る表示
	color 0 , 0 , 0		
	pos 50 , 200
	font "msgothic" , 18
	mes "戻る　（エンターキーを押してね♪）"

	//矢印表示
	color 0 , 0 , 0		
	pos 25 , arrow_y
	font "msgothic" , 18
	mes "→"
	
	return


//============================================================================
//機能：アーケードモード
//============================================================================
*arcade
	
	training_flg = 0
	gosub *music_select
	
	return

//============================================================================
//機能：トレーニングモード
//============================================================================
*training_mode

	training_flg = 1
	gosub *music_select
	
	return

//============================================================================
//機能：選択画面
//============================================================================
*music_select

	//各音楽に関する値は、最初の初期化のところで初期化済
	down_on = 0
	up_on = 0
	backspace_on = 0
	Enter_on = 1 //Enterキー押しっぱ防止
	
	mmstop
	GGS4Play 1,select_bgm

	cls 0
	
	repeat
		onexit *exit
		redraw 0
		//画面クリア
		color 255 , 255 , 0 :boxf
	
		//音楽選択
		color 255 , 128 , 0		
		pos 0 , 0
		font "HGP創英角ﾎﾟｯﾌﾟ体" , bgm_name_font
		mes "　★MUSIC　SELECT★"

		//矢印
		color 0 , 0 , 0		
		pos 20 , 180
		font "HGP創英角ﾎﾟｯﾌﾟ体" ,  bgm_name_font
		mes "⇒"

		//選択案内
		color 255 , 128 , 0		
		pos 0 , screenh-28
		font "HGP創英角ﾎﾟｯﾌﾟ体" , 21
		mes "　↑↓で選んで、ENTERを押してね♪戻る時はBACKSPACEだよ！"
	
		//曲表示(常にソート状態)
		font "HGP創英角ﾎﾟｯﾌﾟ体" ,  bgm_name_font
		repeat 10
			onexit *exit
			if(index_num+cnt>=0 & index_num+cnt < 25){
				if(savedata.(index_num+cnt)=1){
					//表示色が水色
					color 0 , 255 , 255
				}
				else{
					//表示色が緑色
					color 0 , 255 , 0	
				}
			}
			else{
				//表示色が緑色
				color 0 , 255 , 0	
			}
			//真ん中だけ赤色
			if(cnt = 5){
				color 255 , 0 , 0
			}
			//最初の番号未満、最後の番号以降は表示しない
			if((index_num+cnt) < 0 | (index_num+cnt) > 24){
				lvl_ary.cnt = ""
			}
			else{
				lvl_ary.cnt = music.(cnt+index_num)
			}
			lvl_ary_x = 10*cnt	//下に行くほど右にずらして表示
			lvl_ary_y =  bgm_name_font*(cnt+1)
			pos lvl_ary_x , lvl_ary_y
			mes lvl_ary.cnt
		loop
	
		msc_sentence.0 = msc_sentence1.(index_num+5)
		msc_sentence.1 = msc_sentence2.(index_num+5)
		msc_sentence.2 = msc_sentence3.(index_num+5)
		msc_sentence.3 = msc_sentence4.(index_num+5)

		color 255 , 128 , 0		
		font "HGP創英角ﾎﾟｯﾌﾟ体" ,  bgm_name_font*2/3
		//曲説明表示
		repeat 4
			onexit *exit
			pos screenw/2 , bgm_name_font*(cnt+1)
			mes msc_sentence.cnt
		loop
		
		//	今さしてる位置が-5番目より大きかったら上に行ける
		if(index_num > (0 - bgm_show_num/2)){
			move_on_screen index_num , up_on , 38 , -1 , 1
		}
		//	今さしてる位置が19個目より小さかったら下に行ける
		if(index_num < (max_bgm_num - bgm_show_num/2 - 1)){
			move_on_screen index_num , down_on , 40 , 1 , 1
		}

		//音楽選択
		getkey Enter,13
		if(Enter){
			if(Enter_on = 0){
				GGS4Stop 5000
				gosub *push_sound_mark
				if(training_flg =0 & backspace_on = 0){
					break
				}
			}
			Enter_on = 1
		}
		else{
			Enter_on = 0
		}

		//タイトル画面に戻る	
		getkey backspace , 8
		if(backspace){
			if(backspace_on = 0){
				backspace_on = 1
				break
			}
		}
		else{
			backspace_on = 0
		}
		wait 1
		redraw 1
	loop

	gosub *return_title

	return

//============================================================================
//機能：音楽の値作成
//============================================================================
*make_bgm_value

	bgm_name_font = 30
	index_num = 0		//インデックス番号　選択している現在位置のこと

	lvl_ary_x=0	//ラベル配列のx
	lvl_ary_y=0	//ラベル配列のy
	
	bgm_show_num = 10	//曲名を表示する数
	max_bgm_num = 25	//音楽最大数
	memory = 64			//文字を格納できる文字数
	
	;--------------------------------

	sdim lvl_ary , memory , bgm_show_num		//ラベル配列　インデックスから±5個分表示用
	sdim music   , memory , max_bgm_num			//音楽

	sdim msc_sentence  , memory , 4				//音楽文章1～4行目を格納する配列
	sdim msc_sentence1 , memory , max_bgm_num	//音楽文章1行目
	sdim msc_sentence2 , memory , max_bgm_num	//音楽文章2行目
	sdim msc_sentence3 , memory , max_bgm_num	//音楽文章3行目
	sdim msc_sentence4 , memory , max_bgm_num	//音楽文章4行目

	dim msc_time_len	//音楽時間長さ
	dim msc_bpm			//音楽BPM
	dim msc_time_rhythm	//音楽拍子
 
 	;----------------------------------
    
    gosub *make_bgm_name

    gosub *make_msc_sentence1
    gosub *make_msc_sentence2
    gosub *make_msc_sentence3
    gosub *make_msc_sentence4

    gosub *make_msc_time_len
    gosub *make_msc_bpm
    gosub *make_msc_time_rhythm

    return

//============================================================================
//機能：音楽名作成
//============================================================================
*make_bgm_name
    music.0 ="ドラゴンクエストのテーマ"
    music.1 ="アレフガルドのテーマ"
    music.2 ="Prelude"
    music.3 ="Prelude"
    music.4 ="決戦"
    music.5 ="KEEP ON THE BEAT"
    music.6 ="SAARI"
    music.7 ="PROME"
    music.8 ="DON'T STOP！"
    music.9 ="YA-DA-YO"
    music.10="エキサイティング"
    music.11="キャプテン翼Ⅴ"
    music.12="きらきら星"
    music.13="この木なんの木"
    music.14="スーパーマリオワールド"
    music.15="ナイトガンダム物語"
    music.16="パチンコファン"
    music.17="へべれけ"
    music.18="ボンバーキングOP"
    music.19="ボンバーキング中"
    music.20="ボンバーキングGO"
    music.21="マリオペイント"
    music.22="銅鑼王２"
    music.23="夏影 -simple arrenge-"
    music.24="猫踏んじゃった！"

    return
 
//============================================================================
//機能：音楽文章1行目設定
//============================================================================
*make_msc_sentence1

    msc_sentence1.0 ="ロトと天空の伝説は"
    msc_sentence1.1 ="アレフガルドの平和を取り戻すため"
    msc_sentence1.2 ="FFのテーマ。"
    msc_sentence1.3 ="ピアノアレンジ版。"
    msc_sentence1.4 ="FF6ボス曲。"
    msc_sentence1.5 ="FZ 2面曲。"
    msc_sentence1.6 ="FZ 3面曲。"
    msc_sentence1.7 ="FZ 4面曲。"
    msc_sentence1.8 ="FZ 6面曲。"
    msc_sentence1.9 ="FZラスボス曲。"
    msc_sentence1.10="音楽つくーるかなでーる２のサンプル。"
    msc_sentence1.11="選択画面の音楽。"
    msc_sentence1.12="マリオペイントから持ってきました。"
    msc_sentence1.13="ザ・日立！"
    msc_sentence1.14="ステージクリア。"
    msc_sentence1.15="ラストバトルの音楽。宿命のライバル、"
    msc_sentence1.16="タイトル画面の音楽。"
    msc_sentence1.17="パスワード画面の音楽。"
    msc_sentence1.18="オープニング。"
    msc_sentence1.19="ステージ中。"
    msc_sentence1.20="ゲームオーバーの曲。"
    msc_sentence1.21="作曲サンプル1。"
    msc_sentence1.22="タイトル画面の曲。"
    msc_sentence1.23="夏の落とし影に、涼しさを感じて・・・。"
    msc_sentence1.24="わーごめんよー！"

    return

//============================================================================
//機能：音楽文章2行目設定
//============================================================================
*make_msc_sentence2

    msc_sentence2.0 ="　いつまでも続く・・・。"
    msc_sentence2.1 ="勇者は平原を行く！"
    msc_sentence2.2 ="クリスタルは永遠に・・・。"
    msc_sentence2.3 =""
    msc_sentence2.4 =""
    msc_sentence2.5 ="ビートを刻み続けろ～！"
    msc_sentence2.6 ="砂漠の星を行き進め～！"
    msc_sentence2.7 ="街道、お金の降る面です。"
    msc_sentence2.8 ="止まるな～！"
    msc_sentence2.9 ="お前なんか近づかないでくれ～！"
    msc_sentence2.10="エキサイティングだぜ！"
    msc_sentence2.11="中毒性注意！"
    msc_sentence2.12="どんな人もきらきら輝いてる。"
    msc_sentence2.13="試曲なので簡単です。"
    msc_sentence2.14="やったね！喜ぼう！"
    msc_sentence2.15="ブラックドラゴンを倒せ！"
    msc_sentence2.16="娯楽はほのぼの～。"
    msc_sentence2.17="悲しき復活の儀式・・・。"
    msc_sentence2.18="星が蝕まれてゆく・・・。"
    msc_sentence2.19="豊かなアルタイルを取り戻せ！"
    msc_sentence2.20="ナイトよ、死んでしまうとは・・・。"
    msc_sentence2.21="山面アスレチックの音楽です。"
    msc_sentence2.22="まーまーじゃん。"
    msc_sentence2.23="もうゴールしても、いいよね？"
    msc_sentence2.24="どうしよどうしよー！？"

    return

//============================================================================
//機能：音楽文章3行目設定
//============================================================================
*make_msc_sentence3

    msc_sentence3.0 ="0:54　(BPM　150)"
    msc_sentence3.1 ="0:34　(BPM　113)"
    msc_sentence3.2 ="1:22　(BPM　 95)"
    msc_sentence3.3 ="1:11　(BPM　120)"
    msc_sentence3.4 ="1:46　(BPM　210)"
    msc_sentence3.5 ="1:09　(BPM　127)"
    msc_sentence3.6 ="1:09　(BPM　120)"
    msc_sentence3.7 ="1:22　(BPM　150)"
    msc_sentence3.8 ="0:56　(BPM　150)"
    msc_sentence3.9 ="0:45　(BPM　195)"
    msc_sentence3.10="1:43　(BPM　162)"
    msc_sentence3.11="0:23　(BPM　135)"
    msc_sentence3.12="0:25　(BPM　120)"
    msc_sentence3.13="0:17　(BPM　120)"
    msc_sentence3.14="0:09　(BPM　150)"
    msc_sentence3.15="1:02　(BPM　114)"
    msc_sentence3.16="0:33　(BPM　120)"
    msc_sentence3.17="1:16　(BPM　 82)"
    msc_sentence3.18="0:16　(BPM　140)"
    msc_sentence3.19="0:58　(BPM　135)"
    msc_sentence3.20="0:17　(BPM　120)"
    msc_sentence3.21="0:20　(BPM　150)"
    msc_sentence3.22="1:01　(BPM　110→130)"
    msc_sentence3.23="0:44　(BPM　150)"
    msc_sentence3.24="0:36　(BPM　240)"

    return

//============================================================================
//機能：音楽文章4行目設定
//============================================================================
*make_msc_sentence4

    msc_sentence4.0 ="(0:27×2)"
    msc_sentence4.1 ="(0:17×2)"
    msc_sentence4.2 =""
    msc_sentence4.3 =""
    msc_sentence4.4 ="(0:53×2)"
    msc_sentence4.5 ="(intro0:07+0:07～0:38(0:31)×2)"
    msc_sentence4.6 ="(intro0:03+0:03～0:36(0:33)×2)"
    msc_sentence4.7 ="(intro0:02+0:02～0:42(0:40)×2)"
    msc_sentence4.8 ="(intro0:02+0:02～0:29(0:27)×2)"
    msc_sentence4.9 ="(intro0:05+0:05～0:25(0:20)×2)"
    msc_sentence4.10=""
    msc_sentence4.11=""
    msc_sentence4.12=""
    msc_sentence4.13=""
    msc_sentence4.14=""
    msc_sentence4.15=""
    msc_sentence4.16=""
    msc_sentence4.17="(0:38×2)"
    msc_sentence4.18=""
    msc_sentence4.19=""
    msc_sentence4.20=""
    msc_sentence4.21=""
    msc_sentence4.22=""
    msc_sentence4.23="(0:39 + fadeout 0:05)"
    msc_sentence4.24=""

    return

//============================================================================
//機能：各音楽の時間の長さ(秒)設定
//============================================================================
*make_msc_time_len

	msc_time_len.0 = 54
    msc_time_len.1 = 34
    msc_time_len.2 = 82
    msc_time_len.3 = 71
    msc_time_len.4 =106
    msc_time_len.5 = 69
    msc_time_len.6 = 69
    msc_time_len.7 = 82
    msc_time_len.8 = 56
    msc_time_len.9 = 45
    msc_time_len.10=103
    msc_time_len.11= 23
    msc_time_len.12= 25
    msc_time_len.13= 17
    msc_time_len.14=  9
    msc_time_len.15= 62
    msc_time_len.16= 33
    msc_time_len.17= 76
    msc_time_len.18= 16
    msc_time_len.19= 58
    msc_time_len.20= 17
    msc_time_len.21= 20
    msc_time_len.22= 61
    msc_time_len.23= 44
    msc_time_len.24= 36

    return

//============================================================================
//機能：BPM設定
//============================================================================
*make_msc_bpm

    msc_bpm.0 =150
    msc_bpm.1 =113
    msc_bpm.2 = 95
    msc_bpm.3 =120
    msc_bpm.4 =210
    msc_bpm.5 =127
    msc_bpm.6 =120
    msc_bpm.7 =150
    msc_bpm.8 =150
    msc_bpm.9 =195
    msc_bpm.10=162
    msc_bpm.11=135
    msc_bpm.12=120
    msc_bpm.13=120
    msc_bpm.14=150
    msc_bpm.15=114
    msc_bpm.16=120
    msc_bpm.17= 82
    msc_bpm.18=140
    msc_bpm.19=135
    msc_bpm.20=120
    msc_bpm.21=150
    msc_bpm.22=110
    msc_bpm.23=150
    msc_bpm.24=240

    return

//============================================================================
//機能：拍子設定
//============================================================================
*make_msc_time_rhythm
    
    msc_time_rhythm.0 =4
    msc_time_rhythm.1 =4
    msc_time_rhythm.2 =4
    msc_time_rhythm.3 =4
    msc_time_rhythm.4 =4
    msc_time_rhythm.5 =4
    msc_time_rhythm.6 =4
    msc_time_rhythm.7 =4
    msc_time_rhythm.8 =4
    msc_time_rhythm.9 =4
    msc_time_rhythm.10=4
    msc_time_rhythm.11=4
    msc_time_rhythm.12=4
    msc_time_rhythm.13=4
    msc_time_rhythm.14=4
    msc_time_rhythm.15=4
    msc_time_rhythm.16=4
    msc_time_rhythm.17=4
    msc_time_rhythm.18=4
    msc_time_rhythm.19=4
    msc_time_rhythm.20=4
    msc_time_rhythm.21=4
    msc_time_rhythm.22=4
    msc_time_rhythm.23=4
    msc_time_rhythm.24=4

	return

//============================================================================
//機能：プレイ中処理
//============================================================================
*push_sound_mark

	score = 0
	score_font = 20
	wait_time = 1000.0/60	//時間の間隔
	time_display = ""		//時間進行表示
	
	ready_time = 3	//準備時間
	delay_time = 3	//猶予時間
	//落下時間
    //落下消費時間 = 時間→間隔*( (HEIGHT - キー高さ*3) - キー高さ*2)/落下スピード  //0.01 *(480-90-60)/3=1.1 秒
    //時間=距離/速度=1ループにかかる時間x(消えるタイミングの位置-現れ始める位置)	//0.016*(480-90-40)/3=1.94秒     
    fall_time = double(wait_time)/1000 * double((screenh - bgm_name_font*3) - 40) / fall_speed
    
	time_advance_num = double(-ready_time) + (-delay_time) + (-fall_time)	//時間進行数(準備時間と再生前猶予)
	if(fall_speed = 1){
		play_timing = -0.90
	}
	else:if(fall_speed = 2){
		play_timing = -0.60
	}
	else{
		play_timing = -0.50
	}
	
	bgmplay_sw = 0

	//一致用キー色初期化
    match_left_color = 0
    match_right_color = 0
	
	gosub *bgm_set
	gosub *make_beat
	gosub *delete_show_beat
	
	//秒数の合計(差分計算の為に合計値を出している)
	start_time = double(gettime(4))*3600 + gettime(5)*60 + gettime(6)-time_advance_num + double(gettime(7))/1000
	
	repeat
		onexit *exit
		redraw 0
		//背景クリア
		color 255 , 255 , 0 :boxf
	
		//鍵盤表示
		gosub *show_keyboard
        //キー押下処理
        gosub *key_on_process
		//一致用鍵盤表示
		gosub *show_key_for_match

		//----------------------------------------------------

		font "HGP創英角ﾎﾟｯﾌﾟ体" , score_font

		//スコア表示
		if(training_flg = 0){
			color 255 , 128 , 0
			pos 0 , 0
			mes "SCORE　"+score
		}
		//曲名表示
		color 0 , 128 , 255
		//ginfoを得るための見えない位置での表示	
		pos 0 , -score_font	: mes music.(index_num+5)
		pos screenw/2 - ginfo(14)/2 , 0
		mes music.(index_num+5)		
	
		color 255 , 128 , 0

		//時間進行数
		time_advance_num = double(gettime(4))*3600 + gettime(5)*60 + gettime(6)-start_time + double(gettime(7))/1000

		//ARE YOU READY!?表示(3秒)
		if(time_advance_num < -ready_time-delay_time){
			pos 0 , -score_font : mes "ARE YOU READY!?"
			pos screenw/2 - ginfo(14)/2 , 100 : mes "ARE YOU READY!?"
		}
		else{
			//再生前待ち
			gosub *music_judgment	//曲判断へ
			if(time_advance_num >= play_timing){
	
				if(bgmplay_sw = 0){
					GGS4Play 0,(index_num+5)
					bgmplay_sw = 1
				}
				else{
					//経過時間表示
					time_display = strf("%d:%02d",time_advance_num/60,time_advance_num\60)
					//time_display =  "："+int(time_advance_num)
					pos 0 , -30 : mes time_display
					pos screenw - ginfo(14) , 0 : mes time_display
					//mes d3getfps()
				}
			}
			//時間とBPM表示
			font "HGP創英角ﾎﾟｯﾌﾟ体" , score_font
			pos 0 , -score_font : mes msc_sentence3.(index_num+5)
			pos screenw/2 - ginfo(14)/2 , score_font : mes msc_sentence3.(index_num+5)
		}
		
		//選択画面に戻る	
		getkey backspace , 8
		if(backspace){
			backspace_on = 1
			GGS4Play 1 , select_bgm
			break
		}
	
		//音楽終了時
		//時間進行数が、設定した曲の秒数＋１(マージン)を超えたら
		if(time_advance_num > msc_time_len.(index_num+5)+1){
			gosub *result
			if(training_flg = 1){
				GGS4Play 1 , select_bgm
			}
			break
		}
	
		await wait_time

		redraw 1
	loop


	return

//============================================================================
//機能：けっかせいさん画面
//============================================================================
*result
	redraw 0
	color 255 , 255 , 0 :boxf
	font "HGP創英角ﾎﾟｯﾌﾟ体" , 20
	
	//けっかせいさん
	color 255 , 128 , 0
	pos 0 , 0
	mes "けっかせいさん"
	
	//曲名
	color 0 , 128 , 255
	pos 0 , -score_font	: mes music.(index_num+5)	//ginfoを得るための見えない位置での表示	
	pos screenw/2 - ginfo(14)/2 , 0
	mes music.(index_num+5)
	
	//曲説明表示
	color 255 , 128 , 0	
	repeat 4
		onexit *exit
		pos screenw/2 , bgm_name_font*(cnt+1)
		mes msc_sentence.cnt
	loop
	
	gosub *show_clrsc_item	//項目表示
	redraw 1
	
	gosub *show_clrsc_item_result	//結果表示
	
	wait_sec=300
	gosub *through_wait

	getKey Enter,13
	if(Enter){
		through_flg = 1
	}

	color 255 , 255 , 0 :boxf
	
	//アーケードの場合のみクリア画面へ
	if(training_flg = 0){
	
		if(match_num+miss_num+lost_num = 0 ){
			//非クリア時
			goal = 0	//画像表示OFF
			gosub *clear_screen		
		}
		else:if(int(match_num*100/(match_num+miss_num+lost_num) ) > 66){
			//クリア時
			goal = 1	//画像表示ON
			clr_bgm_num = index_num + 5
			gosub *clear_screen
			savedata.clr_bgm_num = 1
			clr_flg = 1
		}
		else{
			//非クリア時
			goal = 0	//画像表示OFF
			gosub *clear_screen	
		}
	}
	return

//============================================================================
//機能：クリア画面の結果待ち飛ばし
//============================================================================
*through_wait
	passage_time=0
	repeat
		onexit *exit
		await 10
		passage_time++
		if(through_flg = 0){
			getkey Enter,13
			if(Enter){
				through_flg=1
				break
			}
			else{
				through_flg=0
			}
		}
		getkey Enter,13
		if(Enter=0){
			through_flg=0
		}
		if(passage_time > wait_sec){
			break
		}
	loop
	
	return

//============================================================================
//機能：クリア画面項目表示
//============================================================================
*show_clrsc_item
	
	color 255 , 128 , 0
	pos 120 , (first_chara_y + bgm_name_font * 0)
	mes "全ビート数"
	
	color 0 , 128 , 255
	pos 150 , (first_chara_y + bgm_name_font * 1)
	mes "一致数"
	
	color 255 , 0 , 128
	pos 150 , (first_chara_y + bgm_name_font * 2)
	mes "全体失敗数"
	
	color 255 , 0 , 128
	pos 180 , (first_chara_y + bgm_name_font * 3)
	mes "一致失敗数"
	
	color 255 , 0 , 128
	pos 180 , (first_chara_y + bgm_name_font * 4)
	mes "見逃し"
	
	color 128 , 0 , 255
	pos 150 , (first_chara_y + bgm_name_font * 5)
	mes "ビート一致率"
	
	color 128 , 0 , 255
	pos 150 , (first_chara_y + bgm_name_font * 6)
	mes "全体一致率"
	
	if(training_flg = 0){
		color 255 , 128 , 0
		pos 120 ,(first_chara_y + bgm_name_font * 7)
		mes "スコア"	
	}
	return 

//============================================================================
//機能：クリア画面項目内容表示
//============================================================================
*show_clrsc_item_result

	wait_sec=200
	gosub *through_wait
	mmplay 27
	
	color 255 , 128 , 0
	pos 320 , (first_chara_y + bgm_name_font * 0)
	//全ビート数=一致数+失敗数+見逃し
	mes (match_num + miss_num + lost_num)

	wait_sec=200
	gosub *through_wait
	mmplay 27
	
	color 0 , 128 , 255
	pos 320 ,(first_chara_y + bgm_name_font * 1)
	//一致数
	mes match_num
	
	wait_sec=200
	gosub *through_wait
	mmplay 27
	
	color 255 , 0 , 128
	pos 320 ,(first_chara_y + bgm_name_font * 2)
	//全体失敗数=失敗数+見逃し
	mes (miss_num + lost_num)
	
	wait_sec=200
	gosub *through_wait
	mmplay 27
	
	color 255 , 0 , 128
	pos 320 ,(first_chara_y + bgm_name_font * 3)
	//一致失敗数
	mes miss_num
	
	wait_sec=200
	gosub *through_wait
	mmplay 27
	
	color 255 , 0 , 128
	pos 320 ,(first_chara_y + bgm_name_font * 4)
	//見逃し
	mes lost_num
	
	wait_sec=200
	gosub *through_wait
	mmplay 27
	
	color 128 , 0 , 255
	pos 320 ,(first_chara_y + bgm_name_font * 5)
	if(match_num+miss_num=0){
		mes "0％"
	}
	else{
		//ビート一致率=一致数÷(一致数+失敗数)
		mes ""+int(match_num*100/(match_num+miss_num) )+"％"
	}
	wait_sec=200
	gosub *through_wait
	mmplay 27
	
	color 128 , 0 , 255
	pos 320 ,(first_chara_y + bgm_name_font * 6)
	if(match_num+miss_num+lost_num=0){
		mes "0％"
	}
	else{
		//全体一致率
		mes ""+int(match_num*100/(match_num+miss_num+lost_num) )+"％"
	}
	if(training_flg = 0){
		wait_sec=200
		gosub *through_wait
		mmplay 28

		color 255 , 128 , 0
		pos 320 ,(first_chara_y + bgm_name_font * 7)
		mes score
	}

	return

//============================================================================
//機能：キー押下処理
//============================================================================
*key_on_process

	font "HGP創英角ﾎﾟｯﾌﾟ体" , 30

    //左側----------------------------------------------------
    key_num = 0
	getkey Left , 37
	if(Left){
	    //キー押したときは青く
		color 0 , 128 , 255
	}
	else{
        //通常は橙色
		color 255 , 128 , 0
	}
	pos screenw/2-(bgm_name_font-1) , screenh-bgm_name_font
	mes "←"
    on_flg = Left  //引数設定
    gosub *match_process  //一致処理

    //右側----------------------------------------------------
    key_num = 1
	getkey Right , 39
	if(Right){
	    //キー押したときは青く
		color 0 , 128 , 255
	}
	else{
        //通常は橙色
		color 255 , 128 , 0
	}
	pos screenw/2+1 , screenh-bgm_name_font
	mes "→"
    on_flg = Right  //引数設定
    gosub *match_process  //一致処理

    return
	
//============================================================================
//機能：一致用鍵盤表示
//============================================================================
*show_key_for_match
	
	color 255 , 128 , 0

	//一致用矢印表示
	if(match_left_color = 1){
		color 0 , 128 , 255
	}
	else:if(match_left_color = 2){
		color 255 , 0 , 0
	}
	else{
		color 255 , 128 , 0	
	}
	pos screenw/2 - (bgm_name_font-1) , screenh - (bgm_name_font*2 + bgm_name_font)
	mes "←"
	if(match_right_color = 1){
		color 0 , 128 , 255
		
	}
	else:if(match_right_color = 2){
		color 255 , 0 , 0
	}
	else{
		color 255 , 128 , 0	
	}
	pos screenw/2 +1 , screenh - (bgm_name_font*2 + bgm_name_font)
	mes "→"
		
	return

//============================================================================
//機能：鍵盤表示
//============================================================================
*show_keyboard
	//鍵盤のライン
	color 0 , 0 , 0
	boxf screenw/2-bgm_name_font , screenh-bgm_name_font*2 , screenw/2+bgm_name_font , screenh
	
	//鍵盤の白
	color 255 , 255 , 255
	//	X左上、			Y右上、			X左下、	Y右下
	boxf screenw/2-(bgm_name_font-1) , screenh-(bgm_name_font*2-1) , screenw/2-1 , screenh-1
	boxf screenw/2+1 , screenh-(bgm_name_font*2-1) , screenw/2+(bgm_name_font-1) , screenh-1
	
	//鍵盤の黒
	color 0 , 0 , 0
	boxf screenw/2-10 , screenh-(bgm_name_font*2) , screenw/2+10 , screenh-bgm_name_font

	//OK線
	//boxf 0 , screenh - key_height*3- 20 , screenw , screenh - key_height*3- 20
	//boxf 0 , screenh - key_height*3- 10 , screenw , screenh - key_height*3- 10
	//boxf 0 , screenh - key_height*3 + 5 , screenw , screenh - key_height*3 + 5

	//pos 0,100
	//mes continue_flg

	return


//============================================================================
//機能：落下物表示、クリア/ゲームオーバー画面表示
//============================================================================
#include "cls_or_go.hsp"
#include "keyfall.hsp"
#include "match.hsp"

