1422 lines
51 KiB
JavaScript
1422 lines
51 KiB
JavaScript
//=============================================================================
|
|
// Yanfly Engine Plugins - Message Core
|
|
// YEP_MessageCore.js
|
|
//=============================================================================
|
|
|
|
var Imported = Imported || {};
|
|
Imported.YEP_MessageCore = true;
|
|
|
|
var Yanfly = Yanfly || {};
|
|
Yanfly.Message = Yanfly.Message || {};
|
|
Yanfly.Message.version = 1.19;
|
|
|
|
//=============================================================================
|
|
/*:ja
|
|
* @plugindesc v1.19 メッセージの表示方法や機能をカスタマイズすることができます。
|
|
* @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
|
|
* 翻訳:ムノクラ
|
|
* https://fungamemake.com/
|
|
* https://twitter.com/munokura/
|
|
*
|
|
* ===========================================================================
|
|
* Introduction
|
|
* ===========================================================================
|
|
*
|
|
* RPGツクールMVではメッセージシステムが強化されましたが、このプラグインを使えば
|
|
* 更にアイテム・武器・防具・衣装の名前や、アイコンのテキストコードの
|
|
* 変換を容易に行なうことができます。
|
|
*
|
|
* またこのスクリプトでは、ゲーム中にメッセージウィンドウのサイズを最適化したり
|
|
* セパレートフォントや、テキストの早送り機能を提供します。
|
|
*
|
|
* ===========================================================================
|
|
* Word Wrapping
|
|
* ===========================================================================
|
|
*
|
|
* ワードラップ機能は、メッセージシステム上で使うことができます。
|
|
* プラグインコマンドを用いて、有効/無効の切り替えを行ってください。
|
|
* ワードラップを使うことで、メッセージウィンドウ外へはみ出た文章を、
|
|
* 自動的に次の行に折り返します。この際、エディターの改行入力は無効化され、
|
|
* プラグインによる改行が優先されます。
|
|
*
|
|
* <br>もしくは<line break>というテキストコードを使って、改行を行います。
|
|
* 新しい行を始めたい部分の前、もしくは後にこのコードを入力してください。
|
|
*
|
|
* ワードラップ機能は、メッセージウィンドウ向けの機能ですが、
|
|
* アイテム詳細など、それ以外の部分にもこの機能を用いたい場合、
|
|
* そのテキストの先頭に<WordWrap>と挿入すれば、利用することができます。
|
|
*
|
|
* ===========================================================================
|
|
* Text Codes
|
|
* ===========================================================================
|
|
*
|
|
* メッセージに特定のテキストコードを使用し、
|
|
* 次のコードに置き換えることができます。
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Text Code Function
|
|
* \V[n] n 番目の変数の値と置き換えられます。
|
|
* \N[n] n 番目のアクター名と置き換えられます。
|
|
* \P[n] n 番目のパーティメンバー名と置き換えられます。
|
|
* \G 通貨単位と置き換えられます。
|
|
* \C[n] 続くテキストを、n 番目のカラーで表示します。
|
|
* \I[n] n 番目のアイコンを表示します。
|
|
* \{ テキストサイズを一段階大きくします。
|
|
* \} テキストサイズを一段階小さくします。
|
|
* \\ \のキャラクターと置き換えられます。
|
|
* \$ 所持金ウィンドウを開きます。
|
|
* \. 1/4 秒の間をあけます。
|
|
* \| 1 秒の間をあけます。
|
|
* \! ボタンインプットを待ちます。
|
|
* \> 同じラインの残りのテキストを一気に表示します。
|
|
* \< 上記のエフェクトをキャンセルします。
|
|
* \^ テキスト表示後にインプットを待たなくなります。
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Wait: Effect:
|
|
* \w[x] - x フレーム分の間をあけます (60フレーム = 1秒)
|
|
* メッセージウィンドウ限定の機能です。
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* NameWindow: Effect:
|
|
* \n<x> - 左揃えで x の文字列でネームボックスを作成します。 *注
|
|
* \nc<x> - 中央揃えで x の文字列でネームボックスを作成します。 *注
|
|
* \nr<x> - 右揃えで x の文字列でネームボックスを作成します。 *注
|
|
*
|
|
* *注:メッセージウィンドウのみに有効
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Line Break Effect:
|
|
* <br> - ワードラップモードで改行を行います。
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Position: Effect:
|
|
* \px[x] - テキストのx方向の位置を指定
|
|
* \py[x] - テキストのy方向の位置を指定
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Outline: Effect:
|
|
* \oc[x] - アウトラインの色を x にします。
|
|
* \ow[x] - アウトラインの幅を x にします。
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Font: Effect:
|
|
* \fr - 全てのフォント変更をリセットします。
|
|
* \fs[x] - フォントサイズを x に変更します。
|
|
* \fn<x> - フォント名を x に変更します。
|
|
* \fb - ボールド設定を切り替えます。
|
|
* \fi - イタリック設定を切り替えます。
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Actor: Effect:
|
|
* \af[x] - アクター x の顔を表示します。(注)
|
|
* \ac[x] - アクターの職業名を表示します。
|
|
* \an[x] - アクターのニックネームを表示します。
|
|
*
|
|
* 注:メッセージウィンドウのみで有効
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Party: Effect:
|
|
* \pf[x] - パーティメンバー x の顔を表示します。*注
|
|
* \pc[x] - パーティメンバー x の職業名を表示します。
|
|
* \pn[x] - パーティメンバー x のニックネームを表示します。
|
|
*
|
|
* *注:メッセージウィンドウのみで有効
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Names: Effect:
|
|
* \nc[x] - 職業 x の名前を表示します。
|
|
* \ni[x] - アイテム x の名前を表示します。
|
|
* \nw[x] - 武器 x の名前を表示します。
|
|
* \na[x] - 防具 x の名前を表示します。
|
|
* \ns[x] - スキル x の名前を表示します。
|
|
* \nt[x] - ステート x の名前を表示します。
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* Icon Names: Effect:
|
|
* \nc[x] - 職業 x の名前を表示します。
|
|
* \ni[x] - アイテム x の名前を表示します。
|
|
* \nw[x] - 武器 x の名前を表示します。
|
|
* \na[x] - 防具 x の名前を表示します。
|
|
* \ns[x] - スキル x の名前を表示します。
|
|
* \nt[x] - ステート x の名前を表示します。
|
|
*
|
|
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
*
|
|
* これらはスクリプトと共に加えられたテキストコードです。これらのコードは、
|
|
* メッセージウィンドウにのみ働くものであることに気を付けてください。
|
|
* またそれ以外にも、ヘルプの詳細、アクタープロフィールなどにも有効です。
|
|
*
|
|
* ===========================================================================
|
|
* Plugin Commands
|
|
* ===========================================================================
|
|
*
|
|
* イベントエディタを通して下記のプラグインコマンドを用いることで、メッセージ
|
|
* システムの様々な要素を変更することができます。
|
|
*
|
|
* プラグインコマンド
|
|
* MessageRows 6
|
|
* - 表示されるメッセージの列を6にします。
|
|
* もし[文章の表示]を継続的に使っている場合、
|
|
* 行の上限に到達するまで、
|
|
* あとに続く文章を表示し続けます。
|
|
* それ以降の文章については、
|
|
* 重複回避のためにカットされます。
|
|
*
|
|
* MessageWidth 400
|
|
* - メッセージウィンドウの幅を400ピクセルに変更します。
|
|
* 右側に寄りすぎている文字は、
|
|
* 適宜カットされ調整が行われます。
|
|
*
|
|
* EnableWordWrap
|
|
* - ワードラップを有効にします。
|
|
* 文がウィンドウサイズを超えてしまった時に、自動的に次の行に進みます。
|
|
* 改行する際は '\br'を挿入してください。
|
|
*
|
|
* DisableWordWrap
|
|
* - ワードラップを無効にします。
|
|
* エディタ内で新しい文が始まった地点で、自動的に改行されます。
|
|
*
|
|
* EnableFastForward
|
|
* - メッセージ内の早送りキーを有効にします。
|
|
*
|
|
* DisableFastForward
|
|
* - メッセージ内の早送りキーを無効にします。
|
|
*
|
|
* ===========================================================================
|
|
* Changelog
|
|
* ===========================================================================
|
|
*
|
|
* Version 1.19:
|
|
* - Updated for RPG Maker MV version 1.5.0.
|
|
*
|
|
* Version 1.18:
|
|
* - Added new plugin parameters: 'Font Name CH' and 'Font Name KR'.
|
|
*
|
|
* Version 1.17:
|
|
* - Compatibility update with Message Macros for 'Name Box Auto Close' option.
|
|
*
|
|
* Version 1.16:
|
|
* - Added 'Tight Wrap' plugin parameter as a word wrap option to make the
|
|
* word wrap tighter when using faces.
|
|
*
|
|
* Version 1.15:
|
|
* - Added a failsafe where if the name box window would be off the screen, it
|
|
* will automatically reposition itself to under the main message window.
|
|
*
|
|
* Version 1.14:
|
|
* - Added 'Name Box Close' plugin parameter. If this is enabled, the message
|
|
* window will check for the Name Window speaker each time a follow up message
|
|
* occurs. If the name in the currently Name Window matches the name in the
|
|
* following Name Window, the message window will remain open. If it doesn't,
|
|
* the Name Window will close and reopen to indicate a new speaker.
|
|
*
|
|
* Version 1.13:
|
|
* - Added 'Maintain Font' plugin parameter under the Font category. This will
|
|
* allow you to use text codes \fn<x> and \fs[x] to permanently change the font
|
|
* of your messages until you use it again. \fr will reset them to the plugin's
|
|
* default parameter settings.
|
|
*
|
|
* Version 1.12:
|
|
* - 'Word Wrap Space' parameter no longer leaves a space at the beginning of
|
|
* each message.
|
|
*
|
|
* Version 1.11:
|
|
* - Added 'Font Outline' parameter for the plugin parameters. This adjusts the
|
|
* font outline width used by default for only message fonts.
|
|
*
|
|
* Version 1.10:
|
|
* - Updated the Message Row system for Extended Message Pack 1's Autosizing
|
|
* feature to work with extended heights.
|
|
*
|
|
* Version 1.09:
|
|
* - Replaced 'Fast Forward' parameter with the 'Fast Forward Key' parameter
|
|
* and 'Enable Fast Forward' parameter. Two new Plugin Commands are added. They
|
|
* are 'EnableFastForward' and 'DisableFastForward' for control over when fast
|
|
* forwarding is allowed as to not cause timed cutscenes to desynch.
|
|
*
|
|
* Version 1.08:
|
|
* - Fixed a bug regarding Input Number positioning when the Message Window's
|
|
* position was middle.
|
|
*
|
|
* Version 1.07:
|
|
* - Added 'Word Wrap Space' for word wrap users. This parameter will leave a
|
|
* space behind for those who want a space left behind.
|
|
*
|
|
* Version 1.06:
|
|
* - Fixed a bug that would cause masking problems with mobile devices.
|
|
*
|
|
* Version 1.05:
|
|
* - Fixed a bug that would cause the namebox window to appear distorted.
|
|
*
|
|
* Version 1.04:
|
|
* - Fixed a bug that captured too many text codes with the namebox window.
|
|
* - Timed Name Window's closing speed with main window's closing speed.
|
|
*
|
|
* Verison 1.03:
|
|
* - Fixed a bug with textcodes that messed up wordwrapping.
|
|
* - Fixed a bug with font reset, italic, and bold textcodes.
|
|
*
|
|
* Version 1.02:
|
|
* - Namebox Window's overlap feature that's in every MV window is now disabled
|
|
* to allow for overlapping with main message window.
|
|
* - Updated window positioning for Branch Choices, Number Input, and Item
|
|
* Selection windows.
|
|
*
|
|
* Version 1.01:
|
|
* - Added 'Description Wrap' into the parameters to allow for all item
|
|
* descriptions to be automatically processed with word wrapping.
|
|
*
|
|
* Version 1.00:
|
|
* - Finished plugin!
|
|
*/
|
|
//=============================================================================
|
|
|
|
//=============================================================================
|
|
// Parameter Variables
|
|
//=============================================================================
|
|
|
|
Yanfly.Parameters = PluginManager.parameters('YEP_MessageCore');
|
|
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);
|
|
|
|
//=============================================================================
|
|
// Bitmap
|
|
//=============================================================================
|
|
|
|
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);
|
|
};
|
|
|
|
//=============================================================================
|
|
// Game_System
|
|
//=============================================================================
|
|
|
|
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
|
|
//=============================================================================
|
|
|
|
Game_Message.prototype.addText = function(text) {
|
|
if ($gameSystem.wordWrap()) text = '<WordWrap>' + text;
|
|
this.add(text);
|
|
};
|
|
|
|
//=============================================================================
|
|
// Game_Interpreter
|
|
//=============================================================================
|
|
|
|
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++;
|
|
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() {
|
|
if (this.nextEventCode() === 101 && $gameSystem.messageRows() > 4) {
|
|
return true;
|
|
} else {
|
|
return this.nextEventCode() === 401;
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// Window_Base
|
|
//=============================================================================
|
|
|
|
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) {
|
|
// Font Codes
|
|
text = text.replace(/\x1bFR/gi, '\x1bMSGCORE[0]');
|
|
text = text.replace(/\x1bFB/gi, '\x1bMSGCORE[1]');
|
|
text = text.replace(/\x1bFI/gi, '\x1bMSGCORE[2]');
|
|
// \AC[n]
|
|
text = text.replace(/\x1bAC\[(\d+)\]/gi, function() {
|
|
return this.actorClassName(parseInt(arguments[1]));
|
|
}.bind(this));
|
|
// \AN[n]
|
|
text = text.replace(/\x1bAN\[(\d+)\]/gi, function() {
|
|
return this.actorNickname(parseInt(arguments[1]));
|
|
}.bind(this));
|
|
// \PC[n]
|
|
text = text.replace(/\x1bPC\[(\d+)\]/gi, function() {
|
|
return this.partyClassName(parseInt(arguments[1]));
|
|
}.bind(this));
|
|
// \PN[n]
|
|
text = text.replace(/\x1bPN\[(\d+)\]/gi, function() {
|
|
return this.partyNickname(parseInt(arguments[1]));
|
|
}.bind(this));
|
|
// \NC[n]
|
|
text = text.replace(/\x1bNC\[(\d+)\]/gi, function() {
|
|
return $dataClasses[parseInt(arguments[1])].name;
|
|
}.bind(this));
|
|
// \NI[n]
|
|
text = text.replace(/\x1bNI\[(\d+)\]/gi, function() {
|
|
return $dataItems[parseInt(arguments[1])].name;
|
|
}.bind(this));
|
|
// \NW[n]
|
|
text = text.replace(/\x1bNW\[(\d+)\]/gi, function() {
|
|
return $dataWeapons[parseInt(arguments[1])].name;
|
|
}.bind(this));
|
|
// \NA[n]
|
|
text = text.replace(/\x1bNA\[(\d+)\]/gi, function() {
|
|
return $dataArmors[parseInt(arguments[1])].name;
|
|
}.bind(this));
|
|
// \NE[n]
|
|
text = text.replace(/\x1bNE\[(\d+)\]/gi, function() {
|
|
return $dataEnemies[parseInt(arguments[1])].name;
|
|
}.bind(this));
|
|
// \NS[n]
|
|
text = text.replace(/\x1bNS\[(\d+)\]/gi, function() {
|
|
return $dataSkills[parseInt(arguments[1])].name;
|
|
}.bind(this));
|
|
// \NT[n]
|
|
text = text.replace(/\x1bNT\[(\d+)\]/gi, function() {
|
|
return $dataStates[parseInt(arguments[1])].name;
|
|
}.bind(this));
|
|
// \II[n]
|
|
text = text.replace(/\x1bII\[(\d+)\]/gi, function() {
|
|
return this.escapeIconItem(arguments[1], $dataItems);
|
|
}.bind(this));
|
|
// \IW[n]
|
|
text = text.replace(/\x1bIW\[(\d+)\]/gi, function() {
|
|
return this.escapeIconItem(arguments[1], $dataWeapons);
|
|
}.bind(this));
|
|
// \IA[n]
|
|
text = text.replace(/\x1bIA\[(\d+)\]/gi, function() {
|
|
return this.escapeIconItem(arguments[1], $dataArmors);
|
|
}.bind(this));
|
|
// \IS[n]
|
|
text = text.replace(/\x1bIS\[(\d+)\]/gi, function() {
|
|
return this.escapeIconItem(arguments[1], $dataSkills);
|
|
}.bind(this));
|
|
// \IT[n]
|
|
text = text.replace(/\x1bIT\[(\d+)\]/gi, function() {
|
|
return this.escapeIconItem(arguments[1], $dataStates);
|
|
}.bind(this));
|
|
// Finish
|
|
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;
|
|
};
|
|
|
|
//=============================================================================
|
|
// Window_Help
|
|
//=============================================================================
|
|
|
|
Yanfly.Message.Window_Help_setItem = Window_Help.prototype.setItem;
|
|
Window_Help.prototype.setItem = function(item) {
|
|
if (eval(Yanfly.Param.MSGDescWrap)) {
|
|
this.setText(item ? '<WordWrap>' + item.description : '');
|
|
} else {
|
|
Yanfly.Message.Window_Help_setItem.call(this, item);
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// Window_ChoiceList
|
|
//=============================================================================
|
|
|
|
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;
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// Window_NumberInput
|
|
//=============================================================================
|
|
|
|
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;
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// Window_EventItem
|
|
//=============================================================================
|
|
|
|
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
|
|
//=============================================================================
|
|
|
|
Window_ScrollText.prototype.standardFontFace = function() {
|
|
return $gameSystem.getMessageFontName();
|
|
};
|
|
|
|
Window_ScrollText.prototype.standardFontSize = function() {
|
|
return $gameSystem.getMessageFontSize();
|
|
};
|
|
|
|
//=============================================================================
|
|
// Window_NameBox
|
|
//=============================================================================
|
|
|
|
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());
|
|
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);
|
|
}
|
|
};
|
|
|
|
//=============================================================================
|
|
// Window_Message
|
|
//=============================================================================
|
|
|
|
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 0;
|
|
} else {
|
|
return eval(Yanfly.Param.MSGFaceIndent);
|
|
}
|
|
};
|
|
|
|
Window_Message.prototype.isFastForward = function() {
|
|
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;
|
|
};
|
|
|
|
} // Yanfly.Param.MSGNameBoxClose
|
|
|
|
//=============================================================================
|
|
// End of File
|
|
//=============================================================================
|