//=============================================================================
// AltMenuScreen3.js
//=============================================================================

/*:
 * @plugindesc Yet Another menu screen layout.
 * @author Sasuke KANNAZUKI, Yoji Ojima
 *
 * @param bgBitmapMenu
 * @desc background bitmap file at menu scene. put at img/pictures.
 * @default
 *
 * @param bgBitmapItem
 * @desc background bitmap file at item scene. put at img/pictures.
 * @default
 *
 * @param bgBitmapSkill
 * @desc background bitmap file at skill scene. put at img/pictures.
 * @default
 *
 * @param bgBitmapEquip
 * @desc background bitmap file at equip scene. put at img/pictures.
 * @default
 *
 * @param bgBitmapStatus
 * @desc background bitmap file at status scene. put at img/pictures.
 * @default
 *
 * @param bgBitmapOptions
 * @desc background bitmap file at option scene. put at img/pictures.
 * @default
 *
 * @param bgBitmapFile
 * @desc background bitmap file at save/load scene. put at img/pictures.
 * @default
 *
 * @param bgBitmapGameEnd
 * @desc background bitmap file at gameEnd scene. put at img/pictures.
 * @default
 *
 * @param maxColsMenu
 * @desc max column at menu window
 * @default 4
 *
 * @param commandRows
 * @desc number of visible rows at command window
 * @default 2
 *
 * @param isDisplayStatus
 * @desc whether display status or not. (1 = yes, 0 = no)
 * @default 1
 *
 * @help This plugin does not provide plugin commands.
 *  The differences with AltMenuscreen are follows:
 *   - windows are transparent at all menu scene.
 *   - it can set the background bitmap for each scenes at menu.
 *   - picture is actors' original
 *
 * Actor' note:
 *  set actor's standing picture at menu.
 *   put file at img/pictures.
 *
 * preferred size of actor's picture:
 * width: 174px(maxColsMenu=4), 240px(maxColsMenu=3)
 * height: 408px(commandRows=2), 444px(commandRows=1)
 */

/*:ja
 * @plugindesc レイアウトの異なるメニュー画面
 * @author 神無月サスケ, Yoji Ojima
 *
 * @param bgBitmapMenu
 * @desc メニュー背景にするビットマップファイルです。
 * img/pictures に置いてください。
 * @default
 *
 * @param bgBitmapItem
 * @desc アイテム画面背景にするビットマップファイルです。
 * img/pictures に置いてください。
 * @default
 *
 * @param bgBitmapSkill
 * @desc スキル画面背景にするビットマップファイルです。
 * img/pictures に置いてください。
 * @default
 *
 * @param bgBitmapEquip
 * @desc 装備画面背景にするビットマップファイルです。
 * img/pictures に置いてください。
 * @default
 *
 * @param bgBitmapStatus
 * @desc ステータス画面背景にするビットマップファイルです。
 * img/pictures に置いてください。
 * @default
 *
 * @param bgBitmapOptions
 * @desc オプション画面背景にするビットマップファイルです。
 * img/pictures に置いてください。
 * @default
 *
 * @param bgBitmapFile
 * @desc セーブ/ロード画面背景にするビットマップファイルです。
 * img/pictures に置いてください。
 * @default
 *
 * @param bgBitmapGameEnd
 * @desc ゲーム終了画面背景にするビットマップファイルです。
 * img/pictures に置いてください。
 * @default
 *
 * @param maxColsMenu
 * @desc アクターを表示するウィンドウの1画面の登録最大数です。
 * @default 4
 *
 * @param commandRows
 * @desc コマンドウィンドウの行数です。
 * @default 2
 *
 * @param isDisplayStatus
 * @desc ステータスを表示するかしないかを選びます。(1 = yes, 0 = no)
 * @default 1
 *
 * @help このプラグインには、プラグインコマンドはありません。
 *
 *  AltMenuscreen との違いは以下です:
 *  - メニュー画面すべてのウィンドウが透明です
 *  - メニューそれぞれのシーンに背景ビットマップを付けることが出来ます。
 *  - アクターに立ち絵を利用します。
 *
 * アクターのメモに以下のように書いてください:
 *  ファイル名が、そのアクターの立ち絵になります。
 *   ファイルは img/pictures に置いてください。
 *
 * 望ましいアクター立ち絵のサイズ:
 * 幅:3列:240px, 4列:174px
 * 高さ: コマンドウィンドウ 1行:444px 2行:408px
 *
 */

 /*:ch
 * @plugindesc
 * 比AltMenuScreen2更厉害的ESC菜单布局插件
 *
 * @author
 * Sasuke KANNAZUKI, Yoji Ojima
 *
 * @param bgBitmapMenu
 * @desc 菜单界面背景图,将图片资源放在img/pictures文件夹下。
 * @default
 *
 * @param bgBitmapItem
 * @desc 物品界面背景图,将图片资源放在img/pictures文件夹下。
 * @default
 *
 * @param bgBitmapSkill
 * @desc 技能界面背景图,将图片资源放在img/pictures文件夹下。
 * @default
 *
 * @param bgBitmapEquip
 * @desc 装备界面背景图,将图片资源放在img/pictures文件夹下。
 * @default
 *
 * @param bgBitmapStatus
 * @desc 状态界面背景图,将图片资源放在img/pictures文件夹下。
 * @default
 *
 * @param bgBitmapOptions
 * @desc 设置界面背景图,将图片资源放在img/pictures文件夹下。
 * @default
 *
 * @param bgBitmapFile
 * @desc 存读档界面背景图,将图片资源放在img/pictures文件夹下。
 * @default
 *
 * @param bgBitmapGameEnd
 * @desc 游戏结束界面背景图,将图片资源放在img/pictures文件夹下。
 * @default
 *
 * @param maxColsMenu
 * @desc 菜单窗口的显示项目的最大列数。
 * @default 4
 *
 * @param commandRows
 * @desc 指令窗口的显示项目的最大行数。
 * @default 2
 *
 * @param isDisplayStatus
 * @desc 是否显示角色状态信息。(1 = 显示, 0 = 不显示)
 * @default 1
 *
 * 本插件与AltMenuScreen插件的不同有以下几点:
 * - 默认所有窗口背景图都是不可见的
 * - 可以自己设定窗口背景图
 * - 可定制角色的菜单显示图(默认为脸图)
 *   - 在角色的备注内填写,即可设置角色的菜单显示图
 *   - 注意图片应当放置在img/pictures目录下
 *   - filename不含后缀
 *
 * 角色的菜单显示图的最佳尺寸:
 * - 菜单最大列数为4时,宽度为174像素。
 * - 菜单最大列数为3时,宽度为240像素。
 * - 指令选项行数为2时,高度为408像素。
 * - 指令选项行数为1时,高度为444像素。
 */

(function() {

    // set parameters                                                                   // 获取参数
    var parameters = PluginManager.parameters('AltMenuScreen3');                        // 获取插件管理器中AltMenuScreen3的参数列表
    var bgBitmapMenu = parameters['bgBitmapMenu'] || '';                                // 获取菜单界面背景图地址,如果没有,则标记为空
    var bgBitmapItem = parameters['bgBitmapItem'] || '';                                // 获取物品界面背景图地址,如果没有,则标记为空
    var bgBitmapSkill = parameters['bgBitmapSkill'] || '';                              // 获取技能界面背景图地址,如果没有,则标记为空
    var bgBitmapEquip = parameters['bgBitmapEquip'] || '';                              // 获取装备界面背景图地址,如果没有,则标记为空
    var bgBitmapStatus = parameters['bgBitmapStatus'] || '';                            // 获取状态界面背景图地址,如果没有,则标记为空
    var bgBitmapOptions = parameters['bgBitmapOptions'] || '';                          // 获取设置界面背景图地址,如果没有,则标记为空
    var bgBitmapFile = parameters['bgBitmapFile'] || '';                                // 获取存读档界面背景图地址,如果没有,则标记为空
    var bgBitmapGameEnd = parameters['bgBitmapGameEnd'] || '';                          // 获取游戏结束界面背景图地址,如果没有,则标记为空
    var maxColsMenuWnd = Number(parameters['maxColsMenu'] || 4);                        // 菜单窗口项目最大列数
    var rowsCommandWnd = Number(parameters['commandRows'] || 2);                        // 指令窗口项目最大行数
    var isDisplayStatus = !!Number(parameters['isDisplayStatus']);                      // 是否显示角色状态内容

    //                                                                                  //
    // make transparent windows for each scenes in menu.                                // 设置所有菜单界面中的窗口的透明度
    //                                                                                  //
    var _Scene_Menu_create = Scene_Menu.prototype.create;                               // 用_Scene_Menu_create指向原始的创建菜单界面函数
    Scene_Menu.prototype.create = function() {                                          // 追加用于本插件的创建菜单界面函数
        _Scene_Menu_create.call(this);                                                      // 调用原始的创建菜单界面函数
        this._statusWindow.x = 0;                                                           // 设置状态窗口的X坐标为0
        this._statusWindow.y = this._commandWindow.height;                                  // 设置状态窗口的Y坐标为指令窗口的高度
        this._goldWindow.x = Graphics.boxWidth - this._goldWindow.width;                    // 设置金币窗口的X坐标为游戏窗口的宽度 - 金币窗口的宽度
        // make transparent for all windows at menu scene.                                  // 注释:设置ESC菜单界面内的所有窗口的透明度为0
        this._statusWindow.opacity = 0;                                                     // 设置状态窗口的透明度为0
        this._goldWindow.opacity = 0;                                                       // 设置金币窗口的透明度为0
        this._commandWindow.opacity = 0;                                                    // 设置指令窗口的透明度为0
    };

    var _Scene_Item_create = Scene_Item.prototype.create;                               // 用_Scene_Item_create指向原始的创建物品界面函数
    Scene_Item.prototype.create = function() {                                          // 追加用于本插件的创建物品界面函数
        _Scene_Item_create.call(this);                                                      // 调用原始的创建物品界面函数
        this._helpWindow.opacity = 0;                                                       // 设置帮助窗口的透明度为0
        this._categoryWindow.opacity = 0;                                                   // 设置对话窗口的透明度为0
        this._itemWindow.opacity = 0;                                                       // 设置物品窗口的透明度为0
        this._actorWindow.opacity = 0;                                                      // 设置角色窗口的透明度为0
    };

    var _Scene_Skill_create = Scene_Skill.prototype.create;                             // 用_Scene_Skill_create指向原始的创建技能界面函数
    Scene_Skill.prototype.create = function() {                                         // 追加用于本插件的创建技能界面函数
        _Scene_Skill_create.call(this);                                                     // 调用原始的创建技能界面函数
        this._helpWindow.opacity = 0;                                                       // 设置帮助窗口的透明度为0
        this._skillTypeWindow.opacity = 0;                                                  // 设置技能类型窗口的透明度为0
        this._statusWindow.opacity = 0;                                                     // 设置状态窗口的透明度为0
        this._itemWindow.opacity = 0;                                                       // 设置物品窗口的透明度为0
        this._actorWindow.opacity = 0;                                                      // 设置角色窗口的透明度为0
    };

    var _Scene_Equip_create = Scene_Equip.prototype.create;                             // 用_Scene_Equip_create指向原始的创建装备界面函数
    Scene_Equip.prototype.create = function() {                                         // 追加用于本插件的创建装备界面函数
        _Scene_Equip_create.call(this);                                                     // 调用原始的创建装备界面函数
        this._helpWindow.opacity = 0;                                                       // 设置帮助窗口的透明度为0
        this._statusWindow.opacity = 0;                                                     // 设置状态窗口的透明度为0
        this._commandWindow.opacity = 0;                                                    // 设置指令窗口的透明度为0
        this._slotWindow.opacity = 0;                                                       // 设置装备槽窗口的透明度为0
        this._itemWindow.opacity = 0;                                                       // 设置物品窗口的透明度为0
    };

    var _Scene_Status_create = Scene_Status.prototype.create;                           // 用_Scene_Status_create指向原始的创建状态界面函数
    Scene_Status.prototype.create = function() {                                        // 追加用于本插件的创建状态界面函数
        _Scene_Status_create.call(this);                                                    // 调用原始的创建状态界面函数
        this._statusWindow.opacity = 0;                                                     // 设置状态窗口的透明度为0
    };

    var _Scene_Options_create = Scene_Options.prototype.create;                         // 用_Scene_Options_create指向原始的创建设置界面函数
    Scene_Options.prototype.create = function() {                                       // 追加用于本插件的创建设置界面函数
        _Scene_Options_create.call(this);                                                   // 调用原始的创建设置界面函数
        this._optionsWindow.opacity = 0;                                                    // 设置设置窗口的透明度为0 ... 设置设置是什么鬼(╯‵□′)╯︵┻━┻
    };

    var _Scene_File_create = Scene_File.prototype.create;                               // 用_Scene_File_create指向原始的创建存读档界面函数
    Scene_File.prototype.create = function() {                                          // 追加用于本插件的创建存读档界面函数
        _Scene_File_create.call(this);                                                      // 调用原始的创建存读档界面函数
        this._helpWindow.opacity = 0;                                                       // 设置帮助窗口的透明度为0
        this._listWindow.opacity = 0;                                                       // 设置列表窗口的透明度为0
    };

    var _Scene_GameEnd_create = Scene_GameEnd.prototype.create;                         // 用_Scene_File_create指向原始的创建游戏结束界面函数
    Scene_GameEnd.prototype.create = function() {                                       // 追加用于本插件的创建游戏结束界面函数
        _Scene_GameEnd_create.call(this);                                                   // 调用原始的创建游戏结束界面函数
        this._commandWindow.opacity = 0;                                                    // 设置指令窗口的透明度为0
    };

    //                                                                                  //
    // load bitmap that set in plugin parameters                                        // 载入插件参数数据中指定的图片
    //                                                                                  //
    var _Scene_Menu_createBackground = Scene_Menu.prototype.createBackground;           // 用_Scene_Menu_createBackground指向原始的创建游戏菜单界面背景函数
    Scene_Menu.prototype.createBackground = function(){                                 // 追加用于本插件的创建游戏菜单界面背景函数
        if(bgBitmapMenu){                                                                   // 如果游戏菜单界面背景图参数不是空的
            this._backgroundSprite = new Sprite();                                              // 创建一个新的背景图精灵
            this._backgroundSprite.bitmap = ImageManager.loadPicture(bgBitmapMenu);             // 调用图片管理器,为背景图精灵创建游戏菜单背景图
            this.addChild(this._backgroundSprite);                                              // 将背景图精灵添加到游戏菜单界面
            return;                                                                             // 结束本次调用
        }
        // if background file is invalid, it does original process.                         // 如果游戏菜单背景图参数是空的,就执行原本的逻辑
        _Scene_Menu_createBackground.call(this);                                                // 调用原始的创建游戏菜单背景函数
    };

    var _Scene_Item_createBackground = Scene_Item.prototype.createBackground;           // 用_Scene_Item_createBackground指向原始的创建游戏物品界面背景函数
    Scene_Item.prototype.createBackground = function(){                                 // 追加用于本插件的创建游戏物品界面背景函数
        if(bgBitmapItem){                                                                   // 如果游戏物品界面背景图参数不是空的
            this._backgroundSprite = new Sprite();                                              // 创建一个新的背景图精灵
            this._backgroundSprite.bitmap = ImageManager.loadPicture(bgBitmapItem);             // 调用图片管理器,为背景图精灵创建物品界面背景图
            this.addChild(this._backgroundSprite);                                              // 将背景图精灵添加到游戏菜单界面
            return;                                                                             // 结束本次调用
        }
        // if background file is invalid, it does original process.                         // 如果游戏物品界面背景图参数是空的,就执行原本的逻辑
        _Scene_Item_createBackground.call(this);                                                // 调用原始的创建游戏物品界面背景函数
    };

    var _Scene_Skill_createBackground = Scene_Skill.prototype.createBackground;         // 用_Scene_Skill_createBackground指向原始的创建游戏技能界面背景函数
    Scene_Skill.prototype.createBackground = function(){                                // 追加用于本插件的创建游戏技能界面背景函数
        if(bgBitmapSkill){                                                                  // 如果游戏技能界面背景图参数不是空的
            this._backgroundSprite = new Sprite();                                              // 创建一个新的背景图精灵
            this._backgroundSprite.bitmap = ImageManager.loadPicture(bgBitmapSkill);            // 调用图片管理器,为背景图精灵创建技能界面背景图
            this.addChild(this._backgroundSprite);                                              // 将背景图精灵添加到游戏菜单界面
            return;                                                                             // 结束本次调用
        }
        // if background file is invalid, it does original process.                         // 如果游戏技能界面背景图参数是空的,就执行原本的逻辑
        _Scene_Skill_createBackground.call(this);                                                // 调用原始的创建游戏技能界面背景函数
    };

    var _Scene_Equip_createBackground = Scene_Equip.prototype.createBackground;          // 用_Scene_Equip_createBackground指向原始的创建游戏装备界面背景函数
    Scene_Equip.prototype.createBackground = function(){                                 // 追加用于本插件的创建游戏装备界面背景函数
        if(bgBitmapEquip){                                                                   // 如果游戏装备界面背景图参数不是空的
            this._backgroundSprite = new Sprite();                                               // 创建一个新的背景图精灵
            this._backgroundSprite.bitmap = ImageManager.loadPicture(bgBitmapEquip);             // 调用图片管理器,为背景图精灵创建装备界面背景图
            this.addChild(this._backgroundSprite);                                               // 将背景图精灵添加到游戏菜单界面
            return;                                                                              // 结束本次调用
        }
        // if background file is invalid, it does original process.                          // 如果游戏装备界面背景图参数是空的,就执行原本的逻辑
        _Scene_Equip_createBackground.call(this);                                                 // 调用原始的创建游戏装备界面背景函数
    };

    var _Scene_Status_createBackground = Scene_Status.prototype.createBackground;       // 用_Scene_Status_createBackground指向原始的创建游戏状态界面背景函数
    Scene_Status.prototype.createBackground = function(){                               // 追加用于本插件的创建游戏状态界面背景函数
        if(bgBitmapStatus){                                                                 // 如果游戏状态界面背景图参数不是空的
            this._backgroundSprite = new Sprite();                                              // 创建一个新的背景图精灵
            this._backgroundSprite.bitmap = ImageManager.loadPicture(bgBitmapStatus);           // 调用图片管理器,为背景图精灵创建状态界面背景图
            this.addChild(this._backgroundSprite);                                              // 将背景图精灵添加到游戏菜单界面
            return;                                                                             // 结束本次调用
        }
        // if background file is invalid, it does original process.s                        // 如果游戏状态界面背景图参数是空的,就执行原本的逻辑
        _Scene_Status_createBackground.call(this);                                               // 调用原始的创建游戏状态界面背景函数
    };

    var _Scene_Options_createBackground = Scene_Options.prototype.createBackground;     // 用_Scene_Options_createBackground指向原始的创建游戏设置界面背景函数
    Scene_Options.prototype.createBackground = function(){                              // 追加用于本插件的创建游戏设置界面背景函数
        if(bgBitmapOptions){                                                                // 如果游戏设置界面背景图参数不是空的
            this._backgroundSprite = new Sprite();                                              // 创建一个新的背景图精灵
            this._backgroundSprite.bitmap = ImageManager.loadPicture(bgBitmapOptions);          // 调用图片管理器,为背景图精灵创建设置界面背景图
            this.addChild(this._backgroundSprite);                                              // 将背景图精灵添加到游戏菜单界面
            return;                                                                             // 结束本次调用
        }
        // if background file is invalid, it does original process.                         // 如果游戏设置界面背景图参数是空的,就执行原本的逻辑
        _Scene_Options_createBackground.call(this);                                              // 调用原始的创建游戏设置界面背景函数
    };

    var _Scene_File_createBackground = Scene_File.prototype.createBackground;           // 用_Scene_File_createBackground指向原始的创建游戏存读档界面背景函数
    Scene_File.prototype.createBackground = function(){                                 // 追加用于本插件的创建游戏存读档界面背景函数
        if(bgBitmapFile){                                                                   // 如果游戏存读档界面背景图参数不是空的
            this._backgroundSprite = new Sprite();                                              // 创建一个新的背景图精灵
            this._backgroundSprite.bitmap = ImageManager.loadPicture(bgBitmapFile);             // 调用图片管理器,为背景图精灵创建存读档界面背景图
            this.addChild(this._backgroundSprite);                                              // 将背景图精灵添加到游戏菜单界面
            return;                                                                             // 结束本次调用
        }
        // if background file is invalid, it does original process.                         // 如果游戏存读档界面背景图参数是空的,就执行原本的逻辑
        _Scene_File_createBackground.call(this);                                                 // 调用原始的创建游戏存读档界面背景函数
    };

    var _Scene_GameEnd_createBackground = Scene_GameEnd.prototype.createBackground;     // 用_Scene_GameEnd_createBackground指向原始的创建游戏结束界面背景函数
    Scene_GameEnd.prototype.createBackground = function(){                              // 追加用于本插件的创建游戏结束界面背景函数
        if(bgBitmapGameEnd){                                                                // 如果游戏结束界面背景图参数不是空的
            this._backgroundSprite = new Sprite();                                              // 创建一个新的背景图精灵
            this._backgroundSprite.bitmap = ImageManager.loadPicture(bgBitmapGameEnd);          // 调用图片管理器,为背景图精灵创建结束界面背景图
            this.addChild(this._backgroundSprite);                                              // 将背景图精灵添加到游戏菜单界面
            return;                                                                             // 结束本次调用
        }
        // if background file is invalid, it does original process.                         // 如果游戏结束界面背景图参数是空的,就执行原本的逻辑
        _Scene_GameEnd_createBackground.call(this);                                              // 调用原始的创建游戏结束界面背景函数
    };

    //                                                                                  //
    // alt menu screen processes                                                        // 修改菜单界面的实际逻辑进程
    //                                                                                  //
    Window_MenuCommand.prototype.windowWidth = function() {                             // 重定义指令窗口的宽度
        return Graphics.boxWidth;                                                           // 返回游戏窗口宽度
    };

    Window_MenuCommand.prototype.maxCols = function() {                                 // 重定义指令窗口项目的最大列数
        return 4;                                                                           // 返回⑨
    };

    Window_MenuCommand.prototype.numVisibleRows = function() {                          // 重定义指令窗口项目的可见行数
        return rowsCommandWnd;                                                              // 返回“指令行数(参数)”
    };

    Window_MenuStatus.prototype.windowWidth = function() {                              // 重定义状态窗口的宽度
        return Graphics.boxWidth;                                                           // 返回游戏窗口宽度
    };

    Window_MenuStatus.prototype.windowHeight = function() {                             // 重定义状态窗口的高度
        var h1 = this.fittingHeight(1);                                                     // 【?】自动适配1行项目的高度
        var h2 = this.fittingHeight(rowsCommandWnd);                                        // 【?】自动适配“指令行数(参数)”行项目的高度
        return Graphics.boxHeight - h1 - h2;                                                // 返回游戏窗口高度-【?】-【?】
    };

    Window_MenuStatus.prototype.maxCols = function() {                                  // 重定义状态窗口的最大列数
        return maxColsMenuWnd;                                                              // 返回“指令列数(参数)”
    };

    Window_MenuStatus.prototype.numVisibleRows = function() {                           // 重定义状态窗口的可见行数
        return 1;                                                                           // 返回奥特曼变身器
    };

    Window_MenuStatus.prototype.drawItemImage = function(index) {                       // 重定义状态窗口的项目图片绘制函数
        var actor = $gameParty.members()[index];                                            // 获取角色队伍中排序为index的角色
        var rect = this.itemRectForText(index);                                             // 获取排序为index的项目图片绘制区域
        // load stand_picture                                                               // 注释:读取标准角色图
        var bitmapName = $dataActors[actor.actorId()].meta.stand_picture;                   // 【?】读取当前角色的标准角色图名字
        var bitmap = bitmapName ? ImageManager.loadPicture(bitmapName) : null;              // 如果角色图名字不为空,则载入角色图,否则不载入图片
        var w = Math.min(rect.width, (bitmapName ? bitmap.width : 144));                    // 如果角色图名字不为空,则读取项目图片绘制区域或角色图的宽度中较小的一个,如果没有角色图,则认为角色图宽度为144
        var h = Math.min(rect.height, (bitmapName ? bitmap.height : 144));                  // 如果角色图名字不为空,则读取项目图片绘制区域或角色图的高度中较小的一个,如果没有角色图,则认为角色图高度为144
        var lineHeight = this.lineHeight();                                                 // 读取状态窗口的行高
        this.changePaintOpacity(actor.isBattleMember());                                    // 【?】改变绘制功能的透明度
        if(bitmap){                                                                         // 如果存在角色图
            var sx = (bitmap.width > w) ? (bitmap.width - w) / 2 : 0;                           // 一套算法,用于计算出适配角色图的区域坐标
            var sy = (bitmap.height > h) ? (bitmap.height - h) / 2 : 0;                         // ...
            var dx = (bitmap.width > rect.width) ? rect.x :                                     // ...
                rect.x + (rect.width - bitmap.width) / 2;                                       // ...
            var dy = (bitmap.height > rect.height) ? rect.y :                                   // ...
                rect.y + (rect.height - bitmap.height) / 2;                                     // ...
            this.contents.blt(bitmap, sx, sy, w, h, dx, dy);                                    // ...
        } else { // when bitmap is not set, do the original process.                        // 如果不存在角色图,则调用原始的状态窗口的项目图片绘制函数
            this.drawActorFace(actor, rect.x, rect.y + lineHeight * 2.5, w, h);                 // 为当前角色绘制角色图(脸图)
        }
        this.changePaintOpacity(true);                                                      // 【?】恢复绘制功能的透明度
    };

    Window_MenuStatus.prototype.drawItemStatus = function(index) {                      // 重定义状态窗口的项目属性绘制函数
        if(!isDisplayStatus){                                                               // 如果“是否显示角色状态(参数)”为否
            return;                                                                             // 结束本次调用
        }
        var actor = $gameParty.members()[index];                                            // 读取角色队伍中排序为index的角色
        var rect = this.itemRectForText(index);                                             // 读取排序为index的项目图片绘制区域
        var x = rect.x;                                                                     // 获取排序为index的项目图片绘制区域的X坐标
        var y = rect.y;                                                                     // 获取排序为index的项目图片绘制区域的Y坐标
        var width = rect.width;                                                             // 获取排序为index的项目图片绘制区域的宽度
        var bottom = y + rect.height;                                                       // 获取排序为index的项目图片绘制区域的底部坐标
        var lineHeight = this.lineHeight();                                                 // 获取状态窗口的行高
        this.drawActorName(actor, x, y + lineHeight * 0, width);                            // 绘制排序为index的角色姓名
        this.drawActorLevel(actor, x, y + lineHeight * 1, width);                           // 绘制排序为index的角色等级
        this.drawActorClass(actor, x, bottom - lineHeight * 4, width);                      // 绘制排序为index的角色职业
        this.drawActorHp(actor, x, bottom - lineHeight * 3, width);                         // 绘制排序为index的角色生命值
        this.drawActorMp(actor, x, bottom - lineHeight * 2, width);                         // 绘制排序为index的角色魔法值
        this.drawActorIcons(actor, x, bottom - lineHeight * 1, width);                      // 【?】绘制排序为index的角色状态图标
    };

    var _Window_MenuActor_initialize = Window_MenuActor.prototype.initialize;           // 用_Window_MenuActor_initialize指向原始的菜单角色初始化函数
    Window_MenuActor.prototype.initialize = function() {                                // 重定义菜单角色初始化函数
        _Window_MenuActor_initialize.call(this);                                            // 调用原始的菜单角色初始化函数
        this.y = this.fittingHeight(2);                                                     // 【?】设置菜单角色的Y坐标为两行项目的行高
    };

})();