黒の時代

弾幕風ph3初心者による弾幕風講座。まだ難しいことは出来ませんが、質問要望あればコメントにどうぞ。

no.7.1 諏訪大戦コピー

>|c| 

#東方弾幕風[Single]
#ScriptVersion[3]
#Title["諏訪大戦劣化コピー@黒の時代"] 
#Text[""] 

#include"script/default_system/Default_ShotConst.txt"  

let imgExRumia = GetCurrentScriptDirectory~"ExRumia.png"; 

let objPlayer = GetPlayerObjectID();
let objEnemy;
let frame = 0;
let ex; let ey; let cx = GetStgFrameWidth() / 2;
let right = GetStgFrameWidth;
let bottom = GetStgFrameHeight;

@Event {  
   alternative(GetEventType())
   case(EV_REQUEST_LIFE) { SetScriptResult(3000); }
}

@Initialize {
   objEnemy = ObjEnemy_Create(OBJ_ENEMY_BOSS);
   ObjEnemy_Regist(objEnemy);  
   ObjPrim_SetTexture(objEnemy, imgExRumia); 
   ObjSprite2D_SetSourceRect(objEnemy, 64, 1, 127, 64); 
   ObjSprite2D_SetDestCenter(objEnemy); 

   ObjMove_SetDestAtFrame(objEnemy, cx, 130, 60);
   ObjEnemy_SetLife(OBJ_ENEMY_BOSS,3000);
   MAIN;
}

@MainLoop {
   ex = ObjMove_GetX(objEnemy);
   ey = ObjMove_GetY(objEnemy); 
   ObjEnemy_SetIntersectionCircleToShot(objEnemy, ex, ey, 32);
   ObjEnemy_SetIntersectionCircleToPlayer(objEnemy, ex, ey, 24);
   frame++;
   yield;
   if(ObjEnemy_GetInfo(objEnemy, INFO_LIFE) <= 0) { Obj_Delete(objEnemy); CloseScript(GetOwnScriptID()); return; }
 }

@Finalize {  }

task MAIN {
   let count = 0;
   wait(120);
   let a_rand = 40;
   loop {
      fuji(cx+70, a_rand);
      fuji(cx-70, a_rand);
      fuji(cx+130, a_rand);
      fuji(cx-130, a_rand);
      fuji(cx+190, a_rand);
      fuji(cx-190, a_rand);
      wait(400);
      IRON(count%2);
      wait(400);
      count++;
      a_rand+=40;
   }
}

task fuji(X,a_rand) {
   let Y = bottom; let r = 0; let a = rand(a_rand,-a_rand);
   let time = 560;
   while(Y>-15) {
      fujishot(X-r*sin(a),Y,atan2(8,-(r-1)*sin(a-11)+r*sin(a)),time);
      r+=1;  a+=11; Y-=8; wait(4);
      time-=7;
   }
}

task fujishot(x,y,f_a,time) {
   let obj = CreateShotA1(x, y, 0, f_a, DS_RICE_S_GREEN, 15);
   wait(120);
   let obj2 = CreateShotA2(x,y,0,f_a,0.02,2,DS_RICE_S_RED,8);
   Obj_Delete(obj);
   wait(time);
   ObjShot_FadeDelete(obj2);
}

task IRON(i) {
   if(i==0) {
      loop(30) {
         circle_1;
         wait(10);
      }
   }
   else {
      loop(20) {
         circle_2;
         wait(15);
      }
   }
}

function circle_2 {
   let fujiX = rand(0,right);
   let fujiA = atan2(GetPlayerY-(-30), GetPlayerX-fujiX); 
   CreateShotA1(fujiX,-30, 4, fujiA, DS_BALL_M_RED,0);
   ascent( i in 0..11) {
      CreateShotA1(fujiX+20*cos(i*360/11),-30+20*sin(i*360/11), 4, fujiA, DS_BALL_S_RED,0);
   }

function circle_1 {
   let fujiX = rand(0,right);
   let fujiA = 90+rand(-15,15); //角度
   CreateShotA1(fujiX,-30, 4, fujiA, DS_BALL_M_ORANGE,0);
   ascent( i in 0..11) {
      CreateShotA1(fujiX+20*cos(i*360/11),-30+20*sin(i*360/11), 4, fujiA, DS_BALL_S_ORANGE,0);
   }

function wait(time) {
   loop(time) {yield;}
}

 ||<

※本当はcircleはIRONの中に入れた方がいいとかあるかもしれませんが割愛。よくわかんないし。

>>目次:no.0