  #include_function ".\playerfunctions.txt"
  #include_function ".\lymia_functions.txt"
  #include_function ".\lymia_functions_spell.txt"
  #include_function ".\effects.txt"
  let i=0;
  task run{
    SE("charge");
    SpellCardEffect;
    LymiaSCBG;
    PlayerForbidShotOn;
    SetSpeed(1.5,1.5);

    LightningCircle(100,15,6,30,60,0,0.2);
    LightningCircle(80,15,6,30,60,1,0.2);
    LightningCircle(90,15,6,30,60,2,0.2);

    loop(30){yield;}
    SE("lightning");

    loop(90){yield;}

    StopEffect=1;
    PlayerForbidShotOff;
    SetSpeed(5.5, 3);
    loop(125){
      yield;
    }
    End();
  }
  @Initialize{
    LymiaSwitch;
    SetPlayerInvincibility(300);
    run();
  }
  @MainLoop{
    CollectItems();
    yield;
  }
  @Finalize{

  }




  task LightningCircle(radius,width,segments,expand,time,left,power){
    yield;
    left=left*18;
    let gfxleft=left;
    let obj = Obj_Create(OBJ_EFFECT);
    let n=0;

    width*=3;

    Obj_SetPosition   (obj, GetPlayerX,GetPlayerY);
    Obj_SetSpeed      (obj, 0);
    ObjEffect_SetTexture(obj,lym_spell);
    ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
    ObjEffect_SetScale(obj,0,0);
    ObjEffect_SetAngle(obj,0,0,0);
    ObjEffect_SetLayer(obj,5);
    ObjEffect_CreateVertex(obj,(segments*2)+2);
    ObjEffect_SetRenderState(obj,ADD);

    n=0;
    let right=left+18;
    let gfxright=gfxleft+18;
    let top=0;
    let bottom=256*3;
    let angle=0;
    let rain=rand(0,360);
    loop((segments*2)+2){
	ObjEffect_SetVertexColor(obj,n,255,255,255,255);
	if(n%2==0){ObjEffect_SetVertexUV(obj,n,gfxleft+128,top+(bottom/segments)*floor(n/2));
	} else {   ObjEffect_SetVertexUV(obj,n,gfxright+128,top+(bottom/segments)*floor(n/2));
	}
	rain+=(720/(segments*2)+2);
	ObjEffect_SetVertexXY(obj,n, cos((360/segments)*floor(n/2))*upper(radius-((n%2)-0.5)*width,0), sin((360/segments)*floor(n/2))*upper(radius-((n%2)-0.5)*width,0) );
	n++;
    }
    let expadd=90/expand;
    n=0;
    loop(expand){
	n+=expadd;
	ObjEffect_SetScale(obj,sin(n),sin(n));
	Obj_SetPosition(obj,GetPlayerX,GetPlayerY);
	ObjEffect_SetAngle(obj,0,0,rand(0,360));
	SetIntersectionCircle(GetPlayerX,GetPlayerY,radius*sin(n),0,true);
	yield;
    }
    n=0;
    loop(time){
	Obj_SetPosition(obj,GetPlayerX,GetPlayerY);
	ObjEffect_SetAngle(obj,0,0,rand(0,360));
	SetIntersectionCircle(GetPlayerX,GetPlayerY,radius,0,true);
	if(n%3==(left/18)){
		angle=rand(0,360);
		ShockShot(GetPlayerX+cos(angle)*radius,GetPlayerY+sin(angle)*radius,angle,left/18);
		angle+=180;
		ShockShot(GetPlayerX+cos(angle)*radius,GetPlayerY+sin(angle)*radius,angle,left/18);
//		Shiny(GetPlayerX+cos(angle)*radius,GetPlayerY+sin(angle)*radius,left/18,angle+90,5);
//		Shiny(GetPlayerX+cos(angle)*radius,GetPlayerY+sin(angle)*radius,left/18,angle-90,5);
	}
	n++;
	yield;
    }
    expadd=255;//alpha
    let scale;
    loop(51){
	expadd-=5;
	n=0;
	rain=rand(0,360);
	loop((segments*2)+2){
		ObjEffect_SetVertexColor(obj,n,expadd,255,255,255);
		rain+=(720/(segments*2)+2);
		n++;
	}

	Obj_SetPosition(obj,GetPlayerX,GetPlayerY);
	ObjEffect_SetAngle(obj,0,0,rand(0,360));

	scale=1.5+cos(255-expadd+180)/2;

	ObjEffect_SetScale(obj,scale,scale);
	SetIntersectionCircle(GetPlayerX,GetPlayerY,radius*(1.66+cos(255-expadd+180)/3),0,true);


	angle=rand(0,360);
//	Shiny(GetPlayerX+cos(angle)*radius*scale,GetPlayerY+sin(angle)*radius*scale,left/18,angle+90,5);
//	Shiny(GetPlayerX+cos(angle)*radius*scale,GetPlayerY+sin(angle)*radius*scale,left/18,angle-90,5);


	yield;
    }
    Obj_Delete(obj);
  }

task ShockShot(x,y,angle,color){
	let obj=Obj_Create(OBJ_SPELL);
	let v=15;
	let frequency=rand_int(3,10);
	let frame=rand_int(0,frequency/2);
	let totalframe=0;
	let cosangle=cos(angle);
	let sinangle=sin(angle);
	while(OnScreen(x,y,20)){
		x+=cosangle*v;
		y+=sinangle*v;
		if(frame%2==0){
			Shiny(x,y,color,angle,lower(frame/3,10));
		}
		if(frame>frequency&&totalframe<60){
			frame-=frequency;
			angle+=rand(-90,90);
			cosangle=cos(angle);
			sinangle=sin(angle);
			frequency=rand_int(3,10);
		}
		totalframe++;
		frame++;
		ObjSpell_SetIntersecrionCircle(obj,x,y,35,20,false);
		yield;
	}
	Obj_Delete(obj);
}
task Shiny(x,y,color,angle,accel){
	let color1=[1,0,1];
	let color2=[0,1,1];
	let color3=[0.5,1,0];	
	if(ExPlayer){
		color1=[1,1,1];
		color2=[0,0,1];
		color3=[1,0,1];
	}

	if(OnScreen(x,y,64)){
		let colora=[color1[color]*120+135,color2[color]*120+135,color3[color]*120+135];

		let time=20;
		let type=128;

		let obj=Obj_Create(OBJ_EFFECT);
		ObjEffect_SetTexture(obj,lym_spell);
		Obj_SetPosition(obj,x,y);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetLayer(obj,4);
		ObjEffect_SetRenderState(obj,ADD);
		ObjEffect_CreateVertex(obj,4);

		angle+=rand(-20,20);

		ObjEffect_SetAngle(obj,0,0,angle+90);

		ObjEffect_SetVertexXY(obj,0,-32,-32);
		ObjEffect_SetVertexXY(obj,1,32,-32);
		ObjEffect_SetVertexXY(obj,2,32,32);
		ObjEffect_SetVertexXY(obj,3,-32,32);

		ObjEffect_SetVertexUV(obj,0,65,1+type);
		ObjEffect_SetVertexUV(obj,1,127,1+type);
		ObjEffect_SetVertexUV(obj,2,127,63+type);
		ObjEffect_SetVertexUV(obj,3,65,63+type);

		let alpha=0;
		let frame=time;

		let k=0;

		let cosa=cos(angle);
		let sina=sin(angle);
		loop(time){
			alpha+=(255/(time/8));
			if(alpha>255){alpha=255;}
			k=0;
			loop(4){
				ObjEffect_SetVertexColor(obj,k,alpha,colora[0],colora[1],colora[2]);
				k++;
			}

			frame--;
			ObjEffect_SetScale(obj,(frame/time)*(rand_int(0,1)*2-1),(rand_int(0,1)*2-1)*1.5);
			x-=cosa*accel;
			y-=sina*accel;
			Obj_SetPosition(obj,x,y);
			yield;
		}
		Obj_Delete(obj);
	}	
}