//============================================================================= // NRP_MessageShadow.js //============================================================================= /*: * @target MV MZ * @plugindesc v1.01 Add shadows to messages. * @author Takeshi Sunagawa (http://newrpg.seesaa.net/) * @url https://newrpg.seesaa.net/article/491354306.html * * @help Add shadows to messages. * * For example, when combined with NRP_MessagePicture.js, * it is intended to make it easier to see messages * that are displayed above the picture. * * Note that the standard message outline is used to draw the shadows. * * ------------------------------------------------------------------- * [About the Targets] * ------------------------------------------------------------------- * You can change the range of shadows applied to the message. * Please note that by default, it is applied to all windows. * * ------------------------------------------------------------------- * [Terms] * ------------------------------------------------------------------- * There are no restrictions. * Modification, redistribution freedom, commercial availability, * and rights indication are also optional. * The author is not responsible, * but will deal with defects to the extent possible. * * @------------------------------------------------------------------ * @ Plugin Parameters * @------------------------------------------------------------------ * * @param DrawDefaultOutline * @type boolean * @default true * @desc Leave the outline of the message present in the default. * * @param ShadowAdjustSize * @type number * @default 0 * @desc The size of the shadow of the character. 0 is the same as the character itself. * * @param ShadowAdjustX * @type number @min -99 @max 99 * @default 4 * @desc The difference value of the X coordinate of the character shadow. * * @param ShadowAdjustY * @type number @min -99 @max 99 * @default 4 * @desc The difference value of the Y coordinate of the character shadow. * * @param ShadowColor * @type string * @default #00000080 * @desc The RGBA values (red, green, blue, opacity) of the shadow color of the character. Input in hexadecimal(00~FF). * * @param * * @param AllWindows * @parent * @type boolean * @default true * @desc Shadows the message in all windows. * However, some status systems are not reflected. * * @param MessageWindow * @parent * @type boolean * @default true * @desc Shadows the message in the message window. * * @param NameWindow * @parent * @type boolean * @default true * @desc Shadow the message in the name window. * Note that this is not meaningful in MV. * * @param StatusName * @parent * @type boolean * @default true * @desc Shadow the status actor name. * * @param StatusGauges * @parent * @type boolean * @default true * @desc Shadow the status gauge items (labels). */ /*:ja * @target MV MZ * @plugindesc v1.01 文章に影をつける。 * @author 砂川赳(http://newrpg.seesaa.net/) * @url https://newrpg.seesaa.net/article/491354306.html * * @help 文章に影をつけます。 * * 例えば、立ち絵プラグイン(NRP_MessagePicture.js)と組み合わせた際に、 * ピクチャより上に表示されている文字を * 見やすくするといった使い方を想定しています。 * * なお、影の描画には標準に存在する文字の縁取りを利用しています。 * * ------------------------------------------------------------------- * ■対象について * ------------------------------------------------------------------- * 文字に影をつける範囲を変更可能です。 * 初期状態では全てのウィンドウに適用されますので、ご注意ください。 * * ------------------------------------------------------------------- * ■利用規約 * ------------------------------------------------------------------- * 特に制約はありません。 * 改変、再配布自由、商用可、権利表示も任意です。 * 作者は責任を負いませんが、不具合については可能な範囲で対応します。 * * @------------------------------------------------------------------ * @ プラグインパラメータ * @------------------------------------------------------------------ * * @param DrawDefaultOutline * @text 標準の縁取りを残す * @type boolean * @default true * @desc 標準に存在する文字の縁取りを残します。 * * @param ShadowAdjustSize * @text 影のサイズ調整 * @type number * @default 0 * @desc 文字の影のサイズです。0で文字本体と同じになります。 * * @param ShadowAdjustX * @text 影のX座標調整 * @type number @min -99 @max 99 * @default 4 * @desc 文字の影のX座標の差分値です。 * * @param ShadowAdjustY * @text 影のY座標調整 * @type number @min -99 @max 99 * @default 4 * @desc 文字の影のY座標の差分値です。 * * @param ShadowColor * @text 影の色 * @type string * @default #00000080 * @desc 文字の影色のRGBA値(赤、緑、青、不透明度)です。 * 各色を00~FFまでの16進数で入力してください。 * * @param * @text <対象> * * @param AllWindows * @parent * @text 全ウィンドウ * @type boolean * @default true * @desc 全ウィンドウの文字に影をつけます。 * ただし、ステータス系には反映されないものがあります。 * * @param MessageWindow * @parent * @text メッセージウィンドウ * @type boolean * @default true * @desc メッセージウィンドウの文字に影をつけます。 * * @param NameWindow * @parent * @text 名前ウィンドウ * @type boolean * @default true * @desc 名前ウィンドウの文字に影をつけます。 * なお、MVでは意味がありません。 * * @param StatusName * @parent * @text ステータスの名前 * @type boolean * @default true * @desc ステータスのアクター名に影をつけます。 * * @param StatusGauges * @parent * @text ステータスのゲージ項目 * @type boolean * @default true * @desc ステータスのゲージ項目(ラベル)に影をつけます。 */ (function() { "use strict"; function toBoolean(str, def) { if (str === true || str === "true") { return true; } else if (str === false || str === "false") { return false; } return def; } function toNumber(str, def) { if (str == undefined || str == "") { return def; } return isNaN(str) ? def : +(str || def); } function setDefault(str, def) { return str ? str : def; } const PLUGIN_NAME = "NRP_MessageShadow"; const parameters = PluginManager.parameters(PLUGIN_NAME); const pDrawDefaultOutline = toBoolean(parameters["DrawDefaultOutline"], true); const pShadowAdjustSize = toNumber(parameters["ShadowAdjustSize"], 3); const pShadowAdjustX = toNumber(parameters["ShadowAdjustX"], 0); const pShadowAdjustY = toNumber(parameters["ShadowAdjustY"], 0); const pShadowColor = parameters["ShadowColor"]; // 対象 const pAllWindows = toBoolean(parameters["AllWindows"]); const pMessageWindow = toBoolean(parameters["MessageWindow"]); const pNameWindow = toBoolean(parameters["NameWindow"]); const pStatusName = toBoolean(parameters["StatusName"]); const pStatusGauges = toBoolean(parameters["StatusGauges"]); // ---------------------------------------------------------------------------- // Bitmap // ---------------------------------------------------------------------------- /** * ●縁取りの描画 */ const _Bitmap__drawTextOutline = Bitmap.prototype._drawTextOutline; Bitmap.prototype._drawTextOutline = function(text, tx, ty, maxWidth) { // 処理対象外の場合は終了 if (!this._isMessageShadow) { _Bitmap__drawTextOutline.call(this, text, tx, ty, maxWidth); return; } // 標準の縁取りを描画 if (pDrawDefaultOutline) { _Bitmap__drawTextOutline.call(this, text, tx, ty, maxWidth); } // 変更前の色調と幅を保持 const keepColor = this.outlineColor; const keepWidth = this.outlineWidth; // 色調と幅を一時的に変更 this.outlineColor = pShadowColor; this.outlineWidth = pShadowAdjustSize; // 変更を反映して描画 _Bitmap__drawTextOutline.call(this, text, tx + pShadowAdjustX, ty + pShadowAdjustY, maxWidth); // 色調と幅を戻す。 this.outlineColor = keepColor; this.outlineWidth = keepWidth; }; /** * 【独自】文字に影を表示するかどうか? */ Bitmap.prototype.setMessageShadow = function(flg) { this._isMessageShadow = flg; } // ---------------------------------------------------------------------------- // Window_Base // ---------------------------------------------------------------------------- /** * ●描画内容の基盤生成 * ※文字の影表示を設定 */ const _Window_Base_createContents = Window_Base.prototype.createContents; Window_Base.prototype.createContents = function() { _Window_Base_createContents.apply(this, arguments); // 全てのウィンドウが対象の場合 if (pAllWindows) { this.contents.setMessageShadow(true); // それ以外の場合 } else { // メッセージウィンドウ if (pMessageWindow && this instanceof Window_Message) { this.contents.setMessageShadow(true); // 名前ウィンドウ } else if (pNameWindow && this instanceof Window_NameBox) { this.contents.setMessageShadow(true); } } }; // ---------------------------------------------------------------------------- // Sprite_Name (MZ) // ---------------------------------------------------------------------------- if (pStatusName && typeof Sprite_Name != "undefined") { /** * ●bitmapの生成 */ const _Sprite_Name_createBitmap = Sprite_Name.prototype.createBitmap; Sprite_Name.prototype.createBitmap = function() { _Sprite_Name_createBitmap.apply(this, arguments); // 文字の影表示を設定 this.bitmap.setMessageShadow(true); }; } // ---------------------------------------------------------------------------- // Sprite_Gauge (MZ) // ---------------------------------------------------------------------------- if (pStatusGauges && typeof Sprite_Gauge != "undefined") { /** * ●bitmapの生成 */ const _Sprite_Gauge_createBitmap = Sprite_Gauge.prototype.createBitmap; Sprite_Gauge.prototype.createBitmap = function() { _Sprite_Gauge_createBitmap.apply(this, arguments); // 文字の影表示を設定 this.bitmap.setMessageShadow(true); }; } })();