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

                  STREET FIGHTER XVI Version 3.00 対応 キャラクタ・データ

                                       Ｃ言語ソース

                                                           Presented by T.SOENO  1994.8.10
============================================================================================
                                     Ｔ．ケン
==========================================================================================*/

#include  "sfxvilib.h"
#include  "action.h"
#include  "cell.h"

short  空中竜巻状態 = 0 ;  /*  空中竜巻状態を示すフラグ。ＪＵＭＰを細工するために必要  */

/*==========================================================================================*/
  void  main( argc, argv )
/*==========================================================================================*/

int           argc ;
char               *argv[];

{
  /*..........  初期設定  ..........*/
  
  同期開始_キャラ登録( argc, argv, "  T.KEN  Release 1  (C)T.SOENO 1994.8\n" );
  
  /*..........  各キャラ固有アクションの設定  ..........*/
  
  Mmp登録_動作関数( p1, MMP_TYPE_ACT, ACT_直立攻撃A	, 直立攻撃A	);
  Mmp登録_動作関数( p1, MMP_TYPE_ACT, ACT_直立攻撃B	, 直立攻撃B	);
  Mmp登録_動作関数( p1, MMP_TYPE_ACT, ACT_座り攻撃A	, 座り攻撃A	);
  Mmp登録_動作関数( p1, MMP_TYPE_ACT, ACT_座り攻撃B	, 座り攻撃B	);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_前後Ｊ技A	, 前後Ｊ技A	);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_前後Ｊ技B	, 前後Ｊ技B	);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_垂直Ｊ技A	, 前後Ｊ技A	);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_垂直Ｊ技B	, 垂直Ｊ技B	);
  Mmp登録_動作関数( p1, MMP_TYPE_ACT, ACT_必殺技Ｓ	, 必殺技Ｓ	);
  Mmp登録_動作関数( p1, MMP_TYPE_ACT, ACT_必殺技Ａ	, 必殺技Ａ	);
  Mmp登録_動作関数( p1, MMP_TYPE_ACT, ACT_必殺技Ｍ	, 必殺技Ｍ	);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_空中必殺	, 空中必殺	);
  Mmp登録_動作関数( p1, MMP_TYPE_ACT, ACT_地上投げ	, 地上投げ	);
  Mmp登録_動作関数( p1, MMP_TYPE_ACT, ACT_空中投げ	, OFF		);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB__飛び道具	, 飛び道具	);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_ＪＵＭＰ	, ＪＵＭＰ	);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_不時着		, 不時着	);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_気絶		, 気絶		);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_変身		, 変身		);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_勝利		, 勝利		);
  Mmp登録_動作関数( p1, MMP_TYPE_SUB, SUB_連続技		, 連続技	);
  
  /*..........  必殺技コマンド関数の設定  ..........*/
  
  Cmd登録_地上必殺技判定関数( p1, 地上必殺技コマンド関数 );
	Cmd登録_空中必殺技判定関数( p1, 空中必殺技コマンド関数 );
  
  /*..........  ＣＯＭ情報の設定  ..........*/
  
  Prm設定_CPU_直立攻撃キャンセル率( p1, 29000, 26000 );
  Prm設定_CPU_座り攻撃キャンセル率( p1, 29000, 26000 );
  Prm設定_CPU_対気絶攻撃( p1, 'J', 大 );
  Prm設定_CPU_対座り攻撃( p1, 'A', 小 );
  Prm設定_CPU_対近Ｓ攻撃( p1, 'A', 小, 'A', 大  );
  Prm設定_CPU_対遠Ｓ攻撃( p1, 'S', 小, 'S', 大  );
  Prm設定_CPU_対近空攻撃( p1, 'A', 小, 32700 );
  Prm設定_CPU_対中空攻撃( p1, 'A', 小, 32700 );
  Prm設定_CPU_近攻撃座り率( p1, 12000 );
  Prm設定_CPU_必殺技Ｓ小率( p1, 20000 );
  Prm設定_CPU_必殺技Ａ小率( p1, 16000 );
  Prm設定_CPU_必殺技Ｍ小率( p1, 18000 );
  Prm設定_CPU_空中必殺小率( p1, 18000 );
  属性設定_地上投げ威力( p1, 0, 28 );
  属性設定_空中投げ威力( p1, 0, 0, 28 );
  属性設定_歩行速度( p1, 2 );
  
  /*..........  全キャラ共通セルの設定  ..........*/
  
  セル登録_情報( p1, CELL_直立0		, &cell_直立0		);
  セル登録_情報( p1, CELL_直立1		, &cell_直立1		);
  セル登録_情報( p1, CELL_直立2		, &cell_直立2		);
  セル登録_情報( p1, CELL_直立3		, &cell_直立3		);
  セル登録_情報( p1, CELL_歩行0		, &cell_歩行0		);
  セル登録_情報( p1, CELL_歩行1		, &cell_歩行1		);
  セル登録_情報( p1, CELL_歩行2		, &cell_歩行2		);
  セル登録_情報( p1, CELL_歩行3		, &cell_歩行3		);
  セル登録_情報( p1, CELL_歩行4		, &cell_歩行4		);
  セル登録_情報( p1, CELL_立ち防御1	, &cell_立ち防御	);
  セル登録_情報( p1, CELL_しゃがみ防御1	, &cell_座り防御	);
  セル登録_情報( p1, CELL_しゃがみ0	, &cell_しゃがみ0	);
  セル登録_情報( p1, CELL_しゃがみ1	, &cell_しゃがみ1	);
  セル登録_情報( p1, CELL_着地		, &cell_着地		);
  セル登録_情報( p1, CELL_起き上がり0 	, &cell_起上り0		);
  セル登録_情報( p1, CELL_起き上がり1 	, &cell_起上り1		);
  セル登録_情報( p1, CELL_起き上がり2 	, &cell_起上り2		);
  セル登録_情報( p1, CELL_起き上がり3 	, &cell_起上り3		);
  セル登録_情報( p1, CELL_起き上がり4 	, &cell_起上り4		);
  セル登録_情報( p1, CELL_立衝撃0	, &cell_立衝撃0		);
  セル登録_情報( p1, CELL_立衝撃1	, &cell_立衝撃1		);
  セル登録_情報( p1, CELL_立衝撃2	, &cell_立衝撃2		);
  セル登録_情報( p1, CELL_座衝撃0	, &cell_座衝撃		);
  セル登録_情報( p1, CELL_座衝撃1	, &cell_座衝撃		);
  セル登録_情報( p1, CELL_転倒		, &cell_転倒		);
  セル登録_情報( p1, CELL_ふっとぶ0	, &cell_ふっとぶ0	);
  セル登録_情報( p1, CELL_ふっとぶ1	, &cell_ふっとぶ1	);
  セル登録_情報( p1, CELL_ふっとぶ2	, &cell_ふっとぶ2	);
  セル登録_情報( p1, CELL_ふっとぶ3	, &cell_ふっとぶ3	);
  セル登録_情報( p1, CELL_ふっとぶ4	, &cell_ふっとぶ4	);
  セル登録_情報( p1, CELL_投げられ0	, &cell_投げられ0	);
  セル登録_情報( p1, CELL_投げられ1	, &cell_投げられ1	);
  セル登録_情報( p1, CELL_投げられ2	, &cell_投げられ2	);
  セル登録_情報( p1, CELL_投げられ3	, &cell_投げられ3	);
  セル登録_情報( p1, CELL_投げられ4	, &cell_投げられ4	);
  セル登録_情報( p1, CELL_投げられ5	, &cell_投げられ5	);
  セル登録_情報( p1, CELL_投げられ6	, &cell_投げられ6	);
  
  /*..........  各キャラ固有セルの設定  ..........*/
  
  セル登録_情報( p1, CELL_ジャンプ0	, &cell_垂直Ｊ0		);
  セル登録_情報( p1, CELL_ジャンプ1	, &cell_垂直Ｊ1		);
  セル登録_情報( p1, CELL_ジャンプ2	, &cell_垂直Ｊ2		);
  セル登録_情報( p1, CELL_ジャンプ3	, &cell_垂直Ｊ3		);
  セル登録_情報( p1, CELL_前方ジャンプ0	, &cell_前方Ｊ0		);
  セル登録_情報( p1, CELL_前方ジャンプ1	, &cell_前方Ｊ1		);
  セル登録_情報( p1, CELL_前方ジャンプ2	, &cell_前方Ｊ2		);
  セル登録_情報( p1, CELL_前方ジャンプ3	, &cell_前方Ｊ3		);
  セル登録_情報( p1, CELL_前方ジャンプ4	, &cell_前方Ｊ4		);
  セル登録_情報( p1, CELL_前方ジャンプ5	, &cell_前方Ｊ5		);
  セル登録_情報( p1, CELL_前方ジャンプ6	, &cell_前方Ｊ6		);
  セル登録_情報( p1, CELL_後方ジャンプ0	, &cell_後方Ｊ0		);
  セル登録_情報( p1, CELL_後方ジャンプ1	, &cell_後方Ｊ1		);
  セル登録_情報( p1, CELL_後方ジャンプ2	, &cell_後方Ｊ2		);
  セル登録_情報( p1, CELL_後方ジャンプ3	, &cell_後方Ｊ3		);
  セル登録_情報( p1, CELL_後方ジャンプ4	, &cell_後方Ｊ4		);
  セル登録_情報( p1, CELL_後方ジャンプ5	, &cell_後方Ｊ5		);
  セル登録_情報( p1, CELL_直立攻撃A0	, &cell_アッパー0	);
  セル登録_情報( p1, CELL_直立攻撃A1	, &cell_アッパー1	);
  セル登録_情報( p1, CELL_直立攻撃A2	, &cell_アッパー2	);
  セル登録_情報( p1, CELL_直立攻撃2A0	, &cell_正拳突き0	);
  セル登録_情報( p1, CELL_直立攻撃2A1	, &cell_正拳突き1	);
  セル登録_情報( p1, CELL_直立攻撃2A2	, &cell_正拳突き2	);
  セル登録_情報( p1, CELL_直立攻撃B0	, &cell_ローキック0	);
  セル登録_情報( p1, CELL_直立攻撃B1	, &cell_ローキック1	);
  セル登録_情報( p1, CELL_直立攻撃2B0	, &cell_立ちキック0	);
  セル登録_情報( p1, CELL_直立攻撃2B1	, &cell_立ちキック1	);
  セル登録_情報( p1, CELL_座り攻撃A0	, &cell_突き上げ0	);
  セル登録_情報( p1, CELL_座り攻撃A1	, &cell_突き上げ1	);
  セル登録_情報( p1, CELL_座り攻撃A2	, &cell_突き上げ2	);
  セル登録_情報( p1, CELL_座り攻撃2A0	, &cell_回転足払い0	);
  セル登録_情報( p1, CELL_座り攻撃2A1	, &cell_回転足払い1	);
  セル登録_情報( p1, CELL_座り攻撃2A2	, &cell_回転足払い2	);
  セル登録_情報( p1, CELL_座り攻撃2A3	, &cell_回転足払い3	);
  セル登録_情報( p1, CELL_座り攻撃2A4	, &cell_回転足払い4	);
  セル登録_情報( p1, CELL_座り攻撃B0	, &cell_キック0		);
  セル登録_情報( p1, CELL_座り攻撃B1	, &cell_キック1		);
  セル登録_情報( p1, CELL_前後Ｊ技A0 	, &cell_ストレート0	);
  セル登録_情報( p1, CELL_前後Ｊ技A1	, &cell_ストレート1	);
  セル登録_情報( p1, CELL_前後Ｊ技B0	, &cell_飛び横蹴り0	);
  セル登録_情報( p1, CELL_前後Ｊ技B1	, &cell_飛び横蹴り1	);
  セル登録_情報( p1, CELL_垂直Ｊ技B0	, &cell_旋風脚0		);
  セル登録_情報( p1, CELL_垂直Ｊ技B1	, &cell_旋風脚1		);
  セル登録_情報( p1, CELL_垂直Ｊ技B2	, &cell_旋風脚2		);
  セル登録_情報( p1, CELL_垂直Ｊ技B3	, &cell_旋風脚3		);
  セル登録_情報( p1, CELL_必殺技Ｓ0	, &cell_波動拳0		);
  セル登録_情報( p1, CELL_必殺技Ｓ1	, &cell_波動拳1		);
  セル登録_情報( p1, CELL_必殺技Ｓ2	, &cell_波動拳2		);
  セル登録_情報( p1, CELL_必殺技Ｓ3	, &cell_波動拳3		);
  セル登録_情報( p1, CELL_必殺技Ａ0	, &cell_昇龍拳0		);
  セル登録_情報( p1, CELL_必殺技Ａ1	, &cell_昇龍拳1		);
  セル登録_情報( p1, CELL_必殺技Ａ2	, &cell_昇龍拳2		);
  セル登録_情報( p1, CELL_必殺技Ａ3	, &cell_昇龍拳3		);
  セル登録_情報( p1, CELL_必殺技Ａ4	, &cell_昇龍拳4		);
  セル登録_情報( p1, CELL_必殺技Ａ5	, &cell_昇龍拳5		);
  セル登録_情報( p1, CELL_必殺技Ｍ0	, &cell_竜巻0		);
  セル登録_情報( p1, CELL_必殺技Ｍ1	, &cell_竜巻1		);
  セル登録_情報( p1, CELL_必殺技Ｍ2	, &cell_竜巻2		);
  セル登録_情報( p1, CELL_必殺技Ｍ3	, &cell_竜巻3		);
  セル登録_情報( p1, CELL_地上投げ0	, &cell_投げ0		);
  セル登録_情報( p1, CELL_地上投げ1	, &cell_投げ1		);
  セル登録_情報( p1, CELL_地上投げ2	, &cell_投げ2		);
  セル登録_情報( p1, CELL_地上投げ3	, &cell_投げ3		);
  セル登録_情報( p1, CELL_気絶1		, &cell_直立0		);
  セル登録_情報( p1, CELL_気絶2		, &cell_直立3		);
  セル登録_情報( p1, CELL_ポーズ0	, &cell_ポーズ0		);
  セル登録_情報( p1, CELL_ポーズ1	, &cell_ポーズ1		);
  
  /*..........  完了  ..........*/
  
  同期完了_キャラ登録();
}

/*==========================================================================================*/
  void  直立攻撃A( p1, p2 )  /*  アッパー  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c;
  
  if(  多重化取得_攻撃間隔( p1, 34 ) != 近  )  /*  相手が34ドット以上離れている場合  */
  {
    直立攻撃A2( p1, p2 );  /*  正拳突き  */
    
    return;  /*  リターン  */
  }
  
  c = カウンタ設定_初期値( p1, 35 ) ;
  
  if(  c >= 35  )
  {
    攻撃設定_最多ヒット数( p1, 1 );
    
    if(  状態取得_変身( p1 )  )  占有音声再生_標準( PCM_投げ );  /*  変身中の処理  */
    
    共有音声再生_標準( PCM_振り2 );
    
    セル設定_表示( p1, CELL_直立攻撃A0 );
  }
  else  if(  c >= 32  )
  {
    セル設定_表示( p1, CELL_直立攻撃A0 );
  }
  else  if(  c >= 31  )
  {
    セル設定_表示( p1, CELL_直立攻撃A1 );
    
    攻撃ポイント設定( &hit_アッパー, ON );
  }
  else  if(  c >= 28  )
  {
    セル設定_表示( p1, CELL_直立攻撃A1 );
    
    攻撃ポイント設定( &hit_アッパー, ON );
  }
  else  if(  c >= 27  )
  {
    セル設定_表示( p1, CELL_直立攻撃A2 );
    
    攻撃ポイント設定( &hit_アッパー, OFF );  /*  腕が伸びきったのでキャンセル不可にする  */
  }
  else  if(  c >= 18  )
  {
    セル設定_表示( p1, CELL_直立攻撃A2 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_直立攻撃A1 );
  }
  else
  {
    セル設定_表示( p1, CELL_直立攻撃A1 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  直立攻撃A2( p1, p2 )  /*  正拳突き  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c = カウンタ設定_初期値( p1, 41 ) ;
  
  if(  c >= 41  )
  {
    攻撃設定_最多ヒット数( p1, 1 );
    
    if(  状態取得_変身( p1 )  )  占有音声再生_標準( PCM_投げ );  /*  変身中の処理  */
    
    共有音声再生_標準( PCM_振り2 );
    
    セル設定_表示( p1, CELL_直立攻撃2A0 );
  }
  else  if(  c >= 37  )
  {
    セル設定_表示( p1, CELL_直立攻撃2A1 );
  }
  else  if(  c >= 34  )
  {
    セル設定_表示( p1, CELL_直立攻撃2A2 );
    
    攻撃ポイント設定( &hit_正拳突き, OFF );  /*  腕が伸びきったのでキャンセル不可にする  */
  }
  else  if(  c >= 23  )
  {
    セル設定_表示( p1, CELL_直立攻撃2A2 );
  }
  else  if(  c >= 13  )
  {
    セル設定_表示( p1, CELL_直立攻撃2A1 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_直立攻撃2A0 );
  }
  else
  {
    セル設定_表示( p1, CELL_直立攻撃2A0 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  座り攻撃A( p1, p2 )  /*  突き上げアッパー  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c;
  
  状態設定_しゃがみ( p1, ON );  /*  念のため、自分を確実にしゃがませる  */
  
  if(  多重化取得_攻撃間隔( p1, 16 ) != 近  )  /*  相手が16ドット以上離れている場合  */
  {
    座り攻撃A2( p1, p2 );  /*  回転足払い  */
    
    return;  /*  リターン  */
  }
  
  c = カウンタ設定_初期値( p1, 41 ) ;
  
  if(  c >= 41  )
  {
    if(  状態取得_変身( p1 )  )  占有音声再生_標準( PCM_投げ );  /*  変身中の処理  */
    
    共有音声再生_標準( PCM_振り2 );
    
    攻撃設定_最多ヒット数( p1, 1 );
    
    セル設定_表示( p1, CELL_座り攻撃A0 );
  }
  else  if(  c >= 38  )
  {
    セル設定_表示( p1, CELL_座り攻撃A0 );
  }
  else  if(  c >= 37  )
  {
    セル設定_表示( p1, CELL_座り攻撃A1 );
    
    攻撃ポイント設定( &hit_アッパー, ON );
  }
  else  if(  c >= 35  )
  {
    セル設定_表示( p1, CELL_座り攻撃A1 );
    
    攻撃ポイント設定( &hit_アッパー, ON );
  }
  else  if(  c >= 34  )
  {
    セル設定_表示( p1, CELL_座り攻撃A2 );
    
    攻撃ポイント設定( &hit_アッパー, OFF );  /*  腕が伸びきったのでキャンセル不可にする  */
  }
  else  if(  c >= 25  )
  {
    セル設定_表示( p1, CELL_座り攻撃A2 );
  }
  else  if(  c >= 13  )
  {
    セル設定_表示( p1, CELL_座り攻撃A1 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_座り攻撃A0 );
  }
  else
  {
    セル設定_表示( p1, CELL_座り攻撃A0 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  座り攻撃A2( p1, p2 )  /*  回転足払い  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c = カウンタ設定_初期値( p1, 39 ) ;
  
  if(  c >= 39  )
  {
    if(  状態取得_変身( p1 )  )  占有音声再生_標準( PCM_投げ );  /*  変身中の処理  */
    
    共有音声再生_標準( PCM_振り2 );
    
    攻撃設定_最多ヒット数( p1, 1 );
    
    セル設定_表示( p1, CELL_座り攻撃2A0 );
  }
  else  if(  c >= 36  )
  {
    セル設定_表示( p1, CELL_座り攻撃2A0 );
  }
  else  if(  c >= 35  )
  {
    セル設定_表示( p1, CELL_座り攻撃2A1 );
    
    攻撃ポイント設定( &hit_回転足払い, ON );
  }
  else  if(  c >= 27  )
  {
    セル設定_表示( p1, CELL_座り攻撃2A1 );
    
    攻撃ポイント設定( &hit_回転足払い, ON );
  }
  else  if(  c >= 19  )
  {
    セル設定_表示( p1, CELL_座り攻撃2A2 );
  }
  else  if(  c >= 13  )
  {
    セル設定_表示( p1, CELL_座り攻撃2A3 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_座り攻撃2A4 );
  }
  else
  {
    セル設定_表示( p1, CELL_座り攻撃2A4 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  直立攻撃B( p1, p2 )  /*  ローキック  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c;
  
  if(  多重化取得_攻撃間隔( p1, 16 ) != 近  )  /*  相手が16ドット以上離れている場合  */
  {
    直立攻撃B2( p1, p2 );  /*  ハイキック  */
    
    return;  /*  リターン  */
  }
  
  c = カウンタ設定_初期値( p1, 5 ) ;
  
  if(  c >= 5  )
  {
    共有音声再生_標準( PCM_振り1 );
    
    攻撃設定_最多ヒット数( p1, 1 );
    
    セル設定_表示( p1, CELL_直立攻撃B0 );
  }
  else  if(  c >= 4  )
  {
    セル設定_表示( p1, CELL_直立攻撃B0 );
  }
  else  if(  c >= 2  )
  {
    セル設定_表示( p1, CELL_直立攻撃B1 );
    
    攻撃ポイント設定( &hit_ローキック, OFF );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_直立攻撃B0 );
  }
  else
  {
    セル設定_表示( p1, CELL_直立攻撃B0 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  直立攻撃B2( p1, p2 )  /*  ハイキック  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c = カウンタ設定_初期値( p1, 10 ) ;
  
  if(  c >= 10  )
  {
    攻撃設定_最多ヒット数( p1, 1 );
    
    共有音声再生_標準( PCM_振り1 );
    
    セル設定_表示( p1, CELL_直立攻撃2B0 );
  }
  else  if(  c >= 6  )
  {
    セル設定_表示( p1, CELL_直立攻撃2B0 );
  }
  else  if(  c >= 2  )
  {
    セル設定_表示( p1, CELL_直立攻撃2B1 );
    
    攻撃ポイント設定( &hit_立ちキック, ON );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_直立攻撃2B0 );
  }
  else
  {
    セル設定_表示( p1, CELL_直立攻撃2B0 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  座り攻撃B( p1, p2 )  /*  キック  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c = カウンタ設定_初期値( p1, 5 ) ;
  
  状態設定_しゃがみ( p1, ON );  /*  念のため、自分を確実にしゃがませる  */
  
  if(  c >= 5  )
  {
    攻撃設定_最多ヒット数( p1, 1 );
    
    セル設定_表示( p1, CELL_座り攻撃B0 );
    
    共有音声再生_標準( PCM_振り1 );
  }
  else  if(  c >= 4  )
  {
    セル設定_表示( p1, CELL_座り攻撃B0 );
  }
  else  if(  c >= 2  )
  {
    セル設定_表示( p1, CELL_座り攻撃B1 );
    
    攻撃ポイント設定( &hit_キック, ON );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_座り攻撃B0 );
  }
  else
  {
    セル設定_表示( p1, CELL_座り攻撃B0 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  前後Ｊ技A( p1, p2 )  /*  ストレート  */
/*==========================================================================================*/

int  p1, p2;

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

/*==========================================================================================*/
  void  垂直Ｊ技B( p1, p2 )  /*  旋風脚  */
/*==========================================================================================*/

int  p1, p2;

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

/*==========================================================================================*/
  void  前後Ｊ技B( p1, p2 )  /*  飛び横蹴り  */
/*==========================================================================================*/

int  p1, p2;

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

/*==========================================================================================*/
  void  必殺技Ｓ( p1, p2 )  /*  波動拳  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c = カウンタ設定_初期値( p1, 46 ) ;
  
  スーパーコンボ停止();  /*  ＣＰＵが勝手にスパコン扱いしてしまうのを防ぐ  */
  
  if(  c >= 46  )
  {
    状態設定_無敵( p1 , IVC_通常, 0 );  /*  必殺技は最初、無敵状態にされているので解除する  */
    
    セル設定_表示( p1, CELL_必殺技Ｓ0 );
  }
  else  if(  c >= 42  )
  {
    セル設定_表示( p1, CELL_必殺技Ｓ0 );
  }
  else  if(  c >= 37  )
  {
    セル設定_表示( p1, CELL_必殺技Ｓ1 );
  }
  else  if(  c >= 33  )
  {
    セル設定_表示( p1, CELL_必殺技Ｓ2 );
  }
  else  if(  c >= 32  )
  {
    if(  飛び道具残数( p1 ) == 0  )  /*  飛び道具ゲージが０の場合  */
    {
      共有音声再生_標準( PCM_振り2 );  /*  空振りの音  */
      
      カウンタ設定_現在値( p1, 20 );  /*  隙だけは小さくしてやる  */
    }
    else
    {
      飛び道具減少( 1 );  /*  飛び道具ゲージから１減らす  */
      
      飛び道具初期化( p1 );  /*  飛び道具を初期化する  */
      
      if(  攻撃取得_威力レベル( p1 ) == 大  )  /*  Ａボタンの場合  */
      {
        飛び道具威力設定( p1, 5, 11, 16, 2, 0, 1, OFF, 1, PCM_Ｐ大 );  /*  高速放出  */
        
        占有音声再生_標準( PCM_必殺技S );  /*  高い声  */
      }
      else  /*  Ｂボタンの場合  */
      {
        飛び道具威力設定( p1, 3, 11, 16, 2, 0, 1, OFF, 1, PCM_Ｐ中 );  /*  低速放出  */
        
        占有音声再生_標準( PCM_必殺技S );  /*  低い声  */
      }
      
      /*  飛び道具の最初の位置を自分の向きに合わせて決める（ちょっと面倒）  */
      if(  状態取得_表示方向( p1 ) == 右  )  飛び道具Ｘ位置設定( p1, 座標取得_Ｘ( p1 )+56 );
        else                        飛び道具Ｘ位置設定( p1, 座標取得_Ｘ( p1 )-40 );
        
      飛び道具Ｙ位置設定( p1, BASE_LINE+24 );  /*  高さを頭から24ドット下にする  */
    }
    
    セル設定_表示( p1, CELL_必殺技Ｓ3 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_必殺技Ｓ3 );
  }
  else
  {
    セル設定_表示( p1, CELL_必殺技Ｓ3 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  飛び道具( p1, p2, x1, x2, num, pat )  /*  飛び道具を表示する関数  */
/*==========================================================================================*/

int  p1, p2;
short                     x1, x2, num, pat ;

{
  static  short  c = 0 ;  /*  カウンタは静的変数として確保する  */
  
  short  y = 飛び道具Ｙ位置() + 16 ;  /*  X680x0のスプライト座標では +16 する  */
  
  if(  ( ++ c ) >= 10  )  c = 0 ;  /*  カウンタを回す  */
  
        if(  c <  2  )  return;     /*  表示しない              */
  else  if(  c <  4  )  ;           /*  先頭のＰＣＧから表示    */
  else  if(  c <  6  )  return;     /*  表示しない              */
  else  if(  c < 10  )  pat += 4 ;  /*  ４個先のＰＣＧから表示  */
  
  Spr設定_表示( num ++, x1, y   , pat ++, 1 );  /*  ４つのＰＣＧを正方形に並べて表示  */
  Spr設定_表示( num ++, x2, y   , pat ++, 1 );
  Spr設定_表示( num ++, x1, y+16, pat ++, 1 );
  Spr設定_表示( num   , x2, y+16, pat   , 1 );
}

/*==========================================================================================*/
  void  必殺技Ａ( p1, p2 )  /*  昇龍拳  */
/*==========================================================================================*/

int  p1, p2;

{
  static  short  X00[] = {  1, 1, 0, 0, 0, 0 } ,  /*  上昇下降軌道テーブル  */
                 Y00[] = { -3,-3,-2,-1, 0    } ,
                 Y01[] = {  2, 2, 2, 2, 1, 0 } ;
  
  short  c;
  
  背景スクロール停止();  /*  横への伸びを強調するために、背景スクロールを停止する  */
  
  if(  Cmd取得_超技( p1 ) != OFF  )  /*  スーパーコンボの場合  */
  {
    スーパー必殺技Ａ( p1, p2 );
    
    return;  /*  リターン  */
  }
  else  if(  攻撃取得_威力レベル( p1 ) == 大  )  /*  Ａボタンの場合  */
  {
    必殺技Ａ2( p1, p2 );
    
    return;  /*  リターン  */
  }
  
  c = カウンタ設定_初期値( p1, 11 ) ;
  
  if(  c >= 11  )
  {
    状態設定_無敵( p1 , IVC_無敵, 0 );  /*  出始めから無敵にする  */
    
    攻撃設定_最多ヒット数( p1, 1 );
    
    セル設定_表示( p1, CELL_必殺技Ａ0 );
  }
  else  if(  c >= 8  )
  {
    セル設定_表示( p1, CELL_必殺技Ａ1 );
    
    攻撃ポイント設定( &hit_昇龍拳01, OFF );  /*  １０００点昇龍拳  */
  }
  else  if(  c >= 7  )
  {
    占有音声再生_標準( PCM_必殺技A );
    
    セル設定_表示( p1, CELL_必殺技Ａ1 );
    
    攻撃ポイント設定( &hit_昇龍拳01, OFF );  /*  １０００点昇龍拳  */
  }
  else  if(  c >= 6  )
  {
    short  index = ( BASE_LINE - 座標取得_Ｙ( p1 ) ) >> 3 ;  /*  軌道テーブルのオフセット  */
    
    攻撃設定_最多ヒット数２( p1, 1, 0 );  /*  多重ヒットを防ぐために、再設定()の方を使用する      */
                                 /*  設定()を使用すると、この動作過程において毎サイクル  */
                                 /*  でヒット数が設定されてしまう                        */
    
    if(  index < 4  )
    {
      座標設定_移動( p1, X00[ index ] , 0,DRCT_前 );
      
      座標設定_移動( p1, 0, Y00[ index ] , DRCT_中 );
      
      カウンタ設定_値維持( p1 );  /*  カウンタの自動デクリメントをキャンセルする  */
    }
    
    セル設定_表示( p1, CELL_必殺技Ａ2 );
    
    攻撃ポイント設定( &hit_昇龍拳02, OFF );
  }
  else  if(  c >= 5  )
  {
    short  index = BASE_LINE - 座標取得_Ｙ( p1 ) ;
    
    状態設定_無敵( p1 , IVC_通常, 0 );  /*  下降動作に入ったので、無敵を解除する  */
    
    if(  index < 0  )  index = 0 ;  /*  念のため一応  */
    
    index >>= 3 ;
    
    座標設定_移動( p1, 0, Y01[ index ] , DRCT_中 );
    
    if(  index > 2  )  セル設定_表示( p1, CELL_必殺技Ａ3 );
      else             セル設定_表示( p1, CELL_必殺技Ａ4 );
      
    if(  座標取得_Ｙ( p1 ) < BASE_LINE  )  カウンタ設定_値維持( p1 );
                              /*  着地するまでカウンタの自動デクリメントをキャンセルする  */
  }
  else  if(  c >= 4  )
  {
    座標設定_Ｙ( p1, BASE_LINE );  /*  自分の体の高さを、確実に地面に合わせる  */
    
    セル設定_表示( p1, CELL_必殺技Ａ5 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_必殺技Ａ5 );
  }
  else
  {
    共有音声再生_標準( PCM_着地 );
    
    セル設定_表示( p1, CELL_必殺技Ａ5 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  必殺技Ａ2( p1, p2 )  /*  （大）昇龍拳  */
/*==========================================================================================*/

int  p1, p2;

{
  static  short  X10[] = {  3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0    } ,
                 Y10[] = { -9,-9,-9,-9,-9,-8,-8,-8,-8,-7,-7,-6,-5,-4,-3,-1, 0    } ,
                 Y11[] = {  8, 8, 8, 8, 7, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3, 2, 1, 0 } ;
                                                               /*  上昇下降軌道テーブル  */  
  
  short  c = カウンタ設定_初期値( p1, 11 ) ;
  
  if(  c >= 11  )
  {
    状態設定_無敵( p1 , IVC_無敵, 0 );  /*  出始めから無敵にする  */
    
    攻撃設定_最多ヒット数( p1, 1 );
    
    セル設定_表示( p1, CELL_必殺技Ａ0 );
  }
  else  if(  c >= 8  )
  {
    セル設定_表示( p1, CELL_必殺技Ａ1 );
    
    攻撃ポイント設定( &hit_昇龍拳11, OFF );  /*  １０００点昇龍拳  */
  }
  else  if(  c >= 7  )
  {
    /*状態設定_無敵( p1 , IVC_ゾンビ, 0 );*/
    
    占有音声再生_標準( PCM_必殺技A );
    
    セル設定_表示( p1, CELL_必殺技Ａ1 );
    
    攻撃ポイント設定( &hit_昇龍拳11, OFF );  /*  １０００点昇龍拳  */
  }
  else  if(  c >= 6  )
  {
    short  index = ( BASE_LINE - 座標取得_Ｙ( p1 ) ) >> 3 ;  /*  軌道テーブルのオフセット  */
    
    攻撃設定_最多ヒット数２( p1, 1, 0 );  /*  多重ヒットを防ぐために、再設定()の方を使用する      */
                                 /*  設定()を使用すると、この動作過程において毎サイクル  */
                                 /*  でヒット数が設定されてしまう                        */
    
    if(  index < 16  )
    {
      座標設定_移動( p1, X10[ index ] , 0,DRCT_前 );
      
      座標設定_移動( p1, 0, Y10[ index ] , DRCT_中 );
      
      カウンタ設定_値維持( p1 );  /*  カウンタの自動デクリメントをキャンセルする  */
    }
    
    セル設定_表示( p1, CELL_必殺技Ａ2 );
    
    攻撃ポイント設定( &hit_昇龍拳12, OFF );
  }
  else  if(  c >= 5  )
  {
    short  index = BASE_LINE - 座標取得_Ｙ( p1 ) ;
    
    状態設定_無敵( p1 , IVC_通常, 0 );  /*  下降動作に入ったので、無敵を解除する  */
    
    if(  index < 0  )  index = 0 ;  /*  念のため一応  */
    
    index >>= 3 ;
    
    座標設定_移動( p1, 0, Y11[ index ] , DRCT_中 );
    
    if(  index > 13  )  セル設定_表示( p1, CELL_必殺技Ａ3 );
      else              セル設定_表示( p1, CELL_必殺技Ａ4 );
      
    if(  座標取得_Ｙ( p1 ) < BASE_LINE  )  カウンタ設定_値維持( p1 );
                              /*  着地するまでカウンタの自動デクリメントをキャンセルする  */
  }
  else  if(  c >= 4  )
  {
    座標設定_Ｙ( p1, BASE_LINE );  /*  自分の体の高さを、確実に地面に合わせる  */
    
    セル設定_表示( p1, CELL_必殺技Ａ5 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_必殺技Ａ5 );
  }
  else
  {
    共有音声再生_標準( PCM_着地 );
    
    セル設定_表示( p1, CELL_必殺技Ａ5 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  スーパー必殺技Ａ( p1, p2 )  /*  ドラゴン乱舞  */
/*==========================================================================================*/

int  p1, p2;

{
  static  short  X00[] = {  1, 1, 2, 3    } ,  /*  上昇下降軌道テーブル１  */
                 X01[] = {  1, 1, 1, 2, 2 } ,
                 Y00[] = { -5,-4,-3,-3    } ,
                 Y01[] = {  4, 4, 3, 3, 2 } ;
  
  static  short  X10[] = {  3, 2, 2, 1, 1, 1, 1, 0    } ,  /*  上昇下降軌道テーブル２  */
                 Y10[] = { -5,-5,-4,-4,-3,-3,-3,-2    } ,
                 Y11[] = {  5, 5, 4, 4, 4, 3, 3, 2, 2 } ;
  
  short  c = カウンタ設定_初期値( p1, 28 ) ;
  
  演出表示_身体残像( p1 );  /*  残像を表示させる  */
  
  if(  c >= 28  )
  {
    状態設定_無敵( p1 , IVC_無敵, 0 );  /*  出始めから無敵にする  */
    
    セル設定_表示( p1, CELL_必殺技Ａ0 );
    
    同期開始_気集中( p1, 24, 48, 前 );  /*  集中光を発し、ゲーム動作のブロックを開始する  */
  }
  else  if(  c >= 27  )
  {
    セル設定_表示( p1, CELL_必殺技Ａ0 );
    
    if(  スーパーコンボ待ち時間() > 0  )  カウンタ設定_値維持( p1 );
                /*  ブロックが解除されるまで、カウンタの自動デクリメントをキャンセルする  */
  }
  else  if(  c >= 26  )  /*  １発目開始  */
  {
    攻撃設定_最多ヒット数( p1, 1 );  /*  最初は１ヒットしかさせない  */
    
    共有音声再生_標準( PCM_振り2 );
    
    占有音声再生_標準( PCM_必殺技A );
    
    セル設定_表示( p1, CELL_必殺技Ａ0 );
  }
  else  if(  c >= 25  )  /*  １発目開始  */
  {
    セル設定_表示( p1, CELL_必殺技Ａ1 );
    
    if(  座標取得_Ｙ( p2 ) == BASE_LINE  )  攻撃ポイント設定( &hit_ドラゴン乱舞1, OFF );
      else                                 攻撃ポイント設定( &hit_ドラゴン乱舞F, OFF );
                                            /*  空中でヒットした時だけ、空中多段にする  */
  }
  else  if(  c >= 24  )
  {
    short  index = ( BASE_LINE - 座標取得_Ｙ( p1 ) ) >> 3 ;  /*  軌道テーブルのオフセット  */
    
    if(  index < 3  )
    {
      座標設定_移動( p1, X00[ index ] , 0,DRCT_前 );
      
      座標設定_移動( p1, 0, Y00[ index ] , DRCT_中 );
      
      カウンタ設定_値維持( p1 );  /*  カウンタの自動デクリメントをキャンセルする  */
    }
    
    セル設定_表示( p1, CELL_必殺技Ａ2 );
    
    攻撃ポイント設定( &hit_ドラゴン乱舞F, OFF );
  }
  else  if(  c >= 23  )
  {
    short  index = BASE_LINE - 座標取得_Ｙ( p1 ) ;
    
    if(  index < 0  )  index = 0 ;  /*  念のため一応  */
    
    index >>= 3 ;
    
    座標設定_移動( p1, X01[ index ] , 0,DRCT_前 );
    
    座標設定_移動( p1, 0, Y01[ index ] , DRCT_中 );
    
    if(  index > 2  )  セル設定_表示( p1, CELL_必殺技Ａ3 );
      else             セル設定_表示( p1, CELL_必殺技Ａ4 );
      
    if(  座標取得_Ｙ( p1 ) < BASE_LINE  )  カウンタ設定_値維持( p1 );
                              /*  着地するまでカウンタの自動デクリメントをキャンセルする  */
  }
  else  if(  c >= 22  )
  {
    座標設定_Ｙ( p1, BASE_LINE );  /*  自分の体の高さを、確実に地面に合わせる  */
    
    セル設定_表示( p1, CELL_必殺技Ａ5 );
  }
  else  if(  c >= 21  )  /*  ２発目開始  */
  {
    状態設定_無敵( p1 , IVC_通常, 0 );  /*  無敵状態を解除する  */
    
    共有音声再生_標準( PCM_振り2 );
    
    攻撃設定_最多ヒット数( p1, 1 );  /*  さらに１ヒットさせる  */
    
    セル設定_表示( p1, CELL_必殺技Ａ0 );
  }
  else  if(  c >= 20  )
  {
    セル設定_表示( p1, CELL_必殺技Ａ1 );
    
    if(  座標取得_Ｙ( p2 ) == BASE_LINE  )  攻撃ポイント設定( &hit_ドラゴン乱舞1, OFF );
      else                                 攻撃ポイント設定( &hit_ドラゴン乱舞F, OFF );
                                            /*  空中でヒットした時だけ、空中多段にする  */
  }
  else  if(  c >= 19  )
  {
    short  index = ( BASE_LINE - 座標取得_Ｙ( p1 ) ) >> 3 ;  /*  軌道テーブルのオフセット  */
    
    攻撃設定_最多ヒット数２( p1, 1, 0 );  /*  多重ヒットを防ぐために、再設定()の方を使用する      */
                                 /*  設定()を使用すると、この動作過程において毎サイクル  */
                                 /*  でヒット数が設定されてしまう                        */
    
    if(  index < 3  )
    {
      座標設定_移動( p1, X00[ index ] , 0,DRCT_前 );
      
      座標設定_移動( p1, 0, Y00[ index ] , DRCT_中 );
      
      カウンタ設定_値維持( p1 );  /*  カウンタの自動デクリメントをキャンセルする  */
    }
    
    セル設定_表示( p1, CELL_必殺技Ａ2 );
    
    if(  座標取得_Ｙ( p2 ) == BASE_LINE  )  攻撃ポイント設定( &hit_ドラゴン乱舞1, OFF );
      else                                 攻撃ポイント設定( &hit_ドラゴン乱舞F, OFF );
                                            /*  空中でヒットした時だけ、空中多段にする  */
  }
  else  if(  c >= 18  )
  {
    short  index = BASE_LINE - 座標取得_Ｙ( p1 ) ;
    
    if(  index < 0  )  index = 0 ;  /*  念のため一応  */
    
    index >>= 3 ;
    
    座標設定_移動( p1, X01[ index ] , 0,DRCT_前 );
    
    座標設定_移動( p1, 0, Y01[ index ] , DRCT_中 );
    
    if(  index > 2  )  セル設定_表示( p1, CELL_必殺技Ａ3 );
      else             セル設定_表示( p1, CELL_必殺技Ａ4 );
      
    if(  座標取得_Ｙ( p1 ) < BASE_LINE  )  カウンタ設定_値維持( p1 );
                              /*  着地するまでカウンタの自動デクリメントをキャンセルする  */
  }
  else  if(  c >= 17  )
  {
    座標設定_Ｙ( p1, BASE_LINE );  /*  自分の体の高さを、確実に地面に合わせる  */
    
    セル設定_表示( p1, CELL_必殺技Ａ5 );
  }
  else  if(  c >= 16  )  /*  ３発目開始  */
  {
    攻撃設定_最多ヒット数( p1, 1 );  /*  最後は１ヒットしかさせない  */
    
    占有音声再生_標準( PCM_必殺技A );
    
    共有音声再生_標準( PCM_振り2 );
    
    セル設定_表示( p1, CELL_必殺技Ａ0 );
  }
  else  if(  c >= 15  )
  {
    セル設定_表示( p1, CELL_必殺技Ａ1 );
    
    攻撃ポイント設定( &hit_ドラゴン乱舞2, OFF );
  }
  else  if(  c >= 14  )
  {
    short  index = ( BASE_LINE - 座標取得_Ｙ( p1 ) ) >> 3 ;  /*  軌道テーブルのオフセット  */
    
    if(  index < 7  )
    {
      座標設定_移動( p1, X10[ index ] , 0,DRCT_前 );
      
      座標設定_移動( p1, 0, Y10[ index ] , DRCT_中 );
      
      カウンタ設定_値維持( p1 );  /*  カウンタの自動デクリメントをキャンセルする  */
    }
    
    セル設定_表示( p1, CELL_必殺技Ａ2 );
    
    攻撃ポイント設定( &hit_ドラゴン乱舞2, OFF );
  }
  else  if(  c >= 13  )
  {
    short  index = BASE_LINE - 座標取得_Ｙ( p1 ) ;
    
    if(  index < 0  )  index = 0 ;  /*  念のため一応  */
    
    index >>= 3 ;
    
    座標設定_移動( p1, 0, Y11[ index ] , DRCT_中 );
    
    if(  index > 2  )  セル設定_表示( p1, CELL_必殺技Ａ3 );
      else             セル設定_表示( p1, CELL_必殺技Ａ4 );
      
    if(  座標取得_Ｙ( p1 ) < BASE_LINE  )  カウンタ設定_値維持( p1 );
                              /*  着地するまでカウンタの自動デクリメントをキャンセルする  */
  }
  else  if(  c >= 9  )
  {
    座標設定_Ｙ( p1, BASE_LINE );  /*  自分の体の高さを、確実に地面に合わせる  */
    
    セル設定_表示( p1, CELL_必殺技Ａ5 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_着地 );
  }
  else
  {
    セル設定_表示( p1, CELL_着地 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  必殺技Ｍ( p1, p2 )  /*  竜巻旋風脚  */
/*==========================================================================================*/

int  p1, p2;

{
  static  short  c0 ;  /*  特別な処理をさせるので、静的変数を確保する  */
  
  short  c = カウンタ設定_初期値( p1, 48 ) ;
  
  スーパーコンボ停止();  /*  ＣＰＵが勝手にスパコン扱いしてしまうのを防ぐ  */
  
  if(  c >= 48  )
  {
    状態設定_無敵( p1 , IVC_通常, 0 );  /*  必殺技は最初、無敵状態にされているので解除する  */
    
    攻撃設定_最多ヒット数( p1, 3 );
    
    c0 = 0 ;
    
    if(  攻撃取得_威力レベル( p1 ) == 大  )  占有音声再生_標準( PCM_必殺技M );  /*  高い声  */
      else                          占有音声再生_標準( PCM_必殺技M );  /*  低い声  */
      
    セル設定_表示( p1, CELL_垂直Ｊ技B0 );  /*  垂直ジャンプから流用  */
  }
  else  if(  c >= 47  )
  {
    座標設定_移動( p1, 1 , 0,DRCT_前 );
    
    座標設定_移動( p1, 0, -5 , DRCT_中 );  /*  上昇  */
    
    セル設定_表示( p1, CELL_垂直Ｊ技B0 );  /*  垂直ジャンプから流用  */
    
    if(  座標取得_Ｙ( p1 ) <= BASE_LINE-30  )  /*  上昇完了の場合  */
    {
      座標設定_Ｙ( p1, BASE_LINE-30 );  /*  完了時の高さに、確実に合わせる  */
      
      if(  攻撃取得_威力レベル( p1 ) == 小  )  カウンタ設定_現在値( p1, 26 );
              /*  Ｂボタンの場合、回転時間を減らすためにカウンタの値を少なくしてやる  */
    }
    else
    {
      カウンタ設定_値維持( p1 );   /*  上昇完了までカウンタの自動デクリメントをキャンセルする  */
    }
  }
  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 の２点だけに攻撃判定を持たせる  */
    {
      共有音声再生_標準( PCM_振り2 );
      
      攻撃ポイント設定( &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
  {
    共有音声再生_標準( PCM_着地 );
    
    セル設定_表示( p1, CELL_着地 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  空中必殺( p1, p2 )  /*  空中竜巻旋風脚  */
/*==========================================================================================*/

int  p1, p2;

{
  static  short  c0, c1, c2 ;  /*  特別な処理をさせるので、静的変数を確保する  */
  
  short  c = カウンタ設定_初期値( p1, 13 ) ;
  
  スーパーコンボ停止();  /*  ＣＰＵが勝手にスパコン扱いしてしまうのを防ぐ  */
  
  空中竜巻状態 = 1 ;  /*  大域変数に 1 を設定。ここがかなり特殊  */
  
  if(  c >= 13  )
  {
    攻撃設定_最多ヒット数( p1, 3 );
    
    c0 = c1 = 0 ;
    
    if(  攻撃取得_威力レベル( p1 ) == 大  )  占有音声再生_標準( PCM_必殺技M );  /*  高い声  */
      else                          占有音声再生_標準( PCM_必殺技M );  /*  低い声  */
      
    if(  攻撃取得_威力レベル( p1 ) == 大  )  c2 = 32 ;  /*  Ａ,Ｂボタンで飛行時間を決める  */
      else                          c2 = 16 ;
      
    セル設定_表示( p1, CELL_必殺技Ｍ3 );
  }
  else  if(  c >= 12  )
  {
    if(  状態取得_ジャンプ方向( p1 ) != 後  )  座標設定_移動(     p1, 1 , 0,DRCT_前 );  /*  後方ジャンプの時だけ  */
      else                            座標設定_移動( p1, 1 , 0, DRCT_動作 );  /*  飛行方向が変わる      */
      
          if(  c0 < 2  )  セル設定_表示( p1, CELL_必殺技Ｍ0 );  /*  回転パターン  */
    else  if(  c0 < 4  )  セル設定_表示( p1, CELL_必殺技Ｍ1 );
    else  if(  c0 < 6  )  セル設定_表示( p1, CELL_必殺技Ｍ2 );
    else                  セル設定_表示( p1, CELL_必殺技Ｍ3 );
    
    if(  c0 == 0  ||  c0 == 4  )  /*  C0=0,4 の２点だけに攻撃判定を持たせる  */
    {
      共有音声再生_標準( PCM_振り2 );
      
      攻撃ポイント設定( &hit_竜巻旋風脚, OFF );
    }
    
    if(  ( ++ c0 ) >= 9  )  c0 = 0 ;  /*  静的変数を回す  */
    
    if(  c2 -- > 0  )  カウンタ設定_値維持( p1 );
                         /*  飛行時間の間は、カウンタの自動デクリメントをキャンセルする  */
  }
  else  if(  c >= 9  )
  {
    if(  状態取得_ジャンプ方向( p1 ) != 後  )  座標設定_移動２(     p1, 0, 0, DRCT_前, 2 );
      else                            座標設定_移動２( p1, 0, 0, DRCT_動作, 2 );
      
    座標設定_移動( p1, 0, 4 , DRCT_中 );  /*  下降  */
    
    セル設定_表示( p1, CELL_垂直Ｊ技B0 );
  }
  else  if(  c >= 4  )
  {
    if(  状態取得_ジャンプ方向( p1 ) != 後  )  座標設定_移動２(     p1, 0, 0, DRCT_前, 2 );
      else                            座標設定_移動２( p1, 0, 0, DRCT_動作, 2 );
      
    座標設定_移動( p1, 0, 6 , DRCT_中 );  /*  下降（加速）  */
    
    セル設定_表示( p1, CELL_前方ジャンプ6 );
    
    if(  座標取得_Ｙ( p1 ) >= BASE_LINE  )  カウンタ設定_現在値( p1, 2 );
  }
  else  if(  c >= 3  )
  {
    if(  状態取得_ジャンプ方向( p1 ) != 後  )  座標設定_移動２(     p1, 0, 0, DRCT_前, 3 );
      else                            座標設定_移動２( p1, 0, 0, DRCT_動作, 3 );
      
    座標設定_移動( p1, 0, 9 , DRCT_中 );
    
    セル設定_表示( p1, CELL_前方ジャンプ6 );
    
    if(  座標取得_Ｙ( p1 ) < BASE_LINE  )  カウンタ設定_値維持( p1 );
                              /*  着地するまでカウンタの自動デクリメントをキャンセルする  */
  }
  else  if(  c >= 1  )
  {
    座標設定_Ｙ( p1, BASE_LINE );  /*  自分の体の高さを、確実に地面に合わせる  */
    
    セル設定_表示( p1, CELL_着地 );
  }
  else
  {
    共有音声再生_標準( PCM_着地 );
    
    セル設定_表示( p1, CELL_着地 );
    
    同期完了_複合攻撃( p1);
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  地上投げ( p1, p2 )  /*  背負い投げ  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c = カウンタ設定_初期値( p1, 66 ) ;
  
  状態設定_無敵( p1 , IVC_ゾンビ, 0 );  /*  自分の体が何にも衝突しないようにする  */
  
  if(  c >= 66  )
  {
    同期開始_地上投げ( p1, 24 ,DRCT_自動 );  /*  地上投げの開始をシステムに宣告する  */
    
    占有音声再生_標準( PCM_投げ );  /*  相手を掴んだ瞬間に、掛け声を出させる  */
    
    セル設定_表示( p1, CELL_地上投げ0 );
  }
  else  if(  c >= 47  )
  {
    セル設定_表示( p1, CELL_地上投げ0 );
  }
  else  if(  c >= 48  )
  {
    背景スクロール停止();  /*  背景スクロールをとりあえず停止させる  */
    
    座標設定_移動( p1, -4 , 0, DRCT_動作 );
    
    セル設定_表示( p1, CELL_地上投げ0 );
  }
  else  if(  c >= 38  )
  {
    セル設定_表示( p1, CELL_地上投げ1 );
  }
  else  if(  c >= 39  )
  {
    背景スクロール停止();  /*  背景スクロールを再び停止させる  */
    
    座標設定_移動( p1, -4 , 0, DRCT_動作 );
    
    セル設定_表示( p1, CELL_地上投げ1 );
  }
  else  if(  c >= 33  )
  {
    セル設定_表示( p1, CELL_地上投げ2 );
  }
  else  if(  c >= 1  )
  {
    セル設定_表示( p1, CELL_地上投げ3 );
  }
  else
  {
    セル設定_表示( p1, CELL_地上投げ3 );
    
    同期完了_攻撃( p1);
  }
}

/*==========================================================================================*/
  void  ＪＵＭＰ( p1, p2 )  /*  ジャンプ中の処理  */
/*==========================================================================================*/

int  p1, p2;

{
  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 ) == 中  )
        {
                if(  y > BASE_LINE-48  )  セル設定_表示( p1, CELL_ジャンプ0 );
          else  if(  y > BASE_LINE-56  )  セル設定_表示( p1, CELL_ジャンプ1 );
          else                            セル設定_表示( p1, CELL_ジャンプ2 );
        }
        else  if(  状態取得_ジャンプ方向( p1 ) == 前  )
        {
                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_着地 );
        
        共有音声再生_標準( PCM_着地 );
        
        カウンタ設定_現在値( p1, 4 );  /*  着地後の隙は 4 サイクルにする  */
        
        同期進行_ジャンプ着地( p1 );  /*  ジャンプが終了し着地したことを、システムに通知する  */
        
        同期進行_動作過程( p1 );  /*  次の動作過程に進行させる  */
        
        break;
      }
      
      if(  状態取得_複合攻撃動作 p1 ) == OFF  )  /*  何も攻撃技を出していない場合のみ、セルを設定  */
      {
        if(  状態取得_ジャンプ方向( p1 ) == 中  )
        {
                if(  BASE_LINE- 92 > y  )  セル設定_表示( p1, CELL_ジャンプ2 );
          else  if(  BASE_LINE- 86 > y  )  セル設定_表示( p1, CELL_ジャンプ3 );
          else                             セル設定_表示( p1, CELL_ジャンプ0 );
        }
        else  if(  状態取得_ジャンプ方向( p1 ) == 前  )
        {
                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;
  }
}

/*==========================================================================================*/
  void  不時着( p1, p2 )  /*  受け身等の処理  */
/*==========================================================================================*/

int  p1, p2;

{
  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 )  )  /*  着地した場合  */
  {
    共有音声再生_標準( PCM_着地 );
    
    セル設定_表示( p1, CELL_着地 );
    
    カウンタ設定_現在値( p1, 3 );
    
    同期完了_不時着( p1 );  /*  不時着が完了したことを、システムに通知する  */
  }
}

/*==========================================================================================*/
  void  気絶( p1, p2 )  /*  気絶中の処理  */
/*==========================================================================================*/

int  p1, p2;

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

/*==========================================================================================*/
  void  変身( p1, p2 )  /*  変身する瞬間の処理  */
/*==========================================================================================*/

int  p1, p2;

{
  Pal設定_身体変身色( p1, 1 );  /*  自分の体の色を変身時の色にする  */
  
  共有音声再生_標準( PCM_投げ );  /*  気合いの声  */
}

/*==========================================================================================*/
  void  勝利( p1, p2 )  /*  勝ったときのポーズ  */
/*==========================================================================================*/

int  p1, p2;

{
  short  c = カウンタ設定_初期値( p1, 7 ) ;  /*  カウンタを使用してアニメーションさせる  */
  
  if(  c >= 1  )  セル設定_表示( p1, CELL_ポーズ0 );
    else          セル設定_表示( p1, CELL_ポーズ1 );
  
  /*  カウンタが０になると、この動作は自動的に終了される  */
}

/*==========================================================================================*/
  void  連続技( p1, p2 )  /*  エンディングにおけるキャラ紹介用の連続技  */
/*==========================================================================================*/

int  p1, p2;

{
  switch(  同期取得_連続技( p1,)  )  /*  システムが保持する連続技過程変数に応じて処理内容を決める  */
  {
    case  0 :  /*  初期設定  */
      
      座標設定_Ｘ( p1,  40 );  /*  自分の位置  */
      座標設定_Ｘ( p2, 120 );  /*  木箱の位置  */
      
      同期進行_連続技( p1,);  /*  次の連続技過程へ進行  */
      
      break;
      
    case  1 :
      
      Cmd実行_動作( p1, ACT_ジャンプ );  /*  飛び込み  */
      
      状態設定_ジャンプ方向( p1, 前 );  /*  前方へ  */
      
      if(  座標取得_複合攻撃点( p1, -60 ) != OFF  )  /*  自分の高さが BASE_LINE-60 の時  */
      {
        Cmd実行_動作( p1, SUB_前後Ｊ技A );  /*  ストレート  */
        
        同期進行_連続技( p1,);  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    case  2 :
      
      if(  コマンド受付チェック() != OFF  )  /*  アイドルになったら  */
      {
        Cmd実行_動作( p1, ACT_直立攻撃B );  /*  ハイキック  */
        
        同期進行_連続技( p1,);  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    case  3 :
      
      if(  コマンド受付チェック() != OFF  )  /*  アイドルになったら  */
      {
        Cmd実行_動作( p1, ACT_座り攻撃B );  /*  キック  */
        
        同期進行_連続技( p1,);  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    case  4 :
      
      if(  コマンド受付チェック() != OFF  )  /*  アイドルになったら  */
      {
        Cmd実行_動作( p1, ACT_直立攻撃A );  /*  アッパー  */
        
        同期進行_連続技( p1,);  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    case  5 :
      
      if(  Cmd条件_地上必殺技( p1, ON, OFF ) != OFF  )  /*  キャンセル可能になったら  */
      {
        Cmd実行_動作( p1, ACT_必殺技Ａ );  /*  昇龍拳  */
        
        攻撃設定_威力レベル( p1, 小 );  /*  小  */
        
        スーパーコンボ停止();  /*  ＣＰＵが勝手にスパコン扱いしてしまうのを防ぐ  */
        
        同期進行_連続技( p1,);  /*  次の連続技過程へ進行  */
      }
      
      break;
      
    default :
      
      同期完了_連続技( p1);  /*  連続技が完了したことを、システムに通知する  */
      
      break;
  }
}

/*==========================================================================================*/
  void  地上必殺技コマンド関数( p1, p2 )  /*  地上必殺技コマンドの判定  */
/*==========================================================================================*/

int  p1, p2;

{
  /*  先に判定処理が行われるコマンドほど優先順位が高い  */
  
  if(  Cmd条件_地上必殺技( p1, ON, OFF ) != OFF  )  ドラゴン乱舞コマンド();
  if(  Cmd条件_地上必殺技( p1, ON, OFF ) != OFF  )  昇龍拳コマンド();
  if(  Cmd条件_地上必殺技( p1, ON, OFF ) != OFF  )  波動拳コマンド();
  if(  Cmd条件_地上必殺技( p1, ON, OFF ) != OFF  )  竜巻旋風脚コマンド();
}

/*==========================================================================================*/
  void  空中必殺技コマンド関数( p1, p2 )  /*  空中必殺技コマンドの判定  */
/*==========================================================================================*/

int  p1, p2;

{
  /*  先に判定処理が行われるコマンドほど優先順位が高い  */
  /*  といっても１種類しかないが・・・。                */
  
  if(  Cmd条件_空中必殺技( p1, ON, OFF ) != OFF  )  空中竜巻コマンド();
}

/*==========================================================================================*/
  void  ドラゴン乱舞コマンド()
/*==========================================================================================*/
{
  if(  スーパーコンボ許可状態() == OFF  )  return;  /*  スーパーコンボ不可ならばリターン  */
  
  if(  Trg取得_直接状態( p1 ) != 0  )  /*  Ａ,Ｂボタンのどちらかが押すか離されるかした  */
  {
    Stc取得_初期化( p1, 44 );  /*  コマンド入力待ちサイクルは 44  */
    
    if(  Stc取得_存在( p1, STICK_前下 )  )
    {
      if(  Stc取得_存在( p1, STICK_下 )  )
      {
        if(  Stc取得_存在( p1, STICK_前 )  )
        {
          if(  Stc取得_存在( p1, STICK_前下 )  )
          {
            if(  Stc取得_存在( p1, STICK_下 )  )
            {
              Cmd実行_地上必殺技( p1, ACT_必殺技Ａ , LEVEL_自動 );  /*  昇龍拳を成立させる  */
              
              Cmd設定_超技( p1, ON ) ;  /*  スーパーコンボのフラグを立てる  */
            }
          }
        }
      }
    }
  }
}

/*==========================================================================================*/
  void  昇龍拳コマンド()
/*==========================================================================================*/
{
  if(  Trg取得_直接状態( p1 ) != 0  )  /*  Ａ,Ｂボタンのどちらかが押すか離されるかした  */
  {
    Stc取得_初期化( p1, 20 );  /*  コマンド入力待ちサイクルは 20  */
    
    if(  Stc取得_存在( p1, STICK_前下 )  )
    {
      if(  Stc取得_存在( p1, STICK_下 )  )
      {
        if(  Stc取得_存在( p1, STICK_前 )  )  Cmd実行_地上必殺技( p1, ACT_必殺技Ａ , LEVEL_自動 );
      }
    }
  }
}

/*==========================================================================================*/
  void  波動拳コマンド()
/*==========================================================================================*/
{
  if(  Trg取得_直接状態( p1 ) != 0  )  /*  Ａ,Ｂボタンのどちらかが押すか離されるかした  */
  {
    Stc取得_初期化( p1, 20 );  /*  コマンド入力待ちサイクルは 20  */
    
    if(  Stc取得_存在Ｎ( p1, STICK_前 )  )  /*  ニュートラルのみ混在を許可  */
    {
      if(  Stc取得_存在( p1, STICK_前下 )  )
      {
        if(  Stc取得_存在( p1, STICK_下 )  )
        {
          if(  飛び道具使用状態() == 0  )  Cmd実行_地上必殺技( p1, ACT_必殺技Ｓ , LEVEL_自動 );
        }
      }
    }
  }
}

/*==========================================================================================*/
  void  竜巻旋風脚コマンド()
/*==========================================================================================*/
{
  if(  Trg取得_直接状態( p1 ) != 0  )  /*  Ａ,Ｂボタンのどちらかが押すか離されるかした  */
  {
    Stc取得_初期化( p1, 20 );  /*  コマンド入力待ちサイクルは 20  */
    
    if(  Stc取得_存在Ｎ( p1, STICK_後 )  )  /*  ニュートラルのみ混在を許可  */
    {
      if(  Stc取得_存在( p1, STICK_後下 )  )
      {
        if(  Stc取得_存在( p1, STICK_下 )  )  Cmd実行_地上必殺技( p1, ACT_必殺技Ｍ , LEVEL_自動 );
      }
    }
  }
}

/*==========================================================================================*/
  void  空中竜巻コマンド()
/*==========================================================================================*/
{
  if(  Trg取得_直接状態( p1 ) != 0  )  /*  Ａ,Ｂボタンのどちらかが押すか離されるかした  */
  {
    Stc取得_初期化( p1, 20 );  /*  コマンド入力待ちサイクルは 20  */
    
    if(  Stc取得_存在( p1, STICK_後 )  )
    {
      if(  Stc取得_存在( p1, STICK_後下 )  )
      {
        if(  Stc取得_存在( p1, STICK_下 )  )  Cmd実行_空中必殺技( p1, SUB_空中必殺 , LEVEL_自動 );
      }
    }
  }
}

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