【解決済み】運が高いほど分散度がよい方向に働くように処理する方法

Dante
記事: 12
登録日時: 2022年2月16日(水) 00:44

【解決済み】運が高いほど分散度がよい方向に働くように処理する方法

投稿記事by Dante » 2022年3月13日(日) 21:26

いつもお世話になっております。

表題について、例えば分散度が20%の攻撃スキルについて使用者の運を参照し
運が0~100の時:ダメージは80%~120%
運が100~200の時:ダメージは90%~120%
運が200~300の時:ダメージは100%~120%
運が300~400の時:ダメージは110%~120%
運が401以上の時:ダメージは120%
となるように処理をしたいと考えております。
何かよい手段や計算方法等がありましたら教えて頂きたいです。
よろしくお願いいたします。
最後に編集したユーザー Dante on 2022年3月14日(月) 21:40 [ 編集 1 回目 ]

アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: 運が高いほど分散度がよい方向に働くように処理する方法

投稿記事by ムノクラ » 2022年3月14日(月) 12:37

Dante さんが書きました:いつもお世話になっております。

表題について、例えば分散度が20%の攻撃スキルについて使用者の運を参照し
運が0~100の時:ダメージは80%~120%
運が100~200の時:ダメージは90%~120%
運が200~300の時:ダメージは100%~120%
運が300~400の時:ダメージは110%~120%
運が401以上の時:ダメージは120%
となるように処理をしたいと考えております。
何かよい手段や計算方法等がありましたら教えて頂きたいです。
よろしくお願いいたします。


スキルの分散度の仕様を変更するのはプラグイン必須になると思います。

そこで、ダメージ計算式の中に分散度を含めてしまうのが、手っ取り早いと考えます。
ダメージ計算式で、行動者の運は a.luk で取得されます。

参考
https://tkool.jp/mv/guide/004_006d.html

Dante氏が求めているであろう、運でダメージが変動する分散度を算出する式は下記になります。

コード: 全て選択

Math.floor(Math.random() * (121 - Math.floor(Math.min(499, a.luk) / 100) * 10 - 80)) + Math.floor(Math.min(499, a.luk) / 100) * 10 + 80


この式に、本来のダメージ計算式を乗算すれば、分散値として働きます。

例:デフォルトのスキル「攻撃」

  

コード: 全て選択

a.atk * 4 - b.def * 2

  分散度:20%

変更後
  

コード: 全て選択

(a.atk * 4 - b.def * 2) * (Math.floor(Math.random() * (121 - Math.floor(Math.min(499, a.luk) / 100) * 10 - 80)) + Math.floor(Math.min(499, a.luk) / 100) * 10 + 80) / 100

  分散度:0%


一応、ここに至るまでの過程を整理します。

100や200の値が重複しているので、100上がる毎に分散値の最低値が上がると判断しました。
(3桁目の数字だけで判別できるシンプル化にもなります)
条件を表に整理すると下記になると思います。

運最低値  運最高値  分散最低値 分散最高値
   0     99      80     120
  100     199      90     120
  200     299      100     120
  300     399      110     120
  400     499      120     120
  500     ---      120     120
※RPGツクールMVで運の最低値は1ですが、便宜上

つまり、
・分散最低値は運の3桁目が上がる毎に10上がる。
・運の影響は500未満まで。
・最高値は120で固定。
という条件になります。

最低分散度の値は下記で算出できます。

コード: 全て選択

Math.floor(Math.min(499, a.luk) / 100) * 10 + 80


Math.floor は端数切捨て
Math.min は()内の数値の小さい方を使用
する関数です。


あとは、乱数の発生方法「Math.random()」を理解すれば、分かると思います。

参考
https://www.sejuku.net/blog/22432
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
Dante
記事: 12
登録日時: 2022年2月16日(水) 00:44

Re: 運が高いほど分散度がよい方向に働くように処理する方法

投稿記事by Dante » 2022年3月14日(月) 21:39

ムノクラ さんが書きました:
Dante さんが書きました:いつもお世話になっております。

表題について、例えば分散度が20%の攻撃スキルについて使用者の運を参照し
運が0~100の時:ダメージは80%~120%
運が100~200の時:ダメージは90%~120%
運が200~300の時:ダメージは100%~120%
運が300~400の時:ダメージは110%~120%
運が401以上の時:ダメージは120%
となるように処理をしたいと考えております。
何かよい手段や計算方法等がありましたら教えて頂きたいです。
よろしくお願いいたします。


スキルの分散度の仕様を変更するのはプラグイン必須になると思います。

そこで、ダメージ計算式の中に分散度を含めてしまうのが、手っ取り早いと考えます。
ダメージ計算式で、行動者の運は a.luk で取得されます。

参考
https://tkool.jp/mv/guide/004_006d.html

Dante氏が求めているであろう、運でダメージが変動する分散度を算出する式は下記になります。

コード: 全て選択

Math.floor(Math.random() * (121 - Math.floor(Math.min(499, a.luk) / 100) * 10 - 80)) + Math.floor(Math.min(499, a.luk) / 100) * 10 + 80


この式に、本来のダメージ計算式を乗算すれば、分散値として働きます。

例:デフォルトのスキル「攻撃」

  

コード: 全て選択

a.atk * 4 - b.def * 2

  分散度:20%

変更後
  

コード: 全て選択

(a.atk * 4 - b.def * 2) * (Math.floor(Math.random() * (121 - Math.floor(Math.min(499, a.luk) / 100) * 10 - 80)) + Math.floor(Math.min(499, a.luk) / 100) * 10 + 80) / 100

  分散度:0%


一応、ここに至るまでの過程を整理します。

100や200の値が重複しているので、100上がる毎に分散値の最低値が上がると判断しました。
(3桁目の数字だけで判別できるシンプル化にもなります)
条件を表に整理すると下記になると思います。

運最低値  運最高値  分散最低値 分散最高値
   0     99      80     120
  100     199      90     120
  200     299      100     120
  300     399      110     120
  400     499      120     120
  500     ---      120     120
※RPGツクールMVで運の最低値は1ですが、便宜上

つまり、
・分散最低値は運の3桁目が上がる毎に10上がる。
・運の影響は500未満まで。
・最高値は120で固定。
という条件になります。

最低分散度の値は下記で算出できます。

コード: 全て選択

Math.floor(Math.min(499, a.luk) / 100) * 10 + 80


Math.floor は端数切捨て
Math.min は()内の数値の小さい方を使用
する関数です。


あとは、乱数の発生方法「Math.random()」を理解すれば、分かると思います。

参考
https://www.sejuku.net/blog/22432


ムノクラ様
こんばんわ。ご回答ありがとうございます。
計算方法を詳細に教えて頂きまして、本当にありがとうございます。
運の値と乱数で場合分けするしかないんじゃないかとか考えてたのですが、こうやって1つの式で表せられるのですね・・・全く考え付かなかったです。
おかげさまで運の使い道が1つ増えて嬉しい限りです。
改めまして、本当にありがとうございました。

“MV:質問” へ戻る