var Imported = Imported || {}; Imported.YEP_MessageCore = true; var Yanfly = Yanfly || {}; Yanfly.Message = Yanfly.Message || {}; Yanfly.Message.version = 1.19; /*:ja * @plugindesc * @author Yanfly Engine Plugins * * @param ---一般--- * @default * * @param Default Rows * @parent ---一般--- * @type number * @min 0 * @desc メッセージボックスに表示されるデフォルトの行数を指定 * Default: 4 * @default 4 * * @param Default Width * @parent ---一般--- * @desc メッセージボックスの幅をピクセルで指定 * Default: Graphics.boxWidth * @default Graphics.boxWidth * * @param Face Indent * @parent ---一般--- * @desc 顔グラフィックを使っている時の、テキストインデント値を指定 * Default: Window_Base._faceWidth + 24 * @default Window_Base._faceWidth + 24 * * @param Fast Forward Key * @parent ---一般--- * @desc このキーを使うと早送りする事が出来ます。 * @default pagedown * * @param Enable Fast Forward * @parent ---一般--- * @type boolean * @on 有効 * @off 無効 * @desc デフォルトで早送りボタンを有効 * 無効 - false 有効 - true * @default true * * @param Word Wrapping * @parent ---一般--- * @type boolean * @on ON * @off OFF * @desc ワードラップ機能の ON/OFF を設定 * OFF - false ON - true * @default false * * @param Description Wrap * @parent ---一般--- * @type boolean * @on ON * @off OFF * @desc 詳細の欄でのワードラップ機能の ON/OFF を設定 * OFF - false ON - true * @default false * * @param Word Wrap Space * @parent ---一般--- * @type boolean * @on 有効 * @off 無効 * @desc 手動改行を有効 * 無効 - false 有効 - true * @default false * * @param Tight Wrap * @parent ---一般--- * @type boolean * @on YES * @off NO * @desc 顔画像使用時メッセージをタイトに折り返すか設定。 NO - false YES - true * @default false * * @param ---フォント--- * @default * * @param Font Name * @parent ---フォント--- * @desc メッセージウィンドウに使われるデフォルトのフォントを設定 * Default: GameFont * @default GameFont * * @param Font Name CH * @parent ---フォント--- * @desc 中国語のRPGに使われるデフォルトフォントを設定 * Default: SimHei, Heiti TC, sans-serif * @default SimHei, Heiti TC, sans-serif * * @param Font Name KR * @parent ---フォント--- * @desc 韓国語のRPGに使われるデフォルトフォントを設定 * Default: Dotum, AppleGothic, sans-serif * @default Dotum, AppleGothic, sans-serif * * @param Font Size * @parent ---フォント--- * @type number * @min 1 * @desc メッセージウィンドウに使われるデフォルトのフォントサイズを指定 * Default: 28 * @default 28 * * @param Font Size Change * @parent ---フォント--- * @type number * @min 1 * @desc \{ と \} が使われた際、このフォントサイズを適用 * Default: 12 * @default 12 * * @param Font Changed Max * @parent ---フォント--- * @type number * @min 1 * @desc \{ によって生じるフォントの最大サイズを設定 * Default: 96 * @default 96 * * @param Font Changed Min * @parent ---フォント--- * @type number * @min 1 * @desc \{ によって生じるフォントの最小サイズを設定 * Default: 12 * @default 12 * * @param Font Outline * @parent ---フォント--- * @type number * @min 0 * @desc アウトラインフォントに使われるデフォルトの横幅を設定 * Default: 4 * @default 4 * * @param Maintain Font * @parent ---フォント--- * @type boolean * @on YES * @off NO * @desc フォント名またはフォントサイズを変更した時に、次のメッセージを続けるか設定 NO - false YES - true * @default false * * @param ---ネームボックス--- * @default * * @param Name Box Buffer X * @parent ---ネームボックス--- * @type number * @desc ネームボックスのバッファを指定します (x軸) * @default -28 * * @param Name Box Buffer Y * @parent ---ネームボックス--- * @type number * @desc ネームボックスのバッファを指定します (y軸) * @default 0 * * @param Name Box Padding * @parent ---ネームボックス--- * @desc ネームボックスのパディング値を指定 * @default this.standardPadding() * 4 * * @param Name Box Color * @parent ---ネームボックス--- * @type number * @min 0 * @max 31 * @desc ネームボックスに使われるテキスト色を指定 * @default 0 * * @param Name Box Clear * @parent ---ネームボックス--- * @type boolean * @on YES * @off NO * @desc ネームボックスを透明にしますか? NO - false YES - true * @default false * * @param Name Box Added Text * @parent ---ネームボックス--- * @desc ネームボックスが使われる際には必ずこのテキストが追加されます。自動的にカラー設定をしたい場合などに使われます。 * @default \c[6] * * @param Name Box Auto Close * @parent ---ネームボックス--- * @type boolean * @on YES * @off NO * @desc ネームボックスに別の名前が表示される時に、メッセージウィンドウを閉じるか設定。 YES - true NO - false * @default false * * @help */ Yanfly.Parameters = PluginManager.parameters('JsScript79Set'); Yanfly.Param = Yanfly.Param || {}; Yanfly.Param.MSGDefaultRows = String(Yanfly.Parameters['Default Rows']); Yanfly.Param.MSGDefaultWidth = String(Yanfly.Parameters['Default Width']); Yanfly.Param.MSGFaceIndent = String(Yanfly.Parameters['Face Indent']); Yanfly.Param.MSGFastForwardKey = String(Yanfly.Parameters['Fast Forward Key']); Yanfly.Param.MSGFFOn = eval(String(Yanfly.Parameters['Enable Fast Forward'])); Yanfly.Param.MSGWordWrap = String(Yanfly.Parameters['Word Wrapping']); Yanfly.Param.MSGWordWrap = eval(Yanfly.Param.MSGWordWrap); Yanfly.Param.MSGDescWrap = String(Yanfly.Parameters['Description Wrap']); Yanfly.Param.MSGWrapSpace = eval(String(Yanfly.Parameters['Word Wrap Space'])); Yanfly.Param.MSGTightWrap = eval(String(Yanfly.Parameters['Tight Wrap'])); Yanfly.Param.MSGFontName = String(Yanfly.Parameters['Font Name']); Yanfly.Param.MSGCNFontName = String(Yanfly.Parameters['Font Name CH']); Yanfly.Param.MSGKRFontName = String(Yanfly.Parameters['Font Name KR']); Yanfly.Param.MSGFontSize = Number(Yanfly.Parameters['Font Size']); Yanfly.Param.MSGFontSizeChange = String(Yanfly.Parameters['Font Size Change']); Yanfly.Param.MSGFontChangeMax = String(Yanfly.Parameters['Font Changed Max']); Yanfly.Param.MSGFontChangeMin = String(Yanfly.Parameters['Font Changed Min']); Yanfly.Param.MSGFontOutline = Number(Yanfly.Parameters['Font Outline']); Yanfly.Param.MSGFontMaintain = eval(String(Yanfly.Parameters['Maintain Font'])); Yanfly.Param.MSGNameBoxBufferX = String(Yanfly.Parameters['Name Box Buffer X']); Yanfly.Param.MSGNameBoxBufferY = String(Yanfly.Parameters['Name Box Buffer Y']); Yanfly.Param.MSGNameBoxPadding = String(Yanfly.Parameters['Name Box Padding']); Yanfly.Param.MSGNameBoxColor = Number(Yanfly.Parameters['Name Box Color']); Yanfly.Param.MSGNameBoxClear = String(Yanfly.Parameters['Name Box Clear']); Yanfly.Param.MSGNameBoxText = String(Yanfly.Parameters['Name Box Added Text']); Yanfly.Param.MSGNameBoxClose = String(Yanfly.Parameters['Name Box Auto Close']); Yanfly.Param.MSGNameBoxClose = eval(Yanfly.Param.MSGNameBoxClose); Yanfly.Message.Bitmap_initialize = Bitmap.prototype.initialize; Bitmap.prototype.initialize = function(width, height) { Yanfly.Message.Bitmap_initialize.call(this, width, height); this.fontBold = false; }; Yanfly.Message.Bitmap_makeFontNameText = Bitmap.prototype._makeFontNameText; Bitmap.prototype._makeFontNameText = function() { if (this.fontBold) return 'Bold ' + this.fontSize + 'px ' + this.fontFace; return Yanfly.Message.Bitmap_makeFontNameText.call(this); }; Yanfly.Message.Game_System_initialize = Game_System.prototype.initialize; Game_System.prototype.initialize = function() { Yanfly.Message.Game_System_initialize.call(this); this.initMessageSystem(); this.initMessageFontSettings(); }; Game_System.prototype.initMessageSystem = function() { this._wordWrap = Yanfly.Param.MSGWordWrap; this._fastForward = Yanfly.Param.MSGFFOn; }; Game_System.prototype.initMessageFontSettings = function() { if ($dataSystem.locale.match(/^zh/)) { this._msgFontName = Yanfly.Param.MSGCNFontName; } else if ($dataSystem.locale.match(/^ko/)) { this._msgFontName = Yanfly.Param.MSGKRFontName; } else { this._msgFontName = Yanfly.Param.MSGFontName; } this._msgFontSize = Yanfly.Param.MSGFontSize; this._msgFontOutline = Yanfly.Param.MSGFontOutline; }; Game_System.prototype.messageRows = function() { var rows = eval(this._messageRows) || eval(Yanfly.Param.MSGDefaultRows); return Math.max(1, Number(rows)); }; Game_System.prototype.messageWidth = function() { return eval(this._messageWidth) || eval(Yanfly.Param.MSGDefaultWidth); }; Game_System.prototype.wordWrap = function() { if (this._wordWrap === undefined) this.initMessageSystem(); return this._wordWrap; }; Game_System.prototype.setWordWrap = function(state) { if (this._wordWrap === undefined) this.initMessageSystem(); this._wordWrap = state; }; Game_System.prototype.isFastFowardEnabled = function() { if (this._fastForward === undefined) this.initMessageSystem(); return this._fastForward; }; Game_System.prototype.setFastFoward = function(state) { if (this._fastForward === undefined) this.initMessageSystem(); this._fastForward = state; }; Game_System.prototype.getMessageFontName = function() { if (this._msgFontName === undefined) this.initMessageFontSettings(); return this._msgFontName; }; Game_System.prototype.setMessageFontName = function(value) { if (this._msgFontName === undefined) this.initMessageFontSettings(); this._msgFontName = value; }; Game_System.prototype.getMessageFontSize = function() { if (this._msgFontSize === undefined) this.initMessageFontSettings(); return this._msgFontSize; }; Game_System.prototype.setMessageFontSize = function(value) { if (this._msgFontSize === undefined) this.initMessageFontSettings(); this._msgFontSize = value; }; Game_System.prototype.getMessageFontOutline = function() { if (this._msgFontOutline === undefined) this.initMessageFontSettings(); return this._msgFontOutline; }; Game_System.prototype.setMessageFontOutline = function(value) { if (this._msgFontOutline === undefined) this.initMessageFontSettings(); this._msgFontOutline = value; }; Game_Message.prototype.addText = function(text) { if ($gameSystem.wordWrap()) text = '' + text; this.add(text); }; Yanfly.Message.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { Yanfly.Message.Game_Interpreter_pluginCommand.call(this, command, args); if (command === 'MessageRows') $gameSystem._messageRows = args[0]; if (command === 'MessageWidth') $gameSystem._messageWidth = args[0]; if (command === 'EnableWordWrap') $gameSystem.setWordWrap(true); if (command === 'DisableWordWrap') $gameSystem.setWordWrap(false); if (command === 'EnableFastForward') $gameSystem.setFastFoward(true); if (command === 'DisableFastForward') $gameSystem.setFastFoward(false); }; Game_Interpreter.prototype.command101 = function() { if (!$gameMessage.isBusy()) { $gameMessage.setFaceImage(this._params[0], this._params[1]); $gameMessage.setBackground(this._params[2]); $gameMessage.setPositionType(this._params[3]); while (this.isContinueMessageString()) { this._index++; if (this._list[this._index].code === 401) { $gameMessage.addText(this.currentCommand().parameters[0]); } if ($gameMessage._texts.length >= $gameSystem.messageRows()) break; } switch (this.nextEventCode()) { case 102: this._index++; if(_OriSelectFlg){ if (!_OriSelDrawFlg) { _OriSelNo = 0; _rsSelArr = this._list[this._index].parameters[0].clone(); _rsPicArr = []; for (var i = 0; i <= _rsSelArr.length - 1; i++) { _rsPicArr.push(PN_rsSelect + i); this.SetPict( PN_rsSelect + i , RsPicPath + "PN_rsSelect" , _OriSelPos._x , _OriSelPos._y - (70 * ( _rsSelArr.length - 1 - i) ) , 0); this.MovePict( PN_rsSelect + i , true , true , _rsFinTime); this.SetPicStr( PN_rsSelTxt + i , _rsSelArr[i] , 23 , _OriSelPos._x + 25 , _OriSelPos._y + 15 - (70 * ( _rsSelArr.length - 1 - i) ) , 0); this.MovePict( PN_rsSelTxt + i , true , true , _rsFinTime); } _OriSelDrawFlg = true; } } else { this.setupChoices(this.currentCommand().parameters); } break; case 103: this._index++; this.setupNumInput(this.currentCommand().parameters); break; case 104: this._index++; this.setupItemChoice(this.currentCommand().parameters); break; } this._index++; this.setWaitMode('message'); } return false; }; Game_Interpreter.prototype.isContinueMessageString = function() { // Disabled auto-merge of consecutive messages when rows > 4 // if (this.nextEventCode() === 101 && $gameSystem.messageRows() > 4) { // return true; // } else { return this.nextEventCode() === 401; // } }; Yanfly.Message.Window_Base_resetFontSettings = Window_Base.prototype.resetFontSettings; Window_Base.prototype.resetFontSettings = function() { Yanfly.Message.Window_Base_resetFontSettings.call(this); this.contents.fontBold = false; this.contents.fontItalic = false; this.contents.outlineColor = 'rgba(0, 0, 0, 0.5)'; this.contents.outlineWidth = $gameSystem.getMessageFontOutline(); }; Window_Base.prototype.textWidthEx = function(text) { return this.drawTextEx(text, 0, this.contents.height + this.lineHeight()); }; Yanfly.Message.Window_Base_convertEscapeCharacters = Window_Base.prototype.convertEscapeCharacters; Window_Base.prototype.convertEscapeCharacters = function(text) { text = this.setWordWrap(text); text = Yanfly.Message.Window_Base_convertEscapeCharacters.call(this, text); text = this.convertExtraEscapeCharacters(text); return text; }; Window_Base.prototype.setWordWrap = function(text) { this._wordWrap = false; if (text.match(/<(?:WordWrap)>/i)) { this._wordWrap = true; text = text.replace(/<(?:WordWrap)>/gi, ''); } if (this._wordWrap) { var replace = Yanfly.Param.MSGWrapSpace ? ' ' : ''; text = text.replace(/[\n\r]+/g, replace); } if (this._wordWrap) { text = text.replace(/<(?:BR|line break)>/gi, '\n'); } else { text = text.replace(/<(?:BR|line break)>/gi, ''); } return text; }; Window_Base.prototype.convertExtraEscapeCharacters = function(text) { text = text.replace(/\x1bFR/gi, '\x1bMSGCORE[0]'); text = text.replace(/\x1bFB/gi, '\x1bMSGCORE[1]'); text = text.replace(/\x1bFI/gi, '\x1bMSGCORE[2]'); text = text.replace(/\x1bAC\[(\d+)\]/gi, function() { return this.actorClassName(parseInt(arguments[1])); }.bind(this)); text = text.replace(/\x1bAN\[(\d+)\]/gi, function() { return this.actorNickname(parseInt(arguments[1])); }.bind(this)); text = text.replace(/\x1bPC\[(\d+)\]/gi, function() { return this.partyClassName(parseInt(arguments[1])); }.bind(this)); text = text.replace(/\x1bPN\[(\d+)\]/gi, function() { return this.partyNickname(parseInt(arguments[1])); }.bind(this)); text = text.replace(/\x1bNC\[(\d+)\]/gi, function() { return $dataClasses[parseInt(arguments[1])].name; }.bind(this)); text = text.replace(/\x1bNI\[(\d+)\]/gi, function() { return $dataItems[parseInt(arguments[1])].name; }.bind(this)); text = text.replace(/\x1bNW\[(\d+)\]/gi, function() { return $dataWeapons[parseInt(arguments[1])].name; }.bind(this)); text = text.replace(/\x1bNA\[(\d+)\]/gi, function() { return $dataArmors[parseInt(arguments[1])].name; }.bind(this)); text = text.replace(/\x1bNE\[(\d+)\]/gi, function() { return $dataEnemies[parseInt(arguments[1])].name; }.bind(this)); text = text.replace(/\x1bNS\[(\d+)\]/gi, function() { return $dataSkills[parseInt(arguments[1])].name; }.bind(this)); text = text.replace(/\x1bNT\[(\d+)\]/gi, function() { return $dataStates[parseInt(arguments[1])].name; }.bind(this)); text = text.replace(/\x1bII\[(\d+)\]/gi, function() { return this.escapeIconItem(arguments[1], $dataItems); }.bind(this)); text = text.replace(/\x1bIW\[(\d+)\]/gi, function() { return this.escapeIconItem(arguments[1], $dataWeapons); }.bind(this)); text = text.replace(/\x1bIA\[(\d+)\]/gi, function() { return this.escapeIconItem(arguments[1], $dataArmors); }.bind(this)); text = text.replace(/\x1bIS\[(\d+)\]/gi, function() { return this.escapeIconItem(arguments[1], $dataSkills); }.bind(this)); text = text.replace(/\x1bIT\[(\d+)\]/gi, function() { return this.escapeIconItem(arguments[1], $dataStates); }.bind(this)); return text; }; Window_Base.prototype.actorClassName = function(n) { var actor = n >= 1 ? $gameActors.actor(n) : null; return actor ? actor.currentClass().name : ''; }; Window_Base.prototype.actorNickname = function(n) { var actor = n >= 1 ? $gameActors.actor(n) : null; return actor ? actor.nickname() : ''; }; Window_Base.prototype.partyClassName = function(n) { var actor = n >= 1 ? $gameParty.members()[n - 1] : null; return actor ? actor.currentClass().name : ''; }; Window_Base.prototype.partyNickname = function(n) { var actor = n >= 1 ? $gameParty.members()[n - 1] : null; return actor ? actor.nickname() : ''; }; Window_Base.prototype.escapeIconItem = function(n, database) { return '\x1bI[' + database[n].iconIndex + ']' + database[n].name; }; Window_Base.prototype.obtainEscapeString = function(textState) { var arr = /^\<(.*?)\>/.exec(textState.text.slice(textState.index)); if (arr) { textState.index += arr[0].length; return String(arr[0].slice(1, arr[0].length - 1)); } else { return ''; } }; Yanfly.Message.Window_Base_processEscapeCharacter = Window_Base.prototype.processEscapeCharacter; Window_Base.prototype.processEscapeCharacter = function(code, textState) { switch (code) { case 'MSGCORE': var id = this.obtainEscapeParam(textState); if (id === 0) { $gameSystem.initMessageFontSettings(); this.resetFontSettings(); } if (id === 1) this.contents.fontBold = !this.contents.fontBold; if (id === 2) this.contents.fontItalic = !this.contents.fontItalic; break; case 'FS': var size = this.obtainEscapeParam(textState); this.contents.fontSize = size; if (Yanfly.Param.MSGFontMaintain) $gameSystem.setMessageFontSize(size); break; case 'FN': var name = this.obtainEscapeString(textState); this.contents.fontFace = name; if (Yanfly.Param.MSGFontMaintain) $gameSystem.setMessageFontName(name); break; case 'OC': var id = this.obtainEscapeParam(textState); this.contents.outlineColor = this.textColor(id); break; case 'OW': this.contents.outlineWidth = this.obtainEscapeParam(textState); break; case 'PX': textState.x = this.obtainEscapeParam(textState); break; case 'PY': textState.y = this.obtainEscapeParam(textState); break; default: Yanfly.Message.Window_Base_processEscapeCharacter.call(this, code, textState); break; } }; Window_Base.prototype.makeFontBigger = function() { var size = this.contents.fontSize + eval(Yanfly.Param.MSGFontSizeChange); this.contents.fontSize = Math.min(size, Yanfly.Param.MSGFontChangeMax); }; Window_Base.prototype.makeFontSmaller = function() { var size = this.contents.fontSize - eval(Yanfly.Param.MSGFontSizeChange); this.contents.fontSize = Math.max(size, Yanfly.Param.MSGFontChangeMin); }; Yanfly.Message.Window_Base_processNormalCharacter = Window_Base.prototype.processNormalCharacter; Window_Base.prototype.processNormalCharacter = function(textState) { if (this.checkWordWrap(textState)) return this.processNewLine(textState); Yanfly.Message.Window_Base_processNormalCharacter.call(this, textState); }; Window_Base.prototype.checkWordWrap = function(textState) { if (!textState) return false; if (!this._wordWrap) return false; if (textState.text[textState.index] === ' ') { var nextSpace = textState.text.indexOf(' ', textState.index + 1); var nextBreak = textState.text.indexOf('\n', textState.index + 1); if (nextSpace < 0) nextSpace = textState.text.length + 1; if (nextBreak > 0) nextSpace = Math.min(nextSpace, nextBreak); var word = textState.text.substring(textState.index, nextSpace); var size = this.textWidthExCheck(word); } return (size + textState.x > this.wordwrapWidth()); }; Window_Base.prototype.wordwrapWidth = function(){ return this.contents.width; }; Window_Base.prototype.saveCurrentWindowSettings = function(){ this._saveFontFace = this.contents.fontFace; this._saveFontSize = this.contents.fontSize; this._savetextColor = this.contents.textColor; this._saveFontBold = this.contents.fontBold; this._saveFontItalic = this.contents.fontItalic; this._saveOutlineColor = this.contents.outlineColor; this._saveOutlineWidth = this.contents.outlineWidth; }; Window_Base.prototype.restoreCurrentWindowSettings = function(){ this.contents.fontFace = this._saveFontFace; this.contents.fontSize = this._saveFontSize; this.contents.textColor = this._savetextColor; this.contents.fontBold = this._saveFontBold; this.contents.fontItalic = this._saveFontItalic; this.contents.outlineColor = this._saveOutlineColor; this.contents.outlineWidth = this._saveOutlineWidth; }; Window_Base.prototype.clearCurrentWindowSettings = function(){ this._saveFontFace = undefined; this._saveFontSize = undefined; this._savetextColor = undefined; this._saveFontBold = undefined; this._saveFontItalic = undefined; this._saveOutlineColor = undefined; this._saveOutlineWidth = undefined; }; Window_Base.prototype.textWidthExCheck = function(text) { var setting = this._wordWrap; this._wordWrap = false; this.saveCurrentWindowSettings(); this._checkWordWrapMode = true; var value = this.drawTextEx(text, 0, this.contents.height); this._checkWordWrapMode = false; this.restoreCurrentWindowSettings(); this.clearCurrentWindowSettings(); this._wordWrap = setting; return value; }; Yanfly.Message.Window_Help_setItem = Window_Help.prototype.setItem; Window_Help.prototype.setItem = function(item) { if (eval(Yanfly.Param.MSGDescWrap)) { this.setText(item ? '' + item.description : ''); } else { Yanfly.Message.Window_Help_setItem.call(this, item); } }; Window_ChoiceList.prototype.standardFontFace = function() { return $gameSystem.getMessageFontName(); }; Window_ChoiceList.prototype.standardFontSize = function() { return $gameSystem.getMessageFontSize(); }; Yanfly.Message.Window_ChoiceList_updatePlacement = Window_ChoiceList.prototype.updatePlacement; Window_ChoiceList.prototype.updatePlacement = function() { Yanfly.Message.Window_ChoiceList_updatePlacement.call(this); var messagePosType = $gameMessage.positionType(); if (messagePosType === 0) { this.y = this._messageWindow.height; } else if (messagePosType === 2) { this.y = Graphics.boxHeight - this._messageWindow.height - this.height; } }; Yanfly.Message.Window_NumberInput_updatePlacement = Window_NumberInput.prototype.updatePlacement; Window_NumberInput.prototype.updatePlacement = function() { Yanfly.Message.Window_NumberInput_updatePlacement.call(this); var messageY = this._messageWindow.y; var messagePosType = $gameMessage.positionType(); if (messagePosType === 0) { this.y = this._messageWindow.height; } else if (messagePosType === 1) { if (messageY >= Graphics.boxHeight / 2) { this.y = messageY - this.height; } else { this.y = messageY + this._messageWindow.height; } } else if (messagePosType === 2) { this.y = Graphics.boxHeight - this._messageWindow.height - this.height; } }; Yanfly.Message.Window_EventItem_updatePlacement = Window_EventItem.prototype.updatePlacement; Window_EventItem.prototype.updatePlacement = function() { Yanfly.Message.Window_EventItem_updatePlacement.call(this); var messagePosType = $gameMessage.positionType(); if (messagePosType === 0) { this.y = Graphics.boxHeight - this.height; } else if (messagePosType === 2) { this.y = 0; } }; Window_ScrollText.prototype.standardFontFace = function() { return $gameSystem.getMessageFontName(); }; Window_ScrollText.prototype.standardFontSize = function() { return $gameSystem.getMessageFontSize(); }; Yanfly.DisableWebGLMask = false; function Window_NameBox() { this.initialize.apply(this, arguments); } Window_NameBox.prototype = Object.create(Window_Base.prototype); Window_NameBox.prototype.constructor = Window_NameBox; Window_NameBox.prototype.initialize = function(parentWindow) { this._parentWindow = parentWindow; Window_Base.prototype.initialize.call(this, 0, 0, 240, this.windowHeight() + 30); this._text = ''; this._lastNameText = ''; this._openness = 0; this._closeCounter = 0; this.deactivate(); if (eval(Yanfly.Param.MSGNameBoxClear)) { this.backOpacity = 0; this.opacity = 0; } this.hide(); }; Window_NameBox.prototype.windowWidth = function() { this.resetFontSettings(); var dw = this.textWidthEx(this._text); dw += this.padding * 2; var width = dw + eval(Yanfly.Param.MSGNameBoxPadding) return Math.ceil(width); }; Window_NameBox.prototype.textWidthEx = function(text) { return this.drawTextEx(text, 0, this.contents.height); }; Window_NameBox.prototype.calcNormalCharacter = function(textState) { return this.textWidth(textState.text[textState.index++]); }; Window_NameBox.prototype.windowHeight = function() { return this.fittingHeight(1); }; Window_NameBox.prototype.standardFontFace = function() { return $gameSystem.getMessageFontName(); }; Window_NameBox.prototype.standardFontSize = function() { return $gameSystem.getMessageFontSize(); }; Window_NameBox.prototype.update = function() { Window_Base.prototype.update.call(this); if (this.active) return; if (this.isClosed()) return; if (this.isClosing()) return; if (this._closeCounter-- > 0) return; if (this._parentWindow.isClosing()) { this._openness = this._parentWindow.openness; } this.close(); }; Window_NameBox.prototype.refresh = function(text, position) { this.show(); this._lastNameText = text; this._text = Yanfly.Param.MSGNameBoxText + text; this._position = position; this.width = this.windowWidth(); this.createContents(); this.contents.clear(); this.resetFontSettings(); this.changeTextColor(this.textColor(Yanfly.Param.MSGNameBoxColor)); var padding = eval(Yanfly.Param.MSGNameBoxPadding) / 2; this.drawTextEx(this._text, padding, 0, this.contents.width); this._parentWindow.adjustWindowSettings(); this._parentWindow.updatePlacement(); this.adjustPositionX(); this.adjustPositionY(); this.open(); this.activate(); this._closeCounter = 4; return ''; }; Window_NameBox.prototype.adjustPositionX = function() { if (this._position === 1) { this.x = this._parentWindow.x; this.x += eval(Yanfly.Param.MSGNameBoxBufferX); } else if (this._position === 2) { this.x = this._parentWindow.x; this.x += this._parentWindow.width * 3 / 10; this.x -= this.width / 2; } else if (this._position === 3) { this.x = this._parentWindow.x; this.x += this._parentWindow.width / 2; this.x -= this.width / 2; } else if (this._position === 4) { this.x = this._parentWindow.x; this.x += this._parentWindow.width * 7 / 10; this.x -= this.width / 2; } else { this.x = this._parentWindow.x + this._parentWindow.width; this.x -= this.width; this.x -= eval(Yanfly.Param.MSGNameBoxBufferX); } this.x = this.x.clamp(0, Graphics.boxWidth - this.width); }; Window_NameBox.prototype.adjustPositionY = function() { if ($gameMessage.positionType() === 0) { this.y = this._parentWindow.y + this._parentWindow.height; this.y -= eval(Yanfly.Param.MSGNameBoxBufferY); } else { this.y = this._parentWindow.y; this.y -= this.height; this.y += eval(Yanfly.Param.MSGNameBoxBufferY); } if (this.y < 0) { this.y = this._parentWindow.y + this._parentWindow.height; this.y -= eval(Yanfly.Param.MSGNameBoxBufferY); } }; Yanfly.Message.Window_Message_createSubWindows = Window_Message.prototype.createSubWindows; Window_Message.prototype.createSubWindows = function() { Yanfly.Message.Window_Message_createSubWindows.call(this); this._nameWindow = new Window_NameBox(this); Yanfly.nameWindow = this._nameWindow; var scene = SceneManager._scene; scene.addChild(this._nameWindow); }; Window_Message.prototype.numVisibleRows = function() { return $gameSystem.messageRows(); }; Window_Message.prototype.windowWidth = function() { return $gameSystem.messageWidth(); }; Window_Message.prototype.wordwrapWidth = function(){ if (Yanfly.Param.MSGTightWrap && $gameMessage.faceName() !== '') { return this.contents.width - this.newLineX(); } return Window_Base.prototype.wordwrapWidth.call(this); }; Window_Message.prototype.adjustWindowSettings = function() { this.width = this.windowWidth(); this.height = Math.min(this.windowHeight(), Graphics.boxHeight); if (Math.abs(Graphics.boxHeight - this.height) < this.lineHeight()) { this.height = Graphics.boxHeight; } this.createContents(); this.x = (Graphics.boxWidth - this.width) / 2; }; Yanfly.Message.Window_Message_startMessage = Window_Message.prototype.startMessage; Window_Message.prototype.startMessage = function() { this._nameWindow.deactivate(); Yanfly.Message.Window_Message_startMessage.call(this); }; Yanfly.Message.Window_Message_terminateMessage = Window_Message.prototype.terminateMessage; Window_Message.prototype.terminateMessage = function() { this._nameWindow.deactivate(); Yanfly.Message.Window_Message_terminateMessage.call(this); }; Yanfly.Message.Window_Message_newPage = Window_Message.prototype.newPage; Window_Message.prototype.newPage = function(textState) { this.adjustWindowSettings(); Yanfly.Message.Window_Message_newPage.call(this, textState); }; Window_Message.prototype.standardFontFace = function() { return $gameSystem.getMessageFontName(); }; Window_Message.prototype.standardFontSize = function() { return $gameSystem.getMessageFontSize(); }; Window_Message.prototype.newLineX = function() { if ($gameMessage.faceName() === '') { return 4; } else { return eval(Yanfly.Param.MSGFaceIndent); } }; Window_Message.prototype.isFastForward = function() { if (ClickSpeedUpOff) return false; if (!$gameSystem.isFastFowardEnabled()) return false; return Input.isPressed(Yanfly.Param.MSGFastForwardKey); }; Yanfly.Message.Window_Message_updateInput = Window_Message.prototype.updateInput; Window_Message.prototype.updateInput = function() { if (this.pause && this.isFastForward()) { if (!this._textState) { this.pause = false; this.terminateMessage(); } } return Yanfly.Message.Window_Message_updateInput.call(this); }; Yanfly.Message.Window_Message_updateShowFast = Window_Message.prototype.updateShowFast; Window_Message.prototype.updateShowFast = function() { if (this.isFastForward()) this._showFast = true; Yanfly.Message.Window_Message_updateShowFast.call(this); }; Yanfly.Message.Window_Message_updateWait = Window_Message.prototype.updateWait; Window_Message.prototype.updateWait = function() { if (this.isFastForward()) return false; return Yanfly.Message.Window_Message_updateWait.call(this); }; Yanfly.Message.Window_Message_startWait = Window_Message.prototype.startWait; Window_Message.prototype.startWait = function(count) { if (this._checkWordWrapMode) return; Yanfly.Message.Window_Message_startWait.call(this, count); if (this.isFastForward()) this._waitCount = 0; }; Yanfly.Message.Window_Message_startPause = Window_Message.prototype.startPause; Window_Message.prototype.startPause = function() { if (this._checkWordWrapMode) return; Yanfly.Message.Window_Message_startPause.call(this); }; Window_Message.prototype.convertEscapeCharacters = function(text) { text = Window_Base.prototype.convertEscapeCharacters.call(this, text); text = this.convertNameBox(text); text = this.convertMessageCharacters(text); return text; }; Window_Message.prototype.convertNameBox = function(text) { text = text.replace(/\x1bN\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refresh(arguments[1], 1); }, this); text = text.replace(/\x1bN1\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refresh(arguments[1], 1); }, this); text = text.replace(/\x1bN2\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refresh(arguments[1], 2); }, this); text = text.replace(/\x1bN3\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refresh(arguments[1], 3); }, this); text = text.replace(/\x1bNC\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refresh(arguments[1], 3); }, this); text = text.replace(/\x1bN4\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refresh(arguments[1], 4); }, this); text = text.replace(/\x1bN5\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refresh(arguments[1], 5); }, this); text = text.replace(/\x1bNR\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refresh(arguments[1], 5); }, this); return text; }; Window_Message.prototype.convertMessageCharacters = function(text) { text = text.replace(/\x1bAF\[(\d+)\]/gi, function() { var i = parseInt(arguments[1]); return this.convertActorFace($gameActors.actor(i)); }.bind(this)); text = text.replace(/\x1bPF\[(\d+)\]/gi, function() { var i = parseInt(arguments[1]); return this.convertActorFace($gameParty.members()[i - 1]); }.bind(this)); return text; }; Window_Message.prototype.convertActorFace = function(actor) { $gameMessage.setFaceImage(actor.faceName(), actor.faceIndex()); return ''; }; Yanfly.Message.Window_Message_processEscapeCharacter = Window_Message.prototype.processEscapeCharacter; Window_Message.prototype.processEscapeCharacter = function(code, textState) { switch (code) { case '!': if (!this.isFastForward()) this.startPause(); break; case 'W': this.startWait(this.obtainEscapeParam(textState)); default: Yanfly.Message.Window_Message_processEscapeCharacter.call(this, code, textState); break; } }; if (Yanfly.Param.MSGNameBoxClose) { Yanfly.Message.Window_Message_doesContinue = Window_Message.prototype.doesContinue; Window_Message.prototype.doesContinue = function() { var value = Yanfly.Message.Window_Message_doesContinue.call(this); if (!value) return false; if (this.hasDifferentNameBoxText()) { return false; } return true; }; Window_Message.prototype.hasDifferentNameBoxText = function() { var texts = $gameMessage._texts; var length = texts.length; var open = this._nameWindow.isOpen(); for (var i = 0; i < length; ++i) { var text = texts[i]; if (text.length <= 0) continue; if (Yanfly.MsgMacro) { text = this.convertMacroText(text); text = text.replace(/\x1b/gi, '\\'); } if (text.match(/\\(?:N|N1|N2|N3|N4|N5|NC|NR)<(.*)>/i)) { var name = String(RegExp.$1); } else if (text.match(/\\(?:ND|ND1|ND2|ND3|ND4|ND5|NDC|NDR)<(.*)>/i)) { var name = String(RegExp.$1); } else if (text.match(/\\(?:NT|NT1|NT2|NT3|NT4|NT5|NTC|NTR)<(.*)>/i)) { var name = String(RegExp.$1); } if (name) { name = name.replace(/\\V\[(\d+)\]/gi, function() { return $gameVariables.value(parseInt(arguments[1])); }.bind(this)); name = name.replace(/\\V\[(\d+)\]/gi, function() { return $gameVariables.value(parseInt(arguments[1])); }.bind(this)); name = name.replace(/\\N\[(\d+)\]/gi, function() { return this.actorName(parseInt(arguments[1])); }.bind(this)); name = name.replace(/\\P\[(\d+)\]/gi, function() { return this.partyMemberName(parseInt(arguments[1])); }.bind(this)); name = name.replace(/\\/gi, '\x1b'); } if (name && !open) return true; if (name && name !== this._nameWindow._lastNameText) { return true; } } if (open && !name) return true; return false; }; }