47 章

基本的な部分はどれも出来てきました。

細かい部分はまた調整するとして、1面を一通り作ってみましょう。

といっても、計算処理、登録処理、描画処理などは出来ているので、

今回はエクセルデータと設定部分をちょちょいと変えてやればいいだけです。

まぁそのちょちょいがエクセルデータはやりにくいのですがね・・。

ステージの題名が表示されるまでは今までの通りでいきましょう。

敵がわらわらと降りてきながら自機狙いショットを撃って、、、、

とかどんなステージを作りたいか文字で説明するより動画見てもらったほうが早いですね。

今回はちと動画が長く重いので、別のページに置きました。

こちらの画像をクリックして動画ページへお進み下さい。



エクセルデータはこんな感じになっていますよね。

/カウンタ 移動パターン 敵の種類 x座標 y座標 スピード 発射時間 弾幕種類 弾の色 体力 弾種類 待機時間 アイテム1 2 3 4 5 6
/cnt pattern knd x y sp bltime blknd col hp blknd2 wait item_n
100 0 0 40 -20 0 60 0 0 1 7 180 0 -1 -1 -1 -1 -1


行の最初が「/」で始まるものは注釈です。

カウンタというのはゲーム画面左上に表示されている数字です。

まぁ細かい設定は以前お話しましたね。

各値と実行結果動画がどう対応しているかよく見てみて下さい。

そして自分で色々いじくって、自分の思うステージにアレンジしてみて下さい。

その時は「弾の種類を変更したものの、無い色番号を指定していた」なんてことのないように注意して下さい。

移動パターンは「enemy_act_pattern.cpp」

弾幕の種類は「shotH.cpp」

弾の種類は画像フォルダのbulletフォルダ

アイテムの種類はout.cppの102行目を見ながらいろいろいじくってみましょう。

また、今回は以下の部分も変更しました。



---- func.h の以下の部分を変更 ----


void (*boss_shot_bullet[DANMAKU_MAX])() =
{
//中ボス
        boss_shot_bulletH000,//ノーマル
        boss_shot_bulletH002,//スペル〜パーフェクトフリーズ〜
//ラスボス
        boss_shot_bulletH001,//ノーマル〜サイレントセレナ〜
        boss_shot_bulletH004,//スペル〜ケロちゃん〜
        boss_shot_bulletH009,//スペル〜反魂蝶〜
//終り

        boss_shot_bulletH000,//ぬるぽ回避用(この弾幕は出てこない)
};



---- load.cpp の load_story() の赤字部分を変更 ----

        char fname[32]={"../dat/csv/47章/storyH0.csv"};


---- ini.cpp の赤字部分を変更 ----

/*ここは後からきちんとセットします*/
int back_knd[DANMAKU_MAX]={
        0,1,0,1,1,
};
int boss_hp[DANMAKU_MAX]={
        5000,10000,8000,20000,30000,
};
/*ここまで*/

//ゲームの初期化
void ini(){
        stage_count=1;
        memset(&ch,0,sizeof(ch_t));
        memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);
        memset(lazer,0,sizeof(lazer_t)*LAZER_MAX);
        memset(enemy_order,0,sizeof(enemy_order_t)*ENEMY_ORDER_MAX);
        memset(shot,0,sizeof(shot_t)*SHOT_MAX);
        memset(cshot,0,sizeof(cshot_t)*CSHOT_MAX);
        memset(effect,0,sizeof(effect_t)*EFFECT_MAX);
        memset(del_effect,0,sizeof(del_effect_t)*DEL_EFFECT_MAX);
        memset(&bom,0,sizeof(bom_t));
        memset(&bright_set,0,sizeof(bright_set_t));
        memset(&dn,0,sizeof(dn_t));
        memset(&boss,0,sizeof(boss_t));
        memset(child,0,sizeof(child_t)*CHILD_MAX);
        memset(&stage_title,0,sizeof(stage_title_t));
        memset(item,0,sizeof(item_t)*ITEM_MAX);

        ch.x=FMX/2;
        ch.y=FMY*3/4;
        ch.power=0;//初期パワー(41)
        ch.num=5;//初期残機数(41)

        stage_title.appear_cnt=stage_title_count[stage];
        
        /*弾幕それぞれの設定。後々きちんと設定しましょう。*/
        boss.appear_count[0]=1650;//中ボスが出現する時刻(42)(47)
        boss.appear_count[1]=2850;//最後ボスが出現する時刻(44)(47)

        boss.danmaku_num[0]=1;//中ボスが何個目までの弾幕を出すか
        boss.danmaku_num[1]=4;//最後に出るボスが何個目までの弾幕を出すか(47)

        for(int i=0;i<DANMAKU_MAX;i++){//弾幕それぞれのHP(47)
                boss.set_hp[i]=boss_hp[i];
        }
        boss.hp_max=boss.set_hp[0];
        for(int i=0;i<DANMAKU_MAX;i++)//弾幕それぞれの背景の種類
                boss.back_knd[i]=back_knd[i];
        /*ここまで*/
        
        bright_set.brt=255;//初期輝度は最大
}    




boss_shot_bulletにいれる順番は、弾幕が出てくる順番です。

boss_shotH.cppを見ながら順番を決めましょう。

back_kndとboss_hpはそれぞれその弾幕時の背景の種類と敵の体力です。

ここはわかりやすく適当に変数にいれていますが後からきちんと処理は行っておきます。




どうでしょう、うまくいきましたか?

ちょっとゲームらしくなってきたのではないでしょうか。

次の章では音楽を鳴らしてもっと雰囲気を出してみましょう。



- Remical Soft -