  let img_raibys = GetCurrentScriptDirectory~"raibys.png";
  let img_raibysspell = GetCurrentScriptDirectory~"raibysspell.png";
  let form=0;
  let i2=0;

  let glowxf=[];
  let glowyf=[];
  let glowtf=[];
  let glowdf=[];

  let glowx=[0];
  let glowy=[0];
  let glowt=[0];
  let glowd=[0];

  let Rblur=[];
  let RblurT=[];
  let saveform=0;

task RaibysInit(shotdelay){
    LoadGraphic(img_raibys);
    LoadGraphic(img_raibysspell);
    LoadGraphic(imgRBG1);
    LoadGraphic(imgRBG2);
    LoadGraphic(imgRBG3);
    LSE("shardstorm");
    LSE("lance");
    LSE("ring");
    LSE("raibyscharge");

    SetPlayerLifeImage(img_raibys, 100,210, 144, 252);
    SetSpeed(4, 2.5);
    SetAutoEffect(false);
    CreateBarrierShots;

    DeleteCommonData("ForbidFormChange");

    Left=[0,42,42];
    Right=[42,84,84];
    Flip=[1,-1,1];

    loop(shotdelay){yield;}
    if(ExPlayer){
	LoadPlayerShotData(GetCurrentScriptDirectory~"RaibysShotData2.txt");
    }else{
	LoadPlayerShotData(GetCurrentScriptDirectory~"RaibysShotData.txt");
    }
    playershot=1;
}

// 0 = normal, 1 = attack, 2 = flight, 3 = frost, 4 = stealth, 5 = defense

  let raibysboxcolor=[0,3,0,0];

sub RaibysMainLoop{
    if(form%2==0&&(GetKeyState(VK_SLOWMOVE)==KEY_PUSH||GetKeyState(VK_SLOWMOVE)==KEY_HOLD&&GetCommonDataDefault("PlayerForbidShot",false)==false&&GetCommonDataDefault("ForbidFormChange",false)==false)&&GetCommonDataDefault("Dialogue",0)==0){
	lastform=form;
	lastformalpha=1;
	form=(form+1)%6;
	miscvar=0;
    }
    if(form%2==1&&(GetKeyState(VK_SLOWMOVE)!=KEY_PUSH&&GetKeyState(VK_SLOWMOVE)!=KEY_HOLD&&GetCommonDataDefault("PlayerForbidShot",false)==false&&GetCommonDataDefault("ForbidFormChange",false)==false)&&GetCommonDataDefault("Dialogue",0)==0){
	lastform=form;
	lastformalpha=1;
	form=(form+1)%6;
	miscvar=0;
    }

    if(GetCommonDataDefault("Dialogue",0)==1&&GetCommonDataDefault("SetRaibysForm",-1)==-1){
	if(form!=0){
		lastform=form;
		lastformalpha=1;
		saveform=trunc(form/2)*2;
	}
	form=0;
    }else if(GetCommonDataDefault("SetRaibysForm",-1)>-1){
	if(GetCommonData("SetRaibysForm")!=form){
		lastform=form;
		lastformalpha=1;
		form=GetCommonData("SetRaibysForm");
	}
    }else if(saveform!=0){
	lastform=form;
	lastformalpha=1;
	form=saveform;
	saveform=0;
    }

    hitboxcolor=raibysboxcolor[trunc((form+1)/2)];

    if((GetKeyState(VK_SHOT)==KEY_PUSH || GetKeyState(VK_SHOT)==KEY_HOLD)&&playershot==1){
//	if(count==-1&&!IsForbidShot){count = 0;}
	RaibysShot;
    }
    RaibysDrawLogic;
}

  let wingrot=0;
  let wingrotspeed=0;
  let miscvar=1;
  let lockpoint=-1;
  function RaibysShot{
	if(!IsForbidShot){
		if(form==0){	//normal
			if(count%2==0){
				i=cos((count/40)*360);
				Glow(GetPlayerX+i*40,GetPlayerY,15);
				Glow(GetPlayerX-i*40,GetPlayerY,15);
				CreatePlayerShot01ObjD(GetPlayerX+i*40,GetPlayerY+12,12,-90,2.2,1,5,255*shotopacity,rand_int(0,3));
				CreatePlayerShot01ObjD(GetPlayerX-i*40,GetPlayerY+12,12,-90,2.2,1,4,255*shotopacity,rand_int(0,3));
			}
			if(count%3==0){
				CreatePlayerShot01ObjD(GetPlayerX+i*40,GetPlayerY+12,12,-90+prand(-10,10),3.5,1,3,255*shotopacity,rand_int(0,3));
				CreatePlayerShot01ObjD(GetPlayerX-i*40,GetPlayerY+12,12,-90+prand(-10,10),3.5,1,2,255*shotopacity,rand_int(0,3));
			}
		}
		if(form==1){	//attack
			i=cos((count/20)*360);
			CreatePlayerShot01ObjD(GetPlayerX+i*20,GetPlayerY+15,15,-90,3,1,1,255*shotopacity,rand_int(0,2));
			if(count%2==0){
				RaibysLaser(GetPlayerX,GetPlayerY,450,2.5);
			}
		}
		if(form==2){	//flight
			if(count%2==0){
				i=cos((wingrot/50)*360);
				i2=sin((wingrot/50)*360);
				Glow(GetPlayerX+i*60,GetPlayerY+i2*30,15);
				Glow(GetPlayerX-i*60,GetPlayerY-i2*30,15);
				CreatePlayerShot01ObjD(GetPlayerX+i*60,GetPlayerY+i2*30+9,9,-90+i*8,1.9,1,2,255*shotopacity,rand_int(0,3));
				CreatePlayerShot01ObjD(GetPlayerX-i*60,GetPlayerY-i2*30+9,9,-90-i*8,1.9,1,3,255*shotopacity,rand_int(0,3));
				IncreasePowerShot2(GetPlayerX+i*60,GetPlayerY+i2*30+9,9,-90-i*8,1.9,1,3, 10,190);
				IncreasePowerShot2(GetPlayerX-i*60,GetPlayerY-i2*30+9,9,-90+i*8,1.9,1,2, 10,190);
			}
			if(count%40==0){
				i=3;
				loop(5){
					CreatePlayerShot01ObjD(GetPlayerX,GetPlayerY+7,8-i/3,-90+i*5,3.3,1,1,255*shotopacity,rand_int(0,3));
					CreatePlayerShot01ObjD(GetPlayerX,GetPlayerY+7,5.33, -90+i*5,3.3,1,1,255*shotopacity,rand_int(0,3));
					CreatePlayerShot01ObjD(GetPlayerX,GetPlayerY+7,6-i/3,-90+i*5,3.3,1,1,255*shotopacity,rand_int(0,3));
					CreatePlayerShot01ObjD(GetPlayerX,GetPlayerY+7,8-i/3,-90-i*5,3.3,1,1,255*shotopacity,rand_int(0,3));
					CreatePlayerShot01ObjD(GetPlayerX,GetPlayerY+7,5.33, -90-i*5,3.3,1,1,255*shotopacity,rand_int(0,3));
					CreatePlayerShot01ObjD(GetPlayerX,GetPlayerY+7,6-i/3,-90-i*5,3.3,1,1,255*shotopacity,rand_int(0,3));
					i++;
				}
			}

			if(GetKeyState(VK_RIGHT)!=KEY_FREE){
				miscvar=1;
			}else if(GetKeyState(VK_LEFT)!=KEY_FREE){
				miscvar=-1;
			}
			if(miscvar<0&&wingrotspeed>-1){wingrotspeed-=0.07;}
			if(miscvar>=0&&wingrotspeed<1){wingrotspeed+=0.07;}

			wingrot+=wingrotspeed;
		}
		if(form==3){	//frost
			if(lockpoint==-1){
				lockpoint=GetPlayerX;
			}
			if(count%3==0){
				miscvar=(lockpoint-GetPlayerX)/7;

				i=cos(miscvar)*cos(count*5)*30;
				i2=sin(miscvar)*cos(count*5)*30;

				Glow(GetPlayerX+i,GetPlayerY+i2,10);
				Glow(GetPlayerX-i,GetPlayerY-i2,10);


				CreatePlayerShot01Obj(GetPlayerX,GetPlayerY,6+rand(-2,5),-90+miscvar,0,1,7,255*shotopacity);

				IncreasePowerShot2(GetPlayerX+i,GetPlayerY+i2,9+rand(-2,2),-90+miscvar-cos(count*5)*-7,5.1,1,8, 20,190);
				IncreasePowerShot2(GetPlayerX-i,GetPlayerY-i2,9+rand(-2,2),-90+miscvar+cos(count*5)*-7,5.1,1,8, 20,190);
				CreatePlayerShot01ObjD(GetPlayerX+i,GetPlayerY+i2,7+rand(-1,1),-90+miscvar,3.4,1,6,255*shotopacity,rand_int(0,3));
				CreatePlayerShot01ObjD(GetPlayerX-i,GetPlayerY-i2,7+rand(-1,1),-90+miscvar,3.4,1,6,255*shotopacity,rand_int(0,3));
			}			
		}else{
			lockpoint=-1;
		}
		if(form==4){	//defense
			if(count%2==0){
//				Glow(GetPlayerX+i,GetPlayerY,15);
//				Glow(GetPlayerX-i,GetPlayerY,15);

				i=count*1.91;
				loop(5){
					IncreasePowerShot(GetPlayerX,GetPlayerY,8,i+90,4.5,1,8, 15,190);
					IncreasePowerShot(GetPlayerX,GetPlayerY,8,-i+90,4.5,1,4, 15,190);
					i+=360/5;
				}
			}
		}
		if(form==5){	//stealth
			if(count%3==0){
				i=cos((count/100)*360);
				i2=cos((count/50)*360);
				StealthShot(GetPlayerX+i*30,GetPlayerY+5,11,-90+i2*5-i*5,2.8,1,7,1);
				StealthShot(GetPlayerX+i*30,GetPlayerY+5,11,-90-i2*5-i*5,2.8,1,7,1);
				StealthShot(GetPlayerX-i*30,GetPlayerY+5,11,-90+i2*5+i*5,2.8,1,8,7);
				StealthShot(GetPlayerX-i*30,GetPlayerY+5,11,-90-i2*5+i*5,2.8,1,8,7);

				//NoMeleeShot(GetPlayerX,GetPlayerY+i*40,12,0+i2*5-i*7,5.5,1,7);
				//NoMeleeShot(GetPlayerX,GetPlayerY+i*40,12,0-i2*5-i*7,5.5,1,7);
				//NoMeleeShot(GetPlayerX,GetPlayerY-i*40,12,180+i2*5-i*7,5.5,1,7);
				//NoMeleeShot(GetPlayerX,GetPlayerY-i*40,12,180-i2*5-i*7,5.5,1,7);

			}			
		}
	}
	count++;
  }

  task StealthShot(x,y,v,a,pow,pen,g,g2){
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,x,y);
	Obj_SetSpeed(obj,v);
	Obj_SetAngle(obj,a);
	ObjShot_SetDamage(obj,pow*0.75);
	ObjShot_SetPenetration(obj,pen);
	ObjShot_SetGraphic(obj,g);
	Obj_SetAlpha(obj,200*shotopacity);
	let time=(GetPlayerY-GetClipMinY)/absolute(sin(a)*v);
	loop(time){
		yield;
	}
	if(!Obj_BeDeleted(obj)){
		Obj_Delete(obj);
		CreatePlayerShot01Obj(x+cos(a)*v*time,GetClipMinY,v,a+135,pow,pen,g2,200*shotopacity);
		CreatePlayerShot01Obj(x+cos(a)*v*time,GetClipMinY,v,a-135,pow,pen,g2,200*shotopacity);
	}
  }

  function Glow(x,y,t){
	glowxf=glowxf~[x];
	glowyf=glowyf~[y];
	glowtf=glowtf~[t];
	glowdf=glowdf~[rand(0,360)];
  }

  let barrierobj=[];

  task CreateBarrierShots{
	yield;
	while(playernum!=1||playershot!=1){yield;}
	yield;
	let barriertime=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];
	let lastform=1;
	let k=0;
	barrierobj=[];
	let obj;
	loop(16){
		obj=Obj_Create(OBJ_SHOT);
		ObjShot_SetGraphic(obj, 6);
		ObjShot_SetDamage(obj, 25);
		ObjShot_SetBombResist(obj, true);
		ObjShot_SetPenetration(obj, 1);
		Obj_SetAutoDelete(obj,false);
		Obj_SetPosition(obj,-1000,-1000);
		Obj_SetAlpha(obj,175*shotopacity);
		barrierobj=barrierobj~[obj];
	}
	let frame=0;
	while(playernum==1){
		if(form==4&&(GetKeyState(VK_SHOT)==KEY_PUSH || GetKeyState(VK_SHOT)==KEY_HOLD)&&dead==0){
			lastform=1;
			k=0;
			loop(16){
				if(barriertime[k]>0){
					barriertime[k]=barriertime[k]-1;
					if(barriertime[k]<=0){
						obj=Obj_Create(OBJ_SHOT);
						ObjShot_SetGraphic(obj, 6);
						ObjShot_SetDamage(obj, 25);
						ObjShot_SetBombResist(obj, true);
						ObjShot_SetPenetration(obj, 1);
						Obj_SetAutoDelete(obj,false);
						Obj_SetPosition(obj,-1000,-1000);
						Obj_SetAlpha(obj,175*shotopacity);
						barrierobj[k]=obj;
					}
				}
				k++;
			}
			k=0;
			loop(16){
				if(Obj_BeDeleted(barrierobj[k])&&barriertime[k]==0){
					barriertime[k]=200;
					if(k%2==0){
						BarrierShine(GetPlayerX+cos(frame*4+k*(180/8))*50,GetPlayerY+sin(frame*4+k*(180/8))*50);
					}else{
						BarrierShine(GetPlayerX+cos(-frame*4+k*(180/8))*40,GetPlayerY+sin(-frame*4+k*(180/8))*40);
					}
				}else{
					if(k%2==0){
						BarrierShot(k,frame*4+k*(180/8),90,50);
					}else{
						BarrierShot(k,-frame*4+k*(180/8),-90,40);
					}
				}
				k++;
			}
		}else if(lastform==1){
			k=0;
			loop(16){
				Obj_SetPosition(barrierobj[k],-1000,-1000);
				k++;
			}
			lastform=0;
		}
		frame++;
		yield;
	}
	k=0;
	loop(16){
		Obj_Delete(barrierobj[k]);
		k++;
	}
	task BarrierShine(x,y){
		let obj=Obj_Create(OBJ_EFFECT);
		Obj_SetPosition(obj,x,y);
		ObjEffect_SetTexture(obj,img_raibys);
		ObjEffect_CreateVertex(obj,4);
		ObjEffect_SetLayer(obj,3);
		ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLEFAN);
		ObjEffect_SetXYRect(obj,-32,-32,32,32);
		ObjEffect_SetUVRect(obj,408,195,467,254);
		let scale=1;
		let time=25;
		let alpha=2;
		let k=0;
		let angle=rand(0,360);;
		let angvel=rand(3,8)*RandDir;
		loop(time){
			scale+=2/time;
			alpha-=2/time;
			ObjEffect_SetScale(obj,scale,scale);
			k=0;
			loop(4){
				ObjEffect_SetVertexColor(obj,k,lower(alpha*255,255),255,255,255);
				k++;
			}
			ObjEffect_SetAngle(obj,0,0,angle);
			angle+=angvel;
			yield;
		}
		Obj_Delete(obj);
	}
  }
  task NoMeleeShot(x,y,v,a,pow,pen,g){
	//creates a shot, but doesn't do damage if the shot starts out inside an enemy
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,x,y);
	Obj_SetSpeed(obj,v);
	Obj_SetAngle(obj,a);
	ObjShot_SetDamage(obj,0);
	ObjShot_SetPenetration(obj,1);
	ObjShot_SetGraphic(obj,g);
	Obj_SetAlpha(obj,0);
	yield;
	yield;
	yield;
	if(!Obj_BeDeleted(obj)){
		CreatePlayerShot01Obj(x,y,v,a,pow,pen,g,255*shotopacity);
		Obj_Delete(obj);
	}
  }
  task IncreasePowerShot(x,y,v,a,pow,pen,g, time,alpha){
	//creates a shot that gradually reaches its max power
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,x,y);
	Obj_SetSpeed(obj,v);
	Obj_SetAngle(obj,a);
	ObjShot_SetPenetration(obj,1);
	ObjShot_SetGraphic(obj,g);
	let frame=0;
	let poweradd=pow/time;
	let alphaadd=alpha/time;
	alpha=0;
	pow=0;
	while(!Obj_BeDeleted(obj)&&frame<time){
		ObjShot_SetDamage(obj,pow);
		pow+=poweradd;
		alpha+=alphaadd;
		Obj_SetAlpha(obj,alpha*shotopacity);
		frame++;
		yield;
	}
  }
  task IncreasePowerShot2(x,y,v,a,pow,pen,g, time,alpha){
	//creates a shot that gradually reaches its max power
	let obj=Obj_Create(OBJ_SHOT);
	Obj_SetPosition(obj,x,y);
	Obj_SetSpeed(obj,v);
	Obj_SetAngle(obj,a);
	ObjShot_SetPenetration(obj,1);
	ObjShot_SetGraphic(obj,g);
	let frame=0;
	let poweradd=pow/time;
	let alphaadd=alpha/time;
	Obj_SetAlpha(obj,alpha*shotopacity);
	pow/=2;
	while(!Obj_BeDeleted(obj)&&frame<time){
		ObjShot_SetDamage(obj,pow);
		pow+=poweradd/2;
		frame++;
		yield;
	}
  }


  task BarrierShot(id,angle,angle2,offset){
	Obj_SetPosition(barrierobj[id], GetPlayerX+cos(angle)*offset, GetPlayerY+sin(angle)*offset);
	Obj_SetAngle(barrierobj[id], angle+angle2);
  }
  task RaibysLaser(x,y,length,damage){
	RaibysLaserEffect(x,y,length);
	let obj=Obj_Create(OBJ_LASER);
	Obj_SetPosition(obj,x,y);
	Obj_SetAngle(obj,-90);
	ObjShot_SetGraphic(obj,250);
	ObjShot_SetDamage(obj,damage);
	ObjShot_SetPenetration(obj,999);
	ObjLaser_SetWidth(obj,30);
	ObjLaser_SetLength(obj,length);
	ObjLaser_SetSource(obj,false);
	yield;
	yield;
	Obj_Delete(obj);
  }
  task RaibysLaserEffect(x,y,length){
	let offset=count%256;
	let xadd=prand(-3,3);
//	x-=xadd;
	offset*=7;
	let obj=Obj_Create(OBJ_EFFECT);
	Obj_SetPosition(obj,x+2,y);
	if(ExPlayer){
		ObjEffect_SetTexture(obj,GetCurrentScriptDirectory()~"RaibysShot2.png");
	}else{
		ObjEffect_SetTexture(obj,GetCurrentScriptDirectory()~"RaibysShot.png");
	}
	ObjEffect_CreateVertex(obj,4);
	ObjEffect_SetLayer(obj,2);
	ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLEFAN);
	ObjEffect_SetVertexXY(obj,0,-9,-length);
	ObjEffect_SetVertexXY(obj,1,9,-length);
	ObjEffect_SetVertexXY(obj,2,9,0);
	ObjEffect_SetVertexXY(obj,3,-9,0);
	ObjEffect_SetVertexUV(obj,0,-length+offset,63);
	ObjEffect_SetVertexUV(obj,1,-length+offset,50);
	ObjEffect_SetVertexUV(obj,2,0+offset,50);
	ObjEffect_SetVertexUV(obj,3,0+offset,63);

	let alpha=255;
	let k=0;
	loop(10){
		Obj_SetX(obj,x);
		alpha-=255/10;
		x+=xadd;
		k=0;
		loop(4){
			ObjEffect_SetVertexColor(obj,k,alpha*upper(shotopacity,0.5),255,255,255);
			k++;
		}
		yield;
	}
	Obj_Delete(obj);
  }

sub RaibysSpell{
    SetCommonData("RaibysForm",form);
    if(form%2==1){
      UseSpellCard("RaibysF", 0);
    }else{
      UseSpellCard("RaibysU", 0);
    }
}

let lastform=0;
let lastformalpha=0;

sub RaibysDrawLogic{
	Frame++;
	if(Frame==6){
		Frame=0;
		Pose++;
		if(Pose==4){
			Pose=0;
		}
	}
	if(GetKeyState(VK_RIGHT)==KEY_HOLD||GetKeyState(VK_RIGHT)==KEY_PUSH){
		Dir=2;
	}else if(GetKeyState(VK_LEFT)==KEY_HOLD||GetKeyState(VK_LEFT)==KEY_PUSH){
		Dir=1;
	}else{Dir=0;}
	if(OnEdgeOfScreen){Dir=0;}

	Rot+=12-Focus*10;
	if(GetKeyState(VK_SLOWMOVE)==KEY_HOLD&&Focus<1){Focus+=0.08;}
	if(GetKeyState(VK_SLOWMOVE)==KEY_FREE&&Focus>0){Focus-=0.08;}

	glowx=glowx~glowxf;
	glowy=glowy~glowyf;
	glowt=glowt~glowtf;
	glowd=glowd~glowdf;
	glowxf=[];
	glowyf=[];
	glowtf=[];
	glowdf=[];
	let k=0;
	while(k<length(glowt)-1){
		if(form==3){
			glowx[k+1]=glowx[k+1]+cos(glowd[k+1])*2.5;
			glowy[k+1]=glowy[k+1]+sin(glowd[k+1])*2.5;
		}
		glowt[k+1]=glowt[k+1]-1;
		if(glowt[k+1]==0){
			glowx=erase(glowx,k+1);
			glowy=erase(glowy,k+1);
			glowt=erase(glowt,k+1);
			glowd=erase(glowd,k+1);
			k--;
		}
		k++;
	}
	if(lastformalpha>0){
//		lastformalpha-=17;
		lastformalpha-=0.05;
	}
	k=0;
	loop(length(Rblur)){
		if(RblurT[k]==0){
			RblurT=erase(RblurT,k);
			Rblur=erase(Rblur,k);
			k--;
		}else{
			RblurT[k]=RblurT[k]-1;
		}
		k++;
	}
	if(GetCommonDataDefault("RaibysBlur",false)==true){
		Rblur=Rblur~[[GetPlayerX,GetPlayerY,Pose,Dir]];
		RblurT=RblurT~[30];
	}
	EffectsLogic;
}

sub RaibysDrawLoop{
	SetColor(255,255,255);
	SetTexture(img_raibys);

	SetGraphicRect(56,236,59,239);
	SetAlpha(50);
	let k=0;
	loop(length(glowx)-1){
		SetGraphicAngle(0,0,rand(0,90));
		SetGraphicScale(glowt[k]/4,glowt[k]/4);
		DrawGraphic(glowx[k+1],glowy[k+1]);
		k++;
	}

	if(ExPlayer){
		SetGraphicRect(297+25*Dir,200,297+24+25*Dir,235);
		SetGraphicScale(1,1);
		SetGraphicAngle(0,0,0);
		SetAlpha(InvincibilityAlpha);
		DrawGraphic(round(GetPlayerX+ScreenShakeX)+12, round(GetPlayerY+11+ScreenShakeY));
	}

//	SetGraphicRect(88+60,9+190,136+60,57+190);

//	SetColor(180,255,180);
//	SetGraphicAngle(0,0,Rot);
//	SetGraphicScale(2.5-RaibysFocus,2.5-RaibysFocus);
//	SetAlpha(RaibysFocus*(InvincibilityAlpha*0.8));
//	DrawGraphic(GetPlayerX+1+ScreenShakeX,GetPlayerY+ScreenShakeY);

//	SetColor(255,180,180);
//	SetGraphicAngle(0,0,-RaibysRot);
//	SetGraphicScale(2.5-RaibysFocus*1.4,2.5-RaibysFocus*1.4);
//	SetAlpha(RaibysFocus*(InvincibilityAlpha*0.8));
//	DrawGraphic(GetPlayerX+1+ScreenShakeX,GetPlayerY+ScreenShakeY);

	SetColor(255,255,255);
	SetGraphicAngle(0,0,0);		

	k=0;
	loop(length(Rblur)){
		SetGraphicScale(Flip[Rblur[k][3]],1);
		SetGraphicRect(Left[Rblur[k][3]]+85*form,0+48*Rblur[k][2],Right[Rblur[k][3]]+85*form,48+48*Rblur[k][2]);

		SetAlpha(RblurT[k]*8);
		DrawGraphic(round(Rblur[k][0]+1+ScreenShakeX), round(Rblur[k][1]-4+ScreenShakeY));
		k++;
	}

	SetGraphicScale(Flip[Dir],1);

	SetAlpha(InvincibilityAlpha);

	if(!ExPlayer||InvincibilityAlpha<255){
		SetGraphicRect(Left[Dir]+85*form,0+48*Pose,Right[Dir]+85*form,48+48*Pose);
		DrawGraphic(round(GetPlayerX+1+ScreenShakeX), round(GetPlayerY()-4+ScreenShakeY));
	}else{
		SetGraphicRect(Left[Dir]+85*form,12+48*Pose,Right[Dir]+85*form,48+48*Pose);
		DrawGraphic(round(GetPlayerX+1+ScreenShakeX), round(GetPlayerY()+2+ScreenShakeY));
	}


	if(lastformalpha>0){
		SetAlpha(lastformalpha*InvincibilityAlpha);
		if(!ExPlayer||InvincibilityAlpha<255){
			SetGraphicRect(Left[Dir]+85*lastform,0+48*Pose,Right[Dir]+85*lastform,48+48*Pose);
			DrawGraphic(round(GetPlayerX+1+ScreenShakeX), round(GetPlayerY()-4+ScreenShakeY));
		}else{
			SetGraphicRect(Left[Dir]+85*lastform,12+48*Pose,Right[Dir]+85*lastform,48+48*Pose);
			DrawGraphic(round(GetPlayerX+1+ScreenShakeX), round(GetPlayerY()+2+ScreenShakeY));
		}
	}

	if(ExPlayer){
		SetGraphicRect(200+30*Dir,200,200+30*Dir+30,200+30);
		SetGraphicScale(1,1);
		SetGraphicAngle(0,0,0);
		SetAlpha(InvincibilityAlpha);
		DrawGraphic(round(GetPlayerX+ScreenShakeX)+[0,-2,2][Dir], round(GetPlayerY()-20+ScreenShakeY));
	}

}



sub RaibysFinalize{
    DeleteGraphic(img_raibys);
    DeleteGraphic(img_raibysspell);
    DeleteGraphic(imgRBG1);
    DeleteGraphic(imgRBG2);
    DeleteGraphic(imgRBG3);
    DSE("shardstorm");
    DSE("lance");
    DSE("ring");
    DSE("raibyscharge");

}