薬草師ミルトにみるコアスクリプト改変テクニック

ツクールアドベントカレンダー2023 12/15の記事です!
https://adventar.org/calendars/9046

10/14に私、おっぎーの最新作である「薬草師ミルトと聖獣の守護者」をリリースしました。
正統派RPGとしては白の雪と古の魔女から7年ぶりとなります。
是非プレイしてみてください!

この記事では、本作のためにコアスプリプトに手を入れた部分について解説していきます。
なるべく汎用的なものをピックアップしたので、是非参考にしていただければと思います。

クリティカル率変更

ツクールMZのクリティカルは、通常の3倍のダメージを与える仕様で、かなりピーキーです。 この倍率はrmmz_objects.jsの下記のコードで変更できます。本作では2倍に変更しました。ちなみにクリティカル発生率は通常5%です。

Game_Action.prototype.applyCritical = function(damage) {
    return damage * 2;
};

マスターボリューム調整

ツクールMZは全体的に音声のボリュームが大きすぎて、デフォルトの音量にしているとゲーム起動とともに爆音が響き渡ります。かといって、全部の素材の音量を変更していくのは大変です。
ゲームの音量はrmmz_managers.js の下記のコードで変更できます。Youtubeで多くの人が見ている動画の音量を参考にして、本作では一律半分の音量にしました。

AudioManager.updateBufferParameters = function(buffer, configVolume, audio) {
    if (buffer && audio) {
        buffer.volume = (configVolume * 0.5 * (audio.volume || 0)) / 10000;
        buffer.pitch = (audio.pitch || 0) / 100;
        buffer.pan = (audio.pan || 0) / 100;
    }
};

バフの効果量を変更する

ツクールMVではバフ(攻撃力アップなど)の効果は25%に設定されています。重ねがけの回数は2回までなので、最大50%になる計算ですね。これらの値は一律なのでパラメータの種類によっては恩恵を感じられないこともあるでしょう。rmmz_objects.jsを弄ればパラメータの種類毎に変えることが可能です。下記コードのbuffRateの中の数字は左から、HP、MP、攻撃力、防御力、魔力、魔法防御、敏捷、運の上昇値を表しています。たとえば、攻撃力は16%あがるようになります。

Game_BattlerBase.prototype.paramBuffRate = function(paramId) {
    const buffRate = [0, 0, 0.16, 0.35, 1, 0.35, 0, 0];
    return this._buffs[paramId] * buffRate[paramId] + 1.0;
};

バフの重複数を変える

同じくrmmz_objects.jsでバフの重ねがけの回数を変えることができます。薬草師ミルトではバフの重ねがけはナシにしました。

Game_BattlerBase.prototype.isMaxBuffAffected = function(paramId) {
    return this._buffs[paramId] === 1;
};

Game_BattlerBase.prototype.isMaxDebuffAffected = function(paramId) {
    return this._buffs[paramId] === -1;
};

アイテムの最大所持数を変える

rmmz_objects.jsでアイテムの最大所持数を変えることができます。

Game_Party.prototype.maxItems = function(item) {
    if (DataManager.isItem(item)) {
        if (item.id == 89) {
            // 特定のアイテムだけ所持数を変えることもできます
            return 99;
        }
    }
    return 9;
};

アイテムドロップ

折角敵を倒したのにアイテムが何も得られなかったら、プレイヤーはガッカリしますよね。薬草師ミルトでは何もアイテムがドロップしなかった場合、こっそり追加でドロップ抽選をして、その中から1つだけ選んでドロップした扱いになるようにしました。追加抽選の回数は5回までです(ver1.0.7現在)。弄るファイルはこれもrmmz_objects.jsです。


Game_Troop.prototype.makeDropItems = function() {
    const members = this.deadMembers();
    let items = members.reduce((r, enemy) => r.concat(enemy.makeDropItems()), []);
    for (let i = 0; i < 5 && items.length == 0; ++i) {
        // 追加抽選
        const tmp = members.reduce((r, enemy) => r.concat(enemy.makeDropItems()), []);
        if (tmp.length > 0) {
            // ランダムで1つだけ選んでドロップ
            items = [tmp[Math.randomInt(tmp.length - 1)]];
        }
    }
    return items;
};

乗り物でもBGMを継続する

乗り物に乗っても、BGMを変えないようにすることができます。rmmz_objects.jsの下記の箇所を//でコメントアウトしましょう。

Game_Vehicle.prototype.playBgm = function() {
    //AudioManager.playBgm(this._bgm || this.vehicle().bgm);
};

アイテム売却価格を変更する

アイテムの種類毎にアイテム売却時の価格割合を変えたいことってありますよね。rmmz_scenes.jsを下記のように書き換えれば、アイテムのメモ欄でたとえばの<sellingRate:0.2>ように書くと、そのアイテムは購入時の1/5になります。

Scene_Shop.prototype.sellingPrice = function() {
    const sellingRate = this._item.meta.hasOwnProperty("sellingRate")
        ? Number(this._item.meta.sellingRate)
        : 0.5;
    return Math.floor(this._item.price * sellingRate);
};

最後に

以上です!
尚、これらの修正を取り込む際は直接コアスプリプトを上書きするのではなく、独自のプラグインを用意して、そちらで反映するようにしましょう。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする