/*=== CB_V0200 =============================================================*/
/*                                                                          */
/*  このファイルには、ＳＵＢメッセージに応答する動作関数（ＳＵＢ関数）      */
/*                                                                          */
/*  のプログラムを記述します。基本的にプログラムの作成はユーザが行い        */
/*                                                                          */
/*  ますが、ＳＵＢメッセージとＳＵＢ関数の対応の管理は開発支援ツール        */
/*                                                                          */
/*  「キャラクタ・ビルダ」で行うことができます。本ファイルの 'CB_' で       */
/*                                                                          */
/*  始まる行はキャラクタ・ビルダにより作成されたものです。その行は絶対      */
/*                                                                          */
/*  に削除しないように注意して下さい。                                      */
/*                                                                          */
/*  mmp_sub.bat を実行すると分割コンパイルできます。                        */
/*                                                                          */
/*==========================================================================*/

/*..........  注意：次の２行の命令文は削除しないこと  .....*/

#define  EXTERN  extern

#include  "action.h"

/*..........  通常動作のリスト  ..........*/

CB_ MMP_FUNC_LIST  mmp_sub_list0[] =
CB_ {
CB_   SUB_直立,	Sub_直立,	/*  直立  */
CB_   SUB_前方歩行,	Sub_前方歩行,	/*  前方歩行  */
CB_   SUB_後方歩行,	Sub_後方歩行,	/*  後方歩行  */
CB_   SUB_ＪＵＭＰ,	Sub_ＪＵＭＰ,	/*  ジャンプ  */
CB_   SUB_不時着,	Sub_不時着,	/*  不時着  */
CB_   SUB_気絶,	Sub_気絶,	/*  気絶  */
CB_   SUB_勝利,	Sub_勝利,	/*  勝利  */
CB_   SUB_変身,	Sub_変身,	/*  変身  */
CB_   SUB_連続技,	Sub_連続技,	/*  連続技  */
CB_   END_OF_MFL
CB_ };

/*..........  攻撃動作のリスト  ..........*/

CB_ MMP_FUNC_LIST  mmp_sub_list1[] =
CB_ {
CB_   SUB_前後Ｊ技A,	Sub_前後Ｊ技A,	/*  強Ｐ／中ＫM  */
CB_   SUB_前後Ｊ技B,	Sub_前後Ｊ技B,	/*  弱Ｐ／弱ＫM  */
CB_   SUB_垂直Ｊ技A,	Sub_垂直Ｊ技A,	/*  中Ｋ  */
CB_   SUB_垂直Ｊ技B,	Sub_垂直Ｊ技B,	/*  弱Ｋ  */
CB_   SUB_空中必殺,	Sub_空中必殺,	/*  ボディカッター  */
CB_   END_OF_MFL
CB_ };

/*..........  各キャラ固有の静的変数  .....*/

CB_ /*T_LOCAL_STATIC_VARS*/
CB_ /*E_LOCAL_STATIC_VARS*/

/*--------------------------------------------------------------------------
  ロード時の処理
  --------------------------------------------------------------------------*/
CB_ void  Sub__ロード()
CB_ {
CB_   /*..........  ここに各キャラ固有のプログラムを記述できます  .....*/
CB_ }
CB_ /*E_DC_FUNC*/

/*--------------------------------------------------------------------------
  'OPT_初期化' メッセージ受信時の処理
  --------------------------------------------------------------------------*/
CB_ void  Sub__初期化( int p1, int p2 )
CB_ {
CB_   Mmp登録_動作関数２( p1, MMP_TYPE_SUB, mmp_sub_list0 );
CB_   Mmp登録_動作関数２( p1, MMP_TYPE_SUB, mmp_sub_list1 );
CB_   /*..........  ここに各キャラ固有のプログラムを記述できます  .....*/
CB_ }
CB_ /*E_DC_FUNC*/


/*==========================================================================================*/
  void   Sub_変身( int p1, int p2 )
/*==========================================================================================*/
{
  short  c = カウンタ設定_初期値( p1, 22 ) ;

  if(  c >= 22  )
  {
    Pal設定_身体変身色( p1, 1 );  /*  自分の体の色を変身時の色にする  */
    攻撃設定_最多ヒット数( p1, 1 );
    攻撃設定_ヒット情報( p1, HIT_ストレート );
    セル設定_表示( p1, CELL_変身 );
    音声再生_標準( p1, 2, PCM_変身声 ); 
  }
  else  if(  c >= 16  )
  {
    セル設定_表示( p1, CELL_変身 );
    攻撃設定_ヒット情報( p1, HIT_ストレート );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_直立0 );
    攻撃設定_ヒット情報( p1, HIT_OFF );
  }


}


/*--------------------------------------------------  ストレート  ---*/
CB_ void  Sub_前後Ｊ技B( int p1, int p2 )
CB_ {

  short  c = カウンタ設定_初期値( p1, 22 ) ;
  
  if(  c >= 22  )
  {
    if(  状態取得_変身( p1 )  )  音声再生_標準( p1, 1, PCM_変身中 );   /* 変身中の処理  */
    
    音声再生_標準( p1, 0, PCM_振り2 );
    
    攻撃設定_最多ヒット数( p1, 1 );
    攻撃設定_ヒット情報( p1, HIT_OFF );
    
    セル設定_表示( p1, CELL_前後Ｊ技A0 );
  }
  else  if(  c >= 18  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技A0 );
  }
  else  if(  c >= 17  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技A1 );
    
    攻撃設定_ヒット情報( p1, HIT_ストレート );
    攻撃設定_必殺技キャンセル( p1, ON );
  }
  else  if(  c >= 8  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技A1 );
    
    攻撃設定_ヒット情報( p1, HIT_ストレート );
    攻撃設定_必殺技キャンセル( p1, OFF );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技A0 );
  }
  else
  {
    セル設定_表示( p1, CELL_前後Ｊ技A0 );
    
    同期完了_複合攻撃( p1);  /*  ジャンプ状態に戻す  */
  }

CB_ }
CB_ /*E_MMP_FUNC*/

/*----------------------------------------------------------飛び横蹴り----------*/
CB_ void  Sub_前後Ｊ技A( int p1, int p2 )
CB_ {

  short  c = カウンタ設定_初期値( p1, 22 ) ;
  
  if(  c >= 22  )
  {
    if(  状態取得_変身( p1 )  )  音声再生_標準( p1, 1, PCM_変身中 );  /*  変身中の処理  */
    
    音声再生_標準( p1, 0, PCM_振り2 );
    
    攻撃設定_最多ヒット数( p1, 1 );
    攻撃設定_ヒット情報( p1, HIT_OFF );
    セル設定_表示( p1, CELL_前後Ｊ技B0 );
  }
  else  if(  c >= 18  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技B0 );
  }
  else  if(  c >= 13  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技B1 );
    
    攻撃設定_ヒット情報( p1, HIT_飛び横蹴り );
    攻撃設定_必殺技キャンセル( p1, ON );
  }
  else  if(  c >= 8  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技B1 );
    
    攻撃設定_ヒット情報( p1, HIT_飛び横蹴り );
    攻撃設定_必殺技キャンセル( p1, OFF );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技B0 );
  }
  else
  {
    セル設定_表示( p1, CELL_前後Ｊ技B0 );
    
    同期完了_複合攻撃( p1);  /*  普通のジャンプ状態に戻す  */
  }

CB_ }
CB_ /*E_MMP_FUNC*/

/*--------------------------------------------------------ストレート-------*/
CB_ void  Sub_垂直Ｊ技B( int p1, int p2 )
CB_ {

  short  c = カウンタ設定_初期値( p1, 22 ) ;
  
  if(  c >= 22  )
  {
    if(  状態取得_変身( p1 )  )  音声再生_標準( p1, 1, PCM_変身中 );  /*  変身中の処理  */
    
    音声再生_標準( p1, 0, PCM_振り2 );
    
    攻撃設定_最多ヒット数( p1, 1 );
    攻撃設定_ヒット情報( p1, HIT_OFF );
    セル設定_表示( p1, CELL_前後Ｊ技A0 );
  }
  else  if(  c >= 18  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技A0 );
  }
  else  if(  c >= 13  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技A1 );
    
    攻撃設定_ヒット情報( p1, HIT_ストレート );
    攻撃設定_必殺技キャンセル( p1, ON );
  }
  else  if(  c >= 8  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技A1 );
    
    攻撃設定_ヒット情報( p1, HIT_ストレート );
    攻撃設定_必殺技キャンセル( p1, OFF );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_前後Ｊ技A0 );
  }
  else
  {
    セル設定_表示( p1, CELL_前後Ｊ技A0 );
    
    同期完了_複合攻撃( p1);  /*  ジャンプ状態に戻す  */
  }

CB_ }
CB_ /*E_MMP_FUNC*/

/*----------------------------------------------------------旋風脚---------*/
CB_ void  Sub_垂直Ｊ技A( int p1, int p2 )
CB_ {


  short  c = カウンタ設定_初期値( p1, 27 ) ;
  
  if(  c >= 27  )
  {
    if(  状態取得_変身( p1 )  )  音声再生_標準( p1, 1, PCM_変身中 );  /*  変身中の処理  */
    
    音声再生_標準( p1, 0, PCM_振り2 );
    
    攻撃設定_最多ヒット数( p1, 1 );
    攻撃設定_ヒット情報( p1, HIT_OFF );
    セル設定_表示( p1, CELL_垂直Ｊ技B0 );
  }
  else  if(  c >= 24  )
  {
    セル設定_表示( p1, CELL_垂直Ｊ技B0 );
  }
  else  if(  c >= 20  )
  {
    セル設定_表示( p1, CELL_垂直Ｊ技B1 );
  }
  else  if(  c >= 14  )
  {
    セル設定_表示( p1, CELL_垂直Ｊ技B2 );
    
    攻撃設定_ヒット情報( p1, HIT_旋風脚 );
    攻撃設定_必殺技キャンセル( p1, ON );
  }
  else  if(  c >= 8  )
  {
    セル設定_表示( p1, CELL_垂直Ｊ技B2 );
    
    攻撃設定_ヒット情報( p1, HIT_旋風脚 );
    攻撃設定_必殺技キャンセル( p1, OFF );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_垂直Ｊ技B3 );
  }
  else
  {
    セル設定_表示( p1, CELL_垂直Ｊ技B3 );
    
    同期完了_複合攻撃( p1);  /*  ジャンプ状態に戻す  */
  }

CB_ }
CB_ /*E_MMP_FUNC*/












/*---------------------------------------------------------------------------*/
CB_ void  Sub_空中必殺( int p1, int p2 )
CB_ {

  static  short  c0 ;  /*  特別な処理をさせるので、静的変数を確保する  */
  
  short  c = カウンタ設定_初期値( p1, 48 ) ;
  
  Cmd設定_超技( p1, OFF );  /*  ＣＰＵが勝手にスパコン扱いしてしまうのを防ぐ  */

  if(  攻撃取得_威力レベル( p1 ) == LEVEL_小  ) 空中竜巻状態=0; else 空中竜巻状態=1;

  if(  c >= 48  )
  {
    状態設定_無敵( p1 , IVC_通常, 0 );  /*  必殺技は最初、無敵状態にされているので解除する  */
    
    攻撃設定_最多ヒット数( p1, 3 );
    
    c0 = 0 ;
    
    音声再生_標準( p1, 2, PCM_必殺技M ); 
      
    セル設定_表示( p1, CELL_垂直Ｊ技B0 );  /*  垂直ジャンプから流用  */
  }
  else  if(  c >= 47  )
  {
    座標設定_移動( p1, 1 , 0,DRCT_前 );
    
    座標設定_移動( p1, 0, -5 , DRCT_中 );  /*  上昇  */
    
    セル設定_表示( p1, CELL_垂直Ｊ技B0 );  /*  垂直ジャンプから流用  */
    
      if(  攻撃取得_威力レベル( p1 ) == LEVEL_小  )  カウンタ設定_現在値( p1, 26 );
              /*  Ｂボタンの場合、回転時間を減らすためにカウンタの値を少なくしてやる  */

  }
  else  if(  c >= 5  )
  {
          if(  c0 < 2  )  座標設定_移動２( p1, 0, 0, DRCT_前, 2 );  /*  速度を微調整する  */
    else  if(  c0 < 5  )  座標設定_移動(   p1, 1    , 0,DRCT_前 );
    else  if(  c0 < 7  )  座標設定_移動(   p1, 1    , 0,DRCT_前 );
    else                  座標設定_移動(   p1, 1    , 0,DRCT_前 );
    
          if(  c0 < 2  )  セル設定_表示( p1, CELL_必殺技Ｍ0 );  /*  回転パターン  */
    else  if(  c0 < 5  )  セル設定_表示( p1, CELL_必殺技Ｍ1 );
    else  if(  c0 < 7  )  セル設定_表示( p1, CELL_必殺技Ｍ2 );
    else                  セル設定_表示( p1, CELL_必殺技Ｍ3 );
    
    if(  c0 == 0  ||  c0 == 5  )  /*  C0=0,5 の２点だけに攻撃判定を持たせる  */
    {
      音声再生_標準( p1, 0, PCM_振り2 );
      
      攻撃設定_ヒット情報( p1, HIT_竜巻旋風脚 );
    }
    else {  攻撃設定_ヒット情報( p1, HIT_OFF ); }
    
    if(  ( ++ c0 ) >= 10  )  c0 = 0 ;  /*  静的変数を回す  */
  }
  else  if(  c >= 4  ) /* 着地 */
  {
    座標設定_移動２( p1, 0, 0, DRCT_前, 2 );
    
    座標設定_移動( p1, 0, 4 , DRCT_中 );
    
    セル設定_表示( p1, CELL_垂直Ｊ技B0 );
    
    if(  座標取得_Ｙ( p1 ) < BASE_LINE  )  カウンタ設定_値維持( p1 );
                              /*  着地するまでカウンタの自動デクリメントをキャンセルする  */
  }
  else  if(  c >= 3  )
  {
    座標設定_Ｙ( p1, BASE_LINE );  /*  自分の体の高さを、確実に地面に合わせる  */
    
    セル設定_表示( p1, CELL_着地 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_着地 );
  }
  else
  {
    音声再生_標準( p1, 0, PCM_着地 );
    
    セル設定_表示( p1, CELL_着地 );
    
    同期完了_攻撃( p1);
  }


CB_ }
CB_ /*E_MMP_FUNC*/











/*--------------------------------------------------------------------------
  直立
  --------------------------------------------------------------------------*/
CB_ void  Sub_直立( int p1, int p2 )
CB_ {

  /*..........  直立  ..........*/
  
  static  short  c = 1 ;

  short  cell_id ;

if( 場面取得_エンディング() && セル消滅対策==-1 ){ /* セル消滅対策 */
   Pcg転送_セル画像( p1, CELL_直立0 ,PCG_BLK_身体１, 0, 32 );
   Pcg転送_セル画像( p1, CELL_直立0 ,PCG_BLK_身体２, 0, 32 );
}

        if(  c <=  7  )  cell_id = CELL_直立0 ;
  else  if(  c <= 16  )  cell_id = CELL_直立1 ;
  else  if(  c <= 24  )  cell_id = CELL_直立2 ;
  else                   cell_id = CELL_直立3 ;
  
  セル設定_表示( p1, cell_id );

  if(  ( ++ c ) > 32  )  c = 1 ;


CB_ }
CB_ /*E_MMP_FUNC*/

/*--------------------------------------------------------------------------
  前方歩行
  --------------------------------------------------------------------------*/
CB_ void  Sub_前方歩行( int p1, int p2 )
CB_ {

  /*..........  前方歩行  ..........*/
  
  static  short  c = 1 ;
  
  short  cell_id ;
  
        if(  c <=  6  )  cell_id = CELL_歩行0 ;
  else  if(  c <= 12  )  cell_id = CELL_歩行1 ;
  else  if(  c <= 18  )  cell_id = CELL_歩行2 ;
  else  if(  c <= 24  )  cell_id = CELL_歩行3 ;
  else                   cell_id = CELL_歩行4 ;
  
  座標設定_移動( p1, 1, 0, DRCT_前 );
  
  セル設定_表示( p1, cell_id );
  
  if(  ( ++ c ) > 30  )  c = 1 ;

CB_ }
CB_ /*E_MMP_FUNC*/

/*--------------------------------------------------------------------------
  後方歩行
  --------------------------------------------------------------------------*/
CB_ void  Sub_後方歩行( int p1, int p2 )
CB_ {

  /*..........  後方歩行  ..........*/
  
  static  short  c = 1 ;
  
  short  cell_id ;
  
        if(  c <=  6  )  cell_id = CELL_歩行4 ;
  else  if(  c <= 12  )  cell_id = CELL_歩行3 ;
  else  if(  c <= 18  )  cell_id = CELL_歩行2 ;
  else  if(  c <= 24  )  cell_id = CELL_歩行1 ;
  else                   cell_id = CELL_歩行0 ;
  
  座標設定_移動２( p1, 0, 0, DRCT_後, 2 );
  
  セル設定_表示( p1, cell_id );
  
  if(  ( ++ c ) > 30  )  c = 1 ;

CB_ }
CB_ /*E_MMP_FUNC*/

/*--------------------------------------------------------------------------
  ジャンプ
  --------------------------------------------------------------------------*/
CB_ void  Sub_ＪＵＭＰ( int p1, int p2 )
CB_ {



  short  y = 座標取得_Ｙ( p1 ) ;
  
  if(  空中竜巻状態 != 0  )  /*  空中竜巻旋風脚の状態では、ジャンプ処理を    */
                             /*  キャンセルさせる。これは、ジャンプの軌道に  */
                             /*  影響されないようにするためである。           */
  {
    空中竜巻状態 = 0 ;  /*  空中竜巻状態変数のクリアは空中竜巻のアクション関数内で        */
                        /*  行うべきでない。なぜなら、空中竜巻は完全無敵でないので、      */
                        /*  追撃されアボートしてしまう可能性があるからだ。よって          */
                        /*  空中竜巻中は毎サイクル、空中竜巻状態変数をここでクリアする。  */
    
    return;  /*  リターン  */
  }
  
  switch(  同期取得_動作過程( p1 )  )  /*  システムが保持する動作過程変数に応じて処理内容を決める  */
  {
    case  0 :  /*  上昇中  */
      
      座標設定_移動( p1, 1 , 0, DRCT_動作 );  /*  ジャンプ方向に向かって 1 ドット移動  */
      
            if(  y > BASE_LINE-68  )  座標設定_移動( p1, 0, -6 , DRCT_中 );  /*  高さに応じた上昇速度  */
      else  if(  y > BASE_LINE-80  )  座標設定_移動( p1, 0, -4 , DRCT_中 );
      else  if(  y > BASE_LINE-90  )  座標設定_移動( p1, 0, -3 , DRCT_中 );
      else  if(  y > BASE_LINE-96  )  座標設定_移動( p1, 0, -2 , DRCT_中 );
      else                            同期進行_動作過程( p1 );  /*  頂点に達したら次の操作過程  */
      
      if(  状態取得_複合攻撃動作( p1 ) == OFF  )  /*  何も攻撃技を出していない場合のみ、セルを設定  */
      {
        if(  状態取得_ジャンプ方向( p1 ) == DRCT_中  )
        {
                if(  y > BASE_LINE-48  )  セル設定_表示( p1, CELL_ジャンプ0 );
          else  if(  y > BASE_LINE-56  )  セル設定_表示( p1, CELL_ジャンプ1 );
          else                            セル設定_表示( p1, CELL_ジャンプ2 );
        }
        else  if(  状態取得_ジャンプ方向( p1 ) == DRCT_前  )
        {
                if(  y > BASE_LINE-78  )  セル設定_表示( p1, CELL_前方ジャンプ0 );
          else  if(  y > BASE_LINE-86  )  セル設定_表示( p1, CELL_前方ジャンプ1 );
          else  if(  y > BASE_LINE-92  )  セル設定_表示( p1, CELL_前方ジャンプ2 );
          else                            セル設定_表示( p1, CELL_前方ジャンプ3 );
        }
        else
        {
                if(  y > BASE_LINE-86  )  セル設定_表示( p1, CELL_後方ジャンプ0 );
          else  if(  y > BASE_LINE-92  )  セル設定_表示( p1, CELL_後方ジャンプ1 );
          else                            セル設定_表示( p1, CELL_後方ジャンプ2 );
        }
      }
      
      break;
      
    case  1 :  /*  下降中  */
      
      座標設定_移動( p1, 1 , 0, DRCT_動作 );
      
            if(  BASE_LINE- 90 > y  )  座標設定_移動( p1, 0, 1 , DRCT_中 );  /*  高さに応じた下降速度  */
      else  if(  BASE_LINE- 80 > y  )  座標設定_移動( p1, 0, 2 , DRCT_中 );
      else  if(  BASE_LINE- 68 > y  )  座標設定_移動( p1, 0, 4 , DRCT_中 );
      else  if(  BASE_LINE     > y  )  座標設定_移動( p1, 0, 6 , DRCT_中 );
      else  /*  着地した場合  */
      {
        セル設定_表示( p1, CELL_着地 );
        
        音声再生_標準( p1, 0, PCM_着地 );
        
        カウンタ設定_現在値( p1, 4 );  /*  着地後の隙は 4 サイクルにする  */
        
        同期進行_ジャンプ着地( p1 );  /*  ジャンプが終了し着地したことを、システムに通知する  */
        
        同期進行_動作過程( p1 );  /*  次の動作過程に進行させる  */
        
        break;
      }
      
      if(  状態取得_複合攻撃動作( p1 ) == OFF  )  /*  何も攻撃技を出していない場合のみ、セルを設定  */
      {
        if(  状態取得_ジャンプ方向( p1 ) == DRCT_中  )
        {
                if(  BASE_LINE- 92 > y  )  セル設定_表示( p1, CELL_ジャンプ2 );
          else  if(  BASE_LINE- 86 > y  )  セル設定_表示( p1, CELL_ジャンプ3 );
          else                             セル設定_表示( p1, CELL_ジャンプ0 );
        }
        else  if(  状態取得_ジャンプ方向( p1 ) == DRCT_前  )
        {
                if(  BASE_LINE- 92 > y  )  セル設定_表示( p1, CELL_前方ジャンプ4 );
          else  if(  BASE_LINE- 86 > y  )  セル設定_表示( p1, CELL_前方ジャンプ5 );
          else                             セル設定_表示( p1, CELL_前方ジャンプ6 );
        }
        else
        {
                if(  BASE_LINE- 92 > y  )  セル設定_表示( p1, CELL_後方ジャンプ3 );
          else  if(  BASE_LINE- 86 > y  )  セル設定_表示( p1, CELL_後方ジャンプ4 );
          else                             セル設定_表示( p1, CELL_後方ジャンプ5 );
        }
      }
      
      break;
      
    default :
      
      セル設定_表示( p1, CELL_着地 );
      
      if(  カウンタ設定_値減少( p1 ) == 0  )  同期完了_攻撃( p1);  /*  着地後の隙  */
      
      break;
  }



CB_ }
CB_ /*E_MMP_FUNC*/

/*--------------------------------------------------------------------------
  不時着
  --------------------------------------------------------------------------*/
CB_ void  Sub_不時着( int p1, int p2 )
CB_ {

  static  short  c;  /*  静的変数を確保する  */
  
  if(  同期開始_不時着( p1 ) != OFF  )  c = 0 ;  /*  初回だけ、静的変数を初期化させる  */
  
  座標設定_移動( p1, -1 , 0, DRCT_動作 );  /*  後ろに移動  */
  
        if(  c <  8  )  座標設定_移動( p1, 0, 2 , DRCT_中 );  /*  カウンタで下降速度を決める  */
  else  if(  c < 14  )  座標設定_移動( p1, 0, 3 , DRCT_中 );
  else  if(  c < 20  )  座標設定_移動( p1, 0, 4 , DRCT_中 );
  else                  座標設定_移動( p1, 0, 5 , DRCT_中 );
  
        if(  BASE_LINE-32 < 座標取得_Ｙ( p1 ) )  セル設定_表示( p1, CELL_後方ジャンプ5 );
  else  if(  c            < 3                 )  セル設定_表示( p1, CELL_後方ジャンプ2 );
  else  if(  c            < 6                 )  セル設定_表示( p1, CELL_後方ジャンプ3 );
  else  if(  c            < 9                 )  セル設定_表示( p1, CELL_後方ジャンプ4 );
  else                                           セル設定_表示( p1, CELL_後方ジャンプ5 );
  
  c ++ ;
  
  if(  BASE_LINE <= 座標取得_Ｙ( p1 )  )  /*  着地した場合  */
  {
    音声再生_標準( p1, 0, PCM_着地 );
    
    セル設定_表示( p1, CELL_着地 );
    
    カウンタ設定_現在値( p1, 3 );
    
    同期完了_不時着( p1 );  /*  不時着が完了したことを、システムに通知する  */
  }

CB_ }
CB_ /*E_MMP_FUNC*/

/*--------------------------------------------------------------------------
  気絶
  --------------------------------------------------------------------------*/
CB_ void  Sub_気絶( int p1, int p2 )
CB_ {

  static  short  c = 28 ;  /*  静的変数を確保する  */
  
  if(  ( -- c ) < 14  )  セル設定_表示( p1, CELL_気絶1 );
    else                 セル設定_表示( p1, CELL_気絶2 );
    
  if(  c == 0  )  c = 28 ;

CB_ }
CB_ /*E_MMP_FUNC*/

/*--------------------------------------------------------------------------
  勝利
  --------------------------------------------------------------------------*/
CB_ void  Sub_勝利( int p1, int p2 )
CB_ {


  short  c = カウンタ設定_初期値( p1, 60 ) ;  /*  カウンタを使用してアニメーションさせる  */

  short  cell_id ;

  if(  c == 60  )  音声再生_標準( p1, 2, PCM_勝利 );
  if(  c == 55  )  音声再生_標準( p1, 0, PCM_勝利SE );

  if(  c >= 20  )  cell_id = CELL_ポーズ0;
    else           cell_id = CELL_ポーズ1;
  
    セル設定_表示( p1, cell_id );

  /*  カウンタが０になると、この動作は自動的に終了される  */


CB_ }
CB_ /*E_MMP_FUNC*/

/*--------------------------------------------------------------------------
  連続技
  --------------------------------------------------------------------------*/
CB_ void  Sub_連続技( int p1, int p2 )
CB_ {


  switch(  同期取得_連続技( p1 )  )  /*  システムが保持する連続技過程変数に応じて処理内容を決める  */
  {
    case  0 :  /*  初期設定  */


      座標設定_Ｘ( p1,  40 );  /*  自分の位置  */
      座標設定_Ｘ( p2, 120 );  /*  木箱の位置  */

  /* 超技ゲージを見えなくする */
      ゲージ増減_超技( p1, -2 );
      演出表示_テキスト( 2, 26, 3, "     " );

      セル消滅対策=0;	/* 初期化から来て-1なので0にする */
      セル設定_表示( p1, CELL_前方ジャンプ0 ); 


      同期進行_連続技( p1 );  /*  次の連続技過程へ進行  */
      
      break;
      
    case  1 :
      
      Cmd実行_CPU動作( p1, ACT_ジャンプ, CPU_実行_ジャンプ );
      
      状態設定_ジャンプ方向( p1, DRCT_前 );
      
      if(  座標取得_複合攻撃点( p1, -60 ) != OFF  )  /*  自分の高さが BASE_LINE-60 の時  */
      {
        Cmd実行_CPU動作( p1, SUB_前後Ｊ技A, CPU_実行_前後Ｊ技A );
        
        同期進行_連続技( p1 );  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    case  2 :
      
      if(  Cmd条件_地上基本技( p1, CCLA_立小, OFF ) != OFF  )
      {
        Cmd実行_CPU動作( p1, ACT_直立攻撃B, CPU_実行_直立攻撃B );

        同期進行_連続技( p1 );  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    case  3 :
      
      if(  Cmd条件_地上基本技( p1, CCLA_座小, OFF ) != OFF  )
      {
        Cmd実行_CPU動作( p1, ACT_座り攻撃B, CPU_実行_座り攻撃B );

        同期進行_連続技( p1 );  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    case  4 :
      
      if(  Cmd条件_地上基本技( p1, CCLA_立大, OFF ) != OFF  )
      {  
        Cmd実行_CPU動作( p1, ACT_直立攻撃A, CPU_実行_直立攻撃A );

        同期進行_連続技( p1 );  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    case  5 :
      
      if(  Cmd条件_地上必殺技( p1, ON, ON ) != OFF  )  /*  キャンセル可能になったら  */
      {
	Cmd実行_地上必殺技( p1, ACT_超必殺技  , LEVEL_大  );

        同期進行_連続技( p1 );  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    default :

      同期完了_連続技( p1);  /*  連続技が完了したことを、システムに通知する  */

      break;
  }


CB_ }
CB_ /*E_MMP_FUNC*/

/*==========================================================================*/
