



![]()
弾幕:「反魂蝶〜八部咲き〜」
作製難易度:★★★★★★ (6/10)
実行結果
↑音楽に合わせてみた高画質バージョンはこちら↑
まずはレーザーを理解しなければ反魂蝶を製作出来ないので
| レーザーを作ってみよう |
をまだご覧になってない場合は先にご覧下さい。
・・・そしてレーザーの解説作るのに力尽きたのでちょっとココの製作に時間を下さい(汗
void boss_shot_bulletH009(){
#define TM009 420
#define DIST 60
int i,j,k,s,t=boss_shot.cnt%TM009,t2=boss_shot.cnt;
double angle;
static int num;
if(t2==0)num=4;
if(t==0){
for(j=0;j<2;j++){
for(i=0;i<num;i++){
int plmn=(j ? -1 : 1);
if((k=search_lazer())!=-1){
lazer[k].col = j;//弾の色
lazer[k].knd = 0;//弾の種類
lazer[k].angle = PI2/num*i+PI2/(num*2)*j+PI2/(num*4)*((num+1)%2);//角度
lazer[k].startpt.x= boss.x+cos(lazer[k].angle)*DIST;//描画し始める座標
lazer[k].startpt.y= boss.y+sin(lazer[k].angle)*DIST;
lazer[k].flag = 1;//表示するか 0:しない 1:する
lazer[k].cnt = 0;
lazer[k].haba = 2;//幅
lazer[k].state = j;//
lazer[k].length = 240;//長さ
lazer[k].hantei = 0;//あたり判定をするか 0:しない 1:する
lazer[k].lphy.conv_flag=1;//回転するか 0:しない 1:する
lazer[k].lphy.conv_base_x=boss.x;//回転の基準となる座標
lazer[k].lphy.conv_base_y=boss.y;
lazer[k].lphy.conv_x=lazer[k].startpt.x;//回転するレーザーの位置
lazer[k].lphy.conv_y=lazer[k].startpt.y;
input_lphy(&lazer[k],80,PI/num*plmn);//k番目のレーザーを、80カウントで、PI/num*plmnの角度だけ回転する情報を登録
}
}
}
se_flag[33]=1;
}
//60カウント以下で10カウントに1回
if(t==50){
angle=rang(PI);//自機とボスとの成す角
for(s=0;s<2;s++){
for(t=0;t<3;t++){
for(j=0;j<3;j++){
for(i=0;i<30;i++){
if((k=search_boss_shot())!=-1){
boss_shot.bullet[k].col = s;//弾の色
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 = angle+PI2/30*i+PI2/60*s;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 1.8-0.2*j+0.1*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = t;
}
se_flag[0]=1;
}
}
}
}
}
if(t>=170 && t<310 && (t-170)%35==0){
int div=((t-170)%70==0) ? -1 : 1;
angle=rang(PI);//自機とボスとの成す角
for(s=0;s<2;s++){//速度の違う2つの弾がある
for(t=0;t<3;t++){//1箇所から3つにわかれる
for(i=0;i<30;i++){//1周30個
if((k=search_boss_shot())!=-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 = 11;//弾の種類
boss_shot.bullet[k].angle = angle+PI2/30*i;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 2-0.3*s;//スピード
boss_shot.bullet[k].eff = 0;
boss_shot.bullet[k].state = 10+t;
boss_shot.bullet[k].base_angle[0] = PI/300*div;
}
}
}
se_flag[0]=1;
}
}
if(t==360){
angle=rang(PI);//自機とボスとの成す角
for(t=0;t<3;t++){//1箇所から3つに分かれる
for(i=0;i<30;i++){
if((k=search_boss_shot())!=-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 = angle+PI2/30*i;//角度
boss_shot.bullet[k].flag = 1;
boss_shot.bullet[k].cnt = 0;
boss_shot.bullet[k].spd = 1.8;//スピード
boss_shot.bullet[k].eff = 1;
boss_shot.bullet[k].state = 20+t;
}
}
}
se_flag[0]=1;
}
for(i=0;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;
if(state%10==0){
if(cnt>90 && cnt<=100)
boss_shot.bullet[i].spd-=boss_shot.bullet[i].spd/220;
}
if(state%10==1){
if(cnt>50)
boss_shot.bullet[i].spd+=boss_shot.bullet[i].spd/45;
}
if(state%10==2){
if(cnt>65)
boss_shot.bullet[i].spd+=boss_shot.bullet[i].spd/90;
}
if(10<=state && state<=12){
if(cnt>15 && cnt<=80)
boss_shot.bullet[i].angle+=boss_shot.bullet[i].base_angle[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==0 || state==1){
if(cnt==80){
lazer[i].haba=30;
lazer[i].hantei=0.5;
}
if(cnt>=260 && cnt<=320){
if(cnt==280)
lazer[i].hantei=0;
lazer[i].haba=10*(60-(cnt-260))/60.0;
if(cnt==320)
lazer[i].flag=0;
}
}
}
}
if(t==TM009-1)
num=(++num);
}
- Remical Soft -