【解決済み】戦闘中の、MP最大値表示方法について

ふゆき
記事: 25
登録日時: 2019年11月23日(土) 11:47

【解決済み】戦闘中の、MP最大値表示方法について

投稿記事by ふゆき » 2021年7月14日(水) 08:45

いつも参考にさせていただいております。

今回ご相談したいのは、バトルステータスウインドウに表示されるMPを
「現在値表示のみ」から「現在値/最大値」という表示にする方法です。
(理由:MP最大値が1桁に収まるゲームで最大値が装備等によって微変化するので、常に最大値も表示しておきたい)

調べてみたところ、
viewtopic.php?t=10162
こちらのトピックの内容から、

rpg_window.js内、
7df68f51a60ab6220c3e5d94d6c99ca6.png
7df68f51a60ab6220c3e5d94d6c99ca6.png (5.26 KiB) 閲覧数: 1660 回

の"drawActorMp"末尾の値を大きくすると幅が広がって自動的に現在値/最大値表示に切り替わる…
ということまではわかったのですが、横幅を広げずに分数表示にするにはどうすればよいでしょうか?
「現在値のみ⇔最大値も表示」が切り替わる値を定義している場所をいじればよいのだとしたら、何処なのでしょうか?
(でもそうするとHPやTPも分数表示になってしまう気がします)

アドバイスをいただきたく、どうかよろしくおねがいします。
最後に編集したユーザー ふゆき on 2021年7月14日(水) 16:39 [ 編集 1 回目 ]

アバター
WTR
記事: 560
登録日時: 2015年12月22日(火) 19:14

Re: 戦闘中の、MP最大値表示方法について

投稿記事by WTR » 2021年7月14日(水) 12:36

drawGaugeAreaWithTp --> drawActorMp --> drawCurrentAndMax と順にメソッドが呼び出されて
drawCurrentAndMax が最大値表示のあり・なしを切り替えてくれています。

この drawCurrentAndMax は Window_Base に定義されていて
Window_BattleStatus その他はこれを継承しています。

これを常に最大値表示するように変更してしまうとご推察の通り HP も同じく最大値ありの表示になります。
TPの表示には drawCurrentAndMax が使われていないので影響なしです。

drawCurrentAndMax を変更してもいいですが
幅も1桁分にしたほうが無駄がない気がするのでいっそMP専用の drawCurrentAndMaxMp でも作って
drawActorMp で呼び出すようにすればよさそう。
ということをやったのが↓です。

コード: 全て選択

(() => {
   "use strict";
   //=============================================================================
   // Window_Base
   //=============================================================================
   Window_Base.prototype.drawCurrentAndMaxMp = function(current, max, x, y,
                                 width, color1, color2) {
      var valueWidth = this.textWidth('0'); //幅を1桁分だけにする
      var slashWidth = this.textWidth('/');
      var x1 = x + width - valueWidth;
      var x2 = x1 - slashWidth;
      var x3 = x2 - valueWidth;
      // 常に最大値を描画する
      this.changeTextColor(color1);
      this.drawText(current, x3, y, valueWidth, 'right');
      this.changeTextColor(color2);
      this.drawText('/', x2, y, slashWidth, 'right');
      this.drawText(max, x1, y, valueWidth, 'right');
   };

   Window_Base.prototype.drawActorMp = function(actor, x, y, width) {
      width = width || 186;
      var color1 = this.mpGaugeColor1();
      var color2 = this.mpGaugeColor2();
      this.drawGauge(x, y, width, actor.mpRate(), color1, color2);
      this.changeTextColor(this.systemColor());
      this.drawText(TextManager.mpA, x, y, 44);
      this.drawCurrentAndMaxMp(actor.mp, actor.mmp, x, y, width,
                        this.mpColor(actor), this.normalColor());
   };
})();
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
ふゆき
記事: 25
登録日時: 2019年11月23日(土) 11:47

Re: 戦闘中の、MP最大値表示方法について

投稿記事by ふゆき » 2021年7月14日(水) 16:39

WTR様:

さっそくのご助力、ありがとうございます。
drawCurrentAndMaxのif文のところで判定しているんですね。
別の関数(メソッド?)を用意して呼び出すやり方も
実際にコードを書いていただき、また分かりやすく注釈までありがとうございます!

現状は一桁で収まる予定ですが、2桁になった場合にも対応できるように
頂いたコードを少しだけ修正して、使用させていただきたいと思います。

ゲームが完成した際はスクリプト協力のクレジットにWTR様のお名前を
掲載させていただいてもよろしいでしょうか?
アバター
WTR
記事: 560
登録日時: 2015年12月22日(火) 19:14

Re: 【解決済み】戦闘中の、MP最大値表示方法について

投稿記事by WTR » 2021年7月14日(水) 22:35

ふゆき さんが書きました:ゲームが完成した際はスクリプト協力のクレジットにWTR様のお名前を
掲載させていただいてもよろしいでしょうか?

はい、問題ありません。たいしたことはしてませんが…
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
ふゆき
記事: 25
登録日時: 2019年11月23日(土) 11:47

Re: 【解決済み】戦闘中の、MP最大値表示方法について

投稿記事by ふゆき » 2021年7月15日(木) 11:28

WTRさま:

クレジットへの掲載OKとのこと、ご確認ありがとうございます!
アドバイスいただきdrawCurrentAndMax にたどり着けたとしても別の関数を用意して呼び出す発想も
できる気がしないので、提案いただいたコードをまんま使うならせめて、と思いまして…。

改めて、ありがとうございました。

“MV:質問” へ戻る