// COM_10:相手が行動可能の時に特定間合いまで歩いて特定の行動をする
// 161104:一生歩き続ける不具合を修正
//-------------------------------------------------------------
// com動作生成

local comcount = 2; // 最大数
local com = CCom(comcount); // COM用オブジェクト

com.SetGuardAvg( 100 ); // ガード確率

local stmp = 0;
local mtmp = 0;

//--------------------------------------------------------------
{ // 何もしない
	stmp = com.GetSkill(0);
	stmp.checkfunc = function() // チェック
	{
		return 0;
	}
	stmp.updatefunc = function() // 採用時の更新
	{
		return 0;
	}

	// 
	mtmp = stmp.PlusMove(); // 動き追加
	mtmp.Set( 0, 0, 2, 0,  _eComMoveFlag_StickHold | _eComMoveFlag_MoveEnd );
}

// 相手が行動可能の時に特定の行動をする
//--------------------------------------------------------------
{ // 特定間合いまで歩いてジャンプ攻撃
	stmp = com.GetSkill(1);
	stmp.checkfunc = function() // チェック
	{
		local st = BCom.GetStatus();
		if( !st.IsPMoveable() ) return 0; // 行動可能じゃないとダメ
		if( !st.CheckEState( _eComState_MoveAble ) ) return 0; // 相手が行動可能じゃないとダメ
		if( !st.CheckPosState_Enemy( _PosState_Ground ) ) return 0; // 相手が地上じゃないとダメ
		
		if( st.GetMove() == 1 ) return 0; // 同じ行動中は採用しない
	
		return 10;
	}
	stmp.updatefunc = function() // 採用時の更新
	{
		local st = BCom.GetStatus();
		
		local tag = BCom.GetMoveTag();
		
		// 途中でダメージを受けたら抜ける
		if( st.IsPBound() == 1 )
		{
			BCom.Move_End(-1);
			return 0;
		}

		// 特定座標まで動く処理
		local xlen = st.GetELenX();
		local xpos = 100*128;
		local xmargin = 50*128;
		
		// 前後どっちに歩く？
		if( tag == "walk_f" || tag == "walk_jp" )
		{
			if( xlen <= xpos )
			{
				if( xlen <= xpos-xmargin )
				{
					BCom.Move_Jump("walk_b");
				}
				else
				{
					BCom.Move_Jump("jump_wait");
				}
			}
			else
			{
				BCom.Move_Jump("walk_f");
			}
		}
		else if( tag == "walk_b" || tag == "walk_jp" )
		{
			// 後ろ歩きの背後に相手がいると先に進まないので、いったんニュートラルで振り向きへ
			if( BMvTbl.CheckFurimuki() )
			{
				BCom.Move_Jump("walk_jp");
				return 1;
			}
			
			if( xlen >= xpos )
			{
				if( xlen >= xpos+xmargin )
				{
					BCom.Move_Jump("walk_f");
				}
				else
				{
					BCom.Move_Jump("jump_wait");
				}
			}
			else
			{
				// 端背負いだと先に進まないので、後方ステージが100ドット以下ならジャンプさせる
				if( Battle_Std.GetBackStageDistance() <= 100*128 )
				{
					BCom.Move_Jump("jump_wait");
				}
				else
				{
					BCom.Move_Jump("walk_b");
				}
			}
		}
		
		return 1;
	}

	// 特定の位置まで移動する処理
	mtmp = stmp.PlusMove(); // 動き追加
	mtmp.SetTag( "walk_jp" );
	mtmp.Set( 0, 0, 2, 0, 0 ); // 

	// 
	mtmp = stmp.PlusMove(); // 動き追加
	mtmp.SetTag( "walk_f" );
	mtmp.Set( 6, 0, 10, 0, 0 ); // 

	// 
	mtmp = stmp.PlusMove(); // 動き追加
	mtmp.SetTag( "walk_b" );
	mtmp.Set( 4, 0, 10, 0, 0 ); // 

	// 
	mtmp = stmp.PlusMove(); // 動き追加
	mtmp.SetTag( "jump_wait" );
	mtmp.Set( 0, 0, 10, 360, 0 ); // ウェイト

	// 
	mtmp = stmp.PlusMove(); // 動き追加
	mtmp.SetTag( "throw" );
	mtmp.Set( 0, _eComButton_A|_eComButton_D,  10, 0, 0 );
	
}

// 最後にglobal_com_tmpへ渡す
ComBase_GlobalComTmp_Set( com );

print("\n\n>専用com Loaded<\n")

