script_enemy_main {
	#include_function ".\..\ShotSheet\shot_replace.dnh"
	#include_function ".\..\functions.txt"
	#include_function ".\..\s2\o_functions.txt"

	SpellID=0;

	let i=0;
	let frame=0;

    @Initialize {
	StartFunctions(1,1,0);
	Randomize;
        SetLife(4000);
        SetTimer(45);
	SetDamageRate(100,100);
	SetBG(3);
	MagicCircle(false);
	SetEnemyMarker(true);
	OverInit;
	SetInvincibility(100);
	SpellCircle2(3,1,4,200);

	shotinit;

	MainTask;
	HandleShots(100);
    }


function Wait(frames){loop(frames){yield;}}
let colors=[YELLOW50,WHITE50,BLUE50,WHITE50];
//let colors=[YELLOW03,WHITE03,BLUE03,WHITE03];

	let armangle=0;

task MainTask{
	SetMovePosition03(GetCenterX,GetCenterY,10,5);
	DelayBombTask;
	let color=0;
	let i=0;
	let i2=0;
	CreateMagnets;
	Wait(120);
	loop{
		//i=prand(0,360);
		loop(20){
			NormalShot(GetX,GetY,2,i*(360/20)+i2,colors[i%4],false);
			i++;
		}
		i=0;
		i2+=21;
		Wait(60);
	}
}
function CreateMagnets{
	MagnetShot2(GetX,GetY,2,140,180, 4500,0.02);
//	MagnetShot2(GetX,GetY,2,90,180,RED02, 4500,-0.01);
}

    let speed=1.8;
    let framef=0;

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

	OverloadDrawLogic;
	yield;
}
    @DrawLoop {
	OverloadDrawLoop;
}

    @Finalize {
	OverFinalize;
	EndingFunc(2);
    }
let prevx=0;
let prevy=0;
let newx=0;
let newy=0;
task MagnetShot2(x,y,v,d,a,range,strength){

    let obj = Obj_Create(OBJ_EFFECT);
    let frame=0;
    let timer=0;
    let bounces=0;
    let alpha=0;
    let type=0;
    if(strength>0){type=32;}

    // initial settings
    Obj_SetPosition   (obj, x,y);
    Obj_SetSpeed      (obj, 0);
    Obj_SetAngle(obj, 0);
    ObjEffect_SetTexture(obj,imgOverload1);
    ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLEFAN);
    ObjEffect_CreateVertex(obj,4);

    ObjEffect_SetVertexXY(obj,0,-16,-16);
    ObjEffect_SetVertexXY(obj,1, 16,-16);
    ObjEffect_SetVertexXY(obj,2, 16, 16);
    ObjEffect_SetVertexXY(obj,3,-16, 16);
    ObjEffect_SetVertexUV(obj,0,type,0);
    ObjEffect_SetVertexUV(obj,1,type+32,0);
    ObjEffect_SetVertexUV(obj,2,type+32,32);
    ObjEffect_SetVertexUV(obj,3,type,32);

    let angle=0;
    let k=0;
    let dist=0;

    Obj_SetPosition(obj,GetX+cos(a)*d,GetY+sin(a)*d);
    let frame=0;
    while(! Obj_BeDeleted(obj)) {
	prevx=Obj_GetX(obj);prevy=Obj_GetY(obj);
	Obj_SetPosition(obj,GetX+cos(a)*d,GetY+sin(a)*d);
	newx=Obj_GetX(obj);newy=Obj_GetY(obj);
	a+=v;
	x=Obj_GetX(obj);
	y=Obj_GetY(obj);

	if(alpha<255){alpha+=2;}
	ObjEffect_SetAlpha(obj,4,alpha);

	angle=prand(0,360);
	//Spark(x+cos(angle)*20,y+sin(angle)*20,cos(a)*v+cos(angle+90)*0,sin(a)*v+sin(angle+90)*0,angle+90,10);
	Spark2(x+cos(angle)*15,y+sin(angle)*15,0,0,angle+90,10,alpha);

	Spark2(x+cos(angle)*36,y+sin(angle)*36,0-cos(angle)*1.5,0-sin(angle)*1.5,angle,15,alpha);

	x+=cos(a)*v;
	y+=sin(a)*v;
	if(frame%3==0){
		k=0;
		loop(length(shotx)-1){
			angle=atan2(Obj_GetY(obj)-shoty[k+1],Obj_GetX(obj)-shotx[k+1]);
			dist=range-lower((distance(Obj_GetX(obj),Obj_GetY(obj),shotx[k+1],shoty[k+1])^0.5),range);
			shotxv[k+1]=shotxv[k+1]+((cos(angle)*dist)/1600)*strength*3;
			shotyv[k+1]=shotyv[k+1]+((sin(angle)*dist)/1600)*strength*3;
			k++;
		}
	}
	frame++;
        yield;
    }
    Obj_Delete(obj);
}

task Spark2(x,y,xv,yv,a,time, alpha){
    let totaltime=time;

    let obj = Obj_Create(OBJ_EFFECT);
    // initial settings
    Obj_SetPosition   (obj, x,y);
    Obj_SetSpeed      (obj, 0);
    Obj_SetAngle(obj, 0);
    ObjEffect_SetTexture(obj,imgOverload1);
    ObjEffect_SetRenderState(obj,ADD);
    ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLEFAN);
    ObjEffect_CreateVertex(obj,4);
    ObjEffect_SetAngle(obj,0,0,a+90);

    ObjEffect_SetVertexXY(obj,0,-16,-16);
    ObjEffect_SetVertexXY(obj,1, 16,-16);
    ObjEffect_SetVertexXY(obj,2, 16, 16);
    ObjEffect_SetVertexXY(obj,3,-16, 16);
    ObjEffect_SetVertexUV(obj,0,0,33);
    ObjEffect_SetVertexUV(obj,1,32,33);
    ObjEffect_SetVertexUV(obj,2,32,63);
    ObjEffect_SetVertexUV(obj,3,0,63);

    ObjEffect_SetAlpha(obj,4,alpha);
    let angle=0;
    let k=0;
    //let alpha=255;
    while(time>0) {
	Obj_SetPosition(obj,x,y);
	x+=xv-(prevx-newx);
	y+=yv-(prevy-newy);
	k=0;

	time--;
        yield;
    }
    Obj_Delete(obj);
}

}