TPの仕様を変更するプラグインの書き方について
Posted: 2018年8月08日(水) 05:03
プラグイン自作を始めたばかりの者です。
現在、最大TPを第9の能力値として他の能力値と同様、スクリプトによる自由な変更が可能となるようなプラグインを作ろうとしています。
Game_BattlerBase系メソッドの中で関係のありそうなものを書き換えるスクリプトを書いたのですが、戦闘開始時に
Failed to execute 'createLinearGradient' on 'CanvasRenderingContext2D': The provided double value is non-finite.
というエラーが出ました。
これはおそらく、Game_BattlerBase.prototype.tpRateの分母であるGame_BattlerBase.prototype.maxTpの返す値が0になっていることが原因のようです。
私は今回、Game_BattlerBase.prototypeにGame_BattlerBase.prototype.param(8)で定義したmtpという新しいプロパティを用いて、Game_BattlerBase.prototype.maxTpがGame_BattlerBase.prototype.mtpの値を返すように書き換えました。
ここまで探っていった結果、どうやらGame_BattlerBase.prototype.param(8)が正常な値を返していないことが根本的な原因らしいことまではなんとなくわかったのですが、対処法がさっぱりわかりません。
書いてみたスクリプトは下に載せておきます。
そもそもの勘違いがあるような気もしますが、解決法のわかる方がいらっしゃいましたらご助言頂けると幸いです。
また、全体的に間違っているところがあれば遠慮なくご指摘ください。
よろしくお願いいたします。
現在、最大TPを第9の能力値として他の能力値と同様、スクリプトによる自由な変更が可能となるようなプラグインを作ろうとしています。
Game_BattlerBase系メソッドの中で関係のありそうなものを書き換えるスクリプトを書いたのですが、戦闘開始時に
Failed to execute 'createLinearGradient' on 'CanvasRenderingContext2D': The provided double value is non-finite.
というエラーが出ました。
これはおそらく、Game_BattlerBase.prototype.tpRateの分母であるGame_BattlerBase.prototype.maxTpの返す値が0になっていることが原因のようです。
私は今回、Game_BattlerBase.prototypeにGame_BattlerBase.prototype.param(8)で定義したmtpという新しいプロパティを用いて、Game_BattlerBase.prototype.maxTpがGame_BattlerBase.prototype.mtpの値を返すように書き換えました。
ここまで探っていった結果、どうやらGame_BattlerBase.prototype.param(8)が正常な値を返していないことが根本的な原因らしいことまではなんとなくわかったのですが、対処法がさっぱりわかりません。
書いてみたスクリプトは下に載せておきます。
そもそもの勘違いがあるような気もしますが、解決法のわかる方がいらっしゃいましたらご助言頂けると幸いです。
また、全体的に間違っているところがあれば遠慮なくご指摘ください。
よろしくお願いいたします。
コード: 全て選択
Game_BattlerBase.prototype.initialize();
Object.defineProperties(Game_BattlerBase.prototype, {
// Maximum Tactical Points
mtp: { get: function() { return this.param(8); }, configurable: true }
});
var _Game_BattlerBase_clearParamPlus = Game_BattlerBase.prototype.clearParamPlus;
Game_BattlerBase.prototype.clearParamPlus = function() {
_Game_BattlerBase_clearParamPlus.call(this);
if(this._paramPlus.length < 8) {
this._paramPlus.push(0);
} else {
this._paramPlus[8] = 0;
}
};
var _Game_BattlerBase_clearBuffs = Game_BattlerBase.prototype.clearBuffs;
Game_BattlerBase.prototype.clearBuffs = function() {
_Game_BattlerBase_clearBuffs.call(this);
if(this._buffs.length < 8) {
this._buffs.push(0);
} else {
this._buffs[8] = 0;
}
if(this._buffTurns.length < 8) {
this._buffTurns.push(0);
} else {
this._buffTurns[8] = 0;
}
};
Game_BattlerBase.prototype.paramBase = function(paramId) {
if (paramId === 8) {
return 100; // MTP
} else {
return 0;
}
};
Game_BattlerBase.prototype.maxTp = function() {
return Game_BattlerBase.prototype.mtp;
};