//みょん弾幕 void shot_bullet_H007(int n){ int t=shot[n].cnt; int k; if(t>=0 && t<=150 && t%10==0){ for(int i=0;i<20;i++){ if(shot[n].flag!=2 && (k=shot_search(n))!=-1){ shot[n].bullet[k].knd =7; shot[n].bullet[k].angle =PI2/20*i; shot[n].bullet[k].flag =1; shot[n].bullet[k].x =enemy[shot[n].num].x+cos(PI/2+PI/150*t)*100; shot[n].bullet[k].y =enemy[shot[n].num].y+sin(PI/2+PI/150*t)*100; shot[n].bullet[k].col =2; shot[n].bullet[k].cnt =0; shot[n].bullet[k].spd =1.2; } } for(int i=0;i<20;i++){ if(shot[n].flag!=2 && (k=shot_search(n))!=-1){ shot[n].bullet[k].knd =7; shot[n].bullet[k].angle =PI2/20*i; shot[n].bullet[k].flag =1; shot[n].bullet[k].x =enemy[shot[n].num].x+cos(PI/2-PI/150*t)*100; shot[n].bullet[k].y =enemy[shot[n].num].y+sin(PI/2-PI/150*t)*100; shot[n].bullet[k].col =4; shot[n].bullet[k].cnt =0; shot[n].bullet[k].spd =1.2; se_flag[0]=1; } } } }
//ミシャグジさま void shot_bullet_H008(int n){ int t=shot[n].cnt; int k; if(t>=0 && t<1200 && t%90==0){ double angle=rang(PI); for(int j=0;j<2;j++){//途中から2分裂する分 for(int i=0;i<60;i++){//一度に60個 if(shot[n].flag!=2 && (k=shot_search(n))!=-1){ shot[n].bullet[k].knd =8;//8番の弾 shot[n].bullet[k].angle =angle+PI2/60*i;//円形60個 shot[n].bullet[k].flag =1; shot[n].bullet[k].x =enemy[shot[n].num].x; shot[n].bullet[k].y =enemy[shot[n].num].y; shot[n].bullet[k].col =enemy[shot[n].num].col; shot[n].bullet[k].cnt =0; shot[n].bullet[k].state =j;//ステータス。0か1かで回転がかわる shot[n].bullet[k].spd =2; se_flag[0]=1;//発射音鳴らす } } } } for(int i=0;i<SHOT_BULLET_MAX;i++){//全弾分 if(shot[n].bullet[i].flag>0){//登録されている弾があれば int state=shot[n].bullet[i].state; int cnt=shot[n].bullet[i].cnt; if(30<cnt && cnt<120){//30〜120カウントなら shot[n].bullet[i].spd-=1.2/90.0;//90カウントかけて1.2減らす shot[n].bullet[i].angle+=(PI/2)/90.0*(state?-1:1);//90カウントかけて90°傾ける } } } }
//1発だけ、自機に向かって直線発射 void shot_bullet_H000(int n){ int k; if(shot[n].cnt==0){ if(shot[n].flag!=2 && (k=shot_search(n))!=-1){ shot[n].bullet[k].knd =enemy[shot[n].num].blknd2; shot[n].bullet[k].angle =shotatan2(n); shot[n].bullet[k].flag =1; shot[n].bullet[k].x =enemy[shot[n].num].x; shot[n].bullet[k].y =enemy[shot[n].num].y; shot[n].bullet[k].col =enemy[shot[n].num].col; shot[n].bullet[k].cnt =0; shot[n].bullet[k].spd =3; se_flag[0]=1; } } }
//100カウント中に10発、自機に向かって直線発射(常に自機狙い) void shot_bullet_H001(int n){ int t=shot[n].cnt; int k; if(t>=0 && t<100 && t%10==0){//100カウント中10カウントに1回 if(shot[n].flag!=2 && (k=shot_search(n))!=-1){//敵がいて、弾が登録可能なら shot[n].bullet[k].knd =enemy[shot[n].num].blknd2;//弾登録 shot[n].bullet[k].angle =shotatan2(n);//角度 shot[n].bullet[k].flag =1;//フラグ shot[n].bullet[k].x =enemy[shot[n].num].x;//座標 shot[n].bullet[k].y =enemy[shot[n].num].y; shot[n].bullet[k].col =enemy[shot[n].num].col;//色 shot[n].bullet[k].cnt =0;//カウンタ shot[n].bullet[k].spd =3;//スピード se_flag[0]=1; } } }
//100カウント中に10発、自機に向かってスピード変化直線発射 void shot_bullet_H003(int n){ int t=shot[n].cnt; int k; if(t>=0 && t<100 && t%10==0){ if(shot[n].flag!=2 && (k=shot_search(n))!=-1){ shot[n].bullet[k].knd =enemy[shot[n].num].blknd2; shot[n].bullet[k].angle =shotatan2(n); shot[n].bullet[k].flag =1; shot[n].bullet[k].x =enemy[shot[n].num].x; shot[n].bullet[k].y =enemy[shot[n].num].y; shot[n].bullet[k].col =enemy[shot[n].num].col; shot[n].bullet[k].cnt =0; shot[n].bullet[k].spd =1+5.0/100*t; se_flag[0]=1; } } }
//ばらまきショット void shot_bullet_H005(int n){ int t=shot[n].cnt; int k; if(t>=0 && t<120 && t%2==0){ if(shot[n].flag!=2 && (k=shot_search(n))!=-1){ shot[n].bullet[k].knd =enemy[shot[n].num].blknd2; shot[n].bullet[k].angle =shotatan2(n)+rang(PI/4); shot[n].bullet[k].flag =1; shot[n].bullet[k].x =enemy[shot[n].num].x; shot[n].bullet[k].y =enemy[shot[n].num].y; shot[n].bullet[k].col =enemy[shot[n].num].col; shot[n].bullet[k].cnt =0; shot[n].bullet[k].spd =3+rang(1.5); se_flag[0]=1; } } }
//自機狙い void E5_0(){ int k; if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =9; bullet[k].angle =shotatan2();//角度 bullet[k].spd =2;//スピード bullet[k].vx =0; bullet[k].vy =0; bullet[k].flag =1;//フラグ bullet[k].x =enemy.x;//座標 bullet[k].y =enemy.y; bullet[k].col =2;//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; bullet[k].state =3;//ダメージ減衰補正 } }
//停滞ばらまき弾 void E5_1(){ int k; if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =11; bullet[k].angle =rang(PI2);//角度 bullet[k].spd =0.6+rang(0.2);//スピード bullet[k].vx =0; bullet[k].vy =0; bullet[k].flag =1;//フラグ bullet[k].x =enemy.x;//座標 bullet[k].y =enemy.y; bullet[k].col =GetRand(5);//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; bullet[k].state =0; } }
//ランダム落下 void E7_1(){ int k; if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =1; bullet[k].angle =0;//角度 bullet[k].spd =0;//スピード bullet[k].vx =rang(0.1); bullet[k].vy =1.5+rang(0.5); bullet[k].flag =1;//フラグ bullet[k].x =FX+(FMX/2)+rang(130);//座標 bullet[k].y =FY+10; bullet[k].col =5;//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; bullet[k].state =0; } }
//停滞ばらまき弾 void E4_1(){ int k; if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =10; bullet[k].angle =rang(PI2);//角度 bullet[k].spd =0.5;//スピード bullet[k].vx =0; bullet[k].vy =0; bullet[k].flag =1;//フラグ bullet[k].x =enemy.x;//座標 bullet[k].y =enemy.y; bullet[k].col =0;//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; bullet[k].state =3;//ダメージ減衰補正 } }
//低速ばらまき弾 void E0(){ int t=spcount; int k; if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =8; bullet[k].angle =PI2/10*t+rang(PI2/20);//角度 bullet[k].spd =0.5;//スピード bullet[k].vx =0; bullet[k].vy =0; bullet[k].flag =1;//フラグ bullet[k].x =enemy.x;//座標 bullet[k].y =enemy.y; bullet[k].col =GetRand(4);//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; bullet[k].state =0; } }
//高速落下弾 void E1_1(){ int k; for(double i = FX;i<FX+FMX;i+=(60+rang(10))){ if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =7; bullet[k].state =1; bullet[k].angle =0;//角度 bullet[k].spd =0;//スピード bullet[k].vx =0; bullet[k].vy =-2;//落下速度 bullet[k].flag =1;//フラグ bullet[k].x =i;//座標 bullet[k].y =40+rang(30); bullet[k].col =1;//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; } } }
//縦方向の固定弾 void E8_1(double length,double speed,int sayu){ int k; for(double i = FY+rang(20);i<=FY+FMY+10;i+=length){ if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =7; bullet[k].state =0; bullet[k].angle =0;//角度 bullet[k].spd =0;//スピード bullet[k].vx =(sayu)? speed:-speed; bullet[k].vy =0;//落下速度 bullet[k].flag =1;//フラグ bullet[k].x =(sayu)? 0:FX+FMX+10;//座標 bullet[k].y =i; bullet[k].col =1;//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; } } }
//横方向の固定弾 void E8_0(int length,double speed,int joge){ int k; for(double i = FX+rang(17.5);i<=FX+FMX+10;i+=length){ if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =7; bullet[k].state =0; bullet[k].angle =0;//角度 bullet[k].spd =0;//スピード bullet[k].vx =0; bullet[k].vy =(joge)? speed:-speed;//落下速度 bullet[k].flag =1;//フラグ bullet[k].x =i;//座標 bullet[k].y =(joge)? 0:480; bullet[k].col =1;//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; } } }
//左右ワインダー void E7_0(double ang){ int k; for(int i=0;i<8;i++){ if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =8; bullet[k].angle =ang+((PI2/8)*i);//角度 bullet[k].spd =4;//スピード bullet[k].vx =0; bullet[k].vy =0; bullet[k].flag =1;//フラグ bullet[k].x =enemy.x;//座標 bullet[k].y =enemy.y; bullet[k].col =0;//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; bullet[k].state =3;//ダメージ減衰補正 } } }
//0.5秒に1回ずつ円形発射 void shot_bullet_H004(int n){ int t=shot[n].cnt; int k; if(t>=0 && t<120 && t%20==0){ double angle=shotatan2(n); for(int i=0;i<20;i++){ if(shot[n].flag!=2 && (k=shot_search(n))!=-1){ shot[n].bullet[k].knd =enemy[shot[n].num].blknd2; shot[n].bullet[k].angle =angle+PI2/20*i; shot[n].bullet[k].flag =1; shot[n].bullet[k].x =enemy[shot[n].num].x; shot[n].bullet[k].y =enemy[shot[n].num].y; shot[n].bullet[k].col =enemy[shot[n].num].col; shot[n].bullet[k].cnt =0; shot[n].bullet[k].spd =4; } se_flag[0]=1; } } }
//波紋の全方位弾 void E9(double x,double y){ int k; double angle=rang(PI); for(int i=0;i<14;i++){ if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =8; bullet[k].angle =angle+PI2/14*i;//角度 bullet[k].spd =2;//スピード bullet[k].vx =0; bullet[k].vy =0; bullet[k].flag =1;//フラグ bullet[k].x =x+15*cos(bullet[k].angle);//座標 bullet[k].y =y+15*sin(bullet[k].angle); bullet[k].col =0;//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; bullet[k].state =1; } } }
//大弾全方位弾 void E6(){ int k; double angle=rang(PI); for(int i=0;i<8;i++){ if((k=shot_search())!=-1){//弾が登録可能なら bullet[k].knd =0; bullet[k].angle =angle+PI2/8*i;//角度 bullet[k].spd =5;//スピード bullet[k].vx =0; bullet[k].vy =0; bullet[k].flag =1;//フラグ bullet[k].x =enemy.x;//座標 bullet[k].y =enemy.y; bullet[k].col =1;//色 bullet[k].cnt =0;//カウンタ bullet[k].gflag =0; bullet[k].state =4;//ダメージ増加補正 } } }
//ばらまきショット(減速) void shot_bullet_H006(int n){ int t=shot[n].cnt; int k; if(t>=0 && t<120 && t%2==0){ if(shot[n].flag!=2 && (k=shot_search(n))!=-1){ shot[n].bullet[k].knd =enemy[shot[n].num].blknd2; shot[n].bullet[k].angle =shotatan2(n)+rang(PI/4); shot[n].bullet[k].flag =1; shot[n].bullet[k].x =enemy[shot[n].num].x; shot[n].bullet[k].y =enemy[shot[n].num].y; shot[n].bullet[k].col =enemy[shot[n].num].col; shot[n].bullet[k].cnt =0; shot[n].bullet[k].spd =4+rang(2); se_flag[0]=1; } } for(int i=0;i<SHOT_BULLET_MAX;i++){ if(shot[n].bullet[i].spd>1.5) shot[n].bullet[i].spd-=0.04; } }
//交差前の全方位弾 void E2(){ int k; double angle=rang(PI); for(int j=0;j<2;j++){//途中から2分裂する分 for(int i=0;i<30;i++){ if((k=shot_search())!=-1){ bullet[k].knd =8;//8番の弾 bullet[k].angle =angle+PI2/30*i; bullet[k].spd =2.5; bullet[k].vx =0; bullet[k].vy =0; bullet[k].flag =1; bullet[k].x =enemy.x; bullet[k].y =enemy.y; bullet[k].col =1; bullet[k].cnt =0; bullet[k].state =j;//ステータス。0か1かで回転がかわる se_flag[0]=1;//発射音鳴らす } } } }