//============================================================================= // Yanfly Engine Plugins - Template // KeyboardConfig.js // Version: 1.00 //============================================================================= var Imported = Imported || {}; Imported.KeyboardConfig = true; var Yanfly = Yanfly || {}; Yanfly.KeyConfig = Yanfly.KeyboardConfig || {}; //============================================================================= /*: * @plugindesc v1.00 Allows players to adjust their button configuration * for keyboards. * @author Yanfly Engine Plugins * * @param Command Name * @desc This is the option name that appears in the main menu. * @default Keyboard Config * * @param Key Help * @desc This is the help message that will display for keys. * @default Change the configuration of this key? * * @param Default Layout * @desc This is the text for switching to the default layout. * @default Default Keyboard Layout * * @param Default Help * @desc This is the help message that will display for keys. * @default Reverts your keyboard setting to the default setup. * * @param WASD Layout * @desc This is the text for switching to the WASD layout. * @default WASD Movement Layout * * @param WASD Help * @desc This is the help message that will display for WASD. * @default Changes your keyboard to WASD movement. * * @param Finish Config * @desc This is the text for finishing with keyboard configuration. * @default Finish Configuration * * @param Finish Help * @desc This is the help message that will display for Finish. * @default Are you done configuring your keyboard? * * @param Assigned Color * @desc This is the background color of a key that's assigned. * @default 21 * * @param Action Color * @desc This is the text color of an assigned action. * @default 4 * * @param Clear Text * @desc This is the Clear action will appear for the config text. * @default Clear * * @param OK Key * @desc This is the OK action will appear on a key. * @default OK * * @param OK Text * @desc This is the OK action will appear for the config text. * @default OK / Talk * * @param Escape Key * @desc This is the Escape action will appear on a key. * @default X * * @param Escape Text * @desc This is the Escape action will appear for the config text. * @default Cancel / Menu * * @param Cancel Key * @desc This is the Cancel action will appear on a key. * @default Cancel * * @param Cancel Text * @desc This is the Cancel action will appear for the config text. * @default Cancel * * @param Menu Key * @desc This is the Menu action will appear on a key. * @default Menu * * @param Menu Text * @desc This is the Menu action will appear for the config text. * @default Menu * * @param Shift Key * @desc This is the Shift action will appear on a key. * @default Dash * * @param Shift Text * @desc This is the Shift action will appear for the config text. * @default Dash * * @param PageUp Key * @desc This is the PageUp action will appear on a key. * @default PgUp * * @param PageUp Text * @desc This is the PageUp action will appear for the config text. * @default Page Up * * @param PageDown Key * @desc This is the PageUp action will appear on a key. * @default PgDn * * @param PageDown Text * @desc This is the PageUp action will appear for the config text. * @default Page Down * * @param Left Key * @desc This is the Left action will appear on a key. * @default ◄ * * @param Left Text * @desc This is the Left action will appear for the config text. * @default Move ◄ Left * * @param Up Key * @desc This is the Up action will appear on a key. * @default ▲ * * @param Up Text * @desc This is the Up action will appear for the config text. * @default Move ▲ Up * * @param Right Key * @desc This is the Right action will appear on a key. * @default ► * * @param Right Text * @desc This is the Right action will appear for the config text. * @default Move ► Right * * @param Down Key * @desc This is the Down action will appear on a key. * @default ▼ * * @param Down Text * @desc This is the Down action will appear for the config text. * @default Move ▼ Down* * * @help * This plugin allows players to change their keyboard configuration from the * in-game Options menu provided that they're using a computer to play the * game and not from a mobile device. The "Keyboard Config" option will send * the player to a different screen where they can assign actions to each of * the allowed keys on the keyboard. * * Certain measures are made to prevent the player from locking himself or * herself in the configuration screen. These measures are that the Enter keys * and arrow keys cannot be changed. Almost every other key is capable of being * changed to something of the player's liking. */ /*:ja * @plugindesc キーボード向けにボタンコンフィグを行なうプラグインです。 * @author Yanfly Engine Plugins * * @param Command Name * @desc メインメニューに表示されるオプション名を変更できます * @default Keyboard Config * * @param Key Help * @desc キー設定時に表示される補助メッセージです * @default このキーのコンフィグを変更しますか? * * @param Default Layout * @desc デフォルトのレイアウトに変更する際のテキストメッセージです. * @default デフォルトレイアウト * * @param Default Help * @desc デフォルト設定に対するヘルプメッセージを設定できます * @default キーボード設定をデフォルトに戻します * * @param WASD Layout * @desc WASDのレイアウトに切り替える際のテキストを設定します * @default WASDレイアウト * * @param WASD Help * @desc WADSD設定に対するヘルプメッセージを設定できます * @default キーボードをWASDレイアウトに変更します * * @param Finish Config * @desc キーボードコンフィグを完了する際のコマンド名を変更できます * @default Finish Configuration * * @param Finish Help * @desc 完了時のヘルプを設定できます * @default キーボードのコンフィグを完了しますか? * * @param Assigned Color * @desc アサインされたキーの背景色を設定できます * @default 21 * * @param Action Color * @desc アサインされたアクションのテキストカラーを設定できます * @default 4 * * @param Clear Text * @desc コンフィグテキストに表れるClearの説明文を変更できます * @default Clear * * @param OK Key * @desc キー上に表れるOKアクションの表記を変更できます * @default OK * * @param OK Text * @desc コンフィグテキストに表れるOKの説明文を変更できます * @default OK / 話す * * @param Escape Key * @desc キー上に表れるEscapeアクションの表記を変更できます * @default X * * @param Escape Text * @desc コンフィグテキストに表れるEscapeの説明文を変更できます * @default Cancel / Menu * * @param Cancel Key * @desc キー上に表れるキャンセルアクションの表記を変更できます * @default Cancel * * @param Cancel Text * @desc コンフィグテキストに表れるキャンセルの説明文を変更できます * @default キャンセル * * @param Menu Key * @desc キー上に表れるメニューアクションの表記を変更できます * @default Menu * * @param Menu Text * @desc コンフィグテキストに表れるメニューの説明文を変更できます * @default Menu * * @param Shift Key * @desc キー上に表れるShiftアクションの表記を変更できます * @default Dash * * @param Shift Text * @desc コンフィグテキストに表れるShiftの説明文を変更できます * @default ダッシュする * * @param PageUp Key * @desc キー上に表れるPageUpアクションの表記を変更できます * @default PgUp * * @param PageUp Text * @desc コンフィグテキストに表れるPageUpの説明文を変更できます * @default ページアップ * * @param PageDown Key * @desc キー上に表れるPageDownアクションの表記を変更できます * @default PgDn * * @param PageDown Text * @desc コンフィグテキストに表れるPageDownの説明文を変更できます * @default ページダウン * * @param Left Key * @desc キー上に表れるレフトキーアクションの表記を変更できます * @default ◄ * * @param Left Text * @desc コンフィグテキストに表れるレフトキーの説明文を変更できます * @default 左へ ◄ * * @param Up Key * @desc キー上に表れるアップキーアクションの表記を変更できます * @default ▲ * * @param Up Text * @desc コンフィグテキストに表れるアップキーの説明文を変更できます * @default 上へ ▲ * * @param Right Key * @desc キー上に表れるライトキーアクションの表記を変更できます * @default ► * * @param Right Text * @desc コンフィグテキストに表れるライトキーの説明文を変更できます * @default 右へ ► * * @param Down Key * @desc キー上に表れるダウンキーアクションの表記を変更できます * @default ▼ * * @param Down Text * @desc コンフィグテキストに表れるダウンキーの説明文を変更できます * @default 下へ ▼ * * @help * このプラグインを用いて、ゲーム内オプションから * キーボードコンフィグを変更することができます。(PCのみ有効) * プレイヤーは、ゲームとは別のスクリーンにて * キーボードにアクションをアサインすることができます。 * * プレイヤーがコンフィグスクリーンに閉じ込められてしまうことが無いように、 * エンターキーと矢印キーは変更できないようになっています。 * それ以外の殆どのキーは、プレイヤーの好きなように変更することができます。 * */ //============================================================================= //============================================================================= // Parameter Variables //============================================================================= Yanfly.Parameters = PluginManager.parameters('KeyboardConfig'); Yanfly.Param = Yanfly.Param || {}; Yanfly.Param.KeyConfigName = String(Yanfly.Parameters['Command Name']); Yanfly.Param.KeyConfigKeyHelp = String(Yanfly.Parameters['Key Help']); Yanfly.Param.KeyConfigDefaultTx = String(Yanfly.Parameters['Default Layout']); Yanfly.Param.KeyConfigDefaultHelp = String(Yanfly.Parameters['Default Help']); Yanfly.Param.KeyConfigWasdTx = String(Yanfly.Parameters['WASD Layout']); Yanfly.Param.KeyConfigWasdHelp = String(Yanfly.Parameters['WASD Help']); Yanfly.Param.KeyConfigFinishTx = String(Yanfly.Parameters['Finish Config']); Yanfly.Param.KeyConfigFinishHelp = String(Yanfly.Parameters['Finish Help']); Yanfly.Param.KeyConfigAssignColor = Number(Yanfly.Parameters['Assigned Color']); Yanfly.Param.KeyConfigActionColor = Number(Yanfly.Parameters['Action Color']); Yanfly.Param.KeyConfigClearTx = String(Yanfly.Parameters['Clear Text']); Yanfly.Param.KeyConfigOkKey = String(Yanfly.Parameters['OK Key']); Yanfly.Param.KeyConfigOkTx = String(Yanfly.Parameters['OK Text']); Yanfly.Param.KeyConfigEscKey = String(Yanfly.Parameters['Escape Key']); Yanfly.Param.KeyConfigEscTx = String(Yanfly.Parameters['Escape Text']); Yanfly.Param.KeyConfigCancelKey = String(Yanfly.Parameters['Cancel Key']); Yanfly.Param.KeyConfigCancelTx = String(Yanfly.Parameters['Cancel Text']); Yanfly.Param.KeyConfigMenuKey = String(Yanfly.Parameters['Menu Key']); Yanfly.Param.KeyConfigMenuTx = String(Yanfly.Parameters['Menu Text']); Yanfly.Param.KeyConfigShiftKey = String(Yanfly.Parameters['Shift Key']); Yanfly.Param.KeyConfigShiftTx = String(Yanfly.Parameters['Shift Text']); Yanfly.Param.KeyConfigPageUpKey = String(Yanfly.Parameters['PageUp Key']); Yanfly.Param.KeyConfigPageUpTx = String(Yanfly.Parameters['PageUp Text']); Yanfly.Param.KeyConfigPageDnKey = String(Yanfly.Parameters['PageDown Key']); Yanfly.Param.KeyConfigPageDnTx = String(Yanfly.Parameters['PageDown Text']); Yanfly.Param.KeyConfigLeftKey = String(Yanfly.Parameters['Left Key']); Yanfly.Param.KeyConfigLeftTx = String(Yanfly.Parameters['Left Text']); Yanfly.Param.KeyConfigUpKey = String(Yanfly.Parameters['Up Key']); Yanfly.Param.KeyConfigUpTx = String(Yanfly.Parameters['Up Text']); Yanfly.Param.KeyConfigRightKey = String(Yanfly.Parameters['Right Key']); Yanfly.Param.KeyConfigRightTx = String(Yanfly.Parameters['Right Text']); Yanfly.Param.KeyConfigDownKey = String(Yanfly.Parameters['Down Key']); Yanfly.Param.KeyConfigDownTx = String(Yanfly.Parameters['Down Text']); //============================================================================= // ConfigManager //============================================================================= ConfigManager.keyMapper = { 9: 'tab', 13: 'ok', 16: 'shift', 17: 'control', 18: 'control', 27: 'escape', 32: 'ok', 33: 'pageup', 34: 'pagedown', 37: 'left', 38: 'up', 39: 'right', 40: 'down', 45: 'escape', 81: 'pageup', 87: 'pagedown', 88: 'escape', 90: 'ok', 96: 'escape', 98: 'down', 100: 'left', 102: 'right', 104: 'up', 120: 'debug' }; Yanfly.KeyConfig.ConfigManager_makeData = ConfigManager.makeData; ConfigManager.makeData = function() { var config = Yanfly.KeyConfig.ConfigManager_makeData.call(this); config.keyMapper = this.keyMapper; return config; }; Yanfly.KeyConfig.ConfigManager_applyData = ConfigManager.applyData; ConfigManager.applyData = function(config) { Yanfly.KeyConfig.ConfigManager_applyData.call(this, config); this.keyMapper = this.readKeyConfig(config, 'keyMapper'); this.applyKeyConfig(); }; ConfigManager.applyKeyConfig = function() { Input.keyMapper = this.keyMapper; Input.update(); Input.clear(); }; ConfigManager.readKeyConfig = function(config, name) { var value = config[name]; if (value !== undefined) { return value; } else { return { 9: 'tab', 13: 'ok', 16: 'shift', 17: 'control', 18: 'control', 27: 'escape', 32: 'ok', 33: 'pageup', 34: 'pagedown', 37: 'left', 38: 'up', 39: 'right', 40: 'down', 45: 'escape', 46: 'ok', 35: 'escape', 36: 'menu', 81: 'pageup', 87: 'pagedown', 88: 'escape', 90: 'ok', 96: 'escape', 98: 'down', 100: 'left', 102: 'right', 104: 'up', 120: 'debug' }; } }; //============================================================================= // Window_Options //============================================================================= Yanfly.KeyConfig.Window_Options_addGeneralOptions = Window_Options.prototype.addGeneralOptions; Window_Options.prototype.addGeneralOptions = function() { Yanfly.KeyConfig.Window_Options_addGeneralOptions.call(this); this.addKeyConfigCommand(); }; Window_Options.prototype.addKeyConfigCommand = function() { if (Utils.isMobileDevice()) return; this.addCommand(Yanfly.Param.KeyConfigName, 'keyConfig', true); }; Yanfly.KeyConfig.Window_Options_drawItem = Window_Options.prototype.drawItem; Window_Options.prototype.drawItem = function(index) { if (this.commandSymbol(index) === 'keyConfig') { var rect = this.itemRectForText(index); var text = this.commandName(index); this.resetTextColor(); this.changePaintOpacity(this.isCommandEnabled(index)); this.drawText(text, rect.x, rect.y, rect.width, 'left'); } else { Yanfly.KeyConfig.Window_Options_drawItem.call(this, index); } }; Yanfly.KeyConfig.Window_Options_processOk = Window_Options.prototype.processOk; Window_Options.prototype.processOk = function() { if (this.commandSymbol(this.index()) === 'keyConfig') { Window_Command.prototype.processOk.call(this); } else { Yanfly.KeyConfig.Window_Options_processOk.call(this); } }; //============================================================================= // Window_KeyConfig //============================================================================= function Window_KeyConfig() { this.initialize.apply(this, arguments); }; Window_KeyConfig._keyLayout = [ '~', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', ' ', 'Ins', 'Home', 'PgUp', ' ', '#pD/', '*', '#pD-', ' ', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '[', ']', '\\', 'Del', 'End', 'PgDn', '#pD7', '#pD8', '#pD9', '+', ' ', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ';', "'", 'Enter', 'Enter', ' ', ' ', ' ', '#pD4', '#pD5', '#pD6', '+', 'Shift', 'Shift', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', ',', '.', '/', 'Shift', 'Shift', ' ', '↑', ' ', '#pD1', '#pD2', '#pD3', 'En', ' ', ' ', ' ', 'Space', 'Space', 'Space', 'Space', 'Space', 'Space', 'Space', ' ', ' ', ' ', ' ', '←', '↓', '→', '#pD0', '#pD0', '#pD.', 'En' ]; Window_KeyConfig._refId = { '~': 192, '0': 48, '1': 49, '2': 50, '3': 51, '4': 52, '5': 53, '6': 54, '7': 55, '8': 56, '9': 57, '-': 189, '=': 187, 'Ins': 45, 'Home': 36, 'PgUp': 33, '#pD/': 111, '*': 106, '#pD-': 109, 'Q': 81, 'W': 87, 'E': 69, 'R': 82, 'T': 84, 'Y': 89, 'U': 85, 'I': 73, 'O': 79, 'P': 80, '[': 219, ']': 221, '\\': 220, 'Del': 46, 'End': 35, 'PgDn': 34, '#pD7': 103, '#pD8': 104, '#pD9': 105, '+': 107, 'A': 65, 'S': 83, 'D': 68, 'F': 70, 'G': 71, 'H': 72, 'J': 74, 'K': 75, 'L': 76, ';': 186, "'": 222, 'Enter': 13, '#pD4': 100, '#pD5': 101, '#pD6': 102, 'Shift': 16, 'Z': 90, 'X': 88, 'C': 67, 'V': 86, 'B': 66, 'N': 78, 'M': 77, ',': 188, '.': 190, '/': 191, 'Shift': 16, '↑': 38, '#pD1': 97, '#pD2': 98, '#pD3': 99, 'En': 13, 'Space': 32, '←': 37, '↓': 40, '→': 39, '#pD0': 96, '#pD.': 110 }; Window_KeyConfig.prototype = Object.create(Window_Command.prototype); Window_KeyConfig.prototype.constructor = Window_KeyConfig; Window_KeyConfig.prototype.initialize = function(helpWindow) { var wy = helpWindow.height; Window_Command.prototype.initialize.call(this, 0, wy); this.setHelpWindow(helpWindow); this.height = Graphics.boxHeight - wy; this.refresh(); this.activate(); this.select(0); }; Window_KeyConfig.prototype.windowWidth = function() { return Graphics.boxWidth; }; Window_KeyConfig.prototype.maxCols = function() { return 21; }; Window_KeyConfig.prototype.spacing = function() { return 1; }; Window_KeyConfig.prototype.itemHeight = function() { return this.lineHeight() * 2; }; Window_KeyConfig.prototype.itemTextAlign = function() { return 'center'; }; Window_KeyConfig.prototype.makeCommandList = function(index) { for (var i = 0; i < Window_KeyConfig._keyLayout.length; ++i) { var keyName = Window_KeyConfig._keyLayout[i]; var enabled = this.isKeyEnabled(keyName); this.addCommand(keyName, 'key', enabled); } this.addCommand(Yanfly.Param.KeyConfigDefaultTx, 'default', true); for (var i = 0; i < 6; ++i) this.addCommand(' ', 'default', true); this.addCommand(Yanfly.Param.KeyConfigWasdTx, 'wasd', true); for (var i = 0; i < 6; ++i) this.addCommand(' ', 'wasd', true); this.addCommand(Yanfly.Param.KeyConfigFinishTx, 'cancel', true); for (var i = 0; i < 6; ++i) this.addCommand(' ', 'cancel', true); }; Window_KeyConfig.prototype.isKeyEnabled = function(keyName) { return !([' ', 'Enter', 'En', '↑', '←', '↓', '→'].contains(keyName)); }; Window_KeyConfig.prototype.itemRect = function(index) { var rect = Window_Selectable.prototype.itemRect.call(this, index); var maxCols = this.maxCols(); if ([41, 62].contains(index)) { rect.y = Math.floor(41 / maxCols) * rect.height - this._scrollY; rect.height = this.itemHeight() * 2; } else if ([54, 55].contains(index)) { rect.x = 54 % maxCols * (rect.width + this.spacing()) - this._scrollX; rect.width = (this.itemWidth() + this.spacing()) * 2 - this.spacing(); } else if ([63, 64].contains(index)) { rect.x = 63 % maxCols * (rect.width + this.spacing()) - this._scrollX; rect.width = (this.itemWidth() + this.spacing()) * 2 - this.spacing(); } else if ([75, 76].contains(index)) { rect.x = 75 % maxCols * (rect.width + this.spacing()) - this._scrollX; rect.width = (this.itemWidth() + this.spacing()) * 2 - this.spacing(); } else if ([83, 104].contains(index)) { rect.y = Math.floor(83 / maxCols) * rect.height - this._scrollY; rect.height = this.itemHeight() * 2; } else if ([87, 88, 89, 90, 91, 92, 93].contains(index)) { rect.x = 87 % maxCols * (rect.width + this.spacing()) - this._scrollX; rect.width = (this.itemWidth() + this.spacing()) * 7 - this.spacing(); } else if ([101, 102].contains(index)) { rect.x = 101 % maxCols * (rect.width + this.spacing()) - this._scrollX; rect.width = (this.itemWidth() + this.spacing()) * 2 - this.spacing(); } else if ([105, 106, 107, 108, 109, 110, 111].contains(index)) { rect.x = 105 % maxCols * (rect.width + this.spacing()) - this._scrollX; rect.width = (this.itemWidth() + this.spacing()) * 7 - this.spacing(); } else if ([112, 113, 114, 115, 116, 117, 118].contains(index)) { rect.x = 112 % maxCols * (rect.width + this.spacing()) - this._scrollX; rect.width = (this.itemWidth() + this.spacing()) * 7 - this.spacing(); } else if ([119, 120, 121, 122, 123, 124, 125].contains(index)) { rect.x = 119 % maxCols * (rect.width + this.spacing()) - this._scrollX; rect.width = (this.itemWidth() + this.spacing()) * 7 - this.spacing(); } rect.y += Math.max(0, (this.contents.height - this.lineHeight() * 12) / 2); return rect; }; Window_KeyConfig.prototype.leaveEmpty = function(index) { return [55, 56, 57, 58, 62, 64, 76, 77, 79, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 102, 104, 106, 107, 108, 109, 110, 111, 113, 114, 115, 116, 117, 118, 120, 121, 122, 123, 124, 125].contains(index); }; Window_KeyConfig.prototype.drawItem = function(index) { if (this.leaveEmpty(index)) return; this.drawItemRect(index); this.drawItemKey(index); this.drawItemAction(index); }; Window_KeyConfig.prototype.drawItemRect = function(index) { var rect = this.itemRect(index); var color = this.getRectColor(index); this.drawRect(rect.x+1, rect.y+1, rect.width-2, rect.height-2, color); }; Window_KeyConfig.prototype.getRectColor = function(index) { if (index > 104) return this.gaugeBackColor(); var key = Window_KeyConfig._refId[this.commandName(index)]; var action = Input.keyMapper[key]; if (action !== undefined) { return this.textColor(Yanfly.Param.KeyConfigAssignColor); } else { return this.gaugeBackColor(); } }; Window_KeyConfig.prototype.drawRect = function(dx, dy, dw, dh, color) { this.changePaintOpacity(false); this.contents.fillRect(dx, dy, dw, dh, color); this.changePaintOpacity(true); }; Window_KeyConfig.prototype.drawItemKey = function(index) { this.resetFontSettings(); this.contents.fontSize -= 8; this.resetTextColor(); this.changePaintOpacity(true); var rect = this.itemRectForText(index); var align = this.itemTextAlign(); this.drawText(this.visualName(index), rect.x, rect.y, rect.width, align); }; Window_KeyConfig.prototype.visualName = function(index) { var text = this._list[index].name; text = text.replace(/#pD/gi, '' ); return text; }; Window_KeyConfig.prototype.drawItemAction = function(index) { var key = Window_KeyConfig._refId[this.commandName(index)]; var action = Input.keyMapper[key]; if (action === undefined) return; this.resetFontSettings(); this.contents.fontSize -= 8; var color = this.textColor(Yanfly.Param.KeyConfigActionColor); this.changeTextColor(color); this.changePaintOpacity(true); var rect = this.itemRectForText(index); rect.y += this.lineHeight(); var align = this.itemTextAlign(); this.drawText(this.actionKey(action), rect.x, rect.y, rect.width, align); }; Window_KeyConfig.prototype.actionKey = function(action) { switch(action) { case 'ok': return Yanfly.Param.KeyConfigOkKey; break; case 'escape': return Yanfly.Param.KeyConfigEscKey; break; case 'cancel': return Yanfly.Param.KeyConfigCancelKey; break; case 'menu': return Yanfly.Param.KeyConfigMenuKey; break; case 'shift': return Yanfly.Param.KeyConfigShiftKey; break; case 'pageup': return Yanfly.Param.KeyConfigPageUpKey; break; case 'pagedown': return Yanfly.Param.KeyConfigPageDnKey; break; case 'left': return Yanfly.Param.KeyConfigLeftKey; break; case 'up': return Yanfly.Param.KeyConfigUpKey; break; case 'right': return Yanfly.Param.KeyConfigRightKey; break; case 'down': return Yanfly.Param.KeyConfigDownKey; break; } }; Window_KeyConfig.prototype.cursorDown = function(wrap) { var index = this.index(); if (index >= 105) { this.select(index - 104); } else if ([41, 62].contains(index)) { this.select(83); } else if ([83, 104].contains(index)) { this.select(125); } else { Window_Command.prototype.cursorDown.call(this, wrap); } }; Window_KeyConfig.prototype.cursorUp = function(wrap) { var index = this.index(); if (index === 0) { this.select(125); } else if (index <= 20) { this.select(index + 104); } else if ([41, 62].contains(index)) { this.select(20); } else if ([83, 104].contains(index)) { this.select(41); } else { Window_Command.prototype.cursorUp.call(this, wrap); } }; Window_KeyConfig.prototype.cursorRight = function(wrap) { var index = this.index(); if ([54, 55].contains(index)) { this.select(56); } else if ([63, 64].contains(index)) { this.select(65); } else if ([75, 76].contains(index)) { this.select(77); } else if ([87, 88, 89, 90, 91, 92, 93].contains(index)) { this.select(94); } else if ([101, 102].contains(index)) { this.select(103); } else if ([105, 106, 107, 108, 109, 110, 111].contains(index)) { this.select(112); } else if ([112, 113, 114, 115, 116, 117, 118].contains(index)) { this.select(119); } else if ([119, 120, 121, 122, 123, 124, 125].contains(index)) { this.select(0); } else { Window_Command.prototype.cursorRight.call(this, wrap); } }; Window_KeyConfig.prototype.cursorLeft = function(wrap) { var index = this.index(); if (index === 0) { this.select(125); } else if ([54, 55].contains(index)) { this.select(53); } else if ([63, 64].contains(index)) { this.select(62); } else if ([75, 76].contains(index)) { this.select(74); } else if ([87, 88, 89, 90, 91, 92, 93].contains(index)) { this.select(86); } else if ([101, 102].contains(index)) { this.select(100); } else if ([105, 106, 107, 108, 109, 110, 111].contains(index)) { this.select(104); } else if ([112, 113, 114, 115, 116, 117, 118].contains(index)) { this.select(111); } else if ([119, 120, 121, 122, 123, 124, 125].contains(index)) { this.select(118); } else { Window_Command.prototype.cursorLeft.call(this, wrap); } }; Window_KeyConfig.prototype.updateHelp = function() { if (!this._helpWindow) return; switch (this.currentSymbol()) { case 'key': this._helpWindow.setText(Yanfly.Param.KeyConfigKeyHelp); break; case 'default': this._helpWindow.setText(Yanfly.Param.KeyConfigDefaultHelp); break; case 'wasd': this._helpWindow.setText(Yanfly.Param.KeyConfigWasdHelp); break; case 'cancel': this._helpWindow.setText(Yanfly.Param.KeyConfigFinishHelp); break; default: this._helpWindow.clear(); break; } }; //============================================================================= // Window_KeyAction //============================================================================= function Window_KeyAction() { this.initialize.apply(this, arguments); }; Window_KeyAction.prototype = Object.create(Window_Command.prototype); Window_KeyAction.prototype.constructor = Window_KeyAction; Window_KeyAction.prototype.initialize = function() { Window_Command.prototype.initialize.call(this, 0, 0); this.x = (Graphics.boxWidth - this.width) / 2; this.y = (Graphics.boxHeight - this.height) / 2; this.openness = 0; this.deactivate(); }; Window_KeyAction.prototype.makeCommandList = function() { this.addCommand(Yanfly.Param.KeyConfigClearTx, 'ok', true, 'clear'); this.addCommand(Yanfly.Param.KeyConfigOkTx, 'ok', true, 'ok'); this.addCommand(Yanfly.Param.KeyConfigEscTx, 'ok', true, 'escape'); this.addCommand(Yanfly.Param.KeyConfigCancelTx, 'ok', true, 'cancel'); this.addCommand(Yanfly.Param.KeyConfigMenuTx, 'ok', true, 'menu'); this.addCommand(Yanfly.Param.KeyConfigShiftTx, 'ok', true, 'shift'); this.addCommand(Yanfly.Param.KeyConfigPageUpTx, 'ok', true, 'pageup'); this.addCommand(Yanfly.Param.KeyConfigPageDnTx, 'ok', true, 'pagedown'); this.addCommand(Yanfly.Param.KeyConfigLeftTx, 'ok', true, 'left'); this.addCommand(Yanfly.Param.KeyConfigUpTx, 'ok', true, 'up'); this.addCommand(Yanfly.Param.KeyConfigRightTx, 'ok', true, 'right'); this.addCommand(Yanfly.Param.KeyConfigDownTx, 'ok', true, 'down'); }; //============================================================================= // Scene_Options //============================================================================= Yanfly.KeyConfig.Scene_Options_createOptionsWindow = Scene_Options.prototype.createOptionsWindow; Scene_Options.prototype.createOptionsWindow = function() { Yanfly.KeyConfig.Scene_Options_createOptionsWindow.call(this); this._optionsWindow.setHandler('keyConfig', this.commandKeyConfig.bind(this)); }; Scene_Options.prototype.commandKeyConfig = function() { SceneManager.push(Scene_KeyConfig); }; //============================================================================= // Scene_KeyConfig //============================================================================= function Scene_KeyConfig() { this.initialize.apply(this, arguments); } Scene_KeyConfig.prototype = Object.create(Scene_MenuBase.prototype); Scene_KeyConfig.prototype.constructor = Scene_KeyConfig; Scene_KeyConfig.prototype.initialize = function() { Scene_MenuBase.prototype.initialize.call(this); }; Scene_KeyConfig.prototype.create = function() { Scene_MenuBase.prototype.create.call(this); this.createHelpWindow(); this.createKeyConfigWindow(); this.createKeyActionWindow(); }; Scene_KeyConfig.prototype.terminate = function() { Scene_MenuBase.prototype.terminate.call(this); ConfigManager.save(); }; Scene_KeyConfig.prototype.refreshWindows = function() { this._configWindow.refresh(); this._configWindow.activate(); ConfigManager.save(); }; Scene_KeyConfig.prototype.createKeyConfigWindow = function() { this._configWindow = new Window_KeyConfig(this._helpWindow); this._configWindow.setHandler('default', this.commandDefault.bind(this)); this._configWindow.setHandler('wasd', this.commandWasd.bind(this)); this._configWindow.setHandler('cancel', this.popScene.bind(this)); this._configWindow.setHandler('key', this.commandKey.bind(this)); this.addWindow(this._configWindow); }; Scene_KeyConfig.prototype.createKeyActionWindow = function() { this._actionWindow = new Window_KeyAction(); this._actionWindow.setHandler('ok', this.onActionOk.bind(this)); this._actionWindow.setHandler('cancel', this.onActionCancel.bind(this)); this.addWindow(this._actionWindow); }; Scene_KeyConfig.prototype.commandDefault = function() { ConfigManager.keyMapper = { 9: 'tab', 13: 'ok', 16: 'shift', 17: 'control', 18: 'control', 27: 'escape', 32: 'ok', 33: 'pageup', 34: 'pagedown', 37: 'left', 38: 'up', 39: 'right', 40: 'down', 45: 'escape', 46: 'ok', 35: 'escape', 36: 'menu', 81: 'pageup', 87: 'pagedown', 88: 'escape', 90: 'ok', 96: 'escape', 98: 'down', 100: 'left', 102: 'right', 104: 'up', 120: 'debug' }; ConfigManager.applyKeyConfig(); this.refreshWindows(); }; Scene_KeyConfig.prototype.commandWasd = function() { ConfigManager.keyMapper = { 9: 'tab', 13: 'ok', 16: 'shift', 17: 'control', 18: 'control', 27: 'escape', 32: 'ok', 33: 'pageup', 34: 'pagedown', 37: 'left', 38: 'up', 39: 'right', 40: 'down', 87: 'up', 65: 'left', 83: 'down', 68: 'right', 74: 'ok', 75: 'escape', 77: 'menu', 219: 'pageup', 221: 'pagedown', 45: 'escape', 46: 'ok', 35: 'escape', 36: 'menu', 96: 'escape', 98: 'down', 100: 'left', 102: 'right', 104: 'up', 120: 'debug' }; ConfigManager.applyKeyConfig(); this.refreshWindows(); }; Scene_KeyConfig.prototype.commandKey = function() { this._actionWindow.select(0); this._actionWindow.open(); this._actionWindow.activate(); }; Scene_KeyConfig.prototype.onActionCancel = function() { this._actionWindow.close(); this._actionWindow.deactivate(); this._configWindow.activate(); }; Scene_KeyConfig.prototype.onActionOk = function() { var action = this._actionWindow.currentExt(); var name = this._configWindow.commandName(this._configWindow.index()); var key = Window_KeyConfig._refId[name]; if (action === 'clear') { ConfigManager.keyMapper[key] = undefined; } else { ConfigManager.keyMapper[key] = action; } SoundManager.playEquip(); ConfigManager.applyKeyConfig(); this.onActionCancel(); this.refreshWindows(); }; //============================================================================= // End of File //=============================================================================