Code:
/*============================================================================
* ## Plugin Info
*----------------------------------------------------------------------------
* # Plugin Name
* DoubleX RMMV Formulae Edit
*----------------------------------------------------------------------------
* # Terms Of Use
* You shall keep this plugin's Plugin Info part's contents intact
* You shalln't claim that this plugin's written by anyone other than
* DoubleX or his aliases
* None of the above applies to DoubleX or his aliases
*----------------------------------------------------------------------------
* # Prerequisites
* Abilities:
* 1. Some Javascript coding proficiency to fully utilize this plugin
*----------------------------------------------------------------------------
* # Links
* This plugin:
* 1. http://pastebin.com/8Ynig2Ht
* Mentioned Patreon Supporters:
* https://www.patreon.com/posts/71738797
*----------------------------------------------------------------------------
* # Author
* DoubleX
*----------------------------------------------------------------------------
* # Changelog
* v1.01b(GMT 0400 9-9-2017):
* 1. Fixed not loading the edited formulae from save files bug
* v1.01a(GMT 1400 27-1-2016):
* 1. Fixed called DoubleX_RMMV.Formulae_Edit before it's defined bug
* 2. All configuration values will be saved in $gameSystem
* 3. Increased this plugin's readability
* v1.00b(GMT 1200 17-11-2015):
* 1. Fixed wrong number of arugments bug for lukEffectRate and
* makeEncounterCount
* 2. Increased this plugin's efficiency
* v1.00a(GMT 1300 10-11-2015):
* 1. 1st version of this plugin finished
*============================================================================*/
/*:
* @plugindesc Lets users modify some hardcoded default RMMV formulae on the fly
* @author DoubleX
*
* @param makeEscapeRatio
* @desc Sets the party escape ratio upon battle start as makeEscapeRatio, which
* must return the content of a function that takes the party and troop's
* agi, which can be referenced by partyAgi and troopAgi respectively, as
* the arguments
* The content of the function returned by makeEscapeRatio will be bound
* to BattleManager upon use
* @default this._escapeRatio = 0.5 * partyAgi / troopAgi;
*
* @param speed
* @desc Sets the action speed as speed, which must return the content of a
* function that takes the subject's agi, which can be referenced by agi,
* as the argument and returns a Number
* The content of the function returned by speed will be bound to
* Game_Action upon use
* @default return agi + Math.randomInt(Math.floor(5 + agi / 4));
*
* @param lukEffectRate
* @desc Sets the luk effect rate multiplier applied to adding states and
* debuffs to a target as lukEffectRate, which must return the content of
* a function that takes a subject and target, which can be referenced by
* subject and target respectively, as the arguments and returns a Number
* The content of the function returned by lukEffectRate will be bound to
* Game_Action upon use
* @default return Math.max(1.0 + (subject.luk - target.luk) * 0.001, 0.0);
*
* @param expForLevel
* @desc Sets the required experience for levelling up to level as expForLevel,
* which must return the content of a function that takes the level,
* actor's class, experience basis, extra, acceleration a and b, which can
* be referenced by level, c, basis, extra, acc_a and acc_b respectively,
* as the arguments and returns a Number
* The content of the function returned by expForLevel will be bound to
* Game_Actor upon use
* @default return Math.round(basis * (Math.pow(level - 1, 0.9 + acc_a / 250)) * level * (level + 1) / (6 + Math.pow(level, 2) / 50 / acc_b) + (level - 1) * extra);
*
* @param distancePerFrame
* @desc Sets the characters' moving distance per frame as distancePerFrame,
* which must return the content of a function that takes the real move
* speed, which can be referenced by speed, as the argument and returns a
* Number
* The content of the function returned by expForLevel will be bound to
* Game_CharacterBase upon use
* @default return Math.pow(2, speed) / 256;
*
* @param makeEncounterCount
* @desc Sets the number of steps needed to trigger an encounter as
* makeEncounterCount, which must return the content of a function that
* takes the encounter count, which can be referenced by n, as the
* argument
* The content of the function returned by makeEncounterCount will be
* bound to Game_Player upon use
* @default this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
*
* @help
* The default plugin file name is DoubleX RMMV Formulae Edit v101b
* If you want to change that, you must edit the value of
* DoubleX_RMMV.Formulae_Edit_File, which must be done via opening the plugin
* js file directly
*============================================================================
* ## Plugin Call Info
*----------------------------------------------------------------------------
* # Configuration manipulations
* 1. $gameSystem.formulaeEdit.param
* - Returns the function param under DoubleX_RMMV.Formulae_Edit
* 2. $gameSystem.formulaeEdit.param = function
* - Sets the function param under DoubleX_RMMV.Formulae_Edit as
* function
* - All DoubleX_RMMV.Formulae_Edit.param changes will be saved
*============================================================================
*/
"use strict";
var DoubleX_RMMV = DoubleX_RMMV || {};
DoubleX_RMMV["Formulae Edit"] = "v1.01b";
// The plugin file name must be the same as DoubleX_RMMV.Formulae_Edit_File
DoubleX_RMMV.Formulae_Edit_File = "DoubleX RMMV Formulae Edit v101b";
/*============================================================================
* ## Plugin Implementations
* You need not edit this part as it's about how this plugin works
*----------------------------------------------------------------------------
* # Plugin Support Info:
* 1. Prerequisites
* - Some Javascript coding proficiency to fully comprehend this
* plugin
* 2. Function documentation
* - The 1st part describes why this function's rewritten/extended for
* rewritten/extended functions or what the function does for new
* functions
* - The 2nd part describes what the arguments of the function are
* - The 3rd part informs which version rewritten, extended or created
* this function
* - The 4th part informs whether the function's rewritten or new
* - The 5th part informs whether the function's a real or potential
* hotspot
* - The 6th part describes how this function works for new functions
* only, and describes the parts added, removed or rewritten for
* rewritten or extended functions only
* Example:
* /*----------------------------------------------------------------------
* * Why rewrite/extended/What this function does
* *----------------------------------------------------------------------*/
/* // arguments: What these arguments are
* functionName = function(arguments) { // Version X+; Hotspot
* // Added/Removed/Rewritten to do something/How this function works
* functionContents
* //
* } // functionName
*----------------------------------------------------------------------------*/
DoubleX_RMMV.Formulae_Edit = {};
(function(FE) {
FE.DataManager = {};
var DM = FE.DataManager;
DM.extractSaveContents = DataManager.extractSaveContents;
DataManager.extractSaveContents = function(contents) { // v1.01b+
DM.extractSaveContents.apply(this, arguments);
$gameTemp.formulaeEdit = GS.formulaeEditFuncs.call($gameSystem);
}; // DataManager.extractSaveContents
/*------------------------------------------------------------------------
* * Edit class: BattleManager
*------------------------------------------------------------------------*/
BattleManager.makeEscapeRatio = function() { // Rewrite
// Rewritten
$gameTemp.formulaeEdit.makeEscapeRatio.call(
this, $gameParty.agility(), $gameTroop.agility());
//
}; // BattleManager.makeEscapeRatio
FE.Game_Temp = {};
var GT = FE.Game_Temp;
/*------------------------------------------------------------------------
* New public instance variable
*------------------------------------------------------------------------*/
// The storage of all configuration values
Object.defineProperty(Game_Temp.prototype, "formulaeEdit", {
get: function() { return this._formulaeEdit; },
set: function(formulaeEdit) {
return this._formulaeEdit = formulaeEdit;
},
configurable: true
});
FE.Game_System = {};
var GS = FE.Game_System;
/*------------------------------------------------------------------------
* New public instance variable
*------------------------------------------------------------------------*/
// The storage of all configuration values
Object.defineProperty(Game_System.prototype, "formulaeEdit", {
get: function() { return this._formulaeEdit; },
configurable: true
});
GS.initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function() {
GS.initialize.apply(this, arguments);
GS.initFormulaeEditParams.call(this);
}; // Game_System.prototype.initialize
GS.initFormulaeEditParams = function() {
this._formulaeEdit = GS.formulaeEditParams.call(this);
$gameTemp.formulaeEdit = GS.formulaeEditFuncs.call(this);
}; // GS.initFormulaeEditParams
GS.formulaeEditParams = function() { // v1.01b+
var params = PluginManager.parameters(DoubleX_RMMV.Formulae_Edit_File);
return {
makeEscapeRatio: params.makeEscapeRatio,
speed: params.speed,
lukEffectRate: params.lukEffectRate,
expForLevel: params.expForLevel,
distancePerFrame: params.distancePerFrame,
makeEncounterCount: params.makeEncounterCount
};
}; // GS.formulaeEditParams
GS.formulaeEditFuncs = function() { // v1.01b+
return {
makeEscapeRatio: new Function(
"partyAgi", "troopAgi", this._formulaeEdit.makeEscapeRatio),
speed: new Function("agi", this._formulaeEdit.speed),
lukEffectRate: new Function(
"subject", "target", this._formulaeEdit.lukEffectRate),
expForLevel: new Function("level", "c", "basis", "extra", "acc_a",
"acc_b", this._formulaeEdit.expForLevel),
distancePerFrame: new Function(
"speed", this._formulaeEdit.distancePerFrame),
makeEncounterCount: new Function(
"n", this._formulaeEdit.makeEncounterCount)
};;
}; // GS.formulaeEditParams
/*------------------------------------------------------------------------
* * Edit class: Game_Action
*------------------------------------------------------------------------*/
Game_Action.prototype.speed = function() { // Rewrite
var agi = this.subject().agi;
var speed = $gameTemp.formulaeEdit.speed.call(this, agi); // Rewritten
if (this.item()) {
speed += this.item().speed;
}
if (this.isAttack()) {
speed += this.subject().attackSpeed();
}
return speed;
}; // Game_Action.prototype.speed
Game_Action.prototype.lukEffectRate = function(target) { // Rewrite
// Rewritten
return $gameTemp.formulaeEdit.lukEffectRate.call(
this, this.subject(), target);
//
}; // Game_Action.prototype.lukEffectRate
/*------------------------------------------------------------------------
* * Edit class: Game_Actor
*------------------------------------------------------------------------*/
Game_Actor.prototype.expForLevel = function(level) { // Rewrite
var c = this.currentClass();
var basis = c.expParams[0], extra = c.expParams[1];
var acc_a = c.expParams[2], acc_b = c.expParams[3];
// Rewritten
return $gameTemp.formulaeEdit.expForLevel.call(
this, level, c, basis, extra, acc_a, acc_b);
//
}; // Game_Actor.prototype.expForLevel
/*------------------------------------------------------------------------
* * Edit class: Game_CharacterBase
*------------------------------------------------------------------------*/
Game_CharacterBase.prototype.distancePerFrame = function() { // Rewrite
// Rewritten
return $gameTemp.formulaeEdit.distancePerFrame.call(
this, this.realMoveSpeed());
//
}; // Game_CharacterBase.prototype.distancePerFrame
/*------------------------------------------------------------------------
* * Edit class: Game_Player
*------------------------------------------------------------------------*/
Game_Player.prototype.makeEncounterCount = function() { // Rewrite
$gameTemp.formulaeEdit.makeEncounterCount.call(
this, $gameMap.encounterStep()); // Rewritten
}; // Game_Player.prototype.makeEncounterCount
})(DoubleX_RMMV.Formulae_Edit);
/*============================================================================*/