・概要

 バスターEXバスター(非チャージ)と共通する処理に関しては、そちらを参照。

・ベクトルレーザー(チャージ)

・・概要

 ベクトルレーザー(非チャージ)と共通している処理に関しては、詳細な解説を省略する。

 このバスターは、各種地形の影響で反射する(反射回数の上限あり)。反射の際には、新しい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}
	}
 

・・・角度など(オリジナル判定がない場合)

 オリジナル判定がない場合は、出現元のバスターから伝達された速度の情報に基づいて、角度などが設定される。角度の算出に関する参考サイト(https://hakuhin.jp/as/rotation.html)。
 また、透明度を変化させている。

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