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

script_enemy_main{
	
	@Initialize{
		//データ初期化
		InitializeData();
		InitializeAction();
		
		//スペカインデックス決定
		spellNumber = "1";
		
		//スペカ分母を1増やして取得
		SetSpellData( player, difficult, spellNumber, "Parent" );
		spellPC = GetSpellData( player, difficult, spellNumber );
		
		//スペカ背景コントロールタスク起動
		BackGroundControl();
		
		//ライフ設定
		SetLife( 1000 );
		//初期位置設定
		Warp( CenterX, MinY + 80, 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( 41 );
		//カットイン
		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 way = 8;
		let angle = 0;
		let speed1 = 1.4;
		let speed2 = 0.011;
		let sspeed1 = 0.02;
		let sspeed2 = 0.032;
		let rot1 = 3;
		let rot2 = 0.02;
		let span = 2;
		let steptime = 70;
		
		loop{
			angle = rand( 0, 360 );
			
			ascent( i in 0..way ){
				Atack1( way, angle + i * 360 / way, speed1, speed2, sspeed1, sspeed2,  rot1,  rot2, steptime, span );
				Atack1( way, angle + i * 360 / way, speed1, speed2, sspeed1, sspeed2, -rot1, -rot2, steptime, span );
			}
			
			FWait( 240 );
			
			Warp( GetPlayerX(), MinY + 80 + rand( -20, 20 ), 40 );
		}
	}
	
	/**
	 * 弾幕タスク1
	 */
	task Atack1( way, angle, speed1, speed2, sspeed1, sspeed2, rot1, rot2, steptime, span ){
		let cx = GetX();
		let cy = GetY();
		let x = cx;
		let y = cy;
		let count = 0;
		let rad = 0;
		
		let obj = CreateObjShot( x, y, sspeed1, angle, US_BALL_SS_PURPLE, 0 );
		ObjShot_SetBombResist( obj, true );
		
		while( !Obj_BeDeleted( obj ) ){
			if( count < steptime ){
				speed1 -= speed2;
				rot1 -= rot2;
			}else{
				speed1 += speed2;
				rot1 += rot2;
			}
			
			rad += speed1;
			angle += rot1;
			
			x = GetGapX( cx, rad, angle );
			y = GetGapY( cy, rad, angle );
			
			Obj_SetPosition( obj, x, y );
			GrowEffect( x, y, PURPLE01, 16, 4 );
			
			if( count % span == 0 ){
				CreateShot02( x, y, sspeed1 + 1.2, angle + 160 - count * 0.00, sspeed2, 4.8, PURPLE23, 0 );
			}
			
			count += 1;
			yield;
		}
	}
	
	//スクリプトのインクルード
	#include_function ".\initialize.txt"
	#include_function ".\..\..\..\Library\lib_effect.txt"
}