東方弾幕風[Single]
#ScriptVersion[2]
#Title[白百合スペル1]

script_enemy_main{
	
	@Initialize{
		//データ初期化
		InitializeData();
		InitializeAction();
		
		//スペカインデックス決定
		spellNumber = "2";
		
		//スペカ分母を1増やして取得
		SetSpellData( player, difficult, spellNumber, "Parent" );
		spellPC = GetSpellData( player, difficult, spellNumber );
		
		//スペカ背景コントロールタスク起動
		BackGroundControl();
		
		//ライフ設定
		SetLife( 1000 );
		//初期位置設定
		Warp( CenterX, MinY + 120, 40 );
		//ダメージレート設定
		SetDamageRate( 25, 25 );
		//当たり判定設定
		SetCollisionEx( 32, 16, false, 180 );
		//エネミーマーカー
		SetEnemyMarker( true );
		
		//メインタスク開始
		TMain();
	}
	
	@MainLoop{
		//yieldループ
		yield;
	}
	
	@DrawLoop{
		//ボス画像描画
		SetGraphicScale( xscale, yscale );
		DrawBoss( imgBoss );
		
		//暫定スペカ履歴描画
		DrawText( IntToString( spellPC[ 0 ] ), 340, 64, 12, 255 );
		DrawText( "/",                         360, 64, 12, 255 );
		DrawText( IntToString( spellPC[ 1 ] ), 380, 64, 12, 255 );
	}
	
	@BackGround{
		//背景描画設定時のみ背景描画
		if( isDrawBackGround ){
			BackGroundDraw();
		}
	}
	
	@Finalize{
		//最終処理
		FinalizeData();
		
		//スペカを取得していた場合取得数プラス
		if( GotSpellCardBonus() ){
			SetSpellData( player, difficult, spellNumber, "Child" );
		}
	}
	
	/**
	 * メインタスク
	 */
	task TMain(){
		//60F(1秒)待つ
		FWait( 60 );
		
		//スペカ宣言
		DeclareSpell();
		
		//攻撃分岐
		alternative( difficult )
			case( "Easy" ){
				Atack_Easy();
			}
			case( "Normal" ){
				Atack_Normal();
			}
			case( "Panic" ){
				Atack_Panic();
			}
	}
	
	/**
	 * スペカ宣言
	 */
	function DeclareSpell(){
		//スペカ名取得
		let spellname = GetSpellName( player, difficult, spellNumber );
		
		//スコア設定
		SetScore( 20000000 );
		//制限時間設定
		SetTimer( 44 );
		//カットイン
		CutIn( KOUMA, spellname, NULL, 0, 0, 0, 0 );
		//スペカ発動音
		PlaySE( seUseSpell );
		//スペル発動アクション
		SetAction( ACT_SPELL, 120 );
		//120F(2秒)待つ
		FWait( 120 );
	}
	
	/**
	 * Easy 攻撃メインタスク
	 */
	task Atack_Easy(){
	}
	
	/**
	 * Normal 攻撃メインタスク
	 */
	task Atack_Normal(){
	}
	
	/**
	 * Panic 攻撃メインタスク
	 */
	task Atack_Panic(){
		let turn = 1;
		let x = 0;
		let y = 0;
		let angle = 0;
		let rad = 0;
		
		loop{
			x = CenterX + rand( 200, 240 ) * turn;
			y = -212 + rand( -24, 24 );
			angle = 90 + turn * 70 + rand( -10, 10 );
			rad = rand( 420, 460 );
			
			ascent( i in 0..8 ){
				Atack1( GetGapX( x, rad, angle ) + rand( -32, 32 ), GetGapY( y, rad, angle ) + rand( -32, 32 ), 80, 10 );
				angle -= rand( 8, 12 ) * turn;
				FWait( 7 );
				if( i == 4 ){
					let ex = GetPlayerX() + rand( -64, 64 );
					if( ex < MinX + 48 ){
						ex = MinX + 48;
					}else if( ex > MaxX - 48 ){
						ex = MaxX - 48;
					}
					let ey = MinY + 120 + rand( -12, 12 );
					Warp( ex, ey, 40 );
				}
			}
			
			turn *= -1;
			FWait( 30 );
			SetAction( ACT_SHOT_A, 60 );
			FWait( 30 );
			
			ascent( i in 0..54 ){
				ascent( j in 0..4 ){
					CreateShotA( 1, GetX(), GetY(), 20 );
					SetShotDataA( 1, 0, 1.6 + j * 0.6, i * 360 / 54, 0.4 * ( (j % 2) * 2 - 1 ), 0, 99, US_BALL_M_PURPLE );
					FireShot( 1 );
				}
			}
			
			FWait( 40 );
		}
	}
	
	/**
	 * 弾幕タスク1
	 */
	task Atack1( x, y, way, flower ){
		let speed = 0;
		let flowerwaynum = way / flower;
		let angle = rand( 0, 360 );
		
		if ( isDrawEffect ) {
			Explosion01( x, y, 16, 0.2, 60 );
		}
		ascent( i in 0..way ){
			speed = 1 + absolute( ( i % flower ) - ( flower / 2 ) ) * ( 3.2 / flowerwaynum );
			CreateShot01( x, y, speed, angle + i * 360 / way, US_RICE_M_GREEN, 40 );
		}
	}
	
	//スクリプトのインクルード
	#include_function ".\initialize.txt"
}