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

	SpellID=48;

	let i=0;
	let frame=0;

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

	shotinit;

	CutIn2(2,"Double Bolt [Electrical Flux]");

	LoadSE(GPSD~"se\laserlong1");
	LoadSE(GPSD~"se\laserlong2");

	MainTask;
    }


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

	let armangle=0;

task MainTask{
	SetMovePosition03(GetCenterX,200,10,5);
	DelayBombTask;
	let color=0;
	let i=0;
	let i2=0;
	Wait(150);
	LaserBases;
	LaserShots(1,0,2);
	Wait(250);
	loop{
		LaserShots(-1,1,1);
		Wait(250);
		LaserShots(1,1,2);
		Wait(250);
	}
}

    let speed=1.8;
    let framef=0;

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

	OverloadDrawLogic;
	yield;
}
    @DrawLoop {
	OverloadDrawLoop;
}

    @Finalize {
	DeleteSE(GPSD~"se\laserlong1");
	DeleteSE(GPSD~"se\laserlong2");

	OverFinalize;
	EndingFunc(2);
	PointItems(GetX,GetY,2,1);
    }

    sub LaserBases{
	CreateShot01(GetX+40,GetY+4,0,0,SP04,0);
	CreateShot01(GetX-40,GetY+4,0,0,SP04,0);
    }
    task LaserShots(dir,exshots,num){
	SE("laserlong"~IntString(num));
	LaserShotSub(dir,dir,-320*dir,10*dir);
	LaserShotSub(dir,-dir,-270*dir,0*dir);
	if(exshots==1){
		let i=0;
		loop(5){
			StraightLaserShot(GetCenterX-196*dir,i*96,90-70*dir,i);
			i++;
		}
	}
	
    }
    let lasergraphics=[BLUE60,AQUA60,GREEN60,YELLOW60,ORANGE60];
    let endgraphics=[BLUE50,AQUA50,GREEN50,YELLOW50,ORANGE50];
    task LaserShotSub(dir,arm,angle1,angle2){
	let x=GetX+40*arm;
	let y=GetY+4;
	let obj=Obj_Create(OBJ_LASER);


	Obj_SetPosition(obj,x,y);
	ObjLaser_SetSource(obj,false);
	Obj_SetAlpha(obj,200);
	let centerangle=(angle2+angle1)/2;
	let anglemod=angle2-centerangle;
	let frame=0;
	let length=0;
	let randlen=0;
	DisplayLightning(obj,NULL,20);
	DisplayLightning(obj,NULL,20);

	let objend=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(objend,SP04);

	let length2=0;
	let coordinates;
	let endx;
	let endy;
	let color=frame;
	loop(260){
		length+=5;
		if(color%3==0){
			ObjShot_SetGraphic(obj,lasergraphics[prand_int(0,4)]);
		}
		color++;
		angle1=(centerangle-cos(frame)*anglemod)+90;
		ObjLaser_SetWidth(obj,prand(5,20));
		endx=x+cos(angle1)*length;
		endy=y+sin(angle1)*length;

		length2=length;
		if(OffScreen(endx,endy,0)){
			coordinates=GetLineBorderPoint(x,y,endx,endy);
			endx=coordinates[1];
			endy=coordinates[2];
			length2=distance(x,y,endx,endy)^0.5;
		}

		Obj_SetAngle(obj,angle1);


		ObjLaser_SetLength(obj,lower(length,length2+30));

		Obj_SetPosition(objend,endx,endy);
		frame+=180/260;
		yield;
	}
	ObjShot_FadeDelete(obj);
	Obj_Delete(objend);
	loop(60){
		if(color%3==0){
			ObjShot_SetGraphic(obj,lasergraphics[prand_int(0,4)]);
		}
		color++;
		ObjLaser_SetWidth(obj,prand(5,20));

		angle1=(centerangle-cos(frame)*anglemod)+90;
		Obj_SetAngle(obj,angle1);

		frame+=180/200;
		yield;
	}
    }

    task StraightLaserShot(x,y,angle,frame){
	y+=prand(-5,5);
	angle+=prand(-3,3);
	let obj=Obj_Create(OBJ_LASER);
	Obj_SetPosition(obj,x,y);
	ObjLaser_SetSource(obj,false);
	Obj_SetAlpha(obj,200);
	Obj_SetAngle(obj,angle);
	Obj_SetAutoDelete(obj,false);
	ObjLaser_SetWidth(obj,10);
	ObjShot_SetGraphic(obj,ORANGE60);

	let objend=Obj_Create(OBJ_SHOT);
	ObjShot_SetGraphic(objend,RED50);

	let length=0;
//	DisplayLightning(obj,angle);
	let endy;
	let endx;
	let color=frame;
	loop(260){
		if(color%3==0){
			ObjShot_SetGraphic(obj,lasergraphics[prand_int(0,4)]);
			ObjShot_SetGraphic(objend,endgraphics[prand_int(0,4)]);
		}
		color++;

		endx=x+cos(angle)*length;
		endy=y+sin(angle)*length;
		if(endy<GetClipMaxY+20){
			length+=3;
		}
		Obj_SetPosition(objend,endx,endy);
		ObjLaser_SetLength(obj,length);
		ObjLaser_SetWidth(obj,prand(7,10));

		if(frame%8==0){
			ExShot(endx,endy,prand(0.2,0.5),angle-prand(150,210),ORANGE52,20,40,16,20, 400,1);
		}

		frame+=0.5;
		yield;
	}
	ObjShot_FadeDelete(obj);
	ObjShot_FadeDelete(objend);
    }

    task ExShot(x,y,v,a,g,d,size1,size2,offset,fade, fadecolor){
	if(d>0){
		DelayNew(x,y,a,size1,size2,g,d,offset);
	}
	loop(absolute(d)){yield;}
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,x,y);
	Obj_SetSpeed(obj,v);
	Obj_SetAngle(obj,a);
	ObjShot_SetGraphic(obj,g);
	let changed=false;
	Wait(fade);
	if(!Obj_BeDeleted(obj)){
		CreateExplosionFlatEX(3,Obj_GetX(obj),Obj_GetY(obj),0.5,fadecolors[fadecolor],0.01,16);
		Obj_Delete(obj);
	}
    }
    let fadecolors=[[200,100,100],[200,150,100],[200,200,100],[100,200,100],[100,200,200],[100,100,200],[200,100,200],[200,200,200]];

}