#東方弾幕風 #Title[通路1] #Text[通路1] #ScriptVersion[2] script_enemy_main { let imgBoss = "script\img\ExRumia.png"; let frame = 0; let direction = -1; let speed=1; let bombflag=0; let randomnumberforchoosingspeed; let tmpspeed; let inspeedchangecount=0; let speedchangeduringframe; let inspeedchangeflag=0;//speed変更中なら1、それ以外の時0 let speeddiff; let normalspeed=3; let random; let shotspan = 5; let shottimes=40; let frameunit=shotspan*shottimes; let normalspeed=1; let width = 120; function selectspeed{//倍率なので、normalspeedを掛ける randomnumberforchoosingspeed=rand_int(0,9); if (randomnumberforchoosingspeed==0){ return 1; } else if (randomnumberforchoosingspeed==1){ return 2; } else if (randomnumberforchoosingspeed==2){ return 3; } else if (randomnumberforchoosingspeed==3){ return 4; } else if (randomnumberforchoosingspeed==4){ return 8; } else if (randomnumberforchoosingspeed==5){ return 12; } else if (randomnumberforchoosingspeed==6){ return 0.5; } else{ return -1; //loop{CreateShot01(100,100,1,90,RED01,0);yield;yield;yield;yield;yield;} } } function selectspeed_crisis{//倍率なので、normalspeedを掛ける randomnumberforchoosingspeed=rand(0,9.3); if (randomnumberforchoosingspeed<=2){ return 1; } else if (randomnumberforchoosingspeed<=2.4){ return 2; } else if (randomnumberforchoosingspeed<=2.8){ return 3; } else if (randomnumberforchoosingspeed<=3){ return 4; } else if (randomnumberforchoosingspeed<=5){ return 8; } else if (randomnumberforchoosingspeed<=6){ return 12; } else if (randomnumberforchoosingspeed<=9){ return 0.5; } else{ return -1; //loop{CreateShot01(100,100,1,90,RED01,0);yield;yield;yield;yield;yield;} } } @Initialize { let life=6000; SetX(GetCenterX); SetY(GetClipMinY + 120); //SetLife(8000); SetTimer(90); SetDamageRate(33,0); SetLife(life); SetDurableSpellCard; SetScore(20000000); MagicCircle(false); LoadGraphic(imgBoss); SetTexture(imgBoss); SetGraphicRect(0, 0, 63, 63); SetShotAutoDeleteClip(2048,512,2048,512);//左上右下 TBombResist; TBombResist_Timer; TMustKeepCenter; TMustKeepInFrontOfEnemy; //TChangeDirection;//通路の動く向き変更 //TCorridor; TRand; TCorridor; TCorridor2; TCircle; TCircle2;//右側 TWall;// TWall2;//縦の紫弾 TThrow; TThrow2; TFront; } @MainLoop { SetCollisionA(GetX, GetY, 24); SetCollisionB(GetX, GetY, 24); if (inspeedchangeflag==1){ inspeedchangecount++; if (inspeedchangecount30){tmpspeed=selectspeed;} else{tmpspeed=selectspeed_crisis;} if (tmpspeed!=-1){ if(GetTimer>30){ inspeedchangeflag=1; inspeedchangecount=0; speeddiff=tmpspeed*normalspeed-speed; speedchangeduringframe=20*rand_int(3,6); } else{ inspeedchangeflag=1; inspeedchangecount=0; speeddiff=tmpspeed*normalspeed-speed; speedchangeduringframe=15*rand_int(0,3); } } } //x1-=(x1+x2)/2-GetCenterX; //x2-=(x1+x2)/2-GetCenterX; frame++; yield; } @DrawLoop { DrawGraphic(GetX, GetY); } @Finalize { DeleteGraphic(imgBoss); } task TRand{ loop{ random=rand_int(0,1); wait(frameunit); } } task TFront{ let waitframe = 300; let shotspan=6; let bulletnum=4; yield; while(GetTimer>30){ ascent(i in 0..bulletnum){ if(GetTimer<30){break;} TBullet(i); TInvisible(i); //wait(shotspan); loop(shotspan){ if(GetTimer<30){break;} yield; } } TInvisible(bulletnum); //wait(waitframe); loop(waitframe){ if(GetTimer<30){break;} yield; } } bulletnum=8; waitframe=waitframe; loop{ ascent(i in 0..bulletnum){ TBullet_Crisis(i); TInvisible(i); wait(shotspan); } TInvisible(bulletnum); wait(waitframe); } task TBullet(let i){ //wait(600); let obj=Obj_Create(OBJ_SHOT); let color = PURPLE22; let x = GetCenterX*0.5+GetPlayerX*0.5; let y = 30; let a = 0.01; let a2 = 0.01; let speed = 0.1; let positiongap=30; Obj_SetAngle(obj,GetAngleToPlayer); Obj_SetPosition(obj,x,y+positiongap*i); ObjShot_SetGraphic(obj,color); yield; loop(120){ Obj_SetAngle(obj,GetAngleToPlayer); if(Obj_BeDeleted(obj)) {break;} speed=speed*1.01; Obj_SetSpeed(obj,speed); yield; } loop(15){ Obj_SetAngle(obj,GetAngleToPlayer); if(Obj_BeDeleted(obj)) {break;} speed=speed*1.03; Obj_SetSpeed(obj,speed); yield; } loop(15){ if(Obj_BeDeleted(obj)) {break;} speed=speed*1.08; Obj_SetSpeed(obj,speed); yield; } loop(120){ if(Obj_BeDeleted(obj)) {break;} speed=speed*1.1; Obj_SetSpeed(obj,speed); yield; } } task TBullet_Crisis(let i){ //wait(600); let obj=Obj_Create(OBJ_SHOT); let color = PURPLE22; let x = GetCenterX*0.5+GetPlayerX*0.5; let y = 30; let a = 0.01; let a2 = 0.01; let speed = 0.1; let positiongap=10; Obj_SetAngle(obj,GetAngleToPlayer); Obj_SetPosition(obj,x,y+positiongap*i); ObjShot_SetGraphic(obj,color); yield; loop(120){ Obj_SetAngle(obj,GetAngleToPlayer); if(Obj_BeDeleted(obj)) {break;} speed=speed*1.01; Obj_SetSpeed(obj,speed); yield; } loop(15){ Obj_SetAngle(obj,GetAngleToPlayer); if(Obj_BeDeleted(obj)) {break;} speed=speed*1.03; Obj_SetSpeed(obj,speed); yield; } loop(15){ if(Obj_BeDeleted(obj)) {break;} speed=speed*1.08; Obj_SetSpeed(obj,speed); yield; } loop(120){ if(Obj_BeDeleted(obj)) {break;} speed=speed*1.1; Obj_SetSpeed(obj,speed); yield; } } task TInvisible(let i){ //wait(600); let obj=Obj_Create(OBJ_SINUATE_LASER); let color = RED22; let x = GetCenterX*0.5+GetPlayerX*0.5; let y = 30; let a = 0.01; let a2 = 0.01; let speed = 0.1;//*(1.01)^30; let positiongap=10; Obj_SetAngle(obj,GetAngleToPlayer); Obj_SetAlpha(obj,270); Obj_SetPosition(obj,x,y+positiongap*i); ObjShot_SetGraphic(obj,color); //ObjLaser_SetLength(obj,positiongap*3); //ObjLaser_SetWidth(obj,8); //ObjLaser_SetSource(obj,false); ObjSinuateLaser_SetLength(obj,positiongap); ObjSinuateLaser_SetWidth(obj,12); yield; loop(120){ Obj_SetAngle(obj,GetAngleToPlayer); if(Obj_BeDeleted(obj)) {break;} speed=speed*1.01; Obj_SetSpeed(obj,speed); yield; } loop(15){ Obj_SetAngle(obj,GetAngleToPlayer); if(Obj_BeDeleted(obj)) {break;} speed=speed*1.03; Obj_SetSpeed(obj,speed); yield; } loop(15){ if(Obj_BeDeleted(obj)) {break;} speed=speed*1.08; Obj_SetSpeed(obj,speed); yield; } loop(120){ if(Obj_BeDeleted(obj)) {break;} speed=speed*1.1; Obj_SetSpeed(obj,speed); yield; } } /* loop{ //CreateShot02(GetCenterX,0,0.005,90,0.01,0.5,BLUE22,0.1); CreateShotA("front",GetCenterX,30,0.1); SetShotDataA("front",0,0.1,GetAngleToPlayer,0.003,0,0.02,BLUE22); SetShotDataA("front",150,NULL,NULL,0,0.1,30,BLUE22); SetShotDataA("front",158,NULL,NULL,0,0.12,30,BLUE22); SetShotDataA("front",163,NULL,NULL,0,0.5,30,BLUE22); FireShot("front"); //wait(1500); wait(300); }*/ } task TMustKeepCenter{ let counter=0; let gap=120; let x1 = GetCenterX-100; let x2 = GetCenterX+100; let anglegap=15; let positiongap=50; let y = GetCenterY-240; let speed=10; let angle=90; let color=BLUE03; loop{ if(gap140){ loop(4){ CreateShot01(x1+rand(-positiongap,positiongap),y,speed,angle+rand(-anglegap, anglegap),color,0); CreateShot01(x2+rand(-positiongap,positiongap),y,speed,angle+rand(-anglegap,anglegap),color,0); wait(3) } } } else{ counter=0; } yield; } } task TMustKeepInFrontOfEnemy{ let counter=0; let gap=120; let x = GetCenterX+200; let y1 = GetCenterY-190; let y2 = GetCenterY-140; let anglegap=15; let positiongap=50; let speed=10; let angle=180; let color=ORANGE03; loop{ if(GetPlayerY100){ loop(4){ CreateShot01(x+rand(-positiongap,positiongap),y1,speed,angle+rand(-anglegap, anglegap),color,0); CreateShot01(x+rand(-positiongap,positiongap),y2,speed,angle+rand(-anglegap, anglegap),color,0); wait(3) } } } else{ counter=0; } yield; } } task TBombResist{ let density=30; let numberofbullet = 50; let defaultxpos=0; let currentxpos = defaultxpos; let speed=0.4; let color=RED12; let angle=60; loop{ if (OnBomb&&(bombflag==0)){bombflag=1;} if ((bombflag==1)&&!OnBomb){ bombflag=0; //SetDamageRate(0,0); wait(150); loop(22){ loop(numberofbullet){ CreateShot01(currentxpos+rand(-density/2,density/2),rand_int(0,15),speed,90+rand(-15,15),color,0); currentxpos+=density; } currentxpos=defaultxpos;//rand(-density/2,density/2); wait(50); } } yield; } } task TBombResist_Timer{ let tmptimer; loop{ if (OnBomb){ tmptimer=GetTimer; while(OnBomb){ TimeStop(30,0,1,1); SetTimer(tmptimer); yield; } loop(180){ SetTimer(tmptimer); yield; } loop(5){ tmptimer++; SetTimer(tmptimer); wait(6); } loop(2){ tmptimer++; SetTimer(tmptimer); wait(9); } loop(3){ tmptimer++; SetTimer(tmptimer); wait(15); } wait(30); tmptimer++; SetTimer(tmptimer); } yield; } } function Fixed2Table{ let distance_fixed = 110; let y_fixed = GetClipMinY + 80; //TFixed2(GetCenterX-distance_fixed,y_fixed); //TFixed2(GetCenterX+distance_fixed,y_fixed); } task TCorridor() { let y=GetClipMinY+120; let movespeed = 4.3; let x1 = GetCenterX-width/2; let x2 = GetCenterX+width/2; yield; loop{ while(random==1){yield;} loop(shottimes/4){ if(random==1){break;} x1 =x1+direction*movespeed; x2 =x2+direction*movespeed; TCorridor_Bullet_(x1); TCorridor_Bullet_(x2); wait(shotspan); } direction*=-1; loop(shottimes-1){ if(random==1){break;} loop(shottimes/2){ if(random==1){break;} x1 =x1+direction*movespeed; x2 =x2+direction*movespeed; TCorridor_Bullet_(x1); TCorridor_Bullet_(x2); wait(shotspan); } direction*=-1; } loop(shottimes/4){ if(random==1){break;} x1 =x1+direction*movespeed; x2 =x2+direction*movespeed; TCorridor_Bullet_(x1); TCorridor_Bullet_(x2); wait(shotspan); } direction*=-1; } task TCorridor_Bullet_(let x) { //ここから定数 let obj = Obj_Create(OBJ_SHOT); let waitframe = 1; let color = RED22; ObjShot_SetBombResist(obj,true);//ボム耐性 Obj_SetAngle(obj,90); Obj_SetPosition(obj,x,y); yield; while(!Obj_BeDeleted(obj)) { ObjShot_SetGraphic(obj,color); Obj_SetX(obj,x); //加速 //speed+=0.001; // Obj_SetSpeed(obj,speed); wait(waitframe); } } } task TCorridor2() { //ここから定数 let x1 = GetCenterX-width/2; let x2 = GetCenterX+width/2; let y=GetClipMinY+120; let sin_height=width/2; let defaulttheta=0; let theta=defaulttheta; let omega=360/(frameunit/shotspan); let x; let sin_margin=10;//マージン? // if((frameunit%shotspan)!=0){ loop{CreateShot01(100,100,1,90,BLUE01,0);yield;yield;yield;yield;yield;} } // yield; loop { //random=rand_int(0,1); while(random==0){yield;} theta=defaulttheta; x=GetCenterX; loop(frameunit/shotspan){ if(random==0){break;} theta-=omega; x1 =x-width/2-sin_margin+sin_height*sin(theta); x2 =x+width/2+sin_margin+sin_height*sin(theta); //wait_bomb;//サブルーチン TCorridor_Bullet(x1); TCorridor_Bullet(x2); wait(shotspan); } } /* function wait2(let time){ loop(time){ while(OnBomb){yield;} yield; } } */ task TCorridor_Bullet(let x) { //ここから定数 let obj = Obj_Create(OBJ_SHOT); let waitframe = 1; let color = RED22; ObjShot_SetBombResist(obj,true);//ボム耐性 Obj_SetAngle(obj,90); Obj_SetPosition(obj,x,y); yield; while(!Obj_BeDeleted(obj)) { ObjShot_SetGraphic(obj,color); Obj_SetX(obj,x); //加速 //speed+=0.001; // Obj_SetSpeed(obj,speed); wait(waitframe); } } } // w フレームだけ待つ function wait(w) { loop(w) { yield; } } sub wait_bomb{ if (OnBomb){ //while(OnBomb){yield;} //loop(30){yield;} } } task TWall{ let life =8000; let density=180; let numberofbullet = 70; let defaultxpos=-1000; let currentxpos = defaultxpos; let speed=1.5; let color=ORANGE01; let angle=60; yield; wait(1800); while(GetTimer>30){ loop(numberofbullet){ CreateShot01(currentxpos,0,speed,90-angle,color,0); CreateShot01(currentxpos,0,speed,90+angle,color,0); currentxpos+=density; } currentxpos=defaultxpos;//rand(-density/2,density/2); wait(1800); } loop{ loop(numberofbullet){ CreateShot01(currentxpos,0,speed,90-angle,color,0); CreateShot01(currentxpos,0,speed,90+angle,color,0); currentxpos+=density; } currentxpos=defaultxpos;//rand(-density/2,density/2); wait(300); } } task TWall2{ let life =8000; let density=120; let numberofbullet = 40; let defaultypos=-1000; let currentypos = defaultypos; let speed=0.9; let color=PURPLE22; let angle=20; let xpos=GetClipMaxX; let firstwait = 600; let shotspan = 40; let waittime=900; yield; wait(firstwait); while(GetTimer>30){ loop(3){ loop(numberofbullet){ CreateShot01(xpos,currentypos,speed,180-angle,color,0); CreateShot01(xpos,currentypos,speed,180+angle,color,0); currentypos+=density; } currentypos=defaultypos;//rand(-density/2,density/2); //wait(shotspan); loop(shotspan){if (GetTimer<30){break;}yield;} } //wait(waittime); loop(waittime){if (GetTimer<30){break;}yield;} } shotspan=20; waittime=180;//900 loop{ loop(5){ loop(numberofbullet){ CreateShot01(xpos,currentypos,speed,180-angle,color,0); CreateShot01(xpos,currentypos,speed,180+angle,color,0); currentypos+=density; } currentypos=defaultypos;//rand(-density/2,density/2); wait(shotspan); } wait(waittime); } } task TThrow{ wait(600); while(GetTimer>30){ loop(3){ loop(2){ TBullet; wait(600); } TBullet; wait(300); } TBullet; wait(200); TBullet; wait(600); TBullet; wait(400); } loop{ TBullet; wait(120); } task TBullet{ let color = BLUE22; let obj=Obj_Create(OBJ_SHOT); let t=0; let vx = -0.3; let vy = -0.8; let t1=177/-vx; let a = -vy*2/t1; let x; let y; let frame_randomadd=50; //Obj_SetAngle(obj,-90); ObjShot_SetBombResist(obj,true);//ボム耐性 Obj_SetPosition(obj,400,450); ObjShot_SetGraphic(obj,color); //Obj_SetSpeed(obj,1); yield; while(!Obj_BeDeleted(obj)) { t++; if ((t%frame_randomadd)==0){ vx+=rand(-0.01,0.01); vy+=rand(-0.01,0.01); } x= Obj_GetX(obj)+vx; y= Obj_GetY(obj)+vy; vy+=a; Obj_SetAngle(obj,90-atan2(vx,vy)); Obj_SetPosition(obj,x,y); yield; } } } task TThrow2{ //wait(500); loop{ TBullet_; wait(600); } task TBullet_{ let color = BLUE22; let obj=Obj_Create(OBJ_SHOT); let t=0; let vx = 0.5; let vy = 0.6+rand(-0.01,0.05); let rand_tobelow = rand_int(0,30); let t1=(980+rand_tobelow)/-vx; let a = vy*2/t1-rand(0,0.001); let x; let y; let frame_randomadd=50; //Obj_SetAngle(obj,-90); ObjShot_SetBombResist(obj,true);//ボム耐性 Obj_SetPosition(obj,0,rand_tobelow); ObjShot_SetGraphic(obj,color); //Obj_SetSpeed(obj,1); yield; while(!Obj_BeDeleted(obj)) { t++; if ((t%frame_randomadd)==0){ vx+=rand(-0.01,0.01); vy+=rand(-0.01,0.01); } x= Obj_GetY(obj)+vx; y= Obj_GetX(obj)+vy; vy+=a; Obj_SetAngle(obj,90-atan2(vy,vx)); Obj_SetPosition(obj,y,x); yield; } } } task TCircle{ //wait(600); let theta=90; let omega = 0.0008; let rootx = GetCenterX-400; let rooty = GetCenterY-280; let color = GREEN22; let r0 = 10; let bulletspan = 25*2; let way = 8; // loop{ ascent(let i in 0..35){ ascent(let j in 0..way){ TBullet(r0+bulletspan*i+bulletspan*((j%2+1)/2),360/way*j); //外が一直線に並べる、内側は並べた棒をwayの数出現させる } } // wait(20); // } task TBullet(let r, let theta2){ let obj=Obj_Create(OBJ_SHOT); let x; let y; ObjShot_SetBombResist(obj,true);//ボム耐性 ObjShot_SetGraphic(obj,color); Obj_SetAutoDelete(obj,false); yield; loop { theta+=omega; if (theta>360) {theta=theta%360;} if (Obj_BeDeleted(obj)){wait(120);obj=Obj_Create(OBJ_SHOT);ObjShot_SetGraphic(obj,color);Obj_SetAutoDelete(obj,false);} x= rootx+r*cos(theta+theta2); y= rooty-r*sin(theta+theta2); Obj_SetAngle(obj,270-theta-theta2); Obj_SetPosition(obj,x,y); yield; } } } task TCircle2{ //wait(600); let theta=90; let omega = 0.00066; let rootx = GetCenterX+380; let rooty = GetCenterY-280; let color = GREEN22; let r0 = 10; let bulletspan = 55; let way = 9; // loop{ ascent(let i in 0..35){ ascent(let j in 0..way){ TBullet(r0+bulletspan*i+bulletspan*((j%2+1)/2),360/way*j); //外が一直線に並べる、内側は並べた棒をwayの数出現させる } } // wait(20); // } task TBullet(let r, let theta2){ let obj=Obj_Create(OBJ_SHOT); let x; let y; ObjShot_SetGraphic(obj,color); Obj_SetAutoDelete(obj,false); ObjShot_SetBombResist(obj,true);//ボム耐性 yield; loop { theta-=omega; if (theta>360) {theta=theta%360;} if (Obj_BeDeleted(obj)){wait(120);obj=Obj_Create(OBJ_SHOT);ObjShot_SetGraphic(obj,color);Obj_SetAutoDelete(obj,false);} x= rootx+r*cos(theta+theta2); y= rooty-r*sin(theta+theta2); Obj_SetAngle(obj,-270+theta+theta2); Obj_SetPosition(obj,x,y); yield; } } } }