AIに関するとりとめのない雑記

 このページに記載されたことがらは、全てメモ書きであり、雑記です。記述サンプルの使用、本文の転載などは自由ですが、間違っていることを書いている場合が多々あると思われますので、ご了承ください。

  • 今すぐ使えるAIお役立ち記述集

[state ];タッグ対応用enemynear変数
type=varset
triggerall=var(59)&&roundstate=2
trigger1=numenemy=1
trigger2=numenemy=2&&enemynear(0),life>0
var(56)=0
ignorehitpause=1

[state ]
type=varset
triggerall=var(59)&&roundstate=2
trigger1=numenemy=2&&enemynear(0),life<=0
var(56)=1
ignorehitpause=1

コメントアウトにある通り、タッグ時用の識別記述。変数一個使用。
これを用いると、タッグ時に死体に対して攻撃したり固まったりしなくなる。

trigger1=enemynear(var(56)),movetype=A

enemynearを全部、こんな感じで置換して使う。要するに、一番近い相手が死体なとき、それを無視する、という記述になる。


[state ];
type=changestate
value=ifelse(random%2,230,430)
triggerall=var(59)&&roundstate=2&&statetype!=A&&ctrl&&enemynear(var(56)),statetype!=A
triggerall=enemynear(var(56)),movetype!=A&&enemynear(var(56)),movetype!=H
triggerall=enemynear(var(56)),statetype!=A&&enemynear(var(56)),statetype!=L
trigger1=p2bodydist x<=105
trigger1=var(58)=[351,600]

「ifelse」を便利に使おうというお話。ifelseは、「条件を満たしたらA、そうでなければB」という分岐に使う。例えば、上では、リーチも用途も発生も殆ど同じ技を、半々で振ってみる、というやつ。回避したいが、別に前転後転どっちでもいい場合とかにも使える。ワンパターン行動を防ごう。

value=ifelse( (enemynear(var(56)),statetype=C,420,220);空白はwiki文法避け

こうだと、相手がしゃがんでいるなら420番、そうでなければ220番。要するに、下段潰しかそうでないか。
わざわざ同じような記述を書く手間が省けるし、記述サイズも減らせる。但し、条件の設定はきちんとすること。あと、対空か否か、とか射撃か否か、で分岐させるのは止めたほうが良い。だいたいそういった類いの切り返しは、地上切り返しより優先すべきだからですね。
あ、ifelseに更にifelseすることも出来るけど、管理がめんどくさくなるからお勧めはしない。自分はそれするなら記述を潔く分ける。後で読んでて分からないし……・


trigger1=(atan( (p2dist x-(p2dist x=0))/(p2dist y-(p2dist y=0)) )*180/pi ) - ( (p2dist y>0)-(p2dist y<=0))*90=[15,50]

自分から見た相手の角度を割り出す記述。シングル専用。最後の=[15,50]の角度に相手が入ると有効になる。
この角度は、マイキャラの存在する足判定から測る。真上が90°。つまり、ジャンプして斜め下に飛び道具でも撃ちたいなら-X°を入れてやる。
使い道としては、空中で飛び道具や急降下を放つとき(豪斬空とか百鬼襲辺り)とか、ビーム系で斜めに撃てる射撃を当てるときとか。vel yとかと組み合わせて、簡易的に相手が飛び込んでいるのか飛び越しているのかを判断するというのもあり。実用性はあんまり無いけど。


enemy,ctrl=0&&enemynear,animtime<-X

相手のアニメ残り時間を測る。enemynear(var(XX)),movetype=Aとかanimtime=[-X,-Y]とかで攻撃動作のみ監視するとか反応する時間を制限したり出来る。相手の隙を潰したり攻撃を発生前に潰したりといった、「AIっぽい動作」が出来る。確率を低めにしておかないとホイホイ釣られて無事死亡するので注意。


enemynear(var(xx)),gethitvar(hittime)+enemynear(var(xx)),gethitvar(hitshaketime)+2>X

相手ののけぞりを計測する。目押しとかタッグの追撃とかに使える。Xには攻撃の発生速度を入れておく。万全を期すならenemynear(var(XX),movetype=H&&enemynear(var(XX)),stateno!=[120,155]辺りも足しておけばいいと思う。

タグ:

+ タグ編集
  • タグ:
最終更新:2021年09月18日 16:32