・コンセプト

・・概要

 「壁蹴りキラー」として制作した。なので、壁蹴りを多用すると攻撃の回避が困難になると思われる。ただし、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ソニックに移行
 

・開始直後の待機

・・概要

 このボスに特有のアクションの状態である。
 特定の条件が満たされた場合は、ノックバックに移行する。「・ボスと攻撃との接触判定がある場合の処理」の「・・ノックバックへの移行」を参照。

・ジャンプ

・・概要

 「ボスの次のアクションの状態」によって、処理の内容が変化する。

 特定の条件が満たされた場合は、ノックバックに移行する。「・ボスと攻撃との接触判定がある場合の処理」の「・・ノックバックへの移行」を参照。

・・他のアクションへの移行

 ジャンプ後にダッシュ斬りに移行する場合は、床との接触判定がある場合に、ダッシュ斬りに移行する。
 ジャンプ中にエアダッシュ斬りに移行する場合は、ボスのy方向の速度が0以上の場合(上昇から落下に移行した場合)に、エアダッシュ斬りに移行する。

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の後の場合は、ダッシュ斬りに移行する。

・ソニック

・・概要

 ガード判定があるソニックを発射する。ソニックは、壁・ボスとの接触判定がある場合に分裂する。

 EXの後の場合は、ダッシュ斬りに移行する。

↓ソニック。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ソニック。タイミング良くダッシュ壁蹴りをして回避する。

・・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