Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*============================================================================
- * ## Plugin Info
- *----------------------------------------------------------------------------
- * # Plugin Name
- * DoubleX RMMV Item Charge
- *----------------------------------------------------------------------------
- * # Introduction
- * Suppose a battler has n action slots(that battler can input n actions
- * in a single turn), and suppose that battler has inputted n actions,
- * each needing xi turns to be charged, where 1 <= i <= n, then that
- * battler will behave as follows:
- * 1. At turn y, that battler has inputted the aforementioned n actions
- * 2. At turn y + x1, that battler will execute the 1st inputted action
- * 3. At turn y + x1 + x2, that battler will execute the 2nd inputted
- * action
- * 4. At turn y + x1 + x2 + x3, that battler will execute the 3rd
- * inputted action
- * 5. At turn y + x1 + x2 + x3 + ... + xi, where 1 <= i <= n, that
- * battler will execute the ith action
- * 6. At turn y + x1 + x2 + x3 + ... + xn, that battler will execute the
- * nth action
- * 7. At turn y + x1 + x2 + x3 + ... + xn + 1, that battler will become
- * able to input actions again
- * If the ith action that's not executed yet is the 1st one needing
- * charging, the battler speed will only take the first (i - 1)th
- * actions' speeds into account
- * Item charging's ignored by forced actions
- *----------------------------------------------------------------------------
- * # Terms Of Use
- * 1. Commercial use's always allowed and crediting me's always optional.
- * 2. You shall keep this plugin's Plugin Info part's contents intact.
- * 3. You shalln't claim that this plugin's written by anyone other than
- * DoubleX or my aliases. I always reserve the right to deny you from
- * using any of my plugins anymore if you've violated this.
- * 4. CC BY 4.0, except those conflicting with any of the above, applies
- * to this plugin, unless you've my permissions not needing follow so.
- * 5. I always reserve the right to deny you from using this plugin
- * anymore if you've violated any of the above.
- *----------------------------------------------------------------------------
- * # Prerequisites
- * Abilities:
- * 1. Nothing special for most ordinary use cases
- * 2. Little RMMV plugin development proficiency to fully utilize this
- *----------------------------------------------------------------------------
- * # Links
- * This plugin:
- * 1. http://pastebin.com/1BBbTbZs
- * Video:
- * 1. https://www.youtube.com/watch?v=uYnDbV0qgBM
- * Mentioned Patreon Supporters:
- * https://www.patreon.com/posts/71738797
- *----------------------------------------------------------------------------
- * # Author
- * DoubleX
- *----------------------------------------------------------------------------
- * # Changelog
- * v1.00a(GMT 0800 28-8-2016):
- * 1. 1st version of this plugin finished
- *============================================================================*/
- /*:
- * @plugindesc Lets you set skills/items to need turns to charge before using
- * @author DoubleX
- *
- * @param isEnabled
- * @desc Sets whether this plugin will be enabled
- * It'll be stored as a boolean, and will be regarded as true if and only
- * if it's true
- * Don't change this during the same battle unless you really know what
- * you're truly foing
- * E.g.: Setting isEnabled as false will disable this plugin
- * @default true
- *
- * @param textColor
- * @desc Sets the text color of the text showing the number of turns needed to
- * charge the skill/item on the skill/item window
- * It'll be stored as a Number
- * Don't change this when it's shown to ensure proper text displays
- * E.g.: Setting textColor as 31 will set the text color of the text
- * showing the number of turns needed to charge the skill/item on
- * the skill/item window as 31
- * @default 30
- *
- * @help
- * The skill/item window charging turn display can be problematic if the
- * number of turn's 1000 or above
- * The default plugin file name is DoubleX RMMV Item Charge v100a
- * If you want to change that, you must edit the value of
- * DoubleX_RMMV.Item_Charge_File, which must be done via opening this plugin
- * js file directly
- *============================================================================
- * ## Notetag Info
- *----------------------------------------------------------------------------
- * # Skill/Item Notetags:
- * 1. <item charge: turns>
- * - Sets the number of turns needed to charge the skill/item before
- * using it as turns
- * - E.g.:
- * <item charge: 1> will set the number of turns needed to charge
- * the skill/item before using it as 1
- * - Only the 1st notetag will be used
- *============================================================================
- * ## Plugin Call Info
- *----------------------------------------------------------------------------
- * # Configuration manipulations
- * 1. $gameSystem.itemCharge.param
- * - Returns the stored value of param listed in the plugin manager
- * - E.g.:
- * $gameSystem.itemCharge.textColor will return the stored value of
- * parameter textColor shown on the plugin manager
- * 2. $gameSystem.itemCharge.param = val
- * - Sets the stored value of param listed in plugin manager as val
- * - E.g.:
- * $gameSystem.itemCharge.isEnabled = false will set the stored
- * value of parameter isEnabled shown on the plugin manager as false
- * - All $gameSystem.itemCharge.param changes will be saved
- * # Skill/Item notetag manipulations
- * 1. meta.itemCharge
- * - Returns the <item charge: turns> notetag value turns as a Number
- * - E.g.:
- * $dataSkills[1].meta.itemCharge will return the
- * <item charge: turns> notetag value of skill with id 1
- * 2. meta.itemCharge = turns
- * - Sets the <item charge: turns> notetag value turns as a Number
- * - E.g.:
- * $dataItems[2].meta.itemCharge = 0 will set the
- * <item charge: turns> notetag value of item with id 2 as 0
- * - All meta.itemCharge changes can be saved if
- * DoubleX RMMV Dynamic Data is used
- *============================================================================
- */
- var DoubleX_RMMV = DoubleX_RMMV || {};
- DoubleX_RMMV['Item Charge'] = 'v1.00a';
- // The plugin file name must be the same as DoubleX_RMMV.Item_Charge_File
- DoubleX_RMMV.Item_Charge_File = 'DoubleX RMMV Item Charge v100a';
- /*============================================================================
- * ## Plugin Implementations
- * You need not edit this part as it's about how this plugin works
- *----------------------------------------------------------------------------
- * # Plugin Support Info:
- * 1. Prerequisites
- * - Basic knowledge on the default RMMV battle flow implementations
- * - Some RMMV plugin development proficiency to fully comprehend this
- *----------------------------------------------------------------------------*/
- DoubleX_RMMV.Is_Item_Charge_Notes_Loaded = false; // v1.00a - v1.00a
- DoubleX_RMMV.Item_Charge_Params = { // v1.00a - v1.00a
- isEnabled: 'Boolean', // Marks that isEnabled is a Boolean
- textColor: 'Number', // Marks that textColor is a Number
- Boolean: function(param) { return param === 'true'; }, // Boolean
- Number: function(param) { return +param; } // Number
- }; // DoubleX_RMMV.Item_Charge_Params
- (function(IC) {
- 'use strict';
- IC.DataManager = {};
- var DM = IC.DataManager;
- DM.isDatabaseLoaded = DataManager.isDatabaseLoaded;
- DataManager.isDatabaseLoaded = function() { // Extended; v1.00a - v1.00a
- // Rewritten to read all notetags of this plugin as well
- return DM.isDatabaseLoaded.apply(this, arguments) && DM.loadAllNotes();
- //
- }; // DataManager.isDatabaseLoaded
- /* Reads all notetags of this plugin from the database
- * Return: True
- * Functional cohesion/Message coupling/Idempotent
- */
- DM.loadAllNotes = function() { // New; v1.00a - v1.00a
- // Ensures the notetags will only be read exactly once upon game start
- if (DoubleX_RMMV.Is_Item_Charge_Notes_Loaded) return true;
- [$dataSkills, $dataItems].forEach(function(type) {
- type.forEach(function(data) { if (data) DM.loadNotes(data); });
- });
- DoubleX_RMMV.Is_Item_Charge_Notes_Loaded = true;
- //
- return true;
- }; // DM.loadAllNotes
- /* Reads all notetags of this plugin from a dataum of the database
- * (Object)datum: The datum to have its notetags of this plugin read
- * Functional cohesion/Data coupling/Idempotent
- */
- DM.loadNotes = function(datum) { // New; v1.00a - v1.00a
- var regExp = /< *item +charge *: *(\d+) *>/i;
- var lines = datum.note.split(/[\r\n]+/);
- for (var index = 0, length = lines.length; index < length; index++) {
- if (!lines[index].match(regExp)) continue;
- return datum.meta.itemCharge = +RegExp.$1;
- }
- datum.meta.itemCharge = 0; // The default's not needing charging
- }; // DM.loadNotes
- IC.BattleManager = {};
- var BM = IC.BattleManager;
- BM.processTurn = BattleManager.processTurn;
- BattleManager.processTurn = function() { // Rewritten; v1.00a - v1.00a
- var subject = this._subject;
- var action = subject.currentAction();
- // Rewritten to stop executing actions upon reaching a charging one
- var isEnabled = $gameSystem.itemCharge.isEnabled;
- if (action && (!isEnabled || action.itemCharge <= 0)) {
- action.prepare();
- if (action.isValid()) {
- this.startAction();
- }
- subject.removeCurrentAction();
- } else {
- subject.onAllActionsEnd();
- this.refreshStatus();
- this._logWindow.displayAutoAffectedStatus(subject);
- this._logWindow.displayCurrentState(subject);
- this._logWindow.displayRegeneration(subject);
- this._subject = this.getNextSubject();
- }
- //
- }; // BattleManager.processTurn
- IC.Game_System = {};
- var GS = IC.Game_System;
- /*------------------------------------------------------------------------
- * New public instance variable
- *------------------------------------------------------------------------*/
- // itemCharge: The container of all parameters shown on the plugin manger
- GS.initialize = Game_System.prototype.initialize;
- Game_System.prototype.initialize = function() { // Extended; v1.00a - v1.00a
- GS.initialize.apply(this, arguments);
- GS.initializeItemCharge.call(this); // Added
- }; // Game_System.prototype.initialize
- /* Initializes all parameters of this plugin shown on the plugin manager
- * Functional cohesion/Message coupling/Idempotent
- */
- GS.initializeItemCharge = function() { // New; v1.00a - v1.00a
- this.itemCharge = {};
- var params = PluginManager.parameters(DoubleX_RMMV.Item_Charge_File);
- var ICP = DoubleX_RMMV.Item_Charge_Params;
- Object.keys(params).forEach(function(param) {
- this.itemCharge[param] = ICP[ICP[param]](params[param]);
- }, this);
- }; // GS.initializeItemCharge
- IC.Game_Action = {};
- var GA = IC.Game_Action;
- /*------------------------------------------------------------------------
- * New public instance variable
- *------------------------------------------------------------------------*/
- // itemCharge: The number of remaining turns for the action to be charged
- GA.initialize = Game_Action.prototype.initialize;
- Game_Action.prototype.initialize = function(subject, forcing) {
- // Extended; v1.00a - v1.00a
- GA.initialize.apply(this, arguments);
- this.itemCharge = 0; // Added
- }; // Game_Action.prototype.initialize
- GA.clear = Game_Action.prototype.clear;
- Game_Action.prototype.clear = function() { // Extended; v1.00a - v1.00a
- GA.clear.apply(this, arguments);
- this.itemCharge = 0; // Added
- }; // Game_Action.prototype.clear
- GA.setSkill = Game_Action.prototype.setSkill;
- Game_Action.prototype.setSkill = function(skillId) {
- // Extended; v1.00a - v1.00a
- GA.setSkill.apply(this, arguments);
- // Added to mark the number of turns needed to charge this action
- if (!this._forcing) this.itemCharge = this.item().meta.itemCharge;
- //
- }; // Game_Action.prototype.setSkill
- GA.setItem = Game_Action.prototype.setItem;
- Game_Action.prototype.setItem = function(itemId) {
- // Extended; v1.00a - v1.00a
- GA.setItem.apply(this, arguments);
- // Added to mark the number of turns needed to charge this action
- if (!this._forcing)this.itemCharge = this.item().meta.itemCharge;
- //
- }; // Game_Action.prototype.setItem
- IC.Game_Battler = {};
- var GB = IC.Game_Battler;
- GB.makeSpeed = Game_Battler.prototype.makeSpeed;
- Game_Battler.prototype.makeSpeed = function() {
- // Extended; v1.00a - v1.00a
- // Rewritten
- if (!$gameSystem.itemCharge.isEnabled) {
- return GB.makeSpeed.apply(this, arguments);
- }
- this._speed = Math.min.apply(null, GB.makeItemChargeSpeed.call(this));
- this._speed = this._speed || 0;
- //
- };
- // Game_Battler.prototype.makeSpeed
- /* Collects speed from 1st act to the one right before the one having charge
- * Return: An array of Numbers each being the speed of a collected action
- * Functional cohesion/Message coupling
- */
- GB.makeItemChargeSpeed = function() { // New; v1.00a - v1.00a
- var act, length = this._actions.length, speeds = [];
- for (var index = 0; index < length; index++) {
- act = this._actions[index];
- if (!act) continue;
- if (act.itemCharge > 0) return speeds;
- speeds.push(act.speed());
- }
- return speeds;
- }; // GB.makeItemChargeSpeed
- /* Removes all actions before the 1st charging one and updates its turn
- * Functional cohesion/Message coupling
- */
- GB.updateItemCharge = function() { // New; v1.00a - v1.00a
- var act;
- for (var i = 0, length = this._actions.length; i < length; i++) {
- act = this._actions[i];
- if (act && act.itemCharge > 0) return act.itemCharge -= 1;
- this._actions.shift();
- }
- }; // GB.updateItemCharge
- IC.Game_Actor = {};
- var GActor = IC.Game_Actor;
- /*------------------------------------------------------------------------
- * New private instance variable
- *------------------------------------------------------------------------*/
- // _hasItemCharge: Whether the actor's charging skills/items
- GActor.initMembers = Game_Actor.prototype.initMembers;
- Game_Actor.prototype.initMembers = function() {
- // Extended; v1.00a - v1.00a
- GActor.initMembers.apply(this, arguments);
- this._hasItemCharge = false; // Added
- };
- // Game_Actor.prototype.initMembers
- GActor.makeActions = Game_Actor.prototype.makeActions;
- Game_Actor.prototype.makeActions = function() { // Extended; v1.00a - 1.00a
- // Added to stop making new actions when there are still charging ones
- if (!$gameSystem.itemCharge.isEnabled) {
- return GActor.makeActions.apply(this, arguments);
- }
- if (BattleManager._surprise) return;
- GB.updateItemCharge.call(this);
- this._hasItemCharge = this._actions.length > 0;
- if (this._hasItemCharge) return ;
- //
- GActor.makeActions.apply(this, arguments);
- }; // Game_Actor.prototype.makeActions
- /* Checks whether this actor isn't also charging skills/items
- * Functional cohesion/Message coupling/Referentially transparent
- */
- Game_Actor.prototype.canInput = function() { // New; v1.00a - v1.00a
- // Ensures this plugin works with those having state changes in canInput
- if (!Game_BattlerBase.prototype.canInput.call(this)) return false;
- return !$gameSystem.itemCharge.isEnabled || !this._hasItemCharge;
- //
- }; // Game_Actor.prototype.canInput
- IC.Game_Enemy = {};
- var GE = IC.Game_Enemy;
- GE.makeActions = Game_Enemy.prototype.makeActions;
- Game_Enemy.prototype.makeActions = function() { // Extended; v1.00a - 1.00a
- // Added to stop making new actions when there are still charging ones
- if (!$gameSystem.itemCharge.isEnabled) {
- return GE.makeActions.apply(this, arguments);
- }
- if (BattleManager._preemptive) return;
- GB.updateItemCharge.call(this);
- if (this._actions.length > 0) return ;
- //
- GE.makeActions.apply(this, arguments);
- }; // Game_Enemy.prototype.makeActions
- IC.Window_ItemList = {};
- var WIL = IC.Window_ItemList;
- WIL.drawItem = Window_ItemList.prototype.drawItem;
- Window_ItemList.prototype.drawItem = function(index) {
- // Extended; v1.00a - v1.00a
- WIL.drawItem.apply(this, arguments);
- // Added to draw the number of turns need to charge the item as well
- if (!$gameSystem.itemCharge.isEnabled) return;
- var item = this._data[index];
- if (!item || item.meta.itemCharge <= 0) return;
- var r = this.itemRect(index);
- r.x -= WSL.costWidth.apply(this, arguments);
- r.width -= this.textPadding();
- WIL.drawItemCharge.call(this, item.meta.itemCharge, r.x, r.y, r.width);
- //
- }; // Window_ItemList.prototype.drawItem
- WIL.numberWidth = Window_ItemList.prototype.numberWidth;
- Window_ItemList.prototype.numberWidth = function() {
- // Rewritten; v1.00a - v1.00a
- // Added
- if ($gameSystem.itemCharge.isEnabled) {
- return WIL.numberWidth.apply(this, arguments) * 2;
- }
- //
- return WIL.numberWidth.apply(this, arguments);
- }; // Window_ItemList.prototype.numberWidth
- /* Draws the number of turns needed to charge the item on the item window
- * (Number)turns: The number of turns needed to charge the item
- * (Number)x; The x position of the text drawn
- * (Number)y; The y position of the text drawn
- * (Number)width: The max width of the text drawn
- * Functional cohesion/Data coupling/Idempotent
- */
- WIL.drawItemCharge = function(turns, x, y, width) { // New; v1.00a - v1.00a
- this.changeTextColor(this.textColor($gameSystem.itemCharge.textColor));
- this.drawText(turns, x, y, width, 'right');
- this.resetTextColor();
- }; // WIL.drawItemCharge
- IC.Window_SkillList = {};
- var WSL = IC.Window_SkillList;
- WSL.drawItem = Window_SkillList.prototype.drawItem;
- Window_SkillList.prototype.drawItem = function(index) {
- // Extended; v1.00a - v1.00a
- WSL.drawItem.apply(this, arguments);
- // Added to draw the number of turns needed to charge the skill as well
- if (!$gameSystem.itemCharge.isEnabled) return;
- var skill = this._data[index];
- if (!skill || skill.meta.itemCharge <= 0) return;
- var r = this.itemRect(index);
- r.x -= WSL.costWidth.apply(this, arguments);
- r.width -= this.textPadding();
- WSL.drawItemCharge.call(this, skill.meta.itemCharge, r.x, r.y, r.width);
- //
- }; // Window_SkillList.prototype.drawItem
- WSL.costWidth = Window_SkillList.prototype.costWidth;
- Window_SkillList.prototype.costWidth = function() {
- // Rewritten; v1.00a - v1.00a
- // Added
- if ($gameSystem.itemCharge.isEnabled) {
- return WSL.costWidth.apply(this, arguments) + this.textWidth('000');
- }
- //
- return WSL.costWidth.apply(this, arguments);
- }; // Window_SkillList.prototype.costWidth
- /* Draws the number of turns needed to charge the skill on the skill window
- * (Number)turns: The number of turns needed to charge the item
- * (Number)x; The x position of the text drawn
- * (Number)y; The y position of the text drawn
- * (Number)width: The max width of the text drawn
- * Functional cohesion/Data coupling/Idempotent
- */
- WSL.drawItemCharge = function(turns, x, y, width) { // New; v1.00a - v1.00a
- this.changeTextColor(this.textColor($gameSystem.itemCharge.textColor));
- this.drawText(turns, x, y, width, 'right');
- }; // WSL.drawItemCharge
- })(DoubleX_RMMV.Item_Charge = {});
- /*============================================================================*/
Add Comment
Please, Sign In to add comment