// // ステートヘルプ ver1.03 // // ------------------------------------------------------ // Copyright (c) 2016 Yana // Released under the MIT license // http://opensource.org/licenses/mit-license.php // ------------------------------------------------------ // // author Yana // var Imported = Imported || {}; Imported['StateHelp'] = 1.03; /*: @plugindesc ver1.03/Add help to states and a mechanism to view state details. @author Yana @url https://github.com/munokura/Yana-MV-plugins @license MIT License @help English Help Translator: munokura This is an unofficial English translation of the plugin help, created to support global RPG Maker users. Feedback is welcome to improve translation quality (see: https://github.com/munokura/Yana-MV-plugins ). Original plugin by Yana. ----- There are no plugin commands. ------------------------------------------------------ ------------------------------------------------------ How to Set Up ----------------------------------------------------- You can set a description for a state by writing the following in the state's Note field: State Description You can set a description for that state by writing the following in the state's Note field: ------------------------------------------------------ Specifications ----------------------------------------------------- During battle, when an actor command or party command is active, you can call up the state help window by clicking the left side of the screen. This setting can be disabled by setting UseTouchCall to false. The state help window can also be closed by clicking outside the state help window. ------------------------------------------------------ Terms of Use ----------------------------------------------------- This plugin is released under the MIT license. http://opensource.org/licenses/mit-license.php ------------------------------------------------------ Update History: ver. 1.03: Changed the terms of use to the MIT License. Fixed a bug that caused enemies to appear when invoked from the menu. ver. 1.02: Fixed processing to prevent conflicts with YEP_X_BattleSysATB. ver. 1.01: Fixed a bug that caused hidden enemies to appear. ver. 1.00: Released */ /*:ja @plugindesc ver1.03/ステートにヘルプを付け、ステートの詳細を見るための仕組みを追加します。 @author Yana @url https://github.com/munokura/Yana-MV-plugins @license MIT License @help プラグインコマンドはありません。 ------------------------------------------------------ ------------------------------------------------------ 設定方法 ------------------------------------------------------ ステートのメモ欄に <ステートヘルプ> ステートの解説 または、 ステートの解説 と記述することで、そのステートに説明を設定することができます。 ------------------------------------------------------ 仕様 ------------------------------------------------------ 戦闘中、アクターコマンドまたはパーティコマンドがアクティブな状態で、画面の左側をクリックすることで、 ステートヘルプウィンドウを呼び出すことができます。 この設定は、UseTouchCallをfalseにすることで無効化できます。 ステートヘルプウィンドウは、ステートヘルプウィンドウ以外の領域をクリックすることでも、閉じることができます。 ------------------------------------------------------ 利用規約 ------------------------------------------------------ 当プラグインはMITライセンスで公開されています。 http://opensource.org/licenses/mit-license.php ------------------------------------------------------ 更新履歴: ver1.03: 利用規約をMITライセンスに変更 メニューで呼び出した際にエネミーが表示されるバグを修正 ver1.02: YEP_X_BattleSysATBと競合しないように処理を修正 ver1.01: 隠れているエネミーが表示されていたバグを修正 ver1.00: 公開 */ (function () { var parameters = PluginManager.parameters('StateHelp'); var stateHelpText = String(parameters['State Help Text']); var callStateWindowKey = String(parameters['Call State Window Key']); var useTouchCall = String(parameters['Use Touch Call']) === 'true'; var addMenuStateHelp = String(parameters['Add Menu State Help']) === 'true'; var touchCallRect = String(parameters['Touch Call Rect'] || '0,0,128,444'); var buffHelp = [ String(parameters['Debuff Help HP2'] || '最大HPが50%減少します。'), String(parameters['Debuff Help HP1'] || '最大HPが25%減少します。'), String(parameters['Buff Help HP1'] || '最大HPが25%上昇します。'), String(parameters['Buff Help HP2'] || '最大HPが50%上昇します。'), String(parameters['Debuff Help MP2'] || '最大MPが50%減少します。'), String(parameters['Debuff Help MP1'] || '最大MPが25%減少します。'), String(parameters['Buff Help MP1'] || '最大MPが25%上昇します。'), String(parameters['Buff Help MP2'] || '最大MPが50%上昇します。'), String(parameters['Debuff Help ATK2'] || '攻撃力が50%減少します。'), String(parameters['Debuff Help ATK1'] || '攻撃力が25%減少します。'), String(parameters['Buff Help ATK1'] || '攻撃力が25%上昇します。'), String(parameters['Buff Help ATK2'] || '攻撃力が50%上昇します。'), String(parameters['Debuff Help DEF2'] || '防御力が50%減少します。'), String(parameters['Debuff Help DEF1'] || '防御力が25%減少します。'), String(parameters['Buff Help DEF1'] || '防御力が25%上昇します。'), String(parameters['Buff Help DEF2'] || '防御力が50%上昇します。'), String(parameters['Debuff Help MAT2'] || '魔法力が50%減少します。'), String(parameters['Debuff Help MAT1'] || '魔法力が25%減少します。'), String(parameters['Buff Help MAT1'] || '魔法力が25%上昇します。'), String(parameters['Buff Help MAT2'] || '魔法力が50%上昇します。'), String(parameters['Debuff Help MDF2'] || '魔法防御が50%減少します。'), String(parameters['Debuff Help MDF1'] || '魔法防御が25%減少します。'), String(parameters['Buff Help MDF1'] || '魔法防御が25%上昇します。'), String(parameters['Buff Help MDF2'] || '魔法防御が50%上昇します。'), String(parameters['Debuff Help AGI2'] || '敏捷性が50%減少します。'), String(parameters['Debuff Help AGI1'] || '敏捷性が25%減少します。'), String(parameters['Buff Help AGI1'] || '敏捷性が25%上昇します。'), String(parameters['Buff Help AGI2'] || '敏捷性が50%上昇します。'), String(parameters['Debuff Help LUK2'] || '運が50%減少します。'), String(parameters['Debuff Help LUK1'] || '運が25%減少します。'), String(parameters['Buff Help LUK1'] || '運が25%上昇します。'), String(parameters['Buff Help LUK2'] || '運が50%上昇します。') ] function Window_StateHelp() { this.initialize.apply(this, arguments); } Window_StateHelp.prototype = Object.create(Window_Selectable.prototype); Window_StateHelp.prototype.constructor = Window_StateHelp; Window_StateHelp.prototype.initialize = function () { this._posY = 120; var width = this.windowWidth(); var height = this.windowHeight(); var x = (Graphics.boxWidth - width) / 2; var y = this.posY(); this._topCol = 0; Window_Selectable.prototype.initialize.call(this, x, y, width, height); this.refresh(); this.openness = 0; this._subIndex = 0; }; Window_StateHelp.prototype.posY = function () { return this._posY; }; Window_StateHelp.prototype.windowWidth = function () { return 134 + this.fittingWidth(Math.max(Math.min(this.maxIcons(), this.numVisibleCols()), 1)); }; Window_StateHelp.prototype.numVisibleCols = function () { return 16; }; Window_StateHelp.prototype.fittingWidth = function (numCols) { return numCols * this.itemWidth() + this.standardPadding() * 2; }; Window_StateHelp.prototype.windowHeight = function () { return this.fittingHeight(this.numVisibleRows()); }; Window_StateHelp.prototype.fittingHeight = function (numLines) { return numLines * this.itemHeight() + this.standardPadding() * 2; }; Window_StateHelp.prototype.numVisibleRows = function () { return Math.min(this.maxItems(), 7); }; Window_StateHelp.prototype.maxItems = function () { return this.allBattleMembers().length; }; Window_StateHelp.prototype.allBattleMembers = function () { var members = []; if ($gameParty.inBattle()) { members = BattleManager.allBattleMembers().filter(function (obj) { return obj.isAppeared() }); } else { members = $gameParty.members(); } return members; }; Window_StateHelp.prototype.maxPageRows = function () { return Math.min(this.maxItems(), 7); }; Window_StateHelp.prototype.itemWidth = function () { return 40; }; Window_StateHelp.prototype.itemHeight = function () { return 40; }; Window_StateHelp.prototype.maxIcons = function () { var n = 0; for (var i = 0; i < this.maxItems(); i++) { var chr = BattleManager.allBattleMembers()[i]; if (n < chr.allIcons().length) { n = chr.allIcons().length } } return n; }; Window_StateHelp.prototype.maxColItems = function () { return this.maxColIndex(this.index()); }; Window_StateHelp.prototype.maxColIndex = function (index) { var character = BattleManager.allBattleMembers()[index]; if (!character) { return 1 } return Math.max(character.allIcons().length, 1); }; Window_StateHelp.prototype.maxTopCols = function () { return Math.max(this.numVisibleCols - this.maxColIndex(), 0); }; Window_StateHelp.prototype.colWidth = function (index) { return (this.maxColIndex(index) - 1) * this.itemWidth(); }; Window_StateHelp.prototype.adjustWindowSize = function () { this.width = this.windowWidth(); this.height = this.windowHeight(); this.x = (Graphics.boxWidth - this.width) / 2; this.y = this.posY(); }; Window_StateHelp.prototype.itemRect = function (index) { var rect = Window_Selectable.prototype.itemRect.call(this, index); rect.x += 130 + (this.itemWidth() * (this._subIndex - this._topCol)); return rect; }; Window_StateHelp.prototype.updateHelp = function () { Window_Selectable.prototype.updateHelp.call(this); var character = BattleManager.allBattleMembers()[this.index()]; if (character) { var states = character.addedShowStates(); var buffs = character.addedShowBuffs(); var text = ''; if (this._subIndex < states.length) { text = DataManager.getStateHelp(states[this._subIndex]); } else if (this._subIndex < (states.length + buffs.length)) { var buff = buffs[this._subIndex - states.length]; text = DataManager.getBuffHelp(buff); } this._helpWindow.setText(text); } else { this._helpWindow.setText(''); } }; Window_StateHelp.prototype.checkTopCol = function () { if (this._subIndex >= this.numVisibleCols()) { this._topCol = this._subIndex - this.numVisibleCols() + 1; this.refresh(); } else if (this._subIndex <= this._topCol) { this._topCol = this._subIndex; this.refresh(); } }; Window_StateHelp.prototype.select = function (index) { this.checkTopCol(); Window_Selectable.prototype.select.call(this, index); }; Window_StateHelp.prototype.initSelect = function () { this.select(0); this._subIndex = 0; this._lastSubIndex = this._subIndex; }; Window_StateHelp.prototype.cursorRight = function (wrap) { this._subIndex = (this._subIndex + 1) % this.maxColItems(); this.select(this.index()); }; Window_StateHelp.prototype.cursorLeft = function (wrap) { this._subIndex = (this._subIndex + (this.maxColItems() - 1)) % this.maxColItems(); this.select(this.index()); }; Window_StateHelp.prototype.cursorUp = function (wrap) { Window_Selectable.prototype.cursorUp.call(this, wrap); this._subIndex = Math.min(this._subIndex, this.maxColItems() - 1); this.select(this.index()); }; Window_StateHelp.prototype.cursorDown = function (wrap) { Window_Selectable.prototype.cursorDown.call(this, wrap); this._subIndex = Math.min(this._subIndex, this.maxColItems() - 1); this.select(this.index()); }; Window_StateHelp.prototype.processCursorMove = function () { Window_Selectable.prototype.processCursorMove.call(this); if (this._lastSubIndex !== this._subIndex) { if (this.active) { SoundManager.playCursor() } this._lastSubIndex = this._subIndex; } }; Window_StateHelp.prototype.scrollRight = function () { if (this._topCol + 1 < this.maxTopCols()) { this._topCol += 1; } }; Window_Selectable.prototype.scrollLeft = function () { if (this._topCol > 0) { this._topCol -= 1; } }; Window_StateHelp.prototype.onTouch = function (triggered) { var lastIndex = this.index(); var x = this.canvasToLocalX(TouchInput.x); var y = this.canvasToLocalY(TouchInput.y); var hitIndex = this.hitTest(x, y); if (hitIndex >= 0) { if (hitIndex === this.index()) { if (triggered && this.isTouchOkEnabled()) { this.processOk(); } } else if (this.isCursorMovable()) { this.select(hitIndex); } } else if (this._stayCount >= 10) { if (y < this.padding) { this.cursorUp(); } else if (y >= this.height - this.padding) { this.cursorDown(); } else if (x < 132) { this.cursorLeft(); } else if (x >= this.width - this.padding) { this.cursorRight(); } } if (this.index() !== lastIndex) { if (this.active) { SoundManager.playCursor() } } else if (this._subIndex !== this._lastSubIndex) { if (this.active) { SoundManager.playCursor() } this._lastSubIndex = this._subIndex; } }; Window_StateHelp.prototype.hitTest = function (x, y) { if (this.isContentsArea(x, y)) { var cx = x - this.padding; var cy = y - this.padding; var topIndex = this.topIndex(); for (var i = 0; i < this.maxPageItems(); i++) { var index = topIndex + i; if (index < this.maxItems()) { var rect = this.itemRect(index); var left = 132; var right = left + rect.width + this.colWidth(index); var bottom = rect.y + rect.height; if (cx >= left && cy >= rect.y && cx < right && cy < bottom) { this._subIndex = Math.floor((cx - 132) / this.itemWidth()) + this._topCol; this.select(index); return index; } } } } return -1; }; Window_StateHelp.prototype.drawItem = function (index) { var rect = this.itemRect(index); var character = this.allBattleMembers()[index]; //var rect = this.itemRectForText(index); var y = rect.y; var x = 0; var iw = this.itemWidth(); var c = Math.min(character.allIcons().length, this.numVisibleCols()); this.drawText(character.name(), x, y, 120); this.drawText(':', 120, y); for (var i = this._topCol; i < (c + this._topCol); i++) { var ii = i - this._topCol; this.drawIcon(character.allIcons()[i], x + iw * ii + 134, y + (iw - 32) / 2); } }; Window_StateHelp.prototype.refresh = function () { this.adjustWindowSize(); this.createContents(); Window_Selectable.prototype.refresh.call(this); }; /////////////////////////////////////////////////////////////////////////////////// DataManager.getStateHelp = function (state) { if (!state) { return '' } if (state.description) { return state.description } state.description = ''; var texts = state.note.split('\n'); var description = ''; var start = false; for (var i = 0; i < texts.length; i++) { var text = texts[i]; if (text.match(/^<\/ステートヘルプ>/) || text.match(/^<\/STATE_HELP>/)) { start = false; state.description = description; } else if (text.match(/^<ステートヘルプ>/) || text.match(/^/)) { start = true; } else if (start) { description += text + '\n'; } } return state.description; }; DataManager.getBuffHelp = function (buff) { if (!buff) { return '' } var n = buff[0] * 4 + buff[1] + 2; if (buff[1] > 0) { n -= 1 } return buffHelp[n]; }; /////////////////////////////////////////////////////////////////////////////////// Game_BattlerBase.prototype.addedShowStates = function () { return this.states().map(function (state) { return state; }).filter(function (state) { return state.iconIndex > 0; }); }; Game_BattlerBase.prototype.addedShowBuffs = function () { var result = []; for (var i = 0; i < this._buffs.length; i++) { if (this._buffs[i] !== 0) { result.push([i, this._buffs[i]]); } } return result; }; /////////////////////////////////////////////////////////////////////////////////// var _sHelp_WPCommand_makeCommandList = Window_PartyCommand.prototype.makeCommandList; Window_PartyCommand.prototype.makeCommandList = function () { _sHelp_WPCommand_makeCommandList.call(this); if (stateHelpText) { this.addCommand(stateHelpText, 'stateHelp') } }; /////////////////////////////////////////////////////////////////////////////////// var _sHelp_SBattle_createDisplayObjects = Scene_Battle.prototype.createDisplayObjects; Scene_Battle.prototype.createDisplayObjects = function () { _sHelp_SBattle_createDisplayObjects.call(this); this.createStateHelpWindow(); this._windowLayer.removeChild(this._helpWindow); this.addWindow(this._helpWindow); }; Scene_Battle.prototype.createStateHelpWindow = function () { this._stateHelpWindow = new Window_StateHelp(); this._stateHelpWindow.setHelpWindow(this._helpWindow); this._stateHelpWindow.setHandler('cancel', this.cancelStateHelp.bind(this)); this.addWindow(this._stateHelpWindow); }; var _sHelp_SBattle_createPartyCommandWindow = Scene_Battle.prototype.createPartyCommandWindow; Scene_Battle.prototype.createPartyCommandWindow = function () { _sHelp_SBattle_createPartyCommandWindow.call(this); this._partyCommandWindow.setHandler('stateHelp', this.commandStateHelp.bind(this)); }; Scene_Battle.prototype.commandStateHelp = function () { this._stateHelpWindow.refresh(); this._stateHelpWindow.initSelect(); this._stateHelpWindow.activate(); this._stateHelpWindow.open(); this._helpWindow.show(); this._callPhaseWindow = null; if (this._partyCommandWindow.isOpen()) this._activedCommand = 1; if (this._actorCommandWindow.isOpen()) this._activedCommand = 2; this._partyCommandWindow.deactivate(); this._actorCommandWindow.deactivate(); BattleManager._phase = 'input'; }; Scene_Battle.prototype.cancelStateHelp = function () { this._stateHelpWindow.deactivate(); this._stateHelpWindow.close(); this._helpWindow.hide(); if (BattleManager.isInputting()) { if (this._activedCommand === 1) { this._partyCommandWindow.activate(); } else if (this._activedCommand === 2) { this._actorCommandWindow.activate(); } /* if (BattleManager.actor()){ this._actorCommandWindow.activate(); }else{ this._partyCommandWindow.activate(); } */ } }; var _sHelp_SBattle_changeInputWindow = Scene_Battle.prototype.changeInputWindow; Scene_Battle.prototype.changeInputWindow = function () { if (!this._stateHelpWindow.active) { _sHelp_SBattle_changeInputWindow.call(this); } }; var _sHelp_SBattle_update = Scene_Battle.prototype.update; Scene_Battle.prototype.update = function () { _sHelp_SBattle_update.call(this); if (this._actorCommandWindow.active || this._partyCommandWindow.active) { if (Input.isTriggered(callStateWindowKey) || this.onTouchCallStateHelp()) { SoundManager.playOk(); this.commandStateHelp(); } } else if (this._stateHelpWindow.active) { if (this.onTouchCancelStateHelp()) { SoundManager.playCancel(); this.cancelStateHelp(); } } }; Scene_Battle.prototype.onTouchCallStateHelp = function () { if (!useTouchCall) { return false } if (TouchInput.isTriggered()) { var touchPos = touchCallRect.split(','); var x = TouchInput.x; var y = TouchInput.y; var ax = Number(touchPos[0]); var xw = ax + Number(touchPos[2]); var ay = Number(touchPos[1]); var yh = ay + Number(touchPos[3]); return x >= ax && x <= xw && y >= ay && y <= yh; } return false; }; Scene_Battle.prototype.onTouchCancelStateHelp = function () { if (TouchInput.isTriggered()) { var x = TouchInput.x; var y = TouchInput.y; var ax = this._stateHelpWindow.x; var xw = ax + this._stateHelpWindow.width; var ay = this._stateHelpWindow.y; var yh = ay + this._stateHelpWindow.height; return !(x >= ax && x <= xw && y >= ay && y <= yh); } return false; }; //////////////////////////////////////////////////////////////////////////////////// var _sHelp_WMCommand_addOriginalCommands = Window_MenuCommand.prototype.addOriginalCommands; Window_MenuCommand.prototype.addOriginalCommands = function () { _sHelp_WMCommand_addOriginalCommands.call(this); if (stateHelpText && addMenuStateHelp) { this.addCommand(stateHelpText, 'stateHelp', true) } }; /////////////////////////////////////////////////////////////////////////////////// var _sHelp_SMenu_createCommandWindow = Scene_Menu.prototype.createCommandWindow; Scene_Menu.prototype.createCommandWindow = function () { _sHelp_SMenu_createCommandWindow.call(this); this._commandWindow.setHandler('stateHelp', this.commandStateHelp.bind(this)); }; Scene_Menu.prototype.commandStateHelp = function () { SceneManager.push(Scene_StateHelp); }; /////////////////////////////////////////////////////////////////////////////////// function Scene_StateHelp() { this.initialize.apply(this, arguments); }; Scene_StateHelp.prototype = Object.create(Scene_MenuBase.prototype); Scene_StateHelp.prototype.constructor = Scene_StateHelp; Scene_StateHelp.prototype.create = function () { Scene_MenuBase.prototype.create.call(this); this.createAllWindows(); }; Scene_StateHelp.prototype.createAllWindows = function () { this.createHelpWindow(); this.createStateHelpWindow(); }; Scene_StateHelp.prototype.createStateHelpWindow = function () { this._stateHelpWindow = new Window_StateHelp(); this._stateHelpWindow.setHelpWindow(this._helpWindow); this._stateHelpWindow.setHandler('cancel', this.returnScene.bind(this)); this._stateHelpWindow.show(); this._stateHelpWindow.openness = 255; this._stateHelpWindow.initSelect(); this._stateHelpWindow.activate(); this._stateHelpWindow.y = (Graphics.boxHeight - this._helpWindow.height) / 2 - (this._stateHelpWindow.height / 2) + this._helpWindow.height; this._stateHelpWindow._posY = this._stateHelpWindow.y; this.addWindow(this._stateHelpWindow); }; Scene_StateHelp.prototype.returnScene = function () { this.popScene(this); }; Scene_StateHelp.prototype.update = function () { Scene_Base.prototype.update.call(this); if (this.onTouchCancelStateHelp()) { this.returnScene() } }; Scene_StateHelp.prototype.onTouchCancelStateHelp = function () { if (TouchInput.isTriggered()) { var x = TouchInput.x; var y = TouchInput.y; var ax = this._stateHelpWindow.x; var xw = ax + this._stateHelpWindow.width; var ay = this._stateHelpWindow.y; var yh = ay + this._stateHelpWindow.height; return !(x >= ax && x <= xw && y >= ay && y <= yh); } return false; }; }());