Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #TouhouDanmakufu
- #Title["Purple Sun of Xereus"]
- #Text[]
- #Player[MARISA]
- #ScriptVersion[2]
- script_enemy_main
- {
- let ImgBoss = GetCurrentScriptDirectory~"system/Moon.png";
- let CSD = GetCurrentScriptDirectory;
- let ShotData = CSD ~ "system/supershot.txt";
- let bg = CSD ~ "system/arapbg.png";
- let s = 0;
- let phase;
- let phasecounter = 0;
- @Initialize
- {
- SetLife(450);
- SetDamageRateEx(8,5,5,3);
- SetTimer(125);
- SetScore(100000);
- SetInvincibility(120);
- SetMovePosition01(GetCenterX, 120,3);
- SetEffectForZeroLife(120, 140, 1);
- LoadGraphic(ImgBoss);
- LoadGraphic(bg);
- LoadUserShotData(ShotData);
- ForbidBomb(true);
- MagicCircle(false);
- activity;
- }
- @MainLoop
- {
- if(OnPlayerMissed==true) { DeleteEnemyShotInCircle(ALL,GetPlayerX,GetPlayerY,112); }
- phasecounter++;
- if (phasecounter >= 0 && phasecounter < 600) { phase = 0; }
- if (phasecounter >= 600 && phasecounter < 1800) { phase = 1; }
- if (phasecounter >= 1800 && phasecounter < 3050) { phase = 2; }
- if (phasecounter >= 3050 && phasecounter < 3890) { phase = 2.5; }
- if (phasecounter >= 3890 && phasecounter < 6890) { phase = 3; }
- if (phasecounter >= 6990) { phase = 4; }
- /*if (phasecounter >= 0 && phasecounter < 600) { phase = 0; }
- if (phasecounter >= 600 && phasecounter < 1800) { phase = 1; }
- if (phasecounter >= 1800 && phasecounter < 4400) { phase = 2; }
- if (phasecounter >= 4400 && phasecounter < 5600) { phase = 2.5; }
- if (phasecounter >= 5600 && phasecounter < 8100) { phase = 3; }
- if (phasecounter >= 8700) { phase = 4; }*/
- if (GetTimer < 4) { AddLife(-450); }
- yield;
- }
- @DrawLoop
- {
- SetTexture(ImgBoss);
- SetRenderState(ALPHA);
- if (phasecounter > 180) { SetAlpha(1); }
- else { SetAlpha(255); }
- SetGraphicRect(0,0,218,214);
- SetGraphicScale(0.2,0.2);
- SetGraphicAngle(0,0,0);
- DrawGraphic(GetX,GetY);
- DrawText("Placeholder Boss",35,30,12,255);
- }
- @BackGround
- {
- SetTexture(bg);
- SetRenderState(ALPHA);
- SetAlpha(255);
- SetGraphicRect(0,0,10240,448);
- SetGraphicScale(1,1);
- SetGraphicAngle(0,0,0);
- DrawGraphic(GetCenterX-s,GetCenterY);
- s+=0.05;
- }
- @Finalize
- {
- if(GotSpellCardBonus) { PlaySE(CSD ~ "sfx/se_cardget.wav"); }
- DeleteGraphic(ImgBoss);
- DeleteGraphic(bg);
- }
- task activity
- {
- wait(120);
- sunspawn;
- movement;
- time;
- hitNoise;
- }
- task sunspawn
- {
- CreateEnemyFromScript("purplesun",GetEnemyX,GetEnemyY,0,0,0);
- }
- task movement
- {
- let x = 0;
- let speed = 0;
- let playerX;
- let playerY;
- Concentration01(30);
- wait(20);
- Concentration01(90);
- while(x == 0)
- {
- if(phase == 0)
- {
- SetMovePosition03(GetEnemyX,75,10,0.5);
- }
- while(phase == 4)
- {
- if(phasecounter == 6990) { playerX = GetPlayerX; playerY = GetPlayerY; }
- SetMovePosition03(playerX,playerY+300,200,speed);
- speed+=0.01;
- yield;
- }
- yield;
- }
- }
- task hitNoise
- {
- let enemyhp = GetEnemyLife / 100 * 10;
- loop
- {
- let currenthp = GetEnemyLife;
- wait(3);
- let newhp = GetEnemyLife;
- if(newhp<currenthp && newhp>enemyhp) { PlaySE(GetCurrentScriptDirectory~"sfx\se_damage00.wav"); }
- if(newhp<currenthp && newhp<enemyhp) { PlaySE(GetCurrentScriptDirectory~"sfx\se_damage01.wav"); }
- yield;
- }
- }
- task time
- {
- loop {
- wait(60);
- if(GetTimer<=10) { PlaySE(CSD~"sfx\se_timeout.wav"); }
- if(GetTimer<=5){ PlaySE(CSD~"sfx\se_timeout2.wav"); }
- yield;
- }
- }
- function wait(w)
- {
- loop(w)
- {
- yield;
- }
- }
- }
- ///////////////////////////////////////
- //The Purple Sun of Xereus
- ///////////////////////////////////////
- script_enemy purplesun
- {
- let CSD = GetCurrentScriptDirectory;
- let suntop = CSD ~ "system/PurpleSun.png";
- let sunmiddle = CSD ~ "system/PurpleSun2.png";
- let sunbottom = CSD ~ "system/PurpleSunAlpha.png";
- let skull = CSD ~ "system/cautionskull.png";
- let phasecounter = 0;
- let phase;
- @Initialize
- {
- LoadGraphic(sunspawn);
- LoadGraphic(suntop);
- LoadGraphic(sunmiddle);
- LoadGraphic(sunbottom);
- SetLife(10000);
- SetInvincibility(60);
- activity;
- }
- @MainLoop
- {
- SetCollisionA(GetX,GetY,32);
- //SetCollisionB(GetX,GetY,6);
- phasecounter++;
- if (phasecounter >= 0 && phasecounter < 600) { phase = 0; }
- if (phasecounter >= 600 && phasecounter < 1800) { phase = 1; }
- if (phasecounter >= 1800 && phasecounter < 3050) { phase = 2; }
- if (phasecounter >= 3050 && phasecounter < 3890) { phase = 2.5; }
- //if (phasecounter == 4250) { PlaySE(CSD ~ "sfx\se_caution.wav"); }
- if (phasecounter >= 3890 && phasecounter < 6890) { phase = 3; }
- if (phasecounter >= 6890) { phase = 4; }
- yield;
- }
- @DrawLoop
- {
- SetTexture(sunspawn);
- SetRenderState(ALPHA);
- SetAlpha(1);
- SetGraphicScale(1,1);
- SetGraphicRect(0,0,62,65);
- DrawGraphic(GetX,GetY);
- }
- @Finalize
- {
- DeleteGraphic(sunspawn);
- yield;
- }
- task activity
- {
- forming;
- wait(180);
- //caution;
- //gravity;
- creation;
- movement;
- growing;
- }
- task forming
- {
- Concentration01(120);
- SetMovePosition03(GetEnemyX,GetEnemyY+85,20,0.5);
- wait(60);
- SetColor(255,0,255);
- Concentration01(180);
- wait(120);
- loop(4)
- {
- Concentration01(240);
- SetColor(255,255,255);
- wait(200);
- Explosion01(GetX,GetY,0,0.1,180);
- Concentration01(30);
- SetColor(255,0,255);
- yield;
- }
- }
- task creation
- {
- purplesun("ADD",suntop,2,"clockwise",0.05);
- purplesun("ADD",sunmiddle,1,"clockwise",0.05);
- purplesun("ADD",sunmiddle,1,"counterclockwise",0.1);
- purplesun("ALPHA",sunbottom,1,"counterclockwise",0.05);
- }
- task gravity
- {
- let x = 0;
- while(x == 0)
- {
- while(phase == 0)
- {
- if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+2); wait(1); SetPlayerX(GetPlayerX-0.4); }
- if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-2); wait(1); SetPlayerX(GetPlayerX+0.4); }
- if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+2); wait(1); SetPlayerY(GetPlayerY-0.4); }
- if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-2); wait(1); SetPlayerY(GetPlayerY+0.4); }
- yield;
- }
- while(phase == 1 || phase == 2)
- {
- if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+1); wait(2); SetPlayerX(GetPlayerX-0.2); }
- if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-1); wait(2); SetPlayerX(GetPlayerX+0.2); }
- if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+1); wait(2); SetPlayerY(GetPlayerY-0.2); }
- if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-1); wait(2); SetPlayerY(GetPlayerY+0.2); }
- yield;
- }
- /*while(phase == 1.5)
- {
- if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+2); wait(1); SetPlayerX(GetPlayerX-0.4); }
- if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-2); wait(1); SetPlayerX(GetPlayerX+0.4); }
- if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+2); wait(1); SetPlayerY(GetPlayerY-0.4); }
- if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-2); wait(1); SetPlayerY(GetPlayerY+0.4); }
- yield;
- }
- while(phase == 2)
- {
- if(GetPlayerX<GetX){ SetPlayerX(GetPlayerX+1.5); wait(2); SetPlayerX(GetPlayerX-0.3); }
- if(GetPlayerX>GetX){ SetPlayerX(GetPlayerX-1.5); wait(2); SetPlayerX(GetPlayerX+0.3); }
- if(GetPlayerY<GetY){ SetPlayerY(GetPlayerY+1.5); wait(2); SetPlayerY(GetPlayerY-0.3); }
- if(GetPlayerY>GetY){ SetPlayerY(GetPlayerY-1.5); wait(2); SetPlayerY(GetPlayerY+0.3); }
- yield;
- }*/
- yield;
- }
- }
- task movement
- {
- let x = 0;
- let speed = 0;
- while(x == 0)
- {
- while(phase == 2)
- {
- SetMovePosition03(GetPlayerX,GetPlayerY,200,3);
- wait(450);
- yield;
- }
- while(phase == 2.5)
- {
- SetMovePosition03(GetEnemyX,GetEnemyY,200,1);
- yield;
- }
- /*while(phase == 4)
- {
- SetMovePosition03(GetEnemyX,GetEnemyY+800,200,speed);
- speed+=0.01;
- yield;
- }*/
- yield;
- }
- }
- task growing
- {
- let x = 0;
- while(x == 0)
- {
- if(phasecounter == 3890)
- {
- SetColor(255,0,255);
- Concentration01(180);
- wait(120);
- loop(5)
- {
- Concentration01(300);
- SetColor(255,255,255);
- wait(260);
- Explosion01(GetX,GetY,0,0.1,180);
- Concentration01(30);
- SetColor(255,0,255);
- yield;
- }
- }
- yield;
- }
- }
- task purplesun(render,graphic,layer,spindir,pulse)
- {
- let obj = Obj_Create(OBJ_EFFECT);
- let counter = 0;
- let x = 0;
- let frame = 0;
- let spin = 0;
- if (render == "ADD") { ObjEffect_SetRenderState(obj,ADD); }
- if (render == "ALPHA") { ObjEffect_SetRenderState(obj,ALPHA); }
- ObjEffect_SetTexture(obj,graphic);
- Obj_SetPosition(obj,GetX,GetY);
- ObjEffect_SetLayer(obj,layer);
- ObjEffect_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP);
- ObjEffect_CreateVertex(obj,4);
- ObjEffect_SetVertexXY(obj,0,-128,-128);
- ObjEffect_SetVertexXY(obj,1,128,-128);
- ObjEffect_SetVertexXY(obj,2,-128,128);
- ObjEffect_SetVertexXY(obj,3,128,128);
- ObjEffect_SetVertexUV(obj,0,0,0);
- ObjEffect_SetVertexUV(obj,1,256,0);
- ObjEffect_SetVertexUV(obj,2,0,256);
- ObjEffect_SetVertexUV(obj,3,256,256);
- while(!Obj_BeDeleted(obj))
- {
- if (spindir == "clockwise") { ObjEffect_SetAngle(obj,0,0,spin); }
- if (spindir == "counterclockwise") { ObjEffect_SetAngle(obj,0,0,-spin); }
- if (phase == 0 || phase == 1)
- {
- Obj_SetPosition(obj,GetX,GetY);
- //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),44);
- if (x > 0.9){ x = 0.9; }
- ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
- frame++;
- }
- if (phase == 2 || phase == 2.5)
- {
- Obj_SetPosition(obj,GetX,GetY);
- //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),44);
- if (x > 1){ x = 1; }
- ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
- frame++;
- }
- if (phase == 3)
- {
- Obj_SetPosition(obj,GetX,GetY);
- //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),96);
- if (x > 2.5){ x = 2.5; }
- ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
- frame++;
- }
- if (phase == 4)
- {
- Obj_SetPosition(obj,GetEnemyX,GetEnemyY);
- //SetCollisionB(Obj_GetX(obj),Obj_GetY(obj),96);
- ObjEffect_SetScale(obj,x+sin(frame)*pulse,x+sin(frame)*pulse);
- if(counter == 180)
- {
- //Explosion01(GetX,GetY,0,0.1,120);
- }
- if(counter == 520)
- {
- Obj_Delete(obj);
- }
- frame++;
- counter++;
- }
- if(phase != 4)
- {
- x+=0.001;
- }
- else
- {
- x-=0.005;
- }
- spin++;
- yield;
- }
- }
- task caution
- {
- PlaySE(CSD ~ "sfx\se_caution.wav");
- let obj = Obj_Create(OBJ_EFFECT);
- Obj_SetPosition(obj,GetCenterX,GetCenterY-100);
- ObjEffect_SetTexture(obj,skull);
- ObjEffect_SetRenderState(obj,ALPHA);
- ObjEffect_SetPrimitiveType(obj,PRIMITIVE_TRIANGLESTRIP);
- ObjEffect_SetLayer(obj,7);
- ObjEffect_CreateVertex(obj,4);
- ObjEffect_SetScale(obj,0.8,0.8);
- ObjEffect_SetVertexXY(obj,0,-128,-128);
- ObjEffect_SetVertexXY(obj,1,128,-128);
- ObjEffect_SetVertexXY(obj,2,-128,128);
- ObjEffect_SetVertexXY(obj,3,128,128);
- ObjEffect_SetVertexUV(obj,0,0,0);
- ObjEffect_SetVertexUV(obj,1,256,0);
- ObjEffect_SetVertexUV(obj,2,0,256);
- ObjEffect_SetVertexUV(obj,3,256,256);
- let x = Obj_GetX(obj);
- let alpha = 0;
- loop(15) {
- Obj_SetPosition(obj, x, GetCenterY);
- ObjEffect_SetVertexColor(obj, 0, alpha, 255, 255, 255);
- ObjEffect_SetVertexColor(obj, 1, alpha, 255, 255, 255);
- ObjEffect_SetVertexColor(obj, 2, alpha, 255, 255, 255);
- ObjEffect_SetVertexColor(obj, 3, alpha, 255, 255, 255);
- //x += 2.5;
- alpha += 16;
- wait(1);
- }
- //Obj_Delete(obj);
- }
- function wait(w)
- {
- loop(w)
- {
- yield;
- }
- }
- #include_function ".\Familiars.txt"
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement