by adi ( フォント環境:MS ゴシック 標準 サイズ10 )  ■空中ジャンプをAIに行わせる為のCnsData書換え方式の記述  確認1:キャラ製作者でない場合、空中ジャンプの処理仕様の変更を行ってもいいか調べる。  確認2:Ctrlのジャンプ制御が-1や-3ステートなどにないかをチェックする。行われているならそれをいじる方が確実。  準備1:CnsファイルにあるDataなど中にある[Movement]のAirJump.Num(空中ジャンプ可能回数)をメモしてから      その数値を0にしておく。0である場合空中ジャンプをできないキャラか、-1,-3ステートなどで制御されている。  準備2:AirJump用に使うVarを決める。  記述1:↓にある本体に「対応させる記述」を-1ステートか、-3ステートの最後尾へと置く。  記述2:ジャンプ回数制限のところにある(Var(*AirJump用Var*))< *AirJump.Num*の数値を      準備1でメモしておいた数値に設定し、動作を確認する。  AI1:↓の↓にあるAI側の記述をAIにつけて、動作の処理を行わせる。 ;■本体に対応させる記述 [State -1, Air Jump];手操作側のジャンプ Type = ChangeState Value = 45 + ( Var(*AirJump用Var*):= (1+Var(*AirJump用Var*)) )*0;ジャンプ回数を加算 TriggerAll = !Var(*AIフラグ*) ;AIフラグ無し TriggerAll = StateType = A && Ctrl && Pos Y < -1*Const(Movement.AirJump.Height);前提条件 TriggerAll =(Var(*AirJump用Var*)&1073741823)< *AirJump.Num* ;ジャンプ回数制限 TriggerAll =(Var(*AirJump用Var*)&1073741824)= 0 ;上レバー制限 Trigger1 = Command = "holdup" ;これで設定可能なジャンプの最大回数は1073741823回まで。それは準無限ジャンプです。 [State -1, Air Jump Not Holdup];一度レバーを上以外にしなければいけない。 Type = Null Trigger1 = Command = "holdup" Trigger1 = 1|| Var(*AirJump用Var*):= (Var(*AirJump用Var*)|1073741824) Trigger2 = StateType = A Trigger2 = Command != "holdup" Trigger2 = 1|| Var(*AirJump用Var*):=((Var(*AirJump用Var*)|1073741824)-1073741824) [State -1, Air Jump Num Reset];回数制限リセット Type = Null Trigger1 = StateType != A Trigger1 = 1|| Var(*AirJump用Var*):= (Var(*AirJump用Var*)&1073741824);リセット ;■AI側の記述 [State -1, AI Air Jump] Type = ChangeState Value = 45 + ( Var(*AirJump用Var*):= (1+Var(*AirJump用Var*)) )*0;ジャンプ回数を加算 TriggerAll = Var(*AIフラグ*) ;AIフラグあり TriggerAll = StateType = A && Ctrl && Pos Y < -1*Const(Movement.AirJump.Height);前提条件 TriggerAll =(Var(*AirJump用Var*)&1073741823)< *AirJump.Num* ;ジャンプ回数制限 Trigger1 = **** ;AI用の条件  ■原理説明  まず、空中ジャンプの条件は、   1.StateType = A && Ctrl 空中でCtrlがある   2.MovementのAirJump.Height の数値よりも地面から高い。   3.MovementのAirJump.Num よりも空中ジャンプ処理の回数が少ない。   4.Commandが$U(789のいずれか)になった。(holdupでは無くup)  これらの条件を満たす時に、MUGEN側が空中ジャンプステート(45)へと飛ばす処理します。  ですが、空中ジャンプの回数を取得するトリガー情報が無いだけでなく、   Type=ChangeStateの命令で空中ジャンプを行わせても、空中ジャンプ処理と認識されず、  回数を数えるだけでは、AIの処理→MUGENの処理で限度よりも多く空中ジャンプができてしまいます。  それなら最初からAirJump.Numを0にしてしまい、   ChangeState側で処理をしてしまおうと言うのが、この記述の基本です。  次にVar関係の処理ですが、   Commandを新しく設定する手間を省くためCommand="holdup"で、   空中で一度レバーを上から外したかフラグを管理して使っています。  ビット演算でフラグを立てているため、分からない場合下手にいじらないこと。 Value = 45 + ( Var(**):= ( 1+Var(**) ) )*0 のVar加算代入の方法は、  「Valueは処理する時に参照される」ので、ChangeStateする時のみVarsetが行われます。  あとは空中で無くなった時、その数値をリセットさせるだけです。  ちなみにリセットはビット演算でレバーのフラグをわざわざ避けてます。   それにさほど意味はありません。 ;