Code:
/*============================================================================
* ## Plugin Info
*----------------------------------------------------------------------------
* # Plugin Name
* DoubleX RMMV Partitioned Random
*----------------------------------------------------------------------------
* # 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
* Nothing special
*----------------------------------------------------------------------------
* # Links
* This script:
* 1. http://pastebin.com/FnyDh9mw
* Mentioned Patreon Supporters:
* https://www.patreon.com/posts/71738797
*----------------------------------------------------------------------------
* # Author
* DoubleX
*----------------------------------------------------------------------------
* # Changelog
* v1.00b(GMT 1300 11-11-2015):
* 1. Added descriptions that will be shown in the plugin manager
* v1.00a(GMT 1300 24-10-2015):
* 1. 1st version of this plugin finished
*============================================================================*/
/*:
* @plugindesc Lets users changes the number of partitions the RNG being run per
* Math.random() call to control the RNG distributions on the fly
* @author DoubleX
*
* @param parts
* @desc RNG will be run under each of parts equal-sized partitions
* No partition will be run under twice before they've all been run under
* parts shouldn't be too large nor too small to maximize the chance for
* the RNG generated by Math.random() to be more evenly distributed
* Larger parts means more resources(mainly time) needed to run it
* @default 10
*
* @help
*============================================================================
* ## Plugin Call Info
*----------------------------------------------------------------------------
* # Configuration manipulations
* 1. DoubleX_RMMV.Partitioned_Random.parts
* - Returns the value of parts under DoubleX_RMMV.Partitioned_Random
* 2. DoubleX_RMMV.Partitioned_Random.parts = val
* - Sets the value of parts under DoubleX_RMMV.Partitioned_Random as
* val
* - No DoubleX_RMMV.Formulae_Edit.parts change will be saved
*============================================================================
*/
"use strict";
var DoubleX_RMMV = DoubleX_RMMV || {};
DoubleX_RMMV["Partitioned Random"] = "v1.00b";
// The plugin file name must be the same as DoubleX_RMMV.Constants_Edit_File
DoubleX_RMMV.Partitioned_Random_File = "DoubleX RMMV Partitioned Random v100b";
/*============================================================================
* ## Plugin Implementations
* You need not edit this part as it's about how this plugin works
*----------------------------------------------------------------------------
* # Plugin Support Info:
* 1. Prerequisites
* - Little 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
* function function_name(arguments) // Version X+; Rewrite/New; Hotspot
* // Added/Removed/Rewritten to do something/How this function works
* function_name_code
* //
* end // function_name
*----------------------------------------------------------------------------*/
DoubleX_RMMV.Partitioned_Random = {
// Stores the param parts that's shown in the plugin manager
parts: PluginManager.parameters(DoubleX_RMMV.Partitioned_Random_File).parts,
// An array storing all RNG partitions
partitions: []
}; // DoubleX_RMMV.Partitioned_Random
Math.random = (function(partitioned_random) { // Hotspot
return function() {
// Rewritten to restrict the RNG into an unused partition if any
var parts = DoubleX_RMMV.Partitioned_Random.parts;
var used_parts = DoubleX_RMMV.Partitioned_Random.partitions;
if (used_parts.length >= parts) {
used_parts.length = 0;
}
var part, rng;
do {
rng = partitioned_random.apply(this, arguments);
part = Math.floor(rng * parts);
} while (used_parts.indexOf(part) !== -1);
used_parts.push(part);
return rng;
//
};
})(Math.random);
/*============================================================================*/