・コンセプト
・・概要
「壁蹴りキラー」として制作した。なので、壁蹴りを多用すると攻撃の回避が困難になると思われる。ただし、EXを回避する際は、ダッシュ壁蹴りが有用となる。
・・アドリブ性の要求
エアダッシュ斬りは、「ボスと距離が離れている場合は、距離をとる」「ボスと距離が近い場合は、ソニック(薄)が落下する前に
ダッシュで抜ける」といった対応を要求される。特に後者は、反転して攻撃することで大ダメージを与えるチャンスとなりうる。
ボスが近接している場合は、回避が困難な攻撃が多い。なので、”ある程度”距離を離すことが重要になる。ただし、離し過ぎると、
エアダッシュ斬りのソニック(薄)の回避が困難になる場合がある。
・・バランス調整
極端に待機時間が短く、一見隙がないように思えるが、「特定の条件でノックバックする」ことを利用して、大ダメージを与えることができるように調整している。
・通常状態
・・概要
通常状態においては、主に、アクションの選択を行う。
他のボスに関しても、ほぼ同様の処理を行っている。
・・乱数でアクションを選択
待機時間のカウントが最大値の場合に、乱数でアクションを選択する。ゼロとボスとの距離によって、アクションの選択の内容が変化する。
ジャンプの場合は、「boss_action_next」に次のアクションを代入しておく。
ASのファイル:boss_giko_action_normal.txt
enemy_random=Math.floor(Math.random()*100) //乱数でアクションを選択
if(Math.abs(_root.zero_x-_parent._x)<180/2){ //近距離
if(enemy_random<20){_root.boss_action="jump";boss_action_next="dash_slash"} //ジャンプ(ダッシュ斬り前)に移行
else if(enemy_random<50){_root.boss_action="jump";boss_action_next="air_dash_slash"} //ジャンプ(エアダッシュ斬り前)に移行
else if(enemy_random<80){_root.boss_action="rising_claw"} //爪攻撃(上昇)に移行
else{_root.boss_action="sonic"} //ソニックに移行
}
else{ //遠距離
if(enemy_random<30){_root.boss_action="jump";boss_action_next="dash_slash"} //ジャンプ(ダッシュ斬り前)に移行
else if(enemy_random<50){_root.boss_action="jump";boss_action_next="air_dash_slash"} //ジャンプ(エアダッシュ斬り前)に移行
else if(enemy_random<70){_root.boss_action="rising_claw"} //爪攻撃(上昇)に移行
else{_root.boss_action="sonic"} //ソニックに移行
}
・・検証用の記述
これは、検証用の記述であり、「ボスに任意のアクションを行わせる」ための記述となる。
下記の記述のコメントアウトを解除することで、ボスが任意のアクションを行うことになる。
ASのファイル:boss_giko_action_normal.txt
//_root.boss_action="normal"
︙
・・EXソニック
ライフが1/2以下の場合、EXソニックに移行する。
同時に「EXソニックのカウント」を増加させることで、以後はEXソニックに移行しないようにしている。
ASのファイル:boss_giko_action_normal.txt
if(count_boss_ex_sonic==0 and _root.boss_life<=_root.boss_initial_life/2){_root.boss_action="ex_sonic";count_boss_ex_sonic++} //ライフが1/2以下の場合,EXソニックに移行
・開始直後の待機
・・概要
このボスに特有のアクションの状態である。
特定の条件が満たされた場合は、ノックバックに移行する。「・ボスと攻撃との
接触判定がある場合の処理」の「・・ノックバックへの移行」を参照。
・ジャンプ
・・概要
「ボスの次のアクションの状態」によって、処理の内容が変化する。
特定の条件が満たされた場合は、ノックバックに移行する。「・ボスと攻撃との
接触判定がある場合の処理」の「・・ノックバックへの移行」を参照。
・・他のアクションへの移行
ASのファイル:boss_giko_action_jump.txt
if(boss_action_next=="dash_slash"){ //ジャンプ後にダッシュ斬りに移行する場合
if(count_boss_time==1){_root.velocity_boss_y=-velocity_boss_jump_dash_slash} //カウントが1の場合,速度を付加
else if(hit_floor!=0){count_boss_time=0;_root.boss_action=boss_action_next}
}
else if(boss_action_next=="air_dash_slash"){ //ジャンプ中にエアダッシュ斬りに移行する場合
if(count_boss_time==1){_root.velocity_boss_y=-velocity_boss_jump_air_dash_slash} //カウントが1の場合,速度を付加
else if(_root.velocity_boss_y>=0){count_boss_time=0;_root.boss_action=boss_action_next}
}
else if(boss_action_next=="none"){ //ジャンプ後に通常状態に移行する場合
if(hit_floor!=0){count_boss_time=0;_root.boss_action="normal"}
}
・ダッシュ斬り
・・概要
「斬り」と表現しているが、実際は突進(+前方に攻撃判定)となる。
・・速度
カウントの増加に応じて、速度が減少していく。
ASのファイル:boss_giko_action_dash_slash.txt
_root.velocity_boss_x=velocity_boss_dash_slash*(1-count_boss_time/count_boss_dash_slash_time_max)*enemy_direction //速度
・・前方の攻撃判定
「ボスのx方向の位置」を参照して、位置調整を行っている。
他のアクションや他のボスにおいても、同様の処理を行っている場合がある。
ASのファイル:boss_giko_dash_slash.txt
_parent._x=_root.boss_x+10*enemy_direction //x方向の位置
・エアダッシュ斬り
・・概要
「・
ダッシュ斬り」と類似した処理を行っている。ただし、等間隔でソニック(薄)を出現させる点が異なる。
・・ソニック(薄)の間隔
EXの後は、ソニック(薄)の間隔が変化する。
ASのファイル:boss_giko_action_air_dash_slash.txt
if(count_boss_ex_sonic==0){boss_space_sonic=boss_space_sonic_normal} //ソニックの間隔(EXの前)
else{boss_space_sonic=boss_space_sonic_ex} //ソニックの間隔(EXの後)
・・ソニック(薄)の出現
ボスの初期位置を保存しておき、その位置から一定の距離を進んだ場合は、ソニック(薄)を出現させる。そして、新たに位置を保存する。
このような処理を行うことで、等間隔でソニック(薄)を出現させていく。
ASのファイル:boss_giko_action_air_dash_slash.txt
if(Math.abs(boss_x_air_dash_slash-_root.boss_x)>=boss_space_sonic){ //一定の距離を進んだ場合,ソニックを出現させる
︙
boss_x_air_dash_slash=_root.boss_x //位置を保存
}
・・ジャンプ(下降)への移行
カウントが最大値の場合は、
ジャンプ(下降)に移行する。
ASのファイル:boss_giko_action_air_dash_slash.txt
if(count_boss_time==count_boss_air_dash_slash_time_max){ //カウントが最大値の場合
count_boss_time=0 //カウントをリセット
_root.boss_action="jump";boss_action_next="none" //ジャンプ(下降)に移行
}
・爪攻撃(上昇)
・・概要
この攻撃は、前動作なしで発生するようにしている。故に、近接しすぎていると回避不能になる。
↓爪攻撃(上昇)→爪攻撃(下降)。
・・爪攻撃(下降)への移行
ボスのy方向の速度が0より大きくなった場合は、爪攻撃(下降)に移行する。
ASのファイル:boss_giko_action_rising_claw.txt
else if(_root.velocity_boss_y>0){ //y方向の速度が0より大きくなった場合
count_boss_time=0 //カウントをリセット
_root.boss_action="falling_claw" //爪攻撃(下降)に移行
}
・爪攻撃(下降)
・・概要
爪攻撃(上昇)よりも、下部の攻撃範囲が広くなる。タイミング良く
ダッシュすれば回避できる。
・ソニック
・・概要
ガード判定があるソニックを発射する。ソニックは、壁・ボスとの
接触判定がある場合に分裂する。
↓ソニック。EXの前の場合は、中央からソニックをされると、次の攻撃の回避が困難になる。
ボスは前方からの攻撃に対してダメージを受けなくなる。「・ボスと攻撃との
接触判定がある場合の処理」の「・・前方からの攻撃」も参照。
・・ソニック
・・・ボスとの接触判定
ソニックは、カウントが特定の値(ソニックを発射してから10フレーム後)より大きい場合は、ボスとの
接触判定を取得する。
ボスとの
接触判定がある場合は、分裂の方向に値を代入する。
↓ソニック。EXの後の場合は、ボスが
ダッシュ斬りに移行するため、ボスとの
接触判定が付加される場合がある。
ASのファイル:boss_giko_sonic.txt
else if(count_enemy_time>count_enemy_time_max+10){ //カウントが特定の値より大きい場合
︙
if(hittest==1){ //ボスとの接触判定がある場合
enemy_separation_direction=enemy_direction //分裂の方向
}
}
・・・壁との接触判定
カウントが最大値より大きい場合は、壁との
接触判定を取得し、分裂の方向を代入する。
同時に位置調整を行う。
ASのファイル:boss_giko_sonic.txt
if(count_enemy_time>count_enemy_time_max){ //カウントが最大値より大きい場合
#include "zero_AS/hit_landform/hit_wall_right.txt"
if(hit_wall_right!=0){
enemy_separation_direction=-1 //左方向分裂
_parent._x-=hit_x_wall_right //位置調整
}
︙
}
・EXソニック
・・概要
基礎的な処理は、ソニックとほぼ同様となる。「・ソニック」も参照。
出現させたソニックに「EXソニックの初期の方向」を次々に伝達していくことになる。
徐々に連鎖値が高くなるため、回避しないと累計ダメージが凄まじいことになる。
・・EXソニック(1)の出現
「EXソニックの初期の方向」にボスの方向を代入する。
ASのファイル:boss_giko_action_ex_sonic.txt
initial_direction_boss_ex_sonic=enemy_direction //EXソニックの初期の方向
出現させたソニックに「EXソニックの初期の方向」を伝達する。
ASのファイル:boss_giko_action_ex_sonic.txt
enemy.enemy_hitrect.initial_direction_boss_ex_sonic=initial_direction_boss_ex_sonic //EXソニックの初期の方向を伝達
・・ボスのアクションの選択
「EXソニックの初期の方向」がリセットされるまでは、
通常状態から
ダッシュ斬りに移行する(改善を要する点ではあると思うが、他に良いアイディアを思いつかない)。
「・・EXソニック(4)」も参照。
ASのファイル:boss_giko_action_normal.txt
if(initial_direction_boss_ex_sonic!=0){_root.boss_action="dash_slash"} //EXソニックの場合,ダッシュ斬りに移行
・・EXソニック(1)、EXソニック(2)
「・ソニック」とほぼ同様の処理となるが、「敵の色」「敵の角度」に関する情報も伝達している。
・・EXソニック(3)
4個あるソニックのうち、壁との
接触判定があるものは、消滅させる。
床・天井との
接触判定があるものは、合体判定を付加し、「EXソニック(4)」を出現させる。そして、消滅させる。
・・EXソニック(4)
消滅判定がある場合は、「EXソニックの初期の方向」をリセットしてボスに伝達する。
この処理により、ボスに、「EXソニックの終了」という情報が伝達されることになる。
ASのファイル:boss_giko_ex_sonic_4.txt
_root.board["enemy_"+_root.boss_number].enemy_hitrect.initial_direction_boss_ex_sonic=0 //EXソニックの初期の方向をリセットしてボスに伝達
・ノックバック
・・概要
「・ボスと攻撃との
接触判定がある場合の処理」の「・・ノックバックへの移行」を参照。
カウントが1の場合は、速度を付加させる。
床との
接触判定がある場合は、
通常状態(EXの前)・
ダッシュ斬り(EXの後)に移行する。
・ボスと攻撃との接触判定がある場合の処理
・・概要
・・前方からの攻撃
ソニック・EXソニックの場合、前方からの攻撃に対しては処理を行わない。
↓ソニックの場合、前方からの攻撃に対しては処理を行わない。
ASのファイル:boss_giko_hit_attack.txt
if((_root.boss_action=="sonic" or _root.boss_action=="ex_sonic") and ((enemy_direction==1 and enemy_hit_attack<0) or (enemy_direction==-1 and enemy_hit_attack>0))){} //ソニック・EXソニックの場合,前方からの攻撃に対しては処理を行わない
・・ノックバックへの移行
ノックバックに移行する条件は、以下の通りとなる。
・ボスのアクションの状態が、「開始直後の待機」「ノックバック」「ジャンプ(下降)」のいずれか。
・一定の値以上のダメージの攻撃との接触判定がある。
ノックバックに移行すると同時に、攻撃の方向に応じて、ボスの方向も変化させる。
氷属性攻撃の場合は、「ノックバックの氷属性判定」を付加する。この判定がある場合は、ノックバックの初速度(y方向)が大きくなる。
↓開始直後の待機からノックバックへの移行、ノックバックからノックバックへの移行。
ASのファイル:boss_giko_hit_attack.txt
if((_root.boss_action=="opening_wait" or _root.boss_action=="knockback" or (_root.boss_action=="jump" and _root.velocity_boss_y>=0)) and Math.abs(enemy_hit_attack)>=8){ //一定の値以上のダメージ,特定の状況の場合
_root.boss_action="knockback" //ノックバックに移行
if(enemy_hit_attack>0){enemy_direction=-1} //左からの攻撃の場合,左を向く
else{enemy_direction=1} //右からの攻撃の場合,右を向く
if(enemy_hit_attack_element=="ice"){boss_knockback_ice=1} //ノックバックの氷属性判定
else{boss_knockback_ice=0}
count_boss_time=0 //カウントをリセット
}
最終更新:2020年12月19日 09:35