//--------------------
//XRAVXe
//--------------------

let m_Score_PlayerScore = 0;
let m_Score_PlayerHiScore = 0;
let m_Score_ExtendCount = 0;
let m_Score_HitComboCountMax = 0;

let m_Score_ShieldBonus = 0;
let m_Score_TimeBonus = 0;
let m_Score_SnipeBonus = 0;
let m_Score_NagoyaBonus = 0;
let m_Score_SpecialBonus = 0;
let m_Score_SpecialBonusAddition = 0;
let m_Score_SpecialBonusBase = 0;
let m_Score_PlayerLifeBonus = 0;
let m_Score_BonusTotal = 0;

let m_Score_DisplayResult = false;
let m_Score_DisplayResultStep = 0;

let m_Score_LastStage = false;

//XRAǉ
function func_Score_Add(let val)
{

	m_Score_PlayerScore += val;
	if(m_Score_PlayerScore >= m_Score_PlayerHiScore){m_Score_PlayerHiScore = m_Score_PlayerScore; }
	func_Score_TestExtend();

}//end function

function func_Score_Get()
{
	return m_Score_PlayerScore;
}//end function

function func_Score_GetHiScore()
{
	return m_Score_PlayerHiScore;
}//end function


//GNXeh
function func_Score_ExtendPlayer()
{
	PlaySE(se_Extend);
	main_Effect_PopString(GetPlayerX(), GetPlayerY()-30, "EXTEND", [255, 50, 250, 100]);
	ExtendPlayer(1);
}//end function

//GNXeh
function func_Score_TestExtend()
{
	//3000, 7000, 10000, 15000, 22000, 31000, 42000, 55000
	let norma_pt;
	norma_pt = 5000 + 1000 * ((m_Score_ExtendCount * m_Score_ExtendCount) + 1);
	if(m_Score_ExtendCount == 0){ norma_pt = 3000; }

	if(m_Score_PlayerScore >= norma_pt)
	{
		m_Score_ExtendCount++;

		PlaySE(se_Extend);
		main_Effect_PopString(GetPlayerX(), GetPlayerY()-30, "EXTEND", [255, 50, 250, 100]);

		if(GetPlayerLife() < 9){ ExtendPlayer(1); }
		else{ func_Score_Add(4000); }

	}

}//end function


function func_Score_ResetBonus()
{
	m_Score_ShieldBonus = 0;
	m_Score_TimeBonus = 0;
	m_Score_SnipeBonus = 0;
	m_Score_NagoyaBonus = 0;
	m_Score_SpecialBonus = 0;
	m_Score_BonusTotal = 0;
	m_Score_HitComboCountMax = 0;
	m_Score_SpecialBonusAddition =0;
	m_Score_PlayerLifeBonus = 0;

}//end function


//ځ[Ȃ
function func_Score_TestBonus()
{
	local{
		let shield_count = GetCommonDataDefaultEx("INVADER","ScoreBonus.ShieldCount", 0);
		m_Score_ShieldBonus = trunc(shield_count) * 10;
	}
	local{
		let last_enemy_dist = GetCommonDataDefaultEx("INVADER","ScoreBonus.LastEnemyDistance", 0);
		m_Score_TimeBonus = trunc(last_enemy_dist / 10) * 10;
	}
	local{
		m_Score_SnipeBonus = [0, m_Score_HitComboCountMax][m_Score_HitComboCountMax >= 5] * 20;
	}
	local{
		let nagoya_count = GetCommonDataDefaultEx("INVADER","ScoreBonus.NagoyaCount", 0);
		m_Score_NagoyaBonus = trunc(nagoya_count) * 50;
	}

	local{
		let special_rate = REMY_Math_Max(0, 10 - func_Beam_GetExtraShotCount());
		if(special_rate > 0){
			m_Score_SpecialBonusAddition = (special_rate * 10);
			m_Score_SpecialBonus = m_Score_SpecialBonusBase + m_Score_SpecialBonusAddition;
			m_Score_SpecialBonusBase = m_Score_SpecialBonus;
		}
	}

	if(m_Score_LastStage)
	{
		m_Score_PlayerLifeBonus = 2000 * (GetPlayerLife() - const_PlayerLifeZero);
	}

	m_Score_BonusTotal = m_Score_TimeBonus + m_Score_ShieldBonus + m_Score_SnipeBonus + m_Score_NagoyaBonus + m_Score_SpecialBonus + m_Score_PlayerLifeBonus;

}//end function

//Ug\
function wait_Score_ResultScene()
{

	func_Score_TestBonus();//{[iXvZ
	func_Score_SetContinueDataClear();//ReBj[f[^̐ݒ

	m_Score_DisplayResult = true;
	m_Score_DisplayResultStep = 0;
	loop(20){ yield; }

	ascent(i in 1..6)
	{
		m_Score_DisplayResultStep = i;
		loop(10){ yield; }
	}

	loop(30){ yield; }

	ascent(i in 6..11)
	{
		m_Score_DisplayResultStep = i;
		PlaySE(se_Bonus2);
		loop(40){ yield; }
		while(func_Stage_IsGameover()){ yield; }
	}

	if(m_Score_LastStage)
	{
		PlaySE(se_Bonus2);
		m_Score_DisplayResultStep = 11;
		loop(120){ yield; }
	}

	m_Score_DisplayResultStep = 12;
	PlaySE(se_Bonus1);
	loop(2){ yield; }

	func_Score_Add(m_Score_BonusTotal);
	loop(240){ yield; }
	while(func_Stage_IsGameover()){ yield; }

	m_Score_DisplayResult = false;

}//end function


function draw_Score_DrawResult()
{
	if(!m_Score_DisplayResult){ return; }

	SetTexture(img_System);
	SetGraphicScale(1,1);

	draw_item(GetCenterX(), 60, "BONUS");
	if(m_Score_DisplayResultStep == 0){ return; }

	draw_item(GetCenterX() - 90, 120, "TIME");
	if(m_Score_DisplayResultStep == 1){ return; }
	draw_item(GetCenterX() - 90, 150, "SHIELD");
	if(m_Score_DisplayResultStep == 2){ return; }
	draw_item(GetCenterX() - 90, 180, "INVADED");
	if(m_Score_DisplayResultStep == 3){ return; }
	draw_item(GetCenterX() - 90, 210, "NAGOYA");
	if(m_Score_DisplayResultStep == 4){ return; }
	draw_item(GetCenterX() - 90, 240, "SPECIAL");
	if(m_Score_DisplayResultStep == 5){ return; }
	draw_score(GetCenterX() + 90, 120, m_Score_TimeBonus);
	if(m_Score_DisplayResultStep == 6){ return; }
	draw_score(GetCenterX() + 90, 150, m_Score_ShieldBonus);
	if(m_Score_DisplayResultStep == 7){ return; }
	draw_score(GetCenterX() + 90, 180, m_Score_SnipeBonus);
	if(m_Score_DisplayResultStep == 8){ return; }
	draw_score(GetCenterX() + 90, 210, m_Score_NagoyaBonus);
	if(m_Score_DisplayResultStep == 9){ return; }
	draw_score(GetCenterX() + 90, 240, m_Score_SpecialBonus);
	draw_score2(GetCenterX() + 100, 240, m_Score_SpecialBonusAddition);

	if(m_Score_DisplayResultStep == 10){ return; }

	if(m_Score_LastStage)
	{
		draw_item(GetCenterX() - 90, 280, "PLAYER");
		draw_score(GetCenterX() + 90, 280, m_Score_PlayerLifeBonus);
	}

	if(m_Score_DisplayResultStep == 11){ return; }

	draw_item(GetCenterX() - 90, 310, "TOTAL");
	draw_score(GetCenterX() + 90, 310, m_Score_BonusTotal);

	//-------------
	function draw_item(let x, let y, let type){
		let rect = func_GetGraphicRect(type);
		SetGraphicRect(rect[0],rect[1],rect[2],rect[3]);
		SetColor(255,255,255);
		DrawGraphic(x, y);
	}
	function draw_score(let x, let y, let val)
	{
		let pl = REMY_Math_IntLength(val, 1);
		let s = REMY_Math_IntToString(val, 1);
		draw_DrawString(x- (pl * 12), y, s, 12, [255, 100, 200, 250]);
	}
	function draw_score2(let x, let y, let val)
	{
		let s = REMY_Math_IntToString(val, 1);
		draw_DrawString(x, y, "(+" ~ s ~ ")", 12, [255, 100, 200, 250]);
	}


}//end function


//R{eXg
function func_Score_TestHitCombo()
{
	let combo = GetCommonDataDefaultEx("INVADER","ScoreBonus.HitComboCount", 0);

	if(combo > m_Score_HitComboCountMax)
	{
		m_Score_HitComboCountMax = combo;
		
	}

}//end function

//ŏIXe[W
function func_Score_SetLastStage()
{
	m_Score_LastStage = true;
}//end function


function func_Score_SaveScore()
{
	SetCommonDataEx("INVADER_SAVE", "Game.HiScore", m_Score_PlayerHiScore);
	SaveCommonDataEx("INVADER_SAVE", GetCurrentScriptDirectory() ~ "score.dat");
}//end function

function func_Score_LoadScore()
{
	LoadCommonDataEx("INVADER_SAVE", GetCurrentScriptDirectory()~ "score.dat");
	m_Score_PlayerHiScore = GetCommonDataDefaultEx("INVADER_SAVE", "Game.HiScore", 0);

	//ReBj[\ǂ
	func_SetContinueEnable(GetCommonDataDefaultEx("INVADER_SAVE","Game.ContinueEnable", false));

}//end function

//ReBj[f[^̃[h
function func_Score_LoadContinueData()
{

	func_Stage_SetFirstStage(GetCommonDataDefaultEx("INVADER_SAVE", "Game.ClearedStage", 1));
	m_Score_ExtendCount = GetCommonDataDefaultEx("INVADER_SAVE","Game.ExtendCount", 0);
	let life = GetCommonDataDefaultEx("INVADER_SAVE","Game.PlayerLife", 1);
	ExtendPlayer(life - GetPlayerLife());
	m_Score_PlayerScore = GetCommonDataDefaultEx("INVADER_SAVE","Game.Score", 0);

	//Vbg
	let stock_base = GetCommonDataDefaultEx("INVADER_SAVE","Game.ExtraShot", 0);
	func_Beam_AddShotStock(trunc(stock_base / 10));
	func_Beam_AddPower(stock_base % 10);

	let special_base = GetCommonDataDefaultEx("INVADER_SAVE","Game.SpecialShot", 0);
	loop(special_base % 10){ func_SpecialBeam_Equip(trunc(special_base /10)); }

}//end function

//ReBj[f[^̐ݒBXe[WNÃUgOɌĂ΂
//Ugrŗsւ̑΍B
function func_Score_SetContinueDataClear()
{
	if(func_Stage_IsGameover()){ return; }

	let stage = GetCommonDataDefaultEx("INVADER", "Stage.Count", 1);
	SetCommonDataEx("INVADER_SAVE","Game.ContinueEnable", true);
	SetCommonDataEx("INVADER_SAVE","Game.ClearedStage", REMY_Math_Min(stage + 1, 20));
	SetCommonDataEx("INVADER_SAVE","Game.ExtendCount", m_Score_ExtendCount);
	SetCommonDataEx("INVADER_SAVE","Game.PlayerLife", GetPlayerLife());
	SetCommonDataEx("INVADER_SAVE","Game.Score", m_Score_PlayerScore + m_Score_BonusTotal);
	SetCommonDataEx("INVADER_SAVE","Game.ExtraShot", func_Beam_GetStockCount()*10 + func_Beam_GetPower());
	SetCommonDataEx("INVADER_SAVE","Game.SpecialShot", func_SpecialBeam_GetEquip()*10 + func_SpecialBeam_GetLevel());
	func_Score_SaveScore();

}//end function

//ReBj[f[^̐ݒBXe[WJnOɌĂ΂
function func_Score_SetContinueDataStart()
{
	if(func_Stage_IsGameover()){ return; }

	let stage = GetCommonDataDefaultEx("INVADER", "Stage.Count", 1);
	SetCommonDataEx("INVADER_SAVE","Game.ContinueEnable", true);
	SetCommonDataEx("INVADER_SAVE","Game.ClearedStage", stage);
	SetCommonDataEx("INVADER_SAVE","Game.ExtendCount", m_Score_ExtendCount);
	SetCommonDataEx("INVADER_SAVE","Game.PlayerLife", GetPlayerLife());
	SetCommonDataEx("INVADER_SAVE","Game.Score", m_Score_PlayerScore);
	SetCommonDataEx("INVADER_SAVE","Game.ExtraShot", func_Beam_GetStockCount()*10 + func_Beam_GetPower());
	SetCommonDataEx("INVADER_SAVE","Game.SpecialShot", func_SpecialBeam_GetEquip()*10 + func_SpecialBeam_GetLevel());
	func_Score_SaveScore();

}//end function


//ReBj[f[^ŁBQ[I[o[ƃNAɌĂ΂
function func_Score_ResetContinueData()
{
	SetCommonDataEx("INVADER_SAVE","Game.ContinueEnable", false);
	SetCommonDataEx("INVADER_SAVE","Game.ClearedStage", 1);
	SetCommonDataEx("INVADER_SAVE","Game.ExtendCount", 0);
	SetCommonDataEx("INVADER_SAVE","Game.PlayerLife", 0);
	SetCommonDataEx("INVADER_SAVE","Game.Score", 0);
	SetCommonDataEx("INVADER_SAVE","Game.ExtraShot", 0);
	SetCommonDataEx("INVADER_SAVE","Game.SpecialShot", 0);
	func_Score_SaveScore();
	
}//end function

//|[Yj[IƂɌĂ΂BXRAɂPăXgbN炷
function func_Score_SetContinueDataRetire()
{
	let score = GetCommonDataDefaultEx("INVADER_SAVE","Game.Score", 0);
	if(score % 10 < 9){score++;}
	SetCommonDataEx("INVADER_SAVE","Game.Score", score);
	SetCommonDataEx("INVADER_SAVE","Game.SpecialShot", 0);

	let stock_base = GetCommonDataDefaultEx("INVADER_SAVE","Game.ExtraShot", 0);
	stock_base = trunc(stock_base / 20) *10 + stock_base % 10;
	SetCommonDataEx("INVADER_SAVE","Game.ExtraShot", stock_base);
	func_Score_SaveScore();

}

