// // メッセージアライメント制御文字 ver1.04 // // ------------------------------------------------------ // Copyright (c) 2016 Yana // Released under the MIT license // http://opensource.org/licenses/mit-license.php // ------------------------------------------------------ // // author Yana // var Imported = Imported || {}; Imported['MessageAlignmentEC'] = 1.04; /*: * @plugindesc ver1.04/メッセージのアライメントを変更する制御文字を追加します。 * @author Yana * * @param ExtendEC * @desc メッセージ内で制御文字として扱う文字です。 * 詳細はヘルプを参照してください。 * @default * * @help ------------------------------------------------------ * 使用方法 * ------------------------------------------------------ * イベントコマンド「文章の表示」及び、「文章のスクロール表示」内に * アライメントを変更する制御文字を追加します。 * 追加される制御文字は、 * * \LL 文字を左寄せにします。 * \CL 文字を中央寄せにします。 * \RL 文字を右寄せにします。 * * の3つです。 * 呼び出された時点で、同ページのそれより下の行は自動的に * 設定したアライメントに変更されます。 * * ※プラグインパラメータについて * * プラグインパラメータで指定した制御文字は、幅0として計算される * ようになります。 * * この際、制御文字が\aの場合は、aを指定します。 * 制御文字が\a[x]の場合は、aのみを指定します。 * * 指定する制御文字はカンマ区切りで複数個指定可能です。 * a,b,d * と指定すると、\a及び\a[x]、\b及び\b[x]、\d及び\d[x]が、 * 文字幅0として計算されます。 * * ------------------------------------------------------ * 利用規約 * ------------------------------------------------------ * 当プラグインはMITライセンスで公開されています。 * 使用に制限はありません。商用、アダルト、いずれにも使用できます。 * 二次配布も制限はしませんが、サポートは行いません。 * 著作表示は任意です。行わなくても利用できます。 * 要するに、特に規約はありません。 * バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。 * https://twitter.com/yanatsuki_ * 素材利用は自己責任でお願いします。 * ------------------------------------------------------ * 更新履歴: * ver1.04: * 一つの行に複数の色変更やアイコンがあった時、正常にテキストの幅が取得できないバグを修正。 * ver1.03: * 拡張制御文字に合わせて処理を修正。 * ver1.02: * プラグインパラメータに何も指定していない時、アライメント指定が正常に機能しないバグを修正。 * ver1.01: * 文章のスクロール表示に対応。 * }{を使用すると、正常に文字の横幅を取得できていなかったバグを修正。 * 指定した制御文字を幅0で計算するためのパラメータを追加。 * ver1.00: * 公開 */ (function() { //////////////////////////////////////////////////////////////////////////////////// var parameters = PluginManager.parameters('MessageAlignmentEC'); var extendEC = parameters['ExtendEC'].split(','); //////////////////////////////////////////////////////////////////////////////////// Window_Base.prototype.textWidthEx = function (text) { var result = 0; text = text.replace(/\x1bC\[\d+\]/gi, ''); text = text.replace(/\x1bI\[\d+\]/gi, function () { result += Window_Base._iconWidth; return ''; }.bind(this)); for (var i = 0, max = text.length;i < max; i++) { var c = text[i]; if (c === '\x1b') { i++; c = text[i]; if (c === '{') { this.makeFontBigger(); } else if (c === '}') { this.makeFontSmaller(); } else if (c === 'F' && text[i+1] === 'S') { var cc = '\x1b'; for (var j=i;j this.standardFontSize()){ var n = Math.ceil((fontSize - this.standardFontSize()) / 12); for (var j=0;j','<','!','\\^']; if (extendEC.length > 0 && extendEC[0] !== ''){ ary = ary.concat(extendEC) } if (Imported['yExtendEscapeCharacters']){ var ary2 = ['BGM','BGS','SE','ME','FRT','FFV','FFH','FO','FCI','FSN','FCT','FBC', 'WC','WCW','DWC','DWCW','MMW','RMW','OMW','BLN','ANI','SPIC','MPIC', 'ZPIC','OPIC','ORPIC','RPIC','APIC','TPIC','NCPIC','CFPIC','CTPIC', 'CXPIC','BNPIC','FIPIC','FOPIC']; ary = ary.concat(ary2); } if (Imported['StandPictureEC']){ var ary2 = ['WT','SP','HP','CP','RP','MP','ZP','RMP','RRP','RZP','TP','CFP', 'COP','BCP','LS','LE','BP','OP','SFR','SBK','MC','RMC','ZC','RZC', 'RC','RRC','RPC','ZPC','SAC']; ary = ary.concat(ary2); } return ary; }; var __WMessage_newLineX = Window_Message.prototype.newLineX; Window_Message.prototype.newLineX = function () { if (this._callStart) { this.checkTextWidth() } var newX = __WMessage_newLineX.call(this); var width = this.contents.width; if (this._rightFace){ width -= 168 } if (this._aligns[this._currentPage] === 'center') { newX = ((width - newX) - this._corX[this._currentPage]) / 2 + newX; } else if (this._aligns[this._currentPage] === 'right') { newX = width - this._corX[this._currentPage]; } return newX; }; var __WMessage_processNewLine = Window_BattleLog.prototype.processNewLine; Window_Message.prototype.processNewLine = function (textState) { __WMessage_processNewLine.call(this, textState); this._currentPage += 1; this._textState.x = this.newLineX(); }; //////////////////////////////////////////////////////////////////////////////////// }());