・概要
「ゼロと各種
地形との接触判定」は、恐らく、このwikiにおいて、理解するための難易度が最も高い。
・各種地形との接触判定
・・概要
なお、「ゼロと各種地形との接触判定」の処理は、「(一部の)敵と各種地形との接触判定」と共通化している。
↓「各種
地形との接触判定」の共通化により、(一部の)敵は、ゼロと同様の処理が行われる。
・・loadの処理
・・・各種地形などとの接触判定
各種地形・敵との
接触判定に、「0」を代入しておく。
「_root.zero_hit_floor=1」は、ゼロが出現したフレームにおいて、
その他のアクションの移行の「・
ジャンプへの移行(床・傾斜床などとの接触判定がなくなった場合)」の処理により、
ジャンプに移行しないようにするための処理である。
ASのファイル:zero_load.txt
for(i=1;i<=_root.i_landform_name_max;i++){_root["zero_hit_"+_root.landform_name_list[i-1]]=0} //各種地形
_root.zero_hit_floor=1 //床との接触判定(0以外にしておく)
_root.zero_hit_enemy=0 //敵
caught_floor=0;caught_ceiling=0;caught_wall_right=0;caught_wall_left=0 //地形に挟まれることによる即死判定(床,天井,壁(右,左))
・・・地形との接触判定を取得する主体
「
地形との接触判定を取得する主体」を「ゼロ」にしておくことで、ゼロに特有の処理(床貫通判定など)が行われることになる。
ASのファイル:zero_load.txt
MC_hit_landform="zero" //ゼロ
・・前処理
・・各種地形との接触判定
ASのファイル:zero_hit_landform_enemy.txt
#include "zero_AS/hit_landform/zero_hit_wall_right.txt"
︙
なお、
「壁」に関する処理を他の地形の処理よりも優先させていることには意味がある。
床の「・地形に挟まれることによる即死判定(床)」を参照。
・・各種の値の保存
各種の値を保存する。
これらの値は、他のMCから参照されたり、次のフレームにおける「移動量」「地形めり込み量の最大値」に関する処理に用いられる。
ASのファイル:zero_hit_landform_enemy.txt
_root.zero_x=_parent._x;_root.zero_y=_parent._y //x・y方向の位置(地形による位置調整の後,保存用)
MC_x_old=_parent._x;MC_y_old=_parent._y //x・y方向の位置(地形による位置調整の後,保存用)
//MCの幅・高さ(保存用)
MC_width_left_old=MC_width_left;MC_width_right_old=MC_width_right //幅(左,右)
︙
・・速度に関する処理
ASのファイル:zero_hit_landform_enemy.txt
if(hit_wall_right!=0 or hit_wall_left!=0){_root.velocity_zero_x=0} //壁との接触判定がある場合,x方向の速度を0にする
if(hit_floor!=0 or hit_sloped_floor!=0){_root.velocity_zero_y=0} //床・傾斜床との接触判定がある場合,y方向の速度を0にする
if((hit_ceiling!=0 or hit_sloped_ceiling!=0) and _root.velocity_zero_y<0){_root.velocity_zero_y=0} //上昇中,天井・傾斜天井との接触判定がある場合,y方向の速度を0にする
なお、「天井・
傾斜天井との
接触判定がある場合、y方向の速度を0にする」の処理を「上昇中」に限定しているのは、「下方向に移動している天井など」とゼロが接触し続けることにより、「y方向の速度が0のままになる」ことを回避するためである。
↓「上昇中」に限定していない場合。
↓「上昇中」に限定した場合。
・・ゼロの接触判定に代入
ASのファイル:zero_hit_landform_enemy.txt
for(i=1;i<=_root.i_landform_name_max;i++){_root["zero_hit_"+_root.landform_name_list[i-1]]=this["hit_"+_root.landform_name_list[i-1]]} //ゼロの接触判定に代入する
・・その他の地形
各種地形の項目を参照。
・敵との接触判定
・・概要
各種地形による位置調整を行った後(=ゼロの最終的な位置が確定した後)に、敵との接触判定を取得する。
接触判定の基礎に関しては、
接触判定を参照。
ここでは、主に、敵との
接触判定があった場合の処理に関して解説する。
・・loadの処理
・・・連鎖値
ASのファイル:zero_load.txt
zero_chain=0 //ゼロの連鎖値
zero_chain_old=0 //ゼロの連鎖値(保存用)
・・判定のリセット
ASのファイル:zero_hit_landform_enemy.txt
_root.zero_hit_enemy=0 //判定をリセットしておく
・・判定を取得する前提となる条件
ASのファイル:zero_hit_landform_enemy.txt
if(_root.event_pause==0 and _root.zero_shadow_dash==0){ //イベント停止判定がある場合・シャドウダッシュ判定がある場合,判定を取得しない
︙
}
・・接触判定(敵側)
ゼロから敵に「ゼロとの接触判定」を伝達する。一部の敵は、「ゼロとの接触判定」により、特定の処理が行われる。
ASのファイル:zero_hit_landform_enemy.txt
enemy.enemy_hitrect.hit_zero=1 //接触判定(敵側)
・・ダメージ、連鎖値関連の処理
・・・ダメージ、連鎖値の取得
「敵の攻撃のダメージ」「敵の攻撃の連鎖値」の取得を行う。念の為、設定されていない場合の処理も行っている。
ASのファイル:zero_hit_landform_enemy.txt
enemy_attack_damage=enemy.enemy_hitrect.enemy_attack_damage //敵の攻撃のダメージを取得
if(enemy_attack_damage==undefined){enemy_attack_damage=0} //敵の攻撃のダメージが設定されていない場合
enemy_attack_chain=enemy.enemy_hitrect.enemy_attack_chain //敵の攻撃の連鎖値を取得
if(enemy_attack_chain==undefined){enemy_attack_chain=1} //敵の攻撃の連鎖値が設定されていない場合
zero_chain=enemy_attack_chain //ゼロの連鎖値
・「zero_chain=enemy_attack_chain」:「enemy_attack_chain」をそのまま用いれば良いので、不要な処理と思われるが、形式的に行っている。
・・・ダメージを受ける前提となる条件
ゼロがダメージを受ける前提となる条件は、以下の通りとなる。
・「ゼロの連鎖値(保存用)」よりも「敵の攻撃の連鎖値」が大きい。
・敵の攻撃のダメージが0以外。
ASのファイル:zero_hit_landform_enemy.txt
if(zero_chain>zero_chain_old and enemy_attack_damage!=0){ //連鎖値が大きい場合・敵の攻撃のダメージが0以外の場合
︙
}
・・・接触判定(ゼロ側)
ASのファイル:zero_hit_landform_enemy.txt
_root.zero_hit_enemy=i //接触判定(ゼロ側)
・・・ゼロのライフの減少
「ゼロのライフ」を「敵の攻撃のダメージ」の値だけ減少させる。そして、ライフ残量が0より小さい場合は、0に補正する。
また、「敵の攻撃のダメージ」の値を「リザルト用のダメージ」に加算する。
ASのファイル:zero_hit_landform_enemy.txt
_root.zero_life-=enemy_attack_damage //ゼロのライフを減少させる
if(_root.zero_life<0){_root.zero_life=0} //ライフ残量が0より小さい場合,0に補正
_root.result_damage+=enemy_attack_damage //リザルト用のダメージに加算
・・・ノックバックの方向
「ノックバックの方向」は、ゼロと敵との位置関係により決定される。
被ダメージ状態の「・モーション、速度」の「・・モーション、x方向の速度」も参照。
ASのファイル:zero_hit_landform_enemy.txt
if(_parent._x<enemy._x){zero_damage_knockback_direction=1} //右側(画面基準)からダメージを受けた場合のノックバックの方向
else{zero_damage_knockback_direction=-1} //左側(画面基準)からダメージを受けた場合のノックバックの方向
・・・無敵時間、連鎖値
無敵時間の判定を付加し、無敵時間のカウントをリセットする。
連鎖値を保存する。この処理により、以降は、連鎖値がリセットされるまで、この連鎖値以下の攻撃に対して、処理を行わなくなる。
ASのファイル:zero_hit_landform_enemy.txt
zero_invincible=1;count_zero_invincible_time=0 //無敵時間の判定,カウントをリセット
zero_chain_old=zero_chain //連鎖値を保存
最終更新:2020年12月19日 09:27