1.ザコの出現エフェクト
2.ザコのHP表示
1.ザコの出現エフェクト
まずは画像を用意します。
GV.hに追加
GLOBAL int img_eff_enemy_appear[2][6];//敵出現中の画像
GLOBAL int img_eff_appear[16];//敵出現エフェクト、弾消しエフェクトの画像
LoadDivGraph( "../dat/img/enemy/appear20.png", 6 , 6 , 1 , 100, 100,img_eff_enemy_appear[0]);
LoadDivGraph( "../dat/img/enemy/appear21.png", 6 , 6 , 1 , 100, 100,img_eff_enemy_appear[1]);
LoadDivGraph( "../dat/img/enemy/appear.png", 16, 4 , 4 , 32 , 32 , img_eff_appear);
また、出現時にもエフェクトを登録する。
出現120フレーム前のエフェクトの画像はx座標が真ん中よりも左なら右向きになるようにし、
右なら左向きになるようにし、それぞれ別のエフェクトとして扱います。
このエフェクトは移動するので敵出現位置と重なるようにエフェクトを出す時のy座標はその分ずらします。
enemy.cppに以下を追加 enemy_enter()に以下を追加
int i,j,k,t;
if(boss.flag!=0)return;
for(t=0;t<ENEMY_ORDER_MAX;t++){
if(enemy_order[t].cnt-120 == stage_count){//現在が出現2秒前なら
if((k=search_effect())!=-1){
effect[k].ang=0;
effect[k].brt=128;
effect[k].cnt=0;
effect[k].col=0;
effect[k].eff=1;
effect[k].flag=1;
if(enemy_order[t].x<FMX/2) effect[k].knd=7;
else effect[k].knd=8;
effect[k].mvang=-PI/2;
effect[k].r=1.0;
effect[k].spd=0;
effect[k].x=enemy_order[t].x;
effect[k].y=enemy_order[t].y+120;
}
}
case 7://敵出現エフェクト(右向き)
if(effect[i].cnt<60 && effect[i].cnt%12==0){
effect[i].img=img_eff_enemy_appear[0][effect[i].cnt/12];
}
if(effect[i].cnt==60){
effect[i].spd=2;
}
if(effect[i].cnt==120){
effect[i].flag=0;
}
effect[i].cnt++;
break;
case 8://敵出現エフェクト(左向き)
if(effect[i].cnt<60 && effect[i].cnt%12==0){
effect[i].img=img_eff_enemy_appear[1][5-effect[i].cnt/12];
}
if(effect[i].cnt==60){
effect[i].spd=2;
}
if(effect[i].cnt==120){
effect[i].flag=0;
}
effect[i].cnt++;
break;
こちらのエフェクトはボス登場時の弾消しにも流用することができます。
enemy_enter()の以下を変更する
if(enemy_order[t].cnt==stage_count){//現在の瞬間がオーダーの瞬間なら
if((i=enemy_num_search())!=-1){
enemy[i].flag =1;//フラグ
enemy[i].cnt =0;//カウンタ
enemy[i].pattern=enemy_order[t].pattern;//移動パターン
enemy[i].muki =1;//向き
enemy[i].knd =enemy_order[t].knd;//敵の種類
enemy[i].x =enemy_order[t].x;//座標
enemy[i].y =enemy_order[t].y;
enemy[i].sp =enemy_order[t].sp;//スピード
enemy[i].bltime =enemy_order[t].bltime;//弾の発射時間
enemy[i].blknd =enemy_order[t].blknd;//弾幕の種類
enemy[i].blknd2 =enemy_order[t].blknd2;//弾の種類
enemy[i].col =enemy_order[t].col;//色
enemy[i].wait =enemy_order[t].wait;//色
enemy[i].hp =enemy_order[t].hp;//体力
enemy[i].hp_max =enemy[i].hp;//体力最大値
enemy[i].back_col=GetRand(4);
enemy[i].vx =0;//水平成分の速度
enemy[i].vy =0;//鉛直成分の速度
enemy[i].ang =0;//角度
for(j=0;j<6;j++)
enemy[i].item_n[j]=enemy_order[t].item_n[j];//落とすアイテム
if((k=search_effect())!=-1){
effect[k].ang=0;
effect[k].brt=255;
effect[k].cnt=0;
effect[k].col=0;
effect[k].eff=1;
effect[k].flag=1;
effect[k].knd=9;
effect[k].r=1;
effect[k].spd=0;
effect[k].x=enemy_order[t].x;
effect[k].y=enemy_order[t].y;
}
}
}
case 9://敵出現エフェクト
if(effect[i].cnt%8==0){
effect[i].img=img_eff_appear[effect[i].cnt/8];
}
if(effect[i].cnt==63){
effect[i].flag=0;
}
effect[i].cnt++;
break;
graph.cppのgraph_stgに以下を追加
graph_effect(7);//敵出現エフェクト(右向き)
graph_effect(8);//敵出現エフェクト(左向き)
graph_effect(9);//敵出現、弾消しエフェクト
テスト時に気になったので以下の処理を修正。
音楽に関して
music.cppのbgm_main()の以下を修正。
進行度の表示に関して
graph.cppのgraph_develop()の以下を修正。
//自機画像を表示
DrawRotaGraphF(16.0,FMY/2+200-400.0*stage_count/boss.appear_count[stage_boss_num[stage]],0.5,0,img_ch[0][(stage_count/30)%4],TRUE);
}
2.ザコのHP表示
敵自体の描画にくっつけて処理します。
表示の仕方は枠をかいてModiGraphでゲージの描画を行うというようにします。
枠とゲージの画像を用意します。
GV.hに以下を追加 load.cppのloadに以下を追加。
img_enemy_hp[0]= LoadGraph( "../dat/img/enemy/hp11.png");
img_enemy_hp[1]= LoadGraph( "../dat/img/enemy/hp2.png");
//敵描画
void graph_enemy(){
int i;
for(i=0;i<ENEMY_MAX;i++){
if(enemy[i].flag==1){
DrawRotaGraphFdF(enemy[i].x,enemy[i].y,1.0f,0.0f,img_enemy[0][enemy[i].img],TRUE);
DrawRotaGraphFdF(enemy[i].x+16,enemy[i].y-16,1.0f,0.0f,img_enemy_hp[0],TRUE);
DrawModiGraphFdF(enemy[i].x+16-10,enemy[i].y-16-1,enemy[i].x+16-10+20*enemy[i].hp/enemy[i].hp_max,enemy[i].y-16-1,
enemy[i].x+16-10+20*enemy[i].hp/enemy[i].hp_max,enemy[i].y-16+1,enemy[i].x+16-10,enemy[i].y-16+1,
img_enemy_hp[1],TRUE);
}
}
}
SAIさん
ショットの比較動画の作成お疲れ様です。
書き忘れたことってなんでしょうね?
一発に何フレームかかるか。一発当たりの威力はいくらか とかでしょうか?
それともホーミングは威力は低いですが確実に攻撃が当たります とかでしょうか?
そして安地。本当によく見つけられますね。
(前回の日記へのコメントから)四聖龍(たつ)神録かあ。
達神録というのはどうでしょう。本家よりも難易度が上がったモードとかで。