・コンセプト

・・概要

 原作の賢将ハルピュイア(通称「ピュンパ」)の強化版(?)。「気象操作能力」を利用する。
 個人的には、ピュンパのような飛行可能なボスに関しては、広めのフィールドで動き回らせてこそ面白くなると考えている。

 「いかに労力をかけずにボスを制作するか」という試みのつもりだったが、プログラム面では苦労した。
 「ボス本体のAA」も「攻撃のAA」も極めてシンプル。

・・アドリブ性の要求

 「定期的に変化する風向」の影響もあり、このボスの攻撃の回避にはアドリブ性が要求される

 「ワープ斬撃」における、ボスの出現する位置にはランダム性がある。出現位置を把握し、反撃をすることで、ダウンに移行させることができる(ただし、風向には要注意)。

 ゼロの位置取りに関して、画面の中央は床の高さが低いため、ボスに攻撃をヒットさせ難くなる。…が、ボスの攻撃(特にダッシュのソニック)を回避しやすくなる
 画面端は、その逆になる上に、ボスのワープ斬撃の吹き飛ばしにより落下しやすくなる。…が、逆に、ボスを落下させるチャンスも生じる。
 …といったように、メリット・デメリットが混在している。

 原作(ロックマンゼロ1)とは異なり、弱点属性で攻撃しても、パターンハメはできない。

・・バランス調整

 回避が困難な攻撃もあるが、全体的に、ダメージを低くすることでバランスをとっている。

 このボスは、飛行しており(かつ、ゼロが接近すると後退する)、定期的にガードをするので、攻撃をヒットさせにくい。その代わり、ダウンの時間を長めにすることでバランスをとっている

 ボスのライフが減少した場合は、一部の攻撃の範囲や攻撃力が変化する。

・ガード用のMC

・・ガード用のMCの出現

 loadの処理において、ガード用のMCを出現させる

ASのファイル:boss_pyunpa_load.txt
 
enemy_appearance_name="boss_pyunpa_guard"
#include "zero_AS/enemy/enemy_appearance.txt"
︙
guard_MC=enemy	//参照先を変数に保存
 

・・ガード用のMC

 ガード用のMCは、ボスのMCから「ボスのガード判定」などの値を取得する。そして、それに基づいて、hitrectを変化させる

↓ガード用のMCのhitrect。「boss_pyunpa_guard_hitrect_normal」「boss_pyunpa_guard_hitrect_none」を交互に示す。

ASのファイル:boss_pyunpa_guard.txt
 
		//ボスのMCから値を取得
		boss_guard=boss_MC.enemy_hitrect.boss_guard
		enemy_direction=boss_MC.enemy_hitrect.enemy_direction
 
		if(boss_guard==1){this.gotoAndStop("boss_pyunpa_guard_hitrect_normal")}	//ボスがガード状態の場合
		else{this.gotoAndStop("boss_pyunpa_guard_hitrect_none")}	//ボスがガード状態ではない場合
 

・重力加速度の付加

 特定のアクションの状態の場合は、重力加速度を付加する。

ASのファイル:boss_pyunpa.txt
 
		if(_root.boss_action=="damage_falling_1" or _root.boss_action=="damage_falling_2" or _root.boss_action=="damage_falling_ice"){_root.velocity_boss_y+=_root.gravity}	//特定のアクションの状態の場合,重力加速度を付加
 

・hitrect

 ワープ斬撃の場合は、ある程度透明化している場合、hitrectを「インスタンス名を設定していないhitrect」に変更する。この処理により、ゼロの攻撃などは、ボスのhitrectとの接触判定を取得しないようになる

↓ワープ斬撃の場合・ある程度透明化している場合のhitrect(インスタンス名を設定していない)。

ASのファイル:boss_pyunpa.txt
 
		else if(_root.boss_action=="warp_slash" and _parent._alpha<20){this.gotoAndStop("boss_pyunpa_hitrect_none")}	//ワープ斬撃の場合・ある程度透明化している場合,接触判定を取得しない
 

・画面下に落下した場合

・・ダメージ落下(氷)以外

 ダメージ落下(氷)以外の場合は、上昇攻撃(1)に移行する。

ASのファイル:boss_pyunpa.txt
 
		if(_parent._y>=230 and _root.boss_action!="rizing_attack_1" and _root.boss_action!="damage_falling_ice"){	//画面下に落下した場合(ダメージ落下(氷)以外)_root.boss_action="rizing_attack_1"	//上昇攻撃(1)に移行
		}
 

・・ダメージ落下(氷)

 ダメージ落下(氷)の場合は、破壊判定を付加する(つまり、ボスは即死する)
 これぞ、弱点の利用法の真骨頂。ただし、これを狙って実行するのは結構難しいかもしれない。

↓ダメージ落下(氷)→破壊判定の付加。

ASのファイル:boss_pyunpa.txt
 
		else if(_parent._y>=270 and _root.boss_action=="damage_falling_ice"){_root.enemy_identify[number_enemy-1]=0;enemy_break="buster"}	//画面下に落下した場合(ダメージ落下(氷)),破壊判定を付加
 

・各種地形との接触判定

 各種地形との接触判定は、ワープ斬撃以外の場合に取得する(=ワープ斬撃の場合は、各種地形との接触判定を取得しない)。

ASのファイル:boss_pyunpa.txt
 
		if(_root.boss_action!="warp_slash"){	//ワープ斬撃以外の場合}
		else{hit_floor=0;hit_sloped_floor=0;hit_wall_right=0;hit_wall_left=0}	//ワープ斬撃の場合
 

・通常状態

・・風向の変化

 風向変化用のカウントの値に応じて、風向を変化させる。
 カウントが特定の値の場合は、カウントをリセットする。

ASのファイル:boss_pyunpa_action_normal.txt
 
if(count_boss_time==1){	//カウントが1の場合
	count_boss_wind_direction_change++	//風向変化用のカウントを増加させる
	if(count_boss_wind_direction_change==1){_root.velocity_wind_conveyor_x[1-1]=0}	//風向を変化させる
	else if(count_boss_wind_direction_change==2){_root.velocity_wind_conveyor_x[1-1]=1}else if(count_boss_wind_direction_change==6){count_boss_wind_direction_change=0}	//カウントをリセット}
 

・・ガード

 ガード用のカウントが最大値の場合は、ガード状態となる。

ASのファイル:boss_pyunpa_action_normal.txt
 
if(count_boss_time==1){	//カウントが1の場合
︙
	count_boss_guard++	//ガード用のカウントを増加させる
}
 

ASのファイル:boss_pyunpa_action_normal.txt
 
if(count_boss_guard==count_boss_guard_max and count_boss_time>=count_boss_wait_time_max*1/4 and count_boss_time<count_boss_wait_time_max){boss_guard=1}	//ガード用のカウントが最大値の場合,ガード状態(カウントが特定の範囲内の場合)
else{boss_guard=0}	//ガード状態を解除
 

・・速度

 このボスは、通常状態においても速度が付加される。
 遠距離・中距離の場合は、ゼロの方向に速度が付加される。
 ゼロとの距離が近距離の場合は、ゼロと逆側の方向に速度が付加される。これにより、ジャンプセイバー(非チャージ)をヒットさせることが困難になる。

ASのファイル:boss_pyunpa_action_normal.txt
 
		if(Math.abs(_root.zero_x-_parent._x)<60 and _root.zero_y-_parent._y<60){_root.velocity_boss_x=-velocity_boss_fly_x_3*enemy_direction}	//近距離
 

・・乱数でアクションを選択

 カウントが最大値の場合は、乱数でアクションを選択する。

 このボスは、各種のアクションの後に「待機時間の最大値の変更」の処理を行う。つまり、このボスの待機時間は一定ではない

・・EX雷撃への移行

 ライフが1/2以下の場合は、EX雷撃に移行する。

・位置調整

・・概要

 初期位置(y方向)まで位置調整を行い、通常状態に移行する。

・ダッシュ

・・概要

 横方向にダッシュする。同時に、下方向にソニックを発射する。

 ゼロが近接している場合は、この攻撃を選択する確率が上がる。
 ダッシュの後は、待機時間の最大値が短くなる。連続でダッシュする場合もあるので要警戒。

↓ダッシュ。

・・ソニック

 ソニックは、ボスから伝達された各種情報に基づいて、位置調整・速度の設定・スケール変化などを行う。
 これは、他のアクションにおいて発射されるソニックに関しても同様である。

・落下攻撃(1)

・・概要

 垂直に落下し、床・傾斜床との接触判定がある場合は、左右にソニックを出現させる。その後、上昇攻撃(1)に移行する。

↓落下攻撃(1)→上昇攻撃(1)。

・・ソニック

 風向によりソニックのスケールや攻撃力が変化する。(ソニックの方向を基準として)「追い風」の場合は、やや横長になり、攻撃力が上がる。「向かい風」の場合は、やや縦長になり、攻撃力が下がる。
 落下攻撃(2)、上昇攻撃(1)(2)、斬撃においても、同様の処理を行っている。

・落下攻撃(2)

・・概要

 斜めに落下し、ゼロがy方向に近接した場合は、ボスの向いている方向にソニックを出現させる。その後、上昇攻撃(2)に移行する。

↓落下攻撃(2)→上昇攻撃(2)。

・上昇攻撃(1)

・・概要

 垂直に上昇し、ゼロがy方向に近接した場合、または、ゼロが下にいる場合に、左右にソニックを出現させる。その後、位置調整に移行する。

・上昇攻撃(2)

・・概要

 斜めに上昇し、ゼロがy方向に近接した場合、または、ゼロが下にいる場合に、ボスの向いている方向にソニックを出現させる。その後、位置調整に移行する。

・斬撃

・・概要

 通称「ピュンパ斬り」。3連続でソニックを発射する。ついでにボイスも発射する。
 原作とは異なり、途中で振り向くことができる(賢い!さすが賢将!)ので後ろに回り込んでも無駄

↓斬撃。地形の影響により、回避の難易度がやや上がっている。

・・ボイス・ソニックの出現

 記述は纏めて行っている。
・カウントが1の場合、斬撃の前動作のモーションに移行する。
・カウントが「斬撃の前動作の時間の最大値」の場合、斬撃(1)のモーションに移行する。また、「斬撃の回数」を「1」と設定する。そして、ボイス・ソニックを出現させ、「斬撃の回数」などの値を伝達する。
・カウントが「斬撃(1)(2)の時間の最大値」の場合も、上記と同様の処理を行う。

ASのファイル:boss_pyunpa_action_slash.txt
 
else if(count_boss_time==count_boss_time_slash_previous_motion_max or count_boss_time==count_boss_time_slash_1_max or count_boss_time==count_boss_time_slash_2_max){	//カウントが特定の値の場合,斬撃(1)(2)(3)に移行
	if(count_boss_time==count_boss_time_slash_previous_motion_max){_parent.boss_pyunpa_AA.gotoAndStop("boss_pyunpa_AA_slash_1");count_boss_slash=1}
	else if(count_boss_time==count_boss_time_slash_1_max){_parent.boss_pyunpa_AA.gotoAndStop("boss_pyunpa_AA_slash_2");count_boss_slash=2}
	else if(count_boss_time==count_boss_time_slash_2_max){_parent.boss_pyunpa_AA.gotoAndStop("boss_pyunpa_AA_slash_3");count_boss_slash=3}
	enemy_appearance_name="boss_pyunpa_voice"
	#include "zero_AS/enemy/enemy_appearance.txt"
	enemy.enemy_hitrect.count_boss_slash=count_boss_slash	//斬撃の回数を伝達
	enemy_appearance_name="boss_pyunpa_sonic"
	#include "zero_AS/enemy/enemy_appearance.txt"
	enemy.enemy_hitrect.enemy_direction=enemy_direction	//方向を伝達
	enemy.enemy_hitrect.boss_action=_root.boss_action	//ボスのアクションの状態を伝達
	enemy.enemy_hitrect.count_boss_slash=count_boss_slash	//斬撃の回数を伝達
}
 

・・乱数でアクションを選択

 カウントが「斬撃(3)の時間の最大値」の場合は、乱数でアクションを選択する。

・・ボイス

 「ピュッ」などの文字を上方向に発射する。ボスのライフの減少に応じて、スケール変化の値や敵の攻撃のダメージが増加する。また、連鎖値を高く設定している。

 この攻撃や風などが原因で、ボスの後ろに回り込むことは困難になる。

・・ソニック

 「斬撃の回数」が「3」の場合は、スケールが大きくなり、ダメージが増加する。

・ワープ斬撃

・・概要

 透明化した後、ゼロの周囲にワープし、攻撃を行う。

↓ワープ斬撃。

・・乱数で角度・方向を選択

 乱数で角度・方向を選択する。

・・ワープ判定がない場合

 ワープ判定がない場合は、透明度を変化させ、透明化した場合は、ワープ判定を付加する。その後、角度・方向の値に応じて、ゼロの周囲にワープする。

ASのファイル:boss_pyunpa_action_warp_slash.txt
 
		_parent._x=_root.zero_x+distance_boss_warp_slash_zero*Math.cos(radian_boss_warp_slash);_parent._y=_root.zero_y+distance_boss_warp_slash_zero*Math.sin(radian_boss_warp_slash)	//ワープ
 

・・ワープ判定がある場合

 ワープ判定がある場合は、透明度を変化させる。その後、位置調整に移行する。

・・ワープ斬撃

 ボスのライフの減少に応じて、スケールが変化する。

 特定の透明度の範囲で、ゼロとの接触判定がある場合は、ワープ斬撃の吹き飛ばし用のMCを出現させる

ASのファイル:boss_pyunpa_warp_slash.txt
 
			if(_parent._alpha>=20 and _parent._alpha<=40 and boss_pyunpa_warp_slash_blow_appearance==0 and hit_zero!=0){	//特定の透明度の範囲内の場合・ゼロとの接触判定がある場合
				boss_pyunpa_warp_slash_blow_appearance=1	//ワープ斬撃の吹き飛ばし用のMCの出現判定
				enemy_appearance_name="boss_pyunpa_warp_slash_blow"
				#include "zero_AS/enemy/enemy_appearance.txt"}
 

・・吹き飛ばし用のMC

 吹き飛ばしの速度は、風向によって変化する
 また、ボディチップのアブソーバーで速度を低減できる。逆にライトを付けると速度が大きくなる。

ASのファイル:boss_pyunpa_warp_slash_blow.txt
 
	velocity_enemy_blow_x=6*enemy_direction+_root.velocity_wind_conveyor_x[1-1]	//吹き飛ばしの速度(x方向),風向によって変化
 

・サンダーボール

・・概要

 サンダーボールを発射する。
 サンダーボールは、ボスのライフの減少に応じて、スケールの最大値や敵の攻撃のダメージが変化する。

 サンダーボールは、以下のような挙動をする。
・「追尾」:低速でゼロを追尾する。ゼロが近接した場合は、停止に移行する。
・「停止」:停止する。カウントが最大値の場合は、直進に移行する。
・「直進」:高速で直進する。カウントが最大値の場合は、消滅判定を付加する。

 画面内に残し続けると、(ボスの次の攻撃が回避し難くなるなど)厄介なので、極力早いタイミングで近接して「停止」→「直進」に移行させたほうが良い。

↓サンダーボール。

・雷撃

・・概要

 雷撃を行う。ボス自身は、「雷撃の出現用のMC」を出現させる。

 雷撃は、根元の部分のhitrectが横長になっているため、「タイミング良くジャンプしつつ、(風がある場合は)横方向へ移動する」という回避法が推奨される。

↓雷撃のMC(一部)。灰色の矩形がhitrect。

↓雷撃。

・・雷撃の出現用のMC

 雷撃を出現させるためのMC。

 ボスのライフが減少した場合は、雷撃の個数を増加させる
 乱数でパターンを選択する。パターンは、「ゼロを狙う雷撃」「ゼロを挟む雷撃」の二種類。

・・雷撃

 ボスのライフの減少に応じて、x方向のスケールの最大値を増加させる
 loadの処理において、床・傾斜床との接触判定を取得し、位置調整を行う
 敵の攻撃のダメージは、カウントによって変化する

・EX雷撃

・・概要

 ロックマン系のアクションではお馴染みの攻撃(ダイナモマンとかダイナモとか)。

 「・雷撃」とほぼ同様の処理をしている。ただし、出現させるタイミング・個数などが異なる。

 この攻撃は、3回に分けて行われる。
・1回目:ゼロを狙う雷撃+周囲に等間隔で雷撃。
・2回目:1回目の雷撃の間を狙う電撃。
・3回目:ゼロの周囲をほぼ隙間なく狙う雷撃。

 風がある場合、3回目は、「風下」の方向にダッシュジャンプすれば回避できる。「風上」の方向の場合は回避できない(はず)。

↓EX雷撃。

 1回目・2回目を回避しつつ、風上に向かって移動し、3回目の出現位置を風上側に誘導しておかないと、詰む場合が出てくる。

↓EX雷撃(詰む場合)。このような状況に陥らないように、適切に誘導する必要がある。

 なお、「3回目が出現するまでの時間」は「2回目が出現するまでの時間」よりも長く設定している。これは、上記の「3回目の出現位置を風上側に誘導しておく」ための猶予である。

・ダメージ落下(1)

・・概要

 特定の条件でダメージを受けた場合の落下。
 床・傾斜床との接触判定がある場合は、乱数でアクションを選択する。

・ダメージ落下(2)

・・概要

 「・ダメージ落下(1)」とほぼ同様の処理をしている。
 床・傾斜床との接触判定がある場合は、ダウンに移行する。

・ダメージ落下(氷)

・・概要

 特定の条件で氷属性攻撃によるダメージを受けた場合の落下。
 床・傾斜床との接触判定がある場合は、ダウンに移行する。

↓ダメージ落下(氷)→ダウン。

・ダウン

・・概要

 ダウンする。
 大ダメージを与えるチャンスとなる。ただし、風向には要注意

・ボスと攻撃との接触判定がある場合の処理

・・ガード

 ガード状態の場合は、前方からの攻撃に対しては処理を行わない。
 これにより、プレイヤーのリズムを狂わせようとしてくる。

↓通常状態(ガード状態)。

↓通常状態(ガード状態)→ダメージ落下(2)→ダウン。ベクトルレーザー(チャージ)はガードを貫通できる。

・・ダメージ落下への移行

 「一定の値以上のダメージの攻撃」+「特定の条件」が満たされた場合は、各種のダメージ落下に移行する。

・ゼロの攻撃が氷属性であり、ボスのアクションの状態が「ダッシュ」「上昇攻撃(1)」「上昇攻撃(2)」「ワープ斬撃」の場合は、ダメージ落下(氷)に移行する。
・ボスがガード状態の場合、または、ゼロの攻撃が前方からのものであり、ボスのアクションの状態が「ワープ斬撃」の場合は、ダメージ落下(2)に移行する。
・ボスのアクションの状態が「通常状態」「上昇攻撃(1)」「上昇攻撃(2)」の場合は、ダメージ落下(1)に移行する。

最終更新:2020年12月19日 08:57