ホムンクルスAIについての独り言
[ラグナロクオンライン]のホムンクルスシステムで使用する ホムンクルスAIのカスタマイズについてのメモ
プロフィール

モルティシア

Author:モルティシア
何時の間にやら貧乏キャラが定着しそのまま「安ケミ」と呼ばれるようになった「安っぽいケミ」
一時休止していたものの、最近ふたたびホムンクルスのカスタムAIの開発&公開を再開
メマー無しPC3の42転職
[完全製薬・完全露店]キャラ

カテゴリー

月別アーカイブ

最近の記事

最近のコメント

最近のトラックバック

ブロとも申請フォーム

この人とブロともになる

リンク

このブログをリンクに追加する

ブログ内検索

RSSフィード

FC2カウンター

メールフォーム

名前:
メール:
件名:
本文:

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

非先行における突然の先行化について
うちのAI用BBSに書き込みがあったので、この現象について私が知っていることをちょっとまとめてみます

経験からの認知であるため、これが正しいと言い切るつもりはありませんが
これは恐らく「さっきまで戦っていた敵」と「新しく沸いた敵」のIDが同じであった時に起こる現象だと思われます

同じ現象はデフォAIでも起こります

非先行状態のGetEnemy処理の構造上
「自分をターゲットした敵」以外を自分から殴りに行くことはありえません

非先行状態のGetEnemyの敵取得は
--
target = GetV (V_TARGET,v)
if (target == MyID) then
~~~~~~~~~~~~~~~~~~~~~~~~~~
--
といった分岐でIDを分類しています

これは「敵IDがホムンクルス自身を敵としてターゲットしているなら」
という意味です
この条件を満たさなければこの先の処理は行われません

なら何故突然ホムがアクティブ化して敵を殴りに行くのか?
原因は二つ考えられます
・「直前までホムをターゲットしていた敵」と「全く同じIDの敵」が新たに現れた
・「直前まで主人をターゲットしていた敵」と「全く同じIDの敵」が新たに現れた
この二つです

この時AI上では「敵が攻撃範囲外に逃げた」としか認識しません

その為、IDが同じであるのでその敵を殴りに行ってしまいます

さらにややこしいことにROでは「ターゲット」の「情報が上書き以外の方法でリセットされていない」様なのです
つまり、新たに同じIDのモンスターが沸いた時、そのモンスターが他のキャラを新しく殴らなければ
新しく沸いたモンスターであるにも関わらず、古い「ターゲット」情報が残っているのです

AIはこれを「自分がターゲットされている」と誤認して殴りに行ってしまいます

対策は不可能ではないでしょうが、
動作テストを行うための条件を意図的に作るのが難しくまともなテストが出来ないのと

古い敵のターゲット情報をどうやってAIに認識させるか?
モンスターが新たに沸いたということをどうAIに認識させるか?
といった問題が残っています

自動的に反撃しなくていいのなら
IDLE_STのホムの敵を取得する処理へ飛ぶ部分
[object = GetMyEnemy (MyID)]
を削除してしまえばOKです

これで勝手に殴りに行くことは殆ど無くなるでしょう

その代わり 自 衛 も し ませ ん
(しかも『「直前まで 主 人 を ターゲットしていた敵」と「全く同じIDの敵」が新たに現れた』 には対策できてないし)

個人的にはこの改造はオススメできません
どうしてもこの誤作動が気になる方だけが自己責任で行ってください

個人的には、敵を倒した後ホムがどこかへいこうとしたら
咄嗟にALT+Tでいいんじゃない?とか思っています

良い対策方法がひらめいたら随時実験して実装していきますが、これはスタック同様に仕様であると諦めた方がいいかもしれません
スポンサーサイト
Ver7.2の不具合その2修正
Ver7.1→Ver7.2に以降する際に、良かれと思って悪い変更の仕方をしていたようです

発端となった処理の一つはこれ
--
local dis = GetDistance2 (MyID,MyEnemy)
if (dis >= 4) then -- 攻撃中に攻撃してるMobが4セル瞬間移動したらタゲリセットして一旦待機
    EndAttack ()
    MyState = IDLE_ST
    HomCondition = IDLE_ST
    BeforHomCondition = ATTACK_ST
    TraceAI ("ATTACK_ST -> IDLE_ST")
    return
end
--

これはATTACK_STに入った時には敵とホムの距離が1~2セルであるという前提の上に組んだ同IDの即沸き対策です

これにより、射程の長い攻撃スキルを手動で使うとこれが誤作動を起こして手動スキルが発動しないという不具合がVer7.1にはありました

Ver7.2ではこれをこう書き換えて対策
--
local dis = GetDistance2 (MyID,MyEnemy)
if (dis >= 4 and MySkill == 0 and IfFullSkillAttack == 0) then -- 攻撃中に攻撃してるMobが4セル瞬間移動したらタゲリセットして一旦待機
    EndAttack ()
    MyState = IDLE_ST
    HomCondition = IDLE_ST
    BeforHomCondition = ATTACK_ST
    TraceAI ("ATTACK_ST -> IDLE_ST")
    return
end
IfFullSkillAttack = 0
--

(MySkill == 0)で手動操作かどうかを判断し、
(IfFullSkillAttack == 0)でスキル発動率が100%の時に、
敵に接近せずそのままスキルのみで攻撃出来る用に

という判定を加えています

また、支援スキル用にオートスキルの発動する箇所を増やしたことで
手動でスキルを使っても「OnAUTOSKILL_ST_2 ()」→「各ホムのオートスキル」でMySkillが勝手にリセットされてしまい
これも手動でスキルが使えない原因になっていたことが発覚しました

これによりリセットされる場所を移動したのですが・・・その結果がこの
手動スキル用のSkillObjectが誤作動をおこすという新たなバグへ
|||orz

ひとまず応急処置をほどこしました

たぶん羊のキャスリングの手動が動かないかもしれません

今最適な修正方法をあれこれと考えています
・゚・(ノД‘)・゚・

13時50分追記:
ひとまず羊のほう、暫定的な修正をして再アップしました
多分これで手動スキルもオートスキルも万事OK
これで不具合があったらまた早めに修正します
Ver7.2のバグ修正
バイトが終わって携帯を確認するとBBSへの書き込み通知がきてました

確認してみると不具合報告!

急いで帰宅して確認して修正しました

>AutoSkillの残りSPチェックが外れてて、「・・・」を連打してますよ。
確認したところ、これが発生しそうなのは治癒の手助けのみのようです

指定以下までHPが減った状態で放置されるという状況を想定していなかったのでまさか「・・・」が連打されるとは・・・
|||orz

さっそく条件文を追加
手抜き工事がばれてしまいました(*ノノ)

次の不具合はこれ
> AI/USER_AI/AI_1.lua:292: attempt to call global `CmdCancel' (a nil value)

>汎用版&簡易版の両方で↑とでてしまいます。

確認したところ、簡易版で使わないはずの「CmdCancel()」が残ってました
・゚・(ノД`)・゚・
単に簡易版にしたときの削除し忘れです

動作確認は上書きで行っているため、汎用版の「CMD.lua」が残っててエラーが出なかったので見落としていたのでしょう・・・
すいませんでした
|||orz

汎用版でも同じエラーが出るというのは「CMD.lua」がAIフォルダに入ってないからではないでしょうか?
少なくともこちらでは、現時点の汎用版で狩りしててもエラーはないです・・・

ともかく修正版を再アップしましたのでそちらをお試しください

不具合の報告、本当にありがとうございました!
エラー報告はマジ助かります

Ver7.2
「治癒の手助けのオートが動いてないようです。動作確認の協力をしましょうか?」
とのメッセージを頂き、sesサーバーへいってまいりました
ses1

(*'ヮ')

これにより1時間半かけて動かない原因を特定し修正、
これでオートスキルの動作確認が全て終了しました

今思うとオートスキルをAIに組み込んでから約半年、
バニルとフィーリルでしか動作確認が出来ませんでした
・゚・(ノД`)・゚・

これでやっとVer3から実装されたオートスキルは完成品となりました

キャスリングの動作確認と今回の治癒の手助けの動作確認を協力してくださった方にはほんとうにものすごく感謝してます!

この修正にプラスアルファの機能を追加して、Ver7.1のバグをとり
Ver7.2としてアップ、ついでに古いVerのほうもオートスキルを修正して再アップとしました

Ver7.2にて追加した機能は
・[一箇所を変更するだけであらかじめ用意されたAI設定になる「簡易設定」
・初撃スキルとオートスキルのスキルレベルを別個に設定できるように
・初撃スキルとオートスキルのいずれか、または両方のレベルをランダム設定に出来るように
といった機能を追加

簡易設定には4つの設定が容易されており、
-- 慎重タイプ(非先行、SP節約)
-- 好戦的タイプ(先行、攻撃範囲が広い、主人のタゲ後回し、スキル多目)
-- 内気タイプ(先行、攻撃範囲が狭い、SP節約)
-- 人見知りタイプ(プレイヤーが居るかどうかで先行と非先行が変わる、SP節約)
から選択出来ます

細かい設定をするのが面倒だと言う方はこの設定をご利用ください

また、今まで通り細かい設定を行うことも出来ます

さらにPCへの処理軽減を図り、さらに全体的に軽くなっています
(元々処理が多いので、機能と動作の軽さをギリギリのラインで調整しているつもりです)

戦闘時以外の負担の軽さには自信があるので宜しければご利用ください
(ω・ミэ )Э~~
スタックに対して
座標ズレが原因で「クライアント上は正しい座標」なのに「サーバー上では誤った座標」である時に
ホムが「範囲に居ない敵を殴ろうとして動きが止まる」

これがホムンクルスにおけるスタックであると思われます

これを解消する方法がいくつか、他AIや雑談スレやらであれこれと試されてきました
その中で最も多いのが「1セル移動させて正しい座標を再取得する」でしょう

私が行った検証の範囲では、スタックは「敵を追いかける状態では起こらない」ということで結論付いています
「攻撃範囲内に敵が居るかどうか」という判断でずれているのでしょう

意図的にスタックを生み出すことができないのでこれが正しいと言えるような十分なデータを揃えたわけではないですが、
前衛キャラをSGの吹雪く中使ってると良くわかりますが、
座標ズレになると敵をクリックしっぱなしにしていても敵を追いかけません
ちょっとだけ追いかけても「敵の居ないところで立ち止まってしまいます」

これは座標ズレで「実際は攻撃範囲内に敵が居ないのに、敵が居るという処理になり」「処理上で攻撃したつもりになっている」状態だと思われます

人間の操作ではここで「攻撃できてないな」と気がついて、再び敵をクリックしなおして再移動しますが、ホムにはこれを判断するアルゴリズムが組み込まれていません

元々サーバーとクライアントの座標がずれているのだから、座標でそれを判断するのは多分無理でしょう
となると残るは、主人のほうで手動でスタックを回避させるか
何らかの方法でホムンクルスに「自分が攻撃できているかどうか」を判断させる必要があります

そこでモーションを利用する方法を考えたのですが・・・
確かホムって自分の攻撃モーションとれないんじゃなかったっけか・・・
ん?そうなると移動モーションはとれてるのかな?

どうやらモーション取得のあたりを一度徹底的に洗ってみる必要がありそうです
こういう地道なのってマンドクセ('A`)

でもまぁ、このあたりは自動にしたいなぁ

そもそも私はROに接続する時間そのものが短いわけで

すぐに「検証終了!実装!」とはいきませんので検証結果は気長にお待ちください
Aspd対策についてその3
関数ループを実用化させるために色々と実験してきました

実験結果で出た情報は
・関数によるループは通常のループ処理以上に酷いラグが発生し、クライアントがフリーズする
(同じ約500msのループで、for文では僅かなラグで留まるにもかかわらず、関数のループはクライアントそのものがフリーズした)

・関数→同じ関数 というループで1msの間AIを止めるには
約2000回~3000回ループさせなければならない

・Luaにはメモリの使用制限があり、カウンタ用変数への格納や、関数から関数への重なった呼び出しは
同時に約5000回行うとオーバーフローになる
こちらで調べた範囲では3000回までは大丈夫だった
(一度endに入り処理そのものを一旦終了させれば問題ない)

結論:空ループは素直にfor文を使った方がいい

ちなみにこれはforを一切使わないで行いました

以下、コードと詳細
[続きを読む...]
Ver7.1のバグの報告について
AI_2の中にバグがあると報告が来ました

17日、9:05追記:
色々調べた結果、最初に確認できたエラーを再現することが出来ず、原因の理由を特定できません

もしかすると「最初に確認したエラー」はVer7.0のバグ取りを行っていた時のエラー文が残っていたのを誤認したのかもしれません

もし「エラーがある」という方は一度最新のものをダウンロードしなおしてください
エラー除去前の初期配布のAIをダウンロードしている可能性があります

最新版で再び同じエラーが出たら、そのときの状況とエラー文を添えて再び報告をお願いします
|||orz

お手数かけてすいません


19:17追記:
local d = GetDistanceFromOwner(MyID)
としても正常に動くことを確認
MyID がどれかが全角だったりして、全く新しい変数とされていた可能性があります
(でもそれだとUtil.luaでエラーになるはずなんだけどなぁ・・・)

もし新たにエラーが出た場合、エラー文を一緒に報告してくださると嬉しいです

調べてみたところ
local d = GetDistanceFromOwner(MyID)
とローカルで作った変数に直接関数の結果を入れようとしたら、nilがどうのこうのというエラーがでました

なのでこのように
local d = 0
d = GetDistanceFromOwner(MyID)
と一度初期として 0 を入れるとエラーが収まりました


エラーの原因は分かったけどエラーの仕組みが良くわからないので時間があるときに色々実験してみたいと思います

とりあえず対策したものを19:00に再アップしました
エラーの報告、ありがとうございました!

Aspd対策についてその2
またAIについてのアンケートが開始されております
今回は多重投稿やプロクシのチェックもちゃんと行われるようですね

つ[ホムンクルス用ライブラリを配布するサイトLv.1]



さてさて、進化後のホムンクルスのAspdが遅く感じる現象について
攻撃モーションのキャンセルやらAIの周期を遅延させたりなど様々な対策があるわけですが
(AI遅延なんてうちのAIにしか実装してない気もするけど!)
このAIを遅延させる対策について良い改良案が出てきました!

きっかけはAI雑談スレの無限ループ
あの方法ならクライアントが固まることはなさそうです
一度、後で実際にどうなるか試して見ましょう
(今週の木曜~金曜はRgunaDream2の原稿と実行でちょっと時間なさそうなので)
ベル㌧が復活するまでは週1の間隔で私が代理なのよー
・゚・(ノД`)・゚・

もしも関数ループでクライアントがとまらないのなら、より安全なAI遅延方法となるでしょう

AIを故意に遅延させることの利点は、以前AI雑談スレでも出ていましたが

Attackを受け付けない攻撃ディレイの間隔と、AIの実行の間隔が合わないことで、理論上最適な間隔で攻撃命令を出せないという仮説が根源にあります
それに対し、モーションキャンセルは、攻撃失敗でディレイを上書き、ディレイそのものをなくしてしまえ!というものです
しかしモーションやホムの種類によってキャンセル可能なタイミングが違うらしいのでこれによって常に最速の攻撃間隔を維持するにはAttackを送るタイミングをずらさなければなりません
(これが複数Attackを送る処理です)

ここまで書いてAttack遅延は本当に効果が微妙だと再認識しました
(ノ∀`)

尚、モーションキャンセルの処理のほうはAttackを複数送ることでクライアントの応答待ちの処理にハマってラグを生み出してしまう様です

そこでAttackを送り出す間隔を、AI遅延処理と組み合わせることで調節できるようにするという案がひらめいているわけですが、ラグを生み出す可能性のある処理を二つも組み合わせることがちょっと不安要因になっています
(単にAttackを複数送るよりは良いのでしょうが)

また、「モーションによってキャンセルのタイミングが違うらしい」ということがこの対策をややこしいものにしています
ホムの攻撃モーションは、種別ごとに二種類確認されており、一方が早く、もう一方が遅い(たぶんディレイ固定?)ためモーションキャンセル用の方で遅い方が出てしまうとモーションキャンセルの意味が無いという意見があります

真実はクライアントを逆汗してホムンクルスの処理を直接覗き見ないと分からないわけですが、そんなことしたらROの利用規約違反だしなぁ
そこまで必死になるつもりもないし

今現在、私の考える最適な方法は、キャンセル用のAttackを1ms単位で調節できるようにしつつキャンセル用Attackは一回のみとするというもの
ただこれもいまいちな気がするのでもっといい案が出るまでは気が乗るまで後回し

ちなみに、安っぽいAIは、モーションキャンセルとAI遅延両方の処理が入っていて、デフォルトではその機能はOFFになっています

とめどなく妄想は広がり・・・ Ver8!?
Ver8で実装予定のMobdateライブラリの扱いについて色々と考えていたら妄想広がりまくりで収拾がつかなくなってきました!

やば、これマジで実装できるの?
ヤバくない?Ver8の存在自体ヤバくない?

みたいな心境でワクテカしてます

以下Ver8について膨らみすぎた実装不可能っぽい妄想
[続きを読む...]
フェネガル=ラルバーツ
第66回Ragna★Dream2 で朗読した自作ショートストーリーをのっけてみる

タイトルは無し
第65回Ragna★Dream2で朗読したロゼッタ=ハインツの話の補足的お話です
これとロゼッタのお話で完結なのかな?

――
カチャ…カチャ…
甲冑が擦れ合う音が鳴り響く、グラストヘイム古城2階

俺たちは何時からここに居るのか?
そして何故ここに居るのか?
分からないが、気がついたらここに居て、
ここが我が家だということだけが分かっている
そして人間が荒らしに来ては仲間を殺戮していくという事実がある

人間が侵入するたびにそれを排除していく

仲間の中には殺戮を楽しむ者も居るが、
多くは日々を平穏に過ごせれば十分な者達だ

俺たちと人間の争いは
何がきっかけでいつから始まりそしていつ終わるのか
それは誰にも分からない

手近な瓦礫に座り剣の手入れをして
グローブの止め具を確認する
この瞬間が落ち着く
すると外界とここを繋ぐ扉が開く音が聞こえた

また人間が侵入してきたのだ
様子を見に行くと、手当たり次第に
まさに無差別にといった感じで力を振るっている

これでは一部の過激派が街を襲う計画を立てたくもなる訳だ

物陰から奴らに近付き、相手の火力の要であるウィザードを狙う

カキィン!
俺の接近に気付いた奴は盾で辛うじて受け止めた
しかし所詮は物理戦闘の出来ない職業、このまま力で押し切れるだろう
通常ならここで集中力が途切れて詠唱が止まるハズなのだが、
奴はそのままブツブツと詠唱を続けている
襟元のクリップから感じる魔力・・・
そうか、カードの魔力を使っているのか

俺たち魔族が死ぬ時、時々その魔力が凝縮して形になることがある
人間達はその「カード」に込められた魔力を
自らの装備に付与する知恵をつけている
早くこいつを殺さなければ大魔法が発動する、それは危険だ

よりいっそう力を込めた時だ

こちらへ近付く騎士を見て、俺は全てを思い出してしまった
過去の自分を――
――

「ん?フェネガル、お前の合流は明日だろう?」
グラストヘイムへ派遣される大隊の大隊長に声をかけられた
確かに俺は、一日遅れで合流する予定だった
「ちょっと落ち着かなかったもので」
笑ってみせたがちょっとぎこちなかったかもしれない
「女と喧嘩でもしたか?」
そう言いガハハと笑う大隊長
図星だった
昨日彼女ともめてしまったのだ
飛び出した彼女を追ったものの見失ってしまい、
その後悔から落ち着かなくなってしまって
なんでもいいから動いていたかったのだ
「あまり引きずるな、考え事をしていたら死ぬぞ」
真面目な顔で大隊長が忠告をする
(分かっている、俺は生きて帰らなきゃならないんだ)
この戦いが終わったらこの指輪をロゼッタに渡して
結婚すると決めた
死ぬわけにはいかない

2日ほどの行軍を行った後、巨大な門の前にたどり着いた
「キャンプを張るぞ!」
号令が響き、あちこちにキャンプが組み立てられる

ここを拠点として、数日に渡り内部の制圧を試みるのだ
グラストヘイム、ここは魔物の本拠地と噂される土地であり
事実、ここには魔物の王とも言えるバフォメットが住居を構えている

俺たちの最終任務はこのグラストヘイムの奥へ向かい、諸悪の根源を絶つことだ
どこからともなく無尽蔵に現れるモンスターを封じるために
何をどのようにすれば良いか分からない

だからこそ度々派遣チームが結成されては、内部調査を兼ねて
モンスターの数を減らすための討伐が行われるのだ

方法がわからないからこそ、
任務の実態はただの内部調査を数日行った後帰るだけというものになる
だからといって簡単なものではない
通常の刃では刃が立たない強固な鎧に身を包んだ亡霊が何匹も居て
巧みに剣を振り回す場所での調査だ
並みの力量では命を落としてしまう

魔物の魔力を封じたものだとされるカードでも有れば少しはマシなのだろうが
そんな貴重なものが手に入るはずも無く、
高級装備の精錬に必要なオリデオコンやエルニウムすら
一般の人は手にすることが出来ない現状では己の技術と工夫でしか生き残れない

グローブの止め具を確認する
もはや儀式のようになっているその動作を行った後、
最小限の荷物のみをまとめて集合がかかるのを待った

――
グラストヘイム内部の探索を始めて9日目
最後の探索日だ
これから中央の建物のグラストヘイム古城跡の探索に移る
多少の怪我人は出たものの、
この9日間は特に大きな問題もなく順調に進んだかに見えたのだが
この古城跡2Fでバフォメットと遭遇してしまった
辛うじて退けるもこちらの消耗も激しく
暫く経つとどこからともなく復活してくるため
長居は出来ないということで今回の派遣はこれで打ち切ることになった


グラストヘイムの魔物は
倒しても倒しても時間とともに甦るという特徴を持っている
一説では何者かがここに異界との扉を開き
その扉を通じて魔物の思念がこの世界に来て実体化しているという話がある
そのためにこのバフォメットも
思念が実体化した存在であって本体ではないので
何回退けても甦るのだという

怪我人を優先させて避難させ、残るは1中隊規模の人数のみとなった時
運悪くキメラと深淵の騎士に阻まれてしまった
さらにイビルドルイドやレイドリックの群れも居る
完全に待ち伏せされていた

そこから先は良く覚えていない
ただ必死に抵抗したことだけは覚えている

暫くして再編された救援部隊が到着したが
そのとき既に中隊は壊滅し、俺は虫の息だった
「フェネガル!しっかりしろ!」
同僚の声が遠く聞こえる

ああ・・・そうだ俺はロゼッタに・・・渡さないといけないものがある
そして彼女と仲直りしなければ

「テントの・・・荷物にある・・・」
「フェネガル無理に喋るな!もう暫くの辛抱だ、今応急手当してやるからな」
「指輪・・・ロゼッ・・に・・・」
「指輪?馬鹿野郎!それはお前が自分で渡すんだろ?
俺なんかに頼まずに、生きることだけを考えろ!」

もう何も感じない

辛うじて周りの声が聞こえるだけだ
それも暫くして
ただの雑音になり
何も分からなくなった

――
ああ、そうか
今思い出した
『俺は人間だったんだ』

死んだはずの自分が何故モンスターになっているのか
分からないことだらけで眩暈がする

「ピアース!」
『彼女』の槍が俺の体を貫通する

全く、鎧だけで中身の無い体だというのに
どうしてこんなことで死ねるのだろう

体から力が抜けていき地面に崩れ落ちる
最後にもう一度彼女を見た時、薬指に見覚えのあるダイヤの指輪が見えた
「ストームガスト!!」
ウィザードの詠唱が完了し、吹雪が吹き荒れ
他のレイドリック達も次々と倒れていく

大魔法の吹雪の中
騎士となったロゼッタは不思議そうな顔でずっと俺を見つめていた

久しぶりに見る彼女はとても大人びていて美く
そしてとても懐かしかった

俺はそんなロゼッタの顔を目に焼き付けながら
薄れ逝く意識の中で
ただただ事実を噛み締めていた

それは過去を思い出すことで彼女を殺さずにすんだという事実であり
彼女は今も強く生きていて
俺のプレゼントを大事に身に付けていてくれているという事実だ

それだけで救われる気がした


(ロゼッタ・・・君が元気そうで良かった・・・)

・・・彼女の人生が幸せでありますように・・・

―END―

以下あとがきとネタバレ
[続きを読む...]
幸せについて本気出して~
詳細なこだわりに合わせたカスタマイズを可能にしつつ、あまり細かく設定したくない人向けにするにはどうするべきかと
割と本気出して考えてみました

ピコーン!
(*'ヮ')

そうだ!簡易設定用の項目と詳細設定用の項目を分ければいいんだ!
さらに「設定マンドクセ('A`)」な人のためにさらに設定のパターンみたいのを項目で用意するっと

これを有効にするとコンフィグで設定した値が無効となり用意されたパターンの値が強制的に有効になってしまう
「簡易カスタマイズモード!」

どんなパターンを用意しようかなー?
まずデフォルト、これはスイッチの値"0"で設定し、他の弄った設定が有効になる
次に「慎重派」「好戦的」「内向的」「人見知り」の4タイプを用意!
おまけ要素のパターン系のほうは別個に弄れる方がいいのかなぁ

ううむ、いけそうだ

ついでに、初撃スキルについて、近接前にスキルを撃つのがちょっと需要あるっぽい
飛び道具系は元々横殴りの誤爆が多いから私は自動でさせたくないのでこれは実装しない予定
もし実装させるなら
「周囲に近接キャラが居なくて」かつ「後衛キャラが他キャラをタゲってる」
というかなり限定された状況じゃないと使わせたくないなぁ

これだと正直、殆ど発動しないと思う

あとはー
カプリスをランダム化させたいなぁ
処理自体は簡単なのでめんどくさくて後回しになってた遊び要素
後、コンフィグでの扱いがメンドクサイ
「自動でスキルを使う時、使用Lvをランダムにするか?」
って項目作らなきゃ

あと、初撃スキルとオートスキルで別個に攻撃スキルの使用レベルを変えたいという声もあるのでこれもVer7.2での実装かなぁ
この場合上記のランダムを入れるとしたら

初撃スキルをランダム化
オートスキルをランダム化
両方ランダム化
両方ランダムにしない

と4パターンあるわけで
はてさて・・・一個のランダム化スイッチでできるかな?

そろそろコンフィグも混雑になってきたから整理しないと・・・

大雑把なO型なもので、こういうのを整理するのが面倒くさい
一度整理が楽しくなるととことんやるんだけど、火がつくまではあまりはかどらないだろうなぁ

ああ、忘れてた!あとコメントの英語化!
(ノ∀`)

うがーーー
三日ぶりにラグドリ2のBBS見に行ったら業者の書き込みがヒドイのなんのって

URLを無造作に連貼りするタイプのロボットらしく、
URL貼るの失敗して空白だけとか1文字だけとか・・・
さっそくブラックリストに追加してIP規制

最初は日本の業者と韓国、中国、アメリカからの貼りが多かったのだけど
今回のは毎回違うIPから、しかも串っぽい
さらに毎回違う国の串

どこからそんなに串拾ってくるんですかあなたは
('A`;)

スパイウェア経由のロボットなのかなぁ・・・
とりあえず大雑把にIP規制を増やしました
巻き込まれなんてシラネ
とりあえず日本の正規プロバイダのIPは大丈夫なはず

ついでに、微調整も終わったためさすらいの道化達のページをプチリニューアル
まだちょっと見づらい気がするのでまた気がついたところから修正していく予定
Attackを複数送ったときのラグについて
AI雑談スレで原因がほぼ特定できたようです
やはり詳しい人たちで検証、情報交換をすると早いですね

結論としてはこうみたいです

--
511 :491の人 :06/09/09 08:31 ID:6M/DtNBX0
RO鯖      RO蔵(+AI)
|  ←SYN      |
|  →SYN+ACK  |(TCPコネクション確立)
|  ←AI攻撃    |
|  →ACK      |(攻撃成功)
(AI攻撃に対してACKがきっちり返ってくる間のケミのほかの行動はOK)
|  ←AI攻撃(過剰)|(鯖からACK返らず)
|  ←AI攻撃(過剰)|(鯖からACK返らず)
|  ←AI攻撃(過剰)|(鯖からACK返らず)
|  ←AI攻撃(過剰)|(鯖からACK返らず)
(ここでACKが鯖から貰えないため、TCPの特性上、ケミの行動含め
 順次パケ詰まりが蔵で発生するが、AI側でAttack()が呼び出されているため、
 RO蔵内はAttack()実行されたことにより、見た目、ホムは攻撃モーションを
 高速で繰り返す*痙攣状態*結果、TCPタイムアウトが発生し、
 コネクションを張りなおす)
|  ←RST      |
|  →RST+ACK  |(TCPコネクション破棄)
|  ←SYN      |
|  →SYN+ACK  |(TCPコネクション確立)
(この時点でラグ解消、溜まったパケ*RO蔵で再送してる可能性を仮定。RO蔵で詰まったパケは
 全て破棄をしているのであれば最新行動まで一気に「コマとび」してるように見えるはず。
 どっちの現象だったかは前者の可能性が高い*を新コネクションで順次、鯖へ送信し、
 ラグで一気に行動が動くような現象が発生)

上図のような状態を仮定した場合、回線能力やネットワークカード(CPU含むハードウェア)に
至る相性にまで及ぶので、万能なモーションキャンセルアルゴリズムをAI側で組むのは
かなり困難になりそう。

一部スレ違いになるけど、升で擬似蔵が蔵依存のディレイをカットして、
超高速攻撃を可能にしていた点からもASPDを鯖側できっちり検知して、
ACKは返すが攻撃処理は無視するというアルゴリズムが鯖側で脆弱な気がします。
#上記の升対策がされているのかどうかは分かりませんが、超高速攻撃パケの
 防御策として意図的に受理してない可能性(だとしたらものすごい手抜きともいえなくないけど)も?

ここまでくると、後ろでEthereal等でパケットをモニタしないとなんとも言えないレベルになってきそう。。。
--

つまり、攻撃結果の受信待ちでクライアントの送信処理のみが止まってた可能性が高いということです

まとめるとこういうことらしいです
--
517 :Glenelgの人。 :06/09/09 09:54 ID:L102Ooyk0
・・・長々と書いたけど、論旨はあくまで
「クライアントはAttackをしたつもりで、応答待ち」
「サーバが取りこぼしかなにかで応答してない」
ということは同じことですね(^^;;

以上、あくまで推論ですが。長文失礼。
--

モーションキャンセルを行いつつこのラグを防ぐのは一筋縄ではいかないようです

以下、私的な対策案(机上のみで全然試していません!


[続きを読む...]
古いバージョンの未解決バグを修正
前々からやらなきゃやらなきゃと思ってたものをまとめてやっちゃいました

「古いやつのほうが使い易いよ!」
っていうのは必ずあると思うのでそのうちと思ってたのですが、
ついつい後回しにしてしまい古いVerを使いたい人を散々待たせてしまいました

バグ放置っていうのもなんだか気分悪いですしね

Ver7.1まででオートスキル、防衛機能、などの部分の動作確認は全て終了したと思います
強いて言うと、初撃スキルだけがまだ、十分なテストをしてなかったような

自分が使わない機能はどうしてもおざなりになってしまいますね

バグ報告があればなるべく早く対応はするのですが、バグ報告が少ないので利用者も少ないのでしょう・・・
そもそも利用者がどれくらい居るかも分からないし

まぁ、その分責任も軽いのだから気楽にできるのが利点だなぁとも思います
私自身、汎用性という言葉が好きで、万能性に憧れているのでAIもそのような方向を目指してしまうのかも
でも「これ要らない」と思う機能は絶対付けないという頑固さもあったりするのです(笑

今回の古いバージョンの修正で、気持ちの中で一区切りできてすっきりした感じです
なんだかんだでずっと気になってた所だったので

Ver7の英訳はー・・・
気が向いた時にのんびりやるべー(笑
gyaaaaaaaa!?
Ver7.1もアップしてさぁ久々にのんびりホムケミライフを!
と思ってFD1をウロウロしてたらギルメンの別キャラと遭遇

「防衛機能使ってちょっと共闘してみようかな」と思い登録、索敵・・・・あれ?
ホムが反応SHINEEEEEEEEEE!?

ここからギルメンを巻き込んでのデバックが始まりました

結論:
Ver1.3の入出力ライブラリは外部から読み込んだデータは全部文字だった!!!
でもAIでクライアントからとるIDは数字!
if文で関係演算子働かNEEEEEEEEE!!!!?

これに気付くのに2時間かかりました
|||orz

入出力ライブラリに添付されてる文字を数字に変えるという関数を使用することであっさり解決です
あと、他にも横殴り防止機能で登録したIDを弾くのを忘れてました

これらを全部まとめて修正して18時に再アップ

なお、添え字を数字に変える処理でまとめて変換してしまおうと思い
ループの中で[Joint[tmp] = str2num(v)]とやったらクライアントがエラー吐いて落ちました
Σ(゜Д゜=;゜д゜)

value = str2num(v)
Joint[tmp] = value
とすると問題なく正常に動きます

テーブルへの格納とluaの標準関数を同時に使うと重力エラー・・・
これはluaの性質なのか、それともクライアントからluaに制限かけてるせいで制限に触れてしまってエラーしたのか・・・どっちなのでしょうか

ともかくLuaは相変わらず謎仕様です

Ver7.1アップ
中途半端な英訳とコンフィグの記入ミスのフォロー、そして若干の処理の調整を行いVer7.1を公開です
個人的に一番大きいのは、ダンスモードなのでのファイル監視の処理を時間で制御して動作を軽くしたことでしょうか

ともかく、英語版のreadmeを作ってる途中で燃え尽きました

Ver7までくるとさすがに更新履歴がもの凄く長いです
|||orz

エキサイトもっとがんばれ・・・


以下エキサイト


[続きを読む...]
検証けんしょー
AI雑談スレに書いた環境と検証結果はVer6.4あたりの、Aspdキャンセル実装当初の古い情報だったため
早く目が覚めてしまったので1時間ほど現在のVer7.0でもう一度検証してきました
検証_06/09/09


光回線でスペックは「ホムとケミのステータス」で晒してるとおりのものです
(*'ヮ')っ[「ホムとケミのステータス」]

結果、ラグは感じませんでした
ATTACKを2回送ると、ホムが攻撃後痙攣してぴくぴくしてます
マッスルな大胸筋みたいでキモイですw

攻撃モーションに次の攻撃モーションが重なって「痙攣しているような動き」になっていると考えられますから、正常にモーションキャンセルは出来ているようですね
(結果の見た目を説明するための推測に過ぎませんけどね(笑)

攻撃の成否でモーションディレイの管理してるのだからAIにも攻撃の成否の情報を渡してくれてもいいのに・・・
じゅうりょくのあふぉー・゚・(ノД`)・゚・

ついでに、攻撃パケットを多重で送るとラグるという現象がある以上、なるべくAI1サイクルで送るパケット量は減らしていったほうが良いでしょう
早速オートスキル関係を弄ってオートスキル発動時は攻撃パケットを送らないように調整

調整後の動きは調整前となんら変わりません
スキル発動後、スキルモーションがキャンセルされなくなったくらいですね

ついでにログファイル監視系の処理を500ms間隔で処理するように制御
これでかなり軽くなりました
やっぱりAI1サイクルのスピードが恐ろしく早いから負担が余計に大きくなるのでしょう

いっそID取得の処理も時間で制御してもいいかもしれないです

少なくとも数ms単位で処理を行う必要もないわけですし、どうせ100ms以下だと早すぎて人間は認識できないわけですから
AIのメイン処理自体を0.1秒か0.05秒周期で行うように調整しちゃってもいいかもしれません
(0.05秒を過ぎてたら処理を行う、というようにすれば回線やPC環境での僅かな実行速度のズレがあってもさほど気にならないでしょう)

Ver6.5で一通りの機能は完成してるので、これからはより使い易く、よりマシンや回線への負担を少なく、とマイナーチェンジしていく方向でいいかもしれません
Ver8で予定しているMobdateの活用もちゃんとやりますよー
開発速度が ものすごく 下がるだけですよー


(ω・ミэ )Э~~


英語のコメントつけたしの状況
Ver7.1に向けてバリバリとバイトの合間にやってますよ!
現状では、簡易版に手をつけてないけど
頑張ればAI読めるんじゃないかな!ってくらいの最低限のコメントつけました

機械翻訳しやすいカタコトな文章で日本語の説明を作る

エキサイトに突っ込む

出てきた英文を再びエキサイトに突っ込んで日本語に

おかしい変換されてる単語をウェブ辞書に突っ込んで意味を確認、
さらに自分の英語力の範囲で英語を修正

修正後エキサイトに突っ込んで日本語にして意味が合ってるか確認
さらに自分で英文を読んでみて意味が通るか確認

それをコピペ

こんな恐ろしい方法で英語のコメント作ってます
単純な英文はサラッと自前で書いてますけど、結構時間かかりました

あとVer7.1ではオートキャスリング後の挙動を微調整
コンフィグの想定外の入力をサポート
この二つはやる予定です
英語のコメントは、不十分ながらも「今はこれでいいや」とひとまず現状で一旦終了することに
コンフィグ処理のほうは、Glenelgの人のAIやランページAIの中身見ながらどう組み上げるか考え中

ただコピペするのは簡単だけど、仕組み分からないとメンテや拡張がだるいですからね

とりあえず今日はこのへんまでにして、最近AIいじりばっかりで疲れてきたので暫くは遊ぶことにしよう~

AI更新は、前々から言っていた様にVer7の発表を区切りとして更新ペースをガクッと下げます
さすらいの道化達のHPも改装しなきゃなぁ・・・
ギルドHPの改装のほうはやっと半分くらい完了、あとはCGIの設定とリンク繋げて微調整
ここからがまたダルイ

進化後のASPD対策処理の不具合?について
今AI雑談スレで話題沸騰中の様子
ホム命令ライブラリ弄ってる間に盛り上がってるなんてなんたるちあ!

お祭り好きとしては出遅れた気分になってしまいなんだか切ないです

個人的には「あー、やっぱなんか起こったか」って感じです
AIのメイン関数の実行サイクルに意図的な制限かかってる時点で、
「短時間に複数パケットが送られるとなんかあるんじゃないかなー」
って気がしてたので今回のことは普通に納得です
さらに今回のは「同じ命令のパケットを二つ」ですからねぇ
どこかでデータの混線も起こりそうです

なのでAspdの問題が出た当初は、私はモーションキャンセルではなくあえてAIを遅延させて意図的にラグを作る方をさりげなく主張してたわけだけど
・・・今思うと意図的にクライアント止めるほうもヤバイかな(笑
配布してる安っぽいAIでは両方ともデフォルトでOFFにしてあります

デフォルトAI見ると分かるけど、基本的に「AI1サイクルで1個しかパケットが飛ばない」構造になってるのです(スキルを使う時でさえ、攻撃との分岐で同時にパケットを飛ばさないようになっています)
なぜ「わざわざクライアントから実行サイクルに制限をかけたか」というところに多分解決のヒントがあるような気がします

どのみち、検証結果の情報が集まるまでは今以上には進みそうにないので余計なことはせず静観してるしかないかなという気はします

それにしても、ホムの種類によっても結果が違う様で・・・
私は回線とかクライアントのパケット処理のあたりで引っ掛かってるのだと思うんだけど、もしかするとモーションのコマの数やモーションそのものの表示時間も関係してる?

とりあえず、まだVer6.4や6.5であれこれ動作実験してたころは特に不審なラグは感じませんでしたね
いつもどおりに感じました

モーションキャンセルが出来る理屈自体は、キャンセルDSやArbのモーションキャンセルと理屈は同じだと考えています
AIだと手動をはるかに超えた速度でキャンセルが働くので通常攻撃すらキャンセルしてしまうのでしょう(AIが一周する速度はAIサイクルの制限時間よりさらに早いです)

ROではモーションディレイだけクライアントで制御しているので、モーションに移る瞬間に他のモーションを挟むことでディレイを上書きしてしまうことが出来ます

Attackを複数送る場合は、
Attackで攻撃→短時間でもう一回Attackが送られたためモーションディレイ上書きのフラグが立ってしまう→しかし二つのAttackパケットが短時間すぎてサーバー上では一回目も二回目も一回分として処理されるので、サーバーからは攻撃一回として攻撃済みパケットが返ってくる→返ってきた攻撃済みパケットを見て「二回目は攻撃失敗」と判断してモーションディレイだけがクライアント上で、攻撃失敗のディレイ0で上書きしているのだと思います

問題が起こるとしたらキャンセルフラグが立ってからサーバーから結果が返ってくる間でしょうか?
二つのパケットがどこかで競合でも起こすのではないかという気がします

と、ここまで推論を書いてから、私はプログラム素人の文系大学生なのでどこかで理論のパーツを忘れてるんじゃないかなーという気がしてきました
IT関連の知識もプログラミングの知識も、高校時代に検定用に勉強した程度ですからね(汗

でも自分のブログで垂れ流すくらいならいいかな(笑
(*ノノ)
コメントを英語に対応することについて
冬物語の人さんのブログに、海外のホムAI開発者からのメールが公開されていました
その中に
>国際ROが日本語AIスクリプトに興味をもっと持っているように、
という一文が

少なくとも、海外ROのホムAI開発者の間で、日本のコードが興味を持たれているということでしょう

日本語と英語は全く別の言語といって良いほど互換性がないため、互いに解読が大変なことになります
折角興味をもってもらったのに「読めない、分からない」で敷居を高くしてしまうのはもったいないです

なので以前冬物語の人から助言で頂いた「コメントの英語化」について徐々に実行に移そうと考えています

翻訳サイトと辞書サイトを開いて機械語翻訳したあとにおかしい所が無いかチェックしつつ、コメント追加

現時点でいま大きな壁にぶちあたってます
「海外のROでは壁行為のことをなんと言うのだろう?」
そもそも「壁」の概念はあるのか!?

壁モードをどう説明するかでいきなり詰ってます

あと横殴りの概念
これも日本独特な気がする

海外用に訳すならどういう表現が適当なんだろう・・・
「紳士的な動作」!・・・何かが違う気がする
「敵を奪わない配慮」!・・・伝わるようなそうでないような、そもそも敵を奪うという概念が(略


とりあえず現時点では1%くらい、本当に全然進んでません
今月中には終わらせたいのだけど・・・がんばってみたい
私のAI開発スタンスについて
人によってこだわりや自分へ課しているルールが違うので、私も自分のスタンスをちょこっと書いてみようかと思いました
AIの目標ではなくあくまで「開発のスタンス」です


まず、情報は出来るだけ交換したいと思っています
このブログで自分の持っている情報を公開することでそれが可能ではないかと考えています

独り占めすれば独自機能を独占できるのでしょうが、商業利用ではないので独り占めするメリットがありません
それ以上に、自分にない技術や情報を得てより新しいことに挑戦していきたいので、他のAI開発者のブログを覗いたりAIスレを覗いたりします
でも自分だけ得てばかりではフェアじゃないので、自分からも出来るだけ知ってることを公開していきたいと考えます

いきなりフェアとかいう単語がでて鼻で笑う人もいるかもしれませんが、私は自分一人だけ得をすることに後ろめたさを感じる人間なので、自分が気持ちよく過ごすためにも正々堂々と切磋琢磨していきたいのです

こういう人間なのだから仕方ないです


次にプレイヤーそのものへは、AIが得ることができる情報は渡したくありません

ハイドしてるキャラがAI上見えるからといって、その座標をAI内部で使うならともかく
それをプレイヤーに見えるようにして利用するのは私の中ではアウトです
プレイヤーに位置が見えてしまい、臨機に対策をとれるようになるとハイドやクロークは塞がれてしまいます
ハイドやクロークはそこまで対策を取るほどどうしようもないスキルではないので、ホムだけが分かるならソルジャーガーディアンのこともありますし、まぁいいとして
プレイヤーにまで見えるというのはさすがに卑怯だという気がします

また、AIからキャラクターのIDが取れますが、これも出来るだけAI内部で使用してプレイヤーからは見えないようにしたいです
iniファイルへ書き出すIDを暗号化させて、AIで読み込む時に再び解読して・・・という方法を考えてはいますが、暗号化と解読の手法でいいものが思いつかないので保留です

また、AIから主人のケミのスキルを操作できますが、これも私の中ではアウトです
AIは「ホムンクルスを操作するもの」であって「アルケミストを操作するもの」ではないからです
それに自キャラに勝手に動かれると気持ち悪いです

AIとツールとは分けたいという気持ちもあります
ルールを守ってこその遊びだと思うし、制限の中で工夫するからこその遊びだと思うし、
「ホムンクルスを動かすためのAI」でそれ以上の働きをしたらそれは本来の利用目的を外れた別の何かになってしまいます
それが嫌なので自動PPは付けないし、座標出力もさせるつもりはないです

これも「フェア」とか「卑怯」とか、精神的な話が関わっています

私という人間がこういう人間なのだから仕方ないです

これまでも、そしてこれからも、このスタンスで開発していくでしょう

そんな人間なのだから仕方ないです

※情報を公開していくと言っても、それによって起こる弊害の規模によっては関係者間でしかやりとりしないこともあります
例えばコードに悪用を防ぐセキュリティを設けたとして、そのセキュリティの内容を公開してしまえばそれはセキュリティが無意味になってしまいます
なのでそういう類のものは基本的に公開はしません
GV用のAIについて メモ
---
>411 :(○口○*)さん :06/09/04 02:46 ID:uqVZKrGHO
>ちなみに狩り用AIだと敵のIDを取得する部分で、シーズ独特の仕様のせいで敵を判別できないため殴らない
>既存のAIをGV用にするならGetEnemyの中の、ID保存の条件を変えなきゃならない
---
AI雑談スレでちょっとGVでのAIの動作について話が出ていました

GVでもホムは有効だと思うし、私は使ってもいいかなと思うのでGV用のAIに必要な情報で私が知っていることをここにメモメモ

まず対人マップでは[IsMonster()]で帰ってくる値が、
「同ギルドメンバー」以外だと 0 が帰ってくるようです
(ちなみにPVマップだと「同PTメンバー」が 0 でそれ以外は全て敵とみなし 1 が返ってきます)

つまり対人マップでの最低限の敵味方の判別はデフォルトAIでも行えます

さらにGVでホムを使う時、問題となる点は次の二点
:ラグ中も攻撃パケや移動パケを送り続けるため、数秒の長いラグが発生すると回線に負担がかかる
:IDを取り込む処理が重い
(ホムをつれてプロの露店地帯を歩くと、ホム無しよりラグいハズです)

この二点です

「ホムをGVで使う時は良いPCを」と思われているようですが、「大事なのは回線」であり、
過去にAI開発スレで出てきた情報では確か、GVでホムを使うとラグで動けないまま鯖キャンが連続で起こり移動できないという現象があるらしいですがこれはパケットの送りすぎで回線にポリンが詰ってしまったのです

つまりGVでAIを使う再は「無駄なパケットを送り過ぎない」これが最も重要だと思います
あとは極力ループ処理やID取得の処理を減らし、動作を軽くすればGVでも使用可能なはずです

そのために移動まわりとAttack命令のまわりに特に気を配らないといけません

また、敵を殴りに行く時の座標ズレの対策も行う必要があります(これがもっとも難儀です)

実績のある◆g37UcEp//g さんのGV用AIのコードを見てみると、
最初のInit()で中の値が変化しないグローバル変数を格納し、今後同じGetVを行わないようにすることで処理をなるべく軽くしようという工夫が見られます
また、Move処理とAttack命令を省きホムを固定砲台とすることで無駄なパケットを抑え、スキル使用の条件を「敵の詠唱」「主人のモーション」「スキルディレイ」で管理し、スキル命令のパケットも無駄に飛ばさないように抑えています

これらによりラグいGVでも快適に動作するのだと思います


以上のことからGV用のAIに必要な最低限の機能は、
・パケット送信とPCへの負担に気を使った極力無駄を省いた設計

・ホムはシーズでの 同盟メンバー と PTメンバー を判別できないのでそれら同盟の人を友達登録して殴らないようにする必要があること

・そして余計な設定でキャラクターIDを全て除外してしまわないID取得処理

この三つだと考えています

三つ目の「余計な設定でキャラクターIDを全て除外してしまわない」というのは、狩用AIが横殴り防止でプレイヤーを判別しているとシーズでは誤作動を起こし敵を殴りにいけないという現象がおこるので、この機能を取り付けないことを指します
狩用AIをGV用に改造したい方は以上の点を参考にしてください

以下、アンテナの主なAIのID取得の流れを軽く見てみて、対人で敵を正常に取得できるかどうかを見たいと思います


[続きを読む...]
Ver7.0公開!
やっとマニュアルも完成し、公開とすることが出来ました
つ[http://www.uzukisyou.nobody.jp/AIlist.html]

重複している処理をいくつか関数化し、ローカルでも問題のない変数をローカル化
…したのだけど、もしかしたらまだいくつか無駄なところがあるかもしれない

ここからVer7の微調整を行いつつVer8の開発に移るわけなんだけど・・・
大量のMobデータをどう扱うか
あと、Ver7でさらに基本のAI_1に干渉する処理が増えちゃったので、処理の追加が大変になってきました

おまけ機能は将来的に「ホムに感情をつける」という最終目標を実現に近づけるための第一歩のつもりだったのだけど、さてさて・・・

今考えてる「ホムに感情をつける」は至極単純なもので、ホムのHPとSP、また主人のHPや主人のタゲ、自分のタゲ、主人との距離 などなど
様々な要素からこまめにホムの感情値を数値で上下させ、その数値によってホムの行動パターンが決まるというもの

マクロから見たアルゴリズムは単純なものです
問題はミクロから見たときのアルゴリズム
絶対超複雑になる!
こう、変数の管理が大変なことになって・・・ガク((゜д゜;))ブル

これはまぁ、今はおいておいて
Ver7を調整してて思ったのだけど、コンフィグで設定した値がイレギュラーなものだった場合デフォルトの値が強制的に入るようにすると、
プログラムとかパソコンに詳しくない人でもある程度エラーを出さずに使えるんじゃないかな?と思った

あと冬物語の人にいわれた英語でのコメント、メモ程度でもいいからつけようとは思ったのだけど、ものすごく手間になりそうで且つ自分に必要ない機能ということでものすごく腰が重くなっています

Ver8の開発の合間にちょこちょことコメントの部分に英単語を置いていこうかな。。。

AIを使う人の狩り方によって、「こう動いて欲しい」というのはあるわけで
私自信、気になるところがあるとすぐカスタマイズしちゃう方なので、
衝動的にカスタマイズしたくなった時気軽に出来るようにというのを意識してます
コンフィグで数値を変えるだけで様々なパターンの動きが可能、といったものが好みです

あと私は結構飽きっぽい人なので気分によってホムの挙動をあれこれ変えたくなるのです

そんなこんなで製薬ケミとそのケミを護るゼリーの関係でAIを作っております
ロゼッタ=ハインツ
第65回Ragna★Dream2 で朗読した自作ショートストーリーをのっけてみる

タイトルは無し
――

(・・・ここに来ることになるなんてね)
感慨深げに目の前の門を見上げる
周囲にはモンスターの死骸がいくつか転がり、
仲間は皆、思い思いに進入前の休憩をとっていた

――グラストヘイム古城跡
ここは大昔にかつて栄えていたと言われるグラストヘイムの跡地でありモンスターの巣窟でもある

数々の腕に覚えのある冒険者が立ち向かっていっては
ある者は貴重品を手に帰還し、ある者は帰らぬ者となる

最近でこそ良い装備が市場に普及し、未帰還者は減っているが
それでも生半可な実力では立ち向かえないダンジョンとなっている

思ったより自分が冷静なのが不思議だった
今、この巨大な門を前に思い起こすのは5年前の―――

――
「フェネ?」
「ん、なに?」

彼はフェネガル・ラルバーツ
彼はプロンテラ騎士団に所属する騎士であり、私の愛する人でもあった
「今度は何処に行くの?」
彼がグローブの調子を確かめる時、
それは騎士団から召集がかかり彼が危険なところへ行く時だ
「なんだ、心配してくれてるのか?ロゼッタ」
そう言い、こちらの心配など何処吹く風といった調子で彼は無邪気に笑う
「だって、帰ってくるといつも生傷作ってきてるじゃない」
彼は弱いわけではない、真面目さが枷となり、いつも仲間を気にして最後まで戦陣に残ってしまうため傷が絶えないのだ
「騎士団の仕事なんてしなくても、生活費程度の収入があればいいんだから」
「大丈夫だよ、今回は広がりすぎたゴブリンの縄張りを押し戻すのが任務だから」
そう言い、鼻先を軽く撫でる
彼が考え事をしている時の癖だ
「ゴブリンなんかに後れはとらないさ、今日こそ無傷で帰るよ」
朝食をとり、弁当を抱えて彼は出かけていった
彼は何を考えていたのだろうか?

2日後、彼はまた傷を作って帰ってきた
「いやぁ、ゴブリンリーダーに不意をつかれてね」
とハハハと笑う
「はぁ、分かったから包帯取り替えたらさっさと寝なさい」
そう言い、私は彼の傷口をわざと軽く叩いた
「いでで!ロゼッタ、やめて、痛い!」
「フェネが言って分からないからよ!」
もう一つため息をついて、何か手料理を用意しなきゃと考えていると彼は微笑みながらこう言ってきた
「ロゼッタ、もうすぐ君の誕生日だね」
確か、来週だったはずだ
「君の20歳の誕生日で、僕達が出会って2年目でもある」
彼の懐かしむような視線
あの頃の彼はまだ駆け出しの剣士で、私はただの雑貨屋の店員だった
彼が両手一杯に硬い角と硬い皮をかかえて持って来て、その場で転んでそれらを店内でぶちまけたのだ
それがキッカケで二人は出会い、気がつくとフェネがその店の常連になっていて、いつの間にかフェネが来るのが楽しみになっていた

「そうね、あの頃はまさか一緒に住むようになるなんて思ってもなかったわ」
そう言い、私はフフと笑う
おそらく運命とはこの事を言うのだろう
「今年の誕生日、楽しみにしてていいよ」
イタズラをたくらむ男の子みたいな楽しそうな顔で、彼は親指をたててウインクしてきた
「はいはい、あほな事言ってないであなたは傷を治しなさい」
「ああ、そうだ、もう一つ君に言っておきたいことがあるんだ」
「なに?」
「三日後、傷が治ったらグラストヘイムに行ってくる」
一瞬彼が何を言ってるのか分からなかった
「え・・・?」
「次のグラストヘイムへの遠征のメンバーに選ばれたんだよ」
彼が自慢げに鼻をならすのと対照的に、私は一瞬思考が停止してしまった

この頃はカードなどという特殊な強化道具も普及しておらず、
エルニウムやオリデオコンも非常に珍しい物で、
グラストヘイムへ行くことは相当な熟練者でも死と隣り合わせだった

それだけ彼の実力が高く評価されたのだろう、しかしだからといって・・・
「どうして・・・どうしてフェネが行かないといけないの?フェネは正規の騎士団員じゃないんでしょ?
そんな危険なところに行かなくてもいいのに!」
彼には私の反応は予想外だったようで、少々うろたえていた
「あ、いや、でもさ、前払いで報酬もでかいんだぜ!
もっとロゼッタを楽させてあげられるし、それに・・・」
ここでハッとしてフェネは言いかけた言葉を飲み込んだ
同時に鼻先を軽く撫でる動作
このとき彼は何かを隠してた

それが勘にさわり、私の怒りに火がついた
「『それに』って何よ!言いたいことがあるならはっきり言えば!?
バカは死なないと直らないって言うけど全くその通りね!」
そう言い放ち、家を飛び出した

それから彼がどうしたのかは知らない
二日ほど宿に泊まって過ごし、頭が冷えてから帰ったとき
彼は出発した後だったからだ
プロンテラ城へ行き、騎士団の人に聞くと
フェネは傷も治りきっていないまま、
予定より一日早く隊列に加わったらしい

(・・・フェネが帰ってきたらちゃんと謝ろう)
そのまま2週間ほど一人で過ごした後
彼を待っていた私の元に"彼の遺品"が帰ってきた

撤退命令が出た時、
彼はいつものように味方が離脱するまでその場に残っていたそうだ
そしてグラストヘイムへ遠征に来ていた総計27名の一個大隊の、最後の中隊が離脱する時、外で態勢を整え再編成した救援部隊がこの中隊の逃亡を支援しに向かったのだが、
救援部隊が到着した頃にはその中隊はモンスターの待ち伏せに合って壊滅し、9名居た中隊メンバーのうち二名しか残っていなかったそうだ
その壊滅した中隊のメンバーの中にフェネも含まれていた

そして、遺品といっしょに小箱が渡された
「フェネガルから君に渡して欲しいと預かった物だ
彼はこれを買うために、騎士団からの仕事がないかとこまめに城を訪れていたよ」
小箱の中にはダイヤの指輪が入っていた

その後、なぜか私は無我夢中で武器の扱いを訓練し
剣士となり、騎士となった
多分、私はフェネの近くに居たかったから訓練に励んだのだ
彼が見たであろう景色を見て、彼が体験したであろう出来事を体験して
彼に近付きたかったのだ
そして時々、どうしてもっと早く訓練を始め、彼と一緒に戦えなかったのかと後悔をする

そして現在、一介の冒険者としてグラストヘイムの門の前にいる

今は良い装備が普及し、よっぽどな所でもなければ死の危険は遠く
グラストヘイムのような場所でさえ、冒険者が宝漁りに来る程度の場所となってしまった


「ロゼッタ?」

呼びかけられてハッとし振り返ると、PTの仲間の一人が不思議そうにしていた
「ボーっとしてて大丈夫?体調悪いならポタで戻ろうか?」
「いや、大丈夫、ちょっと考えごとをしてただけだから」
私も手近な倒木に座り、防具の手入れを始めた
20分後にこの上級ダンジョンへ進入することになる
死ぬ危険は少ないとはいえ、モンスターを相手にする以上安全ではない
薬指のお守りに触れる
フェネからの最後のプレゼント
今までもこれがあるから生き残ってこられた、
そしてこれからもフェネが私を護ってくれうるだろう

「そういやさ」
仲間の一人が、思い出したように会話を始めた
「昔、定期的にプロンテラの騎士団がここに派遣されてたよな」
「あの頃はあそこが一番強い組織だったからね~、
あれが無かったらこのあたりは今以上にモンスターに支配されてたよ」
「5~6年前だっけ?」
「そうそう、それでさ」
話題を投下した主は、ニヤリと口元をゆがませた後、オドロオドロしくこう言った
「その時、死亡が確認されないまま行方不明になった人とか結構居たらしいんだよ」
拍子抜けした様子で一人が答える
「それ、仲間からはぐれてそのまま死んだんじゃね?」
「それがさ、今になってもその行方不明者の死骸は見つかってないし、
目を離した隙に死体が忽然と消えたこともあったらしいんだ」
「だからなんだよ?」
「あ、いや・・・すまん忘れてくれ」
恐らく『怖い話』的な噂話を盛り上げの材料として投下したのだろうが
完全に滑ってしまったようだ
まぁ、PT狩りでは良くあることだ

それにしても、ここグラストヘイムは無尽蔵にモンスターが沸いてくる
コボルトやジオグラファーのように繁殖して増えているわけでもないし、
かといってポリンのように分裂でもないし、全く不思議なものだ
その場で死んだ人間がモンスターに変化していると言う説もあるくらいだ

休憩も終わり、グラストヘイム内部へ到着した
次から次へと現れるレイドリックをなぎ倒しては奥へ進んでいく
「おらー!エルニウム出しやがれ!」
かつて恐れられていたグラストヘイムも今やこの有様だ
時代の流れを感じてしんみりしつつ、私も槍を振るう
しかし、ときたま剣の扱いが上手いレイドリックがいるから油断は出来ない

一匹が不意打ちを行い、味方のウィザードが襲われたためそちらの援護に向かう
そのレイドリックは私を見た瞬間、なぜか動きが止まった
「ピアース!」
三連突きが決まり、串刺しになり動かなくなる鎧の魔物
顔のあたりを撫でる動作をしてそのまま崩れ落ちた
(・・・なんだ?今レイドの動きが止まってたような)
「ストームガスト!!」
レイドリックのグローブに見覚えがある気がして
死骸が霧散する前に観察しようとしたが、
ウィザードの呪文により、死骸は観察する間もなく
冷気の霜に埋もれて見えなくなり、
他のモンスター同様に時間と共に霧散していった

(見覚えがあるはずが無い、私はここに来るのは初めてなんだから)
フェネのことを思い出していたからこんなデジャヴを感じたんだろう、
感傷的になっている自分を自覚し、そんな自分が可笑しかった

―レイドリックが消える直前、フェネの声が聞こえた気がしたのも気のせいに違いない―

- END -

以下あとがきとネタバレ
[続きを読む...]
ゼリー以外のオートスキルの不具合とVer7配布間近宣言
オートスキルのテストをしてくださった方からのレポートが届きました
(∩'ヮ')∩
レポートは鳥と羊です

鳥はフリットムーブのディレイ判断のところの条件が間違ってた様子
これはきっとVer6でいじった時に間違えたままになってたのですね

さらにフリットムーブを使用するときの条件が何パターン化か欲しいとのこと、
立ち止まっている時のみ、立ち止まっている時+移動しているときのみ、敵を見つけた時のみ、状態に関係なく常時、ALT+Tの状態の時のみ
ということなのでこれを実装する予定

尚、キャスリングのオートスキルが全然働いてないとのことで、レポートによると オートスキル→ATTACK_ST→オートスキル→ATTACK_ST となってるため移動が起こらないとのこと
さらに、主人のHPが回復しなくてもホムがタゲられてない状態で主人がタゲられたらキャスリングのフラグをリセットしたほうが使い易いとのアドバイスまで!
早速修正したものを送って再度テストしてもらいました
キャスリングに関しては一度実際の動きを見て調整させてもらいました

Ver7の調整もある程度終わってきたので、上記のレポート結果とアドバイスを組み込んだオートスキルをVer7に実装したら早速Ver7.0としてアップしようと思います
現在Ver7用のマニュアル作成中
(*'ヮ')ぅ

他ホムでの動作確認を手伝ってくださった方々、本当にありがとうございました!


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。