「なんだこれは!
いつまで経っても敵が死なないではないか!!」
とハカセが叫んだかどうかは定かではありませんが、実際におきてしまった現象です。
RPGツクールMVにて制作中の3DダンジョンRPGにおいて体験版をそろそろ公開できるかなと思いながらテストプレイをしていた時にその現象は発生しました。
階層のイベントバトルをこなし帰還している際に、ランダムエンカウントで遭遇した相手、軽くあしらうつもりが一人死んでしまいました。
その時、これ以上やられたくなかったので状態異常などを使いつつ乗り切ろうと思ったら…最後の一匹がいつまでも倒れない。
あきらかにバグです。
しかも敵が倒れないとは致命的です。その敵は他に一緒にあらわれた敵と同じモンスターでしたのでコイツだけが特別ではないことを作者の私はよく知っています。
その時何があったかを考えて状況を再現する
その現象が起きた際、何があったか。
起きていたことをまとめます。
・その戦闘中に仲間が一人倒れた。→これに付随して相手に不死身ステートでもついたのではないか。
・魅了した後に解除された敵がいる。→魅了をかけてから殴ると不死身になるのではないか。
結論、状況再現のためにバラバラに試しましたが、特定には至らず。
少なくとも味方が倒れても敵が無敵になることはないことがわかりました。
魅了をかけた後で倒しても特に変わらなかったですが…これは後で原因特定につながる要素だったのです。
一度放置して他のテストをする
ちょっと頭を捻ってもブラウザのデバッガを開きながら動かしても再現されないのでよくわかりませんでした。
なので、他のイベント部分をテストしようとしていた時、また同じことが発生します。
今度は誰も倒れてないし、魅了するスキルなどは使っていません。
何度も試せるようにイベントバトルが発生する前でセーブをし、繰り返していくと、次のことがわかりました。
・敵キャラが回復魔法を使うと「ダメージを与えられなかった」と出て意味がなくなる。
その後から無敵になっているようだ。
つまり、ダメージを与えられなかったのではなく回復するHPっていう要素がどっかにふっとんでしまい、HPという要素がない戦闘行為を繰り返す概念だけがそこに残る。
回復スキルの計算式も独特なので、それが悪いのだろうかと思い、エディタで基本的に設定ができる「HP回復n%」という方に切り替えて敵のスキルに設定してみるが、それでも同じだった。
つまり、回復スキルを使うとダメらしい。
※ただし、毎ターン少しずつHPが自動回復する系は問題ないようだ。
結果
次にそれではと、敵キャラの強さと行動パターンを調整することでバランスを取り、敵キャラは回復スキルを使わないことにする。
それでテストしたのだけども、同じことが発生した。
今度は魅了。
最初によくわからなくて放置した魅了。
敵を魅了にかけて冒険者たちを全て防御させて放置する。
そうすると魅了された敵は仲間を殴るわけです。ここが重要でした。
仲間を殴った際「ダメージを与えられなかった」と出てくるのです。
必ず。
それはあり得ないのです。乱数であるとは言え、基本的には敵も味方も
筋力ボーナス+1Dn-防御ボーナスでダメージが与えられるので0の時もあるでしょうが、大きな目が出たらダメージが入ります。
それが必ず「ダメージを与えられなかった」というのはそこで何かがおかしくなっているということですね。
さっきの回復の時と状況を重ねてみると、敵の行動によって+方向でも-方向でも敵側のHPが変動する際にこの現象が起きていることになります。
これがはっきりすれば、完全には解決できなくとも、ゲームデザインの上で回避することが可能となりました。
これで一息ε-(´∀`*)ホッ
予想としては、この3Dダンジョンを再現するために古いコアを使う必要があるので…おそらくは現行のバージョンでは見られない不具合が残っているのではないかと考えます。
何しろ、独特な計算を設定した場合ではなく、基本のセッティングを利用した際にも同じことがおきたのですから(´・ω・`)
多分、情報がないっていうことは現行バージョンでは解決しているのでしょう。
そうでなくては同士討ちさせるステートや回復魔法を使う敵キャラが設定できないことになってしまいますからね。
プラグインそのものが更新されて現行のコアでも正常に動作するようになるまでは、ツクールで3Dダンジョンを作る場合の敵キャラ設定で留意すべき事項となりました。
※余談※
ツクールMVといいますか、ツクールシリーズの計算式や判定は結構独特な偏りが出るものが多いです。
せっかく今回はJavaScriptなので中身開けてソース読める人は好きなように書き換えるのをおススメします。
もちろん、戻せるようにコピーを残してね!
次回こそ世界観とか諸々の話…