Glenelg開発メモ/(未実装)SBR44。

2006-12-13 (水) 08:34:12 (4056d)
お名前:

マニアックな話:Glenelgの機能についてのメモ。
自分のための覚書でもあり、利用者のための豆知識でもあり、他AI開発者のための参考情報でもあり。

12/13のパッチで、状況がちょっと変わったので補足。
これも「一時的な」変更の可能性がありますが。

12/13パッチで・・・

それ以前に行えていたSBR44の高速連打、いわゆる「奥義狩り」が、できなくなっているようです。
SBR44使用のための前提条件が「好感度3以上」に変更されているようで、結果、「一度SBR44を使うと好感度が2になるので、餌やりをしないと次発が放てない」という状況のようです。
これについての公式な発言もあり、「できないのが仕様」となるようです。

「好感度を犠牲にして高威力」という売り文句のスキルでしたから、ある意味妥当な形でしょう:以前は「好感度が2から2に下がる==実質コスト無しだった」のが問題なわけで。

というわけで、これ以下にある内容は「古い」ものになってしまいましたが、とりあえずは残しておきます。


=======================================
これ以下、以前の記載

前振り

フィーリルの奥義スキル、SBR44。
好感度が下がる代わりに、非常に強力な打撃を放つスキル。
好感度はえさをあげることでしか得られないので、結果的に連発できないようにデザインしたと思われます。 ・・・ですが、そのバランス感覚が悪かったようで、おかしな現象が起きています。

  • SBR44はディレイや消費SPが極めて低く、好感度の低下にさえ目をつぶれば異常な連打ができる。
  • SBR44を使うと、好感度は確かに下がる。だが、その下がる下限値は2。
  • 好感度がゼロにならないかぎり、ホムの動作にこれといったデメリットはない。
    別の言い方をすると、好感度が2でも、SBR44は使用できる
  • 好感度が2になっていても、SBR44はそれなりに高い威力を発揮できる。
    ⇒総合的に、「常にSBR44を使用していても、これといったデメリットがないどころか、通常攻撃よりも高い威力を確保できる」

従来から、フィーリル対応のAIはまずまちがいなく「オートスペル的」なムーンライトに対応していました。 そこに上記状況・・・フィーリル対応AIで、「ムーンライトの代わりにSBR44を使用」するような流れは、当然発生するものです。

ムーンライトの代わりのSBR44を使う際の問題点。

ムーンライトの代わりにSBR44を使うのは、簡単です。 ムーンライトのスキルIDをセットしている場所を、代わりにSBR44のIDにしてしまえばいいのですから、 おそらくどのAIでも1行編集すればできます。 Glenelgでも、それは例外ではありません。

ただし、SBR44には1つ、ムーンライトとは大きく異なる点があります。 それは「念属性の敵には当たらない」という点。

そこでSBR44対応の範疇にはもう1つの追加仕様 「念属性の敵には、SBR44を使わない。可能ならば代わりにムーンライトを使う」 という仕様が必要になっています。

なんですが・・・

上記のようにいろいろ情報はもってはいるのですが、 今のところ、Glenelgでは対応するつもりはありません。 理由は以下のとおり。

  • デバッグ面。
    以前から何度か言っている、「友瀬がフィーリルを持っていないのでデバッグできない」と同じ話です。
    まあムーンライトと同じ処理でほとんどOKなので想像では対応可能ですが、デバッグをできないので。 「好感度」という非常に大きな代償を要求する以上、ちょっと気乗りしません。
  • 「らしくない」という感情的な理由。
    前の日記か何かで書いたんですが・・・ 「ホムが自発的に好感度を落としつつ猛攻」というのがニュアンス的に変なので。
    友瀬的には「ホムは実はSBRを使いたくないんだけど、ケミに言われて嫌々」としか 思えないので、常にそれを使うのには抵抗があります。

それでもどうしてもSBR44連打が欲しい人に。

技術的にできないとか思われると腹立たしいので(笑) 比較的場当たり的に対処する改造方法の示唆をしておきます。

Glenelgには現時点で「敵ごとに使用するスキルレベルを変更する」仕組みがあります。 これを利用して、「レベル4ムーンライトを使うように設定した敵には、SBR44を使う」という改造をすれば、 「敵によってムーンライトとSBR44を使い分ける」動作は実現できます。

改造としては「射撃スキル自動使用の判定内で、MLレベル4を使う状況なら、SBR44を使う」ようにすればOK。 そのためには、skills.lua 内 UseFireSkill() をちょっといじればいけます。

  1. (前提知識)使うスキルレベルのチェック。
    skills.lua 内 UseFireSkill()に以下のような行があります。
    このtmplvlが「その敵に対して使うスキルレベル」となっています。
    tmplvl = GetLearnValue(VS_SKILL_LEVEL, EnemyType )
  2. (前提知識)使うスキル種類。
    これは同じくUseFireSkill() 内にあるローカル変数:skill_id[ (mod( GetV(V_HOMUNTYPE,MyID),4))+1]に保存しています。
  3. 上記を省みて、対応方法は・・・
    上述の tmplvl= GetLearnValuse〜の行のすぐ下に、以下の数行を挿入すればOKです。
    if (tmplvl == 4) then
    	skill_id[ (mod( GetV(V_HOMUNTYPE,MyID),4))+1 ] = SKILL_SBR44
    	tmplvl=3
    end

念のために書きますが、上記対応はあくまで「友瀬の論理的設計」レベルのもので、一切動作テストはしていません。
たぶん問題は起きないと思いますが、うまく動くかどうかは保証できませんし、これ以上細かいサポートをする気もありません。
論理的な説明もしているわけなので、デバッグをする材料は足りているはずですので、試す方は自己責任で。