いつも参考にさせていただいております。
今回ご相談したいのは、バトルステータスウインドウに表示されるMPを
「現在値表示のみ」から「現在値/最大値」という表示にする方法です。
(理由:MP最大値が1桁に収まるゲームで最大値が装備等によって微変化するので、常に最大値も表示しておきたい)
調べてみたところ、
viewtopic.php?t=10162
こちらのトピックの内容から、
rpg_window.js内、
の"drawActorMp"末尾の値を大きくすると幅が広がって自動的に現在値/最大値表示に切り替わる…
ということまではわかったのですが、横幅を広げずに分数表示にするにはどうすればよいでしょうか?
「現在値のみ⇔最大値も表示」が切り替わる値を定義している場所をいじればよいのだとしたら、何処なのでしょうか?
(でもそうするとHPやTPも分数表示になってしまう気がします)
アドバイスをいただきたく、どうかよろしくおねがいします。
【解決済み】戦闘中の、MP最大値表示方法について
【解決済み】戦闘中の、MP最大値表示方法について
最後に編集したユーザー ふゆき [ 2021年7月14日(水) 16:39 ], 累計 1 回
Re: 戦闘中の、MP最大値表示方法について
drawGaugeAreaWithTp --> drawActorMp --> drawCurrentAndMax と順にメソッドが呼び出されて
drawCurrentAndMax が最大値表示のあり・なしを切り替えてくれています。
この drawCurrentAndMax は Window_Base に定義されていて
Window_BattleStatus その他はこれを継承しています。
これを常に最大値表示するように変更してしまうとご推察の通り HP も同じく最大値ありの表示になります。
TPの表示には drawCurrentAndMax が使われていないので影響なしです。
drawCurrentAndMax を変更してもいいですが
幅も1桁分にしたほうが無駄がない気がするのでいっそMP専用の drawCurrentAndMaxMp でも作って
drawActorMp で呼び出すようにすればよさそう。
ということをやったのが↓です。
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/
https://twitter.com/wtr_in_reverie/
Re: 戦闘中の、MP最大値表示方法について
WTR様:
さっそくのご助力、ありがとうございます。
drawCurrentAndMaxのif文のところで判定しているんですね。
別の関数(メソッド?)を用意して呼び出すやり方も
実際にコードを書いていただき、また分かりやすく注釈までありがとうございます!
現状は一桁で収まる予定ですが、2桁になった場合にも対応できるように
頂いたコードを少しだけ修正して、使用させていただきたいと思います。
ゲームが完成した際はスクリプト協力のクレジットにWTR様のお名前を
掲載させていただいてもよろしいでしょうか?
さっそくのご助力、ありがとうございます。
drawCurrentAndMaxのif文のところで判定しているんですね。
別の関数(メソッド?)を用意して呼び出すやり方も
実際にコードを書いていただき、また分かりやすく注釈までありがとうございます!
現状は一桁で収まる予定ですが、2桁になった場合にも対応できるように
頂いたコードを少しだけ修正して、使用させていただきたいと思います。
ゲームが完成した際はスクリプト協力のクレジットにWTR様のお名前を
掲載させていただいてもよろしいでしょうか?
Re: 【解決済み】戦闘中の、MP最大値表示方法について
はい、問題ありません。たいしたことはしてませんが…ふゆき さんが書きました:ゲームが完成した際はスクリプト協力のクレジットにWTR様のお名前を
掲載させていただいてもよろしいでしょうか?
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
https://twitter.com/wtr_in_reverie/
Re: 【解決済み】戦闘中の、MP最大値表示方法について
WTRさま:
クレジットへの掲載OKとのこと、ご確認ありがとうございます!
アドバイスいただきdrawCurrentAndMax にたどり着けたとしても別の関数を用意して呼び出す発想も
できる気がしないので、提案いただいたコードをまんま使うならせめて、と思いまして…。
改めて、ありがとうございました。
クレジットへの掲載OKとのこと、ご確認ありがとうございます!
アドバイスいただきdrawCurrentAndMax にたどり着けたとしても別の関数を用意して呼び出す発想も
できる気がしないので、提案いただいたコードをまんま使うならせめて、と思いまして…。
改めて、ありがとうございました。