



![]()
番外2章
この章は血迷いました。
まずは製作した弾幕の動画をご覧下さい。
是非スピーカーを大音量にしてお聞き下さい♪
(↓1500kbpsの高画質版です。少々重いかも。Zoomeなので誰でも見れます。)
(↓ニコニコ動画はこちら)
「趣味で作っている弾幕もオープンソースにしてみたはどうでしょう」というご意見頂いたので、
今回43章で作ってみたんですけど、とても読めたようなコードにはなりませんでした^^;
これがその作った弾幕の関数(たった一つの関数)です。
いや〜とてもこれを読んでくださいとは言えません・・。
もし興味があればご覧下さい(汗
他のファイルに影響しないように強引に変数用意したりしてるので、参考にしないようにしましょう(何
---- 新規に boss_shotElse.cpp を作り、以下を追加 ----
#include "../include/GV.h"
extern int search_boss_shot();
extern int search_lazer();
extern int search_child();
extern double bossatan2();
extern double bossatan3(int k,double x,double y);//指定座標と弾との成す角
extern double bossatan4(int k);//指定弾と自機との成す角度
extern int move_boss_pos(double x1,double y1,double x2,double y2,double dist, int t);
extern void input_phy_pos(double x,double y,int t);
extern void input_lphy(lazer_t *laz, int time, double angle);
extern int search_boss_shot_n(int from, int to);//指定の空き番号を返す
//曲のリズムデータ
int tm12[1000]={
459,509,559,605,653,703,751,798,848,893,941,990,1038,1086,1134,1183,1231,1277,1325,1374,1420,1469,1520,
1571,1620,1679,1738,1814,1837,1858,1878,1897,1915,1934,1955,1974,1996,2015,2037,2057,2076,2097,2117,2137,
2157,2176,2198,2218,2239,2258,2278,2297,2318,2337,2358,2380,2400,2421,2440,2460,2481,2500,2520,2540,2559,
2579,2599,2621,2640,2660,2680,2701,2721,2742,2762,2782,2802,2822,2842,2863,2884,2904,2924,2944,2964,2984,
3005,3025,3045,3065,3085,3105,3124,3144,3165,3226,3246,3265,3286,3348,3368,3387,3408,3469,3490,3508,3528,
3592,3611,3630,3650,3710,3730,3749,3770,3832,3852,3871,3893,3913,3933,3954,3973,3993,4014,4075,4096,4116,
4136,4156,4174,4195,4215,4237,4258,4278,4298,4318,4337,4358,4378,4398,4418,4438,4458,4477,4498,4520,4540,
4559,4580,4601,4622,4642,4662,4680,4701,4720,4740,4760,4780,4801,4822,4842,4863,4883,4903,4924,4944,4965,
4985,5005,5024,5043,5064,5086,5106,5127,5150,5170,5188,5208,5227,5248,5267,5288,5308,5328,5404
};
//音楽の視覚エフェクト用データ
#define VMX 52
#define VMY 30
BYTE signal[10][VMX]={
{2,3,4,5,6,5,4,3,2,3,4,3,2,4,6,5,4,3,2,3,4,5,6,5,4,7,10,7,4,4,4,6,8,6,4,3,2,5,8,7,6,4,2,4,6,7,8,6,4,6,8,8},
{4,5,6,8,10,7,4,6,8,5,2,4,6,8,10,9,8,7,6,7,8,9,10,11,12,8,4,4,4,6,8,6,4,7,10,8,6,7,8,9,10,7,4,4,4,5,6,5,4,5,6,6,},
{8,7,6,4,2,3,4,6,8,6,4,4,4,5,6,6,6,8,10,7,4,3,2,3,4,7,10,9,8,6,4,5,6,8,10,7,4,6,8,9,10,11,12,10,8,7,6,6,6,5,4,4,},
{6,5,4,7,10,7,4,4,4,3,2,6,10,7,4,3,2,4,6,5,4,5,6,8,10,7,4,3,2,3,4,3,2,6,10,6,2,3,4,3,2,3,4,3,2,5,8,5,2,4,6,6,},
{2,3,4,7,10,9,8,5,2,3,4,3,2,3,4,6,8,9,10,6,2,4,6,8,10,8,6,5,4,5,6,5,4,7,10,7,4,3,2,2,2,5,8,7,6,5,4,3,2,3,4,4,},
{2,3,4,5,6,8,10,11,12,15,18,13,8,7,6,7,8,11,14,18,22,20,18,20,22,21,20,18,16,17,18,20,22,17,12,15,18,16,14,15,16,13,10,8,6,5,4,6,8,5,2,2,},
{2,6,10,7,4,7,10,18,26,18,10,9,8,7,6,9,12,17,22,22,22,16,10,9,8,6,4,7,10,12,14,19,24,19,14,13,12,9,6,8,10,14,18,22,26,23,20,16,12,8,4,4,},
{4,7,10,14,18,13,8,14,20,18,16,17,18,14,10,15,20,14,8,8,8,7,6,7,8,9,10,13,16,15,14,12,10,9,8,9,10,14,18,12,6,8,10,9,8,13,18,12,6,5,4,4,},
{6,8,10,11,12,16,20,17,14,11,8,6,4,5,6,8,10,14,18,14,10,14,18,14,10,12,14,18,22,19,16,13,10,8,6,7,8,9,10,8,6,7,8,14,20,17,14,15,16,15,14,14,},
{2,5,8,12,16,10,4,5,6,6,6,11,16,11,6,11,16,10,4,7,10,14,18,17,16,13,10,8,6,8,10,8,6,6,6,7,8,15,22,15,8,7,6,6,6,5,4,9,14,9,4,4,},
};
//視覚エフェクト用構造体
typedef struct{
int cnt;
BYTE num[VMX];
}visual_effect_t;
visual_effect_t visual_effect;
//視覚エフェクトの四角1辺の長さ
#define VWIDE 8
void boss_shot_bulletElse(){
int i,j,k,s,n,t=boss_shot.cnt,t2=0;
static int num,sound_handle,base_col;
static double lzv,base_angle;
if(t==0){
//この合計3行を有効にすると、numに設定した音楽の場所から始まる
//numはtm12で設定した音楽リズムデータで、188まである。
// num=20;
// t=t2=tm12[num];
boss.endtime=tm12[188]+800;
lzv=0;
base_col=0;
boss.graph_flag=1;
sound_handle=LoadSoundMem("../dat/music/Rage.wav");
// SetSoundCurrentTime( (int)(t2*16.666666-100) , sound_handle);
PlaySoundMem(sound_handle, DX_PLAYTYPE_BACK, FALSE);
boss_shot.cnt=t2;
base_angle=-PI/2;
memset(&visual_effect,0,sizeof(visual_effect_t));
}
if(t==tm12[num]){//リズムをカウント
num++;
}
//音楽と同期を取る処理
if(t%60==59 && t<tm12[188]){
int gettm=GetSoundCurrentTime(sound_handle);
int nowflame=(int)(t*16.6666);
// printfDx("%d\n",gettm-nowflame);
if(abs(gettm-nowflame)>100){
StopSoundMem(sound_handle);
SetSoundCurrentTime( (int)(t*16.666666) , sound_handle);
PlaySoundMem(sound_handle, DX_PLAYTYPE_BACK,FALSE);
// printfDx("調整後%d\n",GetSoundCurrentTime(sound_handle));
}
}
//最初のレーザーのダラララ〜。
if(t<180){
for(i=0;i<2;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = FMX/2;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 2;//弾の種類
boss_shot.bullet[k].angle = PI/120*t;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 1.5;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 4;//弾の色
boss_shot.bullet[k].x = FMX/2;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 2;//弾の種類
boss_shot.bullet[k].angle = (PI+PI/240)-PI/120*t;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 2;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}
//次に青い蝶々が上からバサー
if(t==240){
for(j=0;j<15;j++){
for(i=0;i<30;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = FMX/2;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 11;//弾の種類
boss_shot.bullet[k].angle = PI/30*i;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3-0.2*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}
}
//フラッシュ
if(t==tm12[0]){
flash.flag=1;
flash.knd=1;//フラッシュ!
flash.to_cnt=90;//90カウントで変化
flash.cnt=0;
}
//音楽とともに押し寄せるレーザー
if(t==tm12[0]+1){
{
k=0;
lazer[k].col = 0;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = PI;//角度
lazer[k].startpt.x= FMX;//座標
lazer[k].startpt.y= 0;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 20;//幅
lazer[k].state = 0;//ステータス
lazer[k].length = FMX+60;//レーザーの長さ
lazer[k].hantei = 0.6;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
{
k=1;
lazer[k].col = 0;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = 0;//角度
lazer[k].startpt.x= 0;//座標
lazer[k].startpt.y= FMY;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 20;//幅
lazer[k].state = 0;//ステータス
lazer[k].length = FMX+60;//レーザーの長さ
lazer[k].hantei = 0.6;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
//対角線飛び散り
if(tm12[1]-15<=t && t<=tm12[7]){
for(i=1;i<=8;i++){
if(t==tm12[i]){
for(s=0;s<2;s++){
for(j=0;j<3;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 2;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 0;//弾の種類
boss_shot.bullet[k].angle = PI*0.75+rang(PI/10)+PI*s+PI/2*(num%2);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 6-0.7*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(j=0;j<5;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = PI*0.75+rang(PI/8)+PI*s+PI/2*(num%2);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-0.6*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(j=0;j<7;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 11;//弾の種類
boss_shot.bullet[k].angle = PI*0.75+rang(PI/6)+PI*s+PI/2*(num%2);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5-0.6*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(j=0;j<15;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 10;//弾の種類
boss_shot.bullet[k].angle = PI*0.75+rang(PI/4)+PI*s+PI/2*(num%2);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4-0.2*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}
}
}
for(i=1;i<=8;i++){
if(tm12[i]-15<=t && t<=tm12[i]){
lzv+=0.2;
lazer[0].startpt.y+=lzv;
lazer[1].startpt.y-=lzv;
}
if(t==tm12[i])
lzv=0;
}
}
//フラッシュ!
if(t==tm12[7]){
flash.flag=1;
flash.knd=1;//フラッシュ!
flash.to_cnt=90;//90カウントで変化
flash.cnt=0;
lazer[0].flag=0;
lazer[1].flag=0;
}
//押し寄せるレーザー
if(t==tm12[7]){
for(i=0;i<6;i++){
k=i;
lazer[k].col = 1;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = PI/2+PI*i;//角度
lazer[k].startpt.x= 160*i+40;//座標
lazer[k].startpt.y= FMY*(i%2);
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 2;//幅
lazer[k].state = 0;//ステータス
lazer[k].length = FMY+60;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
if(tm12[8]-15<=t && t<=tm12[14]){
for(i=8;i<=14;i++){
if(tm12[i]-15<=t && t<=tm12[i]){
lzv+=0.2;
for(j=0;j<6;j++){
lazer[j].haba+=0.7;
lazer[j].startpt.x-=lzv;
lazer[j].hantei = 0.6;
}
}
if(t==tm12[i])
lzv=0;
}
}
//対角線飛び散り
if(tm12[8]-15<=t && t<=tm12[14]){
for(i=8;i<=14;i++){
if(t==tm12[i]){
for(s=0;s<2;s++){
for(j=0;j<3;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 0;//弾の種類
boss_shot.bullet[k].angle = PI*0.75+rang(PI/10)+PI*s+PI/2*(num%2);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5-0.6*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(j=0;j<5;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = PI*0.75+rang(PI/8)+PI*s+PI/2*(num%2);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4.5-0.5*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(j=0;j<7;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 3;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 11;//弾の種類
boss_shot.bullet[k].angle = PI*0.75+rang(PI/6)+PI*s+PI/2*(num%2);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4-0.5*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(j=0;j<15;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 10;//弾の種類
boss_shot.bullet[k].angle = PI*0.75+rang(PI/4)+PI*s+PI/2*(num%2);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3-0.1*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}
}
}
}
if(t==tm12[14]){
flash.flag=1;
flash.knd=1;//フラッシュ!
flash.to_cnt=90;//90カウントで変化
flash.cnt=0;
for(i=0;i<6;i++)
lazer[i].flag=0;
}
//レーザー
if(t==tm12[14]){
for(i=0;i<6;i++){
k=i;
lazer[k].col = i%2;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = PI*i;//角度
lazer[k].startpt.x= FMX*(i%2);//座標
lazer[k].startpt.y= 160*i;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 2;//幅
lazer[k].state = 0;//ステータス
lazer[k].length = FMX+60;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
if(tm12[15]-15<=t && t<=tm12[20]){
for(i=14;i<=20;i++){
if(tm12[i]-15<=t && t<=tm12[i]){
lzv+=0.2;
for(j=0;j<6;j++){
lazer[j].haba+=0.4;
lazer[j].startpt.y-=lzv;
lazer[j].hantei = 0.6;
}
}
if(t==tm12[i])
lzv=0;
}
}
//対角線飛び散り
if(tm12[15]-15<=t && t<=tm12[20]){
for(i=14;i<=20;i++){
if(t==tm12[i]){
for(s=0;s<2;s++){
for(j=0;j<1;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = (num+1)%2;//弾の色
boss_shot.bullet[k].x = FMX*((s+num)%2);//座標
boss_shot.bullet[k].y = FMY*(s);
boss_shot.bullet[k].knd = 0;//弾の種類
boss_shot.bullet[k].angle = bossatan4(k);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4-0.6*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(j=0;j<3;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = num%2;//弾の色
boss_shot.bullet[k].x = FMX*((s+num)%2);//座標
boss_shot.bullet[k].y = FMY*(s);
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = bossatan4(k)+rang(PI/28);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3.5-0.6*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(j=0;j<5;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 3*(num%2);//弾の色
boss_shot.bullet[k].x = FMX*((s+num)%2);//座標
boss_shot.bullet[k].y = FMY*(s);
boss_shot.bullet[k].knd = 11;//弾の種類
boss_shot.bullet[k].angle = bossatan4(k)+rang(PI/26);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3-0.5*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(j=0;j<10;j++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = num%2;//弾の色
boss_shot.bullet[k].x = FMX*((s+num)%2);//座標
boss_shot.bullet[k].y = FMY*(s);
boss_shot.bullet[k].knd = 10;//弾の種類
boss_shot.bullet[k].angle = bossatan4(k)+rang(PI/20);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3-0.1*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}
}
}
}
if(t==tm12[20]){
flash.flag=1;
flash.knd=1;//フラッシュ!
flash.to_cnt=90;//90カウントで変化
flash.cnt=0;
for(i=0;i<6;i++)
lazer[i].flag=0;
}
//レーザーがだららら〜〜
if(tm12[21]-20<=t && t<=tm12[21]+30 && t%2){
for(i=0;i<2;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = FMX;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 2;//弾の種類
boss_shot.bullet[k].angle = PI-PI/2/50*(t-(tm12[21]-20));//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}
if(tm12[23]-20<=t && t<=tm12[23]+30 && t%2){
for(i=0;i<2;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 4;//弾の色
boss_shot.bullet[k].x = 0;//座標
boss_shot.bullet[k].y = FMY;
boss_shot.bullet[k].knd = 2;//弾の種類
boss_shot.bullet[k].angle = -PI/2/50*(t-(tm12[23]-20));//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}
//4四方から発射
double x4[4]={0,FMX,FMX,0};
double y4[4]={0,0,FMY,FMY};
if(t==tm12[25]){
for(j=0;j<4;j++){
for(i=0;i<90;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = x4[j];//座標
boss_shot.bullet[k].y = y4[j];
boss_shot.bullet[k].knd = 2;//弾の種類
boss_shot.bullet[k].angle = PI/2*j+PI/2/90*i;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 3;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 1;
}
}
}
}
if(t==tm12[27]){
flash.flag=1;
flash.knd=1;//フラッシュ!
flash.to_cnt=90;//90カウントで変化
flash.cnt=0;
for(i=0;i<6;i++)
lazer[i].flag=0;
}
//区切り。視覚エフェクト
if(t>=tm12[27] && t<tm12[180] && (t-tm12[28])%20==0){
visual_effect.cnt=0;
int r=GetRand(4);
if(num<100 && (num-27)%16==0)
r+=5;
for(j=0;j<VMX;j++){
n=signal[r][j]*0.7-visual_effect.num[j];
for(i=0;i<n;i++){
k=VMY*j+visual_effect.num[j]+i;
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = k/VMY*VWIDE;//座標
boss_shot.bullet[k].y = (k%VMY)*VWIDE;
boss_shot.bullet[k].knd = 12;//弾の種類
boss_shot.bullet[k].angle = 0;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;//状態
boss_shot.bullet[k].spd = 0;//スピード
}
if(n>0)
visual_effect.num[j]+=n;
}
}
visual_effect.cnt++;
for(j=0;j<VMX;j++){
if(visual_effect.cnt>=5 && GetRand(3)==0){
if(visual_effect.num[j]==0)continue;
if(visual_effect.num[j]<=2 && visual_effect.cnt%2==0)continue;
if(visual_effect.num[j]<=4 && visual_effect.cnt%4==0)continue;
if(visual_effect.num[j]<=6 && visual_effect.cnt%6==0)continue;
k=VMY*j+visual_effect.num[j];
boss_shot.bullet[k].flag=0;
visual_effect.num[j]--;
}
}
//レーザー
if(t>=tm12[26] && t<tm12[90]){
for(i=26;i<=90;i++){
if(t==tm12[i] && (num-26+6)%8==0 && num<=57 ||
t==tm12[i] && (num-58+2)%4==0 && num>=58 && num<=90 ){
// double angle=atan2(ch.y,ch.x-FMX/2);
if(num<85){
double angle=rang(PI);
for(j=0;j<15;j++){
for(s=0;s<40;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = FMX/2;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 11;//弾の種類
boss_shot.bullet[k].angle = angle+PI2/40*s;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5-3.0/15.0*j;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}
}
for(j=0;j<11;j++){
if((k=search_lazer())!=-1){
lazer[k].col = 0;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = -PI/2+PI/10*j+rang(PI/20);//角度
lazer[k].startpt.x= 0;//座標
lazer[k].startpt.y= FMY/2+rang(50);
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 1;//ステータス
if(num>=58)
lazer[k].state=2;
lazer[k].length = FMX*1.2;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
for(j=11;j<22;j++){
if((k=search_lazer())!=-1){
lazer[k].col = 1;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = PI+PI/2+PI/10*j+rang(PI/20);//角度
lazer[k].startpt.x= FMX;//座標
lazer[k].startpt.y= FMY/2+rang(50);
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 1;//ステータス
if(num>=58)
lazer[k].state=2;
lazer[k].length = FMX*1.2;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
}
}
}
//91から たーたーたーた〜〜↑♪
int st,ed;
st=91; ed=94;
if(tm12[st]<=t && t<=tm12[ed]){
for(i=st;i<=ed;i++){
if(tm12[i]==t){
for(s=0;s<3;s++){
int setx[3]={0,-30,30};
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = setx[s]+50+(FMX-100)/3*(num-1-st);//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 0;//弾の種類
boss_shot.bullet[k].angle = PI/2;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 6-s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<6;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = rang(30)+50+(FMX-100)/3*(num-1-st);//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = PI/2;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-3.0/6*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<10;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = rang(20)+50+(FMX-100)/3*(num-1-st);//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 10;//弾の種類
boss_shot.bullet[k].angle = PI/2;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-4.0/10*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
}
}
}
//た〜た〜た〜た〜↑♪2回目
st=95; ed=98;
if(tm12[st]<=t && t<=tm12[ed]){
for(i=st;i<=ed;i++){
if(tm12[i]==t){
for(s=0;s<3;s++){
int setx[3]={0,-30,30};
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = setx[s]+FMX-50-(FMX-100)/3*(num-1-st);//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 0;//弾の種類
boss_shot.bullet[k].angle = PI/2;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 6-s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<6;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = rang(30)+FMX-50-(FMX-100)/3*(num-1-st);//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = PI/2;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-3.0/6*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<10;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = rang(20)+FMX-50-(FMX-100)/3*(num-1-st);//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 10;//弾の種類
boss_shot.bullet[k].angle = PI/2;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-4.0/10*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
}
}
}
//斜めに たーたーたーた〜〜↑♪
st=99; ed=102;
if(tm12[st]<=t && t<=tm12[ed]){
for(i=st;i<=ed;i++){
if(tm12[i]==t){
for(s=0;s<3;s++){
double setx[3]={0,-PI/20,PI/20};
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = 0;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 0;//弾の種類
boss_shot.bullet[k].angle = setx[s]+PI/2-(PI/2-PI/10)/3*(num-1-st);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 6-s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<6;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = 0;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = PI/2-(PI/2-PI/10)/3*(num-1-st)+rang(PI/20);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-3.0/6*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<10;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = 0;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 10;//弾の種類
boss_shot.bullet[k].angle = PI/2-(PI/2-PI/10)/3*(num-1-st)+rang(PI/30);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-4.0/10*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
}
}
}
st=103; ed=106;
if(tm12[st]<=t && t<=tm12[ed]){
for(i=st;i<=ed;i++){
if(tm12[i]==t){
for(s=0;s<3;s++){
double setx[3]={0,-PI/20,PI/20};
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = FMX;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 0;//弾の種類
boss_shot.bullet[k].angle = setx[s]+PI/2+(PI/2-PI/10)/3*(num-1-st);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 6-s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<6;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = FMX;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = PI/2+(PI/2-PI/10)/3*(num-1-st)+rang(PI/20);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-3.0/6*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<10;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 1;//弾の色
boss_shot.bullet[k].x = FMX;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 10;//弾の種類
boss_shot.bullet[k].angle = PI/2+(PI/2-PI/10)/3*(num-1-st)+rang(PI/30);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-4.0/10*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
}
}
}
//た〜た〜た〜ラストカーテン
st=106;
if(tm12[st]==t){
for(n=st;n<st+3;n++){
int setx[3]={0,-30,30};
for(s=0;s<3;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = n%2 ? 1 : 0;//弾の色
boss_shot.bullet[k].x = setx[s]+FMX-50-(FMX-100)/2*(n-st);//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 0;//弾の種類
boss_shot.bullet[k].angle = PI/2;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 6-s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<6;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = n%2 ? 0 : 1;//弾の色
boss_shot.bullet[k].x = rang(30)+FMX-50-(FMX-100)/2*(n-st);//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = PI/2;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-3.0/6*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<10;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = n%2 ? 1 : 0;//弾の色
boss_shot.bullet[k].x = rang(20)+FMX-50-(FMX-100)/2*(n-st);//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 10;//弾の種類
boss_shot.bullet[k].angle = PI/2;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 5.5-4.0/10*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 0;
}
}
}
}
//のぼってシャワー
st=107;
if(tm12[st]<=t && t<=tm12[st]+60 && t%5==0){
for(s=0;s<=150;s++){
if(s%6<4)continue;
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = (s/6)%9;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 2;//弾の種類
boss_shot.bullet[k].angle = 0;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 0;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 2;
boss_shot.bullet[k].vx = -2.5+5.0/150*s;
boss_shot.bullet[k].vy = -8;
}
}
}
//両端下
/* st=107;
if(tm12[111]-(tm12[111]-tm12[110])/3==t){
for(s=0;s<=30;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = 0;//座標
boss_shot.bullet[k].y = FMY;
boss_shot.bullet[k].knd = 11;//弾の種類
boss_shot.bullet[k].angle = -PI/4+rang(PI/4);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 1.5+rang(1);//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
for(s=0;s<=30;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = FMX;//座標
boss_shot.bullet[k].y = FMY;
boss_shot.bullet[k].knd = 11;//弾の種類
boss_shot.bullet[k].angle = PI+PI/4+rang(PI/4);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 1.5+rang(1);//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}*/
//のぼってシャワー
st=111; ed=114;
if(tm12[st]<=t && t<=tm12[ed]){
for(i=st;i<=ed;i++){
if(tm12[i]<=t && t<tm12[i]+60){
for(s=150/4*(num-st-1);s<=150/4*(num-st);s++){
if(s%6<4)continue;
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = (s/6)%9;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 2;//弾の種類
boss_shot.bullet[k].angle = 0;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 0;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 2;
boss_shot.bullet[k].vx = -2.5+5.0/150*s;
boss_shot.bullet[k].vy = -8;
}
}
}
}
}
//レーザー
st=115; ed=123;
if(tm12[st]<=t && t<=tm12[ed]){
for(i=st;i<=ed;i++){
if(tm12[i]==t){
for(s=0;s<2;s++){
if((k=search_lazer())!=-1){
lazer[k].col = 0;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = PI/2+rang(PI/2)-PI/4+PI/2*s;//角度
lazer[k].startpt.x= FMX/2;//座標
lazer[k].startpt.y= 0;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 3;//ステータス
lazer[k].length = FMY*1.2;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
if((k=search_lazer())!=-1){
lazer[k].col = 1;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = -PI/2+rang(PI/2)-PI/4+PI/2*s;//角度
lazer[k].startpt.x= FMX/2;//座標
lazer[k].startpt.y= FMY;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 3;//ステータス
lazer[k].length = FMX*1.2;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
}
}
}
if(tm12[124]==t){
for(i=0;i<8;i++){
for(s=0;s<=40;s++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = 0;//弾の色
boss_shot.bullet[k].x = FMX/2;//座標
boss_shot.bullet[k].y = 0;
boss_shot.bullet[k].knd = 11;//弾の種類
boss_shot.bullet[k].angle = PI/40*s+rang(PI/80);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4.5-3.5/8*i+rang(0.2);//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 0;
}
}
}
}
if(t==tm12[125]){
flash.flag=1;
flash.knd=1;//フラッシュ!
flash.to_cnt=50;//90カウントで変化
flash.cnt=0;
}
//ふらあぁっしゅ
if(tm12[133]<=t && t<tm12[153] && t%3==0){
for(i=0;i<2;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = base_col;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = base_angle-PI*0.15+PI*0.3*i;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 9;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 3;
}
}
}
if(tm12[133]==t||tm12[137]==t||tm12[141]==t){
if((k=search_lazer())!=-1){
lazer[k].col = 1;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = bossatan2();//角度
lazer[k].startpt.x= boss.x;//座標
lazer[k].startpt.y= boss.y;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 4;//ステータス
lazer[k].length = FMX;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
if(tm12[137]==t){
base_angle+=PI/6+rang(PI/20);
base_col=1;
}
if(tm12[141]==t){
base_angle-=PI/6*2+rang(PI/20);
base_col=0;
}
if(tm12[145]==t){
base_angle+=PI/4+rang(PI/20);
base_col=1;
}
if(tm12[147]==t){
base_angle=-PI/2;
base_col=0;
}
if(tm12[147]<=t && t<tm12[161] && t%3==0){
for(i=0;i<3;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = base_col;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = base_angle-PI*0.15+PI*0.15*i;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 9;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 3;
}
}
}
if(tm12[147]==t||tm12[151]==t||tm12[155]==t){
for(i=0;i<3;i++){
if((k=search_lazer())!=-1){
lazer[k].col = i%2;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = bossatan2()-PI/6+PI/6*i;//角度
lazer[k].startpt.x= boss.x;//座標
lazer[k].startpt.y= boss.y;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 4;//ステータス
lazer[k].length = FMX;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
}
if(tm12[151]==t){
base_angle-=PI/10+rang(PI/20);
base_col=1;
}
if(tm12[155]==t){
base_angle+=PI/5+rang(PI/20);
base_col=0;
}
if(tm12[159]==t){
base_angle-=PI/4+rang(PI/20);
base_col=1;
}
if(tm12[161]==t){
base_angle=-PI/2;
base_col=0;
}
if(tm12[161]<=t && t<tm12[173] && t%3==0){
for(i=0;i<4;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = base_col;//弾の色
boss_shot.bullet[k].x = boss.x;//座標
boss_shot.bullet[k].y = boss.y;
boss_shot.bullet[k].knd = 1;//弾の種類
boss_shot.bullet[k].angle = base_angle-PI*0.18+PI*0.12*i;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 9;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 3;
}
}
}
if(tm12[161]==t||tm12[165]==t||tm12[169]==t){
for(i=0;i<6;i++){
if((k=search_lazer())!=-1){
lazer[k].col = (i+1)%2;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = bossatan2()+PI2/6*i;//角度
lazer[k].startpt.x= boss.x;//座標
lazer[k].startpt.y= boss.y;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 4;//ステータス
lazer[k].length = FMX;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
}
if(tm12[165]==t){
base_angle-=PI/10+rang(PI/20);
base_col=1;
}
if(tm12[169]==t){
base_angle+=PI/5+rang(PI/20);
base_col=0;
}
if(tm12[161]==t||tm12[165]==t||tm12[169]==t){
for(i=0;i<6;i++){
if((k=search_lazer())!=-1){
lazer[k].col = (i+1)%2;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = bossatan2()+PI2/6*i;//角度
lazer[k].startpt.x= boss.x;//座標
lazer[k].startpt.y= boss.y;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 4;//ステータス
lazer[k].length = FMX;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
}
if(tm12[175]==t){
for(i=0;i<6;i++){
if((k=search_lazer())!=-1){
lazer[k].col = 0;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = base_angle+PI2/6*i;//角度
lazer[k].startpt.x= boss.x;//座標
lazer[k].startpt.y= boss.y;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 5;//ステータス
lazer[k].length = FMX;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
}
if(tm12[179]==t){
for(i=0;i<6;i++){
if((k=search_lazer())!=-1){
lazer[k].col = 1;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = base_angle+PI2/6*i;//角度
lazer[k].startpt.x= boss.x;//座標
lazer[k].startpt.y= boss.y;
lazer[k].flag = 1;
lazer[k].cnt = 0;
lazer[k].haba = 1;//幅
lazer[k].state = 6;//ステータス
lazer[k].length = FMX;//レーザーの長さ
lazer[k].hantei = 0;
lazer[k].lphy.conv_flag=0;//回転フラグ
lazer[k].lphy.conv_base_x=0;//回転基準位置
lazer[k].lphy.conv_base_y=0;
lazer[k].lphy.conv_x=0;//回転元の位置
lazer[k].lphy.conv_y=0;
input_lphy(&lazer[k],0,0);//代入
}
}
}
if(tm12[183]-60==t){
double sx=FMX/2,sy=420;
for(i=0;i<20;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = i%9;//弾の色
boss_shot.bullet[k].x = sx+cos(PI2/20*i)*400;//座標
boss_shot.bullet[k].y = sy+sin(PI2/20*i)*400;
boss_shot.bullet[k].knd = 4;//弾の種類
boss_shot.bullet[k].angle = PI2/20*i+PI;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 4;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 4;
boss_shot.bullet[k].till = 1000;
}
}
}
if(t==tm12[187]){
flash.flag=1;
flash.knd=1;//フラッシュ!
flash.to_cnt=120;//90カウントで変化
flash.cnt=0;
}
int rflag=0;
double rx,ry;
for(i=VMX*VMY;i<BOSS_BULLET_MAX;i++){
if(boss_shot.bullet[i].flag>0){
int cnt=boss_shot.bullet[i].cnt;
int state=boss_shot.bullet[i].state;
double x=boss_shot.bullet[i].x,y=boss_shot.bullet[i].y;
if(t==tm12[0]||t==tm12[7]||t==tm12[14]||t==tm12[20]||t==tm12[27])
boss_shot.bullet[i].flag=0;
if(state==1){
if(cnt>35)
boss_shot.bullet[i].spd*=0.983;
}
if(state==2){
if(boss_shot.bullet[i].vy<8)
boss_shot.bullet[i].vy+=0.15;
boss_shot.bullet[i].x+=boss_shot.bullet[i].vx;
boss_shot.bullet[i].y+=boss_shot.bullet[i].vy;
boss_shot.bullet[i].angle=atan2(boss_shot.bullet[i].vy,boss_shot.bullet[i].vx);
}
if(state==3){
if(x<0+9 || FMX-9<x || y<0+9){
if(x<0+9 || FMX-9<x )
boss_shot.bullet[i].angle=PI-boss_shot.bullet[i].angle;
if(y<0+9)
boss_shot.bullet[i].angle=PI2-boss_shot.bullet[i].angle;
}
}
if(state==4){
if(cnt==100){
boss_shot.bullet[i].spd=0;
}
if(tm12[187]==t){
boss_shot.bullet[i].vy=10;
boss_shot.bullet[i].state=5;
}
}
if(state==5){
if(boss_shot.bullet[i].vy>0){
boss_shot.bullet[i].vy-=0.15;
if(boss_shot.bullet[i].vy<0)
boss_shot.bullet[i].vy=0;
}
boss_shot.bullet[i].y-=boss_shot.bullet[i].vy;
if(t==tm12[188]){
rx=boss_shot.bullet[i].x;
ry=boss_shot.bullet[i].y;
rflag=1;
boss_shot.bullet[i].flag=0;
}
}
if(state==6){
if(cnt<180)
boss_shot.bullet[i].spd*=0.98;
if(cnt>180)
boss_shot.bullet[i].spd/=0.99;
if(cnt>480)
boss_shot.bullet[i].spd/=0.99;
}
}
}
if(rflag==1){
for(j=0;j<=20;j++){
for(i=0;i<100-j*4;i++){
if((k=search_boss_shot_n(VMX*VMY,BOSS_BULLET_MAX))!=-1){
boss_shot.bullet[k].col = GetRand(8);//弾の色
boss_shot.bullet[k].x = rx;//座標
boss_shot.bullet[k].y = ry;
boss_shot.bullet[k].knd = 11;//弾の種類
boss_shot.bullet[k].angle = PI2/(100-j*4)*i+rang(PI/200);//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 9-9/20.0*j+rang(0.2);//スピード
if(boss_shot.bullet[k].spd<0.1)
boss_shot.bullet[k].spd=0.1;
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 6;
boss_shot.bullet[k].till = 0;
}
}
}
}
for(i=0;i<LAZER_MAX;i++){
if(lazer[i].flag>0){
int cnt=lazer[i].cnt;
int state=lazer[i].state;
if(state==1){
if(cnt>=20*4-7 && cnt<20*4){
lazer[i].haba+=1.5;
}
if(cnt==20*4+1)
lazer[i].hantei=0.6;
if(cnt>=20*8-30-7 && cnt<20*8-30){
lazer[i].hantei=0;
lazer[i].haba-=1.5;
}
if(cnt==20*8-30){
lazer[i].flag=0;
}
}
if(state==2){
if(cnt>=20*2-5 && cnt<20*2){
lazer[i].haba+=1.5;
}
if(cnt==20*2+1)
lazer[i].hantei=0.6;
if(cnt>=20*6-30-5 && cnt<20*6-30){
lazer[i].hantei=0;
lazer[i].haba-=1.5;
}
if(cnt==20*6-30){
lazer[i].flag=0;
}
}
if(state==3){
if(t>=tm12[124]-7 && t<tm12[124]){
lazer[i].haba+=1;
}
if(t==tm12[124]+2)
lazer[i].hantei=0.6;
if(t==tm12[125]){
lazer[i].flag=0;
}
}
if(state==4){
if(cnt>=20*2-10 && cnt<20*2){
lazer[i].haba+=1;
}
if(cnt==20*2+2)
lazer[i].hantei=0.6;
if(cnt>=20*4-10 && cnt<20*4){
lazer[i].hantei=0;
lazer[i].haba-=1;
}
if(cnt==20*4){
lazer[i].flag=0;
}
}
if(state==5){
lazer[i].angle+=PI/180;
if(30<cnt && cnt<40){
lazer[i].haba+=3.0;
}
if(cnt==45)
lazer[i].hantei=0.6;
if(cnt>=70 && cnt<80){
lazer[i].hantei=0;
lazer[i].haba-=3.0;
}
if(cnt==80){
lazer[i].flag=0;
}
}
if(state==6){
lazer[i].angle-=PI/180;
if(30<cnt && cnt<40){
lazer[i].haba+=3.0;
}
if(cnt==45)
lazer[i].hantei=0.6;
if(cnt>=70 && cnt<80){
lazer[i].hantei=0;
lazer[i].haba-=3.0;
}
if(cnt==80){
lazer[i].flag=0;
}
}
}
}
}
関数一つで弾幕一つ作るスタイルなので、そのまま統一したんですけど、
一つの関数としてはあまりにも長すぎる・・(汗
今回FPSを保つ処理など色々追加したので、この章の内容は以降の章に引き継ぎます。
どこを変更したのかまた覚えてないという失態をしてしまったので、実際に他の章で追加した処理は紹介しようと思います。
また、音楽の同梱については曲の製作者様に現在行っても良いか、お聞きしているところなので、
まだ同梱されていません。
現在この弾幕で遊んでいただくには自分で音楽を用意して頂くしかありません。
http://www.nicovideo.jp/watch/sm3822557
ニコニコ動画にこの曲があるので(上記リンクの「5. 20:30 Rage/Godspeed」です。)
https://dixq.net/sr/niconico.html
こちらで紹介しているように用意します。
しかし、20:30〜(実際はもうちょっと先)なんで、紹介動画の音楽と同じになるように編集しないといけません。
Audacityなどのソフトで紹介動画と同じようになるように編集します。
・・・というとんでもないメンドクサイことをしないといけないのであまりこの章は見ていただかなくていいですm(_
_||)m
また進展があったら改めて書き直そうと思います。
- Remical Soft -