ページ 11

画面フリーズ解消に向けてご意見を伺いたいです

Posted: 2023年7月19日(水) 07:45
by ksk
いつもお世話になっております。

以前より、出力したゲームでごく稀にフリーズが発生し難儀しておりました。
(BGMは鳴っていてメニューを開く音なども聞こえるが画面が完全に停止してしまう)

■バージョン(Windows版)
・本体 Ver.1.6.3
・コアスクリプト Ver.1.6.2

色々なサイトを探していくうちに問題解消につながりそうな記事を見つけました。
https://note.com/rock2well/n/n01d8148bf738

こちらの記事で言及されている点にまさに心当たりがあり、
(推奨されない方法で恐縮ですが)rpg_objectsを編集して味方の最大HPを9999⇒99999へ、
敵の最大HPを999999⇒9999999へ変更しておりました。

記事で言及されている、

コード: 全て選択

if (this._skipCount <= 0) {
の修正を加えてみたところ、今のところフリーズに遭遇しなくなりました。
最も、過去に派生したフリーズも5時間で1~2回程度の発生頻度でしたので、
運が良かっただけかもしれませんが……。

すでに公開しているゲームということもあり、
修正を加えるにしてもりっかり理解した上で導入したい考えがあり、
有識者の方にご意見を頂戴したく思います。

・【レンダリング判定式を変更する】修正を加えることでフリーズ問題は解消しそうか。
・別の問題発生につながりそうなリスクはないか。

ざっくりとした質問で恐縮ですが、ご意見いただければ幸いです。

Re: 画面フリーズ解消に向けてご意見を伺いたいです

Posted: 2023年7月19日(水) 14:51
by Plasma Dark
・【レンダリング判定式を変更する】修正を加えることでフリーズ問題は解消しそうか。
少なくとも、記事で説明されている、 _skipCount に起因するフリーズは解決するかと思いますが、よほど特殊な事情がない限り、kidoさんの GraphicsRenderFix.js を入れたほうが良いかと思います。
・別の問題発生につながりそうなリスクはないか。
元々 rpg_core.js のレンダリング関連の処理に手を加えている、とかでない限り、何か起こるとは考えにくいです。

記事では RPGアツマール版のコアスクリプトをゲームに適用した ことにより問題が生じていますが、これはコアスクリプトをすべて差し替えたからだと思われます。
対象のゲームがパラメータの上限値を変更する際にコアスクリプト rpg_objects.js を直接変更していたため、コアスクリプトを上書きされてその変更が戻ってしまったのが原因です。

今回採用されるかどうかは別として、今後この記事をご覧になる方のために、コアスクリプトを触らずに実現するためのプラグインの書き方を記しておきます。

敵味方のパラメータ上限は以下の関数で定義されています。
- Game_BattlerBase.prototype.paramMax
- Game_Actor.prototype.paramMax
味方の最大HP上限のみ、 Game_BattlerBase ではなく子孫クラスの Game_Actor で定義されています。
それ以外は Game_BattlerBase クラス側で定義されています。

これらの関数をコピーして新しい.jsファイルを作成し、pluginsフォルダに放り込んでそれを書き換えます。
例として、味方の最大HP上限だけ99999に変更するプラグインを書いてみます。

コード: 全て選択

/*:
 * @plugindesc 味方の最大HP上限を99999にする
 *
 * @help
 * 味方の最大HP上限を99999に変更します。
 */
Game_Actor.prototype.paramMax = function (paramId) {
  if (paramId === 0) {
    return 99999;    // MHP
  }
  return Game_Battler.prototype.paramMax.call(this, paramId);
};
(同じ箇所に作用するプラグインとの併用を考える場合はもう少し丁寧に書く必要がありますが、そうでない場合はこれで十分です)

プラグインによる挙動の変更は、コアスクリプトをMV1.6.xのデフォルト状態に戻したり、コミュニティ版に差し替えたりという変更によって左右されないため、直接 rpg_objects.js を変更するよりも安全です。

Re: 画面フリーズ解消に向けてご意見を伺いたいです

Posted: 2023年7月19日(水) 18:43
by ksk
返信ありがとうございます。

あっ……なるほど、最大HPの数値を書き換えたことがフリーズの原因だと勘違いしていたのですが、そうではなかったのですね。
自分と近い症状の記事を見つけて気持ちがはやり、内容を自分の都合のいいように解釈していたようでお恥ずかしい限りです……。
(自分でもなぜ最大HPの設定を変更することがフリーズの原因となるのか疑問に感じてはいました)
少なくとも、記事で説明されている、 _skipCount に起因するフリーズは解決するかと思いますが、よほど特殊な事情がない限り、kidoさんの GraphicsRenderFix.js を入れたほうが良いかと思います。
実は過去に、上記の修正プラグインを導入してもフリーズを起こした経験があり、選択肢から外して考えておりました。
しかし万が一導入にミスがあった可能性を考慮し、もう一度試してみようかと思います。
修正プラグイン導入のもとでテストプレイをしてみて、問題なさそうであれば解決済とさせていただきます。

また、プラグイン化の流れにつきましても丁寧に解説いただきありがとうございます。
コアスクリプトへ直接編集を加えることは避けるようスクリプトの勉強もさせていただきます。