【解決済】回復ポップアップの同時表示・位置をずらしたい

返信する
RPG作るマン
記事: 16
登録日時: 2021年11月14日(日) 01:42

【解決済】回復ポップアップの同時表示・位置をずらしたい

投稿記事 by RPG作るマン »

こんにちは!

現状のツクールの仕様として、ターン終了時のHP再生、およびMP再生のポップアップについて、
2つの効果が重なった場合にHP再生のポップアップしか表示されなくなるという仕様があるみたいです。
この仕様を、MPのポップアップも表示されるように改変したいと考えております。

既存のプラグインで、海外製のものになりますがSRD_BattlePopupCustomizer.jsやVE Damage Popup.js等、
導入するだけで上記問題を解決できるものがありますが、適用範囲が広く既存プラグインとの競合が発生し、
使用することが出来ませんでした。

そこで、必要最低限の変更のみで上記仕様を改変したいのですが、力を貸していただけないでしょうか。

【実装したい仕様】

① HP再生とMP再生の効果が重なった際に、どちらのポップアップも表示されるようにしたい。

【可能であれば実装したい仕様】

② そのままだと重なった際に数字が見ずらいため、ポップアップの表示される座標をずらして表示したい。
  理想を言えば、処理が重なった場合のみずらして表示されるようにできれば望ましいですが、
  単体表示時のポップアップ座標がずれてしまっても構いません。

③ 可能であれば、TPが上昇した際のポップアップも新たに導入できたらと考えてます。
  コアスクリプト(rpg_sprites.js?)の改変で実装可能な仕様でしたら、合わせて教えていただきたいです。

長々と要望を書いてしまいすみません!
よろしくお願いします。
最後に編集したユーザー RPG作るマン [ 2021年11月16日(火) 06:22 ], 累計 1 回
アバター
Plasma Dark
記事: 736
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: 回復ポップアップの同時表示・位置をずらしたい

投稿記事 by Plasma Dark »

雑に書くならこんな感じのプラグインになると思いますが、お望みの仕様になっているかどうかは怪しい部分があります。
適用範囲が広く既存プラグインとの競合が発生し、使用することが出来ませんでした。
海外製のプラグインは機能を1プラグインに詰め込む傾向にあり、競合しやすいのは確かです。
ただし、どんなに注意しても競合するケースは存在します。
どのプラグインとどのように競合したのかを明記しないと、せっかく誰かが解決策を提示してくれても無駄になりかねません。
コアスクリプト(rpg_sprites.js?)の改変で
コアスクリプトを直接書き換えるという意味であれば、基本的にやってはいけません。
きっちりバージョン管理して自力でメンテナンスしていく覚悟があり、今後、一切誰かの助言を必要としない自信があればその限りではありませんが。
RPG作るマン
記事: 16
登録日時: 2021年11月14日(日) 01:42

Re: 回復ポップアップの同時表示・位置をずらしたい

投稿記事 by RPG作るマン »

Plasma Darkさん

早速返信いただきありがとうございました。
そうですよね。競合したプラグインの情報がないと対応も出来ませんよね。配慮が足りませんでした。
海外系のプラグインを導入した際、競合してしまったのは
トリアンコンタンさんが作成された戦闘行動結果ポップアッププラグイン【BattleEffectPopup.js】でした。
(回避や会心・ステート付与時の表示がバグってしまったり、エラーが発生してしまいした。)

Plasma Darkさんが作成してくださったプラグインを新規プロジェクトに導入させていただきました。
合わせて、BattleEffectPopup.jsのみ導入し、攻撃時に毒ステートを付与する攻撃をしてみたところ、
添付の画像のように本来毒ステートの下部に表示されるダメージが重なって表示されてしまいました。

自分で希望を出しておいて申し訳ないのですが、やはり表示座標を調整しようとすると不具合が発生しやすいと感じました。
また、スキル発動時の得TPによる上昇や、ダメージを受けた際に上昇するTPまで表示してしまうと情報量が多くなり、自分が想定していたより見づらい戦闘画面になってしまいました。
TP上昇時のポップアップを表示するのは、スキルやアイテムの使用効果の項目から設定し、
固定値で上昇させた場合のみとした方が見やすそうです。


  そこで恐縮なのですが、作成してくださったプラグインについて、本来実装したかった①の要望
  【① HP再生とMP再生の効果が重なった際に、どちらのポップアップも表示されるようにしたい。】
  のみ実装できるよう、切り分けていただくことは可能でしょうか。


②の表示座標の調整につきましては、ダメージフォントの画像ファイルの方を編集した方が、
競合も少なく安心できますので、プラグインによる干渉は見送った方が良いかと感じました。
また、③のTP上昇に関するポップアップも、ひとまず見送ろうかと思います。
(使用効果でTPが上昇した時のみポップアップを表示する、ということが出来るのであれば話は別だと思いますが……)

最後に……本プラグインが原因かは分からいのですが、仲間全員のTPを上昇させるアイテムを使用した際、
アイテム使用者のみTP上昇のポップアップが表示されなくなる不具合?があるみたいです。
HPやMPの回復については、アイテム使用者もポップアップが表示されます。

また長々と書いてしまって申し訳ありません!
上記要望はあくまで可能であれば、で構いませんので、何卒宜しくお願いします。
添付ファイル
画像.png
画像.png (131.73 KiB) 閲覧された回数 2066 回
アバター
Plasma Dark
記事: 736
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: 回復ポップアップの同時表示・位置をずらしたい

投稿記事 by Plasma Dark »

利用したプラグインを提示する場合は入手元のURLも付記してあるとより親切になります。
自分で希望を出しておいて申し訳ないのですが、やはり表示座標を調整しようとすると不具合が発生しやすいと感じました。
これも一種の競合ですね。原因は
- BattleEffectPopup.jsのメッセージポップアップがダメージポップアップと同じ仕組みに乗って作られている
- 私が書いたサンプルのY座標調整にメッセージポップアップで追加されたメッセージの分が加算されている
ためです。

位置調整してダメージが元々の高さに来るようにしてみました。
②の表示座標の調整につきましては、ダメージフォントの画像ファイルの方を編集した方が、
競合も少なく安心できますので、プラグインによる干渉は見送った方が良いかと感じました。
ダメージフォントの画像ファイルの規格を変更するということでしょうか。
コアスクリプトは元の画像の規格に沿ったコードになっているので、これで解決するのは相当に骨が折れるのではないかと思います。

コード中の damageOffsetY メソッドで表示する高さを変えているので、ここを適当に、重ならないように調整してあげるのが楽なんじゃないかなと思います。
横方向にずらしたい場合は、同じように damageOffsetX を定義することで実現できます。
最後に……本プラグインが原因かは分からいのですが、仲間全員のTPを上昇させるアイテムを使用した際、
アイテム使用者のみTP上昇のポップアップが表示されなくなる不具合?があるみたいです。
やはり雑に対応しようとするとこういうケースは出てきますね。
TPアップは、実は元々2種類の処理があります。
- 音を再生して回復するもの(アイテムやスキルの使用効果によるもの)
- 音を再生せずに回復するもの(スキル発動や被ダメージによるもの)

後者に楽に対応できる方法がないかと雑にやろうとして、両者が同時に起きた場合に対応できなくなっていたというわけですね。
使用効果による回復量が、アイテムやスキル使用時の得TP設定で上書きされるため表示されないように見えていました。

というわけで、後者に対応しようとしたコードを消しました。
結果的にアイテムやスキルの使用効果によるTP回復のみの表示になったんじゃないかと思います。

https://gist.github.com/elleonard/a47ba ... e49de630f4
RPG作るマン
記事: 16
登録日時: 2021年11月14日(日) 01:42

Re: 回復ポップアップの同時表示・位置をずらしたい

投稿記事 by RPG作るマン »

Plasma Darkさん

返答ありがとうございます。
利用したプラグインを提示する場合は入手元のURLも付記してあるとより親切になります。
そうですよね。回答者の負担が減るように意識したいと思います。
位置調整してダメージが元々の高さに来るようにしてみました。
ありがとうございます。確認してみましたが、既存プラグインとの競合が解消され、
理想の位置にポップアップが表示されるようになりました。
コード中の damageOffsetY メソッドで表示する高さを変えているので、ここを適当に、重ならないように調整してあげるのが楽なんじゃないかなと思います。
横方向にずらしたい場合は、同じように damageOffsetX を定義することで実現できます。
なるほど、コアスクリプトや規格となっている画像はあまり変更しない方がいいんですね。
教えていただいた通り、プラグインの方を書き換える方法で調整しようと思います。
コードを眺めてみて、自力で修正を加えてみたのですが、いかんせんプログラミングの知識が皆無であるため、修正箇所が正しいかどうかの判断が自力で出来ませんでした……。
恐縮ですが、修正すべきポイントが合っているか指摘いただけないでしょうか。

○修正した箇所
●Y軸を調整する場合
39行目および43行目の【‐32】を別の数字に変更。
(話が逸れてしまいますが、Enemy側にのみある【-8】は何を示している数字なのでしょうか?)

●X軸を調整する場合
13行目にindexの記述を追加

コード: 全て選択

sprite.x = this.x + this.damageOffsetX(index);
45行目に以下の記述を追加。

コード: 全て選択

  Sprite_Enemy.prototype.damageOffsetX = function (index) {
    return index * -32 - 8;
  };

  Sprite_Actor.prototype.damageOffsetX = function (index) {
    return index * -32;
  };
(ここでも、【-8】の扱いをどうすればよいか悩みました……)

一応、上記修正で今のところエラー等は発生しておりませんので、恐らく大丈夫ではないかと認識してます。
作成いただいたプラグインのおかげで、当初の目的であった処理が重なった際の表示を調整できるようになりました。
ご対応くださり本当にありがとうございました。


〇以下、蛇足……
ここまで丁寧に説明して下さったにもかかわらず、非常に厚かましいお願いであることは承知の上ですが
追加の要望を1点相談させていただけないでしょうか。
以前の返信にて、スキルでの攻撃時およびダメージを受けた際の自動上昇分のTPについては
表示する必要がないと話しておりましたが、ターン終了時に【TP再生】の効果で上昇するTPのみ、
アイテム使用時と同様に表示されるように修正いただくことは出来ますでしょうか。
音を再生せずに回復するタイプの処理になるかと思いますので、対応が難しいのであれば現行のプラグインで十分です。

参考までにですが、TPのポップアップを表示するシーンのイメージとしましては、
くろうどさんが作成された、KRD_TpPopup.jsが理想に近いです。
https://raw.githubusercontent.com/kurou ... TpPopup.js
(上記プラグインには処理が重なった際の座標を修正する機能はありませんが……)

また長々と返信してしまいました……。
蛇足に書かせていただいた要望については、あくまで対応可能であればで問題ございません。
恐縮ですが、コード修正の件と合わせて教えていただけますとうれしいです。
アバター
Plasma Dark
記事: 736
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: 回復ポップアップの同時表示・位置をずらしたい

投稿記事 by Plasma Dark »

恐縮ですが、修正すべきポイントが合っているか指摘いただけないでしょうか。
概ね合っています。大丈夫です。
少し補足します。
39行目および43行目の【‐32】を別の数字に変更。
index は0から始まり、複数の数値(HP,MP,TPのうち2つ以上)が同時に表示される場合に
その数値が何番目のものであるかを表します。

ですので、 damageOffsetY にある index * -32 は、
同時に複数の数値が表示される場合にその高さを32ずつ上へずらしていく、という意味になります。
Enemy側にのみある【-8】は何を示している数字なのでしょうか?
元々のコードにあった数値で、基準の位置から8だけ上へずらすという意味です。

同時に複数の数値が表示される場合の行間を調整したい場合は -32 の部分を変更し
一番下に表示される数値の高さを調整したい場合は -8 の部分を変更することになります。
X軸を調整する場合
indexは先程の説明の通り、同時に表示する場合の何番目であるかを表すものです。
例えば、HPとMPが同時に表示される場合に、それぞれの横方向の位置を少しずつずらして階段状にしたいという場合は、indexを追加してあげる必要があります。
そうでなく、単純に横方向に一律で移動したい場合は以下のような記述で十分です。

コード: 全て選択

Sprite_Enemy.prototype.damageOffsetX = function () {
  return 0;
};

Sprite_Actor.prototype.damageOffsetX = function () {
  return -32;
};
0や-32をお好みで調整してあげてください。
増やすと右に、減らすと左に移動できます。

余談ですが、実はこの記述は、コアスクリプト rpg_sprites.js の中にあります。
プラグインで処理を上書きして、挙動を変更しているというわけです。
アクターのみ、元々基準の位置より少し左に表示しているため、-32と書かれています。
ターン終了時に【TP再生】の効果で上昇するTPのみ、
アイテム使用時と同様に表示されるように修正いただくことは出来ますでしょうか。
音を再生しないままポップアップするかどうかによって書くコードは変わってきます。
くらうどさんのプラグインでは、TP再生率での回復を、音を再生するタイプの処理に差し替えることでポップアップさせるようにしていますね。

コード: 全て選択

Game_Battler.prototype.regenerateTp = function() {
  const value = Math.floor(100 * this.trg);
  this.gainTp(value);
};
同様の対応をする場合はこれだけ追記すれば済みます。
RPG作るマン
記事: 16
登録日時: 2021年11月14日(日) 01:42

Re: 回復ポップアップの同時表示・位置をずらしたい

投稿記事 by RPG作るマン »

Plasma Darkさん

返答ありがとうございます。

すごく丁寧に解説して下さり感謝いたします。
TP再生率での回復についても、教えていただいたコードを追加したら無事実装することが出来ました。

これで当初目指していたポップアップの仕様を実装できそうです。
本当にありがとうございました。
返信する

“MV:質問”に戻る