新たに3つの変数を追加します。
danmaku_charenge_num[DANMAKU_MAX];//挑戦回数
danmaku_clear_num[DANMAKU_MAX];//クリア回数
danmaku_failure_flag;//弾幕失敗フラグ
弾幕名が表示されるときに挑戦回数を増やします。
一度も失敗していない時は挑戦回数とクリア回数が一致するようにしたいので表示は変数より1低くします。
(注:四聖龍神録ではこのような処理を行っておらず、
クリア率が100%でもスペルプラクティス画面以外で挑戦回数とクリア回数が一致することはありません)
弾幕開始時に失敗フラグを0にします。
ボムを撃ったり、被弾したときは失敗フラグを1にする。
弾幕終了時に失敗フラグが立っていなければクリア回数を増やす。
GV.hに以下を追加
GLOBAL int danmaku_challenge_num[DANMAKU_MAX];//弾幕挑戦回数
GLOBAL int danmaku_clear_num[DANMAKU_MAX];//弾幕クリア回数
GLOBAL int danmaku_failure_flag;//弾幕失敗フラグ
boss_shot.cppのenter_boss()に以下を追加 waitandenter()の以下の部分を変更 boss_shot_main()の弾幕終了時の処理に以下を追加 失敗フラグに関する処理
char.cppのcalc_ch()の死んだときの処理に以下を追加 effect.cppのenter_bom()に以下を追加 ボスがいない時に弾幕失敗フラグを立てても弾幕開始時に戻るので
ボスがいるかどうかの判定を行う必要はありません。
回数の表示に関する処理
graph.cppのgraph_board()に以下を追加
//弾幕回数表示
if(boss.flag==1){
DrawFormatStringToHandle(FX+FMX-80,FY+40,color[0],font[0],"(%d/%d)",danmaku_clear_num[boss.knd],danmaku_challenge_num[boss.knd]-1);
}
case SPELL:
DrawBox(0,20*command,600,20*(command+1),color[6],TRUE);
if(spell_stage==0){
n=boss.danmaku_num[stage_boss_num[0]];
}
else{
n=boss.danmaku_num[stage_boss_num[spell_stage]]-boss.danmaku_num[stage_boss_num[spell_stage-1]] - 1;
}
for(i=0;i0){
DrawFormatStringToHandle(600,20*i,color[0],font[0],"%4.1f%%",(float)danmaku_clear_num[i]/danmaku_challenge_num[i]);
}
}
else{
DrawFormatStringToHandle(0,20*i,color[0],font[0],"%s",boss.danmaku_name[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]);
DrawFormatStringToHandle(500,20*i,color[0],font[0],"%d/%d",
danmaku_clear_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1],
danmaku_challenge_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]);
if(danmaku_challenge_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]>0){
DrawFormatStringToHandle(600,20*i,color[0],font[0],"%4.1f%%",(float)danmaku_clear_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]
/danmaku_challenge_num[i+boss.danmaku_num[stage_boss_num[spell_stage-1]] + 1]);
}
}
}
break;