

  let csd = GetCurrentScriptDirectory;
  let cx=GetCenterX();
  let cy=GetCenterY();
  let minx=GetClipMinX();
  let miny=GetClipMinY();
  let maxx=GetClipMaxX();
  let maxy=GetClipMaxY();
  let difficult = GetCommonDataDefaultEx("","dif",0);
  let playmode = GetCommonDataDefaultEx("","mode",1);
  let PracticeCardFrag = GetCommonDataDefaultEx("","pcf",[false]);
  let SpellCardHistory = GetCommonDataDefaultEx("","sch",[0]);
  let GetSpellCard = GetCommonDataDefaultEx("","gsc",[0]);
 let history = 0;
 let getnum = 0;
   alternative(difficult)
    case(2,3){
   history = SpellCardHistory[difficult-1];
   getnum = GetSpellCard[difficult-1];
       }

  let timecounter1 = csd~ "..\se\timecounter01.wav"; 
  let timecounter2 = csd~ "..\se\timecounter02.wav"; 
  let seshot1 = csd~ "..\se\enemyshot01.wav"; 
   let seshot3 = csd~ "..\se\enemyshot03.wav"; 
  let sevanish = csd~ "..\se\BossVanish.wav"; 
  let secon= csd~ "..\se\Concentration.wav";
  let seray = csd~ "..\se\enemylaser01.wav"; 
 let SpellBack = csd~".\img\spellback.png"; LoadGraphic(SpellBack);
 let kobushi =  csd~".\img\kobusi.png"; LoadGraphic(kobushi);
  SetRateScoreSystemEnable(false);
 SetEffectForZeroLife(0,0,0);
  SetEnemyMarker(true);
  let sgrnum = 0;
  let shake = false;
  let damage = 5;
 Graph;  

    task Count{
        while(GetTimer > 10){yield;}
     loop(5){
      PlaySE(timecounter1); 
        loop(60){yield;}
       }
       loop(5){
          PlaySE(timecounter2); 
        loop(60){yield;}
       }
    }

  task Graph{
  let second = 0;
  loop{
   alternative(sgrnum)
    case(0){
     alternative(second)
         case(0,1,2,3,4,5,6,7,8,9,10,11){sgr(0,0);}
         others{second = 0;}
      }   
    case(1){
       alternative(second)
         case(0,1,2,3,4,5,6,7,8,9){sgr(2,0); second++;}
         case(10){sgr(2,1); second = 10;}
        others{second = 10;}
     }
      case(2){
       alternative(second)
         case(0,1,2,3,4,5,6,7,8,9){sgr(2,2); second++;}
         case(10){sgr(2,3); second = 10;}
        others{second = 10;}
     }
     case(3){
     alternative(second)
         case(0,1,2,3,4,5,6,7){sgr(3,1); }
         others{second = 0;}
      } 
   others{second = 0;}
   wait(1);
    }
  }

  task Hand(x,y,v,angle,accel,size,kill){
           let c= Obj_Create(OBJ_EFFECT);
             Obj_SetX(c,x);
             Obj_SetY(c,y);
             Obj_SetAngle(c,angle);
             ObjEffect_SetAngle(c,0,0,angle);
             ObjEffect_SetTexture(c,kobushi);
             ObjEffect_SetRenderState(c,ALPHA);
             ObjEffect_SetPrimitiveType(c,PRIMITIVE_TRIANGLEFAN);
             ObjEffect_SetLayer(c,5);
             ObjEffect_CreateVertex(c,62);
             ObjEffect_SetVertexXY(c,0,0,0);
             ObjEffect_SetVertexUV(c,0,128,128);
             ObjEffect_SetVertexColor(c,0,255,255,255,255);
             ObjEffect_SetScale(c,size/10,size/10);

            ascent(let i in 0..61){
                ObjEffect_SetVertexXY(c,i+1,cos(i*6)*20,sin(i*6)*20);
                ObjEffect_SetVertexUV(c,i+1,cos(i*6)*128+128,sin(i*6)*128+128);
                ObjEffect_SetVertexColor(c,i+1,255,255,255,255);
            }
      Move;
   Coll;
   wait(kill);
   Obj_Delete(c);

    task Move{
  let speed = 3;
  let cou = 0;
   while(!Obj_BeDeleted(c)){
     if(speed <= 0){accel = 0.1;}
    Obj_SetX(c,Obj_GetX(c)+speed*cos(angle));
    Obj_SetY(c,Obj_GetY(c)+speed*sin(angle));
 if(cou == 0){ HandCover(Obj_GetX(c),Obj_GetY(c),0,angle,0,size-5); cou = 1;}
  cou--;
   speed += accel;
  if(speed > v){speed = v;}
    yield;
  if(Obj_GetY(c) > maxy-size){speed = 0; shake = true;  break;}
         }
   PlaySE(seshot1);
   wait(10);
  shake = false;
  
  ascent(b in 1..30){
       ObjEffect_ResizeVertexCount(c,20);
        ObjEffect_SetVertexXY(c,0,0,0);
        ObjEffect_SetVertexUV(c,0,128,128);
        ObjEffect_SetVertexColor(c,0,250-b*8,255,255,255);
         ascent(let i in 0..19){
                ObjEffect_SetVertexXY(c,i+1,cos(i*20)*20,sin(i*20)*20);
                ObjEffect_SetVertexUV(c,i+1,cos(i*20)*128+128,sin(i*20)*128+128);
                ObjEffect_SetVertexColor(c,i+1,250-b*8,255,255,255);
                }
  let x = Obj_GetX(c)+offsetX(rand(0,size+20),rand(-180,180));
  let y = Obj_GetY(c)+offsetY(rand(0,size+40),rand(-180,180));
  CreateShotA(0,x,y,10);
  SetShotDataA(0,0,0,0,0,0,0,17);
  SetShotKillTime(0,480);
  FireShot(0);
 PlaySE(seshot3);
      wait(1);
            }
   Obj_Delete(c);
        }
  task Coll{
   while(!Obj_BeDeleted(c)){
 if( ((Obj_GetX(c)-GetPlayerX)^2 + (Obj_GetY(c)-GetPlayerY)^2)^0.5 < size+20 && GetTimeOfPlayerInvincibility == 0){ShootDownPlayer;}
   wait(1);
        }
      }
    }

   task HandCover(x,y,v,angle,accel,size){
           let c= Obj_Create(OBJ_EFFECT);
             Obj_SetX(c,x);
             Obj_SetY(c,y);
             Obj_SetAngle(c,angle);
             ObjEffect_SetAngle(c,0,0,angle);
             ObjEffect_SetTexture(c,kobushi);
             ObjEffect_SetRenderState(c,ADD);
             ObjEffect_SetPrimitiveType(c,PRIMITIVE_TRIANGLEFAN);
             ObjEffect_SetLayer(c,2);
             ObjEffect_CreateVertex(c,62);
             ObjEffect_SetVertexXY(c,0,0,0);
             ObjEffect_SetVertexUV(c,0,128,128);
             ObjEffect_SetVertexColor(c,0,230,255,230,230);
             ObjEffect_SetScale(c,size/10,size/10);

            ascent(let i in 0..61){
                ObjEffect_SetVertexXY(c,i+1,cos(i*6)*20,sin(i*6)*20);
                ObjEffect_SetVertexUV(c,i+1,cos(i*6)*128+128,sin(i*6)*128+128);
                ObjEffect_SetVertexColor(c,i+1,230,255,230,230);
            }
   wait(5);
   ascent(b in 1..10){
       ObjEffect_ResizeVertexCount(c,20);
        ObjEffect_SetVertexXY(c,0,0,0);
        ObjEffect_SetVertexUV(c,0,128,128);
        ObjEffect_SetVertexColor(c,0,230-b*80,255,230-b*80,230-b*80);
         ascent(let i in 0..19){
                ObjEffect_SetVertexXY(c,i+1,cos(i*20)*20,sin(i*20)*20);
                ObjEffect_SetVertexUV(c,i+1,cos(i*20)*128+128,sin(i*20)*128+128);
                ObjEffect_SetVertexColor(c,i+1,230-b*80,230-20*b,230-b*80,230-b*40);
                }
      wait(1);
            }
     Obj_Delete(c);
     }

 task SpellBackGround(size){
           let c= Obj_Create(OBJ_EFFECT);
             Obj_SetX(c,cx);
             Obj_SetY(c,cy);
             Obj_SetAngle(c,0);
             ObjEffect_SetAngle(c,0,0,0);
             ObjEffect_SetTexture(c,SpellBack);
             ObjEffect_SetRenderState(c,ADD);
             ObjEffect_SetPrimitiveType(c,PRIMITIVE_TRIANGLEFAN);
             ObjEffect_SetLayer(c,0);
             ObjEffect_CreateVertex(c,62);
             ObjEffect_SetVertexXY(c,0,0,0);
             ObjEffect_SetVertexUV(c,0,160,120);
             ObjEffect_SetVertexColor(c,0,64,255,255,255);
             ObjEffect_SetScale(c,size/10,size/10);

            ascent(let i in 0..61){
                ObjEffect_SetVertexXY(c,i+1,cos(i*6)*20,sin(i*6)*20);
                ObjEffect_SetVertexUV(c,i+1,cos(i*6)*1600+160,sin(i*6)*1200+120);
                ObjEffect_SetVertexColor(c,i+1,64,255,255,255);
            }
    /*  Set; */
     Movee;
     task Set{
   let i = 0;
         while(!Obj_BeDeleted(c)){
            ObjEffect_SetAngle(c,0,0,i/10);
        i--;
            yield;
           }
        }
   task Movee{
   let n = 0.3;
  let k = 0;
         while(!Obj_BeDeleted(c)){
      Obj_SetX(c,Obj_GetX(c)+n);
      Obj_SetY(c,Obj_GetY(c)+n/2);
        k += n;
    if(n > 25 || k < -25){n = -n;}
            yield;
           }
        }
    }