・概要
・ベクトルレーザー(チャージ)
・・概要
ベクトルレーザー(非チャージ)と共通している処理に関しては、詳細な解説を省略する。
このバスターは、各種地形の影響で反射する(反射回数の上限あり)。反射の際には、新しいMCを出現させ、出現元のMCに消滅判定を付加している。
新しいMCを出現させた際には、出現元のMCから、速度などの情報が伝達される。
↓ベクトルレーザー(チャージ)。
このバスターは、全てのEXバスターの中で、最も作成の難易度が高い。また、処理が不完全な箇所(各種
地形との接触判定、反射方向の判定など)が残っている。
・・loadの処理
・・・バスターの消滅判定
このバスターは「zero_buster_vanish_type」(バスターの消滅判定のタイプ)が設定されていない。つまり、敵の影響では消滅せず、敵を貫通する。
・・・オリジナル判定
ゼロから発射された場合は「オリジナル判定」が付加される。反射により新たに出現したバスターには付加されない。
「反射回数のカウント」は、ゼロから発射された場合には設定されていない(「undifined」)ので、この処理により、「0」と設定される。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
if(count_zero_buster_reflection==undifined){zero_buster_reflection_origin=1;count_zero_buster_reflection=0} //ゼロから発射された場合,オリジナル判定を付加・反射回数を0に設定する
else{zero_buster_reflection_origin=0}
・・・角度など(オリジナル判定がある場合)
オリジナル判定がある場合には、「バスターの方向」「バスターの初期位置」は、他のバスターと同様に設定される。
「発射された瞬間に、上下キーのどちらの入力があるか」により、「1回目に壁に当たった場合のバスターの反射方向」が変化する。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
if(zero_buster_reflection_origin==1){ //オリジナル判定がある場合
zero_buster_initial_direction=_root.initial_direction_zero_buster //バスターの方向(x方向,初期)
_parent._x=_root.initial_zero_buster_x;_parent._y=_root.initial_zero_buster_y //バスターの初期位置
if(_root.keydown_up==1){zero_buster_reflection_wall=1} //1回目に壁に当たった場合のバスターの反射方向(1:上,-1:下)
else{zero_buster_reflection_wall=-1}
if(zero_buster_initial_direction==1){rotation_zero_buster=0} //角度
else{rotation_zero_buster=180}
}
・・・角度など(オリジナル判定がない場合)
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
else{ //オリジナル判定がない場合
radian_zero_buster=Math.atan2(velocity_zero_buster_y,velocity_zero_buster_x);rotation_zero_buster=radian_zero_buster/Math.PI*180 //角度,回転
_parent._alpha=50 //透明度の変化
}
・・・速度(オリジナル判定がある場合)
オリジナル判定がある場合の速度を計算する。オリジナル判定がない場合の速度は、出現元のMCから伝達された値が用いられる。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
velocity_zero_buster=6
if(zero_buster_reflection_origin==1){ //オリジナル判定がある場合(オリジナル判定がない場合,出現元のMCより伝達)
velocity_zero_buster_x=velocity_zero_buster*Math.cos((rotation_zero_buster/180)*Math.PI)
velocity_zero_buster_y=0
}
・・・その他の速度・角度
「・・バスターの消滅判定がある場合(反射レーザーの出現)」を参照。
なお、ここでの「normal」は、「通常」ではなく「法線」という意味である。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
velocity_zero_buster_reflection_x;velocity_zero_buster_reflection_y //反射後の速度
radian_zero_buster_reflection_normal //傾斜床・傾斜天井との接触判定がある場合の反射角度(法線方向の反射)
・・・反射回数
「・・バスターの消滅判定がある場合(反射レーザーの出現)」を参照。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
count_zero_buster_reflection //反射回数のカウント
count_zero_buster_reflection_max=4 //反射回数の最大値
・・・ダメージ、連鎖値
このバスターのダメージや連鎖値は、反射回数によって変化する。
反射回数が1以上の場合は、ダメージが低くなる。また、反射回数が増加するに従い、連鎖値が大きくなる(この処理により、無敵時間を無視して連続でヒットするようになる)。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
if(count_zero_buster_reflection==0){zero_attack_damage=16} //反射回数によって変化
else{zero_attack_damage=8}
zero_attack_chain=201+count_zero_buster_reflection;zero_attack_chain_boss=201+count_zero_buster_reflection //反射回数によって変化
・・・その他
「・・バスターの消滅判定がある場合(反射レーザーの出現)」を参照。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
zero_buster_refrection_laser_appearance=0 //反射レーザーの出現判定
zero_buster_reflection="none" //反射方向の判定
・・各種地形との接触判定、反射方向の判定
このバスターは、
各種地形との接触判定がある場合、速度や地形の種類に応じて「反射方向の判定」が付加される。また、同時に、バスターの消滅判定が付加される。
傾斜床・
傾斜天井との接触判定に関しては、
傾斜床の「・バスターと傾斜床との接触判定」、
傾斜天井の「・バスターと傾斜天井との接触判定」を参照。
「反射方向の判定」は以下の通りとなる。条件文の構成にもある通り、下のものほど優先度が高い。
・壁:x方向の反射。オリジナル判定がある場合は、斜め方向の反射。
・床・天井など:y方向の反射。
・傾斜床・傾斜天井:法線方向の反射。
記述(の一部)に関しては、下記の通りとなる。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
if(zero_buster_vanish==0){ //バスターの消滅判定がない場合
#include "zero_AS/hit_landform/buster_hit_landform_universal.txt"
//反射方向の判定
if((hit_wall_right!=0 and velocity_zero_buster_x>0) or (hit_wall_left!=0 and velocity_zero_buster_x<0)){zero_buster_reflection="x"} //x方向の反射
if((hit_ceiling!=0 and velocity_zero_buster_y<0) or ((hit_sink!=0 or hit_floor!=0) and velocity_zero_buster_y>0)){zero_buster_reflection="y"} //y方向の反射
if(velocity_zero_buster_y<=0 and hit_sloped_ceiling!=0){
zero_buster_reflection="normal" //法線方向の反射
landform_width=_root.board["sloped_ceiling_"+hit_sloped_ceiling]._width;landform_height=_root.board["sloped_ceiling_"+hit_sloped_ceiling]._height //該当する傾斜天井の幅・高さを取得
if(sloped_ceiling_type==1){radian_zero_buster_reflection_normal=Math.atan2(-landform_height,landform_width)+Math.PI/2} //反射角度
else{radian_zero_buster_reflection_normal=Math.atan2(landform_height,landform_width)+Math.PI/2} //反射角度
}
︙
if(zero_buster_reflection!="none"){zero_buster_vanish=1} //バスターの消滅判定
}
・・バスターの消滅判定がある場合(反射レーザーの出現)
・・・概要
バスターの消滅判定がある場合、反射レーザーを出現させる。また、反射回数のカウントを増加させ、(2つ以上出現させないために)反射レーザーの出現判定を付加する。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
if(zero_buster_refrection_laser_appearance==0 and count_zero_buster_reflection<count_zero_buster_reflection_max){ //反射レーザーの出現判定がない場合・反射回数が最大値未満の場合
count_zero_buster_reflection++ //反射回数のカウントを増加させる
zero_buster_refrection_laser_appearance=1 //反射レーザーの出現判定
︙
}
・・・反射レーザーの初期位置
反射レーザーの初期位置に関する処理を行う。
例えば、出現元のバスターのx方向の速度が正の場合(=右方向の場合)、反射レーザーのx方向の初期位置は、「出現元のバスターの右端の位置」となる。負の場合や、y方向に関しても、同様に処理を行う。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
if(velocity_zero_buster_x==0){zero_buster_reflection_x=_parent._x}
else if(velocity_zero_buster_x>0){zero_buster_reflection_x=this.getBounds(_root.board).xMax}
else{zero_buster_reflection_x=this.getBounds(_root.board).xMin}
if(velocity_zero_buster_y==0){zero_buster_reflection_y=_parent._y}
else if(velocity_zero_buster_y>0){zero_buster_reflection_y=this.getBounds(_root.board).yMax}
else{zero_buster_reflection_y=this.getBounds(_root.board).yMin}
オリジナル判定がある場合、壁にめり込んでいる場合は、初期位置は壁の端の位置となる(原作準拠)。
↓壁にめり込んでいる場合。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
if(zero_buster_reflection=="x" and zero_buster_reflection_origin==1){ //x方向の反射の場合・オリジナル判定がある場合
if(_parent._x>landform_xmin and velocity_zero_buster_x>0 and hit_wall_right!=0){zero_buster_reflection_x=landform_xmin} //壁(右)にめり込んでいる場合
else if(_parent._x<landform_xmax and velocity_zero_buster_x<0 and hit_wall_left!=0){zero_buster_reflection_x=landform_xmax} //壁(左)にめり込んでいる場合
}
・・・反射レーザーの出現、情報伝達
反射レーザーのMCを出現させ、位置調整や情報伝達を行う。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
_root.board.attachMovie("zero_ex_buster_none_vector_laser_charge",["zero_attack_"+_root.depth_zero_attack],_root.depth_zero_attack) //反射レーザーのMCを出現させる
zero_attack=_root.board["zero_attack_"+_root.depth_zero_attack] //参照先を変数に保存
︙
zero_attack.zero_buster_hitrect.count_zero_buster_reflection=count_zero_buster_reflection //反射回数を伝達
・・・反射後の速度(y方向)
y方向の反射の場合、反射後のバスターの速度は、y方向に関しては、出現元のバスターの速度を反転させた値になる。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
if(zero_buster_reflection=="y"){velocity_zero_buster_reflection_x=velocity_zero_buster_x;velocity_zero_buster_reflection_y=-velocity_zero_buster_y} //y方向の反射
・・・反射後の速度(x方向)
x方向の反射の場合、反射後のバスターの速度は、x方向に関しては、出現元のバスターの速度を反転させた値になる。
ただし、オリジナル判定がある場合は、バスターの方向や、「1回目に壁に当たった場合のバスターの反射方向」に応じて、「45」「135」「-45」「-135」のいずれかの値となる。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
else if(zero_buster_reflection=="x"){ //x方向の反射
if(zero_buster_reflection_origin==1){ //オリジナル判定がある場合,zero_buster_initial_direction,zero_buster_reflection_wallに応じて,45,135,-45,-135の方向に反射
velocity_zero_buster_reflection_x=velocity_zero_buster*Math.cos(((-90-45*zero_buster_initial_direction)*zero_buster_reflection_wall/180)*Math.PI)
velocity_zero_buster_reflection_y=velocity_zero_buster*Math.sin(((-90-45*zero_buster_initial_direction)*zero_buster_reflection_wall/180)*Math.PI)
}
else{velocity_zero_buster_reflection_x=-velocity_zero_buster_x;velocity_zero_buster_reflection_y=velocity_zero_buster_y}
}
例えば、「zero_buster_initial_direction」が「1」(=バスターが右向き)であり、「zero_buster_reflection_wall」が「1」(=「1回目に壁に当たった場合のバスターの反射方向」が上向き)の場合、角度は、「(-90-45*1)*1=-135」となる。
・・・反射後の速度(法線方向)
法線方向の反射の場合、反射後のバスターの速度は、「・・各種地形との接触判定、反射方向の判定」において算出された値となる。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
else if(zero_buster_reflection=="normal"){ //法線方向の反射
velocity_zero_buster_reflection_x=velocity_zero_buster*Math.cos(radian_zero_buster_reflection_normal)
velocity_zero_buster_reflection_y=velocity_zero_buster*Math.sin(radian_zero_buster_reflection_normal)
}
・・・出現判定のリセット
MCを削除する前に、オリジナル判定がある場合は、出現判定をリセットする。
ASのファイル:zero_ex_buster_none_vector_laser_charge.txt
if(zero_buster_reflection_origin==1){_root.zero_buster_identify[number_zero_buster-1]="none"} //オリジナル判定がある場合,出現判定をリセット
・分裂ソニック(チャージ)
・・概要
このバスターは、敵や地形の影響で消滅判定が付加された場合、新たに2つのバスターを上下方向に出現させる。
壁との接触判定がある場合は、位置調整した後で消滅判定が付加される。
↓分裂ソニック(チャージ)。
「分裂ソニック(非チャージ、出現用のMC)」とほぼ同様の処理をしているので、
EXバスター(非チャージ)の「・分裂ソニック(非チャージ、出現用のMC)」を参照。
・分裂ソニック(チャージ、分裂後)
・・概要
特筆するような処理はないので、解説は省略する。
・伸縮バーナー(チャージ)
・・概要
このバスターは、敵や地形との接触判定がある場合、爆発のMCを出現させる。
↓伸縮バーナー(チャージ)。
・・バスターの消滅判定
このバスターは、敵との接触判定がある場合、敵の残りライフ等に関係なく、バスターの消滅判定が付加される。ただし、バスターが貫通するように設定されている敵は除く。
ASのファイル:zero_ex_buster_fire_elastic_burner_charge.txt
if(_root.enemy_identify[i-1]!=0){zero_buster_vanish=1} //敵の残りライフ等に関係なく,バスターの消滅判定(バスターが貫通する敵は除く)
・・バスターの消滅
バスターの消滅判定がある場合、爆発のMCを出現させる。
ASのファイル:zero_ex_buster_fire_elastic_burner_charge.txt
if(zero_buster_vanish==1){ //バスターの消滅判定がある場合
_root.board.attachMovie("zero_ex_buster_fire_elastic_burner_charge_explosion",["zero_attack_"+_root.depth_zero_attack],_root.depth_zero_attack) //爆発のMCを出現させる
︙
}
・伸縮バーナー(チャージ、爆発)
・・概要
このバスターは、敵や地形による影響では消滅せず、徐々に透明化し、消滅する。
・・連鎖値とダメージの変化
透明度の変化に応じて、徐々に連鎖値とダメージを変化させる。この処理により、無敵時間を無視して連続でヒットするようになる。
ASのファイル:zero_ex_buster_fire_elastic_burner_charge_explosion.txt
if(count_add_chain==0 and _parent._alpha<=60){count_add_chain++;zero_attack_chain=202;zero_attack_chain_boss=202;zero_attack_damage=3}
else if(count_add_chain==1 and _parent._alpha<=30){count_add_chain++;zero_attack_chain=203;zero_attack_chain_boss=203;zero_attack_damage=2}
・・バスターの消滅
透明化した場合は、MCを削除する。
ASのファイル:zero_ex_buster_fire_elastic_burner_charge_explosion.txt
if(_parent._alpha<=0){_parent.removeMovieClip()} //透明化した場合,MCを削除
・氷柱&クリスタル(チャージ)
・・概要
このバスターは、ゼロの位置を追尾するシールドである。地形との接触判定は取得しない。
元ネタはロックマンXのローリングシールド。
↓氷柱&クリスタル(チャージ)。
・・loadの処理
・・・バスターの消滅判定
バスターの消滅判定のタイプは、「enemy_life」(敵の残りライフのみ)と設定している。
ASのファイル:zero_ex_buster_ice_icicle_and_crystal_charge.txt
zero_buster_vanish_type="enemy_life" //バスターの消滅判定のタイプ(敵の残りライフのみ)
・・ゼロの位置を追尾
ゼロの位置を追尾する。ただし、処理の順序の関係上、1フレームだけズレる。
ASのファイル:zero_ex_buster_ice_icicle_and_crystal_charge.txt
_parent._x=_root.zero_x;_parent._y=_root.zero_y //ゼロの位置を追尾
・・バスターの消滅判定
このバスターは、「敵の残りライフがバスターのダメージ(属性による補正後)以上の場合」「敵のガード判定がある場合」に、バスターの消滅判定が付加される。「敵が無敵時間の場合」は、バスターの消滅判定が付加されない。
ASのファイル:zero_buster_attack_enemy.txt
else if(zero_buster_vanish_type=="enemy_life"){ //バスターの消滅判定のタイプが「敵の残りライフのみ」の場合
if(Math.abs(enemy_hit_attack)<=_root.enemy_identify[i-1] or enemy_guard==1){zero_buster_vanish=1} //敵の残りライフがバスターのダメージ(属性による補正後)以上の場合,敵のガード判定がある場合,バスターの消滅判定
}
・・バスターの消滅判定
このバスターは、「ゼロが
被ダメージ状態・
拘束状態」「ゼロのライフが0になる」のいずれかの場合に消滅判定が付加される。
ASのファイル:zero_ex_buster_ice_icicle_and_crystal_charge.txt
if(_root.zero_action=="damage" or _root.zero_action=="bind" or _root.zero_life==0){zero_buster_vanish=1} //ゼロが被ダメージ状態・拘束状態の場合,ゼロのライフが0の場合,バスターの消滅判定
最終更新:2020年12月19日 09:32