エタノールソフト 2024/05/24 20:01

オロチフリーズバグとの格闘日誌

こんにちは。
今回はバグとの格闘日誌です。
体験版ver0.2のコメント欄にバグ報告を頂いたいのですが、発生条件がわかっても原因究明が困難&小手先の対処でも直らないので苦戦しました。

※少々ネタバレを含みますが、無料公開している体験版の範囲内なので書いちゃいます。

頂いたバグ報告

最初に頂いたバグ報告がこちら。

要点としては
・ワープを挟まずにボスを倒すとフリーズする

だったのですが、私がプレイしてみても再現できずいったん保留としました。

バグ報告追記

同じ方がさらに正確な情報をくれたので再度テスト。
ここでバグの発生条件がわかりました。
・ボスマップの敵をすべて倒した状態でボスを倒すとフリーズする

こちらでも再現できたので対処へ乗り出します。
とはいえ実はこの時点で嫌な予感しかしません。

というのも普通、バグの発生条件さえわかればどの辺で問題が起きているのか見当がつくのですが、これについては全く見当がつかないためです。
となると私の組んだ部分ではなく、第三者が作ってくれたプラグインや、プラグインとこちらの処理の兼ね合いで問題が発生している可能性が高いのです。

該当部分の処理の確認

とりあえずはフリーズする部分の処理を確認します。
まず、ボスとの接触イベントは次のように定義しています。

ひととおり会話イベントを経たあと、コモンイベントを呼び出しています。
ボスイベントは1つだけなので共通化する必要はないのですが、雑魚接触イベントが共通なので、敵との接触イベントはすべて同様の構造にしよう、という考えです。

でこれがそのコモンイベントの中身なのですが、フリーズしている箇所の処理としては
・アニメーションの表示(完了までウェイト)
の部分です。

正直ここでフリーズする理由がさっぱりわかりません。
単なるツクールのデフォ機能です。

関係しそうなプラグインを停止してみる

1点だけ引っかかった点があったのでまずはそこを試します。
「敵をすべて倒した場合」という条件だったので、「敵イベントがプレイヤーを探索するためのプラグイン」はちょっと怪しいと思いました。
というのもこのプラグイン、プレイヤーを探索するための処理を常に並列で行っているわけなので。
といってもまぁ半信半疑というか、可能性は60%くらいといったところです。

このプラグインを停止して

もう一度敵をすべて倒してからボスを倒してみます。
もちろんセーブデータから呼び出しても、条件を満たせば同様のバグが発生することは確認済みです。

直りました…。
しかしこのプラグイン、敵イベントのプレイヤー探索と視界の描写を担当しているため、オフにすればオッケー、というわけにもいきません。

発生条件の正確な把握

症状と発生条件、そしてアバウトな原因はわかりましたが、根本的な原因はまだピンとこないので、さらに正確に状況を把握するために様々な条件でテストします。
特にワープのお話があったのでそこを正確に切り分けます。

  • まずは普通に敵をすべて倒してからボスを倒し、現象を再現
  • ワープを経てから敵をすべて倒した場合もバグが発生する
  • ワープの有無にかかわらず、敵がマップ上に1体でも残っていれば発生しない
  • コモンイベントではなくイベントオブジェクトに直接記述しても発生する(コモンイベントで対象「このイベント」が正確に動作するのか怪しいとは思ったけどそこは問題なし)
  • プラグインの「探索自動開始」機能を切って、敵が追跡してこないようにしても発生する(これは意外だった)
  • 「アニメーションの表示」からウェイトを削除すると、アニメーションの表示がスキップされてフリーズは免れる

ふむ、処理としてはアニメーションの表示をさせたいけど、なんらかのなんかでその部分の処理が止まっていて、ウェイトがかかりっぱなしになっている、と。

なるほどわからん。

デベロッパーツールを起動

とりあえずデベロッパーツールを起動してみます。

コイツか?

なるほどわからん!(つーか読む前提のやつじゃないだろコレ)
おk、次!

対処法のリストアップ

根本的に解決するならツクール本体とプラグインのソースコードとにらめっこして、問題となっている部分を書き換えればいいのですが、本職プログラマーではない私にはキツイです。
そして仮にできたとしてもかなりの時間と労力を要することが予想されます。

こういう時、ディレクター的にはこう考えます。

  • そのアニメーションはどうしても必要なのか(消してもいいんじゃね)
  • 敵の追跡や視界は…これはさすがに残したいな
  • 敵の追跡はこのプラグインなしでもできるけどわりと手間だな(あと視界は厳しそう)
  • 原因がこのプラグインならそもそもボスだけ別マップにすれば解決するのでは(しかもちょうど蛇だしほら穴でよくね)

よし、それでいきましょう。
こんな感じになりました。

フハハハハ!私はディレクターであり代表でありステークホルダーなのだぞ!
実務的な解決が難しいのなら仕様変更くらいわけないわー思い知ったかバグめ!

いや正直これがこの作品のコアコンピタンス(エロ)に関わる部分であればもうちょっと頑張ったかもしれませんが、厳密に元の形にこだわることに合理性もなければ効率的でもありません。

『雑魚的が出現するマップでイベントでのアニメーションの表示ができない』

まぁ許容範囲でしょう。
リリース予定日も近づいていますし、今回はこれで乗り切ることにします。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索