スマブラXのAIでは2,30の命令を使ってCPの動きを制御しています。
AIScriptpadでは、すでにわかっているコマンドに関してはResourcesフォルダのCommandFormats.txtにしたがって出力します。わかっていないコマンドはRaw関数で表示します。
AIScriptpadでは、すでにわかっているコマンドに関してはResourcesフォルダのCommandFormats.txtにしたがって出力します。わかっていないコマンドはRaw関数で表示します。
与える引数は基本的に次のようになります。
~0x18 ゲーム内部の配列インデックス。加減乗除等は配列を介さないと行えません。
0x1000~ ゲーム内関数。キャラの位置や状態などを取得する
0x2000~ ユーザー定義値。AIScriptpadではAddGlobal関数で追加可能。
~0x18 ゲーム内部の配列インデックス。加減乗除等は配列を介さないと行えません。
0x1000~ ゲーム内関数。キャラの位置や状態などを取得する
0x2000~ ユーザー定義値。AIScriptpadではAddGlobal関数で追加可能。
ただし、ButtonコマンドやLabelコマンドの例外も存在します。
Commands
名前 | 引数 | 説明 |
Raw | 第一引数:タイプ 第二引数:コマンドの引数 |
これはわかっていないコマンドを表示するために使うデフォルトの関数です。 |
Finish | 現在のAIを終わらせる | |
SetVar | 第一引数:インデックス 第二引数:コマンド引数 |
ゲーム内配列の指定されたインデックスの値を第二引数にセットする。 |
Label | (第一引数:ラベルID) | Seekのラベルをセットする |
Return | 後述 | |
Seek | (第一引数:ラベルID) | 後述 |
If | 第一引数:条件 以降は可変長 |
後述 |
IfNot | 第一引数:条件 以降は可変長 |
条件を満たさないとき、後の処理を行う |
Else | If,IfNotの処理を行わないとき、代替の処理を行う | |
EndIf | If,IfNotのブロックを終わる。ElseはIf,IfNotの一部として考える | |
Stick | オーバーロード1:第一引数:X オーバーロード2:第一引数:X、第二引数:Y |
スティックの倒し方を-1~1の範囲で指定。人間くさい動きをさせるためなのかたまにミスることあり |
Button | 第一引数:フラグ | 指定されたボタンの入力を行う。引数はフラグで、指定されたボタンは完璧な同時押しがされる。 1ビット目:A、2ビット目:B、3ビット目:XかY、4ビット目:RかL |
Add | 第一引数:インデックス 第二引数:値 |
指定したインデックスに格納されている値に第二引数で指定した値を加え、同じインデックスに戻す。プログラミング言語で言う+= |
Sub | 第一引数:インデックス 第二引数:値 |
指定したインデックスに格納されている値に第二引数で指定した値を引き、同じインデックスに戻す。プログラミング言語で言う-= |
Mul | 第一引数:インデックス 第二引数:値 |
指定したインデックスに格納されている値に第二引数で指定した値を掛け合わせ、同じインデックスに戻す。プログラミング言語で言う*= |
Div | 第一引数:インデックス 第二引数:値 |
指定したインデックスに格納されている値に第二引数で指定した値で割り、同じインデックスに戻す。プログラミング言語で言う/= |
Jump | 後述 | |
Or | 第一引数:条件 以降は可変長 |
後述 |
OrNot | 第一引数:条件 以降は可変長 |
後述 |
And | 第一引数:条件 以降は可変長 |
後述 |
AndNot | 第一引数:条件 以降は可変長 |
後述 |
CallAI | オーバーロード有り | 指定した引数のAIにジャンプする。戻ってこない? |
TargetStick | 第一引数:X | 一瞬スティック入力をする。ミスらない |
Seek2 | (第一引数:ラベルID) | Seekとまったく同じ |
Return,Seekの挙動について
Seekは引数もちと引数を持っていないものがあります。引数もちは探したラベルの位置まで即座にジャンプします。Returnをその後に使うとジャンプ元に帰ることができます。一方、引数を持たないものの場合、Jumpを使うとジャンプが可能ですが、帰れません。ちなみに、引数なしのSeekは引数を持っているラベルと持っていないラベルを区別しません。
Returnは使うといったんAIが停止しし、1フレーム後に再開します。再開前、Seekを使っていた場合には直後のラベル内を、Seekを使わないでReturnを使用した場合、現在のラベル先頭に戻ります。
Returnは使うといったんAIが停止しし、1フレーム後に再開します。再開前、Seekを使っていた場合には直後のラベル内を、Seekを使わないでReturnを使用した場合、現在のラベル先頭に戻ります。
If,IfNot,Or,OrNot,And,AndNot
これらは第一引数に条件をとります。条件は以下のようになります。
名前 | 追加の引数 | 説明 |
Distance(0x1001) | 第一引数:距離 | 距離が引数より大きいときtrue |
Frames(0x1002) | 第一引数:フレーム数 | 現在のAI開始時から引数のフレームよりフレーム数が経っていたらtrue |
IsAttacking(0x1003) | 敵が攻撃時にtrue | |
GT(0x1007) | 第一引数:比較元 第二引数:比較対象 |
比較元が比較対象より大きいときにtrueを返す |
LT(0x1008) | 第一引数:比較元 第二引数:比較対象 |
比較元が比較対象より小さいときにtrueを返す |
GE(0x1009) | 第一引数:比較元 第二引数:比較対象 |
比較元が比較対象より大きいときか等しいときにtrueを返す |
LE(0x100A) | 第一引数:比較元 第二引数:比較対象 |
比較元が比較対象より小さいときか等しいときにtrueを返す |
CalledAs(0x100C) | 第一引数:AIのID | 指定したIDでジャンプしてきたかどうかを返す |
ゲーム内関数
名前 | 説明 |
CharDirection(0x1002) | 自分の向き。左向きだと-1、右向きだと1 |
oPos(0x1003) | 敵が左にいるとき-1、右にいるとき1 |
Xcoord(0x1004) | 自分のX座標 |
oXcoord(0x1005) | 敵のX座標 |
oEdgeDist(0x1006) | 敵の方向にある崖までの自分からの距離 |
FrameCount(0x1007) | 現在のAIが始まってからの経過フレーム数 |
Ycoord(0x100B) | 自分のY座標 |
oYcoord(0x100C) | 敵のY座標 |
State(0x100F) | キャラの状態を表す (通常キャラ)1:吹っ飛び、2:通常 (多段ジャンプキャラ)4:ジャンプ、5:吹っ飛び、6:通常 |
EdgeDist(0x1010) | 自分が向いているほうにある崖までの距離 |
oHorizontalVelocity(0x1016) | 敵の水平方向の速度 |
oVerticalVelocity(0x1017) | 敵の垂直方向の速度 |