This is an RPG Maker MV plugin that adds a "Cancel" command to menus, including in shops, so that the user will not have to press the cancel button (Esc / right-click / two-finger-tap). The cancel command name is configurable - you may call it "Cancel", "Back", "Exit", or anything else. The specific menus in which the command will be included can also be selected.
Platform: RPG Maker MV 1.6.2
Terms of use:
Update log
//=============================================================================
// Bgs_MenusCancelCommand.js
//=============================================================================
/*:
* @plugindesc Add a cancel command to menus of your choice
* @author BallgameStudios.com
*
* @help This plugin adds a cancel command to menus, including in shops, so the user will
* never have to press the cancel button (Esc / right-click / two-finger-tap).
*
* The cancel command name is configurable. You may call it "Cancel", "Back",
* "Exit", or anything else. The menus in which the command appears can also
* be selected.
*
* Terms of use:
* ------------
* Free for non-commercial and commercial use.
* Please credit BallgameStudios.com
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* Update log:
* 1.0: Initial release.
* 1.1: Exit shop by buying / selling 0 items
*
* @param Cancel Command Name
* @text Cancel Command Name
* @type text
* @desc The name you wish to call the cancel command in menus.
* Leave blank to keep hidden.
* @default Back
*
* @param Include in Main Menu
* @text Include in Main Menu
* @type boolean
* @desc Select true to include the cancel command in the main menu.
* @default true
*
* @param Include in Item
* @text Include in Item
* @type boolean
* @desc Select true to include the cancel command in item related menus (in the main menu as well as shops)
* @default true
*
* @param Include in Skill
* @text Include in Skill
* @type boolean
* @desc Select true to include the cancel command in skill menus
* @default true
*
* @param Include in Equip
* @text Include in Equip
* @type boolean
* @desc Select true to include the cancel command in equip menus
* @default true
*
* @param Include in Status
* @text Include in Status
* @type boolean
* @desc Select true to include the cancel command in the Status window of the main menu
* @default true
*
* @param Include in Options
* @text Include in Options
* @type boolean
* @desc Select true to include the cancel command in the Options menu.
* @default true
*
* @param Include in Save
* @text Include in Save
* @type boolean
* @desc Select true to include the cancel command in the Save and Load menus.
* @default true
*
* @param Include in Party
* @text Include in party selection
* @type boolean
* @desc Select true to include the cancel command in menus that allow selecting a party member
* @default true
*
* @param Include in Shop
* @text Include in Shop
* @type boolean
* @desc Select true to include the cancel command in shop Buy menus
* @default true
*
*/
var Imported = Imported || {};
Imported.Bgs_MenusCancelCommand = 1.0;
var BGS = BGS || {};
BGS.MenusCancelCommand = BGS.MenusCancelCommand || {};
(function (_) {
'use strict';
// Process user parameters
_.params = PluginManager.parameters('Bgs_MenusCancelCommand');
_.CancelCommandName = String(_.params['Cancel Command Name'] || '');
_.IncludeInMainMenu = String(_.params['Include in Main Menu'] || "true");
_.IncludeInItem = String(_.params['Include in Item'] || "true");
_.IncludeInSkill = String(_.params['Include in Skill'] || "true");
_.IncludeInEquip = String(_.params['Include in Equip'] || "true");
_.IncludeInStatus = String(_.params['Include in Status'] || "true");
_.IncludeInOptions = String(_.params['Include in Options'] || "true");
_.IncludeInSave = String(_.params['Include in Save'] || "true");
_.IncludeInParty = String(_.params['Include in Party'] || "true");
_.IncludeInShop = String(_.params['Include in Shop'] || "true");
//-----------------------------------------------------------------------------
// Window_MenuCommand
//
// The window for selecting a command on the main menu screen.
_.Window_MenuCommand_makeCommandList = Window_MenuCommand.prototype.makeCommandList;
Window_MenuCommand.prototype.makeCommandList = function () {
if (_.IncludeInMainMenu == "true")
this.addCommand(_.CancelCommandName, _.CancelCommandName);
_.Window_MenuCommand_makeCommandList.call(this);
};
_.Window_MenuCommand_processOk = Window_MenuCommand.prototype.processOk;
Window_MenuCommand.prototype.processOk = function () {
if (this.currentSymbol() == _.CancelCommandName) {
this.processCancel();
}
else {
_.Window_MenuCommand_processOk.call(this);
}
};
//-----------------------------------------------------------------------------
// Window_ItemCategory
//
// The window for selecting a category of items on the item and shop screens.
_.Window_ItemCategory_maxCols = Window_ItemCategory.prototype.maxCols;
Window_ItemCategory.prototype.maxCols = function () {
let cols = _.Window_ItemCategory_maxCols.call(this);
cols += _.IncludeInItem == "true" ? 1 : 0;
return cols;
};
_.Window_ItemCategory_makeCommandList = Window_ItemCategory.prototype.makeCommandList;
Window_ItemCategory.prototype.makeCommandList = function () {
_.Window_ItemCategory_makeCommandList.call(this);
if (_.IncludeInItem == "true")
this.addCommand(_.CancelCommandName, _.CancelCommandName);
};
_.Window_ItemCategory_processOk = Window_ItemCategory.prototype.processOk
Window_ItemCategory.prototype.processOk = function () {
if (this.currentSymbol() == _.CancelCommandName) {
this.processCancel();
}
else {
_.Window_ItemCategory_processOk.call(this);
}
};
//-----------------------------------------------------------------------------
// Window_ItemList
//
// The window for selecting an item on the item screen.
_.Window_ItemList_makeItemList = Window_ItemList.prototype.makeItemList;
Window_ItemList.prototype.makeItemList = function () {
_.Window_ItemList_makeItemList.call(this);
if (_.IncludeInItem == "true")
this._data.push(_.CancelCommandName);
};
_.Window_ItemList_drawItem = Window_ItemList.prototype.drawItem;
Window_ItemList.prototype.drawItem = function (index) {
var item = this._data[index];
var rect = this.itemRect(index);
var priceWidth = 96;
rect.width -= this.textPadding();
if (item == _.CancelCommandName) {
var iconBoxWidth = Window_Base._iconWidth + 4;
this.resetTextColor();
this.drawText(_.CancelCommandName, rect.x + iconBoxWidth, rect.y, rect.width - iconBoxWidth);
}
else
_.Window_ItemList_drawItem.call(this, index);
};
_.Window_ItemList_processOk = Window_ItemList.prototype.processOk;
Window_ItemList.prototype.processOk = function () {
if (this.item() != null && this.item() == _.CancelCommandName) {
this.processCancel();
}
else {
_.Window_ItemList_processOk.call(this);
}
};
//-----------------------------------------------------------------------------
// Window_SkillType
//
// The window for selecting a skill type on the skill screen.
_.Window_SkillType_makeCommandList = Window_SkillType.prototype.makeCommandList;
Window_SkillType.prototype.makeCommandList = function () {
_.Window_SkillType_makeCommandList.call(this);
if (_.IncludeInSkill == "true")
this.addCommand(_.CancelCommandName, _.CancelCommandName);
};
_.Window_SkillType_processOk = Window_SkillType.prototype.processOk;
Window_SkillType.prototype.processOk = function () {
var index = this.index();
var symbol = this.commandSymbol(index);
if (symbol.contains(_.CancelCommandName))
this.processCancel();
else
_.Window_SkillType_processOk.call(this);
};
//-----------------------------------------------------------------------------
// Window_SkillList
//
// The window for selecting a skill on the skill screen.
_.Window_SkillList_makeItemList = Window_SkillList.prototype.makeItemList;
Window_SkillList.prototype.makeItemList = function () {
_.Window_SkillList_makeItemList.call(this);
if (_.IncludeInSkill == "true")
this._data.push(_.CancelCommandName);
};
_.Window_SkillList_drawItem = Window_SkillList.prototype.drawItem;
Window_SkillList.prototype.drawItem = function (index) {
var skill = this._data[index];
if (skill == _.CancelCommandName) {
var costWidth = this.costWidth();
var rect = this.itemRect(index);
rect.width -= this.textPadding();
this.changePaintOpacity(true);
this.resetTextColor();
this.drawText(_.CancelCommandName, rect.x, rect.y, rect.width - costWidth);
}
else
_.Window_SkillList_drawItem.call(this, index);
};
_.Window_SkillList_processOk = Window_SkillList.prototype.processOk;
Window_SkillList.prototype.processOk = function () {
if (this.item() != null && this.item() == _.CancelCommandName) {
this.processCancel();
}
else {
_.Window_SkillList_processOk.call(this);
}
};
_.Window_MenuActor_processOk = Window_MenuActor.prototype.processOk;
Window_MenuActor.prototype.processOk = function () {
if ($gameParty.members()[this._index]) {
_.Window_MenuActor_processOk.call(this);
}
else {
this.processCancel();
}
};
//-----------------------------------------------------------------------------
// Window_EquipCommand
//
// The window for selecting a command on the equipment screen.
_.Window_EquipCommand_maxCols = Window_EquipCommand.prototype.maxCols;
Window_EquipCommand.prototype.maxCols = function () {
let cols = _.Window_EquipCommand_maxCols.call(this);
cols += _.IncludeInEquip == "true" ? 1 : 0;
return cols;
};
_.Window_EquipCommand_makeCommandList = Window_EquipCommand.prototype.makeCommandList;
Window_EquipCommand.prototype.makeCommandList = function () {
_.Window_EquipCommand_makeCommandList.call(this);
if (_.IncludeInEquip == "true")
this.addCommand(_.CancelCommandName, _.CancelCommandName);
};
_.Window_EquipCommand_processOk = Window_EquipCommand.prototype.processOk;
Window_EquipCommand.prototype.processOk = function () {
var index = this.index();
var symbol = this.commandSymbol(index);
if (symbol.contains(_.CancelCommandName))
this.processCancel();
else {
_.Window_EquipCommand_processOk.call(this);
}
};
//-----------------------------------------------------------------------------
// Window_EquipSlot
//
// The window for selecting an equipment slot on the equipment screen.
_.Window_EquipSlot_maxItems = Window_EquipSlot.prototype.maxItems;
Window_EquipSlot.prototype.maxItems = function () {
let max = _.Window_EquipSlot_maxItems.call(this);
max += _.IncludeInEquip == "true" ? 1 : 0;
return max;
};
_.Window_EquipSlot_drawItem = Window_EquipSlot.prototype.drawItem;
Window_EquipSlot.prototype.drawItem = function (index) {
if (this._actor && index == this._actor.equipSlots().length) {
var rect = this.itemRectForText(index);
this.changeTextColor(this.textColor(0));
this.changePaintOpacity(true);
this.drawText(_.CancelCommandName, rect.x, rect.y, 138, this.lineHeight());
}
else
_.Window_EquipSlot_drawItem.call(this, index);
};
_.Window_EquipSlot_processOk = Window_EquipSlot.prototype.processOk;
Window_EquipSlot.prototype.processOk = function () {
if (!this.slotName(this.index())) {
this.processCancel();
}
else {
_.Window_EquipSlot_processOk.call(this);
}
};
//-----------------------------------------------------------------------------
// Window_Status
//
// The window for displaying full status on the status screen.
_.Window_Status_initialize = Window_Status.prototype.initialize;
Window_Status.prototype.initialize = function () {
_.Window_Status_initialize.call(this);
if (_.IncludeInStatus == "true")
this.setHandler('ok', this.processCancel.bind(this));
};
_.Window_Status_refresh = Window_Status.prototype.refresh;
Window_Status.prototype.refresh = function () {
_.Window_Status_refresh.call(this);
if (this._actor && _.IncludeInStatus == "true") {
var lineHeight = this.lineHeight();
this.drawText(_.CancelCommandName, 6, lineHeight * 15);
}
};
Window_Status.prototype.processOk = function () {
this.callOkHandler();
};
//-----------------------------------------------------------------------------
// Window_Options
//
// The window for changing various settings on the options screen.
_.Window_Options_makeCommandList = Window_Options.prototype.makeCommandList;
Window_Options.prototype.makeCommandList = function () {
if (_.IncludeInOptions == "true")
this.addCommand(_.CancelCommandName, 'cancel');
_.Window_Options_makeCommandList.call(this);
};
_.Window_Options_statusText = Window_Options.prototype.statusText;
Window_Options.prototype.statusText = function (index) {
var symbol = this.commandSymbol(index);
if (symbol.contains("cancel"))
return "";
return _.Window_Options_statusText.call(this, index);
};
_.Window_Options_processOk = Window_Options.prototype.processOk;
Window_Options.prototype.processOk = function () {
var index = this.index();
var symbol = this.commandSymbol(index);
if (symbol.contains("cancel"))
this.processCancel();
else
_.Window_Options_processOk.call(this);
};
//-----------------------------------------------------------------------------
// Window_SavefileList
//
// The window for selecting a save file on the save and load screens.
_.Window_SavefileList_maxItems = Window_SavefileList.prototype.maxItems;
Window_SavefileList.prototype.maxItems = function () {
let max = _.Window_SavefileList_maxItems.call(this);
max += _.IncludeInSave == "true"? 1 : 0;
return max;
};
_.Window_SavefileList_drawItem = Window_SavefileList.prototype.drawItem;
Window_SavefileList.prototype.drawItem = function (index) {
if (_.IncludeInSave == "true" && index == this.maxItems() - 1) {
var rect = this.itemRectForText(index);
this.changeTextColor(this.textColor(0));
this.changePaintOpacity(true);
this.drawText(_.CancelCommandName, rect.x, rect.y, 180);
}
else
_.Window_SavefileList_drawItem.call(this, index);
};
_.Scene_Save_onSavefileOk = Scene_Save.prototype.onSavefileOk;
Scene_Save.prototype.onSavefileOk = function () {
if (_.IncludeInSave == "true" && this._listWindow.index() == this._listWindow.maxItems() - 1) {
SoundManager.playCancel();
this.popScene();
}
else
_.Scene_Save_onSavefileOk.call(this);
};
_.Scene_Load_onSavefileOk = Scene_Load.prototype.onSavefileOk;
Scene_Load.prototype.onSavefileOk = function () {
if (_.IncludeInSave == "true" && this._listWindow.index() == this._listWindow.maxItems() - 1) {
SoundManager.playCancel();
this.popScene();
}
else
_.Scene_Load_onSavefileOk.call(this);
};
//-----------------------------------------------------------------------------
// Window_MenuStatus
//
// The window for displaying party member status on the menu screen.
_.Window_MenuStatus_maxItems = Window_MenuStatus.prototype.maxItems;
Window_MenuStatus.prototype.maxItems = function () {
if (_.IncludeInParty == "true") {
return $gameParty.size() + 1;
}
return _.Window_MenuStatus_maxItems.call(this);
};
_.Window_MenuStatus_drawItem = Window_MenuStatus.prototype.drawItem;
Window_MenuStatus.prototype.drawItem = function (index) {
if ($gameParty.members()[index]) {
_.Window_MenuStatus_drawItem.call(this, index);
}
else {
var rect = this.itemRect(index);
var x = rect.x + 162;
var y = rect.y + rect.height / 2 - this.lineHeight() * 1.5;
this.drawText(_.CancelCommandName, x, y, rect.width, 'left');
}
};
_.Window_MenuStatus_processOk = Window_MenuStatus.prototype.processOk;
Window_MenuStatus.prototype.processOk = function () {
if ($gameParty.members()[this._index]) {
_.Window_MenuStatus_processOk.call(this);
}
else {
this.processCancel();
}
};
//-----------------------------------------------------------------------------
// Window_ShopBuy
//
// The window for selecting an item to buy on the shop screen.
_.Window_ShopBuy_makeItemList = Window_ShopBuy.prototype.makeItemList;
Window_ShopBuy.prototype.makeItemList = function () {
_.Window_ShopBuy_makeItemList.call(this);
if (_.IncludeInShop == "true")
this._data.push(_.CancelCommandName);
};
_.Window_ShopBuy_drawItem = Window_ShopBuy.prototype.drawItem;
Window_ShopBuy.prototype.drawItem = function (index) {
var item = this._data[index];
var rect = this.itemRect(index);
var priceWidth = 96;
rect.width -= this.textPadding();
if (item == _.CancelCommandName) {
var iconBoxWidth = Window_Base._iconWidth + 4;
this.resetTextColor();
this.drawText(_.CancelCommandName, rect.x + iconBoxWidth, rect.y, rect.width - iconBoxWidth);
}
else
_.Window_ShopBuy_drawItem.call(this, index);
};
_.Window_ShopBuy_processOk = Window_ShopBuy.prototype.processOk;
Window_ShopBuy.prototype.processOk = function () {
if (this.item() != null && this.item() == _.CancelCommandName) {
this.processCancel();
}
else {
_.Window_ShopBuy_processOk.call(this);
}
};
//-----------------------------------------------------------------------------
// Window_ShopNumber
//
// The window for inputting quantity of items to buy or sell on the shop
// screen.
_.Window_ShopNumber_setup = Window_ShopNumber.prototype.setup;
Window_ShopNumber.prototype.setup = function (item, max, price) {
this._item = item;
this._max = Math.floor(max);
this._price = price;
this._number = 0; // changed from 1 to 0
this.placeButtons();
this.updateButtonsVisiblity();
this.refresh();
};
_.WindowWindow_ShopNumber_changeNumber = Window_ShopNumber.prototype.changeNumber;
Window_ShopNumber.prototype.changeNumber = function (amount) {
var lastNumber = this._number;
this._number = (this._number + amount).clamp(0, this._max); // changed the clamp from 1 to 0
if (this._number !== lastNumber) {
SoundManager.playCursor();
this.refresh();
}
};
})(BGS.MenusCancelCommand);