script_enemy_main {
    let GCSD=GetCurrentScriptDirectory;
    #include_function ".\..\ShotSheet\shot_replace.dnh"
    #include_function ".\..\functions.txt"
    #include_function ".\alice_functions.txt"

    SpellID=525;

    @Initialize {
	SetCommonData("AliceBGColor1",[0,0,0.5]);
	SetCommonData("AliceBGColor2",[0,0,1]);

	Randomize;
        SetLife(3000);
        SetTimer2(50);
	DamageRateTask;
	MagicCircle(false);
	SetEnemyMarker(true);
	AliceInit;
	MainTask;
	shotinit;

	StartFunctions(1,0,0);
	SetBG(22);

	SpellCircle2(5,1,4,200);
	SetShotAutoDeleteClip(25,25,25,25);
    }


let v=3;
let globaltimer=0;
let targetx=GetCenterX;
let targety=GetCenterY;


function Wait(frames){loop(frames){yield;}}

task DamageRateTask{
	loop{
		SetDamageRate(180-(GetTimer2/40)*140,40);
		yield;
	}
}

task MainTask{
	DelayBombTask;
	CutIn2(8,"Puppet Swarm [Power in Numbers]");

	SetMovePositionNew(GetCenterX,GetCenterY,60);
	Wait(60);
	MainTask2;
	MoveTask;

	let xpos=[0,GetClipMaxX+50,0,GetClipMinX-50];
	let ypos=[GetClipMinY-50,0,GetClipMaxY+50,0];
	let k=0;
	let x;
	let y;

	loop{
		x=rand(GetClipMinX,GetClipMaxX);
		y=rand(GetClipMinY,GetClipMaxY);
		if(xpos[k]!=0){x=xpos[k];}
		if(ypos[k]!=0){y=ypos[k];}
		if(distance(x,y,GetPlayerX,GetPlayerY)>260*260){	//don't spawn a doll if the player is near that area
			CreateEnemyFromFile(GPSD~"lw\as3ld.txt",x,y,0,0,0);
			Wait(17);
		}

		k++;
		if(k>3){k=0;}
	}
}

let aimangle=0;
task MainTask2{
	let angle=0;
	let k=0;
	Wait(120);
	loop{
		k=0;
		aimangle=500;
		loop(2){
			SE("charge");
			angle=rand(0,360);
			loop(15){
				MainShot(angle,(k/15)*360*3);
				angle+=360/15;
				k++;
			}
			Wait(90);
		}
		Wait(40);
	}
}

task MoveTask{
	let maxtime=240;
	let angle;
	loop{
		maxtime-=1;
		if(maxtime<60){maxtime=60;}
		angle=atan2(GetCenterY-GetPlayerY,GetCenterX-GetPlayerX);
		targetx=GetCenterX+cos(angle)*40;
		targety=GetCenterY+sin(angle)*40;
		SetX(GetX+(targetx-GetX)/maxtime);
		SetY(GetY+(targety-GetY)/maxtime);
		yield;
	}
}

task MainShot(angle2,colorpercent){
	SetShotColor(cos(colorpercent)*75+180,255,255);
	let obj=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(obj,SP04);
	SetShotColor(255,255,255);

	let radius;
	let radiusadd=rand(30,100);
	let finalradius=35;
	let alpha=0;
	let speed=0;
	let maxspeed=rand(1,2);
	let rotspeed=2;
	let maxrotspeed=rand(1,2);
	Obj_SetCollisionToPlayer(obj,false);
	loop(90){
		radius=cos(alpha*(180/255))*0.5+0.5;
		radius=radius*radiusadd+finalradius;
		angle2+=4;
		Obj_SetPosition(obj,GetX+cos(angle2)*radius,GetY+sin(angle2)*radius);
		alpha+=255/90;
		Obj_SetAlpha(obj,alpha);
		yield;
	}
	if(aimangle==500){aimangle=GetAngleToPlayer;}
	let angle1=aimangle;
	let xv=cos(angle1);
	let yv=sin(angle1);
	let x=GetX;
	let y=GetY;
	Obj_SetAlpha(obj,255);
	Obj_SetCollisionToPlayer(obj,true);
	while(!Obj_BeDeleted(obj)){
		Obj_SetPosition(obj,x+cos(angle2)*finalradius,y+sin(angle2)*finalradius);
		speed=lower(speed+0.05,maxspeed);
		rotspeed=upper(rotspeed-0.01,rotspeed);
		x+=xv*speed;
		y+=yv*speed;
		angle2+=3;
		finalradius+=0.15;
		yield;
	}

}

@MainLoop {
        SetCollisionA(GetX, GetY, 40);
	SetCollisionB(GetX, GetY, 20);

	AliceDrawLogic;
	HandleAliceDamage;

	globaltimer++;

	yield;
}

@DrawLoop {
	AliceDrawLoop;
}

@Finalize {
	EndingFunc(6);
	AliceFinalize;
	PointItems(GetX,GetY,7,1);
}

}


