//=============================================================================
// NonCombatMenu.js
//=============================================================================
var Imported = Imported || {};
Imported.NonCombatMenu = true;
var NCMenu = NCMenu || {};
/*:
* @plugindesc Fully customizable menu geared toward less battle-oriented games.
* @author mjshi
*
* @param ---Main Menu---
* @desc
* @default
*
* @param Menu Order
* @desc Format is "Name: keyword". Keywords: item equip status formation save load options toTitle cancel quest
* @default Item: item, Status: status, Save: save, Quit: toTitle
*
* @param Background Image
* @desc Background image of the main menu. If undefined, is black. PNG file must be in /img/pictures.
* @default
*
* @param Persistent Background
* @desc yes/no: Background image persists throughout all the sub-menus.
* @default no
*
* @param Menu Background Opacity
* @desc Ranges from 0 to 255. 0 for opaque, 255 for transparent.
* @default 128
*
* @param ---Item Menu---
* @desc
* @default
*
* @param Number of Tabs
* @desc How many tabs are you showing? (minimum # of tabs is the # of "yes"es in this section)
* @default 2
*
* @param Show Consumables
* @desc yes/no: Show a tab for consumable items?
* @default yes
*
* @param Show Key Items
* @desc yes/no: Show a tab for key items?
* @default yes
*
* @param Show Weapons
* @desc yes/no: Show a tab for weapons?
* @default no
*
* @param Show Armors
* @desc yes/no: Show a tab for armors?
* @default no
*
* @param Description Placement
* @desc Where should the description window be placed? 0 = top, 1 = middle, 2 = bottom.
* @default 0
*
* @param ---Gold Window---
* @desc
* @default
*
* @param Show Gold Window
* @desc yes/no: Should the gold window be shown in the item menu?
* @default yes
*
* @param Gold Window Position
* @desc left/right: Where should it be shown?
* @default left
*
* @param Gold Window Width
* @desc How wide should the gold window be? (in pixels- 240 is default.)
* @default 240
*
* @param ---Backgrounds---
* @desc
* @default
*
* @param Item Screen BG
* @desc Background of the items screen. If undefined, is black. PNG file must be in /img/pictures.
* @default
*
* @param Equip Screen BG
* @desc Background of the equip screen. If undefined, is black. PNG file must be in /img/pictures.
* @default
*
* @param Status Screen BG
* @desc Background of the equip screen. If undefined, is black. PNG file must be in /img/pictures.
* @default
*
* @param Save Screen BG
* @desc Background of the save screen. If undefined, is black. PNG file must be in /img/pictures.
* @default
*
* @param Load Screen BG
* @desc Background of the load screen. If undefined, is black. PNG file must be in /img/pictures.
* @default
*
* @param Options Screen BG
* @desc Background of the options screen. If undefined, is black. PNG file must be in /img/pictures.
* @default
*
* @help
* ----------------------------------------------------------------------------
* Non-Combat Menu v1.01 by mjshi
* Free for both commercial and non-commercial use, with credit.
* ----------------------------------------------------------------------------
*
* > Update v1.0b
* - Added support for Yanfly Item Core (place the NonCombatMenu below it)
*
* > Update v1.01
* - Added support for backgrounds.
*
* > Update v1.01a
* - Made it so backgrounds actually work and didn't error xD
*
* > Is something broken? Go to http://mjshi.weebly.com/contact.html and I'll
* try my best to help you!
*
*/
NCMenu.Parameters = PluginManager.parameters('NonCombatMenu');
NCMenu.menuList = (String(NCMenu.Parameters['Menu Order'])).split(", ");
for (var i = 0; i < NCMenu.menuList.length; i++) {
NCMenu.menuList[i] = NCMenu.menuList[i].split(": ");
}
NCMenu.backgroundImage = (String(NCMenu.Parameters['Background Image'])).replace(".png", "");
NCMenu.persistentBG = (String(NCMenu.Parameters['Persistent Background']) == "yes");
NCMenu.menuDim = Number(NCMenu.Parameters['Menu Background Opacity']);
NCMenu.tabsShown = Number(NCMenu.Parameters['Number of Tabs']);
NCMenu.showConsumables = (String(NCMenu.Parameters['Show Consumables']) == "yes");
NCMenu.showKeyItems = (String(NCMenu.Parameters['Show Key Items']) == "yes");
NCMenu.showWeapons = (String(NCMenu.Parameters['Show Weapons']) == "yes");
NCMenu.showArmors = (String(NCMenu.Parameters['Show Armors']) == "yes");
NCMenu.descrPlacement = Number(NCMenu.Parameters['Description Placement']);
NCMenu.showGoldWindow = (String(NCMenu.Parameters['Show Gold Window']) == "yes");
NCMenu.goldWindowAlignRight = (String(NCMenu.Parameters['Gold Window Position']) == "right");
NCMenu.goldWindowWidth = Number(NCMenu.Parameters['Gold Window Width']);
NCMenu.itemBG = (String(NCMenu.Parameters['Item Screen BG'])).replace(".png", "");
NCMenu.equipBG = (String(NCMenu.Parameters['Equip Screen BG'])).replace(".png", "");
NCMenu.statusBG = (String(NCMenu.Parameters['Status Screen BG'])).replace(".png", "");
NCMenu.saveBG = (String(NCMenu.Parameters['Save Screen BG'])).replace(".png", "");
NCMenu.loadBG = (String(NCMenu.Parameters['Load Screen BG'])).replace(".png", "");
NCMenu.optionsBG = (String(NCMenu.Parameters['Options Screen BG'])).replace(".png", "");
//=============================================================================
// Scene_NCMenu
//=============================================================================
function Scene_NCMenu() {
this.initialize.apply(this, arguments);
}
Scene_NCMenu.prototype = Object.create(Scene_MenuBase.prototype);
Scene_NCMenu.prototype.constructor = Scene_NCMenu;
Scene_NCMenu.prototype.initialize = function() {
Scene_MenuBase.prototype.initialize.call(this);
};
Scene_NCMenu.prototype.create = function() {
Scene_MenuBase.prototype.create.call(this);
this.createCommandWindow();
this.createInvisibleFormationWindow();
};
Scene_NCMenu.prototype.stop = function() {
Scene_MenuBase.prototype.stop.call(this);
this._commandWindow.close();
};
Scene_NCMenu.prototype.createBackground = function() {
Scene_MenuBase.prototype.createBackground.call(this);
if (NCMenu.backgroundImage) {
this._background = new Sprite(ImageManager.loadPicture(NCMenu.backgroundImage));
this._background.opacity = NCMenu.menuDim;
this.addChild(this._background);
}
else {
this.setBackgroundOpacity(NCMenu.menuDim)
}
};
Scene_NCMenu.prototype.createCommandWindow = function() {
this._commandWindow = new Window_NCMenu();
var method;
for (var i = 0; i < NCMenu.menuList.length; i++) {
method = NCMenu.menuList[i][1];
if (method == 'cancel') {continue}
this._commandWindow.setHandler(method, eval(String("this.command" + method.charAt(0).toUpperCase() + method.slice(1) + ".bind(this)")));
}
this._commandWindow.setHandler('cancel', this.popScene.bind(this));
this.addWindow(this._commandWindow);
};
Scene_NCMenu.prototype.createInvisibleFormationWindow = function() {
this._statusWindow = new Window_MenuStatus((Graphics.boxWidth - Window_MenuStatus.prototype.windowWidth()) / 2, 0);
this._statusWindow.hide();
this._statusWindow.deactivate();
this.addWindow(this._statusWindow);
};
Scene_NCMenu.prototype.commandItem = function() {
SceneManager.push(Scene_Item);
};
if (NCMenu.persistentBG) {
Scene_Item.prototype.createBackground = Scene_NCMenu.prototype.createBackground
}
else {
Scene_Item.prototype.createBackground = function() {
Scene_MenuBase.prototype.createBackground.call(this);
if (NCMenu.itemBG) {
console.log("has run");
this._background = new Sprite(ImageManager.loadPicture(NCMenu.itemBG));
this._background.opacity = NCMenu.menuDim;
this.addChild(this._background);
}
else {
console.log("hasn't run");
this.setBackgroundOpacity(NCMenu.menuDim)
}
}
}
Scene_NCMenu.prototype.commandEquip = function() {
SceneManager.push(Scene_Equip);
};
if (NCMenu.persistentBG) {
Scene_Equip.prototype.createBackground = Scene_NCMenu.prototype.createBackground
}
else {
Scene_Equip.prototype.createBackground = function() {
Scene_MenuBase.prototype.createBackground.call(this);
if (NCMenu.equipBG) {
this._background = new Sprite(ImageManager.loadPicture(NCMenu.equipBG));
this._background.opacity = NCMenu.menuDim;
this.addChild(this._background);
}
else {
this.setBackgroundOpacity(NCMenu.menuDim)
}
}
}
Scene_NCMenu.prototype.commandStatus = function() {
SceneManager.push(Scene_Status);
};
if (NCMenu.persistentBG) {
Scene_Status.prototype.createBackground = Scene_NCMenu.prototype.createBackground
}
else {
Scene_Status.prototype.createBackground = function() {
Scene_MenuBase.prototype.createBackground.call(this);
if (NCMenu.statusBG) {
this._background = new Sprite(ImageManager.loadPicture(NCMenu.statusBG));
this._background.opacity = NCMenu.menuDim;
this.addChild(this._background);
}
else {
this.setBackgroundOpacity(NCMenu.menuDim)
}
}
}
Scene_NCMenu.prototype.commandQuest = function() {
SceneManager.push(Scene_Quest);
};
Scene_NCMenu.prototype.commandSave = function() {
SceneManager.push(Scene_Save);
};
if (NCMenu.persistentBG) {
Scene_Save.prototype.createBackground = Scene_NCMenu.prototype.createBackground
}
else {
Scene_Save.prototype.createBackground = function() {
Scene_MenuBase.prototype.createBackground.call(this);
if (NCMenu.saveBG) {
this._background = new Sprite(ImageManager.loadPicture(NCMenu.saveBG));
this._background.opacity = NCMenu.menuDim;
this.addChild(this._background);
}
else {
this.setBackgroundOpacity(NCMenu.menuDim)
}
}
}
Scene_NCMenu.prototype.commandOptions = function() {
SceneManager.push(Scene_Options);
};
if (NCMenu.persistentBG) {
Scene_Options.prototype.createBackground = Scene_NCMenu.prototype.createBackground
}
else {
Scene_Options.prototype.createBackground = function() {
Scene_MenuBase.prototype.createBackground.call(this);
if (NCMenu.optionsBG) {
this._background = new Sprite(ImageManager.loadPicture(NCMenu.optionsBG));
this._background.opacity = NCMenu.menuDim;
this.addChild(this._background);
}
else {
this.setBackgroundOpacity(NCMenu.menuDim)
}
}
}
Scene_NCMenu.prototype.commandToTitle = function() {
this.fadeOutAll();
SceneManager.goto(Scene_Title);
};
Scene_NCMenu.prototype.commandLoad = function() {
SceneManager.push(Scene_Load);
};
if (NCMenu.persistentBG) {
Scene_Load.prototype.createBackground = Scene_NCMenu.prototype.createBackground
}
else {
Scene_Load.prototype.createBackground = function() {
Scene_MenuBase.prototype.createBackground.call(this);
if (NCMenu.loadBG) {
this._background = new Sprite(ImageManager.loadPicture(NCMenu.loadBG));
this._background.opacity = NCMenu.menuDim;
this.addChild(this._background);
}
else {
this.setBackgroundOpacity(NCMenu.menuDim)
}
}
}
Scene_NCMenu.prototype.commandFormation = function() {
this._commandWindow.hide();
this._commandWindow.deactivate();
this._statusWindow.setFormationMode(true);
this._statusWindow.selectLast();
this._statusWindow.show();
this._statusWindow.activate();
this._statusWindow.setHandler('ok', this.onFormationOk.bind(this));
this._statusWindow.setHandler('cancel', this.onFormationCancel.bind(this));
};
Scene_NCMenu.prototype.onFormationOk = function() {
var index = this._statusWindow.index();
var actor = $gameParty.members()[index];
var pendingIndex = this._statusWindow.pendingIndex();
if (pendingIndex >= 0) {
$gameParty.swapOrder(index, pendingIndex);
this._statusWindow.setPendingIndex(-1);
this._statusWindow.redrawItem(index);
} else {
this._statusWindow.setPendingIndex(index);
}
this._statusWindow.activate();
};
Scene_NCMenu.prototype.onFormationCancel = function() {
if (this._statusWindow.pendingIndex() >= 0) {
this._statusWindow.setPendingIndex(-1);
this._statusWindow.activate();
} else {
this._statusWindow.deselect();
this._statusWindow.hide();
this._commandWindow.show();
this._commandWindow.activate();
}
};
//=============================================================================
// Window_NCMenu
//=============================================================================
function Window_NCMenu() {
this.initialize.apply(this, arguments);
}
Window_NCMenu.prototype = Object.create(Window_Command.prototype);
Window_NCMenu.prototype.constructor = Window_NCMenu;
Window_NCMenu.prototype.initialize = function() {
Window_Command.prototype.initialize.call(this, 0, 0);
this.updatePlacement();
this.openness = 0;
this.open();
};
Window_NCMenu.prototype.windowWidth = function() {
return 240;
};
Window_NCMenu.prototype.updatePlacement = function() {
this.x = (Graphics.boxWidth - this.width) / 2;
this.y = (Graphics.boxHeight - this.height) / 2;
};
Window_NCMenu.prototype.makeCommandList = function() {
for (var i = 0; i < NCMenu.menuList.length; i++) {
this.addCommand(NCMenu.menuList[i][0], NCMenu.menuList[i][1]);
}
};
//=============================================================================
// Scene_Map - changed to call NCMenu rather than original menu screen
//=============================================================================
Scene_Map.prototype.callMenu = function() {
SoundManager.playOk();
SceneManager.push(Scene_NCMenu);
Window_MenuCommand.initCommandPosition();
$gameTemp.clearDestination();
this._mapNameWindow.hide();
this._waitCount = 2;
};
if (!Imported.YEP_ItemCore) {
//=============================================================================
// Window_ItemCategory - changed to accept NCMenu parameters
//=============================================================================
Window_ItemCategory.prototype.windowWidth = function() {
if (NCMenu.showGoldWindow) {
return Graphics.boxWidth - NCMenu.goldWindowWidth;
} else {
return Graphics.boxWidth;
}
};
Window_ItemCategory.prototype.maxCols = function() {
return NCMenu.tabsShown;
};
Window_ItemCategory.prototype.makeCommandList = function() {
if (NCMenu.showConsumables) {this.addCommand(TextManager.item, 'item')}
if (NCMenu.showWeapons) {this.addCommand(TextManager.weapon, 'weapon')}
if (NCMenu.showArmors) {this.addCommand(TextManager.armor, 'armor')}
if (NCMenu.showKeyItems) {this.addCommand(TextManager.keyItem, 'keyItem')}
};
//=============================================================================
// Window_Gold - changed to accept NCMenu parameters
//=============================================================================
Window_Gold.prototype.windowWidth = function() {
return NCMenu.goldWindowWidth;
};
//=============================================================================
// Scene_Item - changed to accept NCMenu parameters
//=============================================================================
Scene_Item.prototype.create = function() {
Scene_ItemBase.prototype.create.call(this);
this.createHelpWindow();
if (NCMenu.showGoldWindow) {this.createGoldWindow()}
this.createCategoryWindow();
this.createItemWindow();
this.createActorWindow();
};
Scene_Item.prototype.createCategoryWindow = function() {
this._categoryWindow = new Window_ItemCategory();
this._categoryWindow.setHelpWindow(this._helpWindow);
if (NCMenu.showGoldWindow && !NCMenu.goldWindowAlignRight) {this._categoryWindow.x = NCMenu.goldWindowWidth}
if (NCMenu.descrPlacement == 1) {
this._helpWindow.y = this._categoryWindow.height;
}
else if (NCMenu.descrPlacement == 2) {
this._helpWindow.y = Graphics.boxHeight - this._helpWindow.height;
}
else {
if (NCMenu.showGoldWindow) {this._goldWindow.y = this._helpWindow.height}
this._categoryWindow.y = this._helpWindow.height;
}
this._categoryWindow.setHandler('ok', this.onCategoryOk.bind(this));
this._categoryWindow.setHandler('cancel', this.popScene.bind(this));
this.addWindow(this._categoryWindow);
};
Scene_Item.prototype.createItemWindow = function() {
if (NCMenu.descrPlacement == 1) {
wy = this._categoryWindow.y + this._categoryWindow.height + this._helpWindow.height;
}
else if (NCMenu.descrPlacement == 2) {
wy = this._categoryWindow.height + this._helpWindow.height;
} else {
wy = this._categoryWindow.y + this._categoryWindow.height;
}
var wh = Graphics.boxHeight - wy;
this._itemWindow = new Window_ItemList(0, wy, Graphics.boxWidth, wh);
if (NCMenu.descrPlacement == 2) {this._itemWindow.y = this._categoryWindow.height};
this._itemWindow.setHelpWindow(this._helpWindow);
this._itemWindow.setHandler('ok', this.onItemOk.bind(this));
this._itemWindow.setHandler('cancel', this.onItemCancel.bind(this));
this.addWindow(this._itemWindow);
this._categoryWindow.setItemWindow(this._itemWindow);
};
Scene_Item.prototype.createGoldWindow = function() {
this._goldWindow = new Window_Gold(0, 0);
if (NCMenu.goldWindowAlignRight) {this._goldWindow.x = Graphics.boxWidth - NCMenu.goldWindowWidth}
this.addWindow(this._goldWindow);
};
};
//=============================================================================
// Window_Status - Streamlined
//=============================================================================
Window_Status.prototype.initialize = function() {
var width = 440;
var height = 180;
Window_Selectable.prototype.initialize.call(this, (Graphics.boxWidth - width) / 2, (Graphics.boxHeight - height) / 2, width, height);
this.refresh();
this.activate();
};
Window_Status.prototype.refresh = function() {
this.contents.clear();
if (this._actor) {
var lineHeight = this.lineHeight();
this.drawBlock2(0);
}
};
Window_Status.prototype.drawBlock2 = function(y) {
this.drawActorFace(this._actor, 12, y);
this.drawBasicInfo(204, y);
this.drawExpInfo(456, y);
};
Window_Status.prototype.drawBasicInfo = function(x, y) {
var lineHeight = this.lineHeight();
this.drawActorName(this._actor, x, y + lineHeight * 0.5);
this.drawActorHp(this._actor, x, y + lineHeight * 1.5);
this.drawActorMp(this._actor, x, y + lineHeight * 2.5);
};