//////////////////////////////////////////////////////////////////////
//====================================================================
//
//	Framework of LunAtic Notation
//	(c)2006 danmaq
//
//		※ボス本体スクリプト用
//
//====================================================================
//////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////
//	下位ライブラリをインクルードする
//////////////////////////////////////////////////////////////////////

#include_function "\lib\FLAN\LIB\Common.dnh"
#include_function "\lib\FLAN\LIB\Common_without_Event.dnh"
#include_function "\lib\FLAN\LIB\Enemy_Shot_Shadow_Stage_Player.dnh"
#include_function "\lib\FLAN\LIB\Player_Spell_Enemy_Shot_Shadow.dnh"
#include_function "\lib\FLAN\LIB\Spell_Enemy_Shot_Shadow.dnh"
#include_function "\lib\FLAN\LIB\Stage_Enemy_Shot_Shadow.dnh"
#include_function "\lib\FLAN\LIB\Enemy_Shot_Shadow.dnh"
#include_function "\lib\FLAN\LIB\Enemy_Shadow.dnh"
#include_function "\lib\FLAN\LIB\Enemy_Shot.dnh"
#include_function "\lib\FLAN\LIB\Enemy.dnh"
#include_function "\lib\FLAN\LIB\Boss.dnh"


//////////////////////////////////////////////////////////////////////
//	初期化処理(コンストラクタ)
//////////////////////////////////////////////////////////////////////

@Initialize(){
	m_nFlanEnemyKind = FLAN_ENEMY_KIND_BOSS;
	m_bFlanPlural = GetCommonDataDefault( FLAN_CDNS, false );
	__FlanCommonEnemyInitialize();
	SetCommonDataEx( FLAN_CDNS, FLAN_CD_BOSS_ENABLE, true );
	if(
		!( GetCommonDataDefaultEx( FLAN_CDNS, FLAN_CD_STAGE_ENABLE, false ) || GetCommonDataDefaultEx( FLAN_CDNS, FLAN_CD_PLAYER_ENABLE, false ) )
	){
		__SetSlowKeyStateDelayLoop();
		__DrawCountLoop();
	}
	__PlayTimeOutSELoop();
}


//////////////////////////////////////////////////////////////////////
//	毎フレーム呼ばれる処理
//////////////////////////////////////////////////////////////////////

@MainLoop(){
	if( !OnEnemySpell() ){ DeleteCommonDataEx( FLAN_CDNS, FLAN_CD_BOSS_SPELL_SCORE ); }
	else{ SetCommonDataEx( FLAN_CDNS, FLAN_CD_BOSS_SPELL_SCORE, GetSpellCardBonusScore() ); }
	SetCommonDataEx( FLAN_CDNS, FLAN_CD_BOSS_EVENT_ENABLE, OnEvent() );
	yield;
}


//////////////////////////////////////////////////////////////////////
//	終了処理(デストラクタ)
//////////////////////////////////////////////////////////////////////

@Finalize(){
	__FlanCommonEnemyFinalize();
	DeleteCommonDataEx( FLAN_CDNS, FLAN_CD_BOSS_ENABLE );
}


//////////////////////////////////////////////////////////////////////
//	絵画処理
//////////////////////////////////////////////////////////////////////

@DrawLoop(){
	let anStackData = m_anFlanStackCacheData[ m_nFlanPhaseHandle ];
	if( FLAN_BOSS_ENABLE_BGG_ON_UNSPELL ){ onBackGround( m_vFlanArgv, m_nFlanLevel, m_nFlanCount, anStackData[ 0 ], m_nFlanPhaseCount, m_nFlanPrevPhase ); }
	__FlanCommonEnemyShotDrawLoop();
}


//////////////////////////////////////////////////////////////////////
//	背景絵画処理
//////////////////////////////////////////////////////////////////////

@BackGround(){
	if( !FLAN_BOSS_ENABLE_BGG_ON_UNSPELL ){
		let anStackData = m_anFlanStackCacheData[ m_nFlanPhaseHandle ];
		onBackGround( m_vFlanArgv, m_nFlanLevel, m_nFlanCount, anStackData[ 0 ], m_nFlanPhaseCount, m_nFlanPrevPhase );
	}
}
