【解決済み】能力値自体の改造、メモ機能について。

アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by トリアコンタン » 2017年10月31日(火) 02:04

こんばんは!
デバッグ用のコードが混入していたので、取り除いたバージョンを再度あげました。

https://raw.githubusercontent.com/triacontane/RPGMakerMV/4e4e16bc57ef252376a133b98d466d1b4286802a/DynamicBattlerParam.js

パラメータが正しいのに攻撃の結果が想定通りにいかない場合は、まず通常攻撃の計算式を簡略化(a.atkなど)してお試しください。
それでも解決しない場合は、新規プロジェクトで同様の結果になるかをお試しください。

プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by 風雨がぁ » 2017年10月31日(火) 07:28

ありがとうございます!攻撃力は無事機能いたしました!

しかし、試しに目にはっきり見える特殊能力のHP再生率をやってみたのですが、
動的な動きは確認されませんでした…。
式は先日教えられたものを使用しました。
更にメモの計算式のparamを試しにa.hrgと入力してみましたが変わりませんでした。
新しいプロジェクトでも同じでした。
原因は何か考えられるでしょうか。
メルサイア
記事: 127
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by メルサイア » 2017年10月31日(火) 17:46

風雨がぁ さんが書きました:ありがとうございます!攻撃力は無事機能いたしました!

しかし、試しに目にはっきり見える特殊能力のHP再生率をやってみたのですが、
動的な動きは確認されませんでした…。
式は先日教えられたものを使用しました。
更にメモの計算式のparamを試しにa.hrgと入力してみましたが変わりませんでした。
新しいプロジェクトでも同じでした。
原因は何か考えられるでしょうか。

>風雨がぁさん
こんばんは。メルサイアと申します。
過去の記事を読みました。トライアンドエラー、お疲れ様です。

私もこのプラグインを使って動的に防御力を変えていたのですが、非常に煩雑になってしまって、使用をいったん中止した記憶がありますので、
お気持ちはわかります。

動的なパラメータ変更は目に見えない部分が多く、テストプレイによるデバッグもかなり困難を極めます。
またjavaScriptの知識が浅い状態で進めると、思いがけないケアレスミスで、動かなくなることが多々あります。
よほどの人でないと、各パラメータがいつ更新されるかわからず、エラーの可能性も膨大に膨れ上がりますので、
知識が浅いうちは、あまり無理はなされないほうがいいかと思われます。

ご参考までに、風雨がぁさんがおっしゃられていた、HP再生率の式を作ってみました。
テストプレイして、正常に動くことを確認済みです。
param * (2.0 - a.hpRate()*2.0)
以下の特徴があります。
・残りHPが100%の時、HP再生率は 0倍になる :param * (2.0 - 1.0*2.0) = param * (0)
・残りHPが 75%の時、HP再生率は0.5倍になる:param * (2.0 - 0.75*2.0) = param * (2.0 - 1.5) = param * 0.5
・残りHPが 50%の時、HP再生率は1.0倍になる:param * (2.0 - 0.5*2.0) = param * (2.0 - 1.0) = param * 1
・残りHPが 20%の時、HP再生率は1.6倍になる:param * (2.0 - 0.2*2.0) = param * (2.0 - 0.4) = param * 1.6
・残りHPが  1%の時、HP再生率は約2倍になる:param * (2.0 - 0.01*2.0) = param * (2.0 - 0.02) = param * 1.98

なお、倍数の幅(最大で約何倍になるか)を変えたいだけなら、2.0の数値の部分を変えれば、いけます。
例えば、最大で約1.5倍にしたければ、param * (1.5 - a.hpRate()*1.0)
例えば、最大で約3倍にしたければ、param * (3.0 - a.hpRate()*3.0)
あたりでいけます。
ただ、例えば「残りHPが〇〇%の時の値を1.0倍固定にしたい」とか細かいニーズを満たすとなると、
もう少し複雑な計算式が必要になります。

これでいいのかわかりませんが、特にこだわらないようであれば、こちらをおつかいください。
もしこだわるようであれば、具体的な数値(どんなとき、どんな数値になるのかを、三種ほど)を教えてください。
できることなら、私の方で計算式を出すお手伝いをします。
添付ファイル
a7e59479571d570067c46a7cc51fd5d0.png
風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by 風雨がぁ » 2017年11月01日(水) 11:15

メルサイア さんが書きました:>風雨がぁさん
こんばんは。メルサイアと申します。
過去の記事を読みました。トライアンドエラー、お疲れ様です。

私もこのプラグインを使って動的に防御力を変えていたのですが、非常に煩雑になってしまって、使用をいったん中止した記憶がありますので、
お気持ちはわかります。

動的なパラメータ変更は目に見えない部分が多く、テストプレイによるデバッグもかなり困難を極めます。
またjavaScriptの知識が浅い状態で進めると、思いがけないケアレスミスで、動かなくなることが多々あります。
よほどの人でないと、各パラメータがいつ更新されるかわからず、エラーの可能性も膨大に膨れ上がりますので、
知識が浅いうちは、あまり無理はなされないほうがいいかと思われます。

ご参考までに、風雨がぁさんがおっしゃられていた、HP再生率の式を作ってみました。
テストプレイして、正常に動くことを確認済みです。
param * (2.0 - a.hpRate()*2.0)
以下の特徴があります。
・残りHPが100%の時、HP再生率は 0倍になる :param * (2.0 - 1.0*2.0) = param * (0)
・残りHPが 75%の時、HP再生率は0.5倍になる:param * (2.0 - 0.75*2.0) = param * (2.0 - 1.5) = param * 0.5
・残りHPが 50%の時、HP再生率は1.0倍になる:param * (2.0 - 0.5*2.0) = param * (2.0 - 1.0) = param * 1
・残りHPが 20%の時、HP再生率は1.6倍になる:param * (2.0 - 0.2*2.0) = param * (2.0 - 0.4) = param * 1.6
・残りHPが  1%の時、HP再生率は約2倍になる:param * (2.0 - 0.01*2.0) = param * (2.0 - 0.02) = param * 1.98

なお、倍数の幅(最大で約何倍になるか)を変えたいだけなら、2.0の数値の部分を変えれば、いけます。
例えば、最大で約1.5倍にしたければ、param * (1.5 - a.hpRate()*1.0)
例えば、最大で約3倍にしたければ、param * (3.0 - a.hpRate()*3.0)
あたりでいけます。
ただ、例えば「残りHPが〇〇%の時の値を1.0倍固定にしたい」とか細かいニーズを満たすとなると、
もう少し複雑な計算式が必要になります。

これでいいのかわかりませんが、特にこだわらないようであれば、こちらをおつかいください。
もしこだわるようであれば、具体的な数値(どんなとき、どんな数値になるのかを、三種ほど)を教えてください。
できることなら、私の方で計算式を出すお手伝いをします。


はじめまして、メルサイア様。
式を詳しく載せて頂きありがとうございます。感謝致します。
お手伝い頂けるというのもまた大変感謝致します。
本当は狙われ率を変えようと思っていたのですが
目には見えないのでHP再生率で試してみたのが始めです。
新しく更新して頂いたプラグインはパフォーマンスのため、
パラメータに式を記入をしてからメモ欄を使用しないと
適用不可となっておりますのでパラメータ(バトラー全員)は通常通りにしたいのですが、
メモ欄を使ったバトラーだけを動的にHP再生率を変えようと思っていました。
それを行おうとした結果、メモ欄の内容が適用されないままでした。
メルサイア様のお考えした式でも変わらなかったので、
メモ欄が原因でも無いかと思われます。
メルサイア
記事: 127
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by メルサイア » 2017年11月01日(水) 13:42

>風雨がぁさん
お返事ありがとうございます。
書いていただいた内容で、おっしゃりたいことが少しずつですが分かってきました。
狙われ率ですか。とても難しいところをやりますね。結構なんもんだと思います。

まず、メモ欄を有効にするには、狙われ率のパラメータに「param」と書いてみてください。
paramの意味は、「それ以外はデフォルトの狙われ率を適応する」という意味です。
このプラグインでは、メモ欄だけ有効にする対応は設計上よくない(全体的なスピードが遅くなる。詳細で後述します)ので、
これをかくと、狙われ率のメモ欄が有効になるはずです。

なお、風雨がぁさんは、狙われ率でどのような式を採用したいのですか?
(例: 特定のキャラだけ、HPが低いほど狙われ率は上がる、または下がる、など)
そのあたりを教えてもらえれば、こちらでも実現できるかどうか、試すことができます。

======= (以下、詳細です。わからなければ、読み飛ばしてください)========================

ただ、私の経験上、心配なのは、狙われ率というのは、参照の回数がかなり多いので、戦闘中の遅延が考えられます。
特にターン開始時の、敵が行動を決める際に、候補スキルの数×ターゲット数だけ行う可能性があるので、
下手すると何十回~何百回とアクターの狙われ率を参照する可能性があります。
その際に、短くて数十ミリ~最悪数秒のフリーズは、覚悟しないといけないかもしれません。

このプラグインがなぜ「パラメータを空欄にしたらメモ欄を有効にしないように」更新されたかというと、
そうしないと、すべてのパラメータで遅延が発生する原因になるからです。
メモ欄を認識可能にするには、難しい言葉で言うと構文解析をしないといけないので、毎回、すべてのバトラーのメモ欄を構文解析することになります。そこに余計な処理がかかってしまうわけです。

なお、私は過去、攻撃力と守備力、それからHPとMPにパラメータを入れただけで、
戦闘中の 「攻撃前に5秒ほど、画面がフリーズする」 という現象になりました。それで使用を中止した次第です。
使用する端末やスマホ、ダメージ計算式やステート、敵の参照の仕方にもよりますが、
動的なパラメータ計算は、evalという一回で約数ミリ~数十ミリ秒かかるような処理を頻繁に使うので、かなり重いものだと考えてよさそうです。

敵の行動ルーチンが数種類で、単純であれば、さほど影響はないと思いますが、
敵の数と、アクターの自動戦闘も加えると、掛け算式に影響が増えてしまいます。
試しに簡単な式を入れてみましたが、遅くは感じませんでした。ですが、スマホではわかりません(持ってないため)。
時間があれば、こちらでも少しテストして、どれくらい遅くなるのかをやってみたいと思います。
======================================================================================

なお、特定のアクターなら、このプラグインを使うよりも、
共通の敵グループイベントで、1ターン毎に特定のアクターの状態を調べ、それに応じて狙われ率を変えるステートを付与するほうが、簡単かつ高速かもしれません。
このやり方も聞きたければ、そうおっしゃってください。分からない部分があれば伝えます。
添付ファイル
5eb1226b5bb8c75cc08b61d32754694a.png
風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by 風雨がぁ » 2017年11月02日(木) 07:05

メルサイア様、おはようございます。
参照回数ですか。
以前メルサイア様とトリアコンタン様のTwitterリプ欄から以前拝見した事があります。
パラメータに記入をしなければいけない詳細ついては知りませんでした。
勉強になります。
狙われ率は難しいのですね…
今作っているRPGはバトラーの人数が多い(戦闘は4人ですが)ので
個性のためですが今のところは攻撃、防御などなどの能力の変動するアクターと、
狙われ率の変動をするアクターしかいないのですが、
攻撃・防御・魔法・魔法防御・俊敏性の参照回数は狙われ率と比べどうなのでしょうか。
沢山参照する事になるのでしょうか。

そして最後の文、
なお、特定のアクターなら、このプラグインを使うよりも、
共通の敵グループイベントで、1ターン毎に特定のアクターの状態を調べ、それに応じて狙われ率を変えるステートを付与するほうが、簡単かつ高速かもしれません。
このやり方も聞きたければ、そうおっしゃってください。分からない部分があれば伝えます。

そんな事ができるのは知りませんでした。
是非教えて欲しいのですが、今頃のようですが目的の狙われ率の動的な変化についてお伝えします。
とても単純にHPが減るほど狙われ率がUPしたりまた逆のパターンもあります。
もしかすると解決するかもしれないので、やり方の方をご教授願いたいです。
よろしくお願いします。
メルサイア
記事: 127
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by メルサイア » 2017年11月02日(木) 09:33

風雨がぁ さんが書きました:今作っているRPGはバトラーの人数が多い(戦闘は4人ですが)ので
個性のためですが今のところは攻撃、防御などなどの能力の変動するアクターと、
狙われ率の変動をするアクターしかいないのですが、
攻撃・防御・魔法・魔法防御・俊敏性の参照回数は狙われ率と比べどうなのでしょうか。
沢山参照する事になるのでしょうか。

狙われ率と同じくらいか、もしくはそれ以上に、とてもたくさん参照します。

簡単に説明すると、ダメージ計算式にa.atkなどの言葉が入っていると都度に1回、です。
ステートの付与・解除により各種能力を変動している場合は、更にその都度参照されるようなので、ご注意ください。
やりすぎると、どれくらいの重さになるかは、風雨がぁさんが見られたと思われる、このツイートのON時の動画を見るとわかりやすいと思います(1回呼び出し毎に標準出力なるものをしているので、実際はもう少し早いかもですが、PCの性能によります)。
https://twitter.com/merusaia/status/891842788752412672

正直に言って、このプラグインは全アクター・敵に適応することに向いているプラグインで
キャラに個性を付けるために、特定のアクターだけに動的にパラメータ変動させたいのであれば、
このプラグインよりも、今から説明する敵グループイベントでやったほうが、良いように私は思います。

共通の敵グループイベントを使う方法は、色々ありますが、
風雨がぁ さんが書きました:とても単純にHPが減るほど狙われ率がUPしたりまた逆のパターンもあります。

今回は「主人公のHPが50%以下になると、狙われ率を半分にする 慈悲ステート を付与する」
をやってみたいと思います。

1. プラグイン「YEP_BaseTroopEvents_reverse.js」を以下のURLからダウンロードして、ONにする
viewtopic.php?f=5&t=2480
2. パラメータ「Base Troop ID」を1にする。1をすでに使っている場合は、他の空いている番号でいいです。
https://gyazo.com/5258094897c555e5af75f72ed0cf030f
3. 2.で設定した番号の敵グループイベントの好きなページに、条件「ターン終了、ターン1*X」、スパン「ターン」
にして、以下のような処理を書く(手順をGIF動画にしています。これでわからないようなら、聞いてください)
https://twitter.com/merusaia/status/925878488652845056
もしスクリプトを使う場合は、以下を参照してください。
viewtopic.php?t=223

3.の部分は、テストプレイをして、正常に動くことを確認済みです。

なお、狙われ率を半分にするというのは、テストプレイが難しいので、
私は別のステート「守護モード(他のキャラが身代わりする)」というのを入れてみました。
・主人公のHPが30%以下になると、特定の仲間の狙われ率が2倍に
・さらに、HPが25%以下になると、かばってくれるという仕様
(ちなみに、必中攻撃や、攻撃による敵の反撃だけはかばえません。これをやっちゃうと、回復魔法ですら代わりに受けちゃうので…)
ちょっと仲間がかわいそうな気がしますが……実装していて、結構楽しかったです。
もしよろしかったら、こちらも合わせてお使いください。

でもこの身代わりフラグ、アクターの特徴にそのまま身代わりを入れても、同じような効果になるんですよね…。
どうせなら、オリジナリティを出して、
・主人公のHPが10%以下になると、解除 (「自分の身は自分で守れ」のツンデレバージョン)
・主人公のHPがいくら低くとも、かばう自分のHPが10%以下なら、かばわない (「自己犠牲してまで守らないよ」の自己防衛バージョン)
とかを入れてもいいかもしれません。
なお
・特定のキャラだけをかばう (主人公はかばうが、他のキャラは瀕死でもかばわない)
みたいなことは、デフォルトの身代わりではできませんので、ご了承ください。
そういうプラグインも見かけたことないです……。

風雨がぁさんのご要望は狙われ率だったので、身代わり(死ぬまで100%狙われる)まではいきすぎかもしれません。
狙われ率だけを調整したい場合は、ステートの内容をうまく変更してみてください。
テストプレイを繰り返せば、きっと自分に合ったものが見つかると思います。
風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by 風雨がぁ » 2017年11月02日(木) 10:40

メルサイア さんが書きました:狙われ率と同じくらいか、もしくはそれ以上に、とてもたくさん参照します。

簡単に説明すると、ダメージ計算式にa.atkなどの言葉が入っていると都度に1回、です。
ステートの付与・解除により各種能力を変動している場合は、更にその都度参照されるようなので、ご注意ください。
やりすぎると、どれくらいの重さになるかは、風雨がぁさんが見られたと思われる、このツイートのON時の動画を見るとわかりやすいと思います(1回呼び出し毎に標準出力なるものをしているので、実際はもう少し早いかもですが、PCの性能によります)。
https://twitter.com/merusaia/status/891842788752412672

正直に言って、このプラグインは全アクター・敵に適応することに向いているプラグインで
キャラに個性を付けるために、特定のアクターだけに動的にパラメータ変動させたいのであれば、
このプラグインよりも、今から説明する敵グループイベントでやったほうが、良いように私は思います。

共通の敵グループイベントを使う方法は、色々ありますが、

今回は「主人公のHPが50%以下になると、狙われ率を半分にする 慈悲ステート を付与する」
をやってみたいと思います。

1. プラグイン「YEP_BaseTroopEvents_reverse.js」を以下のURLからダウンロードして、ONにする
viewtopic.php?f=5&t=2480
2. パラメータ「Base Troop ID」を1にする。1をすでに使っている場合は、他の空いている番号でいいです。
https://gyazo.com/5258094897c555e5af75f72ed0cf030f
3. 2.で設定した番号の敵グループイベントの好きなページに、条件「ターン終了、ターン1*X」、スパン「ターン」
にして、以下のような処理を書く(手順をGIF動画にしています。これでわからないようなら、聞いてください)
https://twitter.com/merusaia/status/925878488652845056
もしスクリプトを使う場合は、以下を参照してください。
viewtopic.php?t=223

3.の部分は、テストプレイをして、正常に動くことを確認済みです。


ありがとうございます。
無事ステートをかける形で出来ました。
変数操作の新しい使い道が導き出せてとても嬉しい限りです。
と、今頃ですが確かにバトラー動的パラメータプラグイン、
自分の方でも戦闘前数秒ロスが入ったりしてますね…気がつきませんでした…。
恐縮ながらもう一つお願いがあるのですが、
メルサイア様のプラグインを使う方法で、攻撃力などを動的に変動させる場合、
どのような方法があるかご存知でしょうか?
変数などの計算などでできそうな気もしますが、
変動した後の計算や、戦闘終了後などを考えたら…
もしくはできないのでしょうか。
やはり動的に変動するのは魅力がある気がしましたので、質問させていただきます。
メルサイア
記事: 127
登録日時: 2016年2月22日(月) 10:35
お住まい: 大阪府
連絡を取る:

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by メルサイア » 2017年11月02日(木) 11:04

できたのですね。おめでとうございます!

攻撃力の動的な変動ですが、それもステートを使えば簡単に実装できます。
例えば、先ほど作った守護者モードというステートですが、いろいろテストプレイを経て、私はこのように実装しました。
https://gyazo.com/e81a0d9f3f614bbc55b71106f5a55980
・狙われ率と身代わり以外にも、攻撃力、魔法力、防御力、魔法防御力、回避率、反撃率を変動させています。
・解除条件に、「戦闘終了時に解除」を入れないと、戦闘終了後も継続するので、気を付けてください。
・死ぬまで何回でも身代わりをすると面白くないので、「ダメージを受けた時64%」で解除にしてあります

このステートは複数の能力を変動させていますが、単体ステートを使う場合、
狙われ率を上げる 慈悲 ステートとは別に、攻撃力をあげる 躍動 ステートなどを付与するだけです。

他にも例を出すと、HPの割合が一定以上になると解除されるのではなく、数ターン継続にしたければ、
敵グループイベント1のステート解除の部分を外して、
こんな感じで解除条件を「ターン終了時」にすれば、いい感じかもしれません。
https://gyazo.com/6e091ab1d7ac944e69c05427b8757a8b

もしこれでも、わかりにくいようならおっしゃってください。動画にします。

なお、プラグイン「YEP_BaseTrooloopEvents_revers.js」は、元々はYanflyさんのプラグインです。
私の編集した部分の著作権は放棄していますので、著作権表示には「Yanfly Engine Plugins」とだけ入れておいてくださいね。
風雨がぁ
記事: 123
登録日時: 2017年9月24日(日) 10:18

Re: 【解決済み】能力値自体の改造、メモ機能について。

投稿記事by 風雨がぁ » 2017年11月02日(木) 12:13

メルサイア さんが書きました:できたのですね。おめでとうございます!

攻撃力の動的な変動ですが、それもステートを使えば簡単に実装できます。
例えば、先ほど作った守護者モードというステートですが、いろいろテストプレイを経て、私はこのように実装しました。
https://gyazo.com/e81a0d9f3f614bbc55b71106f5a55980
・狙われ率と身代わり以外にも、攻撃力、魔法力、防御力、魔法防御力、回避率、反撃率を変動させています。
・解除条件に、「戦闘終了時に解除」を入れないと、戦闘終了後も継続するので、気を付けてください。
・死ぬまで何回でも身代わりをすると面白くないので、「ダメージを受けた時64%」で解除にしてあります

このステートは複数の能力を変動させていますが、単体ステートを使う場合、
狙われ率を上げる 慈悲 ステートとは別に、攻撃力をあげる 躍動 ステートなどを付与するだけです。

他にも例を出すと、HPの割合が一定以上になると解除されるのではなく、数ターン継続にしたければ、
敵グループイベント1のステート解除の部分を外して、
こんな感じで解除条件を「ターン終了時」にすれば、いい感じかもしれません。
https://gyazo.com/6e091ab1d7ac944e69c05427b8757a8b

もしこれでも、わかりにくいようならおっしゃってください。動画にします。

なお、プラグイン「YEP_BaseTrooloopEvents_revers.js」は、元々はYanflyさんのプラグインです。
私の編集した部分の著作権は放棄していますので、著作権表示には「Yanfly Engine Plugins」とだけ入れておいてくださいね。


ありがとうございます。ここまで詳しく書いて頂き感謝致します。
攻撃力の変動をパラメータ自体にしたかったので、
考えていたものとは違いましたが他に方法を考えます。
ちなみにターン終了した時にバトルイベントを作動する事は可能でしょうか?
(経験値を貰ったなどの表示をする前に)
あとこれは知らないだけですが、
バトルイベントの条件のターン設定の 0+1X のあるターンの意味が理解できておりません。
説明をよろしければしていただけないでしょうか。

“MV:質問” へ戻る