ページ 11

攻撃力などのパラメータを「絶対値」で上昇させるプラグイン

Posted: 2016年12月08日(木) 21:30
by メルサイア
ツイッターなどで探しても見つからなかったため、ツクマテに投稿いたします。
もし既出でしたら、教えていただけると幸いです。

どなたか、攻撃力などのパラメータを「絶対値」で増減させるプラグイン
をご存じないですか?
できればメモ欄でできるとありがたいです。

■問題
ツクールデフォルトの%で指定する方法だと、元々攻撃力が弱いキャラはさほど強くなりません。
能力強化ステートをかけても、強キャラとの差が更に開いてしまいます…
(これだと効率重視の人は、弱キャラを愛せなくなります)

■詳細 (能力「%上昇」だと何が困るか)
例えば、攻撃力20の弱キャラと、攻撃力100の強キャラが居た場合、
    「攻撃力200%」のステートを付与すると、弱キャラは攻撃力40、強キャラは攻撃力200となり、
    差が、付与前:100-20=80から、付与後:200-40=160と、更に攻撃力に差が開いてしまいます。

%強化しか出来ないRPGではよくある話ですが、このような大味な戦闘バランスだと
「攻撃力が強いキャラだけを%上昇させて、物理で殴れば良い」という認識がユーザに付いてしまい、
「能力が弱いキャラは使えない」となってしまい、弱いキャラを愛さなくなります。

■解決策
家庭用RPGツクール2の頃のように、例えば「攻撃力を100増加」するステートやスキルが作れれば、
攻撃力の差を埋めて、ユーザが弱キャラを愛しやすくなります。
(それでも差が開く場合は、ダメージ計算式の最終値に0.8~0.9などをべき乗すると、いい感じになるかもです)

■その他
自分では、トリアコンタンさんの動的データベースプラグインを使った(能力を変数値で変動させる)方法や、
装備の強制付けはずしする方法を考えましたが、コモンイベントが非常にややこしくなるので、挫折しました…。

どなたか、ご協力いただけると助かります。
よろしくお願いいたします。

Re: 攻撃力などのパラメータを「絶対値」で上昇させるプラグイン

Posted: 2016年12月08日(木) 21:30
by メルサイア
■想定しているプラグインの例
仕様を書き出してみましたが、いろんな実装方法が考えられるため、かなり迷いました。。。
難しく考えすぎかも……。
あくまで一例ですので、これに限らず、どんなものでも構いません。

(共通の仕様): 「アクターや敵キャラの能力を、絶対値で上昇させる」 という目的を達成できれば、なんでもいいです。
・メモ欄に「<hoge攻撃力ほげほげ…」などと、記述できると助かります。
  → ※hogeは他のプラグインとの競合を避けるための、そのプラグインの識別子(英字3文字など)です。
    ※ほげほげ…はなんでもOKです。

  → 攻撃力、防御力、魔法力、魔法防御力、素早さ、運の6種パラメータに対応していただけると、うれしいです。
    最大HP、最大MPはどちらでも構いません。厳しいようなら除外してください。

  → 「○○の攻撃力が10上がった!」などメッセージは、無くても構いません。
    無くとも、ステートにアイコンを付ければわかりますし、スキルも説明文でわかるようにすれば問題ないです。

  → %ステートと同時に付与された場合、「(基本値 + 絶対値)×%」でお願いします。 でないと弱いキャラは弱いままです。
    プラグインのパラメータをON/OFFすることで、「(基本値×%)+絶対値」の優先順にする機能があってもいいです。

実装が簡単そうなものから、3案あげます。

(A案)ステート付与方式
・ステートのメモ欄に「<hoge攻撃力UP:100>」と書くと、対象バトラーの攻撃力が、そのステート継続中、+100される。
  → 重ねがけは不可     (違うステートIDとの重ねがけはOK。あくまでステートの仕様そのまま)
  → DOWNは実装しなくてもよい (攻撃力1%である程度は代用可。攻撃力0以下の例外処理がめんどくさそうなので割愛)

(B案)スキル付与方式
・スキルのメモ欄に「<hoge攻撃力UP:100>」と書くと、対象バトラーの攻撃力が、戦闘終了後まで、+100される。
  → スキルとして実装するので、100%発動になります。 (ツクール2方式)
  → 重ねがけ可                  (ステートを使わないため)
  → DOWNは実装しなくてもよい

(C案)カスタマイズ方式: プラグイン使用者にがんばってもらって、A案とB案を両方満たす方法?
・ステートのメモ欄に「<hoge攻撃力:\V[n]>」と書くと、対象となるバトラーの攻撃力が、そのステート継続中、変数値に上書き。
  → ツクラーが、スキル発動時に任意のコモンイベントを呼び出し、その中で変数 \V[n] を触ることで、好きな数値に代入
  → 重ねがけ可能   ( \V[n] の工夫次第でなんとかなる。でも、他の%上昇ステートとの競合が大変そう…)
  → DOWNも可能    (コモンイベントの工夫次第。例: 条件分岐:攻撃力<0 なら 攻撃力=1 とすればよい)

個人的には、A案のステート付与方式が、一番簡単そうで、使いやすいと思います。
なお、デフォルトでも、以下のことは出来ます。 他の実装方法を考える際の、参考になれば幸いです。
  ・敵キャラだけなら、B案は行動パターン 「特定ステートのとき、違う行動を取る」 の工夫次第で、
   半永久的に能力を%上昇させるスキルで、擬似的には作れそうです。
  ・アクターの絶対値による増減は、強化用の空欄装備スロットを空けて、強制装備などで擬似的に作れそうです。
   ただ、コモンイベントを使う以外で、重ねがけ可能なスキルを作るのは、厳しそうです…。

その他、これらにとらわれない発想で、いい方法があれば、それでOKです。

Re: 攻撃力などのパラメータを「絶対値」で上昇させるプラグイン

Posted: 2016年12月09日(金) 01:17
by まっつUP
メルサイア様
お世話になります。
プラグインを作成いたしましたのでお試しください。

このプラグインを利用する場合は
readmeなどに「まっつUP」の名を入れてください。
また、素材のみの販売はダメです。
上記以外の規約等はございません。
もちろんツクールMVで使用する前提です。
何か不具合ありましたら気軽にどうぞ。

Re: 攻撃力などのパラメータを「絶対値」で上昇させるプラグイン

Posted: 2016年12月11日(日) 08:05
by メルサイア
まっUP様

ありがとうございます!
ウォッチリスト追加を忘れてしまっており、気づくのが遅くなり、申し訳ありません。

ソースを拝見しました。 …こ、こんなに簡単にできるものなのですか?!
驚きました。
ありがたく使わせていただきます。

ただ、this.paramPlus2の追加順序を調べてみると、
「基本値×乗算値%+絶対値paramPlus2」と、さきに掛け算の方が優先になっていて、想定と違っていました。
また、私のゲームではプラグインが競合が発生して使えなくなってしまっています。

これ以上お手をわずらわせるのは恐縮なので、
もしよろしければ、こちら側で自分のゲームで想定通りに動くように、ソースを変更したいと思うのですが、
かまいませんでしょうか?

もちろん、著作表示はそのままにして、改変者として私の名前を添える形とし、
改変後のソースもここに公開いたします。

Re: 攻撃力などのパラメータを「絶対値」で上昇させるプラグイン

Posted: 2016年12月11日(日) 11:46
by まっつUP
メルサイア様
お世話になります。

プラグインの内容の内、コードの改変についてはご自由にしていただいて構いません。

「まっつUP」の名はreadmeに、分かるように書いていただければ大丈夫です。

あと、そのコードは改変前のコードに見えますが。
まあ競合するのは他にGame_BattlerBase.prototype.paramが
書き換えられているプラグインがある場合でしょう。

Re: 攻撃力などのパラメータを「絶対値」で上昇させるプラグイン

Posted: 2016年12月11日(日) 22:14
by メルサイア
まっつUP様

改変の承諾をいただき、ありがとうございます。

すみません、前の投稿の画像は、改変前のものです。
私はスクリプトはかなり苦手な方なので、少しの改変にも、少々お時間がかかってしまうと思います。
プラグインを多用しているため、Game_BattlerBase.prototype.paramが使用されているプラグインが複数あったので、
追加定義して、値だけ上書きするなど、ちょっとやり方を考えます。

以下が改変中のソースの画像です。まだ作成途中ですので、もう少しお待ち下さい。
b13c48e347e53f0ada326e14a77d85fe.png
少し整理してから、また後日、改変後のソースをお送りしたいと思います。

なお、「まっつUP」の名はreadmeに記載させていただきます。

Re: 攻撃力などのパラメータを「絶対値」で上昇させるプラグイン

Posted: 2017年10月27日(金) 19:26
by メルサイア
まっつUP様
ご無沙汰しております。
いつもプラグインではお世話になっています。

とても遅いレスで、申し訳ございません。
改変したものをアップするのを忘れてしまっていました。
ここにファイルを添付しますので、よろしければご確認ください。

ヘルプの改編部分は、以下です。

コード: 全て選択

 * まっつUPさんのプラグインをmerusaiaが改変しています。
 * ・Game_BattlerBase.prototype.param上書きを追加定義に変更
 * ・機能説明やデバッグ方法のコメント
 *
 * 【概要】
 * このプラグインは、攻撃力などのパラメータを「絶対値」で増減させるプラグインです。
 * ステートによる変化では1%~1000%の倍率でしか変化をさせられませんが、
 * このプラグインをステートのメモ欄にかくことで、
 * 装備のように「攻撃力を+100するステート」などがつくれます。
 *
 * 【使い方】
 * メモ欄に、以下のようにタグを書いてください。(「//」以降はコメントです)
 *
 * 例0: 「最大HPを+100する」ステートを作りたい場合
 * <BS0:100> // BordSkin_edit.jsがON時、最大HP(ID=0)を絶対値増減。最小値は1。
 *
 * 例1: 「最大MPを-100する」ステートを作りたい場合
 * <BS1:-100> // BordSkin_edit.jsがON時、最大MP(ID=1)を絶対値増減。最小値は0。
 *
 * 例2: 「攻撃力を+100する」ステートを作りたい場合
 * <BS2:100> // BordSkin_edit.jsがON時、攻撃力(ID=2)を絶対値増減。最小値は1。
 *
 * 例3: 「防御力を-100する」ステートを作りたい場合
 * <BS3:-100> // BordSkin_edit.jsがON時、防御力(ID=3)を絶対値増減。最小値は1。
 *
 * 例4: 「魔法力を100する」ステートを作りたい場合
 * <BS4:100> // BordSkin_edit.jsがON時、魔法力(ID=4)を絶対値増減。最小値は1。
 *
 * 例5: 「魔法防御力を-100する」ステートを作りたい場合
 * <BS5:-100> // BordSkin_edit.jsがON時、魔法防御力(ID=5)を絶対値増減。最小値は1。
 *
 * 例6: 「敏捷性を100する」ステートを作りたい場合
 * <BS6:100> // BordSkin_edit.jsがON時、敏捷性(ID=6)を絶対値増減。最小値は1。
 *
 * 例7: 「運を+999する」ステートを作りたい場合
 * <BS7:999> // BordSkin_edit.jsがON時、運(ID=7)を絶対値増減。最小値は1。
 *
 *【ステート重ね掛けプラグインとの併用について】
 * 剣崎宗二さんが作成されたMultiStackState.jsプラグインと併用すると、
 * 同じステートの効果を指定した回数だけ重ね掛け可能なステートがつくれます。
 * つまり、一つのステートで「攻撃力+100を5回重ね掛けする」などという、ツクール1や2の頃にあった重ね掛けパワーアップスキルがつくれます。
 * 「剣崎宗二 ステートを重複可能に」でネット検索すると、出てきます。ぜひお試しください。
 */
 

スクリプト部分は、以下の部分です。

コード: 全て選択

var _Game_BattlerBase_param = Game_BattlerBase.prototype.param; // 追加定義に変更
    Game_BattlerBase.prototype.param = function(paramId) {
      var baseValue = _Game_BattlerBase_param.apply(this, arguments);// まず、元メソッドの内容を呼び出し、返り値にその内容を格納

      // 以下、追加定義部分
      // 次に、絶対値を足したものを計算して、それに置き換える
      var value = this.paramBase(paramId) + this.paramPlus(paramId);
      value += this.paramPlus2(paramId); // 絶対値増加。
      value *= this.paramRate(paramId) * this.paramBuffRate(paramId);
      var maxValue = this.paramMax(paramId);
      var minValue = this.paramMin(paramId);
      var value_addedPlus2 = Math.round(value.clamp(minValue, maxValue));
      // デバッグ用。元メソッドの内容と、その値が違えば、念のため、警告を出しておく。
      //if(baseValue !== value_addedPlus2){
      //  console.log('メモ<BS【パラID番号】,'+Math.floor(this.paramPlus2(paramId))
      //  +'>により、能力に絶対値が足されました。: 加算前'+Math.floor(baseValue)+' → 加算後:'+Math.floor(value_addedPlus2));
      //}

      return value_addedPlus2;
    };

追記: 【使い方】の「1以下にはなりません」などの記述が間違っておりました。「最小値は1」などに修正しました。

なお、私の改編部分の著作表示は必要ありません。
プラグインを使用する場合は、readmeなどに「まっつUP」様の表記だけ、お願いします。