堕落街道まっしぐら。

現在のゲームプレイ状況: アリスギア = ウマ娘 > DMMブラゲ > Crossout >> それ以外

MUGEN+/幽霊ちゃんを作る 39

イメージ 1

イメージ 2

食事や仮眠時間込みで約12時間半かかった。満足はしている。

~ ~ ~

さて、攻撃ステート監視記述でござる。


・相手のステート監視用記述
  すでにAI補助ヘルパーに内臓されてるので割愛

・相手の攻撃が接触した時間
  とりあえずEnemyNear,MoveContact = 1の時のEnemyNear,Timeで

・相手の攻撃が接触した時の距離
  とりあえずEnemyNear,MoveContact = 1の時の擬似P2BodyDist Xさん

・過去の成否履歴
  相手が該当ステートの時に当て身フラグONなのにやられ状態になったか否かを保管?



実際の処理草案

・保管場所の指定

[State ****, AI]; 既に保管済の場合
type = VarSet
triggerall = EnemyNear,MoveType = A
triggerall = var(A) != EnemyNear,StateNo
trigger1 = var(1) = Enemy,StateNo || var(2) = Enemy,StateNo || var(3) = Enemy,StateNo
trigger2 = var(4) = Enemy,StateNo || var(5) = Enemy,StateNo || var(6) = Enemy,StateNo
(省略)
var(A) = イ*(var(1)=Enemy,StateNo)+ロ*(var(2)=Enemy,StateNo)+ハ*(var(3)=Enemy,StateNo)+ . . .

;トリガー判別中に変数を入れるやつ(:=みたいな記号のやつ)を使えばもっとすっきりする予感

[State ****, AI]; まだ未保管の場合
type = VarSet
triggerall = EnemyNear,MoveType = A
triggerall = var(A) != EnemyNear,StateNo
trigger1 = var(1) != Enemy,StateNo && var(2) != Enemy,StateNo && var(3) != Enemy,StateNo
trigger1 = var(4) != Enemy,StateNo && var(5) != Enemy,StateNo && var(6) != Enemy,StateNo
(省略)
var(A) = イ



・相手の攻撃動作を分析/保管

[State ****, AI]; ステート番号記憶
type = VarSet
triggerall = EnemyNear,StateType = S || EnemyNear,StateType = C
triggerall = EnemyNear,HitDefAttr = SC,AA || EnemyNear,HitDefAttr = SC,AT
trigger1 = EnemyNear,Facing != Facing && EnemyNear,MoveContact = 1
V = var(A)
Value = EnemyNear,StateNo

[State ****, AI]; 発生フレーム記憶
type = VarSet
triggerall = EnemyNear,StateType = S || EnemyNear,StateType = C
triggerall = EnemyNear,HitDefAttr = SC,AA || EnemyNear,HitDefAttr = SC,AT
trigger1 = EnemyNear,Facing != Facing && EnemyNear,MoveContact = 1
V = var(A)+1
Value = EnemyNear,Time

[State ****, AI]; 接触距離記憶
type = VarSet
triggerall = EnemyNear,StateType = S || EnemyNear,StateType = C
triggerall = EnemyNear,HitDefAttr = SC,AA || EnemyNear,HitDefAttr = SC,AT
trigger1 = EnemyNear,Facing != Facing && EnemyNear,MoveContact = 1
V = var(A)+2
Value = EnemyNear,P2BodyDist X

[State ****, AI]; 失敗を記憶1
type = VarAdd
triggerall = EnemyNear,StateType = S || EnemyNear,StateType = C
triggerall = EnemyNear,HitDefAttr = SC,AA || EnemyNear,HitDefAttr = SC,AT
trigger1 = EnemyNear,Facing != Facing && EnemyNear,MoveHit = 1
trigger1 = var(A)+3 < 3 && var(A)+3 != 1
trigger1 = var(X) = 1 ;当て身1実行フラグ
V = var(A)+3
Value = 1

[State ****, AI]; 失敗を記憶2
type = VarAdd
triggerall = EnemyNear,StateType = S || EnemyNear,StateType = C
triggerall = EnemyNear,HitDefAttr = SC,AA || EnemyNear,HitDefAttr = SC,AT
trigger1 = EnemyNear,Facing != Facing && EnemyNear,MoveHit = 1
trigger1 = var(A)+3 < 3 && var(A)+3 != 2
trigger1 = var(X) = 2 ;当て身2実行フラグ
V = var(A)+3
Value = 2

;var(A)+3=0の時は「まだ失敗していない状態」=現状維持でおk
;var(A)+3=1の時は「当て身1が失敗した状態」=当て身2を実行
;var(A)+3=2の時は「当て身2が失敗した状態」=当て身1を実行
;var(A)+3=3の時は「両方の当て身が失敗した状態」=この攻撃に対しては当て身を実行しない



ここまで書いて力尽きた。カットイン加工に頑張りすぎたでござる。
問題は記憶したいだけの空き変数がどこにあるか。