読者です 読者をやめる 読者になる 読者になる

適当ぐだぐだ

なにか適当に吠えてます

VXAceでのステートの発動率

またしてもこっち放置してましたね(´・ω・`)

 

まぁ見てる人なんてry

 

 

と、そういうのは置いときまして今回のげふげふといきましょうか。

でまぁタイトルの通り、超久しぶりにツクール関連の話題となります。

 

Aceのステートの発動率ですが、データベースで設定している発動率で必ずしも発動しているわけじゃないのはご存知でしょうか?

 

実はこの発動率、使用する側の運と使用される側の運を引き算された値で補正が入ります。

実際にどういう計算をされているか見てみましょう。

 

デフォルトですとGame_Battlerの607行目から631行目までの2つのメソッドがステートの発動率を計算しています。

 

今回は上の通常攻撃と注釈で書かれてる奴は省きます。

これは通常攻撃属性を持っているスキルを使用した際に武器に設定されているステートが防御側に発動するかどうかの判定ですので……

 

で、この中でchanceという変数にいろいろ代入していますね。

f:id:masumizu:20131010163637p:plain

めんどくさいので画像を用意しました(

なにやら変な命令が入っていますが無視してください。

確認のためにあちこちに埋め込んだだけですので

用意した後に気づいたのですが出力するために再計算してるのになんでわかりづらい間に入れてるんだろう

げふんげふん

……上から順番に

・スキル、アイテムに設定されているステート発動率

・防御側のステート有効度

・問題の運による発動率補正です。

 

これらを上から順番に乗算した結果が最終ステート発生確率です。

では肝心の運による発動率補正はどのように計算されているかですが

717行目辺りを見てみましょう。(確かこの辺り)

[1.0 + (user.luk - luk) * 0.001, 0.0].max

このように計算されています。

攻撃側の運から防御側の運をひいた数に0.001倍し、最後に1.0を足して

その合計と0を比べて0より大きければその結果を、0以下であれば0を返すというシンプルな計算式です。

 

さて実際に運による差でどのようになるか実際に算出してもらって確かめましょう。

今回はわかりやすくするために

エリックさんの運を10、スライムさんの運を110とし

ステートの発動率は50%としました。

 

その結果がこれです。

f:id:masumizu:20131010172507p:plain

 

 

計算だるいー!とコンソールに出力させましたが冷静になるとこの方がめんどくさいんじゃね?ってry

 

運によってそれぞれ0.9倍、1.1倍されています。

ぶっちゃけ100程度の差ならそんなに支障はありません。

といっても100%に設定してるのに運による差が100あるから90%とかいう信用できない値まで落ちます(

 

 

さて、この運による補正値を消したい場合どうすればよいか?ですが

簡単なことです。

運による補正値の計算式をコメントアウトして、その下か上に1と入れればいいんです。

f:id:masumizu:20131010173746p:plain

こんなかんじですね。

こうすることで常に運による補正が1.0倍になります。

f:id:masumizu:20131010174002p:plain

これが修正後の結果です。

画像の中にある運による補正値と最終発動率計算式を見比べてもらえばわかると思いますが

運による補正が1.0倍になっていますね。

 

これで気にせず運をいじれます。

ちなみにここのメソッドをいじって他にも影響をあたえるんじゃないかと思いますよね。

はい、影響します。

弱体有効度も運で上下していますので影響します(

まぁその程度です。むしろこうすることで弱体有効度も想定している確率で算出されます。

 

 

 

 

で、ここまですごくだらだらと書きましたが

実はこれ、全部ヘルプに載ってます。

ツクールVXAce→資料集→能力値と計算式にこの記事と全く同じことが書かれてます。

しかもご丁寧に計算式まであります\(^o^)/

で、ここを見ればわかりますが今回の修正によって運が死にステータスになります/(^o^)\

ぶっちゃけいじらなくても運を全アクター全エネミー同じ値に設定すれば1.0倍で返せます。

スクリプトをいじらなくてもいけちゃうんです。

 

という訳で今回はここまで(