SHARE
TWEET

Untitled

a guest Jun 19th, 2017 45 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #TouhouDanmakufu
  2. #Title["Purple Sun of Xereus"]
  3. #Text[]
  4. #Player[MARISA]
  5. #ScriptVersion[2]
  6.  
  7. script_enemy_main
  8. {
  9.  
  10.     let ImgBoss = GetCurrentScriptDirectory~"system/Moon.png";
  11.  
  12.     let CSD = GetCurrentScriptDirectory;
  13.     let ShotData = CSD ~ "system/supershot.txt";
  14.  
  15.     let bg = CSD ~ "system/arapbg.png";
  16.     let s = 0;
  17.  
  18.     let phase;
  19.     let phasecounter = 0;
  20.  
  21.     @Initialize
  22.     {
  23.         SetLife(450);
  24.         SetDamageRateEx(8,5,5,3);
  25.         SetTimer(125);
  26.         SetScore(100000);
  27.         SetInvincibility(120);
  28.         SetMovePosition01(GetCenterX, 120,3);
  29.         SetEffectForZeroLife(120, 140, 1);
  30.  
  31.         LoadGraphic(ImgBoss);
  32.         LoadGraphic(bg);
  33.         LoadUserShotData(ShotData);
  34.  
  35.         ForbidBomb(true);
  36.         MagicCircle(false);
  37.  
  38.         activity;
  39.     }
  40.  
  41.     @MainLoop
  42.     {
  43.         if(OnPlayerMissed==true) { DeleteEnemyShotInCircle(ALL,GetPlayerX,GetPlayerY,112); }
  44.         phasecounter++;
  45.  
  46.         if (phasecounter >= 0 && phasecounter < 600) { phase = 0; }
  47.         if (phasecounter >= 600 && phasecounter < 1800) { phase = 1; }
  48.         if (phasecounter >= 1800 && phasecounter < 3050) { phase = 2; }
  49.         if (phasecounter >= 3050 && phasecounter < 3890) { phase = 2.5; }
  50.         if (phasecounter >= 3890 && phasecounter < 6890) { phase = 3; }
  51.         if (phasecounter >= 6990) { phase = 4; }
  52.  
  53.         /*if (phasecounter >= 0 && phasecounter < 600) { phase = 0; }
  54.         if (phasecounter >= 600 && phasecounter < 1800) { phase = 1; }
  55.         if (phasecounter >= 1800 && phasecounter < 4400) { phase = 2; }
  56.         if (phasecounter >= 4400 && phasecounter < 5600) { phase = 2.5; }
  57.         if (phasecounter >= 5600 && phasecounter < 8100) { phase = 3; }
  58.         if (phasecounter >= 8700) { phase = 4; }*/
  59.         if (GetTimer < 4) { AddLife(-450); }
  60.         yield;
  61.     }
  62.  
  63.     @DrawLoop
  64.     {
  65.         SetTexture(ImgBoss);
  66.         SetRenderState(ALPHA);
  67.         if (phasecounter > 180) { SetAlpha(1); }
  68.         else { SetAlpha(255); }
  69.         SetGraphicRect(0,0,218,214);
  70.         SetGraphicScale(0.2,0.2);
  71.         SetGraphicAngle(0,0,0);
  72.         DrawGraphic(GetX,GetY);
  73.         DrawText("Placeholder Boss",35,30,12,255);
  74.     }
  75.  
  76.     @BackGround
  77.     {
  78.         SetTexture(bg);
  79.         SetRenderState(ALPHA);
  80.         SetAlpha(255);
  81.         SetGraphicRect(0,0,10240,448);
  82.         SetGraphicScale(1,1);
  83.         SetGraphicAngle(0,0,0);
  84.         DrawGraphic(GetCenterX-s,GetCenterY);
  85.         s+=0.05;
  86.     }
  87.  
  88.     @Finalize
  89.     {
  90.         if(GotSpellCardBonus) { PlaySE(CSD ~ "sfx/se_cardget.wav"); }
  91.         DeleteGraphic(ImgBoss);
  92.         DeleteGraphic(bg);
  93.     }
  94.  
  95.         task activity
  96.     {
  97.         wait(120);
  98.         sunspawn;
  99.         movement;
  100.         time;
  101.         hitNoise;
  102.         }
  103.  
  104.     task sunspawn
  105.     {
  106.         CreateEnemyFromScript("purplesun",GetEnemyX,GetEnemyY,0,0,0);
  107.     }
  108.  
  109.     task movement
  110.     {
  111.         let x = 0;
  112.         let speed = 0;
  113.         let playerX;
  114.         let playerY;
  115.         Concentration01(30);
  116.         wait(20);
  117.         Concentration01(90);
  118.         while(x == 0)
  119.         {
  120.             if(phase == 0)
  121.             {
  122.                 SetMovePosition03(GetEnemyX,75,10,0.5);
  123.             }
  124.             while(phase == 4)
  125.             {
  126.                 if(phasecounter == 6990) { playerX = GetPlayerX; playerY = GetPlayerY; }
  127.                 SetMovePosition03(playerX,playerY+300,200,speed);
  128.                 speed+=0.01;
  129.                 yield;
  130.             }
  131.             yield;
  132.         }
  133.     }
  134.  
  135.         task hitNoise
  136.     {  
  137.          let enemyhp = GetEnemyLife / 100 * 10;
  138.          loop
  139.          {
  140.             let currenthp = GetEnemyLife;
  141.             wait(3);
  142.             let newhp = GetEnemyLife;
  143.             if(newhp<currenthp && newhp>enemyhp) { PlaySE(GetCurrentScriptDirectory~"sfx\se_damage00.wav"); }
  144.             if(newhp<currenthp && newhp<enemyhp) { PlaySE(GetCurrentScriptDirectory~"sfx\se_damage01.wav"); }
  145.             yield;
  146.          }
  147.         }
  148.  
  149.         task time
  150.     {
  151.         loop {
  152.             wait(60);
  153.             if(GetTimer<=10) { PlaySE(CSD~"sfx\se_timeout.wav"); }
  154.             if(GetTimer<=5){ PlaySE(CSD~"sfx\se_timeout2.wav"); }
  155.             yield;
  156.         }
  157.  
  158.         }
  159.  
  160.     function wait(w)
  161.     {
  162.         loop(w)
  163.         {
  164.             yield;
  165.         }
  166.         }
  167.  
  168. }
  169.  
  170. ///////////////////////////////////////
  171. //The Purple Sun of Xereus
  172. ///////////////////////////////////////
  173.  
  174. script_enemy purplesun
  175. {
  176.     let CSD = GetCurrentScriptDirectory;
  177.     let suntop = CSD ~ "system/PurpleSun.png";
  178.     let sunmiddle = CSD ~ "system/PurpleSun2.png";
  179.     let sunbottom = CSD ~ "system/PurpleSunAlpha.png";
  180.     let skull = CSD ~ "system/cautionskull.png";
  181.     let phasecounter = 0;
  182.     let phase;
  183.  
  184.     @Initialize
  185.     {
  186.         LoadGraphic(sunspawn);
  187.         LoadGraphic(suntop);
  188.         LoadGraphic(sunmiddle);
  189.         LoadGraphic(sunbottom);
  190.         SetLife(10000);
  191.         SetInvincibility(60);
  192.  
  193.         activity;
  194.     }
  195.  
  196.     @MainLoop
  197.     {
  198.         SetCollisionA(GetX,GetY,32);
  199.         //SetCollisionB(GetX,GetY,6);
  200.         phasecounter++;
  201.         if (phasecounter >= 0 && phasecounter < 600) { phase = 0; }
  202.         if (phasecounter >= 600 && phasecounter < 1800) { phase = 1; }
  203.         if (phasecounter >= 1800 && phasecounter < 3050) { phase = 2; }
  204.         if (phasecounter >= 3050 && phasecounter < 3890) { phase = 2.5; }
  205.         //if (phasecounter == 4250) { PlaySE(CSD ~ "sfx\se_caution.wav"); }
  206.         if (phasecounter >= 3890 && phasecounter < 6890) { phase = 3; }
  207.         if (phasecounter >= 6890) { phase = 4; }
  208.         yield;
  209.     }
  210.  
  211.     @DrawLoop
  212.     {
  213.         SetTexture(sunspawn);
  214.         SetRenderState(ALPHA);
  215.         SetAlpha(1);
  216.         SetGraphicScale(1,1);
  217.         SetGraphicRect(0,0,62,65);
  218.         DrawGraphic(GetX,GetY);    
  219.     }
  220.  
  221.     @Finalize
  222.     {  
  223.         DeleteGraphic(sunspawn);
  224.         yield;
  225.     }
  226.  
  227.     task activity
  228.     {
  229.         forming;
  230.         wait(180);
  231.         //caution;
  232.         //gravity;
  233.         creation;
  234.         movement;
  235.         growing;
  236.     }
  237.  
  238.     task forming
  239.     {
  240.         Concentration01(120);
  241.         SetMovePosition03(GetEnemyX,GetEnemyY+85,20,0.5);
  242.         wait(60);
  243.         SetColor(255,0,255);
  244.         Concentration01(180);
  245.         wait(120);
  246.         loop(4)
  247.         {
  248.             Concentration01(240);
  249.             SetColor(255,255,255);
  250.             wait(200);
  251.             Explosion01(GetX,GetY,0,0.1,180);
  252.             Concentration01(30);
  253.             SetColor(255,0,255);
  254.             yield;
  255.         }      
  256.     }
  257.  
  258.     task creation
  259.     {
  260.         purplesun("ADD",suntop,2,"clockwise",0.05);
  261.         purplesun("ADD",sunmiddle,1,"clockwise",0.05);
  262.         purplesun("ADD",sunmiddle,1,"counterclockwise",0.1);
  263.         purplesun("ALPHA",sunbottom,1,"counterclockwise",0.05);
  264.  
  265.     }
  266.  
  267.     task gravity
  268.     {
  269.         let x = 0;
  270.         while(x == 0)
  271.         {
  272.             while(phase == 0)
  273.             {
  274.                 if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+2); wait(1); SetPlayerX(GetPlayerX-0.4); }
  275.                 if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-2); wait(1); SetPlayerX(GetPlayerX+0.4); }
  276.                 if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+2); wait(1); SetPlayerY(GetPlayerY-0.4); }
  277.                 if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-2); wait(1); SetPlayerY(GetPlayerY+0.4); }  
  278.  
  279.                 yield;
  280.             }
  281.            
  282.             while(phase == 1 || phase == 2)
  283.             {
  284.                 if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+1); wait(2); SetPlayerX(GetPlayerX-0.2); }
  285.                 if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-1); wait(2); SetPlayerX(GetPlayerX+0.2); }
  286.                 if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+1); wait(2); SetPlayerY(GetPlayerY-0.2); }
  287.                 if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-1); wait(2); SetPlayerY(GetPlayerY+0.2); }  
  288.                 yield;
  289.             }  
  290.  
  291.             /*while(phase == 1.5)
  292.             {
  293.                 if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+2); wait(1); SetPlayerX(GetPlayerX-0.4); }
  294.                 if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-2); wait(1); SetPlayerX(GetPlayerX+0.4); }
  295.                 if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+2); wait(1); SetPlayerY(GetPlayerY-0.4); }
  296.                 if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-2); wait(1); SetPlayerY(GetPlayerY+0.4); }  
  297.                 yield;
  298.             }
  299.  
  300.             while(phase == 2)
  301.             {
  302.                 if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+1.5); wait(2); SetPlayerX(GetPlayerX-0.3); }
  303.                 if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-1.5); wait(2); SetPlayerX(GetPlayerX+0.3); }
  304.                 if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+1.5); wait(2); SetPlayerY(GetPlayerY-0.3); }
  305.                 if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-1.5); wait(2); SetPlayerY(GetPlayerY+0.3); }
  306.                 yield;
  307.             }*/
  308.             yield;
  309.         }
  310.     }
  311.  
  312.     task movement
  313.     {
  314.         let x = 0;
  315.         let speed = 0;
  316.         while(x == 0)
  317.         {
  318.             while(phase == 2)
  319.             {
  320.                 SetMovePosition03(GetPlayerX,GetPlayerY,200,3);
  321.                 wait(450);
  322.                 yield;
  323.             }
  324.             while(phase == 2.5)
  325.             {
  326.                 SetMovePosition03(GetEnemyX,GetEnemyY,200,1);
  327.                 yield;
  328.             }
  329.             /*while(phase == 4)
  330.             {
  331.                 SetMovePosition03(GetEnemyX,GetEnemyY+800,200,speed);
  332.                 speed+=0.01;
  333.                 yield;
  334.             }*/
  335.             yield;
  336.         }
  337.     }
  338.  
  339.     task growing
  340.     {
  341.         let x = 0;
  342.         while(x == 0)
  343.         {
  344.             if(phasecounter == 3890)
  345.             {
  346.                 SetColor(255,0,255);
  347.                 Concentration01(180);
  348.                 wait(120);
  349.                 loop(5)
  350.                 {
  351.                     Concentration01(300);
  352.                     SetColor(255,255,255);
  353.                     wait(260);
  354.                     Explosion01(GetX,GetY,0,0.1,180);
  355.                     Concentration01(30);
  356.                     SetColor(255,0,255);
  357.                     yield;
  358.                 }      
  359.             }
  360.            
  361.             yield;
  362.         }
  363.     }
  364.  
  365.     task purplesun(render,graphic,layer,spindir,pulse)
  366.     {
  367.         let obj = Obj_Create(OBJ_EFFECT);
  368.  
  369.         let counter = 0;
  370.         let x = 0;
  371.         let frame = 0; 
  372.         let spin = 0;
  373.        
  374.         if (render == "ADD") { ObjEffect_SetRenderState(obj,ADD); }
  375.         if (render == "ALPHA") { ObjEffect_SetRenderState(obj,ALPHA); }
  376.    
  377.         ObjEffect_SetTexture(obj,graphic);
  378.  
  379.         Obj_SetPosition(obj,GetX,GetY);
  380.         ObjEffect_SetLayer(obj,layer);
  381.  
  382.         ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
  383.         ObjEffect_CreateVertex(obj,4);
  384.  
  385.         ObjEffect_SetVertexXY(obj,0,-128,-128);
  386.         ObjEffect_SetVertexXY(obj,1,128,-128);
  387.         ObjEffect_SetVertexXY(obj,2,-128,128);
  388.         ObjEffect_SetVertexXY(obj,3,128,128);
  389.  
  390.         ObjEffect_SetVertexUV(obj,0,0,0);
  391.         ObjEffect_SetVertexUV(obj,1,256,0);
  392.         ObjEffect_SetVertexUV(obj,2,0,256);
  393.         ObjEffect_SetVertexUV(obj,3,256,256);
  394.  
  395.         while(!Obj_BeDeleted(obj))
  396.         {
  397.             if (spindir == "clockwise") { ObjEffect_SetAngle(obj,0,0,spin); }
  398.             if (spindir == "counterclockwise") { ObjEffect_SetAngle(obj,0,0,-spin); }
  399.  
  400.             if (phase == 0 || phase == 1)
  401.             {
  402.                 Obj_SetPosition(obj,GetX,GetY);
  403.                 //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),44);
  404.                 if (x > 0.9){ x = 0.9; }
  405.                 ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
  406.                 frame++;
  407.             }
  408.  
  409.             if (phase == 2 || phase == 2.5)
  410.             {
  411.                 Obj_SetPosition(obj,GetX,GetY);
  412.                 //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),44);
  413.                 if (x > 1){ x = 1; }
  414.                 ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
  415.                 frame++;
  416.             }
  417.             if (phase == 3)
  418.             {
  419.                 Obj_SetPosition(obj,GetX,GetY);
  420.                 //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),96);
  421.                 if (x > 2.5){ x = 2.5; }
  422.                 ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
  423.                 frame++;   
  424.             }
  425.             if (phase == 4)
  426.             {
  427.                 Obj_SetPosition(obj,GetEnemyX,GetEnemyY);
  428.                 //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),96);
  429.                 ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
  430.                 if(counter == 180)
  431.                 {
  432.                     //Explosion01(GetX,GetY,0,0.1,120);
  433.                 }
  434.                 if(counter == 520)
  435.                 {
  436.                     Obj_Delete(obj);
  437.                 }
  438.                 frame++;   
  439.                 counter++;
  440.             }
  441.            
  442.             if(phase != 4)
  443.             {
  444.                 x+=0.001;
  445.             }
  446.             else
  447.             {
  448.                 x-=0.005;
  449.             }
  450.            
  451.             spin++;
  452.             yield;
  453.         }
  454.     }
  455.  
  456.     task caution
  457.     {
  458.         PlaySE(CSD ~ "sfx\se_caution.wav");
  459.         let obj = Obj_Create(OBJ_EFFECT);
  460.         Obj_SetPosition(obj,GetCenterX,GetCenterY-100);
  461.         ObjEffect_SetTexture(obj,skull);
  462.         ObjEffect_SetRenderState(obj,ALPHA);
  463.         ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
  464.         ObjEffect_SetLayer(obj,7);
  465.         ObjEffect_CreateVertex(obj,4);
  466.         ObjEffect_SetScale(obj,0.8,0.8);
  467.  
  468.         ObjEffect_SetVertexXY(obj,0,-128,-128);
  469.         ObjEffect_SetVertexXY(obj,1,128,-128);
  470.         ObjEffect_SetVertexXY(obj,2,-128,128);
  471.         ObjEffect_SetVertexXY(obj,3,128,128);
  472.  
  473.         ObjEffect_SetVertexUV(obj,0,0,0);
  474.         ObjEffect_SetVertexUV(obj,1,256,0);
  475.         ObjEffect_SetVertexUV(obj,2,0,256);
  476.         ObjEffect_SetVertexUV(obj,3,256,256);
  477.  
  478.        
  479.         let x = Obj_GetX(obj);
  480.         let alpha = 0;
  481.         loop(15) {
  482.             Obj_SetPosition(obj, x, GetCenterY);
  483.             ObjEffect_SetVertexColor(obj, 0, alpha, 255, 255, 255);
  484.             ObjEffect_SetVertexColor(obj, 1, alpha, 255, 255, 255);
  485.             ObjEffect_SetVertexColor(obj, 2, alpha, 255, 255, 255);
  486.             ObjEffect_SetVertexColor(obj, 3, alpha, 255, 255, 255);
  487.  
  488.             //x += 2.5;
  489.             alpha += 16;
  490.             wait(1);
  491.         }
  492.  
  493.         //Obj_Delete(obj);
  494.     }  
  495.  
  496.     function wait(w)
  497.     {
  498.         loop(w)
  499.     {
  500.             yield;
  501.         }
  502.         }
  503.  
  504.     #include_function ".\Familiars.txt"
  505. }
RAW Paste Data
Top