【解決済み】戦闘中にコモンイベント内で受けたダメージをポップアップ表示したい

aone_umi
記事: 3
登録日時: 2020年5月21日(木) 00:53

【解決済み】戦闘中にコモンイベント内で受けたダメージをポップアップ表示したい

投稿記事by aone_umi » 2020年5月21日(木) 19:56

お世話になっております。
ツクール自体はそこそこ触っていますが、
Javascriptは既存プラグインに簡単な改造をする程度の知識しかありません。

戦闘中のダメージポップアップについて質問です。
成功確率や使用時のイベントなどを変数によって分岐させるため、
ほぼ全てのスキルの処理をコモンイベントで行っています。

その際、コモンイベント内でアクターが受けたダメージを
通常通りポップアップで表示したいのですが、やり方が分かりません。

こちらの記事(https://tm.lucky-duet.com/viewtopic.php?t=1404
に敵側に与えたダメージを表示させる方法が載っていましたが、
アクター側にダメージを表示させる場合は、どのようなスクリプトを書けばよいのでしょうか。

----------5/22追記----------

上の内容に追加して、コモンイベント内で回復、減少したMPの数値もポップアップで表示したいです。
その方法もご教示いただけると助かります。
最後に編集したユーザー aone_umi on 2020年9月30日(水) 12:07 [ 編集 1 回目 ]

奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: 戦闘中にコモンイベント内で受けたダメージをポップアップ表示したい

投稿記事by 奏ねこま » 2020年9月30日(水) 01:20

アクターにダメージポップアップを出したいということは、サイドビューバトルと思って良いでしょうか?

アクター1番にダメージポップアップを出すなら以下のスクリプトになります。

HPを10減らしてHPダメージポップアップ

コード: 全て選択

var actor = $gameActors.actor(1);
actor.gainHp(-10);
actor.startDamagePopup();

MPを10減らしてMPダメージポップアップ

コード: 全て選択

var actor = $gameActors.actor(1);
actor.gainMp(-10);
actor.startDamagePopup();


gainHp、gainMpは実際にHPやMPを増減させるスクリプトですので、
減らすのは別の手段で行っておりダメージポップアップだけ出したいという場合は以下になります。

10という数字でHPダメージポップアップ

コード: 全て選択

var actor = $gameActors.actor(1);
actor._result.hpDamage = 10;
actor._result.hpAffected = true;
actor.startDamagePopup();

10という数字でMPダメージポップアップ

コード: 全て選択

var actor = $gameActors.actor(1);
actor._result.mpDamage = 10;
actor.startDamagePopup();


なお、gainHp、gainMpは正の値を指定すれば回復になります。
hpDamage、mpDamageは負の値を設定すれば回復になります。
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: 戦闘中にコモンイベント内で受けたダメージをポップアップ表示したい

投稿記事by 奏ねこま » 2020年9月30日(水) 02:15

もしサイドビューバトルではなくサイドビューアクターがいない場合、
無理やりですが以下のようなスクリプトでできなくはないです。
ここまでくるともはやプラグインにしたほうが良い気もしますが・・・

コード: 全て選択

var battler = new Game_Battler();
battler.gainHp(-10);
battler.startDamagePopup();
var damage = new Sprite_Damage();
damage.x = 400; damage.y = 300;
damage.update = function(){
  Sprite_Damage.prototype.update.call(this);
  if (!this.isPlaying()) this.parent.removeChild(this);
};
damage.setup(battler);
SceneManager._scene._spriteset.addChild(damage);

このスクリプトの場合はアクターに影響しないので、
gainHpやgainMpを使ってもアクターのHPやMPが変動することはありません。
ポップアップの表示位置はdamage.x、damage.yで設定してください。
aone_umi
記事: 3
登録日時: 2020年5月21日(木) 00:53

Re: 戦闘中にコモンイベント内で受けたダメージをポップアップ表示したい

投稿記事by aone_umi » 2020年9月30日(水) 02:46

ご回答ありがとうございます!

戦闘はフロントビュー形式で作成していました。
教えていただいたスクリプトでテストプレイをしてみたのですが、
以下のようなエラーが出てしまいます。

TypeError: this._damagePopup.push is not a function
at Game_Battler.startDamagePopup (YEP_BattleEngineCore.js:4994)
at eval (eval at Game_Interpreter.command355 (ValueChecker.js:205), <anonymous>:3:9)
at Game_Interpreter.command355 (ValueChecker.js:205)
at Game_Interpreter.executeCommand (ValueChecker.js:140)
at Game_Interpreter.update (rpg_objects.js:8838)
at Game_Troop.updateInterpreter (rpg_objects.js:5226)
at Function.BattleManager.updateEventMain (rpg_managers.js:2281)
at Function.BattleManager.updateEvent (YEP_BattleEngineCore.js:3155)
at Function.BattleManager.update (YEP_BattleEngineCore.js:3113)
at Scene_Battle.updateBattleProcess (rpg_scenes.js:2265)


YEP_BattleEngineCoreと競合している、という認識でいいのでしょうか?

――――――――――――――――――――
戦闘画面は画面左端に敵キャラ、右側にアクター(1人のみ)の立ち絵をTRP_skitプラグインを使用して表示しています。
強引な方法ですが、サイドビュー形式に変更し、アクターのSV画像を透明にして
最初に教えていただいたサイドビュー用のスクリプトを使用すると、意図した表現ができました。

ただこの場合でも2点ほど問題があります。

①初回戦闘の最初のダメージが表示されない
②ダメージポップアップの位置を移動したいが、やり方が分からない。

①について
テストプレイを行った際、初回の戦闘の最初の1回のダメージのみ表示されません。
2回目以降のダメージは問題なく表示されます。

②について
ダメージの表示位置をもう少し下に下げたいので、以下のコードをプラグインとして読み込ませました。

コード: 全て選択

Sprite_actor.prototype.damageOffsetY = function() {
    return -300;
};


ですが、ダメージポップアップの位置は変わりませんでした。
どうすれば位置が変わるのか全く分からない状態です。

――――――――――――――――――――

以上が現在の状態です。

・フロントビューでスクリプトが動作する
・サイドビューでダメージポップアップの位置を変更できる

上記二つの内、どちらか一方でも解決すれば戦闘は組めそうです。

お手数をおかけいたしますが、ご教示いただけますと幸いです。
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: 戦闘中にコモンイベント内で受けたダメージをポップアップ表示したい

投稿記事by 奏ねこま » 2020年9月30日(水) 03:10

Q. YEP_BattleEngineCore.jsとの競合?

YEPシリーズは改変範囲が大きすぎて競合対策をやり始めるとキリがありませんが・・・
battler.startDamagePopup(); の前に battler.clearDamagePopup(); を入れてみてください。
それでダメならちょっとわかりません・・・

Q. サイドビューにしてみたが・・・

①の件
こちらではそんなことはないので原因がわかりませんが、もし画像が読み込めてないのであれば
戦闘開始前か開始直後に ImageManager.loadSystem('Damage'); を入れたらうまくいくかもしれません。

②の件
× Sprite_actor
○ Sprite_Actor
ではないでしょうか?
aone_umi
記事: 3
登録日時: 2020年5月21日(木) 00:53

Re: 戦闘中にコモンイベント内で受けたダメージをポップアップ表示したい

投稿記事by aone_umi » 2020年9月30日(水) 12:07

ご回答ありがとうございます!

①フロントビューの競合について

教えていただいた対策をしてみましたが改善しませんでした。
こちらを解決するのはかなり時間が掛かりそうなため、
サイドビュー形式で進めたいと思います。


②サイドビューに関して

ImageManager.loadSystem('Damage');を入れることで無事1回目から表示されました!

コードもactor→Actorへ修正したところ、
意図した動きができました!


どうすればダメージポップアップを出せるのかずっと悩んでいたので、
これで大きく制作が進みそうです!
この度は誠にありがとうございました!

“MV:質問” へ戻る