*All archives   *Admin

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--:--  |  スポンサー広告  |  EDIT  |  Top↑

2012.03.12 (Mon)

AI誤作動問題

ちょっと,緊急性が高そうなバグがあったのでそれについて

bug.jpg

結論から先に言うと,私の作成した全てのAIおよびキャラAI起動暴発の危険性が確認されました。
全てです,やべぇ。

暴発条件は
①試合開始後1P(自)キャラを一切動かさない状態(AI未起動)
②2P(相手)キャラを1Pの後ろに回り込ませる
③1Pキャラでレバーで前か後ろに入力
④1PキャラAI暴発
※説明上,1P2Pと書いてますが,逆でも起きます。

原因は,AI起動用ヘルパーステート内プレイヤー判定部分の誤作動です。

[State 10000,プレイヤー判定]
type=varset
triggerAll=isHelper&&Time>0
triggerall=var(59)!=-1
trigger1=command="up"&&root,command="up"
trigger2=command="down"&&root,command="down"
trigger3=command="back"&&root,command="back"
trigger4=command="fwd"&&root,command="fwd"

trigger5=command="a"&&root,command="a"
~~~(略)~~~
var(59)=-1
ignorehitpause = 1

こんな感じに,試合開始時にコマンド入力がされたとき,
プレイヤーとヘルパーのコマンド入力が一致した場合AIを起動しないフラグを立ててるのですが
位置が逆転した場合はプレイヤーは勝手に振り向きますが,ヘルパーは振り向かないので
左右のコマンドが逆になり,AI未起動フラグが立たたず,
さらに,その下にあるAI起動フラグをONする部分が反応してしまい,暴発するという感じです。

対策としては,要するにキャラとヘルパーの向きを一致させればいいので
AI起動用ヘルパーステート内にTurnステートをぶち込めばOKだと思います。

;---方向不一致によるAI暴発対策---
[state 10000, Turn]
type = Turn
Trigger1 = Facing*ifelse((EnemyNear,Pos X-Pos X)>=0,1,-1) < 0
IgnoreHitPause = 1
supermovetime = 99999999
pausemovetime = 99999999
;---対策ここまで---

↑をcns内のAI起動用ヘルパーステート(多分cnsの一番下あたり)内の
[State 10000,プレイヤー判定]部分よりも上においてもらえればとりあえず大丈夫かと思われます。


報告してくださった方,ありがとうございます。
前提条件的に発生しにくいかとは思われますが,条件成立時はほぼ100%暴発します。
早めに更新・修正したいと思いますが,気になる方は各自修正お願いいたします。

スポンサーサイト
13:25  |  MUGEN  |  TB(0)  |  CM(2)  |  EDIT  |  Top↑
 | BLOGTOP | 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。