・コンセプト
・・概要
デビル系のボスらしく、「強い」というよりも「卑怯」。
・・アドリブ性の要求
左右の壁が移動するため、回避と反撃にアドリブ性が要求される 。また、ボスの落下する位置にランダム性がある。
各種レーザーのランダム性が高い。
・・バランス調整
ボスが落下した時が、攻撃のチャンスとなる。ただし、「シエル出現」「メルトダウン」により、一筋縄では行かないように調整している 。
なお、「シエルによるダメージ反射」や「メルトダウン」は、意図的にダメージを大きくしている 。それは、「攻撃に躍起になりすぎた、プレイヤーの自己責任」 となるからである。
「シエル出現」に関しては、規則性がある 。ランダムに出現させると、極めて理不尽になるからである 。また、この規則性を利用して、出現を予測し、タイミング良く後ろに回り込むことで、攻撃のチャンスが生じる 。
・移動
ガード用のMCが設定されていない場合は、通常の移動の処理を行う。
ガード用のMCが設定されている場合は、ガード用のMCに配置している「position_boss」のMCの位置に移動する。
↓ガード用のMCの「position_boss」のMC(水色の長方形で囲まれた灰色の矩形)。
ASのファイル:boss_black_devil.txt
if ( enemy_guard_MC=="none" ) { _parent ._x +=_root .velocity_boss_x ;_parent ._y +=_root .velocity_boss_y } //ガード用のMCがない場合の移動(地形による位置調整の前)
else { _parent ._x =enemy_guard_MC._x +enemy_guard_MC.position_boss ._x * enemy_direction;_parent ._y =enemy_guard_MC._y +enemy_guard_MC.position_boss ._y } //ガード用のMCがある場合の移動
・通常状態
・・概要
他のボスと同様に、乱数でアクションを選択する。特定の条件が満たされた場合は、EXなどを行う。
優先順位は、EX>シエル出現>ナンバーボールとなる。
・・シエル出現への移行
乱数でアクションを選択した後に、「シエル出現用のカウント」を増加させる。シエル出現用のカウントが一定の値以上の場合は、シエル出現に移行する。
・・ナンバーボールへの移行
「レーザーのカウント(ナンバーボール用)」が一定の値以上の場合、ナンバーボールに移行する。
「レーザーのカウント(ナンバーボール用)」に関しては、「・落下」も参照。
・シエル出現
・・概要
ガード用のMC(シエル)を出現させる。ガード用のMC(シエル)は「チャージエネルギーの吸収」「ダメージ反射」を行う。
・・チャージエネルギーの吸収
ゼロのチャージエネルギーを吸収して、ボスのライフを回復させる 。
↓チャージエネルギーの吸収。
ASのファイル:boss_black_devil_guard_ciel.txt
if ( _root .zero_charge_saber =="semicharge" ) { //セイバーのセミチャージ判定がある場合
︙
_root .enemy_identify [ _root .boss_number -1 ] +=8 //ボスのライフ回復
if ( _root .enemy_identify [ _root .boss_number -1 ] > _root .boss_initial_life ) { _root .enemy_identify [ _root .boss_number -1 ] =_root .boss_initial_life } //最大値より大きい場合,補正する
_root .zero_charge_saber ="none" ;_root .count_zero_charge_saber =0 //チャージ判定をリセット
}
・・ダメージ反射
前方からの攻撃を反射(倍返し)する。
↓ダメージ反射。
ASのファイル:boss_black_devil_guard_ciel.txt
if ( enemy_vanish==0 and ( ( enemy_direction==1 and enemy_hit_attack< 0 ) or ( enemy_direction==-1 and enemy_hit_attack> 0 ) ) ) { //前方からの攻撃の場合
enemy_effect=enemy_hit_attack_type //ダメージエフェクトの判定を付加(ゼロに)
︙
_root .zero_life -=Math .abs ( enemy_hit_attack) * 2 //ゼロのライフを減少させる
if ( _root .zero_life < 0 ) { _root .zero_life =0 } //ライフ残量が0より少ない場合,0に補正
_root .result_damage +=Math .abs ( enemy_hit_attack) * 2 //リザルト用のダメージに加算
}
・上昇
・・概要
画面外に向かって上昇する。画面外に出た場合は、落下に移行する。
ナンバーボールに移行する場合は、途中で停止する。
・落下
・・乱数で落下位置を選択
乱数で落下位置を選択する。
ASのファイル:boss_black_devil_action_falling.txt
enemy_random_x=Math .floor ( Math .random ( ) * 146 ) +55 //乱数で落下位置を選択
_parent ._x =enemy_random_x
・・ガード用のMCの出現
ガード用のMCを出現させる。各種レーザーの場合と、EX回転バウンドの場合で、ガード用のMCが異なる。
各種レーザーの場合は、「レーザーのカウント(ナンバーボール用)」を増加させる。
ASのファイル:boss_black_devil_action_falling.txt
if ( boss_action_next=="laser" or boss_action_next=="reflection_laser" or boss_action_next=="spin_laser" ) { //各種レーザーの場合
count_boss_laser_number_ball++ //レーザーのカウント(ナンバーボール用)を増加させる
enemy_appearance_name="boss_black_devil_guard_normal"
}
else if ( boss_action_next=="ex_rolling_bound" ) { //EX回転バウンドの場合
enemy_appearance_name="boss_black_devil_guard_circle"
}
#include "zero_AS/enemy/enemy_appearance.txt"
enemy_guard_MC=enemy //参照先を変数に保存
︙
・・次のアクションへの移行
ガード用のMCと床との
接触判定 がある場合は、次のアクションに移行する。
ASのファイル:boss_black_devil_action_falling.txt
else if ( enemy_guard_MC.enemy_hitrect .hit_floor ! =0 ) { //ガード用のMCと床との接触判定がある場合
count_boss_time=0 //カウントをリセット
_root .boss_action =boss_action_next //次のアクションに移行
}
・レーザー
・・概要
レーザーを発射する。
レーザーの方向によって、回避の方法が変化する。基本的に、「上」は
ダッシュ 、「下」は
ジャンプ で回避できる。「中」はどちらでも回避できるが、タイミングがややシビアになる(どちらかと言えば、ジャンプでの回避が無難)。
↓レーザー。
・・レーザー出現用のエフェクトの出現
レーザー出現用のエフェクトを出現させる。同時に、レーザーの発射回数を増加させる。
・・レーザー発射回数の最大値に関する処理
カウントが最大値の場合は、「レーザー発射回数の最大値」に関する処理を行う。
「レーザー発射回数の最大値」は、ボスのライフによって変化する 。
ASのファイル:boss_black_devil_action_laser.txt
else if ( count_boss_time==count_boss_laser_time_max) { //カウントが最大値の場合
count_boss_time=0 //カウントをリセット
//レーザーの発射回数の最大値に関する処理
if ( _root .boss_life > =_root .boss_initial_life * 2 / 3 ) { count_boss_laser_max=2 }
else if ( _root .boss_life > =_root .boss_initial_life * 1 / 3 ) { count_boss_laser_max=3 }
else { count_boss_laser_max=4 }
︙
}
・・乱数でレーザー発射を継続
乱数でレーザー発射を継続する。
この処理により、プレイヤーが、「ボスの攻撃が終了するタイミング」を予測し難いようにしている。
・・通常状態への移行
レーザー発射を継続しない場合は、敵(ガード用MC)の消滅判定を付加し、各種の値をリセットし、
通常状態 に移行する。
・・レーザー出現用のエフェクト
乱数でレーザーの発射方向を選択する。
エフェクトが透明化した場合は、レーザーを出現させる。
・・レーザー
レーザーの発射方向が「中」の場合は、ゼロの位置に向かって発射される。
「上」の場合は、僅かに上の位置に、「下」の場合は、僅かに下の位置に向かって発射される。
・反射レーザー
・・概要
「・レーザー」とほぼ同様の処理をしている。
壁・床との接触判定がある場合に反射するため、それを考慮した回避をする必要がある。「上」はダッシュ→ジャンプ、「下」はジャンプ(→
壁蹴り )で回避できる。「中」はどちらでも回避できるが、タイミングがややシビアになる(やはり、ジャンプでの回避が無難)。
↓反射レーザー。
・回転レーザー
・・概要
「・レーザー」とほぼ同様の処理をしている。
拡大しつつ一回転するレーザーを出現させる。ボスが右向きの場合、「右」は、ボスにダッシュなどで接近し、「左」は、ジャンプで回避する。
一応、「レーザーの回転方向を見てからでも回避できる」ように設定しているつもりだが、慣れないと回避はシビアかもしれない。
↓回転レーザー。
ちなみに、この攻撃は、ベクター画像の性質(スケール変化、回転などが容易)をフル活用している。ドット等で作成する場合は、相応の労力を要すると思われる。
・・回転レーザー
・・・MC
↓回転レーザーのMC。
・・・回転終了角度
回転終了角度の計算を行う。
回転終了角度は、「ボスが向いている方向の側の、壁と床との接点」と設定している。
壁・床の位置を取得する。
↓壁・床の配置。
ASのファイル:boss_black_devil_spin_laser.txt
wall_right_x=_root .board .wall_right_1 ._x
wall_left_x=_root .board .wall_left_1 ._x
floor_y=_root .board .floor_1 ._y
ボスと、「壁と床との接点」との角度を算出する。
ボスが右向きの場合の例を示す。
ASのファイル:boss_black_devil_spin_laser.txt
if ( enemy_direction==1 ) { //右向きの場合
radian_enemy_end=Math .atan2 ( floor_y-_parent ._y ,wall_right_x-_parent ._x ) //回転終了角度
rotation_enemy_end=radian_enemy_end* 180 / Math .PI
}
︙
・・・回転開始角度
回転の方向が「右」の場合は、回転開始角度は、回転終了角度から「-360」の値となる。
回転の加速度は正の値となる。
ASのファイル:boss_black_devil_spin_laser.txt
if ( enemy_laser_rotation=="right" ) { //回転の方向が右の場合
rotation_enemy_start=rotation_enemy_end-360 //回転開始角度
acceleration_rotation_enemy=0.3 //回転の加速度
}
︙
・・・スケール変化、回転
回転速度に「回転の加速度」を加算する。そして、レーザーを拡大しつつ、回転させる。
ASのファイル:boss_black_devil_spin_laser.txt
velocity_rotation_enemy+=acceleration_rotation_enemy //回転速度を増加させる
if ( enemy_vanish==0 ) {
if ( _parent ._xscale< =80 ) { _parent ._xscale +=2 } //スケール変化
rotation_enemy+=velocity_rotation_enemy //回転
}
︙
・・・消滅判定
回転終了角度となった場合(つまり、一回転した場合)、消滅判定を付加する。
ASのファイル:boss_black_devil_spin_laser.txt
if ( ( enemy_laser_rotation=="right" and rotation_enemy> rotation_enemy_end) or ( enemy_laser_rotation=="left" and rotation_enemy< rotation_enemy_end) ) { rotation_enemy=rotation_enemy_end;enemy_vanish=1 } //回転終了角度となった場合,消滅判定
・ナンバーボール
・・概要
ボスとゼロとで、ナンバーボールの打ち返し合戦をする。
ボスが中央付近にいる場合には、「⑧」の弾を打ち返すことがシビアになる。「⑧」の場合は、氷柱&クリスタル(チャージ)を使用するのも有効。
↓ナンバーボール。
・・ナンバーボールの出現
ナンバーボールを出現させる際に、ナンバーボールのMCの参照先を変数に保存する。
ASのファイル:boss_black_devil_action_number_ball.txt
enemy_number_ball_MC=enemy //参照先を変数に保存
・・ナンバーボールが近接した場合
・・・概要
「ナンバーボールの接触判定の対象」がボスの場合に、ナンバーボールが近接した場合は、特定の条件が満たされた場合に、ガード用のMC(腕)を出現させる。
前提となる条件は、以下の通りとなる。
ASのファイル:boss_black_devil_action_number_ball.txt
if ( enemy_number_ball_MC.enemy_hitrect .enemy_hit_target =="boss" ) { //ナンバーボールの接触判定の対象がボスの場合
if ( Math .abs ( _parent ._x-enemy_number_ball_MC._x ) < =60 and Math .abs ( _parent ._y-enemy_number_ball_MC._y ) < 60 ) { //ナンバーボールが近接した場合
︙
}
}
・・・反射可能な番号の最大値
「反射可能な番号の最大値」を判定する 。ボスのライフの減少に応じて、「反射可能な番号の最大値」が大きくなる。
ASのファイル:boss_black_devil_action_number_ball.txt
if ( _root .boss_life > _root .boss_initial_life * 2 / 3 ) { number_number_ball_reflection_max=2 } //反射可能な番号の最大値の判定
else if ( _root .boss_life > _root .boss_initial_life / 3 ) { number_number_ball_reflection_max=4 }
else { number_number_ball_reflection_max=6 }
・・・ガード用のMC(腕)の出現
「ナンバーボールの番号」が「反射可能な番号の最大値」以下の場合は、ガード用のMC(腕)を出現させる。
ASのファイル:boss_black_devil_action_number_ball.txt
if ( enemy_number_ball_MC.enemy_hitrect .number_number_ball < =number_number_ball_reflection_max) { //ナンバーボールの番号が反射可能な番号の最大値以下の場合
enemy_appearance_name="boss_black_devil_guard_arm"
#include "zero_AS/enemy/enemy_appearance.txt"
︙
enemy.enemy_hitrect .enemy_number_ball_MC =enemy_number_ball_MC //ナンバーボールのMCの変数を伝達
}
・・ナンバーボールとボスとの接触判定がある場合
ナンバーボールとボスとの接触判定がある場合は、ダウンに移行する 。また、ナンバーボールのMCの参照先の変数をリセットする。
ASのファイル:boss_black_devil_action_number_ball.txt
if ( enemy_number_ball_MC.enemy_hitrect .enemy_explosion ==1 and enemy_number_ball_MC.enemy_hitrect .enemy_hit_target =="boss" ) { //ナンバーボールとボスとの接触判定がある場合
count_boss_time=0 //カウントをリセット
enemy_number_ball_MC="none" //ナンバーボールのMCの参照先の変数をリセット
_root .boss_action ="down" //ダウンに移行
}
・・ナンバーボールとゼロ・地形との接触判定がある場合
ASのファイル:boss_black_devil_action_number_ball.txt
else if ( ( enemy_number_ball_MC.enemy_hitrect .enemy_explosion ==1 and enemy_number_ball_MC.enemy_hitrect .enemy_hit_target =="zero" ) or enemy_number_ball_MC.enemy_hitrect .enemy_explosion_landform ==1 ) { //ナンバーボールとゼロ・地形との接触判定がある場合
︙
}
・・ガード用のMC(腕)
ガード用のMC(腕)は、ナンバーボールとの接触判定がある場合、接触判定をナンバーボールに伝達する 。
ASのファイル:boss_black_devil_guard_arm.txt
︙
if ( hittest ==1 ) {
enemy_vanish=1 //消滅判定
enemy_number_ball_MC.enemy_hitrect .hit_enemy_guard_arm =1 //接触判定をナンバーボールに伝達
}
・・ナンバーボール
・・・ナンバーボールの番号
「ナンバーボールの番号」は、ゼロやボスがナンバーボールを打ち返す毎に増加する 。この値により、スケールの最大値・速度の最大値・加速度・ダメージなどが変化する 。
・・・接触判定の対象
「接触判定の対象」が、「ゼロ」と「ボス」とで、処理を変える。
・・・接触判定の対象がゼロの場合
「接触判定の対象」がゼロの場合、ゼロとの接触判定がある場合は、爆発判定を付加する 。
一定の値以上のダメージの攻撃との接触判定がある場合は、「接触判定の対象」をボスに変更し、「ナンバーボールの番号」を増加させ、ボスとの角度を算出する 。
ASのファイル:boss_black_devil_number_ball.txt
if ( enemy_hit_target=="zero" ) { //接触判定の対象がゼロの場合
hit_enemy_guard_arm=0 //ガード用のMCとの接触判定をリセット
if ( hit_zero! =0 ) { enemy_explosion=1 } //ゼロとの接触判定がある場合,爆発判定
else {
//攻撃との接触判定があり,連鎖値が大きい場合
if ( enemy_hit_attack_type! ="none" and enemy_chain> enemy_chain_old) {
if ( Math .abs ( enemy_hit_attack) > =8 ) { //一定の値以上のダメージの攻撃の場合
enemy_hit_target="boss" //接触判定の対象をボスに変更
number_number_ball++ //ナンバーボールの番号を増加させる
velocity_enemy=0 //速度をリセット
radian_enemy=Math .atan2 ( _root .boss_y -_parent ._y ,_root .boss_x -_parent ._x ) //ボスとの角度を算出
}
︙
}
}
}
・・・接触判定の対象がボスの場合
「接触判定の対象」がボスの場合、ガード用のMCとの接触判定がある場合は、「接触判定の対象」をゼロに変更し、「ナンバーボールの番号」を増加させ、ゼロとの角度を算出する 。
ボスとの接触判定がある場合は、爆発判定を付加し、「ボスとバスターとの接触判定」「ボスの連鎖値」の処理を行う 。
なお、ゼロの追撃が可能になるように、連鎖値は「1」と設定している 。
ASのファイル:boss_black_devil_number_ball.txt
else { //接触判定の対象がボスの場合
hit_zero=0 //ゼロとの接触判定をリセット
if ( hit_enemy_guard_arm==1 ) { //ガード用のMCとの接触判定がある場合
enemy_effect="guard" //ガードエフェクトを付加
enemy_hit_target="zero" //接触判定の対象をゼロに変更
number_number_ball++ //ナンバーボールの番号を増加させる
velocity_enemy=0 //速度をリセット
radian_enemy=Math .atan2 ( _root .zero_y -_parent ._y ,_root .zero_x -_parent ._x ) //ゼロとの角度を算出
}
else {
︙
if ( hittest ==1 ) {
enemy_explosion=1 //爆発判定
boss_MC=_root .board [ "enemy_" +_root .boss_number ] //参照先を変数に保存
boss_MC.enemy_hitrect .enemy_hit_attack_type ="buster" //攻撃の種類
boss_MC.enemy_hitrect .enemy_hit_attack =number_number_ball //ダメージ
boss_MC.enemy_hitrect .enemy_chain =1 //ボスの連鎖値
}
}
}
・・・爆発判定がある場合
爆発判定がある場合は、「ナンバーボールの爆発」のMCを出現させる。
ゼロは、このMCにより、ダメージを受けることになる。
・メルトダウン
・・概要
ボスを中心とした広範囲の攻撃。ボスのライフが減少すると範囲が更に広くなる。
壁蹴りで回避可能。ボスが左右の端にいる状態で、かつ、左右の壁の間隔が広い場合は、ボスの反対側の壁に向かうことでも回避できる。
連鎖値を高く設定しているため、ボスに接触し、その無敵時間を利用してやり過ごす方法は不可能。
↓メルトダウン。
元ネタはTOD2のハルファス。
・EX回転バウンド
・・概要
ガード用のMC(円)を出現させ、回転バウンドを行う。
↓EX回転バウンド。
・・回転係数
「反発係数」「回転角速度」などの値は、「回転係数」を用いて算出される。
「回転係数」は、時間経過・ゼロの攻撃・床との接触などで減少する。「回転係数」が一定の値まで減少した場合は、消滅判定が付加される。
ASのファイル:boss_black_devil_guard_circle.txt
if ( rotation_enemy_coefficient< =0 ) { rotation_enemy_coefficient=0 ;enemy_vanish=1 } //回転係数が減少した場合,消滅判定
enemy_restitution=rotation_enemy_coefficient/ rotation_enemy_coefficient_max //反発係数の算出
velocity_rotation_enemy=velocity_rotation_enemy_max* enemy_restitution //回転角速度の算出
・ダウン
・・概要
ダウンする。攻撃チャンスだが、その後のシエル出現には要警戒 。
・ボスと攻撃との接触判定がある場合の処理
・・概要
特筆するような処理はないので、解説は省略する。
最終更新:2020年12月19日 08:57