■フレーム処理

フレーム(F)とは:60f/秒
処理の単位であり全体の処理を1周することが1フレーム
フレームが連なり処理表示を繰り返すことでコンピューターは「動いている・操作している」ように見える。
基本1秒につき60フレーム(=処理60周分)である。(設定で調整はできるが基本は60F/秒。)
  • 例えながら砕いて言うと
    • 映画フィルムの1コマ、あれが1フレームに相当します。
    • 表示を毎秒60コマ変えていくことで動かしているわけです。
      • ちなみに映画フィルムは24コマ/秒が一般的な規格。
ただし
手間の関係上キャラの画像も1枚/F、60枚/秒というのは困難。
一応、表示の最小単位が1Fごとと覚えておけばいい。、
映画フィルムレベルでも2~3Fに1枚表示で同レベルになる。
(アニメに関して言えば、最低限あるなら枚数よりも全体の流れの方が重要。)


■MUGENのフレーム処理

MUGENでも決まった順番で処理をしていく。
作っていてあまり気にしない部分だが、細かい処理にはとても重要。

※かなり大雑把な表
内部を解析したわけではないため、一部順序は実際と異なる可能性あり
検証の足りない部分は多いです
基本
  • フレーム開始処理
    • Ctrl=1系統の処理・ガードフラグ
  • キャラ・ステート処理
    • 順番はスロットID参照
    • 中身は後述する表を参照
      • ※Damage処理や生死判定自体はキャラ側で行われている
  • フレーム終了処理
    • SC-/BindToTargetなどのBind系の移動を行う?
    • 攻撃の命中処理を行う。
    • SC-/Projectileの処理をする。※キャラ側ではないので注意
    • SC-/Explodの処理をする。※キャラ側ではないので注意
    • その後描画処理する
  • フレーム終了
    • フレームレートに合わせて待機するかすぐ次のフレームを処理する。

 状態   内容   備考 

■フレーム開始時点■
フレーム開始処理 Ctrl=1による移動処理 ステート変更。Commonステート参照
↑自動振り向き処理 AutoTurnが可能である場合に、振り向く判定を行う。
手動ガード判定 ステート変更。ガード参照
自動起き上がり処理 ステート変更。Commonステート参照

■キャラ処理■
キャラ同士の順番はスロットID参照
常時監視ステート -3番(ステート処理補助) ステートを奪われている状態では読み込まない
-2番(常駐処理) ステートを奪われていても読み込む。
その関係上T-/StateNo条件などは基本使わないこと
-1番(基本コマンド認識) ステートを奪われている状態では読み込まない。
-2ステートでSelfStateで戻した場合は読み込むとのこと
番号ステート 現在のステート(StateNo 番号ステート。細かくはFile-/Stateファイルから参照
ステート移動実行後 実行したステートの読み込みを中断し次のステートを読み込む。
番号ステート後 ステ移動数リセット 2500Loopエラー用のカウントがリセット
ガード戻し処理 特定条件で140番からステート移動し再度番号ステート処理
詳しくはCommonステートの該当項目参照
速度処理・Vel反映 Velのページを参照
速度処理・Physics反映
速度処理・自動着地処理 一定条件で52番ステートへ移動。再度番号ステート処理
詳しくはVel参照。
ダメージ反映 T-/MoveType=HでGetHitVar(Damage)がある場合、
その数値分体力を減らす。
生死判定 T-/Life=0かつSC-/AssertSpecialのNoKOなどが無ければ
死亡判定となりT-/Aliveを0に、他試合終了判定を行う。
SC-/DestroySelf Helperキャラの消去を行う(少なくとも自動着地の後
キャラ処理後 次ヘ 次のキャラの処理を行う。無ければステート終了処理へ
キャラ処理 順番は基本スロットIDに応じて決定される。T-/IDではない。
詳しくはスロットIDを参照。
1.既存キャラの内、Movetype=AでスロットIDが若い順
2.既存キャラの内、MoveType!=AでスロットIDが若い順
3.新規Helperの射出された順番
SC-/Pauseなどが実行されている間は該当MoveTimeが無ければ処理スキップ。
ただし新規Helperは例外的にPause中でもスキップされない。

■ステート終了処理■
終了時点 キャラごとの順番処理など詳しくは不明
Bind系処理? Bind判定 SC-/BindToTargetなどのBind系の処理をする。
※検証不足。押し出し判定よりも優先、のはず
押し出し 衝突判定 重なっているキャラの押し出し判定を行う。
キャラごとの処理順については※調査不足※
SC-/Projectile処理 MoveTime判定 SC-/PauseSC-/SuperPauseに対するMoveTimeの残量確認
残量無し・もしくは本体停止状態の場合は処理をスキップする
※射出したフレームではスキップを行わない?
Time消失判定 ProjRemoveTime -経過時間 = 0がなら消失する。
速度処理 Velの分移動させる。
加速度処理 Accelの分Velに加算。※射出時点では加算しない?
画面外消失判定 消失する条件を満たしている場合消失する。
※画面外による消滅には移動が必要?
時間経過 Time系パラメータの残りを-1する?
RemoveTimeは不変。代わりに経過時間に1加算。
他は調査不足
表示について 本体停止中にProjRemoveTime=1+MoveTime有りで射出すると、
停止中表示されず停止解除後に1F表示される
表示は無くても命中はする。
RemoveTimeが2以上やMoveTime無しなら射出時点から表示される。
攻撃判定 攻撃の処理はT-/GameTime偶数,奇数で確認処理が逆順にみたいな状態?
他、属性について細かくは攻撃属性なども参照
SC-/ReversalDef判定 最も早い。ヒットしたら相手のSC-/HitDef
SC-/NotHitBySC-/HitByの無敵などを無効化する。
命中判定1
攻撃判定処理
SC-/HitDefSC-/Projectileについて
相手くらい判定へ攻撃判定が重なり
HitFlagが適合しているか。StateType属性が変化。
命中判定2
無敵
SC-/NotHitBySC-/HitByの無敵に適合していないかどうか。
命中判定3
HitOverride無敵
攻撃のP1StateNo指定かP2StateNo指定の有無と
SC-/HitOverrideを確認&。重なっている場合命中しない。
命中判定4
Target限度
既にTargetが8体あり、かつそのTargetの相手かどうか。
命中判定5
Priority
全員の攻撃のPriorityを確認し優先ヒット・回避を判定
攻撃処理 判定の結果、攻撃が命中していれば。
※細かい処理の順番は不明※
命中処理1
基本
判定に従い攻撃を受けた側をMovetype=HのCtrl=0にして、
汎用のくらいステートへ飛ばす。詳しくはCommonステートを参照。
SC-/ReversalDefのヒットでは変更せず?Ctrlは不明
命中処理2
ガードフラグ
攻撃のGuardFlagに適合するガードをしており、
SC-/HitOverRideが不適合なら、対応ガードくらいステートへ。
命中処理3
ステート奪取
攻撃のP2getP1Stateのフラグを確認しステートを奪う。
省略時、通常0、P2StateNo指定有り1。0指定でステートを奪わない。
命中処理4
相手ステート奪取
攻撃にP2StateNo指定がある場合
ヒットした相手をP2StateNoへステート変更。
命中処理5
相手ステート変更
攻撃にP2StateNo指定が無くガードでなければ
対応くらいステートへ飛ばす。Commonステート参照
SC-/ReversalDefのヒットでは行わない。
命中処理6
自分ステート変更
攻撃にP1StateNo指定がある場合
ヒットしたら自分のステート変更。
命中処理7
攻撃情報付与
攻撃の情報を相手に与える。
命中処理8
Damage加算
相手のDaamge量に攻撃のDamage数値を加算する。
SC-/HitOverride処理 属性が適合している場合発揮され、StateNoが変更される。
StateNo指定が-1の場合変更しない。
少なくとも通常対応くらいステート移行処理の後
Target SC-/HitOverrideが発揮していないなら
対象の相手をTargetとして認識する。
命中フラグ T-/MoveContact系のフラグを立てる。
T-/MoveHit,T-/MoveGuardedはもちろん区別。
Proj時消滅処理 Projによる攻撃を消滅させる
恐らく攻撃キャラ(対象キャラ順番)→次の攻撃キャラの処理順?
SC-/HitDefSC-/Projectileの順序・優先度は不明。
SC-/Explod処理 MoveTime判定 SC-/PauseSC-/SuperPauseに対するMoveTimeの残量確認
残っていない場合は処理をスキップする
※射出したフレームではスキップを行わない?
Time消失判定 RemoveTime -経過時間 = 0がなら消失する。
OnGetHit消失判定 RemoveOnGetHitが1で親キャラが攻撃を受けたなら消滅。
速度処理 Velの分移動させる。※Bindの影響をこの後に受ける
加速度処理 Accelの分Velに加算※射出時点では加算しない?
Bind判定 BindTime中、基準位置へ移動する
時間経過 BindTimeなどTime系パラメータの残りを-1する?
RemoveTimeは不変。代わりに経過時間に1加算。
他は調査不足
その他 雑多な処理判定?
表示処理 アニメ表示 命令に従ってキャラの描画をする
デバッグ表示 基本デバッグ表示を決定する。SC-/DisplayToClipboard系でない。
※デバッグPauseでのFRAMESは停止後+1増えて停止する模様
処理完了 フレーム経過 フレームレートが合うよう待機時間を整える。
※フレームレートが高い場合、その分待機せず次フレーム処理へ。

フレーム処理完全終了後、次のフレームへ移る

あくまで大雑把な推測を含む表なので鵜呑みにしないこと