Skip to the content.

メッセージ表示の仕組みと速度調整

RPG ツクール MZ のコアスクリプトWindow_Messageクラスを分析し、メッセージがどのように表示され、 その表示速度をどのように変更できるかについて解説します。

メッセージ表示の基本の仕組み

RPG ツクール MZ のメッセージウィンドウは主に以下のクラスで制御されています。

主要なプロセス

  1. メッセージの表示プロセス:
    • updateMessageメソッドがメッセージ表示の中心処理
    • テキストは 1 文字ずつprocessCharacterメソッドで処理・表示
    • 各文字を表示するたびにshouldBreakHereで一時停止すべきかチェック
Window_Message.prototype.updateMessage = function () {
  const textState = this._textState;
  if (textState) {
    while (!this.isEndOfText(textState)) {
      if (this.needsNewPage(textState)) {
        this.newPage(textState);
      }
      this.updateShowFast();
      this.processCharacter(textState);
      if (this.shouldBreakHere(textState)) {
        break;
      }
    }
    this.flushTextState(textState);
    if (this.isEndOfText(textState) && !this.isWaiting()) {
      this.onEndOfText();
    }
    return true;
  } else {
    return false;
  }
};
  1. メッセージ表示の制御要素:
    • _showFast: ユーザーがボタンを押したときに有効になる高速表示モード
    • _lineShowFast: 特定の行だけを高速表示するフラグ
    • _waitCount: この値が 0 より大きいと表示が一時停止する
    • pause: メッセージの最後などで入力待ちする時のフラグ

表示速度を変更する方法

1. 制御文字を使う方法

テキスト中に以下の制御文字を挿入することで表示速度を調整できます:

制御文字 効果
\. 15 フレーム(約 0.25 秒)待機
\| 60 フレーム(約 1 秒)待機
\> その行を高速表示する
\< その行の高速表示を無効にする
\! メッセージを一時停止(続行には入力が必要)
\^ 文章の終わりのウェイトをスキップ
// ゲーム中のメッセージの例
'これは\.ゆっくり\.表示される\.文章です。';
'これは\|とても\|ゆっくり\|表示されます。';
'\>これはとても速く表示される文章です。';

2. プラグインで調整する方法

プラグインを作成して表示速度をカスタマイズできます:

// 基本的な表示速度を変更するプラグイン
(function () {
  // 元のupdateMessageメソッドを保存
  const _Window_Message_updateMessage = Window_Message.prototype.updateMessage;

  // 新しいupdateMessageメソッドをオーバーライド
  Window_Message.prototype.updateMessage = function () {
    // 通常はここで文字表示の頻度を制御できる
    if (this._textState && !this._showFast && !this._lineShowFast) {
      // フレームカウントを使って表示速度を制御する例
      if (Graphics.frameCount % 3 !== 0) {
        // 3フレームに1回だけ処理する(遅くする)
        return true; // 処理をスキップ
      }
    }

    // 元のメソッドを呼び出す
    return _Window_Message_updateMessage.call(this);
  };

  // waitCountの初期値を変更してデフォルトの待ち時間を変える
  const _Window_Message_startWait = Window_Message.prototype.startWait;
  Window_Message.prototype.startWait = function (count) {
    // 待機時間を調整(例:1.5倍にする)
    _Window_Message_startWait.call(this, Math.floor(count * 1.5));
  };
})();

3. $gameMessageを利用する方法

スクロールテキスト(掲示板やノートなど)の速度はGame_Messageクラスで設定できます:

// スクロールテキストの速度を設定
// 第一引数: 速度(1~8、小さいほど速い)
// 第二引数: 早送り禁止フラグ(true=早送り禁止)
$gameMessage.setScroll(3, false);

応用例

キャラクターごとに異なる表示速度を設定する例:

// 通常の速度でメッセージ
$gameMessage.add('これは普通の速度で表示されます。');

// 焦っているキャラのセリフ(高速)
$gameMessage.add('\\>これ、急いでる時のセリフだから早く表示したいの!');

// 眠たいキャラのセリフ(低速)
$gameMessage.add('これは・・・\\|眠たい・・・\\|キャラの・・・\\|セリフ・・・');

// 感情の高ぶりを表現(テンポ変化)
$gameMessage.add('落ち着いて・・・.>うわああああ!<・・・はぁ、はぁ・・・');

注意点

  1. メッセージ速度を変更するプラグインを作る場合、既存の他のメッセージ関連プラグインとの互換性に注意
  2. 過度に遅い表示はプレイヤーのストレスになる可能性がある
  3. \>\<などの制御文字は MV から MZ になっても基本的に同じ動作をする

まとめ

RPG ツクール MZ のメッセージ表示システムは、柔軟に速度調整が可能で、ゲームシナリオの演出に大きく貢献できます。 制御文字を使う基本的な方法から、カスタムプラグインによる高度な調整まで、 用途に応じた適切な方法を選択しましょう。