・コンセプト
・・概要
氷の巨体系ボスは、概ね「弱い」との烙印を押されている(イエティンガーのような例外もいるが)。その評価を払拭する目的で制作したボス。
・・アドリブ性の要求
近接しすぎている場合はローリングキックなどを警戒する必要があり、距離を離しすぎると、強制的に睡眠に移行するので、「回避・反撃をしながらも、中距離をキープする」 といった立ち回りを要求される。
氷柱攻撃はランダム性が高い。氷柱の配置を瞬時に把握し、回避・反撃をする必要がある。
・・バランス調整
前半は極端に弱いが、ライフがある程度減少するとEXにより超回復し、その後の攻撃(+回復)が強化される ように調整している。
このボスは、
特定の条件が満たされた場合、ノックバックする 。この措置により、
追い詰められて詰む危険性を低減している 。「・ボスと攻撃との接触判定がある場合の処理」の「・・ノックバック」を参照。
ただし、その影響で、
セイバー コンボがフルヒットしにくくなる。…が、ローリングキックなどの攻撃を回避しやすくもなる。
…といったように、メリット・デメリットが混在している。
・loadの処理
・・ゼロの氷の床との接触判定
ゼロがスパイク・アイスを装着中ではない場合、ゼロの
氷の床 との
接触判定 を付加する。この処理により、ボス戦開始直後のゼロの
ダッシュ ジャンプ が不可能になる。
ASのファイル:boss_zonu_load.txt
if ( _root .zero_tip_foot_spike_ice ==-1 ) { _root .zero_hit_ice_floor =1 } //ゼロの氷の床との接触判定を付加(ボス戦開始直後のゼロのダッシュジャンプが不可能になる)
・減速
・・概要
床との接触判定がある場合は、減速の処理を行う 。そして、速度が一定の値以下の場合は、速度を0にする。
ASのファイル:boss_zonu.txt
if ( hit_floor! =0 ) {
if ( _root .velocity_boss_x > 0 ) { _root .velocity_boss_x -=decelaration_boss_knockback} //速度が0ではない場合,減速
else if ( _root .velocity_boss_x < 0 ) { _root .velocity_boss_x +=decelaration_boss_knockback}
}
if ( Math .abs ( _root .velocity_boss_x ) < =decelaration_boss_knockback) { _root .velocity_boss_x =0 } //速度が一定の値以下の場合,速度を0にする
・通常状態
・・乱数でアクションを選択
EXの後は、「ブレスに移行」が追加される。
遠距離の場合は、「睡眠」(EXの後の場合は「冷凍睡眠」)に移行する。
・・睡眠への移行のカウント
「睡眠への移行のカウント」を増加させる。
ASのファイル:boss_zonu_action_normal.txt
count_boss_sleep+=10 //睡眠への移行のカウントを増加させる
・・睡眠への移行
「睡眠への移行のカウント」が、最大値以上の場合、カウントをリセットし、「睡眠」(EXの後の場合は「冷凍睡眠」)に移行する。
ただし、EX冷凍睡眠への移行の条件が満たされている場合は、そちらが優先される。
ASのファイル:boss_zonu_action_normal.txt
else if ( count_boss_sleep> =count_boss_sleep_max) { //睡眠への移行のカウントが最大値以上の場合
count_boss_sleep=0 //睡眠への移行のカウントをリセット
if ( count_boss_ex_cold_sleep==0 ) { _root .boss_action ="sleep" } //睡眠に移行
else { _root .boss_action ="cold_sleep" } //冷凍睡眠に移行
}
・・EX冷凍睡眠への移行
ライフが1/3以下の場合は、EX冷凍睡眠に移行する 。
同時に、「待機時間の最大値」「突進の速度」を変更する。この処理により、ボスが強化される。
ASのファイル:boss_zonu_action_normal.txt
if ( count_boss_ex_cold_sleep==0 and _root .boss_life < =_root .boss_initial_life * 1 / 3 ) { //ライフが1/3以下の場合
count_boss_sleep=0 //睡眠への移行のカウントをリセット
_root .boss_action ="ex_cold_sleep" ;count_boss_ex_cold_sleep++ //EX冷凍睡眠に移行
count_boss_wait_time_max=count_boss_wait_time_max_after_ex //待機時間の最大値を変更する
velocity_boss_rush=velocity_boss_rush_after_ex //突進の速度を変更する
}
・睡眠
・・概要
ライフを回復する。
特定の条件が満たされた場合、丸焼きに移行する。「・ボスと攻撃との接触判定がある場合の処理」の「・・睡眠の場合」を参照。
・・ライフ回復判定
カウントが最大値の場合、「ライフ回復判定」を付加する。
ASのファイル:boss_zonu_action_sleep.txt
boss_sleep_recovery="sleep" //ライフ回復判定
・・ライフ回復
「ライフ回復判定」がある場合は、ライフ回復の処理を行う 。回復量は、「ライフ回復判定」によって異なる。
ASのファイル:boss_zonu.txt
if ( boss_sleep_recovery! ="none" ) { //ライフ回復判定がある場合
if ( boss_sleep_recovery=="sleep" ) { _root .enemy_identify [ number_enemy-1 ] +=4 } //ライフ回復
︙
if ( _root .enemy_identify [ number_enemy-1 ] > _root .boss_initial_life ) { _root .enemy_identify [ number_enemy-1 ] =_root .boss_initial_life } //最大値より大きい場合,補正する
︙
boss_sleep_recovery="none" //判定をリセット
}
・冷凍睡眠
・・概要
「・睡眠」とほぼ同様の処理をしているが、クリスタル(小)を出現させている点が異なる。また、ライフ回復量も異なる。
「・ボスと攻撃との接触判定がある場合の処理」の「・・冷凍睡眠・EX冷凍睡眠の場合」も参照。
・・クリスタル(小)の出現
クリスタル(小)を出現させる際に、出現させた敵の番号を保存する。この値は、「・・睡眠への移行」で用いる。
ASのファイル:boss_zonu_action_cold_sleep.txt
number_enemy_ice_crystal_small=i //出現させた敵の番号を保存
・・睡眠への移行
出現させたクリスタル(小)が破壊された場合、睡眠に移行する 。
ASのファイル:boss_zonu_action_cold_sleep.txt
if ( _root .enemy_identify [ number_enemy_ice_crystal_small-1 ] =="none" ) { boss_ice_crystal_small_appearance=0 ;count_boss_time=0 ;_root .boss_action ="sleep" } //出現させたクリスタル(小)が破壊された場合,出現判定・カウントをリセット,睡眠に移行
・ジャンプ(1)
・・概要
ゼロの方向に向かってジャンプする。
EXの後の場合は、床との接触判定がある場合に、敵(ニードルアイス)を出現させる。
ボスに近接し、タイミング良くジャンプすれば回避できる。ダブルジャンプを装着すれば回避しやすくなる。
↓ジャンプ(1)。
・ジャンプ(2)
・・概要
「・ジャンプ(1)」とほぼ同様の処理を行っている。
↓ジャンプ(2)。
・ローリングキック
・・概要
この攻撃は、前動作なしで発生するようにしている。故に、近接しすぎていると回避不能になる。
回転するのはボスのAAのみであり、ボスの
hitrect は変化しない(手抜き)。
↓ローリングキック。
・・ローリングキック
ローリングキックとゼロとの接触判定がある場合、「ローリングキックの吹き飛ばし用のMC」を出現させる 。
ASのファイル:boss_zonu_rolling_kick.txt
if ( boss_zonu_rolling_kick_blow_appearance==0 and hit_zero! =0 ) { //ゼロとの接触判定がある場合
boss_zonu_rolling_kick_blow_appearance=1 //ローリングキックの吹き飛ばし用のMCの出現判定
enemy_appearance_name="boss_zonu_rolling_kick_blow"
#include "zero_AS/enemy/enemy_appearance.txt"
︙
}
・・吹き飛ばし用のMC
・・・概要
「吹き飛ばし」に関しては、「吹き飛ばし用のMC」を敵として出現させる ことで対処している。
↓「吹き飛ばし用のMC」。hitrectの大きさはゼロに合わせている。
・・・ゼロの位置調整
「吹き飛ばし用のMC」の位置に、ゼロの位置を強制的に位置調整する 。
この処理は、「吹き飛ばし用のMC」の移動と、
地形との接触判定 による位置調整の処理の後に行う。
ASのファイル:boss_zonu_rolling_kick_blow.txt
_root .board .zero ._x =_parent ._x ;_root .board .zero ._y =_parent ._y //ゼロの位置調整
・・・消滅
吹き飛ばしの時間の最大値の場合、消滅する。
同時に、ゼロに速度を伝達している 。この処理を行わない場合は、ゼロの動作が不自然になる。
ASのファイル:boss_zonu_rolling_kick_blow.txt
if ( count_enemy_time_blow==count_enemy_time_blow_max) { //吹き飛ばしの時間の最大値の場合,消滅
_root .velocity_zero_y =velocity_enemy_y //ゼロに速度を伝達
_root .enemy_identify [ number_enemy-1 ] ="none" ;_parent .removeMovieClip ( ) //MCを削除
}
・・・ボディチップの影響
アブソーバ装着中の場合は、吹き飛ばしの速度を減少させる 。ライト装着中の場合は、吹き飛ばしの速度を増加させる (いずれも原作準拠)。
なお、loadの処理において速度を決定しているため、吹き飛ばしの途中で装着しても速度は変化しない。
↓アブソーバ装着中の場合。
ASのファイル:boss_zonu_rolling_kick_blow.txt
if ( _root .zero_tip_body_absorber ==1 ) { velocity_enemy_blow_x* =0.5 ;velocity_enemy_blow_y* =0.5 } //アブソーバ装着中の場合,速度を減少させる
else if ( _root .zero_tip_body_light ==1 ) { velocity_enemy_blow_x+=1 * enemy_direction} //ライト装着中の場合,速度を増加させる
・突進
・・概要
ゼロの方向に向かって突進する。突進の前にはジャンプを行う。
「突進判定」により、処理の内容が変化する。
↓突進。
・・突進判定がない場合
床との接触判定がある場合は、突進の初速度を付加し、「突進判定」を付加する。
同時に、各種の判定・カウントをリセットしておく。
・・突進判定がある場合
氷柱攻撃の時間のカウントが最大値の場合は、氷柱を出現させ、カウントをリセットする。
ゼロとの接触判定がある場合は、「突進の吹き飛ばし用のMC」を出現させる。
速度が0となった場合は、各種の判定・カウントをリセットし、
通常状態 に移行する。
・氷柱攻撃
・・概要
ゼロの周囲に、氷柱を配置する。
「氷柱の出現用のMC」を出現させ、そのMCで処理を行っている。
↓氷柱攻撃。「氷柱の出現用のMC」(灰色の矩形)は、実際のゲーム画面では、非表示にしている。
・・氷柱の出現用のMCの出現
「氷柱の出現用のMC」の出現の際に、「EX冷凍睡眠の回数」「氷柱攻撃の時間の最大値」を伝達する。
ASのファイル:boss_zonu_action_icicle.txt
enemy.enemy_hitrect .count_boss_ex_cold_sleep =count_boss_ex_cold_sleep //EX冷凍睡眠の回数を伝達
enemy.enemy_hitrect .count_boss_icicle_time_max =count_boss_icicle_time_max //氷柱攻撃の時間の最大値を伝達
・・氷柱の出現用のMC
・・・各種地形との接触判定
「氷柱の出現用のMC」は、氷柱を出現させる際に、壁との接触判定を取得し、位置調整を行う。
・・・氷柱の出現判定
ランダムで「出現させる氷柱の番号」を取得し、「氷柱の出現判定用の配列」を埋めることで出現判定を付加する。
この処理を、「出現させる氷柱の個数の最大値」まで行う。「出現させる氷柱の個数の最大値」は、EXの後に変化する。
ASのファイル:boss_zonu_icicle_appearance.txt
while ( number_icicle! =number_icicle_max) {
enemy_random=Math .floor ( Math .random ( ) * 6 ) +1 //ランダムで出現させる氷柱の番号を取得
if ( icicle_identify[ enemy_random-1 ] ==0 ) { //配列に空きがある場合
icicle_identify[ enemy_random-1 ] =1 //配列を埋める
number_icicle++ //カウントを増加させる
}
}
・・・乱数で配置のパターンを選択
乱数で配置のパターン(「左右+上」「上」「半円」)を選択する。
・ブレス
・・概要
↓ブレス。ダッシュでも回避できる。
・・ブレス
ゼロとの接触判定がある場合は、「クリスタル(ゼロ拘束)」を出現させる。
・・クリスタル(ゼロ拘束)
・・・loadの処理
ゼロを拘束状態にする。
ASのファイル:boss_zonu_ice_crystal_zero_bind.txt
_root .zero_action ="bind" //ゼロを拘束状態にする
・・・キー入力のカウント
キー入力 (スタートキー・セレクトキー以外)がある場合、キー入力のカウントを増加させる。
ASのファイル:boss_zonu_ice_crystal_zero_bind.txt
for ( i=1 ;i< =8 ;i++) {
if ( _root [ "keydown_new_" +_root .key_name_list [ i-1 ] ] ==1 ) { count_keydown_new++;break } //キー入力がある場合,キー入力のカウントを増加させる
}
・・・消滅判定
カウントが最大値の場合は、ゼロをジャンプにする 。また、クリスタル(ゼロ拘束)の破壊判定を付加する。
ゼロが
被ダメージ状態 の場合、または、破壊された場合は、クリスタル(ゼロ拘束)の破壊判定を付加する。
ASのファイル:boss_zonu_ice_crystal_zero_bind.txt
if ( count_keydown_new==count_keydown_new_max) { enemy_break="other" ;_root .zero_action ="jump" } //カウントが最大値の場合,ゼロをジャンプにする,破壊判定を付加
else if ( _root .zero_action =="damage" or _root .zero_life ==0 ) { enemy_break="other" } //ゼロが被ダメージ状態の場合,破壊された場合,破壊判定を付加
・EX冷凍睡眠
・・概要
「・冷凍睡眠」とほぼ全く同様の処理を行っている。
・丸焼き
・・概要
「・ボスと攻撃との接触判定がある場合の処理」の「・・睡眠の場合」を参照。
・ボスと攻撃との接触判定がある場合の処理
・・ノックバック
・・・概要
このボスは、特定の条件が満たされた場合、ノックバックする 。
(処理の構築が更に面倒なことになるため) 「判定が持続する攻撃」に関しては、「セイバー本体」以外ではノックバックしないようにしている。
↓ノックバック。ノックバックの速度は、ダメージに比例する。
↓ゼロの攻撃により、ボスの突進を減速(+反転)させることができる。
前提となる条件は、以下の通りとなる。
・ボスのアクションの状態が、「通常状態」「睡眠」「ブレス」「氷柱攻撃」「突進」「丸焼き」のいずれか。
・ボスと床との接触判定がある。
・・・ノックバックの条件(セイバー)
条件は、以下の通りとなる。
・連鎖値が「ノックバック用の連鎖値(セイバー)」と等しくない。これは、同一の連鎖値のセイバーにより、速度が付加され続けることを回避するための条件となる。
・連鎖値が特定の値よりも低い。これは、「セイバー本体」による攻撃でのみノックバックさせるための条件となる。
「・・・ノックバック用の連鎖値(セイバー)」も参照。
↓上記の条件を無効化した場合(1)。同一の連鎖値のセイバーにより、速度が付加され続ける。
↓上記の条件を無効化した場合(2)。「セイバー本体以外」の攻撃により、速度が付加され続ける。
ASのファイル:boss_zonu_hit_attack.txt
if ( enemy_hit_attack_type=="saber" and enemy_chain! =enemy_chain_knockback_saber and enemy_chain< 400 ) { //ノックバックの条件(セイバー)
︙
}
・・・ノックバックの条件(バスター)
条件は、以下の通りとなる。
・連鎖値が特定の値よりも低い。これは、「判定が持続しないバスター」による攻撃でのみノックバックさせるための条件となる。
ASのファイル:boss_zonu_hit_attack.txt
else if ( enemy_hit_attack_type=="buster" and enemy_chain< 200 ) { //ノックバックの条件(バスター)
︙
}
・・・ノックバック用の連鎖値(セイバー)
セイバーとの接触判定がある場合は、ノックバック用の連鎖値(セイバー)を保存する。
ASのファイル:boss_zonu_hit_attack.txt
if ( enemy_hit_attack_type=="saber" ) { enemy_chain_knockback_saber=enemy_chain} //ノックバック用の連鎖値(セイバー)を保存
ゼロがセイバーモーション中ではない場合は、ノックバック用の連鎖値(セイバー)をリセットする。
↓ノックバック用の連鎖値(セイバー)をリセットすることにより、通常状態のセイバー(一段目)により連続でノックバックする。
ASのファイル:boss_zonu_hit_attack.txt
if ( _root .zero_saber =="none" ) { enemy_chain_knockback_saber=0 } //ノックバック用の連鎖値(セイバー)をリセット
・・睡眠の場合
睡眠の場合は、炎属性攻撃の場合、丸焼きに移行する 。それ以外の場合は、通常状態に移行する。
この処理は、連鎖値とは無関係に行われる 。
↓丸焼きへの移行。ダメージチャンスとなる。
ASのファイル:boss_zonu_hit_attack.txt
if ( _root .boss_action =="sleep" ) { //睡眠の場合
count_boss_time=0 //カウントをリセット
if ( enemy_hit_attack_element=="fire" ) { _root .velocity_boss_x =0 ;_root .boss_action ="barbecue" } //炎属性攻撃の場合,丸焼きに移行
else { _root .boss_action ="normal" } //通常状態に移行
}
・・冷凍睡眠・EX冷凍睡眠の場合
冷凍睡眠・EX冷凍睡眠の場合は、処理を行わない。
↓ベクトルレーザー(チャージ)の例。ボスにはダメージが入らない。
ASのファイル:boss_zonu_hit_attack.txt
if ( _root .boss_action =="cold_sleep" or _root .boss_action =="ex_cold_sleep" ) { } //冷凍睡眠・EX冷凍睡眠の場合,処理を行わない
・・冷凍睡眠・EX冷凍睡眠以外の場合
冷凍睡眠・EX冷凍睡眠以外の場合は、(通常通り)ダメージ関連の処理を行う。
「睡眠への移行のカウント」に、ダメージの絶対値を加算する。
ASのファイル:boss_zonu_hit_attack.txt
count_boss_sleep+=Math .abs ( enemy_hit_attack) //睡眠への移行のカウントを増加させる
最終更新:2020年12月19日 08:57