・概要
「バスター」は、ゼロの主要な遠距離攻撃のことを指す。「ショット」と表現したほうがより正確と思われる(が、初代ロックマンからの慣例で云々)。
ここでは、チップやEX
バスター関連の記述を、部分的に省略している。
・loadの処理
・・バスターの個数
ASのファイル:zero_load.txt
_root.count_zero_buster=0 //バスターの個数のカウント
count_zero_buster_max=3 //バスターの個数の最大値
・・バスターの方向、バスターの初期位置
ASのファイル:zero_load.txt
_root.initial_direction_zero_buster //バスターの方向
_root.initial_zero_buster_x;_root.initial_zero_buster_y //バスターの初期位置
・・バスターモーション
ASのファイル:zero_load.txt
_root.zero_buster="none" //バスターモーションの判定
_root.count_zero_buster_time=0 //バスターモーションの時間のカウント
_root.count_zero_buster_time_max=22 //バスターモーションの時間の最大値
・・その他
ASのファイル:zero_load.txt
_root.zero_buster_identify=["none","none","none","none"] //バスターの出現判定用の配列
zero_buster_appearance="none" //バスターの出現判定(出現させるバスターの種類)
・「_root.zero_buster_identify」:バスターの出現判定用の配列。ここに「バスターの種類」が代入される。「・バスターの個数のカウント」にも用いられている。
・「zero_buster_appearance」:バスターの出現判定。出現させるバスターの種類に関する情報が代入される。
・バスターの方向、バスターの初期位置
・・概要
バスターの方向、バスターの初期位置に関する値を算出する。発射されたバスターは、loadの処理において、これらの値を参照することになる。
・・バスターの方向
基本的には、「ゼロの方向」と「バスターの方向」は一致する。ただし、壁ずり落ちの場合のみ、方向を反転させる。
ASのファイル:zero_buster.txt
_root.initial_direction_zero_buster=_root.zero_direction
if(_root.zero_action=="wall_slide"){_root.initial_direction_zero_buster*=-1} //壁ずり落ちの場合,方向を反転
・・バスターの初期位置(x方向)
アクションの状態によって、位置が異なる。
ASのファイル:zero_buster.txt
if(_root.zero_action=="dash" or _root.zero_action=="air_dash"){_root.initial_zero_buster_x=_parent._x+(6+30)*_root.initial_direction_zero_buster} //ダッシュ,エアダッシュ
else{_root.initial_zero_buster_x=_parent._x+(6+23)*_root.initial_direction_zero_buster} //その他
・・バスターの初期位置(y方向)
x方向と同様に、アクションの状態によって、位置が異なる。
歩きの場合は、
通常状態などよりも位置を低くしている(原作準拠)。
ASのファイル:zero_buster.txt
if(_root.zero_action=="walk"){_root.initial_zero_buster_y=_parent._y+18-22.5} //歩き
else if(_root.zero_action=="dash" or _root.zero_action=="air_dash"){_root.initial_zero_buster_y=_parent._y+18-19.5} //ダッシュ,エアダッシュ
else{_root.initial_zero_buster_y=_parent._y+18-25.5} //その他
・バスターモーション
・・概要
ゼロがバスターを発射した瞬間から、暫くの間、ゼロはバスターを構え続ける。これが、バスターモーションである。
セイバーモーションの判定がある場合は、
セイバーモーションが優先される。
ASのファイル:zero_buster.txt
if(_root.zero_buster=="shot" and _root.zero_saber=="none"){ //バスターモーションの判定がある場合・セイバーモーションの判定がない場合
︙
}
・「_root.zero_buster」:バスターモーションの判定。
・「"shot"」:バスターが発射された状態。
・・ジャンプ、ジャンプ開始
ASのファイル:zero_buster.txt
if(_root.zero_action=="jump" or _root.zero_action=="jump_start"){
if(_root.velocity_zero_y<0){_parent.zero_AA.gotoAndStop("zero_AA_buster_jump_up")} //上昇中
else{_parent.zero_AA.gotoAndStop("zero_AA_buster_jump_down")} //下降中
}
・・ダッシュ、エアダッシュ
ASのファイル:zero_buster.txt
else if(_root.zero_action=="dash" or _root.zero_action=="air_dash"){_parent.zero_AA.gotoAndStop("zero_AA_buster_dash");_parent.zero_AA.zero_AA_buster_dash.gotoAndStop(_root.count_zero_dash)}
・・その他
記述を簡略化するため、その他の場合は、「アクションの状態」を利用して記述している。
ASのファイル:zero_buster.txt
else{_parent.zero_AA.gotoAndStop(["zero_AA_buster_"]+_root.zero_action)}
例えば、「_root.zero_action」が「"normal"」の場合は、以下の通りとなる。
ASのファイル:なし
else{_parent.zero_AA.gotoAndStop("zero_AA_buster_normal")}
この方法は、
セイバーモーションにおいても用いている。
・バスターの個数のカウント
ロックマン系のアクションにおいては、「画面内に同時に出現させることが可能なバスターの個数」に制限がある(大抵の場合は3個)。つまり、バスターの個数が最大値の場合は、バスターを発射することは不可能となる。
そのため、「バスターを発射するための処理」を行う前に、「バスターの個数をカウント」しておく必要がある。
ASのファイル:zero_buster.txt
_root.count_zero_buster=0 //バスターの個数のカウントをリセットしておく
for(i=1;i<=count_zero_buster_max;i++){
if(_root.zero_buster_identify[i-1]!="none"){_root.count_zero_buster++} //バスターの出現判定用の配列が埋められていた場合,バスターの個数のカウントを増加させる
}
・バスター発射の条件
・・概要
「
バスター発射の前提となる条件」に関する記述は、以下の通りとなる。
ASのファイル:zero_buster.txt
if(_root.count_zero_buster<count_zero_buster_max and _root.zero_saber=="none" and _root.zero_action!="damage" and _root.zero_action!="bind" and _root.event_pause==0){ //バスターの個数のカウントが最大値未満の場合のみ発射可能,セイバーモーション中・被ダメージ状態・拘束状態・イベント停止判定がある場合は不可能
︙
}
・「_root.count_zero_buster<count_zero_buster_max」:バスターの個数のカウントが最大値未満。「・バスターの個数のカウント」を参照。
・「_root.zero_saber=="none"」:セイバーモーションの判定がない(=セイバーモーション中ではない)。
・「_root.zero_action!="damage" and _root.zero_action!="bind"」:被ダメージ状態・拘束状態ではない。
・「_root.event_pause==0」:イベント停止判定がない。ただし、この条件は必須ではないと思われる。
上記の条件が全て満たされた場合に、
バスターの発射が可能となる。
ここでは、オートチャージ装着中ではない場合(「_root.zero_tip_head_auto_charge_buster==-1」)のみを解説する。オートチャージに関しては、
ヘッドチップの「・オートチャージ」を参照。
・・非チャージ判定
条件に関する記述は、以下の通りとなる。
ASのファイル:zero_buster.txt
if(keydown_new_buster==1 and _root.zero_charge_buster=="none"){ //非チャージ判定があり,バスターキーの入力がある場合
_root.zero_buster="shot";_root.count_zero_buster_time=0 //バスターモーションの判定,カウントをリセット
zero_buster_appearance="zero_buster_normal" //バスター(非チャージ)
︙
}
・「keydown_new_buster==1」:バスターキーの入力がある。
・「_root.zero_charge_buster=="none"」:非チャージ判定。
・「zero_buster_appearance="zero_buster_normal"」:「バスターの出現判定」に、「バスター(非チャージ)」を代入する。
・・セミチャージ判定
条件に関する記述は、以下の通りとなる。
ASのファイル:zero_buster.txt
else if(((_root.zero_tip_head_auto_charge_buster==-1 and keydown_buster==0) or (_root.zero_tip_head_auto_charge_buster==1 and keydown_new_buster==1)) and _root.zero_charge_buster=="semicharge"){ //セミチャージ判定があり,バスターキーの入力がなくなった場合(セミチャージ判定があり,オートチャージ装着中に,バスターキーの入力がある場合)
_root.zero_buster="shot";_root.count_zero_buster_time=0 //バスターモーションの判定,カウントをリセット
zero_buster_appearance="zero_buster_semicharge" //セミチャージバスター
︙
}
・「keydown_buster==0」:バスターキーの入力がない。
・「_root.zero_charge_buster=="semicharge"」:セミチャージ判定。
・「zero_buster_appearance="zero_buster_semicharge"」:「バスターの出現判定」に、「セミチャージバスター」を代入する。
・・フルチャージ判定
条件に関する記述は、以下の通りとなる。「・・セミ
チャージ判定」と同様の記述をしている。
ASのファイル:zero_buster.txt
else if(((_root.zero_tip_head_auto_charge_buster==-1 and keydown_buster==0) or (_root.zero_tip_head_auto_charge_buster==1 and keydown_new_buster==1)) and _root.zero_charge_buster=="fullcharge"){ //フルチャージ判定があり,バスターキーの入力がなくなった場合(フルチャージ判定があり,オートチャージ装着中に,バスターキーの入力がある場合)
_root.zero_buster="shot";_root.count_zero_buster_time=0 //バスターモーションの判定,カウントをリセット
zero_buster_appearance="zero_buster_fullcharge" //フルチャージバスター
︙
}
・「keydown_buster==0」:バスターキーの入力がない。
・「_root.zero_charge_buster=="fullcharge"」:フルチャージ判定。
・「zero_buster_appearance="zero_buster_fullcharge"」:「バスターの出現判定」に、「フルチャージバスター」を代入する。
・バスター発射
・・概要
ASのファイル:zero_buster.txt
if(zero_buster_appearance=="zero_buster_normal" or zero_buster_appearance=="zero_buster_semicharge" or zero_buster_appearance=="zero_buster_fullcharge"){ //バスター(非チャージ),セミチャージバスター,フルチャージバスター
︙
}
・・バスターの出現
ASのファイル:zero_buster_appearance.txt
for(i=1;i<=count_zero_buster_max;i++){ //バスターの出現用のループ
if(_root.zero_buster_identify[i-1]=="none"){ //配列に空きがある場合
_root.board.attachMovie(zero_buster_appearance,["zero_buster_"+i],_root.depth_zero_buster+i) //バスターのMCを出現させる
zero_buster=_root.board["zero_buster_"+i] //参照先を変数に保存
zero_buster.zero_buster_hitrect.number_zero_buster=i //番号を伝達
zero_buster.zero_buster_hitrect.name_zero_buster=zero_buster_appearance //バスターの種類を伝達
_root.zero_buster_identify[i-1]=zero_buster_appearance //該当する配列を埋める
break //ループを離脱
}
}
ここで、
出現させたバスターのhitrectに「バスターの出現判定(バスターの種類)」を伝達している。
バスターの「・loadの処理」の「・・バスターの種類」を参照。
「・
バスターの方向、
バスターの初期位置」において解説した通り、「
バスターの方向」「
バスターの初期位置」に関する情報は、伝達する必要がない。
・・エレメントアタッチメント
・・バスターの出現判定をリセット
バスターの出現に関する処理が終了したので、バスターの出現判定をリセットする。
ASのファイル:zero_buster.txt
zero_buster_appearance="none" //バスターの出現判定をリセット
・バスターモーションの時間
・・バスターモーションの時間のカウント
「・
バスター発射の条件」において、「_root.zero_buster="shot"」「_root.count_zero_buster_time=0」となることで、
バスターモーションが開始される。
処理の順序は、「カウントを増加させる」→「カウントが最大値以上の場合、
バスターモーションの判定・カウントをリセット」、となる。
ASのファイル:zero_buster.txt
if(_root.zero_buster=="shot"){ //バスターモーションの判定がある場合
_root.count_zero_buster_time++ //バスターモーションの時間のカウントを増加させる
︙
if(_root.count_zero_buster_time>=_root.count_zero_buster_time_max){_root.zero_buster="none";_root.count_zero_buster_time=0} //カウントが最大値以上の場合,バスターモーションの判定・カウントをリセット
}
・・各種の値・判定のリセット
この記述は、不要である可能性が高いが、念の為に記述している。
ASのファイル:zero_buster.txt
if(_root.zero_buster=="none"){ //バスターモーションの判定がない場合,各種の値・判定をリセット
_root.count_zero_buster_time=0
_root.zero_element_attachment_buster="none"
}
・バスターのチャージ判定
最終更新:2020年12月19日 09:39