//============================================================================= // Yanfly Engine Plugins - Message Core Extension - Extended Message Pack 1 // YEP_X_ExtMesPack1.js //============================================================================= var Imported = Imported || {}; Imported.YEP_X_ExtMesPack1 = true; var Yanfly = Yanfly || {}; Yanfly.EMP1 = Yanfly.EMP1 || {}; Yanfly.EMP1.version = 1.11; //============================================================================= /*: * @plugindesc v1.12 (Requires YEP_MessageCore.js) Letter Sounds, NameBox * Background Types, Choice Control, and more! * @author Yanfly Engine Plugins * * @param ---Letter Sounds--- * @default * * @param Enable Sound * @parent ---Letter Sounds--- * @type boolean * @on Enable * @off Disable * @desc Enable letter by letter sounds by default? * NO - false YES - true * @default true * * @param Sound Name * @parent ---Letter Sounds--- * @type file * @dir audio/se/ * @require 1 * @desc The filename of the SE file. This is case sensitive. * Do not include file extension. * @default Cursor1 * * @param Sound Volume * @parent ---Letter Sounds--- * @type number * @min 0 * @desc The sound volume of the sound effect. * @default 50 * * @param Sound Pitch * @parent ---Letter Sounds--- * @desc The pitch of the sound effect. * @default 100 * * @param Pitch Variance * @parent ---Letter Sounds--- * @desc The amount of pitch variance the sound will have. * @default 10 * * @param Sound Pan * @parent ---Letter Sounds--- * @desc The pan of the sound effect. * @default 0 * * @param Pan Variance * @parent ---Letter Sounds--- * @type number * @min 0 * @desc The amount of pan variance the sound will have. * @default 10 * * @param Sound Interval * @parent ---Letter Sounds--- * @type number * @min 0 * @desc How many letters should be skipped in between sounds? * @default 2 * * @param Reset Sounds * @parent ---Letter Sounds--- * @type boolean * @on Reset * @off Don't Reset * @desc Reset the letter sound at the start of each message? * NO - false YES - true * @default false * * @param ---Message Anchor--- * @default * * @param Default X * @parent ---Message Anchor--- * @type combo * @option left * @option center * @option right * @desc When using the Message Position X mods, anchor X to * left center right * @default center * * @param Default Y * @parent ---Message Anchor--- * @type combo * @option top * @option center * @option bottom * @desc When using the Message Position Y mods, anchor Y to * top center bottom * @default bottom * * @param Auto Row Full Face * @parent ---Message Anchor--- * @type boolean * @on Show * @off Hide * @desc If using auto rows, show the full face art? * NO - false YES - true * @default false * * @param ---Message Choices--- * @default * * @param Max Rows * @parent ---Message Choices--- * @type number * @min 1 * @desc The maximum amount of rows to display for your choices. * Default: 6 * @default 6 * * @param Choice 1 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 2 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 3 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 4 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 5 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 6 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 7 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 8 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 9 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 10 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 11 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 12 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 13 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 14 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 15 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 16 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 17 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 18 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 19 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 20 Show Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is visible to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 1 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 2 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 3 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 4 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 5 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 6 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 7 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 8 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 9 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 10 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 11 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 12 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 13 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 14 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 15 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 16 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 17 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 18 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 19 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @param Choice 20 On Switch * @parent ---Message Choices--- * @type switch * @desc You can tie whether or not a choice is enabled to a switch. * Use the switch ID you wish for this choice. 0 to not use. * @default 0 * * @help * ============================================================================ * Introduction * ============================================================================ * * This plugin requires YEP_MessageCore.js to run. * Place this plugin under YEP_MessageCore.js in the plugin list. * * This plugin extends the amount of things the Message system can do in RPG * Maker MV. These features range from text sounds, more name window options, * face index control, hex colors, extended choice controls, and more precise * window positioning control. New text codes are also added to further ease * the usage of the message window. * * ============================================================================ * Text Codes * ============================================================================ * * By using certain text codes in your messages, you can have the game replace * them with the following: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * LetterSound Effect: * \lson - Turns Letter Sounds on. * \lsoff - Turns Letter Sounds off. * \lsn - Changes Letter Sound to play filename. This is case * sensitive. Do not include the file extension. * \lsv[x] - Sets the volume of the Letter Sound to x. * \lspi[x] - Sets the pitch of the Letter Sound to x. * \lspiv[x] - Sets the pitch variance of the Letter Sound to x. * \lspa[x] - Sets the pan of the Letter Sound to x. * \lspav[x] - Sets the pan variance of the Letter Sound to x. * \lsi[x] - Sets the interval the Letter Sounds play to x. * * *Note: Works for message window only. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * Enemy Name Effect: * \en[x] - Gets the name of the enemy in Database position x. * \et[x] - Gets the name of the enemy in Troop position x. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * NameWindow: Effect: * \n - Creates a name box with x string. Left side. * \nc - Creates a name box with x string. Centered. * \nr - Creates a name box with x string. Right side. * * \nd - Creates a dimmed name box with x string. Left side. * \ndc - Creates a dimmed name box with x string. Centered. * \ndr - Creates a dimmed name box with x string. Right side. * * \nt - Creates a transparent name box with x string. Left side. * \ntc - Creates a transparent name box with x string. Centered. * \ntr - Creates a transparent name box with x string. Right side. * * *Note: Works for message window only. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * MessagePosition Effect: * \msgposx[x] - Sets the X position of the Message Window to x. * \msgposx[auto] - Sets the X position of the Message Window to default. * * \msgposy[x] - Sets the Y position of the Message Window to x. * \msgposy[auto] - Sets the Y position of the Message Window to default. * * \msgevent[x] - Map Field Only! Positions the X and Y position of the * Message Window relative to the event x's position. If you * use 0, the window will be placed relative to the player's * position on the map. * * \msgactor[x] - Requires Battle Engine Core. Battle Only! Puts the * message over actor x's head if actor is in the party. * Otherwise, the message will appear in normal location. * * \msgparty[x] - Requires Battle Engine Core. Battle Only! Puts the * message over party member x's head if member is present. * Otherwise, the message will appear in normal location. * * \msgenemy[x] - Requires Battle Engine Core. Battle Only! Puts the * message over enemy member x's head if member is present. * Otherwise, the message will appear in normal location. * * \msgwidth[x] - Sets the width of the Message Window to x. * \msgwidth[auto] - Sets the width of the Message Window to fit the text. * Do not use the auto function with Word Wrap. * * \msgrows[x] - Sets the rows of the Message Window to x. * \msgrows[auto] - Sets the rows of the Message Window to text. * Do not use the auto function with Word Wrap. * * \auto - Sets the width and rows of the Message window to fit the * current message window. Do not use this with Word Wrap. * * \autoevent[x] - Map Field Only! Sets the width and rows of the Message * window to fit the current message window and positions it * relative to event x. If you use 0, the window will be * placed relative to the player's position on the map. Do * not use this with Word Wrap. * * \autoactor[x] - Requires Battle Engine Core. Battle Only! Sets the width * and rows of the message window to fit the current message * window and puts the message over actor x's head if actor * is in the party. Otherwise, the message will appear in * normal location. Do not use this with Word Wrap. * * \autoparty[x] - Requires Battle Engine Core. Battle Only! Sets the width * and rows of the message window to fit the current message * window and puts the message over party member x's head if * member is present. Otherwise, the message will appear in * normal location. Do not use this with Word Wrap. * * \autoenemy[x] - Requires Battle Engine Core. Battle Only! Sets the width * and rows of the message window to fit the current message * window and puts the message over enemy member x's head if * member is present. Otherwise, the message will appear in * normal location. Do not use this with Word Wrap. * * \msgreset - Resets all of the positioning settings to default. * * * Note: This setting change will remain for just the current message. Going * to the next message will reset this setting back to whatever the default * setting is in the plugin parameters for the Message Core. If you change the * amount of rows past 4, it will not acquire the messages following. You will * need to use the 'MessageRows x' plugin command to accomplish that. These * notetags work for the message window only. * * Do not use the [auto] width and row functions with Word Wrap. Word wrap * will cause them to behave erratically. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * FaceIndex Effect: * \faceindex[x] - Changes the face index of the currently used face * graphic to index x at the start of the message. * * *Note: Works for message window only. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * DigitGroup Effect: * \dg[x] - Groups the number value x with commas. 12345 becomes 12,345. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * HexColor Effect: * \hc[rrggbb] - Changes the text color to a hex color code using red, green, * blue format. For example, pure red is \hc[ff0000]. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * PlayTime Effect: * \playtime - Displays the current playtime of the player. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * MapName Effect: * \map[x] - Displays the map name of Map ID x. If x is 0, it will * display the name of the map the player is currently on. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * ============================================================================ * Plugin Commands * ============================================================================ * * You can use the following plugin commands to adjust a few of the settings * regarding the Message Window. * * Plugin Commands * * --- Letter Sounds --- * * EnableLetterSound * DisableLetterSound * - These commands will enable or disable the letter sounds respectively. * * LetterSoundName Cursor2 * - This will replace the current letter sound with the written filename. * The filename is case sensitive. Do not use the file extension. * * LetterSoundVolume 100 * - This will change the letter sound volume to 100. * * LetterSoundPitch 125 * - This will change the letter sound pitch to 125. * * LetterSoundPitchVariance 10 * - This will cause the letter sound's pitch to fluctuate between -10 & 10. * * LetterSoundPan 0 * - This will change the letter sound's pan to 0. * * LetterSoundPanVariance 10 * - This will cause the letter sound's pan to fluctuate between -10 and 10. * * LetterSoundInterval 2 * - This will change the interval at which the letter sounds are played to * 2 letters. Change it to 0 to play on every letter written out. * * LetterSoundReset * - This will reset the letter sounds to their default settings. * * --- Choice Settings --- * * ChoiceRowMax 4 * - This will set the maximum amount of visible choices to 4. * * HideChoice 5 * - This will cause choice 5 to be hidden. * * ShowChoice 6 * - This will cause choice 6 to be shown and no longer hidden. * * ClearHiddenChoices * - All choices become visible and are no longer hidden. * * DisableChoice 1 * - This will cause choice 1 to be disabled. * * EnableChoice 2 * - This will cause choice 2 to be enabled. * * ClearDisabledChoices * - All choices become enabled and are no longer disabled. * * ClearChoiceSettings * - All choices are shown and enabled. * * --- Message Window Positions --- * * MessageRows 6 * - Changes the Message Rows displayed to 6. If you are using continuous * Show Text events, this will continue displaying the following lines's * texts until it hits the row limit. Anything after that is cut off until * the next message starts to avoid accidental overlap. * * MessageWidth 400 * - Changes the Message Window Width to 400 pixels. This will cut off any * words that are shown too far to the right so adjust accordingly! * * MessagePositionX 300 * - Sets the Message Window's X Position to 300. This position will be * relative to its horizontal anchor point. * * MessagePositionY 400 * - Sets the Message Window's Y Position to 400. This position will be * relative to its vertical anchor point. * * MessagePositionXAuto * - Sets the Message Window's X Position to be automatically fitted and not * set relative to its horizontal anchor point. * * MessagePositionYAuto * - Sets the Message Window's Y Position to be automatically fitted and not * set relative to its vertical anchor point. * * MessageAnchorX left * - Sets the Message Window's x anchor to 'left', 'center', or 'right' if * you are using specified coordinates. * * MessageAnchorY bottom * - Sets the Message Window's y anchor to 'top', 'center', or 'bottom' if * you are using specified coordinates. * * MessagePositionReset * - Resets both the Message Window's X and Y Positions to its automatic * positions and not adjusted to its anchor points. The Message Width and the * Message Rows. * * ============================================================================ * Lunatic Mode - New JavaScript Functions * ============================================================================ * * For those who would like to use script calls to alter Choice Settings, you * can use the following script calls: * * $gameSystem.hideChoice(x) * - This will cause choice x to be hidden. * * $gameSystem.showChoice(x) * - This will cause choice x to be shown. * * $gameSystem.clearHiddenChoices() * - This will clear all of the hidden choices and they will be shown. * * $gameSystem.disableChoice(x) * - This will cause choice x to be disabled. * * $gameSystem.enableChoice(x) * - This will cause choice x to be enabled. * * $gameSystem.clearDisabledChoices() * - This will clear all of the disabled choices and they will all be enabled. * * $gameSystem.clearChoiceSettings() * - This will clear all hidden and disabled settings. * * ============================================================================ * Changelog * ============================================================================ * * Version 1.12: * - Updated message choices to properly show the correct number of rows if an * inadequate number of rows are visible. * * Version 1.11: * - Updated for RPG Maker MV version 1.5.0. * * Version 1.10a: * - Fixed a bug that made auto-messages to not position themselves properly on * events that are using tiles for their images. * - Documentation update to fix documentation errors. * * Version 1.09: * - Fixed a bug with the pitch and pan variance doubling its value. * * Version 1.08: * - Fixed a bug that caused choices from 20 and onward to be hidden/disabled. * * Version 1.07: * - Plugin commands for hiding, showing, enabling, and disabling choices will * now synch with the appropriate switch if there is a switch involved. * * Version 1.06: * - Fixed a width issue with namebox windows used for clear and dimmed * nameboxes. * * Version 1.05: * - Added new plugin commands: HideChoice x, ShowChoice x, ClearHiddenChoices, * DisableChoice x, EnableChoice x, ClearDisabledChoices, ClearChoiceSettings * for those who wish to have more than 20 choices. * - Added new script calls. You can find them in the Lunatic Mode section * under Lunatic Mode - New JavaScript Functions. These are for people who want * to use more than 20 choices. * * Version 1.04a: * - Updated the Autosizing feature to work with \{ and \} text codes. Requires * v1.10 of Message Core. * - Fixed a bug that caused \msgRows[auto] to crash. * * Version 1.03: * - Fixed a bug that caused \., \|, \w[x] to not stall the \auto notetags. * - Fixed a bug involving show/enable switches. * * Version 1.02: * - Added \en[x] and \et[x] text codes to display database enemy names and * troop position enemy names respectively. * * Version 1.01: * - Fixed a bug where using an \auto text code with a \! in the same message * would cause a pause with an empty message. * - When using \|, \., or \w[x], the Letter Sound intervals will reset to 0 to * keep the Letter Sound feeling more natural. * * Version 1.00: * - Finished Plugin! */ //============================================================================= if (Imported.YEP_MessageCore) { //============================================================================= // Parameter Variables //============================================================================= Yanfly.Parameters = PluginManager.parameters('YEP_X_ExtMesPack1'); Yanfly.Param = Yanfly.Param || {}; Yanfly.Param.EMP1LetterSound = eval(String(Yanfly.Parameters['Enable Sound'])); Yanfly.Param.EMP1SoundName = String(Yanfly.Parameters['Sound Name']); Yanfly.Param.EMP1SoundVolume = Number(Yanfly.Parameters['Sound Volume']); Yanfly.Param.EMP1SoundPitch = Number(Yanfly.Parameters['Sound Pitch']); Yanfly.Param.EMP1PitchVar = Number(Yanfly.Parameters['Pitch Variance']); Yanfly.Param.EMP1SoundPan = Number(Yanfly.Parameters['Sound Pan']); Yanfly.Param.EMP1PanVar = Number(Yanfly.Parameters['Pan Variance']); Yanfly.Param.EMP1SoundInterval = Number(Yanfly.Parameters['Sound Interval']); Yanfly.Param.EMP1LetterReset = eval(String(Yanfly.Parameters['Reset Sounds'])); Yanfly.Param.EMP1DefaultX = String(Yanfly.Parameters['Default X']); Yanfly.Param.EMP1DefaultY = String(Yanfly.Parameters['Default Y']); Yanfly.Param.EMP1FullFace = eval(String(Yanfly.Parameters['Auto Row Full Face'])); Yanfly.Param.EMP1MaxRows = Number(Yanfly.Parameters['Max Rows']); Yanfly.Param.EMP1ChoiceShow = []; Yanfly.Param.EMP1ChoiceOn = []; for (Yanfly.i = 1; Yanfly.i < 21; Yanfly.i += 1) { Yanfly.sName = 'Choice ' + Yanfly.i + ' Show Switch'; Yanfly.oName = 'Choice ' + Yanfly.i + ' On Switch'; Yanfly.Param.EMP1ChoiceShow.push(Number(Yanfly.Parameters[Yanfly.sName])); Yanfly.Param.EMP1ChoiceOn.push(Number(Yanfly.Parameters[Yanfly.oName])); }; //============================================================================= // SoundManager //============================================================================= SoundManager.playMessageSound = function() { AudioManager.playSe($gameSystem.getMessageSound()); }; //============================================================================= // Game_System //============================================================================= Yanfly.EMP1.Game_System_initialize = Game_System.prototype.initialize; Game_System.prototype.initialize = function() { Yanfly.EMP1.Game_System_initialize.call(this); this.initMessageSounds(); this.initMessageChoiceRowsMax(); this.initMessagePosition(); }; Game_System.prototype.initMessageSounds = function() { this._msgSoundEnable = Yanfly.Param.EMP1LetterSound; this._msgSoundName = Yanfly.Param.EMP1SoundName; this._msgSoundVol = Yanfly.Param.EMP1SoundVolume; this._msgSoundPitch = Yanfly.Param.EMP1SoundPitch; this._msgSoundPitchVar = Yanfly.Param.EMP1PitchVar; this._msgSoundPan = Yanfly.Param.EMP1SoundPan; this._msgSoundPanVar = Yanfly.Param.EMP1PanVar; this._msgSoundInterval = Yanfly.Param.EMP1SoundInterval; }; Game_System.prototype.getMessageSound = function() { if (this._msgSoundName === undefined) this.initMessageSounds(); var obj = { name: this._msgSoundName, volume: this._msgSoundVol, pitch: this._msgSoundPitch, pan: this._msgSoundPan } var max = this._msgSoundPitch + this._msgSoundPitchVar; var min = this._msgSoundPitch - this._msgSoundPitchVar; obj['pitch'] = Math.floor(Math.random() * ( max - min + 1) + min); var max = this._msgSoundPan + this._msgSoundPanVar; var min = this._msgSoundPan - this._msgSoundPanVar; obj['pan'] = Math.floor(Math.random() * ( max - min + 1) + min); return obj; }; Game_System.prototype.isMessageSoundEnabled = function() { if (this._msgSoundEnable === undefined) this.initMessageSounds(); return this._msgSoundEnable; }; Game_System.prototype.messageSoundInterval = function() { if (this._msgSoundInterval === undefined) this.initMessageSounds(); return this._msgSoundInterval; }; Game_System.prototype.initMessageChoiceRowsMax = function() { this._msgChoiceMax = Yanfly.Param.EMP1MaxRows; }; Game_System.prototype.getMessageChoiceRows = function() { if (this._msgChoiceMax === undefined) this.initMessageChoiceRowsMax(); return Math.max(1, this._msgChoiceMax); }; Game_System.prototype.initChoiceShow = function() { if (this._msgChoiceShowInitialized) return; this._hideChoices = []; var length = Yanfly.Param.EMP1ChoiceShow.length; for (var i = 0; i < length; ++i) { var switchId = Yanfly.Param.EMP1ChoiceShow[i]; if (switchId <= 0) continue; $gameSwitches.setValue(switchId, true); } this._msgChoiceShowInitialized = true; }; Game_System.prototype.initChoiceEnable = function() { if (this._msgChoiceEnableInitialized) return; this._disableChoices = []; var length = Yanfly.Param.EMP1ChoiceOn.length; for (var i = 0; i < length; ++i) { var switchId = Yanfly.Param.EMP1ChoiceOn[i]; if (switchId <= 0) continue; $gameSwitches.setValue(switchId, true); } this._msgChoiceEnableInitialized = true; }; Game_System.prototype.isChoiceShown = function(id) { if (this._hideChoices === undefined) this._hideChoices = []; if (this._hideChoices.contains(id)) return false; if (id >= 20) return true; if (Yanfly.Param.EMP1ChoiceShow[id] <= 0) return true; return $gameSwitches.value(Yanfly.Param.EMP1ChoiceShow[id]); }; Game_System.prototype.hideChoice = function(id) { if (this._hideChoices === undefined) this._hideChoices = []; id -= 1; if (id < 0) return; if (this._hideChoices.contains(id)) return; this._hideChoices.push(id); var switchId = Yanfly.Param.EMP1ChoiceShow[id]; if (switchId) $gameSwitches.setValue(switchId, false); }; Game_System.prototype.showChoice = function(id) { if (this._hideChoices === undefined) this._hideChoices = []; id -= 1; if (id < 0) return; if (!this._hideChoices.contains(id)) return; var index = this._hideChoices.indexOf(id); this._hideChoices.splice(index, 1); var switchId = Yanfly.Param.EMP1ChoiceShow[id]; if (switchId) $gameSwitches.setValue(switchId, true); }; Game_System.prototype.isChoiceEnabled = function(id) { if (this._disableChoices === undefined) this._disableChoices = []; if (this._disableChoices.contains(id)) return false; if (id >= 20) return true; if (Yanfly.Param.EMP1ChoiceOn[id] <= 0) return true; return $gameSwitches.value(Yanfly.Param.EMP1ChoiceOn[id]); }; Game_System.prototype.disableChoice = function(id) { if (this._disableChoices === undefined) this._disableChoices = []; id -= 1; if (id < 0) return; if (this._disableChoices.contains(id)) return; this._disableChoices.push(id); var switchId = Yanfly.Param.EMP1ChoiceOn[id]; if (switchId) $gameSwitches.setValue(switchId, false); }; Game_System.prototype.enableChoice = function(id) { if (this._disableChoices === undefined) this._disableChoices = []; id -= 1; if (id < 0) return; if (!this._disableChoices.contains(id)) return; var index = this._disableChoices.indexOf(id); this._disableChoices.splice(index, 1); var switchId = Yanfly.Param.EMP1ChoiceOn[id]; if (switchId) $gameSwitches.setValue(switchId, true); }; Game_System.prototype.clearHiddenChoices = function() { this._msgChoiceShowInitialized = false; this.initChoiceShow(); }; Game_System.prototype.clearDisabledChoices = function() { this._msgChoiceEnableInitialized = false; this.initChoiceEnable(); }; Game_System.prototype.clearChoiceSettings = function() { this.clearHiddenChoices(); this.clearDisabledChoices(); }; Game_System.prototype.initMessagePosition = function() { this._msgWindowPositionX = 'auto'; this._msgWindowPositionY = 'auto'; if (Yanfly.Param.EMP1DefaultX.match(/center/i)) { this._msgWindowAnchorX = 0.5; } else if (Yanfly.Param.EMP1DefaultX.match(/right/i)) { this._msgWindowAnchorX = 1; } else { this._msgWindowAnchorX = 0; } if (Yanfly.Param.EMP1DefaultY.match(/center/i)) { this._msgWindowAnchorY = 0.5; } else if (Yanfly.Param.EMP1DefaultY.match(/bottom/i)) { this._msgWindowAnchorY = 1; } else { this._msgWindowAnchorY = 0; } }; Game_System.prototype.getMessagePositionX = function() { if (this._msgWindowPositionX === undefined) this.initMessagePosition(); return this._msgWindowPositionX; }; Game_System.prototype.getMessagePositionY = function() { if (this._msgWindowPositionY === undefined) this.initMessagePosition(); return this._msgWindowPositionY; }; Game_System.prototype.getMessageAnchorX = function() { if (this._msgWindowAnchorX === undefined) this.initMessagePosition(); return this._msgWindowAnchorX; }; Game_System.prototype.getMessageAnchorY = function() { if (this._msgWindowAnchorY === undefined) this.initMessagePosition(); return this._msgWindowAnchorY; }; Game_System.prototype.setMessagePositionX = function(value) { if (this._msgWindowPositionX === undefined) this.initMessagePosition(); this._msgWindowPositionX = value; }; Game_System.prototype.setMessagePositionY = function(value) { if (this._msgWindowPositionY === undefined) this.initMessagePosition(); this._msgWindowPositionY = value; }; Game_System.prototype.setMessageAnchorX = function(value) { if (this._msgWindowAnchorX === undefined) this.initMessagePosition(); this._msgWindowAnchorX = value; }; Game_System.prototype.setMessageAnchorY = function(value) { if (this._msgWindowAnchorY === undefined) this.initMessagePosition(); this._msgWindowAnchorY = value; }; //============================================================================= // Game_CharacterBase //============================================================================= Game_CharacterBase.prototype.spriteHeight = function() { if (this._spriteHeight !== undefined) return this._spriteHeight; if (this.tileId() > 0) return $gameMap.tileHeight(); var bitmap = ImageManager.loadCharacter(this.characterName()); if (!bitmap) { this._spriteHeight = 0; return this._spriteHeight; } var bigCharacter = ImageManager.isBigCharacter(this.characterName()); this._spriteHeight = bitmap.height; this._spriteHeight /= (bigCharacter) ? 4 : 8; return this._spriteHeight; }; //============================================================================= // Game_Interpreter //============================================================================= Yanfly.EMP1.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { Yanfly.EMP1.Game_Interpreter_pluginCommand.call(this, command, args); if ($gameSystem._msgSoundEnable === undefined) { $gameSystem.initMessageSounds(); } else if (command === 'EnableLetterSound') { $gameSystem._msgSoundEnable = true; } else if (command === 'DisableLetterSound') { $gameSystem._msgSoundEnable = false; } else if (command === 'LetterSoundName') { this.changeLetterSoundName(args); } else if (command === 'LetterSoundVolume') { $gameSystem._msgSoundVol = parseInt(args[0]); } else if (command === 'LetterSoundPitch') { $gameSystem._msgSoundPitch = parseInt(args[0]); } else if (command === 'LetterSoundPitchVariance') { $gameSystem._msgSoundPitchVar = parseInt(args[0]); } else if (command === 'LetterSoundPan') { $gameSystem._msgSoundPan = parseInt(args[0]); } else if (command === 'LetterSoundPanVariance') { $gameSystem._msgSoundPanVar = parseInt(args[0]); } else if (command === 'LetterSoundInterval') { $gameSystem._msgSoundInterval = parseInt(args[0]); } else if (command === 'LetterSoundReset') { $gameSystem.initMessageSounds(); } else if (command === 'ChoiceRowMax') { $gameSystem._msgChoiceMax = parseInt(args[0]); } else if (command === 'HideChoice') { $gameSystem.hideChoice(parseInt(args[0])); } else if (command === 'ShowChoice') { $gameSystem.showChoice(parseInt(args[0])); } else if (command === 'ClearHiddenChoices') { $gameSystem.clearHiddenChoices(); } else if (command === 'DisableChoice') { $gameSystem.disableChoice(parseInt(args[0])); } else if (command === 'EnableChoice') { $gameSystem.enableChoice(parseInt(args[0])); } else if (command === 'ClearDisabledChoices') { $gameSystem.clearDisabledChoices(); } else if (command === 'ClearChoiceSettings') { $gameSystem.clearChoiceSettings(); } else if (command === 'MessagePositionX') { $gameSystem.setMessagePositionX(parseInt(args[0])); } else if (command === 'MessagePositionY') { $gameSystem.setMessagePositionY(parseInt(args[0])); } else if (command === 'MessagePositionXAuto') { $gameSystem.setMessagePositionX('auto'); } else if (command === 'MessagePositionYAuto') { $gameSystem.setMessagePositionY('auto'); } else if (command === 'MessageAnchorX') { this.setMessageAnchor(args[0], 'x'); } else if (command === 'MessageAnchorY') { this.setMessageAnchor(args[0], 'y'); } else if (command === 'MessagePositionReset') { $gameSystem.initMessagePosition(); $gameSystem._messageRows = eval(Yanfly.Param.MSGDefaultRows); $gameSystem._messageWidth = eval(Yanfly.Param.MSGDefaultWidth); } }; Game_Interpreter.prototype.changeLetterSoundName = function(args) { var text = ''; if (args.length === 1) { $gameSystem._msgSoundName = String(args[0]); return; } for (var i = 0; i < args.length; ++i) { text = text + ' ' + args[i]; } $gameSystem._msgSoundName = text; }; Game_Interpreter.prototype.setMessageAnchor = function(string, type) { if (type === 'x') { if (string.match(/center/i)) { $gameSystem.setMessageAnchorX(0.5); } else if (string.match(/right/i)) { $gameSystem.setMessageAnchorX(1); } else { $gameSystem.setMessageAnchorX(0); } } else { if (string.match(/center/i)) { $gameSystem.setMessageAnchorY(0.5); } else if (string.match(/bottom/i)) { $gameSystem.setMessageAnchorY(1); } else { $gameSystem.setMessageAnchorY(0); } } }; Yanfly.EMP1.Game_Interpreter_setupChoices = Game_Interpreter.prototype.setupChoices; Game_Interpreter.prototype.setupChoices = function(params) { params = this.setupExtendedChoices(); Yanfly.EMP1.Game_Interpreter_setupChoices.call(this, params); }; Game_Interpreter.prototype.setupExtendedChoices = function() { this._currentIndex = this._index; var totalChoices = 0; ++this._index; while (this._index < this._list.length) { var cmd = this._list[this._index] if (cmd.indent === this._indent) { if (cmd.code === 404 && this._list[this._index + 1].code !== 102) { break } else if (cmd.code === 102) { this.adjustChoiceDefault(totalChoices, cmd); this.adjustChoiceCancel(totalChoices, cmd); this.pushExtraChoices(cmd); this._index -= 2; } else if (cmd.code === 402) { cmd.parameters[0] = totalChoices; totalChoices += 1; } } this._index += 1; } this._index = this._currentIndex; return this._list[this._currentIndex].parameters; }; Game_Interpreter.prototype.adjustChoiceDefault = function(total, cmd) { if (cmd.parameters[2] < 0) return; var value = cmd.parameters[2] + total; this._list[this._currentIndex].parameters[2] = value; }; Game_Interpreter.prototype.adjustChoiceCancel = function(total, cmd) { if (cmd.parameters[1] >= 0) { var value = cmd.parameters[1] + total; this._list[this._currentIndex].parameters[1] = value; } else if (cmd.parameters[1] === -2) { this._list[this._currentIndex].parameters[1] = cmd.parameters[1]; } }; Game_Interpreter.prototype.pushExtraChoices = function(cmd) { for (var i = 0; i < cmd.parameters[0].length; i++) { var choice = cmd.parameters[0][i]; this._list[this._currentIndex].parameters[0].push(choice); } this._list.splice(this._index - 1, 2) }; //============================================================================= // Window_Base //============================================================================= Yanfly.EMP1.Window_Base_convertExtraEscapeCharacters = Window_Base.prototype.convertExtraEscapeCharacters; Window_Base.prototype.convertExtraEscapeCharacters = function(text) { text = this.convertPlaytime(text); text = this.convertMapName(text); text = this.convertEnemyName(text); text = Yanfly.EMP1.Window_Base_convertExtraEscapeCharacters.call(this, text); text = this.convertDigitGrouping(text); return text; }; Window_Base.prototype.convertPlaytime = function(text) { text = text.replace(/\x1bPLAYTIME/gi, function() { return $gameSystem.playtimeText(); }.bind(this)); return text; }; Window_Base.prototype.convertMapName = function(text) { text = text.replace(/\x1bMAP\[(\d+)\]/gi, function() { var mapId = arguments[1]; if (mapId <= 0) mapId = $gameMap.mapId(); name = $dataMapInfos[mapId].name; return name; }.bind(this)); return text; }; Window_Base.prototype.convertEnemyName = function(text) { text = text.replace(/\x1bEN\[(\d+)\]/gi, function() { var enemyId = arguments[1]; if (enemyId <= 0) return ''; name = $dataEnemies[enemyId].name; return name; }.bind(this)); text = text.replace(/\x1bET\[(\d+)\]/gi, function() { var index = Math.max(1, arguments[1] - 1); var enemy = $gameTroop.allMembers()[index]; if (enemy) { return enemy.name(); } else { return ''; } }.bind(this)); return text; }; Window_Base.prototype.convertDigitGrouping = function(text) { text = text.replace(/\x1bDG\[(\d+)\]/gi, function() { return this.groupDigits(parseInt(arguments[1])); }.bind(this)); return text; }; Window_Base.prototype.groupDigits = function(number) { return Yanfly.Util.forceGroup(number); }; Window_Base.prototype.obtainColorString = 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 '#ffffff'; } }; Yanfly.EMP1.Window_Base_processEscapeCharacter = Window_Base.prototype.processEscapeCharacter; Window_Base.prototype.processEscapeCharacter = function(code, textState) { switch (code) { case 'HC': var value = this.obtainColorString(textState).toLowerCase(); this.changeTextColor(value); break; default: Yanfly.EMP1.Window_Base_processEscapeCharacter.call(this, code, textState); break; } }; Window_Base.prototype.textHeightEx = function(text) { return this.getTextExHeight(text, 0, 0); }; Window_Base.prototype.getTextExHeight = function(text, x, y) { if (text) { var textState = { index: 0, x: x, y: y, left: x }; textState.text = this.convertEscapeCharacters(text); textState.height = this.calcTextHeight(textState, true); return textState.height; } else { return 0; } }; //============================================================================= // Window_ChoiceList //============================================================================= Yanfly.EMP1.Window_ChoiceList_numVisibleRows = Window_ChoiceList.prototype.numVisibleRows; Window_ChoiceList.prototype.numVisibleRows = function() { var messageY = this._messageWindow.y; var messageHeight = this._messageWindow.height; var centerY = Graphics.boxHeight / 2; // var choices = $gameMessage.choices(); // var numLines = choices.length; this.makeCommandList(); var numLines = this._maxChoices; var maxLines = $gameSystem.getMessageChoiceRows(); if (messageY < centerY && messageY + messageHeight > centerY) { maxLines = 4; } if (numLines > maxLines) { numLines = maxLines; } return Math.max(1, numLines); }; Window_ChoiceList.prototype.makeCommandList = function() { this._maxChoices = 0; this._cancelAllowed = true; var choices = $gameMessage.choices(); for (var i = 0; i < choices.length; i++) { if (!$gameSystem.isChoiceShown(i)) { if ($gameMessage.choiceCancelType() === i) this._cancelAllowed = false; continue; } this._maxChoices += 1; var enabled = $gameSystem.isChoiceEnabled(i); this.addCommand(choices[i], 'choice', enabled, i); if (!enabled) { if ($gameMessage.choiceCancelType() === i) this._cancelAllowed = false; } } }; Yanfly.EMP1.Window_ChoiceList_drawItem = Window_ChoiceList.prototype.drawItem; Window_ChoiceList.prototype.drawItem = function(index) { var enabled = this.isCommandEnabled(index); this.changePaintOpacity(enabled); Yanfly.EMP1.Window_ChoiceList_drawItem.call(this, index); }; Window_ChoiceList.prototype.callOkHandler = function() { $gameMessage.onChoice(this.currentExt()); this._messageWindow.terminateMessage(); this.close(); }; Yanfly.EMP1.Window_ChoiceList_isCancelEnabled = Window_ChoiceList.prototype.isCancelEnabled; Window_ChoiceList.prototype.isCancelEnabled = function() { if (!this._cancelAllowed) return false; return Yanfly.EMP1.Window_ChoiceList_isCancelEnabled.call(this); }; //============================================================================= // Window_NameBox //============================================================================= Yanfly.EMP1.Window_NameBox_refresh = Window_NameBox.prototype.refresh; Window_NameBox.prototype.refresh = function(text, position) { var text = Yanfly.EMP1.Window_NameBox_refresh.call(this, text, position); this.setBackgroundType(0); if (eval(Yanfly.Param.MSGNameBoxClear)) { this.backOpacity = 0; this.opacity = 0; } else { this.backOpacity = this.standardBackOpacity(); this.opacity = 255; } return text; }; Window_NameBox.prototype.refreshDimmed = function(text, position) { var text = Yanfly.EMP1.Window_NameBox_refresh.call(this, text, position); this.setBackgroundType(1); return text; }; Window_NameBox.prototype.refreshTransparent = function(text, position) { var text = Yanfly.EMP1.Window_NameBox_refresh.call(this, text, position); this.setBackgroundType(2); return text; }; //============================================================================= // Window_Message //============================================================================= Yanfly.EMP1.Window_Message_initialize = Window_Message.prototype.initialize; Window_Message.prototype.initialize = function() { $gameSystem.initChoiceShow(); $gameSystem.initChoiceEnable(); this._needsMessageReset = false; Yanfly.EMP1.Window_Message_initialize.call(this); }; Yanfly.EMP1.Window_Message_update = Window_Message.prototype.update; Window_Message.prototype.update = function() { Yanfly.EMP1.Window_Message_update.call(this); if (this._lockPositionToEvent !== undefined) this.updateLockedPosition(); }; Yanfly.EMP1.Window_Message_newPage = Window_Message.prototype.newPage; Window_Message.prototype.newPage = function(textState) { this._soundCount = 0; Yanfly.EMP1.Window_Message_newPage.call(this, textState); }; Yanfly.EMP1.Window_Message_terminateMessage = Window_Message.prototype.terminateMessage; Window_Message.prototype.terminateMessage = function() { Yanfly.EMP1.Window_Message_terminateMessage.call(this); if (Yanfly.Param.EMP1LetterReset) $gameSystem.initMessageSounds(); if (this._needsMessageReset) this.messagePositionReset(); this._lockPositionToEvent = undefined; }; Yanfly.EMP1.Window_Message_updateMessage = Window_Message.prototype.updateMessage; Window_Message.prototype.updateMessage = function() { var state = Yanfly.EMP1.Window_Message_updateMessage.call(this); if (state) { this._soundCount = this._soundCount || 0; if (this._soundCount-- <= 0) { this._soundCount = $gameSystem.messageSoundInterval(); if ($gameSystem.isMessageSoundEnabled()) SoundManager.playMessageSound(); } } return state; }; Yanfly.EMP1.Window_Message_updatePlacement = Window_Message.prototype.updatePlacement; Window_Message.prototype.updatePlacement = function() { Yanfly.EMP1.Window_Message_updatePlacement.call(this); this.updatePositionPlacement(); }; Window_Message.prototype.updatePositionPlacement = function() { if ($gameSystem.getMessagePositionX() !== 'auto') { this.updatePositionPlacementX(); } if ($gameSystem.getMessagePositionY() !== 'auto') { this.updatePositionPlacementY(); } }; Window_Message.prototype.updatePositionPlacementX = function() { this.x = $gameSystem.getMessagePositionX(); this.x -= Math.floor(this.width * $gameSystem.getMessageAnchorX()) this.x = Math.max(0, this.x); this.x = Math.min(this.x, Graphics.boxWidth - this.width); }; Window_Message.prototype.updatePositionPlacementY = function() { this.y = $gameSystem.getMessagePositionY(); this.y -= Math.floor(this.height * $gameSystem.getMessageAnchorY()); this.y = Math.max(0, this.y); this.y = Math.min(this.y, Graphics.boxHeight - this.height); }; Yanfly.EMP1.Window_Message_convertNameBox = Window_Message.prototype.convertNameBox; Window_Message.prototype.convertNameBox = function(text) { text = this.convertMessagePositions(text); text = this.convertLetterSounds(text); text = this.convertExtraNameBoxEffects(text); return Yanfly.EMP1.Window_Message_convertNameBox.call(this, text); }; Window_Message.prototype.convertLetterSounds = function(text) { text = text.replace(/\x1bLSON/gi, '\x1bEMP[0]'); text = text.replace(/\x1bLSOFF/gi, '\x1bEMP[1]'); text = text.replace(/\x1bLSR/gi, '\x1bEMP[2]'); return text; }; Window_Message.prototype.convertMessagePositions = function(text) { // MSGPOSX text = text.replace(/\x1bMSGPOSX\[(.*?)\]/gi, function() { var value = 0; this._needsMessageReset = true; value = (arguments[1].match(/auto/i)) ? 'auto' : parseInt(arguments[1]); $gameSystem.setMessagePositionX(value); return ''; }.bind(this)); // MSGPOSY text = text.replace(/\x1bMSGPOSY\[(.*?)\]/gi, function() { var value = 0; this._needsMessageReset = true; value = (arguments[1].match(/auto/i)) ? 'auto' : parseInt(arguments[1]); $gameSystem.setMessagePositionY(value); return ''; }.bind(this)); // MSGEVENT text = text.replace(/\x1bMSGEVENT\[(\d+)\]/gi, function() { if (!$gameParty.inBattle()) { this._needsMessageReset = true; this.setMessagePositionEvent(arguments[1]); } return ''; }.bind(this)); // MSGACTOR text = text.replace(/\x1bMSGACTOR\[(\d+)\]/gi, function() { if ($gameParty.inBattle()) { this._needsMessageReset = true; var actorId = arguments[1]; if (actorId === 0) actorId = $gameParty.members()[0]._actorId; this.setMessagePositionEvent(actorId); } return ''; }.bind(this)); // MSGPARTY text = text.replace(/\x1bMSGPARTY\[(\d+)\]/gi, function() { if ($gameParty.inBattle()) { this._needsMessageReset = true; var actorId = Math.max(0, arguments[1] - 1); var battler = $gameParty.allMembers()[actorId]; if (battler) { actorId = battler._actorId; } else { actorId = Graphics.boxHeight * 495; } this.setMessagePositionEvent(actorId); } return ''; }.bind(this)); // MSGENEMY text = text.replace(/\x1bMSGENEMY\[(\d+)\]/gi, function() { if ($gameParty.inBattle()) { this._needsMessageReset = true; var enemyId = Math.max(0, arguments[1] - 1); var battler = $gameTroop.members()[enemyId]; if (battler) { this.setMessagePositionEvent(-enemyId); } } return ''; }.bind(this)); // AUTOEVENT text = text.replace(/\x1bAUTOEVENT\[(\d+)\]/gi, function() { if (!$gameParty.inBattle() && !this._checkingWidth) { this._needsMessageReset = true; this.setMessagePositionEvent(arguments[1]); this._checkingWidth = true; this.getFittedMessageRows(text); var value = this.getFittedMessageWidth(text); $gameSystem._messageWidth = value; this._checkingWidth = false; } return ''; }.bind(this)); // AUTOACTOR text = text.replace(/\x1bAUTOACTOR\[(\d+)\]/gi, function() { if ($gameParty.inBattle() && !this._checkingWidth) { this._needsMessageReset = true; var actorId = arguments[1]; if (actorId === 0) actorId = $gameParty.members()[0]._actorId; this.setMessagePositionEvent(actorId); this._checkingWidth = true; this.getFittedMessageRows(text); var value = this.getFittedMessageWidth(text); $gameSystem._messageWidth = value; this._checkingWidth = false; } return ''; }.bind(this)); // AUTOPARTY text = text.replace(/\x1bAUTOPARTY\[(\d+)\]/gi, function() { if ($gameParty.inBattle() && !this._checkingWidth) { this._needsMessageReset = true; var actorId = Math.max(0, arguments[1] - 1); var battler = $gameParty.allMembers()[actorId]; if (battler) { actorId = battler._actorId; } else { actorId = Graphics.boxHeight * 495; } this.setMessagePositionEvent(actorId); this._checkingWidth = true; this.getFittedMessageRows(text); var value = this.getFittedMessageWidth(text); $gameSystem._messageWidth = value; this._checkingWidth = false; } return ''; }.bind(this)); // AUTOENEMY text = text.replace(/\x1bAUTOENEMY\[(\d+)\]/gi, function() { if ($gameParty.inBattle() && !this._checkingWidth) { this._needsMessageReset = true; var enemyId = Math.max(0, arguments[1] - 1); var battler = $gameTroop.members()[enemyId]; if (battler) { this.setMessagePositionEvent(-enemyId); } this._checkingWidth = true; this.getFittedMessageRows(text); var value = this.getFittedMessageWidth(text); $gameSystem._messageWidth = value; this._checkingWidth = false; } return ''; }.bind(this)); // MSGROWS text = text.replace(/\x1bMSGROWS\[(.*?)\]/gi, function() { if (!this._checkingWidth) { this._checkingWidth = true; this._needsMessageReset = true; var value = 0; value = (arguments[1].match(/auto/i)) ? 'auto' : parseInt(arguments[1]); if (value === 'auto') { this.getFittedMessageRows(text); } else { $gameSystem._messageRows = value; } this._checkingWidth = false; } return ''; }.bind(this)); // MSGWIDTH text = text.replace(/\x1bMSGWIDTH\[(.*?)\]/gi, function() { if (!this._checkingWidth) { this._checkingWidth = true; var value = 0; this._needsMessageReset = true; value = (arguments[1].match(/auto/i)) ? 'auto' : parseInt(arguments[1]); if (value === 'auto') value = this.getFittedMessageWidth(text); $gameSystem._messageWidth = value; this._checkingWidth = false; } return ''; }.bind(this)); // AUTO text = text.replace(/\x1bAUTO/gi, function() { if (!this._checkingWidth) { this._checkingWidth = true; this._needsMessageReset = true; this.getFittedMessageRows(text); var value = this.getFittedMessageWidth(text); $gameSystem._messageWidth = value; this._checkingWidth = false; } return ''; }.bind(this)); // MSGRESET text = text.replace(/\x1bMSGRESET/gi, function() { this.messagePositionReset(); this._needsMessageReset = true; return ''; }.bind(this)); return text; }; Window_Message.prototype.setMessagePositionEvent = function(eventId) { this._lockPositionToEvent = eventId; }; Window_Message.prototype.getFittedMessageRows = function(text) { var height = this.textHeightEx(text); if (Yanfly.Param.EMP1FullFace && this.newLineX() > 0) { height = Math.max(height, Window_Base._faceHeight); } $gameSystem._messageRows = height / this.lineHeight(); }; Window_Message.prototype.getFittedMessageWidth = function(text) { var value = 0; var lines = text.split('\n'); var length = lines.length; for (var i = 0; i < length; ++i) { var line = lines[i]; var lineWidth = this.textWidthEx(line); value = Math.max(value, lineWidth); } value += this.newLineX(); value += this.standardPadding() * 2; value += this.textPadding(); return value; }; Window_Message.prototype.messagePositionReset = function() { $gameSystem.initMessagePosition(); $gameSystem._messageRows = eval(Yanfly.Param.MSGDefaultRows); $gameSystem._messageWidth = eval(Yanfly.Param.MSGDefaultWidth); this._needsMessageReset = false; }; Window_Message.prototype.convertExtraNameBoxEffects = function(text) { // Dimmed Namebox text = text.replace(/\x1bND\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshDimmed(arguments[1], 1); }, this); text = text.replace(/\x1bND1\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshDimmed(arguments[1], 1); }, this); text = text.replace(/\x1bND2\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshDimmed(arguments[1], 2); }, this); text = text.replace(/\x1bND3\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshDimmed(arguments[1], 3); }, this); text = text.replace(/\x1bNDC\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshDimmed(arguments[1], 3); }, this); text = text.replace(/\x1bND4\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshDimmed(arguments[1], 4); }, this); text = text.replace(/\x1bND5\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshDimmed(arguments[1], 5); }, this); text = text.replace(/\x1bNDR\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshDimmed(arguments[1], 5); }, this); // Transparent Namebox text = text.replace(/\x1bNT\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshTransparent(arguments[1], 1); }, this); text = text.replace(/\x1bNT1\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshTransparent(arguments[1], 1); }, this); text = text.replace(/\x1bNT2\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshTransparent(arguments[1], 2); }, this); text = text.replace(/\x1bNT3\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshTransparent(arguments[1], 3); }, this); text = text.replace(/\x1bNTC\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshTransparent(arguments[1], 3); }, this); text = text.replace(/\x1bNT4\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshTransparent(arguments[1], 4); }, this); text = text.replace(/\x1bNT5\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshTransparent(arguments[1], 5); }, this); text = text.replace(/\x1bNTR\<(.*?)\>/gi, function() { return Yanfly.nameWindow.refreshTransparent(arguments[1], 5); }, this); return text; }; Window_Message.prototype.convertFaceIndexChange = function(text) { // FACEINDEX text = text.replace(/\x1bFACEINDEX\[(\d+)\]/gi, function() { var i = parseInt(arguments[1]); $gameMessage._faceIndex = i; return ''; }.bind(this)); return text }; Yanfly.EMP1.Window_Message_convertMessageCharacters = Window_Message.prototype.convertMessageCharacters; Window_Message.prototype.convertMessageCharacters = function(text) { text = Yanfly.EMP1.Window_Message_convertMessageCharacters.call(this, text); text = this.convertFaceIndexChange(text); return text; }; Yanfly.EMP1.Window_Message_processEscapeCharacter = Window_Message.prototype.processEscapeCharacter; Window_Message.prototype.processEscapeCharacter = function(code, textState) { switch (code) { case 'EMP': var id = this.obtainEscapeParam(textState); if (id === 0) $gameSystem._msgSoundEnable = true; if (id === 1) $gameSystem._msgSoundEnable = false; if (id === 2) $gameSystem.initMessageSounds(); break; case 'LSN': var name = this.obtainEscapeString(textState); $gameSystem._msgSoundName = name; break; case 'LSV': var value = this.obtainEscapeParam(textState); $gameSystem._msgSoundVol = value; break; case 'LSPIV': var value = this.obtainEscapeParam(textState); $gameSystem._msgSoundPitchVar = value; break; case 'LSPI': var value = this.obtainEscapeParam(textState); $gameSystem._msgSoundPitch = value; break; case 'LSPAV': var value = this.obtainEscapeParam(textState); $gameSystem._msgSoundPanVar = value; case 'LSPA': var value = this.obtainEscapeParam(textState); $gameSystem._msgSoundPan = value; break; case 'LSI': var value = this.obtainEscapeParam(textState); $gameSystem._msgSoundInterval = value; break; case 'LSRESET': $gameSystem.initMessageSounds(); break; default: Yanfly.EMP1.Window_Message_processEscapeCharacter.call(this, code, textState); break; } }; Window_Message.prototype.updateLockedPosition = function() { eventId = this._lockPositionToEvent; var x = Graphics.boxWidth / 2; var y = Graphics.boxHeight; if ($gameParty.inBattle()) { if (Imported.YEP_BattleEngineCore) { if (eventId > 0) { var battler = $gameActors.actor(eventId); if (!$gameParty.battleMembers().contains(battler)) battler = null; } else { eventId *= -1; var battler = $gameTroop.members()[eventId]; } if (battler) { x = battler.spritePosX(); y = battler.spritePosY() - battler.spriteHeight(); } } } else { if (eventId <= 0) { x = $gamePlayer.screenX(); y = $gamePlayer.screenY(); y -= $gamePlayer.spriteHeight(); } else { var ev = $gameMap.event(eventId); if (ev) { x = ev.screenX(); y = ev.screenY(); y -= ev.spriteHeight(); } } } $gameSystem.setMessagePositionX(x); $gameSystem.setMessagePositionY(y); this.updatePositionPlacement(); this._nameWindow.adjustPositionX(); this._nameWindow.adjustPositionY(); }; Yanfly.EMP1.Window_Message_startWait = Window_Message.prototype.startWait; Window_Message.prototype.startWait = function(count) { if (this._checkingWidth) return; Yanfly.EMP1.Window_Message_startWait.call(this, count); this._soundCount = 0; }; Yanfly.EMP1.Window_Message_startPause = Window_Message.prototype.startPause; Window_Message.prototype.startPause = function() { if (this._checkingWidth) return; Yanfly.EMP1.Window_Message_startPause.call(this); }; //============================================================================= // Utilities //============================================================================= Yanfly.Util = Yanfly.Util || {}; Yanfly.Util.forceGroup = function(inVal) { if (typeof inVal !== 'string') { inVal = String(inVal); } return inVal.replace(/(^|[^\w.])(\d{4,})/g, function($0, $1, $2) { return $1 + $2.replace(/\d(?=(?:\d\d\d)+(?!\d))/g, "$&,"); }); }; //============================================================================= // End of File //============================================================================= };