戦闘後の経験値7割を、控えの主人公たちに与えるイベント


テクニックの内容

ここでは、戦闘後にもらえる経験値の七割分を、控えの主人公たちにも与えるイベントを組みます。
これによって、パーティーメンバーと、そうでない主人公とのレベルの格差が少なくなります。


コモンイベント
名前:平均経験値の計算
トリガー:なし
実行内容:

変数の操作:[0001:経験値計算用1] = 0
条件分岐:[アルシェス]がパーティにいる
 ◆変数の操作:[0002:経験値計算用2] = [アルシェス]のEXP
 ◆変数の操作:[0002:経験値計算用2] /= パーティ人数
 ◆変数の操作:[0001:経験値計算用1] += 変数[0002:経験値計算用2]
 ◆
分岐終了
条件分岐:[バジル]がパーティにいる
 ◆変数の操作:[0002:経験値計算用2] = [バジル]のEXP
 ◆変数の操作:[0002:経験値計算用2] /= パーティ人数
 ◆変数の操作:[0001:経験値計算用1] += 変数[0002:経験値計算用2]
 ◆
分岐終了
・・・・・・中略・・・・・・
条件分岐:[ヒルダ]がパーティにいる
 ◆変数の操作:[0002:経験値計算用2] = [ヒルダ]のEXP
 ◆変数の操作:[0002:経験値計算用2] /= パーティ人数
 ◆変数の操作:[0001:経験値計算用1] += 変数[0002:経験値計算用2]
 ◆
分岐終了


上記のイベントは、現在のパーティーメンバーの平均経験値を計算するためのイベントです。
次は、バトルイベントです、これは各トループに設定してください。


バトルイベント
条件:ターン 0
スパン:バトル

コモンイベント:平均経験値の計算
変数の操作:[0003:戦闘前平均経験値] = [0001:経験値計算用1]
スイッチの操作:[0001:戦闘した] = ON


これで、バトルイベントは完了です。ページ番号は何番でもいいです。
次に、もう一つコモンイベントを組んでください。


コモンイベント
名前:戦闘後の経験値処理
トリガー:自動実行
条件スイッチ:0001:戦闘した
実行内容:

コモンイベント:平均経験値の計算
変数の操作:[0001:経験値計算用1] -= 変数[0003:戦闘前平均経験値]
変数の操作:[0002:経験値計算用2] = 変数[0001:]
変数の操作:[0001:経験値計算用1] /= 10
変数の操作:[0001:経験値計算用1] *= 7
変数の操作:[0002:経験値計算用2] %= 10
変数の操作:[0002:経験値計算用2] = 7
変数の操作:[0002:経験値計算用2] /= 10
変数の操作:[0001:経験値計算用1] += 
条件分岐:[アルシェス]がパーティにいる
 ◆
:それ以外の場合
 ◆EXP の増減:[アルシェス], + 変数[0001:経験値計算用1]
 ◆
:分岐終了
条件分岐:[バジル]がパーティにいる
 ◆
:それ以外の場合
 ◆EXP の増減:[バジル], + 変数[0001:経験値計算用1]
 ◆
:分岐終了
・・・・・・中略・・・・・・
条件分岐:[ヒルダ]がパーティにいる
 ◆
:それ以外の場合
 ◆EXP の増減:[ヒルダ], + 変数[0001:経験値計算用1]
 ◆
:分岐終了
スイッチの操作:[0001:戦闘した] = OFF


注意

一回の戦闘中にもらえる経験値が、変数格納最大値(9999999)を超えると、不具合が起こります。
RGSSをいじって、変数格納最大値を拡張していれば別ですが。


解説

まず、大まかな内容から解説します。このイベントの流れは、大体こんな感じです。
1. 戦闘が始まり次第、パーティーメンバーの平均経験値を計算し、その値を変数に保存する。
2. 戦闘が終わり次第、パーティーメンバーの平均経験値を計算し、その値から、1で計算した平均経験値を引いて、戦闘後にもらった経験値を算出する。
3. その経験値の70%の値を算出し、非パーティーメンバーの主人公たちの経験値を、その値分増やす。
こんな感じのイベントを組んでいるわけです。
あと、戦闘後に実行するコモンイベントは、「戦闘中、コモンイベントはひとりでに実行されない」法則を利用しています、すなわち、戦闘開始時にスイッチ[0001:戦闘をした]をONにし、そのスイッチを、出現条件に設定するだけです。(イベントの最後で、スイッチをOFFにするのを忘れずに。まぁ、忘れていてもデバックのときに気づきますがね。)
しかし、ツクールでそれをやろうとすると、不都合が起こるんですねぇ。合計経験値が、変数格納最大値(9999999)を超えてしまうんですねぇ。当然変数は9999999までしか計算できませんから、誤差が出てしまうんです。(RGSSで改良可)


次に、細かい部分の解説をします。何を解説するかというと、平均経験値や、割合の計算方法です、普通平均値を出すときは、一度すべての値の合計を計算してから、その項目数で割りますよね? すなわち、パーティーメンバーの合計経験値を計算してから、パーティー人数で割る。ということです。
そこで、それぞれのパーティーメンバーの経験値をパーティー人数で割ったものの合計を出すんです。先に割り算をしておけば、変数格納最大値9999999を超えることは絶対にないでしょう。合計が平均値になるのですから。

また、値の70%にする計算ですが、普通は、先に7をかけて、あとに10を割りますよね? そのほうがより正確な計算になりますからね。しかしこれもだめなんですねぇ、戦闘後にもらった経験値が大きすぎると、7をかけた時にまた9999999を超えてしまう可能性があるんですねぇ。なので、どうしても先に10を割らないといけないんです。しかしそれだと・・・やはり誤差が出るんですねぇ。戦闘後にもらえた経験値が一人当たり25のときを例に計算してみますと・・・

25 × 7 ÷ 10 = 175 ÷ 10 = 17
25 ÷ 10 × 7 = 2 × 7 = 14

こんなふうに3ポイントも誤差が出てしまうんですねぇ。なので、10で割ったときのあまりも考慮に入れなければいけませんね。

( 25 ÷ 10 × 7 )+( 「 25 ÷ 10 のあまり 」 × 7 ÷ 10 )= 14 + ( 5 × 7 ÷ 10 )= 14 + 3 = 17

こうすれば、誤差が出ないですみそうですね。10で割ったときのあまりは、最大で9なので、先に7をかけても問題ないでしょう。
こういう計算を、二つ目のコモンイベントでごちゃごちゃやっているわけです。


稲妻と雷鳴の補足

う〜ん。かなりすばらしいアイディアなので、ここに載せたのですが、ツクールXPではRGSSによってもっと簡単に出来ると思います。
おそらく、バトル終了時の経験値を与えるところで、パーティ以外のメンバーに経験値×7÷10の値を経験値として加えればイベント等を一切使わずに出来てしまいます。
しかし、俺には「パーティ以外のメンバー」の取得法がわかりません。
でも、スクリプトで変数をいじればそれだけでだいぶ管理が楽になると思います。