//============================================================================= // WindowBackImage.js // ---------------------------------------------------------------------------- // (C)2017 Triacontane // This software is released under the MIT License. // http://opensource.org/licenses/mit-license.php // ---------------------------------------------------------------------------- // Version // 1.5.3 2024/06/01 クラス名取得関数の実装を変更 // 1.5.2 2024/06/01 class記法で書かれたウィンドウクラスに対応 // 1.5.1 2021/01/30 バトラーステータスウィンドウが選択肢に抜けていたので追加 // 1.5.0 2021/01/24 ウィンドウごとに個別のウィンドウスキンを指定できる機能を追加 // 1.4.0 2020/12/28 JK_MailSystem.jsの各ウィンドウをオプション項目に追加 // 1.3.1 2020/08/22 カスタムメニュープラグインで作成したウィンドウ背景を変えられる機能を追加 // 1.3.0 2019/01/13 ウィンドウ背景の画像を複数表示できる機能を追加 // ウィンドウ背景を指定した場合も元のウィンドウフレームを表示したままにできる機能を追加 // 1.2.0 2018/11/29 ウィンドウ背景を有効にするかどうかを動的に制御するスイッチを追加 // 1.1.0 2017/11/19 拡大率を設定できる機能を追加 // 1.0.0 2017/11/18 初版 // ---------------------------------------------------------------------------- // [Blog] : https://triacontane.blogspot.jp/ // [Twitter]: https://twitter.com/triacontane/ // [GitHub] : https://github.com/triacontane/ //============================================================================= /*: @plugindesc Window background image specification plugin @author Triacontane @url https://triacontane.blogspot.com/ @license MIT License @help English Help Translator: munokura This is an unofficial English translation of the plugin help, created to support global RPG Maker users. Feedback is welcome to improve translation quality (see: https://github.com/munokura/triacontane-MV-plugins ). Original plugin by Triacontane. Please check the latest official version at: https://triacontane.blogspot.com ----- Replaces the window background with any image. Multiple images can be specified, and appearance conditions can be specified for each. When the image is displayed, you can choose whether to hide the original window frame. The background image is displayed at the center of the window, regardless of the window size. While it is possible to adjust the magnification and coordinates, it is not recommended to specify a background image for windows with variable or indeterminate sizes. It can also be specified for windows added by plugins, but it may not work correctly. If you want to change the background of a window added with SceneCustomMenu.js, specify the "window identifier" of the plugin instead of the WindowClass. This plugin does not have any plugin commands. Terms of Use: You may modify and redistribute this plugin without permission from the author, and there are no restrictions on its use (commercial, 18+, etc.). This plugin is now yours. @param windowImageInfo @text Window Image Information @desc Information about the window whose background image you want to replace. @type struct[] */ /*~struct~WindowImages: @param WindowClass @desc This is the window to be replaced with a dedicated image. If it is not in the list, please enter it directly. @type select @option [General Game] Help window @value Window_Help @option [General Game] Money Window @value Window_Gold @option [Main Menu] Main Command Window @value Window_MenuCommand @option [Main Menu] Actor Status Window @value Window_MenuStatus @option [Item Screen] Item Category Window @value Window_ItemCategory @option [Item Screen] Item List Window @value Window_ItemList @option [Item Screen] Actor Selection Window @value Window_MenuActor @option [Skill Screen] Skill Type Window @value Window_SkillType @option [Skills Screen] Status Window @value Window_SkillStatus @option [Skills Screen] Skill List Window @value Window_SkillList @option [Equipment Screen] Status Window @value Window_EquipStatus @option [Equipment Screen] Equip Command Window @value Window_EquipCommand @option [Equipment Screen] Equipment Slot Window @value Window_EquipSlot @option [Equipment Screen] Equipment List Window @value Window_EquipItem @option [Status Screen] Status Window @value Window_Status @option [Options Screen] Options Window @value Window_Options @option [Save/Load Screen] File List Window @value Window_SavefileList @option [Shop Screen] Shop Command Window @value Window_ShopCommand @option [Shop Screen] Purchased Items Window @value Window_ShopBuy @option [Shop Screen] Selling Item Window @value Window_ShopSell @option [Shop Screen] Numerical Input Window @value Window_ShopNumber @option [Shop Screen] Status Window @value Window_ShopStatus @option [Name entry screen] Name window @value Window_NameEdit @option [Name entry screen] Name entry window @value Window_NameInput @option [Map Screen] Choices Window @value Window_ChoiceList @option [Map screen] Numerical value input window @value Window_NumberInput @option [Map Screen] Item Selection Window @value Window_EventItem @option [Map Screen] Message Window @value Window_Message @option [Map Screen] Scrolling Message Window @value Window_ScrollText @option [Map Screen] Map Name Window @value Window_MapName @option [Battle Screen] Battle Log Window @value Window_BattleLog @option [Battle Screen] Party Command Window @value Window_PartyCommand @option [Battle Screen] Actor Command Window @value Window_ActorCommand @option [Battle Screen] Battler Status Window @value Window_BattleStatus @option [Battle Screen] Actor List Window @value Window_BattleActor @option [Battle screen] Enemy character list window @value Window_BattleEnemy @option [Battle Screen] Skill List Window @value Window_BattleSkill @option [Battle Screen] Item List Window @value Window_BattleItem @option [Title Screen] Title Window @value Window_TitleCommand @option [Game End Screen] Exit confirmation window @value Window_GameEnd @option [Debug screen] Variable selection window @value Window_DebugRange @option [Debug Screen] Variables Settings Window @value Window_DebugEdit @option [Behavior Goal Window Plugin] Behavior Goal Window @value Window_Destination @option [Behavior Objective Window Plugin] Menu Behavior Objective Window @value Window_DestinationMenu @option [In-game time plugin] Time window @value Window_Chronus @option [Official Gacha Plugin] Gacha display window @value Window_Gacha @option [Official Gacha Plugin] Command Window @value Window_GachaCommand @option [Official Gacha Plugin] Acquisition confirmation window @value Window_GachaGetCommand @option [Official Gacha Plugin] Acquisition Information Window @value Window_GachaGet @option [Official Gacha Plugin] Cost Window @value Window_Cost @option [Novel Game General Plugin] Novel Selection Window @value Window_NovelChoiceList @option [Novel Game General Plugin] Novel Message Window @value Window_NovelMessage @option [Novel Game General Plugin] Novel Title Command Window @value Window_NovelTitleCommand @option [Novel Game General Plugin] Novel Number Input Window @value Window_NovelNumberInput @option [Novel Game General Plugin] Pause Menu Window @value Window_PauseMenu @option [Cross Save Plugin] Password entry window @value Window_PasswordInput @option [Cross Save Plugin] Password window @value Window_PasswordEdit @option [Terminology Plug-in] Term Category Window @value Window_GlossaryCategory @option [Glossary Plug-in] Term List Window @value Window_GlossaryList @option [Terminology Dictionary Plug-in] Usage confirmation window @value Window_GlossaryConfirm @option [Glossary Plugin] Collection Rate Window @value Window_GlossaryComplete @option [Glossary Plug-in] Terminology window @value Window_Glossary @option Sound Test Plug-in Audio Category Window @value Window_AudioCategory @option [Sound Test Plug-in] Audio List Window @value Window_AudioList @option [Sound Test Plugin] Audio Settings Window @value Window_AudioSetting @option [Numeric Input Screen Plug-in] Numeric Input Window @value Window_NumberInput @option [Numeric Input Screen Plugin] Numeric Window @value Window_NumberEdit @option [JK_MailSystem] Mail List Window @value Window_MailList @option [JK_MailSystem] Unread Mail Window @value Window_Unread @option [JK_MailSystem] Mail body window @value Window_Mail @option [JK_MailSystem] Attachment window @value Window_MailAttachment @option [JK_MailSystem] Mail Command Window @value Window_MailBoxCommand @param ImageFile @desc The file name of the image to replace. (Select from img/picture) If you specify an empty file, only the frame will be hidden. @type file @require 1 @dir img/pictures/ @param WindowSkin @desc This is a dedicated window skin image. @type file @require 1 @dir img/system/ @param OffsetX @desc Correction value for the display X coordinate. @default 0 @type number @min -2000 @max 2000 @param OffsetY @desc Display Y coordinate correction value. @default 0 @type number @min -2000 @max 2000 @param ScaleX @desc X-axis magnification (specified in %). @default 100 @type number @min -2000 @max 2000 @param ScaleY @desc Magnification rate in the Y direction (specified in %). @default 100 @type number @min -2000 @max 2000 @param WindowShow @desc Keeps the original background of the window visible even when an image is displayed. @default false @type boolean @param SwitchId @desc The window will be replaced only when the specified switch is ON. @default 0 @type switch */ /*:ja @plugindesc ウィンドウ背景画像指定プラグイン @author トリアコンタン @help ウィンドウの背景を任意の画像に置き換えます。 画像は複数指定可能で、それぞれに出現条件スイッチを指定できます。 画像が表示された場合、元のウィンドウフレームを非表示するかどうかを 選択できます。 背景画像はウィンドウのサイズにかかわらず、中央を原点に表示されます。 拡大率と座標を補正することは可能ですがサイズが可変、不定のウィンドウに 対して背景画像を指定することは推奨しません。 プラグインによって追加されたウィンドウにも指定可能ですが 正常に動作するとは限りません。 SceneCustomMenu.jsで追加したウィンドウの背景を変えたい場合は WindowClassの指定を同プラグインの『ウィンドウ識別子』を指定してください。 このプラグインにはプラグインコマンドはありません。 利用規約: 作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等) についても制限はありません。 このプラグインはもうあなたのものです。 @param windowImageInfo @text ウィンドウ画像情報 @desc 背景画像を差し替えるウィンドウの情報です。 @type struct[] */ /*~struct~WindowImages:ja @param WindowClass @desc 専用の画像に差し替える対象のウィンドウです。一覧にない場合は直接入力してください。 @type select @option [ゲーム全般]ヘルプウィンドウ @value Window_Help @option [ゲーム全般]お金ウィンドウ @value Window_Gold @option [メインメニュー]メインコマンドウィンドウ @value Window_MenuCommand @option [メインメニュー]アクターステータスウィンドウ @value Window_MenuStatus @option [アイテム画面]アイテムカテゴリウィンドウ @value Window_ItemCategory @option [アイテム画面]アイテムリストウィンドウ @value Window_ItemList @option [アイテム画面]アクター選択ウィンドウ @value Window_MenuActor @option [スキル画面]スキルタイプウィンドウ @value Window_SkillType @option [スキル画面]ステータスウィンドウ @value Window_SkillStatus @option [スキル画面]スキルリストウィンドウ @value Window_SkillList @option [装備画面]ステータスウィンドウ @value Window_EquipStatus @option [装備画面]装備コマンドウィンドウ @value Window_EquipCommand @option [装備画面]装備スロットウィンドウ @value Window_EquipSlot @option [装備画面]装備リストウィンドウ @value Window_EquipItem @option [ステータス画面]ステータスウィンドウ @value Window_Status @option [オプション画面]オプションウィンドウ @value Window_Options @option [セーブ、ロード画面]ファイルリストウィンドウ @value Window_SavefileList @option [ショップ画面]ショップコマンドウィンドウ @value Window_ShopCommand @option [ショップ画面]購入アイテムウィンドウ @value Window_ShopBuy @option [ショップ画面]売却アイテムウィンドウ @value Window_ShopSell @option [ショップ画面]数値入力ウィンドウ @value Window_ShopNumber @option [ショップ画面]ステータスウィンドウ @value Window_ShopStatus @option [名前入力画面]名前ウィンドウ @value Window_NameEdit @option [名前入力画面]名前入力ウィンドウ @value Window_NameInput @option [マップ画面]選択肢ウィンドウ @value Window_ChoiceList @option [マップ画面]数値入力ウィンドウ @value Window_NumberInput @option [マップ画面]アイテム選択ウィンドウ @value Window_EventItem @option [マップ画面]メッセージウィンドウ @value Window_Message @option [マップ画面]スクロールメッセージウィンドウ @value Window_ScrollText @option [マップ画面]マップ名ウィンドウ @value Window_MapName @option [戦闘画面]バトルログウィンドウ @value Window_BattleLog @option [戦闘画面]パーティコマンドウィンドウ @value Window_PartyCommand @option [戦闘画面]アクターコマンドウィンドウ @value Window_ActorCommand @option [戦闘画面]バトラーステータスウィンドウ @value Window_BattleStatus @option [戦闘画面]アクター一覧ウィンドウ @value Window_BattleActor @option [戦闘画面]敵キャラ一覧ウィンドウ @value Window_BattleEnemy @option [戦闘画面]スキル一覧ウィンドウ @value Window_BattleSkill @option [戦闘画面]アイテム一覧ウィンドウ @value Window_BattleItem @option [タイトル画面]タイトルウィンドウ @value Window_TitleCommand @option [ゲーム終了画面]終了確認ウィンドウ @value Window_GameEnd @option [デバッグ画面]変数選択ウィンドウ @value Window_DebugRange @option [デバッグ画面]変数設定ウィンドウ @value Window_DebugEdit @option [行動目標ウィンドウプラグイン]行動目標ウィンドウ @value Window_Destination @option [行動目標ウィンドウプラグイン]メニュー行動目標ウィンドウ @value Window_DestinationMenu @option [ゲーム内時間の導入プラグイン]時間ウィンドウ @value Window_Chronus @option [公式ガチャプラグイン]ガチャ表示ウィンドウ @value Window_Gacha @option [公式ガチャプラグイン]コマンドウィンドウ @value Window_GachaCommand @option [公式ガチャプラグイン]入手確認ウィンドウ @value Window_GachaGetCommand @option [公式ガチャプラグイン]入手情報ウィンドウ @value Window_GachaGet @option [公式ガチャプラグイン]コストウィンドウ @value Window_Cost @option [ノベルゲーム総合プラグイン]ノベル選択肢ウィンドウ @value Window_NovelChoiceList @option [ノベルゲーム総合プラグイン]ノベルメッセージウィンドウ @value Window_NovelMessage @option [ノベルゲーム総合プラグイン]ノベルタイトルコマンドウィンドウ @value Window_NovelTitleCommand @option [ノベルゲーム総合プラグイン]ノベル数値入力ウィンドウ @value Window_NovelNumberInput @option [ノベルゲーム総合プラグイン]ポーズメニューウィンドウ @value Window_PauseMenu @option [クロスセーブプラグイン]パスワード入力ウィンドウ @value Window_PasswordInput @option [クロスセーブプラグイン]パスワードウィンドウ @value Window_PasswordEdit @option [用語辞典プラグイン]用語カテゴリウィンドウ @value Window_GlossaryCategory @option [用語辞典プラグイン]用語リストウィンドウ @value Window_GlossaryList @option [用語辞典プラグイン]使用確認ウィンドウ @value Window_GlossaryConfirm @option [用語辞典プラグイン]収集率ウィンドウ @value Window_GlossaryComplete @option [用語辞典プラグイン]用語ウィンドウ @value Window_Glossary @option [サウンドテストプラグイン]オーディオカテゴリウィンドウ @value Window_AudioCategory @option [サウンドテストプラグイン]オーディオリストウィンドウ @value Window_AudioList @option [サウンドテストプラグイン]オーディオ設定ウィンドウ @value Window_AudioSetting @option [数値入力画面プラグイン]数値入力ウィンドウ @value Window_NumberInput @option [数値入力画面プラグイン]数値ウィンドウ @value Window_NumberEdit @option [JK_MailSystem]メールリストウィンドウ @value Window_MailList @option [JK_MailSystem]未読メールウィンドウ @value Window_Unread @option [JK_MailSystem]メール本文ウィンドウ @value Window_Mail @option [JK_MailSystem]添付ファイルウィンドウ @value Window_MailAttachment @option [JK_MailSystem]メールコマンドウィンドウ @value Window_MailBoxCommand @param ImageFile @desc 差し替える画像のファイル名です。(img/pictureの中から選択します) 空を指定すると枠だけが非表示になります。 @type file @require 1 @dir img/pictures/ @param WindowSkin @desc 専用のウィンドウスキン画像です。 @type file @require 1 @dir img/system/ @param OffsetX @desc 表示X座標の補正値です。 @default 0 @type number @min -2000 @max 2000 @param OffsetY @desc 表示Y座標の補正値です。 @default 0 @type number @min -2000 @max 2000 @param ScaleX @desc X方向の拡大率(%指定)です。 @default 100 @type number @min -2000 @max 2000 @param ScaleY @desc Y方向の拡大率(%指定)です。 @default 100 @type number @min -2000 @max 2000 @param WindowShow @desc 画像が表示されているときでもウィンドウの元背景を表示したままにします。 @default false @type boolean @param SwitchId @desc 指定したスイッチがONのときのみウィンドウを差し替えます。 @default 0 @type switch */ (function () { 'use strict'; var getClassName = function (object) { var define = object.constructor.toString(); if (define.match(/^class/)) { return define.replace(/class\s+(.*?)\s+[\s\S]*/m, '$1'); } return define.replace(/function\s+(.*?)\s*\([\s\S]*/m, '$1'); }; //============================================================================= // ローカル関数 // プラグインパラメータやプラグインコマンドパラメータの整形やチェックをします //============================================================================= /** * Create plugin parameter. param[paramName] ex. param.commandPrefix * @param pluginName plugin name(EncounterSwitchConditions) * @returns {Object} Created parameter */ var createPluginParameter = function (pluginName) { var paramReplacer = function (key, value) { if (value === 'null') { return value; } if (value[0] === '"' && value[value.length - 1] === '"') { return value; } try { return JSON.parse(value); } catch (e) { return value; } }; var parameter = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer)); PluginManager.setParameters(pluginName, parameter); return parameter; }; var param = createPluginParameter('WindowBackImage'); if (!param.windowImageInfo) { param.windowImageInfo = []; } //============================================================================= // Window // 専用の背景画像を設定します。 //============================================================================= var _Window__createAllParts = Window.prototype._createAllParts; Window.prototype._createAllParts = function () { _Window__createAllParts.apply(this, arguments); this._backImageDataList = this.initBackImageData(); if (this._backImageDataList.length >= 0) { this._createBackImage(); } }; Window.prototype._setBackImageProperty = function (backImageData) { this._backImageDx = parseInt(backImageData['OffsetX']) || 0; this._backImageDy = parseInt(backImageData['OffsetY']) || 0; this._windowBackImageSprite.scale.x = (parseInt(backImageData['ScaleX']) || 100) / 100; this._windowBackImageSprite.scale.y = (parseInt(backImageData['ScaleY']) || 100) / 100; }; /** * 背景画像を作成します。 * @private */ Window.prototype._createBackImage = function () { this._windowBackSprite.visible = false; this._windowFrameSprite.visible = false; this._windowBackImageSprites = []; this._backImageDataList.forEach(function (backImageData) { var bitmap = ImageManager.loadPicture(backImageData['ImageFile']); var sprite = new Sprite_WindowBackImage(bitmap); sprite.scale.x = (backImageData['ScaleX'] || 100) / 100; sprite.scale.y = (backImageData['ScaleY'] || 100) / 100; this._windowBackImageSprites.push(sprite); this._windowSpriteContainer.addChild(sprite); }, this); }; Window.prototype.initBackImageData = function () { var className = getClassName(this); // for SceneCustomMenu.js if (this._data && this._data.Id) { className = this._data.Id; } return param.windowImageInfo.filter(function (data) { return data['WindowClass'] === className; }, this); }; Window.prototype.getBackImageDataItem = function (index, propName) { return this._backImageDataList[index][propName]; }; var _Window__refreshAllParts = Window.prototype._refreshAllParts; Window.prototype._refreshAllParts = function () { if (this._windowBackImageSprites) { this._refreshBackImage(); } _Window__refreshAllParts.apply(this, arguments); }; /** * 背景画像をリフレッシュします。 * @private */ Window.prototype._refreshBackImage = function () { this._windowBackImageSprites.forEach(function (sprite, index) { sprite.x = this.width / 2 + this.getBackImageDataItem(index, 'OffsetX'); sprite.y = this.height / 2 + this.getBackImageDataItem(index, 'OffsetY'); }, this); }; var _Window_update = Window.prototype.update; Window.prototype.update = function () { _Window_update.apply(this, arguments); if (!this._windowBackImageSprites) { return; } var defaultVisible = true; this._windowBackImageSprites.forEach(function (sprite, index) { var switchId = this.getBackImageDataItem(index, 'SwitchId'); sprite.visible = !switchId || $gameSwitches.value(switchId); if (sprite.visible && !this.getBackImageDataItem(index, 'WindowShow')) { defaultVisible = false; } }, this); this._windowBackSprite.visible = defaultVisible; this._windowFrameSprite.visible = defaultVisible; }; var _Window_Base_loadWindowskin = Window_Base.prototype.loadWindowskin; Window_Base.prototype.loadWindowskin = function () { _Window_Base_loadWindowskin.apply(this, arguments); var list = this._backImageDataList; if (list && list.length > 0 && list[0].WindowSkin) { this.windowskin = ImageManager.loadSystem(list[0].WindowSkin); } }; var _Scene_Boot_isReady = Scene_Boot.prototype.isReady; Scene_Boot.prototype.isReady = function () { var ready = _Scene_Boot_isReady.apply(this, arguments); if (!ready) { return false; } if (!this._skins) { this.loadAllWindowSkin(); } return this._skins.every(function (bitmap) { return bitmap.isReady(); }); }; Scene_Boot.prototype.loadAllWindowSkin = function () { this._skins = param.windowImageInfo.filter(function (win) { return !!win.WindowSkin; }).map(function (win) { return ImageManager.loadSystem(win.WindowSkin); }); }; //============================================================================= // Sprite_WindowBackImage // ウィンドウ背景画像のスプライトです。 //============================================================================= function Sprite_WindowBackImage() { this.initialize.apply(this, arguments); } Sprite_WindowBackImage.prototype = Object.create(Sprite.prototype); Sprite_WindowBackImage.prototype.constructor = Sprite_WindowBackImage; Sprite_WindowBackImage.prototype.initialize = function (bitmap) { Sprite.prototype.initialize.call(this); this.bitmap = bitmap; this.anchor.x = 0.5; this.anchor.y = 0.5; }; })();