パワーアップなど

アバター
Tatu
記事: 445
登録日時: 14年前
住所: 北海道

パワーアップなど

投稿記事 by Tatu » 14年前

今回はパワーアップなどいろいろな処理を書いてみました。

今回の内容
1.パワーアップについて
2.パワーアップアイテムのパワー増加量調整
3.ミスをしたときのパワーに関する処理
4.ボスが落とすアイテム
5.フルパワー時のアイテムの処理
6.初期パワー設定変更
7.ボム時のパワー消費
8.スペルプラクティスのゲームオーバー
9.クリア時のボム


1.パワーアップについて

今回は通常ショットについての処理を変更します。

通常時では
0:自機から二発メインショット、低速時は詰める。
1:自機後方にオプションが一個追加される。
オプションからはホーミングショットが撃たれる。
オプションは低速時に近づく。
2:二つのオプションが左右後方につく。
それぞれメインショットとホーミングショットの両方を撃つ。
3:更に後方に1:と同じオプションがつく。
以降は見た目には変化なし。

そのままでは2つまでしか出せないオプションを増やします。
GV.hの以下を変更

CODE:

GLOBAL option_bb_t option_bb[3];//オプション発射元ボンボン(49)
オプションの動きを計算します。

オプションの自機からの位置の設定
cshot.cppで
OPTION_X OPTION_Yの定義の代わりに

CODE:

int option_x[3]={0,25,-25};
int option_y[3]={50,35,35};
を書く。

オプションの動きについては以下のものと入れ替えます。

CODE:

//オプションのボンボン計算
void calc_option_bb(){
	//自機後方のものについて
	if((ch.power>=100 && ch.power=300){
		option_bb[0].flag=1;
		if(CheckStatePad(configpad.slow)==0){
			option_bb[0].x=ch.x+option_x[0];
			option_bb[0].y=ch.y+option_y[0]+sin(PI2/150*ch.cnt)*20;
		}
		else{
			option_bb[0].x=ch.x+option_x[0]/2;
			option_bb[0].y=ch.y+option_y[0]/2;
		}
		option_bb[0].cnt++;
	}
	else option_bb[0].flag=0;
	//左右のものについて
	if(ch.power>=200){
		option_bb[1].flag=1;
		option_bb[2].flag=1;
		if(CheckStatePad(configpad.slow)==0){
			option_bb[1].x=ch.x+option_x[1];
			option_bb[1].y=ch.y+option_y[1]+sin(PI2/150*ch.cnt)*20;
			option_bb[2].x=ch.x+option_x[2];
			option_bb[2].y=ch.y+option_y[2]+sin(PI2/150*ch.cnt)*20;
		}
		else{
			option_bb[1].x=ch.x+option_x[1]/3;
			option_bb[1].y=ch.y+option_y[1]/2;
			option_bb[2].x=ch.x+option_x[2]/3;
			option_bb[2].y=ch.y+option_y[2]/2;
		}
		option_bb[1].cnt++;
		option_bb[2].cnt++;
	}
	else{
		option_bb[1].flag=0;
		option_bb[2].flag=0;
	}
}
オプションの動きの計算はクリア状態でも行うので
function.hに

CODE:

	GLOBAL void calc_option_bb();
を追加し、

メインループのcase CLEAR:に

CODE:

			calc_option_bb();//オプションのぼんぼん計算(49)
を追加します。

ショット関数の変更
自機ショットの登録を簡略化する関数を用意し、
通常ショットの登録を行う関数を変更しました。

CODE:

//自機ショット登録関数
void enter_cshot_bullet(int img,int knd,int power,double x,double y,double angle,double spd){
	int k=search_cshot();
	if(k!=-1){
		cshot[k].angle=angle;
		cshot[k].cnt=0;
		cshot[k].flag=1;
		cshot[k].img=img;
		cshot[k].knd=knd;
		cshot[k].power=power;
		cshot[k].spd=spd;
		cshot[k].x=x;
		cshot[k].y=y;
	}
}

//通常ショット登録
void ch0_shot_pattern(){
	//本体からのショット
	enter_cshot_bullet(img_cshot[0],0,(ch.power=100){//キャラが通常か喰らいボム状態で、ボムがオフなら
        if(CheckStatePad(configpad.bom)==1){//ボムボタンが押されたら
			ch.power-=100;
            enter_bom();
        }
    }
8.スペルプラクティスのゲームオーバー

スペルプラクティスでゲームオーバーになったら
そのままスペル選択画面に戻す処理を追加

control.cppのcontrol_main()に以下を追加

CODE:

        //残機0なら
		if( ch.num 0 || clear_count>45))){//クリア後一定時間経過後の状態でなければ	
	    if((ch.flag==0||ch.flag==1) && bom.flag==0 && ch.power>=100){//キャラが通常か喰らいボム状態で、ボムがオフなら
			if(CheckStatePad(configpad.bom)==1){//ボムボタンが押されたら
				ch.power-=100;
				enter_bom();
			}
        }
    }
今回の内容はこれで終わりです。





上にも書きましたがボム中にボスの弾幕が終了すると
アイテムが2倍になるのは仕様なのでしょうか?

また、次のエクステンドまでの表示が常に200なのはなぜなのでしょうか?
ファンタズムでは最初のエクステンドは100ポイントの時のようです。

コメントはまだありません。