Project1

标题: RPGmv 关于战斗ui的问题 [打印本页]

作者: 岸波白野    时间: 2021-5-29 15:33
标题: RPGmv 关于战斗ui的问题
求教大佬,每次进入战斗,系统默认显示包含(攻击,技能,道具,逃跑)选项的窗口
选取了对应指令之后调用对应窗口,我该怎么才能屏蔽掉系统默认的这些窗口,进入战斗之后只调用自己的窗口呢
想要从零开始学ui

作者: 世界第一中二    时间: 2021-5-29 21:03
首先得从程序学起(认真)
想做自己的内容的话,绝对绕不开程序
作者: 岸波白野    时间: 2021-5-30 09:17
世界第一中二 发表于 2021-5-29 21:03
首先得从程序学起(认真)
想做自己的内容的话,绝对绕不开程序

已经在看源码了
作者: ABXY-Kenobi    时间: 2021-5-30 13:23
本帖最后由 ABXY-Kenobi 于 2021-5-30 14:12 编辑

分享一个可设置UⅠ位置的插件,原帖找不到了
JAVASCRIPT 代码复制下载
  1. //=============================================================================
  2. // GraphicalDesignMode.js
  3. // ----------------------------------------------------------------------------
  4. // (C)2016 Triacontane
  5. // This software is released under the MIT License.
  6. // [url]http://opensource.org/licenses/mit-license.php[/url]
  7. // ----------------------------------------------------------------------------
  8. // Version
  9. // 2.10.3 2019/11/02 デザインモード設定時はクリックでメッセージウィンドウを送れないよう修正
  10. // 2.10.2 2019/02/27 初期状態でスクロールされているウィンドウの行高さを変更した場合に、スクロールの初期表示がずれる現象を修正
  11. // 2.10.1 2018/11/06 BattleFormation.jsとの競合を解消
  12. // 2.10.0 2018/08/18 メッセージウィンドウおよびサブウィンドウを本プラグインから触れないようにする設定を追加
  13. // 2.9.1 2018/07/10 コアスクリプト1.6.1以降で装備スロットウィンドウを動かした状態で装備画面を起動するとエラーになる問題を修正
  14. // 2.9.0 2018/06/27 ウィンドウが閉じている最中にGDM_LOCK_MESSAGE_WINDOWが実行されたとき、閉じ終わるまで実行を待機するよう修正
  15. // 2.8.2 2018/05/20 YEP_BattleEngineCore.jsとの併用時、デザインモードで一部ウィンドウで透明状態の切り替えが機能しない競合を解消
  16. // 2.8.1 2018/01/30 最新のNW.jsで動作するよう修正
  17. // 2.8.0 2017/07/26 コンソールからの関数実行で直前に編集したウィンドウの位置を変更できる機能を追加
  18. // 2.7.0 2017/04/11 2.6.0の修正で追加ウィンドウの位置変更が正常に動作しない問題を修正
  19. //                  選択肢ウィンドウについて位置変更を一時的に無効化するプラグインコマンドを追加
  20. // 2.6.0 2017/04/07 追加したピクチャやウィンドウについて任意のスイッチがONのときのみ表示できる機能を追加
  21. // 2.5.0 2017/03/11 ウィンドウを非表示にできる機能を追加
  22. // 2.4.0 2017/01/09 カスタムウィンドウに表示する内容に揃えを指定できる機能を追加しました。
  23. // 2.3.1 2016/11/30 RPGアツマールで画面がNowLoadingから進まなくなる場合がある問題を修正しました。
  24. // 2.3.0 2016/11/25 メッセージウィンドウの背景の表示可否を固定にできる機能を追加しました。
  25. // 2.2.1 2016/11/12 Macの場合、Ctrlキーの代わりにoptionキーを使用するようヘルプを追記
  26. // 2.2.0 2016/11/03 ウィンドウごとに使用するフォントを設定できる機能を追加
  27. // 2.1.0 2016/09/28 アイコンサイズをフォントサイズに合わせて自動で拡縮できる機能を追加
  28. //                  操作対象のウィンドウにフォーカスしたときに枠の色を変えて明示する機能を追加
  29. //                  数値項目のプロパティを設定する際にJavaScript計算式を適用できる機能を追加
  30. // 2.0.0 2016/08/22 本体v1.3.0によりウィンドウ透過の実装が変更されたので対応
  31. // 1.1.3 2016/08/05 本体v1.3.0にて表示される警告を抑制
  32. // 1.1.2 2016/07/20 一部のウィンドウでプロパティロード後にコンテンツが再作成されない問題を修正
  33. // 1.1.1 2016/07/17 余白とフォントサイズの変更が、画面切り替え後に元に戻ってしまう問題を修正
  34. // 1.1.0 2016/07/11 メッセージウィンドウのみ位置変更を一時的に無効化するプラグインコマンドを追加
  35. // 1.0.2 2016/04/02 liply_memoryleak_patch.jsとの競合を解消
  36. // 1.0.1 2016/03/28 一部のウィンドウのプロパティを変更しようとするとエラーが発生する現象の修正
  37. // 1.0.0 2016/03/13 初版
  38. // 0.9.0 2016/03/05 ベータ版
  39. // ----------------------------------------------------------------------------
  40. // [Blog]   : [url]https://triacontane.blogspot.jp/[/url]
  41. // [Twitter]: [url]https://twitter.com/triacontane/[/url]
  42. // [GitHub] : [url]https://github.com/triacontane/[/url]
  43. //=============================================================================
  44.  
  45. /*:
  46.  * @plugindesc GUI画面デザインプラグイン
  47.  * パラメータを変更したら「プロジェクトの保存」(Ctrl+S)
  48.  * @author トリアコンタン
  49.  *
  50.  * @param デザインモード
  51.  * @desc 在设计模式下启动游戏。(ON/OFF)
  52.  * 在模式中,您可以通过拖放来调整位置。
  53.  * @default true
  54.  * @type boolean
  55.  *
  56.  * @param 自動保存
  57.  * @desc 更改位置时自动保存更改。(ON/OFF)
  58.  * 通常,使用Ctrl + S保存。
  59.  * @default false
  60.  * @type boolean
  61.  *
  62.  * @param モバイル版作成
  63.  * @desc 另外创建移动版的窗口配置。(ON/OFF)
  64.  * 仅当您想要在移动版和PC版之间改变窗口配置时,才将其设置为ON。
  65.  * @default false
  66.  * @type boolean
  67.  *
  68.  * @param モバイル偽装
  69.  * @desc 模拟移动执行。(ON/OFF)
  70.  * 在创建或测试移动版窗口时将其打开。
  71.  * @default false
  72.  * @type boolean
  73.  *
  74.  * @param ウィンドウ透過
  75.  * @desc 窗口重叠时透明显示。(ON/OFF)
  76.  * 如果在其他插件中实现了同样的功能,则关闭。
  77.  * @default false
  78.  * @type boolean
  79.  *
  80.  * @param グリッドサイズ
  81.  * @desc 在窗口调整期间以指定的大小显示网格。
  82.  * 如果指定0,它将被隐藏。
  83.  * @default 48
  84.  * @type number
  85.  *
  86.  * @param パディング
  87.  * @desc 窗口边缘的默认值。如果输入,则启用。默认:18
  88.  * @default 0
  89.  * @type number
  90.  *
  91.  * @param フォントサイズ
  92.  * @desc 窗口字体大小的默认值。如果输入,则启用。默认:28
  93.  * @default 0
  94.  * @type number
  95.  *
  96.  * @param 行の高さ
  97.  * @desc 窗口行高度的默认值。如果输入,则适用。默认:36
  98.  * @default 0
  99.  * @type number
  100.  *
  101.  * @param 背景透明度
  102.  * @desc 窗口的背景透明度默认值。如果输入,则适用。默认:192
  103.  * @default 0
  104.  * @type number
  105.  *
  106.  * @param アイコンサイズ調整
  107.  * @desc 当字体大小改变时,自动调整图标的大小。
  108.  * @default false
  109.  * @type boolean
  110.  *
  111.  * @param 背景表示可否固定
  112.  * @desc 在有关事件的信息所在的窗口中,指定个别情况下的指令背景,并固定插入的信息。
  113.  * @default false
  114.  * @type boolean
  115.  *
  116.  * @param 右クリックで消去
  117.  * @desc 在设计模式下右键单击时隐藏整个窗口。(OFF时只删除框)
  118.  * @default false
  119.  * @type boolean
  120.  *
  121.  * @param メッセージウィンドウを無視
  122.  * @desc 请勿使用此插件触摸消息,选项和数字输入窗口。 更改后的位置不会重置。
  123.  * @default false
  124.  * @type boolean
  125.  *
  126.  * @help 您可以通过拖放来微调每个屏幕窗口和图像(例如菜单屏幕
  127.  * 和战斗屏幕)的显示位置,从而以图形方式设计屏幕的外观。
  128.  * 您可以在屏幕上更改宽度,高度,边距,背景图像等。
  129.  *
  130.  * 除了默认屏幕外,您还可以自定义插件添加的屏幕的位置。
  131.  *
  132.  * (但是,不能保证操作,因为它取决于另一方的实现。)
  133.  *
  134.  * 请按照以下步骤操作。
  135.  *
  136.  * 1. 将参数“设计模式”设置为“开”。
  137.  *   - 默认情况下为“ON”。
  138.  *
  139.  * 2. 开始测试游戏、战斗测试和事件测试。
  140.  *
  141.  * 3. 用鼠标抓住对象并将其放置在您喜欢的地方。
  142.  *   - 鼠标的正常窗口操作将被禁用。
  143.  *   - 自动捕捉到其他窗口或屏幕边缘。(Shift禁用)
  144.  *   - 按住Ctrl键可捕捉到网格。(对于Mac,option键)
  145.  *   - 使用Ctrl + Z撤消上一次更改。
  146.  *   - Ctrl + Shift + Enter初始化当前场景中的所有更改。
  147.  *   - 在窗口中右键单击以在透明和不透明之间切换框架。
  148.  *     如果更改了参数,则显示或隐藏整个窗口。
  149.  *     一旦隐藏,就无法在不重置整个屏幕的情况下重新显示它。
  150.  *   - 您可以在窗口中按数字键(※)来更改每个属性。
  151.  *   - 如果在控制台中键入【changePos(x, y);】(x:X坐标,
  152.  *     y:Y坐标),则可以更改刚刚编辑的窗口的位置。
  153.  *
  154.  * 4. 使用Ctrl + S保存您自己的位置。
  155.  *
  156.  * 5. 正常测试游戏时,将“设计模式”设置为“关”。
  157.  *
  158.  * ※数字和属性的对应关系(不是数字键的数字键)
  159.  *
  160.  * 1. 窗口的横向宽度(※1)
  161.  * 2. 窗口的高度(直接指定)(※1)
  162.  * 3. 窗口的边缘(※2)
  163.  * 4. 窗口的字体大小(※2)
  164.  * 5. 窗口一行的高度(※2)
  165.  * 6. 窗口的背景透明度(※2)
  166.  * 7. 窗口中的行数(※2)
  167.  * 8. 窗口背景图片文件名
  168.  * 9. 窗口字体名称
  169.  *
  170.  * ※1 可以应用JS公式。 该公式仅被动态评估一次。
  171.  * ※2 可以应用JS计算公式。计算公式将被保存,并在每次屏幕显示时重新评估。
  172.  * 如果不知道的话,像以前一样设定数值就没有问题了。
  173.  * ※3 您需要加载字体。请使用“字体加载插件”。
  174.  * 入手先:raw.githubusercontent.com/triacontane/RPGMakerMV/master/FontLoad.js
  175.  * ※4 对于Mac,请用option键替代Ctrl键。(用命令键不响应)
  176.  *
  177.  * 另外,可以额外显示任何图片或窗口。
  178.  * 有关详细信息,请参阅源代码的“用户重写区域”「ユーザ書き換え領域」。
  179.  * 您还可以通过拖放来调整附加显示的位置。
  180.  *
  181.  * 可以使用以下控制字符来更改窗口中显示的内容的对齐方式。
  182.  * \\AL[left]   # 左对齐(如果留空,则将其左对齐)
  183.  * \\AL[0]      # 同上
  184.  * \\AL[center] # 中央揃え
  185.  * \\AL[1]      # 同上
  186.  * \\AL[right]  # 右揃え
  187.  * \\AL[2]      # 同上
  188.  *
  189.  * 保存的内容保存在“data/ContainerProperties.json”中。
  190.  * 也可以用JSON编辑器等进行编辑。
  191.  *
  192.  * 此外,您还可以为移动设备定义不同的窗口配置。
  193.  * 移动的配置信息保存在“data/ContainerPropertiesMobile.json”中。
  194.  *
  195.  * 启用移动伪装选项后,您可以在PC上复制移动设备上的运行。
  196.  * 当再现移动运行时,音频和视频文件的使用格式可能会发生变
  197.  * 化,或者音频文件将不再被播放。
  198.  *
  199.  * 此后已无法重新定位使用此插件重新定位的Windows。
  200.  * 因此,如果您使用本插件将位置固定到游戏期间动态更改位置的窗口,
  201.  * 则可能无法正常显示。
  202.  *
  203.  * 在这种情况下,如果显示错误,建议您执行一次
  204.  * Ctrl + Shift + Enter,以初始化屏幕上的所有窗口。
  205.  *
  206.  * 要注意! 在部署期间,添加的图片可能会作为未使用的文件排除在外。
  207.  *
  208.  * 在这种情况下,必须采取措施,例如重新插入已删除的文件。
  209.  *
  210.  * 注意!
  211.  * 根据其他插件的使用情况,窗口位置和大小可能无法正确保存。
  212.  *
  213.  *
  214.  * 插件命令详细信息
  215.  *  从事件命令“插件命令”执行。
  216.  *  (用空格分隔参数。)
  217.  *
  218.  * GDM取消_消息窗口
  219.  * GDM_UNLOCK_MESSAGE_WINDOW
  220.  *  暂时取消消息窗口的位置更改。
  221.  *  在插件中更改的坐标将被禁用,
  222.  *  并启用事件“消息显示”中指定的窗口位置。
  223.  *
  224.  * GDM固定_消息窗口
  225.  * GDM_LOCK_MESSAGE_WINDOW
  226.  *  再次启用消息窗口的位置更改。
  227.  *  在插件中更改的坐标将被启用,
  228.  *  并且事件“消息显示”中指定的窗口位置将被忽略。
  229.  *
  230.  * GDM取消_选项窗口
  231.  * GDM_UNLOCK_CHOICE_WINDOW
  232.  *  暂时取消选项窗口中的位置更改。
  233.  *  プラグインで変更した座標が無効になり
  234.  *  在插件中更改的坐标将被禁用,并且在事件“显示选项”中指定的窗口位置将被启用。
  235.  *
  236.  * GDM固定_选项窗口
  237.  * GDM_LOCK_CHOICE_WINDOW
  238.  *  再次启用消息窗口的位置更改。
  239.  *  在插件中更改的坐标将被启用,
  240.  *  并且事件“显示选项”中指定的窗口位置将被忽略。
  241.  *
  242.  * 利用規約:
  243.  *  作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)
  244.  *  についても制限はありません。
  245.  *  このプラグインはもうあなたのものです。
  246.  */
  247. var $dataContainerProperties = null;
  248.  
  249. (function() {
  250.     'use strict';
  251.     //=============================================================================
  252.     // 用户重写区域 - 開始 -
  253.     //  pictures : 在每个屏幕上显示的图片信息
  254.     //  windows  : 在每个屏幕上显示的窗口信息
  255.     // (此处指定的文件名在部署时可能会被
  256.     //  排除为未使用的文件)
  257.     // ※为了便于复制和粘贴,我们还给最后一个项目添加了逗号。
  258.     //=============================================================================
  259.     var settings = {
  260.         /* 标题画面的追加信息 */
  261.         Scene_Title   : {
  262.             /* pictures:要添加到场景中的图片。 无条件显示。 */
  263.             pictures: [
  264.                 /* file:指定「img/pictures/」目录下不带扩展的文件  switchId: 显示条件的开关ID*/
  265.                 {file: '', switchId: 0},
  266.             ],
  267.             /* windows:这是要添加到场景中的窗口。*/
  268.             windows : [
  269.                 /* lines:显示内容数组。 可以使用控制字符。「\\i[n]」と「\」をひとつ多く指定してください。*/
  270.                 /* switchId:这是出现条件的开关ID。 */
  271.                 /* 若要在调整位置后添加新窗口,请务必“添加到数组末尾” */
  272.                 {lines: [], switchId: 0},
  273.             ],
  274.         },
  275.         /* 主菜单屏幕的附加信息 */
  276.         Scene_Menu    : {
  277.             pictures: [
  278.                 {file: '', switchId: 0},
  279.             ],
  280.             windows : [
  281.                 {lines: [], switchId: 0},
  282.             ],
  283.         },
  284.         /* 战斗画面的追加信息 */
  285.         Scene_Battle  : {
  286.             pictures: [
  287.                 {file: '', switchId: 0},
  288.             ],
  289.             windows : [
  290.                 {lines: [], switchId: 0},
  291.             ],
  292.         },
  293.         /* 项目菜单屏幕上的附加信息 */
  294.         Scene_Item    : {
  295.             pictures: [
  296.                 {file: '', switchId: 0},
  297.             ],
  298.             windows : [
  299.                 {lines: [], switchId: 0},
  300.             ],
  301.         },
  302.         /* 技能菜单屏幕上的其他信息 */
  303.         Scene_Skill   : {
  304.             pictures: [
  305.                 {file: '', switchId: 0},
  306.             ],
  307.             windows : [
  308.                 {lines: [], switchId: 0},
  309.             ],
  310.         },
  311.         /* 装备菜单画面的追加信息 */
  312.         Scene_Equip   : {
  313.             pictures: [
  314.                 {file: '', switchId: 0},
  315.             ],
  316.             windows : [
  317.                 {lines: [], switchId: 0},
  318.             ],
  319.         },
  320.         /* 状态菜单屏幕上的附加信息 */
  321.         Scene_Status  : {
  322.             pictures: [
  323.                 {file: '', switchId: 0},
  324.             ],
  325.             windows : [
  326.                 {lines: [], switchId: 0},
  327.             ],
  328.         },
  329.         /* 选项屏幕的附加信息 */
  330.         Scene_Options : {
  331.             pictures: [
  332.                 {file: '', switchId: 0},
  333.             ],
  334.             windows : [
  335.                 {lines: [], switchId: 0},
  336.             ],
  337.         },
  338.         /* 保存屏幕的附加信息 */
  339.         Scene_Save    : {
  340.             pictures: [
  341.                 {file: '', switchId: 0},
  342.             ],
  343.             windows : [
  344.                 {lines: [], switchId: 0},
  345.             ],
  346.         },
  347.         /* 加载屏幕的附加信息 */
  348.         Scene_Load    : {
  349.             pictures: [
  350.                 {file: '', switchId: 0},
  351.             ],
  352.             windows : [
  353.                 {lines: [], switchId: 0},
  354.             ],
  355.         },
  356.         /* 商店屏幕的附加信息 */
  357.         Scene_Shop    : {
  358.             pictures: [
  359.                 {file: '', switchId: 0},
  360.             ],
  361.             windows : [
  362.                 {lines: [], switchId: 0},
  363.             ],
  364.         },
  365.         /* 名称输入屏幕上的其他信息 */
  366.         Scene_Name    : {
  367.             pictures: [
  368.                 {file: '', switchId: 0},
  369.             ],
  370.             windows : [
  371.                 {lines: [], switchId: 0},
  372.             ],
  373.         },
  374.         /* ゲームオーバー画面の追加情報 */
  375.         Scene_Gameover: {
  376.             pictures: [
  377.                 {file: '', switchId: 0},
  378.             ],
  379.             windows : [
  380.                 {lines: [], switchId: 0},
  381.             ],
  382.         },
  383.     };
  384.     //=============================================================================
  385.     // ユーザ書き換え領域 - 終了 -
  386.     //=============================================================================
  387.     var pluginName    = 'GraphicalDesignMode';
  388.     var metaTagPrefix = 'GDM';
  389.  
  390.     if (!Utils.RPGMAKER_VERSION || Utils.RPGMAKER_VERSION.match(/^1\.2./)) {
  391.         alert('!!!このプラグインは本体バージョン1.3系以降でないと使用できません。!!!');
  392.         return;
  393.     }
  394.  
  395.     var getParamNumber = function(paramNames, min, max) {
  396.         var value = getParamOther(paramNames);
  397.         if (value == null) return null;
  398.         if (arguments.length < 2) min = -Infinity;
  399.         if (arguments.length < 3) max = Infinity;
  400.         return (parseInt(value, 10) || 0).clamp(min, max);
  401.     };
  402.  
  403.     var getParamBoolean = function(paramNames) {
  404.         var value = getParamOther(paramNames);
  405.         return value.toUpperCase() === 'ON' || value.toUpperCase() === 'TRUE';
  406.     };
  407.  
  408.     var getParamOther = function(paramNames) {
  409.         if (!Array.isArray(paramNames)) paramNames = [paramNames];
  410.         for (var i = 0; i < paramNames.length; i++) {
  411.             var name = PluginManager.parameters(pluginName)[paramNames[i]];
  412.             if (name) return name;
  413.         }
  414.         return null;
  415.     };
  416.  
  417.     var getArgString = function(arg, upperFlg) {
  418.         arg = convertEscapeCharacters(arg);
  419.         return upperFlg ? arg.toUpperCase() : arg;
  420.     };
  421.  
  422.     var getArgEval = function(arg, min, max) {
  423.         if (arguments.length < 2) min = -Infinity;
  424.         if (arguments.length < 3) max = Infinity;
  425.         return (eval(convertEscapeCharacters(arg)) || 0).clamp(min, max);
  426.     };
  427.  
  428.     var convertEscapeCharacters = function(text) {
  429.         if (text == null) text = '';
  430.         var window = SceneManager._scene._windowLayer.children[0];
  431.         return window ? window.convertEscapeCharacters(text) : text;
  432.     };
  433.  
  434.     var checkTypeFunction = function(value) {
  435.         return checkType(value, 'Function');
  436.     };
  437.  
  438.     var checkType = function(value, typeName) {
  439.         return Object.prototype.toString.call(value).slice(8, -1) === typeName;
  440.     };
  441.  
  442.     var getClassName = function(object) {
  443.         return object.constructor.toString().replace(/function\s+(.*)\s*\([\s\S]*/m, '$1');
  444.     };
  445.  
  446.     var getCommandName = function(command) {
  447.         return (command || '').toUpperCase();
  448.     };
  449.  
  450.     var paramDesignMode      = getParamBoolean(['DesignMode', 'デザインモード']);
  451.     var paramThroughWindow   = getParamBoolean(['ThroughWindow', 'ウィンドウ透過']);
  452.     var paramAutoSave        = getParamBoolean(['AutoSave', '自動保存']);
  453.     var paramGridSize        = getParamNumber(['GridSize', 'グリッドサイズ'], 0) || 0;
  454.     var paramPadding         = getParamNumber(['Padding', 'パディング']);
  455.     var paramFontSize        = getParamNumber(['FontSize', 'フォントサイズ']);
  456.     var paramLineHeight      = getParamNumber(['LineHeight', '行の高さ']);
  457.     var paramBackOpacity     = getParamNumber(['LineHeight', '背景透明度']);
  458.     var paramMobileMake      = getParamBoolean(['MobileMake', 'モバイル版作成']);
  459.     var paramFakeMobile      = getParamBoolean(['FakeMobile', 'モバイル偽装']);
  460.     var paramIconSizeScale   = getParamBoolean(['IconSizeScale', 'アイコンサイズ調整']);
  461.     var paramBackgroundFixed = getParamBoolean(['BackgroundFixed', '背景表示可否固定']);
  462.     var paramRightClickHide  = getParamBoolean(['RightClickHide', '右クリックで消去']);
  463.     var paramIgnoreMesWindow = getParamBoolean(['IgnoreMesWindow', 'メッセージウィンドウを無視']);
  464.  
  465.     //=============================================================================
  466.     // Utils
  467.     //  デザインモード判定を追加します。
  468.     //=============================================================================
  469.     Utils.isDesignMode = function() {
  470.         return (this.isOptionValid('test') || this.isOptionValid('btest') || this.isOptionValid('etest')) &&
  471.             this.isNwjs() && paramDesignMode;
  472.     };
  473.  
  474.     //=============================================================================
  475.     // デザインモードの場合のみ実装する
  476.     //=============================================================================
  477.     if (Utils.isDesignMode()) {
  478.  
  479.         //=============================================================================
  480.         // グローバル関数
  481.         //=============================================================================
  482.         window.changePos = function(x, y) {
  483.             SceneManager.setLastWindowPosition(x, y);
  484.         };
  485.  
  486.         //=============================================================================
  487.         // Input
  488.         //  コピーと上書き保存用のボタンを追加定義します。
  489.         //=============================================================================
  490.         Input.keyMapper[67] = 'copy';
  491.         Input.keyMapper[83] = 'save';
  492.         for (var i = 49; i < 58; i++) {
  493.             Input.keyMapper[i] = 'num' + (i - 48);
  494.         }
  495.  
  496.         var _Input__wrapNwjsAlert = Input._wrapNwjsAlert;
  497.         Input._wrapNwjsAlert      = function() {
  498.             _Input__wrapNwjsAlert.apply(this, arguments);
  499.             var _prompt   = window.prompt;
  500.             window.prompt = function() {
  501.                 var gui    = require('nw.gui');
  502.                 var win    = gui.Window.get();
  503.                 var result = _prompt.apply(this, arguments);
  504.                 win.focus();
  505.                 Input.clear();
  506.                 return result;
  507.             };
  508.         };
  509.  
  510.         var _Input_isRepeated = Input.isRepeated;
  511.         Input.isRepeated      = function(keyName) {
  512.             if (keyName === 'ok' && this.isPressed('control')) {
  513.                 return false;
  514.             }
  515.             return _Input_isRepeated.apply(this, arguments);
  516.         };
  517.  
  518.         //=============================================================================
  519.         // TouchInput
  520.         //  ポインタ位置を常に記憶します。
  521.         //=============================================================================
  522.         TouchInput._onMouseMove = function(event) {
  523.             var x = Graphics.pageToCanvasX(event.pageX);
  524.             var y = Graphics.pageToCanvasY(event.pageY);
  525.             this._onMove(x, y);
  526.         };
  527.  
  528.         //=============================================================================
  529.         // SceneManager
  530.         //  ウィンドウポジションをjson形式で保存する処理を追加定義します。
  531.         //=============================================================================
  532.         SceneManager.controlNumber = 0;
  533.  
  534.         var _SceneManager_initialize = SceneManager.initialize;
  535.         SceneManager.initialize      = function() {
  536.             _SceneManager_initialize.call(this);
  537.             this.lastWindowX            = null;
  538.             this.lastWindowY            = null;
  539.             this._lastWindow            = null;
  540.             this._windowPositionChanged = false;
  541.             this.infoWindow             = '';
  542.             this.infoExtend             = '';
  543.             this._copyCount             = 0;
  544.             this._infoHelp              = 'デザインモードで起動しています。 ';
  545.             this._documentTitle         = '';
  546.             this._changeStack           = [];
  547.             this.showDevToolsForGdm();
  548.         };
  549.  
  550.         SceneManager.setLastWindow = function(windowObject) {
  551.             this._lastWindow = windowObject;
  552.         };
  553.  
  554.         SceneManager.setLastWindowPosition = function(x, y) {
  555.             if (!this._lastWindow) {
  556.                 this.setInfoExtend('直前に触れたオブジェクトが存在しないため、この操作は無効です。', 0);
  557.                 return;
  558.             }
  559.             this._lastWindow.position.x = x;
  560.             this._lastWindow.position.y = y;
  561.             this._windowPositionChanged = true;
  562.         };
  563.  
  564.         SceneManager.isWindowPositionChanged = function(windowObject) {
  565.             if (this._windowPositionChanged && windowObject === this._lastWindow) {
  566.                 this._windowPositionChanged = false;
  567.                 return true;
  568.             }
  569.             return false;
  570.         };
  571.  
  572.         SceneManager.showDevToolsForGdm = function() {
  573.             var nwWin = require('nw.gui').Window.get();
  574.             if (nwWin.isDevToolsOpen) {
  575.                 if (!nwWin.isDevToolsOpen()) {
  576.                     var devTool = nwWin.showDevTools();
  577.                     devTool.moveTo(0, 0);
  578.                     devTool.resizeTo(window.screenX + window.outerWidth, window.screenY + window.outerHeight);
  579.                     nwWin.focus();
  580.                 }
  581.             } else {
  582.                 nwWin.showDevTools();
  583.             }
  584.             this.outputStartLog();
  585.         };
  586.  
  587.         SceneManager.outputStartLog = function() {
  588.             var logValue = [
  589.                 '☆☆☆ようこそ、デザインモードで起動しました。☆☆☆\n',
  590.                 'デザインモードでは、オブジェクトの配置やプロパティを自由に設定して実際のゲーム画面上から画面設計できます。\n',
  591.                 '--------------------操 作 方 法----------------------------------------------------------------------\n',
  592.                 'ドラッグ&ドロップ : ウィンドウや画像を掴んで好きな場所に再配置します。\n',
  593.                 'Ctrl+マウス : ウィンドウや画像がグリッドにスナップします。(Macの場合はoptionキー)\n',
  594.                 'Shift+マウス : ウィンドウや画像がオブジェクトや画面端にスナップしなくなります。\n',
  595.                 'コンソールに「changePos(x, y);」(x:X座標、y:Y座標)と打ち込むと直前に編集したウィンドウ位置を変更できます。\n',
  596.                 'Ctrl+S : 全ての変更を保存します。\n',
  597.                 'Ctrl+C : 直前に操作した座標をクリップボードにコピーします。\n',
  598.                 'Ctrl+Z : 直前に行った操作を元に戻します。\n',
  599.                 'Ctrl+Shift+Enter : 表示している画面の配置を全てリセットしてロードし直します。\n',
  600.                 '右クリック : ウィンドウの枠(もしくはウィンドウ全体)の表示/非表示を切り替えます。\n',
  601.                 '数字キー : ウィンドウの範囲内で押下すると、以下のとおり対応するプロパティを変更できます。\n',
  602.                 ' 1. ウィンドウの横幅(※1)\n',
  603.                 ' 2. ウィンドウの高さ(直接指定)(※1)\n',
  604.                 ' 3. ウィンドウの余白(※2)\n',
  605.                 ' 4. ウィンドウのフォントサイズ(※2)\n',
  606.                 ' 5. ウィンドウの1行のあたりの高さ(※2)\n',
  607.                 ' 6. ウィンドウの背景透明度(※2)\n',
  608.                 ' 7. ウィンドウの行数(※2)\n',
  609.                 ' 8. ウィンドウの背景画像ファイル名\n',
  610.                 ' 9. ウィンドウのフォント名(※3)\n',
  611.                 '※1 JS計算式を適用できます。計算式は入力したその場で1回だけ評価されます。\n',
  612.                 '※2 JS計算式を適用できます。計算式は保存され、画面表示のたびに再評価されます。\n',
  613.                 '分からない場合、今まで通り数値を設定すれば問題ありません。\n',
  614.                 '※3 あらかじめフォントをロードする必要があります。「フォントロードプラグイン」をお使いください。\n',
  615.                 '入手先:raw.githubusercontent.com/triacontane/RPGMakerMV/master/FontLoad.js\n',
  616.                 '※4 Macの場合、Ctrlキーはoptionキーで代用してください。(commandキーでは反応しません)\n',
  617.                 '-----------------------------------------------------------------------------------------------------\n',
  618.                 '以下の操作ログが表示されます。\n'
  619.             ];
  620.             console.log.apply(console, logValue);
  621.         };
  622.  
  623.         var _SceneManager_onSceneCreate = SceneManager.onSceneCreate;
  624.         SceneManager.onSceneCreate      = function() {
  625.             _SceneManager_onSceneCreate.apply(this, arguments);
  626.             this._changeStack = [];
  627.         };
  628.  
  629.         SceneManager.pushChangeStack = function(child) {
  630.             var index = child.parent.getChildIndex(child);
  631.             var info  = {parent: child.parent, index: index};
  632.             child.saveProperty(info);
  633.             this._changeStack.push(info);
  634.         };
  635.  
  636.         SceneManager.popChangeStack = function() {
  637.             var info = this._changeStack.pop();
  638.             if (info) {
  639.                 var child = info.parent.children[info.index];
  640.                 if (child) {
  641.                     child.loadProperty(info);
  642.                     child.saveContainerInfo();
  643.                     return true;
  644.                 }
  645.             }
  646.             return false;
  647.         };
  648.  
  649.         var _SceneManager_update = SceneManager.updateMain;
  650.         SceneManager.updateMain  = function() {
  651.             _SceneManager_update.apply(this, arguments);
  652.             this.updateDragInfo();
  653.         };
  654.  
  655.         SceneManager.updateDragInfo = function() {
  656.             if (Input.isPressed('control') && Input.isTriggered('copy')) {
  657.                 SoundManager.playOk();
  658.                 if (this.lastWindowX == null || this.lastWindowY == null) return;
  659.                 var clipboard = require('nw.gui').Clipboard.get();
  660.                 var copyValue = '';
  661.                 if (this._copyCount % 2 === 0) {
  662.                     copyValue = this.lastWindowX.toString();
  663.                     this.setInfoExtend('X座標[' + copyValue + ']をクリップボードにコピーしました。', 0);
  664.                 } else {
  665.                     copyValue = this.lastWindowY.toString();
  666.                     this.setInfoExtend('Y座標[' + copyValue + ']をクリップボードにコピーしました。', 0);
  667.                 }
  668.                 clipboard.set(copyValue, 'text');
  669.                 this._copyCount++;
  670.             }
  671.             if (Input.isPressed('control') && Input.isTriggered('save')) {
  672.                 SoundManager.playSave();
  673.                 DataManager.saveDataFileWp();
  674.                 this.setInfoExtend('すべての変更を保存しました。', 0);
  675.             }
  676.             if (Input.isPressed('control') && Input.isTriggered('ok')) {
  677.                 if (this.popChangeStack()) {
  678.                     SoundManager.playCancel();
  679.                     this.setInfoExtend('左記の番号の操作を元に戻しました。', -1);
  680.                     if (paramAutoSave) DataManager.saveDataFileWp();
  681.                 }
  682.             }
  683.             if (Input.isPressed('control') && Input.isPressed('shift') && Input.isPressed('ok')) {
  684.                 $dataContainerProperties[this.getSceneName()] = {};
  685.                 DataManager.saveDataFileWp();
  686.                 location.reload();
  687.             }
  688.             var docTitle        = this._infoHelp + this.infoWindow + this.infoExtend;
  689.             document.title      = docTitle;
  690.             this._documentTitle = docTitle;
  691.         };
  692.  
  693.         SceneManager.setInfoExtend = function(value, add) {
  694.             this.controlNumber += add;
  695.             this.infoExtend = ' ' + value;
  696.             console.log(add ? this.controlNumber + (add < 0 ? 1 : 0) + ' : ' + value : value);
  697.             if (paramAutoSave && add !== 0) {
  698.                 console.log('自動保存により変更が保存されました。');
  699.             }
  700.         };
  701.  
  702.         //=============================================================================
  703.         // DataManager
  704.         //  ウィンドウポジションをjson形式で保存する処理を追加定義します。
  705.         //=============================================================================
  706.         DataManager.saveDataFileWp = function() {
  707.             StorageManager.saveToLocalDataFile(this._databaseFileCp.src, window[this._databaseFileCp.name]);
  708.         };
  709.  
  710.         //=============================================================================
  711.         // StorageManager
  712.         //  ウィンドウポジションをjson形式で保存する処理を追加定義します。
  713.         //=============================================================================
  714.         StorageManager.saveToLocalDataFile = function(fileName, json) {
  715.             var data     = JSON.stringify(json);
  716.             var fs       = require('fs');
  717.             var dirPath  = this.localDataFileDirectoryPath();
  718.             var filePath = dirPath + fileName;
  719.             if (!fs.existsSync(dirPath)) {
  720.                 fs.mkdirSync(dirPath);
  721.             }
  722.             fs.writeFileSync(filePath, data);
  723.         };
  724.  
  725.         StorageManager.localDataFileDirectoryPath = function() {
  726.             var path = require('path');
  727.             var base = path.dirname(process.mainModule.filename);
  728.             return path.join(base, 'data/');
  729.         };
  730.  
  731.         //=============================================================================
  732.         // Scene_Base
  733.         //  ウィンドウをドラッグ&ドロップします。
  734.         //=============================================================================
  735.         var _Scene_Base_update      = Scene_Base.prototype.update;
  736.         Scene_Base.prototype.update = function() {
  737.             _Scene_Base_update.apply(this, arguments);
  738.             if (this._windowLayer) this.updateDrag();
  739.         };
  740.  
  741.         Scene_Base.prototype.updateDrag = function() {
  742.             this._windowLayer.isFrameChanged = false;
  743.  
  744.             var result = this._windowLayer.children.clone().reverse().some(function(container) {
  745.                 return checkTypeFunction(container.processDesign) && container.processDesign();
  746.             }, this);
  747.             if (result) return;
  748.             this.children.clone().reverse().some(function(container) {
  749.                 return checkTypeFunction(container.processDesign) && container.processDesign();
  750.             }, this);
  751.         };
  752.  
  753.         var _Scene_Base_createWindowLayer      = Scene_Base.prototype.createWindowLayer;
  754.         Scene_Base.prototype.createWindowLayer = function() {
  755.             if (!(this instanceof Scene_Boot) && !(this instanceof Scene_Map)) this.createGridSprite();
  756.             _Scene_Base_createWindowLayer.apply(this, arguments);
  757.         };
  758.  
  759.         Scene_Base.prototype.createGridSprite = function() {
  760.             var size = paramGridSize;
  761.             if (size === 0) return;
  762.             var width        = Graphics.boxWidth;
  763.             var height       = Graphics.boxHeight;
  764.             this._gridSprite = new Sprite();
  765.             this._gridSprite.setFrame(0, 0, width, height);
  766.             var bitmap = new Bitmap(width, height);
  767.             for (var x = 0; x < width; x += size) {
  768.                 bitmap.fillRect(x, 0, 1, height, 'rgba(255,255,255,1.0)');
  769.             }
  770.             for (var y = 0; y < height; y += size) {
  771.                 bitmap.fillRect(0, y, width, 1, 'rgba(255,255,255,1.0)');
  772.             }
  773.             this._gridSprite.bitmap      = bitmap;
  774.             this._gridSprite.moveDisable = true;
  775.             this.addChild(this._gridSprite);
  776.         };
  777.  
  778.         //=============================================================================
  779.         // PIXI.Container およびそのサブクラス
  780.         //  コンテナをドラッグ&ドロップします。
  781.         //=============================================================================
  782.         var _PIXI_DisplayObjectContainer_initialize = PIXI.Container.prototype.initialize;
  783.         PIXI.Container.prototype.initialize         = function(x, y, width, height) {
  784.             _PIXI_DisplayObjectContainer_initialize.apply(this, arguments);
  785.             this._holding      = false;
  786.             this._dx           = 0;
  787.             this._dy           = 0;
  788.             this.moveDisable   = false;
  789.             this._positionLock = false;
  790.         };
  791.  
  792.         PIXI.Container.prototype.processDesign = function() {
  793.             var result = false;
  794.             if (!this.moveDisable) {
  795.                 if (this.processPosition()) {
  796.                     var info                 = 'X:[' + this.x + '] Y:[' + this.y + ']';
  797.                     SceneManager.lastWindowX = this.x;
  798.                     SceneManager.lastWindowY = this.y;
  799.                     SceneManager.infoWindow  = info;
  800.                     SceneManager.infoCopy    = '';
  801.                     if (!this._holding) SceneManager.setInfoExtend('位置を変更しました。' + info, 1);
  802.                     result = true;
  803.                 }
  804.                 if (this.processOpacity()) {
  805.                     SceneManager.setInfoExtend('背景の表示/非表示を変更しました。', 1);
  806.                     result = true;
  807.                 }
  808.                 if (this.processInput()) {
  809.                     SceneManager.setInfoExtend(this._propLabel + 'の値を' + this._propValue + 'に変更しました。', 1);
  810.                     result = true;
  811.                 }
  812.                 this.processFrameChange();
  813.             }
  814.             return result;
  815.         };
  816.  
  817.         if (paramIgnoreMesWindow) {
  818.             Window_Message.prototype.processDesign = function() {};
  819.             Window_NumberInput.prototype.processDesign = function() {};
  820.             Window_ChoiceList.prototype.processDesign = function() {};
  821.         }
  822.  
  823.         PIXI.Container.prototype.processPosition = function() {
  824.             if (SceneManager.isWindowPositionChanged(this)) {
  825.                 return true;
  826.             }
  827.             if (this.isTouchEvent(TouchInput.isTriggered) || (this._holding && TouchInput.isPressed())) {
  828.                 if (!this._holding) this.hold();
  829.                 var x = TouchInput.x - this._dx;
  830.                 var y = TouchInput.y - this._dy;
  831.                 if (Input.isPressed('control')) {
  832.                     var size = paramGridSize;
  833.                     if (size !== 0) {
  834.                         x += (x % size > size / 2 ? size - x % size : -(x % size));
  835.                         y += (y % size > size / 2 ? size - y % size : -(y % size));
  836.                     }
  837.                 } else if (!Input.isPressed('shift') && !this.isAnchorChanged()) {
  838.                     x = this.updateSnapX(x);
  839.                     y = this.updateSnapY(y);
  840.                 }
  841.                 this.position.x    = x;
  842.                 this.position.y    = y;
  843.                 this._positionLock = true;
  844.                 return true;
  845.             } else if (this._holding) {
  846.                 this.release();
  847.                 return true;
  848.             }
  849.             return false;
  850.         };
  851.  
  852.         PIXI.Container.prototype.processFrameChange = function() {};
  853.  
  854.         Window_Base.prototype.processFrameChange = function() {
  855.             if (this._holding || !TouchInput.isMoved()) return;
  856.             if (this.isPreparedEvent() && !this.parent.isFrameChanged) {
  857.                 this._windowFrameSprite.setBlendColor([255, 128, 0, 192]);
  858.                 this.parent.isFrameChanged = true;
  859.                 SceneManager.setLastWindow(this);
  860.             } else {
  861.                 this._windowFrameSprite.setBlendColor([0, 0, 0, 0]);
  862.             }
  863.         };
  864.  
  865.         PIXI.Container.prototype.processOpacity = function() {};
  866.  
  867.         Window_Base.prototype.processOpacity = function() {
  868.             if (this.isTouchEvent(TouchInput.isCancelled)) {
  869.                 SoundManager.playMiss();
  870.                 SceneManager.pushChangeStack(this);
  871.                 if (paramRightClickHide) {
  872.                     this.visible = !this.visible;
  873.                 } else {
  874.                     this.opacity = (this.opacity === 255 ? 0 : 255);
  875.                 }
  876.                 this.saveContainerInfo();
  877.                 return true;
  878.             }
  879.             return false;
  880.         };
  881.  
  882.         PIXI.Container.prototype.processInput = function() {};
  883.  
  884.         Window_Base.prototype.processInput = function() {
  885.             if (this.isPreparedEvent()) {
  886.                 var params = [
  887.                     ['num1', '横幅', 'width', 1, 2000, null],
  888.                     ['num2', '高さ', 'height', 1, 2000, null],
  889.                     ['num3', 'パディング', '_customPadding', 1, 100, this.updatePadding.bind(this), true],
  890.                     ['num4', 'フォントサイズ', '_customFontSize', 1, 100, this.resetFontSettings.bind(this), true],
  891.                     ['num5', '行の高さ', '_customLineHeight', 1, 2000, this.setFittingHeight.bind(this), true],
  892.                     ['num6', '背景の透明度', '_customBackOpacity', 0, 255, this.updateBackOpacity.bind(this), true],
  893.                     ['num7', '行数', '_customLineNumber', 0, 999, this.setFittingHeight.bind(this), true],
  894.                     ['num8', '背景画像のファイル名', '_customBackFileName', null, null, this.createBackSprite.bind(this), true],
  895.                     ['num9', 'フォント名', '_customFontFace', null, null, this.resetFontSettings.bind(this), true]
  896.                 ];
  897.                 return params.some(function(param) {
  898.                     return this.processSetProperty.apply(this, param);
  899.                 }.bind(this));
  900.             }
  901.             return false;
  902.         };
  903.  
  904.         Window_Base.prototype.setFittingHeight = function() {
  905.             if (this._customLineNumber) this.height = this.fittingHeight(this._customLineNumber);
  906.         };
  907.  
  908.         Window_Base.prototype.processSetProperty = function(keyCode, propLabel, propName, min, max,
  909.                                                             callBack, stringFlg) {
  910.             if (this[propName] === undefined) return null;
  911.             if (Input.isTriggered(keyCode)) {
  912.                 var result = window.prompt(propLabel + 'を入力してください。', this[propName].toString());
  913.                 if (result || (stringFlg && result === '')) {
  914.                     this._windowFrameSprite.setBlendColor([0, 0, 0, 0]);
  915.                     SceneManager.pushChangeStack(this);
  916.                     this[propName] = stringFlg ? getArgString(result) : getArgEval(result, min, max);
  917.                     if (callBack) callBack();
  918.                     this.reDrawContents();
  919.                     SoundManager.playMagicEvasion();
  920.                     this.saveContainerInfo();
  921.                     this._propLabel = propLabel;
  922.                     this._propValue = this[propName];
  923.                     return true;
  924.                 }
  925.             }
  926.             return null;
  927.         };
  928.  
  929.         Window_Base.prototype.reDrawContents = function() {
  930.             this.createContents();
  931.             this.refresh();
  932.         };
  933.  
  934.         Window_Selectable.prototype.reDrawContents = function() {
  935.             Window_Base.prototype.reDrawContents.apply(this, arguments);
  936.             this.updateCursor();
  937.         };
  938.  
  939.         PIXI.Container.prototype.isAnchorChanged = function() {
  940.             return false;
  941.         };
  942.  
  943.         Sprite.prototype.isAnchorChanged = function() {
  944.             return this.anchor.x !== 0 || this.anchor.y !== 0;
  945.         };
  946.  
  947.         PIXI.Container.prototype.hold = function() {
  948.             this._holding = true;
  949.             this._dx      = TouchInput.x - this.x;
  950.             this._dy      = TouchInput.y - this.y;
  951.             SceneManager.pushChangeStack(this);
  952.         };
  953.  
  954.         Window_Base.prototype.hold = function() {
  955.             PIXI.Container.prototype.hold.call(this);
  956.             this._windowBackSprite.setBlendColor([255, 255, 255, 192]);
  957.             this._windowContentsSprite.setBlendColor([255, 128, 0, 192]);
  958.         };
  959.  
  960.         Sprite.prototype.hold = function() {
  961.             PIXI.Container.prototype.hold.call(this);
  962.             this.setBlendColor([255, 255, 255, 192]);
  963.         };
  964.  
  965.         PIXI.Container.prototype.release = function() {
  966.             this._holding = false;
  967.             this.saveContainerInfo();
  968.         };
  969.  
  970.         Window_Base.prototype.release = function() {
  971.             PIXI.Container.prototype.release.call(this);
  972.             this._windowBackSprite.setBlendColor([0, 0, 0, 0]);
  973.             this._windowContentsSprite.setBlendColor([0, 0, 0, 0]);
  974.         };
  975.  
  976.         Sprite.prototype.release = function() {
  977.             PIXI.Container.prototype.release.call(this);
  978.             this.setBlendColor([0, 0, 0, 0]);
  979.         };
  980.  
  981.         PIXI.Container.prototype.updateSnapX = function(x) {
  982.             var minDistanceL = 16, minIndexL = -1, minDistanceR = 16, minIndexR = -1;
  983.             var children     = this.parent.children, endX = x + this.width;
  984.             for (var i = 0, n = children.length; i < n; i++) {
  985.                 var child = children[i];
  986.                 if (child !== this && this.isSameInstance(child) && child.isTouchable() && child.isOverlapY(this)) {
  987.                     var distanceL = Math.abs(x - child.endX);
  988.                     if (minDistanceL > distanceL) {
  989.                         minDistanceL = distanceL;
  990.                         minIndexL    = i;
  991.                     }
  992.                     var distanceR = Math.abs(endX - child.x);
  993.                     if (minDistanceR > distanceR) {
  994.                         minDistanceR = distanceR;
  995.                         minIndexR    = i;
  996.                     }
  997.                 }
  998.             }
  999.             if (minDistanceL > Math.abs(x)) return 0;
  1000.             if (minDistanceR > Math.abs(Graphics.boxWidth - endX)) return Graphics.boxWidth - this.width;
  1001.             if (minDistanceR > minDistanceL) {
  1002.                 return minIndexL === -1 ? x : children[minIndexL].endX;
  1003.             } else {
  1004.                 return minIndexR === -1 ? x : children[minIndexR].x - this.width;
  1005.             }
  1006.         };
  1007.  
  1008.         PIXI.Container.prototype.updateSnapY = function(y) {
  1009.             var minDistanceU = 16, minIndexU = -1, minDistanceD = 16, minIndexD = -1;
  1010.             var children     = this.parent.children, endY = y + this.height;
  1011.             for (var i = 0, n = children.length; i < n; i++) {
  1012.                 var child = children[i];
  1013.                 if (child !== this && this.isSameInstance(child) && child.isTouchable() && child.isOverlapX(this)) {
  1014.                     var distanceU = Math.abs(y - child.endY);
  1015.                     if (minDistanceU > distanceU) {
  1016.                         minDistanceU = distanceU;
  1017.                         minIndexU    = i;
  1018.                     }
  1019.                     var distanceD = Math.abs(endY - child.y);
  1020.                     if (minDistanceD > distanceD) {
  1021.                         minDistanceD = distanceD;
  1022.                         minIndexD    = i;
  1023.                     }
  1024.                 }
  1025.             }
  1026.             if (minDistanceU > Math.abs(y)) return 0;
  1027.             if (minDistanceD > Math.abs(Graphics.boxHeight - endY)) return Graphics.boxHeight - this.height;
  1028.             if (minDistanceD > minDistanceU) {
  1029.                 return minIndexU === -1 ? y : children[minIndexU].endY;
  1030.             } else {
  1031.                 return minIndexD === -1 ? y : children[minIndexD].y - this.height;
  1032.             }
  1033.         };
  1034.  
  1035.         PIXI.Container.prototype.isSameInstance = function() {
  1036.             return false;
  1037.         };
  1038.  
  1039.         Window_Base.prototype.isSameInstance = function(objectContainer) {
  1040.             return objectContainer instanceof Window_Base;
  1041.         };
  1042.  
  1043.         Sprite.prototype.isSameInstance = function(objectContainer) {
  1044.             return objectContainer instanceof Sprite;
  1045.         };
  1046.  
  1047.         PIXI.Container.prototype.isTouchPosInRect = function() {
  1048.             var tx = TouchInput.x;
  1049.             var ty = TouchInput.y;
  1050.             return (tx >= this.x && tx <= this.endX &&
  1051.             ty >= this.y && ty <= this.endY);
  1052.         };
  1053.  
  1054.         Sprite.prototype.isTouchPosInRect = function() {
  1055.             if (this.isTransparent()) return false;
  1056.             var dx  = TouchInput.x - this.x;
  1057.             var dy  = TouchInput.y - this.y;
  1058.             var sin = Math.sin(-this.rotation);
  1059.             var cos = Math.cos(-this.rotation);
  1060.             var rx  = this.x + Math.floor(dx * cos + dy * -sin);
  1061.             var ry  = this.y + Math.floor(dx * sin + dy * cos);
  1062.             return (rx >= this.minX() && rx <= this.maxX() &&
  1063.             ry >= this.minY() && ry <= this.maxY());
  1064.         };
  1065.  
  1066.         Sprite.prototype.isTransparent = function() {
  1067.             var dx  = TouchInput.x - this.x;
  1068.             var dy  = TouchInput.y - this.y;
  1069.             var sin = Math.sin(-this.rotation);
  1070.             var cos = Math.cos(-this.rotation);
  1071.             var bx  = Math.floor(dx * cos + dy * -sin) / this.scale.x + this.anchor.x * this.width;
  1072.             var by  = Math.floor(dx * sin + dy * cos) / this.scale.y + this.anchor.y * this.height;
  1073.             return this.bitmap.getAlphaPixel(bx, by) === 0;
  1074.         };
  1075.  
  1076.         Sprite.prototype.screenWidth = function() {
  1077.             return (this.width || 0) * this.scale.x;
  1078.         };
  1079.  
  1080.         Sprite.prototype.screenHeight = function() {
  1081.             return (this.height || 0) * this.scale.y;
  1082.         };
  1083.  
  1084.         Sprite.prototype.screenX = function() {
  1085.             return (this.x || 0) - this.anchor.x * this.screenWidth();
  1086.         };
  1087.  
  1088.         Sprite.prototype.screenY = function() {
  1089.             return (this.y || 0) - this.anchor.y * this.screenHeight();
  1090.         };
  1091.  
  1092.         Sprite.prototype.minX = function() {
  1093.             return Math.min(this.screenX(), this.screenX() + this.screenWidth());
  1094.         };
  1095.  
  1096.         Sprite.prototype.minY = function() {
  1097.             return Math.min(this.screenY(), this.screenY() + this.screenHeight());
  1098.         };
  1099.  
  1100.         Sprite.prototype.maxX = function() {
  1101.             return Math.max(this.screenX(), this.screenX() + this.screenWidth());
  1102.         };
  1103.  
  1104.         Sprite.prototype.maxY = function() {
  1105.             return Math.max(this.screenY(), this.screenY() + this.screenHeight());
  1106.         };
  1107.  
  1108.         PIXI.Container.prototype.isTouchable = function() {
  1109.             return false;
  1110.         };
  1111.  
  1112.         Window_Base.prototype.isTouchable = function() {
  1113.             return (this.opacity > 0 || this.contentsOpacity > 0) && this.visible && this.isOpen();
  1114.         };
  1115.  
  1116.         Window_BattleLog.prototype.isTouchable = function() {
  1117.             return Window.prototype.isTouchable.call(this) && this._lines.length > 0;
  1118.         };
  1119.  
  1120.         Sprite.prototype.isTouchable = function() {
  1121.             return this.visible && this.bitmap != null && this.scale.x !== 0 && this.scale.y !== 0;
  1122.         };
  1123.  
  1124.         PIXI.Container.prototype.isTouchEvent = function(triggerFunc) {
  1125.             return this.isTouchable() && triggerFunc.call(TouchInput) && this.isTouchPosInRect();
  1126.         };
  1127.  
  1128.         PIXI.Container.prototype.isPreparedEvent = function() {
  1129.             return this.isTouchable() && this.isTouchPosInRect();
  1130.         };
  1131.  
  1132.         PIXI.Container.prototype.isRangeX = function(x) {
  1133.             return this.x <= x && this.endX >= x;
  1134.         };
  1135.  
  1136.         PIXI.Container.prototype.isRangeY = function(y) {
  1137.             return this.y <= y && this.endY >= y;
  1138.         };
  1139.  
  1140.         PIXI.Container.prototype.isOverlapX = function(win) {
  1141.             return this.isRangeX(win.x) || this.isRangeX(win.endX) || win.isRangeX(this.x) || win.isRangeX(this.endX);
  1142.         };
  1143.  
  1144.         PIXI.Container.prototype.isOverlapY = function(win) {
  1145.             return this.isRangeY(win.y) || this.isRangeY(win.endY) || win.isRangeY(this.y) || win.isRangeY(this.endY);
  1146.         };
  1147.  
  1148.         Object.defineProperty(PIXI.Container.prototype, 'endX', {
  1149.             get: function() {
  1150.                 return this.x + this.width;
  1151.             },
  1152.             set: function(value) {
  1153.                 this.x = value - this.width;
  1154.             },
  1155.  
  1156.             configurable: true
  1157.         });
  1158.  
  1159.         Object.defineProperty(PIXI.Container.prototype, 'endY', {
  1160.             get: function() {
  1161.                 return this.y + this.height;
  1162.             },
  1163.             set: function(value) {
  1164.                 this.y = value - this.height;
  1165.             },
  1166.  
  1167.             configurable: true
  1168.         });
  1169.  
  1170.         //=============================================================================
  1171.         //  Window_Selectable
  1172.         //   通常のタッチ操作を無効化します。
  1173.         //=============================================================================
  1174.         Window_Selectable.prototype.processTouch = function() {};
  1175.         Window_BattleActor.prototype.processTouch = function() {};
  1176.         Window_BattleEnemy.prototype.processTouch = function() {};
  1177.  
  1178.         var _Window_Message_isTriggered = Window_Message.prototype.isTriggered;
  1179.         Window_Message.prototype.isTriggered = function() {
  1180.             if (TouchInput.isRepeated()) {
  1181.                 return false;
  1182.             } else {
  1183.                 return _Window_Message_isTriggered.apply(this, arguments);
  1184.             }
  1185.         };
  1186.     }
  1187.  
  1188.     //=============================================================================
  1189.     // ウィンドウを透過して重なり合ったときの表示を自然にします。
  1190.     //=============================================================================
  1191.     if (paramThroughWindow && !WindowLayer.throughWindow) {
  1192.         WindowLayer.throughWindow = true;
  1193.         //=============================================================================
  1194.         //  WindowLayer
  1195.         //   ウィンドウのマスク処理を除去します。
  1196.         //=============================================================================
  1197.         WindowLayer.prototype._maskWindow = function(window) {};
  1198.  
  1199.         WindowLayer.prototype._canvasClearWindowRect = function(renderSession, window) {};
  1200.     }
  1201.  
  1202.     if (paramFakeMobile) {
  1203.         Utils.isMobileDevice = function() {
  1204.             return true;
  1205.         };
  1206.     }
  1207.  
  1208.     //=============================================================================
  1209.     // Game_Interpreter
  1210.     //  プラグインコマンドを追加定義します。
  1211.     //=============================================================================
  1212.     var _Game_Interpreter_pluginCommand      = Game_Interpreter.prototype.pluginCommand;
  1213.     Game_Interpreter.prototype.pluginCommand = function(command, args) {
  1214.         _Game_Interpreter_pluginCommand.apply(this, arguments);
  1215.         if (!command.match(new RegExp('^' + metaTagPrefix))) return;
  1216.         this.pluginCommandGraphicalDesignMode(command.replace(metaTagPrefix, ''), args);
  1217.     };
  1218.  
  1219.     Game_Interpreter.prototype.pluginCommandGraphicalDesignMode = function(command) {
  1220.         switch (getCommandName(command)) {
  1221.             case '解除_メッセージウィンドウ' :
  1222.             case '_UNLOCK_MESSAGE_WINDOW':
  1223.                 SceneManager._scene._messageWindow.unlockPosition();
  1224.                 break;
  1225.             case '固定_メッセージウィンドウ' :
  1226.             case '_LOCK_MESSAGE_WINDOW':
  1227.                 var win = SceneManager._scene._messageWindow;
  1228.                 if (win.isClosing()) {
  1229.                     win.setCloseListener(win.lockPosition)
  1230.                 } else {
  1231.                     win.lockPosition();
  1232.                 }
  1233.                 break;
  1234.             case '解除_選択肢ウィンドウ' :
  1235.             case '_UNLOCK_CHOICE_WINDOW':
  1236.                 SceneManager._scene._messageWindow._choiceWindow.unlockPosition();
  1237.                 break;
  1238.             case '固定_選択肢ウィンドウ' :
  1239.             case '_LOCK_CHOICE_WINDOW':
  1240.                 var win = SceneManager._scene._messageWindow._choiceWindow;
  1241.                 if (win.isClosing()) {
  1242.                     win.setCloseListener(win.lockPosition)
  1243.                 } else {
  1244.                     win.lockPosition();
  1245.                 }
  1246.                 break;
  1247.         }
  1248.     };
  1249.  
  1250.     //=============================================================================
  1251.     // DataManager
  1252.     //  ContainerProperties.jsonの読み込み処理を追記します。
  1253.     //=============================================================================
  1254.     DataManager._databaseFileCp = {name: '$dataContainerProperties', src: 'ContainerProperties.json'};
  1255.     if (paramMobileMake && Utils.isMobileDevice()) {
  1256.         DataManager._databaseFileCp.src = 'ContainerPropertiesMobile.json';
  1257.     }
  1258.  
  1259.     var _DataManager_loadDatabase = DataManager.loadDatabase;
  1260.     DataManager.loadDatabase      = function() {
  1261.         _DataManager_loadDatabase.apply(this, arguments);
  1262.         var errorMessage = this._databaseFileCp.src + 'が見付かりませんでした。';
  1263.         this.loadDataFileAllowError(this._databaseFileCp.name, this._databaseFileCp.src, errorMessage);
  1264.     };
  1265.  
  1266.     DataManager.loadDataFileAllowError = function(name, src, errorMessage) {
  1267.         var xhr = new XMLHttpRequest();
  1268.         var url = 'data/' + src;
  1269.         xhr.open('GET', url);
  1270.         xhr.overrideMimeType('application/json');
  1271.         xhr.onload   = function() {
  1272.             if (xhr.status < 400) {
  1273.                 window[name] = JSON.parse(xhr.responseText);
  1274.                 DataManager.onLoad(window[name]);
  1275.             } else {
  1276.                 DataManager.onDataFileNotFound(name, errorMessage);
  1277.             }
  1278.         };
  1279.         xhr.onerror  = function() {
  1280.             DataManager.onDataFileNotFound(name, errorMessage);
  1281.         };
  1282.         window[name] = null;
  1283.         xhr.send();
  1284.     };
  1285.  
  1286.     DataManager.onDataFileNotFound = function(name, errorMessage) {
  1287.         window[name] = {};
  1288.         console.warn(errorMessage);
  1289.     };
  1290.  
  1291.     var _DataManager_isDatabaseLoaded = DataManager.isDatabaseLoaded;
  1292.     DataManager.isDatabaseLoaded      = function() {
  1293.         return _DataManager_isDatabaseLoaded.apply(this, arguments) && window[this._databaseFileCp.name];
  1294.     };
  1295.  
  1296.     //=============================================================================
  1297.     // SceneManager
  1298.     //  現在のシーン名を返します。
  1299.     //=============================================================================
  1300.     SceneManager.getSceneName = function() {
  1301.         return getClassName(this._scene);
  1302.     };
  1303.  
  1304.     var _SceneManager_updateScene = SceneManager.updateScene;
  1305.     SceneManager.updateScene      = function() {
  1306.         _SceneManager_updateScene.apply(this, arguments);
  1307.         if (this._scene) {
  1308.             this._scene.updateCustomContainer();
  1309.         }
  1310.     };
  1311.  
  1312.     //=============================================================================
  1313.     // Scene_Base
  1314.     //  ウィンドウ追加時に位置をロードします。
  1315.     //=============================================================================
  1316.     var _Scene_Base_addWindow      = Scene_Base.prototype.addWindow;
  1317.     Scene_Base.prototype.addWindow = function(child) {
  1318.         _Scene_Base_addWindow.apply(this, arguments);
  1319.         child.loadContainerInfo();
  1320.     };
  1321.  
  1322.     var _Scene_Base_addChild      = Scene_Base.prototype.addChild;
  1323.     Scene_Base.prototype.addChild = function(child) {
  1324.         _Scene_Base_addChild.apply(this, arguments);
  1325.         child.loadContainerInfo();
  1326.     };
  1327.  
  1328.     var _Scene_Base_createWindowLayer2     = Scene_Base.prototype.createWindowLayer;
  1329.     Scene_Base.prototype.createWindowLayer = function() {
  1330.         this.createCustomPicture();
  1331.         _Scene_Base_createWindowLayer2.apply(this, arguments);
  1332.         this.createCustomWindow();
  1333.     };
  1334.  
  1335.     Scene_Base.prototype.createCustomPicture = function() {
  1336.         var setting = settings[getClassName(this)];
  1337.         if (setting) {
  1338.             var pictures         = setting.pictures;
  1339.             this._customPictures = [];
  1340.             if (pictures) {
  1341.                 pictures.forEach(function(picture) {
  1342.                     if (!picture.file) return;
  1343.                     var sprite    = new Sprite();
  1344.                     sprite.bitmap = ImageManager.loadPicture(picture.file, 0);
  1345.                     this._customPictures.push(sprite);
  1346.                     this.addChild(sprite);
  1347.                     sprite.switchId = picture.switchId || 0;
  1348.                 }.bind(this));
  1349.             }
  1350.         }
  1351.     };
  1352.  
  1353.     Scene_Base.prototype.createCustomWindow = function() {
  1354.         var setting = settings[getClassName(this)];
  1355.         if (setting) {
  1356.             var windows         = setting.windows;
  1357.             this._customWindows = [];
  1358.             if (windows) {
  1359.                 windows.forEach(function(windowItem) {
  1360.                     if (!windowItem.lines || windowItem.lines.length < 1) return;
  1361.                     var win = new Window_Custom(windowItem.lines);
  1362.                     this._customWindows.push(win);
  1363.                     win.switchId = windowItem.switchId || 0;
  1364.                 }.bind(this));
  1365.             }
  1366.             this.updateCustomWindowVisible();
  1367.         }
  1368.     };
  1369.  
  1370.     Scene_Base.prototype.updateCustomContainer = function() {
  1371.         if (this._customPictures) {
  1372.             this.updateCustomPicture();
  1373.         }
  1374.         if (this._customWindows) {
  1375.             this.updateCustomWindow();
  1376.         }
  1377.     };
  1378.  
  1379.     Scene_Base.prototype.updateCustomPicture = function() {
  1380.         this._customPictures.forEach(function(picture) {
  1381.             if (picture.switchId > 0) {
  1382.                 picture.visible = $gameSwitches.value(picture.switchId);
  1383.             }
  1384.         });
  1385.     };
  1386.  
  1387.     Scene_Base.prototype.updateCustomWindow = function() {
  1388.         this.updateCustomWindowVisible();
  1389.         if (!this._windowAdd) {
  1390.             this._customWindows.forEach(function(windowItem) {
  1391.                 this.addWindow(windowItem);
  1392.             }, this);
  1393.             this._windowAdd = true;
  1394.         }
  1395.     };
  1396.  
  1397.     Scene_Base.prototype.updateCustomWindowVisible = function() {
  1398.         this._customWindows.forEach(function(windowItem) {
  1399.             if (windowItem.switchId > 0) {
  1400.                 if ($gameSwitches.value(windowItem.switchId)) {
  1401.                     windowItem.show();
  1402.                 } else {
  1403.                     windowItem.hide();
  1404.                 }
  1405.             }
  1406.         }, this);
  1407.     };
  1408.  
  1409.     //=============================================================================
  1410.     // PIXI.Container
  1411.     //  表示位置のセーブとロードを行います。
  1412.     //=============================================================================
  1413.     Object.defineProperty(PIXI.Container.prototype, 'x', {
  1414.         get: function() {
  1415.             return this.position.x;
  1416.         },
  1417.         set: function(value) {
  1418.             if (this._positionLock) return;
  1419.             this.position.x = value;
  1420.         }
  1421.     });
  1422.  
  1423.     Object.defineProperty(PIXI.Container.prototype, 'y', {
  1424.         get: function() {
  1425.             return this.position.y;
  1426.         },
  1427.         set: function(value) {
  1428.             if (this._positionLock) return;
  1429.             this.position.y = value;
  1430.         }
  1431.     });
  1432.  
  1433.     PIXI.Container.prototype.loadContainerInfo = function() {
  1434.         var sceneName  = SceneManager.getSceneName();
  1435.         var parentName = getClassName(this.parent);
  1436.         var sceneInfo  = $dataContainerProperties[sceneName];
  1437.         if (sceneInfo) {
  1438.             var containerInfo = sceneInfo[parentName];
  1439.             var key           = [this.parent.getChildIndex(this), getClassName(this)];
  1440.             if (containerInfo && containerInfo[key]) {
  1441.                 this.loadProperty(containerInfo[key]);
  1442.                 this._positionLock = true;
  1443.             }
  1444.         }
  1445.     };
  1446.  
  1447.     PIXI.Container.prototype.unlockPosition = function() {
  1448.         this._positionLock    = false;
  1449.         this._customPositionX = this.position.x;
  1450.         this._customPositionY = this.position.y;
  1451.     };
  1452.  
  1453.     PIXI.Container.prototype.lockPosition = function() {
  1454.         this._positionLock = true;
  1455.         if (this._customPositionX) {
  1456.             this.position.x = this._customPositionX;
  1457.         }
  1458.         if (this._customPositionY) {
  1459.             this.position.y = this._customPositionY;
  1460.         }
  1461.     };
  1462.  
  1463.     PIXI.Container.prototype.loadProperty = function(containerInfo) {
  1464.         this.position.x = containerInfo.x;
  1465.         this.position.y = containerInfo.y;
  1466.     };
  1467.  
  1468.     Window_Base.prototype.loadProperty = function(containerInfo) {
  1469.         PIXI.Container.prototype.loadProperty.apply(this, arguments);
  1470.         this.width               = containerInfo.width;
  1471.         this.height              = containerInfo.height;
  1472.         this.opacity             = containerInfo.opacity;
  1473.         this.visible             = this.visible && !containerInfo.hidden;
  1474.         this._customFontSize     = containerInfo._customFontSize;
  1475.         this._customPadding      = containerInfo._customPadding;
  1476.         this._customLineHeight   = containerInfo._customLineHeight;
  1477.         this._customBackOpacity  = containerInfo._customBackOpacity;
  1478.         this._customBackFileName = containerInfo._customBackFileName;
  1479.         this._customFontFace     = containerInfo._customFontFace;
  1480.         this.updatePadding();
  1481.         this.resetFontSettings();
  1482.         this.updateBackOpacity();
  1483.         this.createContents();
  1484.         this.refresh();
  1485.         this.createBackSprite();
  1486.     };
  1487.  
  1488.     Window_Base.prototype.refresh = function() {};
  1489.  
  1490.     Window_Selectable.prototype.loadProperty = function(containerInfo) {
  1491.         var row;
  1492.         if (this._scrollY !== 0) {
  1493.             row = this.topRow();
  1494.         }
  1495.         Window_Base.prototype.loadProperty.apply(this, arguments);
  1496.         this.updateCursor();
  1497.         if (row) {
  1498.             this.setTopRow(row);
  1499.         }
  1500.     };
  1501.  
  1502.     PIXI.Container.prototype.saveContainerInfo = function() {
  1503.         var sceneName  = SceneManager.getSceneName();
  1504.         var parentName = getClassName(this.parent);
  1505.         if (!$dataContainerProperties[sceneName]) $dataContainerProperties[sceneName] = {};
  1506.         var sceneInfo = $dataContainerProperties[sceneName];
  1507.         if (!sceneInfo[parentName]) sceneInfo[parentName] = {};
  1508.         var containerInfo = sceneInfo[parentName];
  1509.         var key           = [this.parent.getChildIndex(this), getClassName(this)];
  1510.         if (!containerInfo[key]) containerInfo[key] = {};
  1511.         this.saveProperty(containerInfo[key]);
  1512.         if (paramAutoSave) {
  1513.             DataManager.saveDataFileWp();
  1514.         }
  1515.     };
  1516.  
  1517.     PIXI.Container.prototype.saveProperty = function(containerInfo) {
  1518.         containerInfo.x = this.x;
  1519.         containerInfo.y = this.y;
  1520.     };
  1521.  
  1522.     Window_Base.prototype.saveProperty = function(containerInfo) {
  1523.         PIXI.Container.prototype.saveProperty.apply(this, arguments);
  1524.         containerInfo.width               = this.width;
  1525.         containerInfo.height              = this.height;
  1526.         containerInfo.opacity             = this.opacity;
  1527.         containerInfo.hidden              = !this.visible;
  1528.         containerInfo._customFontSize     = this._customFontSize;
  1529.         containerInfo._customPadding      = this._customPadding;
  1530.         containerInfo._customLineHeight   = this._customLineHeight;
  1531.         containerInfo._customBackOpacity  = this._customBackOpacity;
  1532.         containerInfo._customBackFileName = this._customBackFileName;
  1533.         containerInfo._customFontFace     = this._customFontFace;
  1534.     };
  1535.  
  1536.     //=============================================================================
  1537.     // Window_Base
  1538.     //  プロパティの値をカスタマイズします。
  1539.     //=============================================================================
  1540.     var _Window_Base_initialize      = Window_Base.prototype.initialize;
  1541.     Window_Base.prototype.initialize = function(x, y, width, height) {
  1542.         _Window_Base_initialize.apply(this, arguments);
  1543.         this._customFontSize     = this.standardFontSize();
  1544.         this._customPadding      = this.standardPadding();
  1545.         this._customLineHeight   = this.lineHeight();
  1546.         this._customLineNumber   = 0;
  1547.         this._customBackOpacity  = this.standardBackOpacity();
  1548.         this._customBackSprite   = null;
  1549.         this._customBackFileName = '';
  1550.         this._customFontFace     = '';
  1551.     };
  1552.  
  1553.     Window_Base.prototype.createBackSprite = function() {
  1554.         if (this._customBackFileName) {
  1555.             if (!this._customBackSprite) {
  1556.                 this._customBackSprite = new Sprite();
  1557.                 this.addChildToBack(this._customBackSprite);
  1558.             }
  1559.             this._customBackSprite.bitmap = ImageManager.loadPicture(this._customBackFileName, 0);
  1560.         } else if (this._customBackSprite) {
  1561.             this.removeChild(this._customBackSprite);
  1562.             this._customBackSprite = null;
  1563.         }
  1564.         if (Utils.isDesignMode() && this._customBackSprite && this._customBackSprite.bitmap) {
  1565.             var bitmap            = this._customBackSprite.bitmap;
  1566.             bitmap._image.onerror = function() {
  1567.                 this._customBackFileName                 = '';
  1568.                 this._customBackSprite.bitmap._isLoading = false;
  1569.                 this._customBackSprite.bitmap            = null;
  1570.                 this._customBackSprite                   = null;
  1571.                 SceneManager.popChangeStack();
  1572.                 SceneManager.setInfoExtend('ファイルが見付からなかったので、左記の番号の変更を戻しました。', -1);
  1573.             }.bind(this);
  1574.         }
  1575.     };
  1576.  
  1577.     var _Window_Selectable_initialize      = Window_Selectable.prototype.initialize;
  1578.     Window_Selectable.prototype.initialize = function(x, y, width, height) {
  1579.         _Window_Selectable_initialize.apply(this, arguments);
  1580.         // Resolve conflict for BattleFormation.js
  1581.         this._customLineNumber = this.maxRows ? this.maxRows() : 0;
  1582.     };
  1583.  
  1584.     var _Window_Base_standardFontFace      = Window_Base.prototype.standardFontFace;
  1585.     Window_Base.prototype.standardFontFace = function() {
  1586.         return this._customFontFace ? this._customFontFace : _Window_Base_standardFontFace.apply(this, arguments);
  1587.     };
  1588.  
  1589.     var _Window_Base_standardFontSize      = Window_Base.prototype.standardFontSize;
  1590.     Window_Base.prototype.standardFontSize = function() {
  1591.         return this._customFontSize ? eval(this._customFontSize) :
  1592.             paramFontSize ? paramFontSize : _Window_Base_standardFontSize.apply(this, arguments);
  1593.     };
  1594.  
  1595.     var _Window_Base_standardPadding      = Window_Base.prototype.standardPadding;
  1596.     Window_Base.prototype.standardPadding = function() {
  1597.         return this._customPadding ? eval(this._customPadding) :
  1598.             paramPadding ? paramPadding : _Window_Base_standardPadding.apply(this, arguments);
  1599.     };
  1600.  
  1601.     var _Window_Base_lineHeight      = Window_Base.prototype.lineHeight;
  1602.     Window_Base.prototype.lineHeight = function() {
  1603.         return this._customLineHeight ? eval(this._customLineHeight) :
  1604.             paramLineHeight ? paramLineHeight : _Window_Base_lineHeight.apply(this, arguments);
  1605.     };
  1606.  
  1607.     var _Window_Base_standardBackOpacity      = Window_Base.prototype.standardBackOpacity;
  1608.     Window_Base.prototype.standardBackOpacity = function() {
  1609.         return this._customBackOpacity ? eval(this._customBackOpacity) :
  1610.             paramBackOpacity ? paramBackOpacity : _Window_Base_standardBackOpacity.apply(this, arguments);
  1611.     };
  1612.  
  1613.     Window_Base._iconSrcWidth  = Window_Base._iconWidth;
  1614.     Window_Base._iconSrcHeight = Window_Base._iconHeight;
  1615.  
  1616.     Window_Base.prototype.getIconScale = function() {
  1617.         var defaultFontSize = _Window_Base_standardFontSize.apply(this, arguments);
  1618.         var fontSize        = this.contents.fontSize;
  1619.         return paramIconSizeScale && defaultFontSize !== fontSize ? fontSize / defaultFontSize : null;
  1620.     };
  1621.  
  1622.     Window_Base.prototype.changeIconSize = function() {
  1623.         var iconScale = this.getIconScale();
  1624.         if (iconScale) {
  1625.             Window_Base._iconWidth *= iconScale;
  1626.             Window_Base._iconHeight *= iconScale;
  1627.         }
  1628.     };
  1629.  
  1630.     Window_Base.prototype.restoreIconSize = function() {
  1631.         var iconScale = this.getIconScale();
  1632.         if (iconScale) {
  1633.             Window_Base._iconWidth  = Window_Base._iconSrcWidth;
  1634.             Window_Base._iconHeight = Window_Base._iconSrcHeight;
  1635.         }
  1636.     };
  1637.  
  1638.     var _Window_Base_drawActorIcons      = Window_Base.prototype.drawActorIcons;
  1639.     Window_Base.prototype.drawActorIcons = function(actor, x, y, width) {
  1640.         this.changeIconSize();
  1641.         _Window_Base_drawActorIcons.apply(this, arguments);
  1642.         this.restoreIconSize();
  1643.     };
  1644.  
  1645.     var _Window_Base_drawItemName      = Window_Base.prototype.drawItemName;
  1646.     Window_Base.prototype.drawItemName = function(item, x, y, width) {
  1647.         this.changeIconSize();
  1648.         _Window_Base_drawItemName.apply(this, arguments);
  1649.         this.restoreIconSize();
  1650.     };
  1651.  
  1652.     var _Window_Base_processDrawIcon      = Window_Base.prototype.processDrawIcon;
  1653.     Window_Base.prototype.processDrawIcon = function(iconIndex, textState) {
  1654.         this.changeIconSize();
  1655.         _Window_Base_processDrawIcon.apply(this, arguments);
  1656.         this.restoreIconSize();
  1657.     };
  1658.  
  1659.     var _Window_Base_drawIcon      = Window_Base.prototype.drawIcon;
  1660.     Window_Base.prototype.drawIcon = function(iconIndex, x, y) {
  1661.         var iconScale = this.getIconScale();
  1662.         if (iconScale) {
  1663.             var bitmap = ImageManager.loadSystem('IconSet');
  1664.             var pw     = Window_Base._iconSrcWidth;
  1665.             var ph     = Window_Base._iconSrcHeight;
  1666.             var sx     = iconIndex % 16 * pw;
  1667.             var sy     = Math.floor(iconIndex / 16) * ph;
  1668.             var dw     = Math.floor(pw * iconScale);
  1669.             var dh     = Math.floor(ph * iconScale);
  1670.             var dx     = x;
  1671.             var dy     = y + (this.lineHeight() - dh) / 2 - 2;
  1672.             this.contents.blt(bitmap, sx, sy, pw, ph, dx, dy, dw, dh);
  1673.         } else {
  1674.             _Window_Base_drawIcon.apply(this, arguments);
  1675.         }
  1676.     };
  1677.  
  1678.     var _Window_Base_setBackgroundType      = Window_Base.prototype.setBackgroundType;
  1679.     Window_Base.prototype.setBackgroundType = function(type) {
  1680.         if (!paramBackgroundFixed) {
  1681.             _Window_Base_setBackgroundType.apply(this, arguments);
  1682.         }
  1683.     };
  1684.  
  1685.     var _Window_Base_updateClose = Window_Base.prototype.updateClose;
  1686.     Window_Base.prototype.updateClose = function() {
  1687.         var prevClose = this.isClosing();
  1688.         _Window_Base_updateClose.apply(this, arguments);
  1689.         if (this._callBack && prevClose && !this.isClosing()) {
  1690.             this._callBack();
  1691.             this._callBack = null;
  1692.         }
  1693.     };
  1694.  
  1695.     Window_Base.prototype.setCloseListener = function(callBack) {
  1696.         this._callBack = callBack;
  1697.     };
  1698.  
  1699.     // for RPG MV 1.6.1
  1700.     var _Window_EquipItem_refresh = Window_EquipItem.prototype.refresh;
  1701.     Window_EquipItem.prototype.refresh = function() {
  1702.         if (!this._actor) {
  1703.             return;
  1704.         }
  1705.         _Window_EquipItem_refresh.apply(this, arguments);
  1706.     };
  1707.  
  1708.     /**
  1709.      * Window_Custom
  1710.      * 任意配置可能なウィンドウです。
  1711.      * @constructor
  1712.      */
  1713.     function Window_Custom() {
  1714.         this.initialize.apply(this, arguments);
  1715.     }
  1716.  
  1717.     Window_Custom._textAligns = {
  1718.         'left'  : 0,
  1719.         '0'     : 0,
  1720.         'center': 1,
  1721.         '1'     : 1,
  1722.         'right' : 2,
  1723.         '2'     : 2
  1724.     };
  1725.  
  1726.     Window_Custom.prototype             = Object.create(Window_Selectable.prototype);
  1727.     Window_Custom.prototype.constructor = Window_Custom;
  1728.  
  1729.     Window_Custom.prototype.initialize = function(lines) {
  1730.         this._lines = lines || [];
  1731.         Window_Selectable.prototype.initialize.call(this, 0, 0, 320, this.fittingHeight(this._lines.length));
  1732.         this.refresh();
  1733.     };
  1734.  
  1735.     Window_Custom.prototype.refresh = function() {
  1736.         this.createContents();
  1737.         Window_Selectable.prototype.refresh.apply(this, arguments);
  1738.     };
  1739.  
  1740.     Window_Custom.prototype.drawItem = function(index) {
  1741.         var rect = this.itemRectForText(index);
  1742.         var text = this._lines[index];
  1743.         this.resetTextColor();
  1744.         text = this.changeTextAlign(text);
  1745.         if (this._textAlign > 0) {
  1746.             rect.x = this.getTextAlignStartX(text);
  1747.         }
  1748.         this.drawTextEx(text, rect.x, rect.y);
  1749.     };
  1750.  
  1751.     Window_Custom.prototype.getTextAlignStartX = function(text) {
  1752.         var width = this.drawTextEx(text, this.contentsWidth(), 0);
  1753.         if (this._textAlign === 1) {
  1754.             return this.contentsWidth() / 2 - width / 2;
  1755.         } else {
  1756.             return this.contentsWidth() - width;
  1757.         }
  1758.     };
  1759.  
  1760.     Window_Custom.prototype.maxItems = function() {
  1761.         return this._lines.length;
  1762.     };
  1763.  
  1764.     Window_Custom.prototype.changeTextAlign = function(text) {
  1765.         this._textAlign = 0;
  1766.         text            = text.replace(/\\al\[(.*)]/gi, function() {
  1767.             this._textAlign = Window_Custom._textAligns[arguments[1].toLowerCase()] || 0;
  1768.             return '';
  1769.         }.bind(this));
  1770.         return text;
  1771.     };
  1772.  
  1773. //    var _Scene_File_createListWindow = Scene_File.prototype.createListWindow;
  1774. //    Scene_File.prototype.createListWindow = function() {
  1775. //        _Scene_File_createListWindow.apply(this, arguments);
  1776. //        this._listWindow.setTopRow(this.firstSavefileIndex() - 2);
  1777. //    };
  1778. })();

改UI图片的话,直接在工程文件的img文件夹里找并用Photoshop改就行
作者: 岸波白野    时间: 2021-5-30 14:57
ABXY-Kenobi 发表于 2021-5-30 13:23
分享一个可设置UⅠ位置的插件,原帖找不到了
//======================================================= ...

万分感谢您的分享
作者: 岸波白野    时间: 2021-5-30 14:57
ABXY-Kenobi 发表于 2021-5-30 13:23
分享一个可设置UⅠ位置的插件,原帖找不到了
//======================================================= ...

万分感谢您的分享




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1