Free_Game / maimai_6_0418 /js /plugins /LL_MenuScreenCustom.js
Sageen's picture
Super-squash branch 'main' using huggingface_hub
99b0de1 verified
Raw
History Blame Contribute Delete
36.1 kB
//=============================================================================
// RPGツクールMZ - LL_MenuScreenCustom.js v1.4.4
//-----------------------------------------------------------------------------
// ルルの教会 (Lulu's Church)
// https://nine-yusha.com/
//
// URL below for license details.
// https://nine-yusha.com/plugin/
//=============================================================================
/*:
* @target MZ
* @plugindesc メニュー画面レイアウトをカスタマイズします。
* @author ルルの教会
* @url https://nine-yusha.com/plugin-menuscreencustom/
* @base LL_MenuScreenBase
* @orderAfter LL_MenuScreenBase
*
* @help LL_MenuScreenCustom.js
*
* メニュー画面レイアウトをカスタマイズします。
* 顔グラフィックの代わりに立ち絵を表示することもできます。
* ※表示する立ち絵リストは「LL_MenuScreenBase」で設定してください。
*
* 立ち絵が上手く表示されない場合:
* 何も表示されない場合は、X・Y座標始点のマイナス値を大きくしてみるか、
* 拡大率を小さくしてみてください。
* 顔グラフィックが表示されている時は、立ち絵リストが紐づけできていません。
* 立ち絵リストが正しく設定されているか確認してみてください。
*
* ヘルプウィンドウ:
* ヘルプウィンドウの左上と右上、左下と右下に任意の情報を表示できます。
* 表示する内容(値)はスクリプトで記述してください。
*
* プラグインコマンドはありません。
*
* 利用規約:
* ・著作権表記は必要ございません。
* ・利用するにあたり報告の必要は特にございません。
* ・商用・非商用問いません。
* ・R18作品にも使用制限はありません。
* ・ゲームに合わせて自由に改変していただいて問題ございません。
* ・プラグイン素材としての再配布(改変後含む)は禁止させていただきます。
*
* 作者: ルルの教会
* 作成日: 2022/6/7
*
* @param menuSettings
* @text メニュー画面の設定
* @desc ※この項目は使用しません
*
* @param leftInputMode
* @text メニューを左に配置
* @desc メニューを左に配置し、タッチUI配置も左向けに調整します。
* 戻るボタンが左上、ページ切替ボタンが右上に配置されます。
* @default false
* @type boolean
* @parent menuSettings
*
* @param numVisibleRows
* @text アクター行数
* @desc アクター一覧画面の行数です。 (推奨値: 1~2)
* @default 2
* @min 1
* @max 10
* @type number
* @parent menuSettings
*
* @param maxCols
* @text アクター列数
* @desc アクター一覧画面の列数です。 (推奨値: 1~2)
* @default 2
* @min 1
* @max 10
* @type number
* @parent menuSettings
*
* @param currencyWindowPosition
* @text 所持金の表示位置
* @desc ヘルプウィンドウの右下に独自の項目を表示するときは、
* 「メニュー下に別ウィンドウで表示」に設定してください。
* @default helpWindowRightBottom
* @type select
* @option 表示しない
* @value hidden
* @option ヘルプウィンドウの右下
* @value helpWindowRightBottom
* @option メニュー下に別ウィンドウで表示
* @value menuCommandBottom
* @parent menuSettings
*
* @param backgroundImages
* @text 背景画像の設定
* @desc メニュー画面の背景画像を変更します。
* @default []
* @type struct<backgroundImages>[]
* @parent menuSettings
*
* @param layoutSettings
* @text 表示位置の設定
* @desc ※この項目は使用しません
*
* @param actorNameLH
* @text アクター名表示位置
* @desc アクター名を上から何行目に表示するか設定します。
* -1にすると非表示になります。 (初期値: 0)
* @default 0
* @min -1
* @max 100
* @type number
* @parent layoutSettings
*
* @param actorNameX
* @text アクター名表示位置(X)
* @desc アクター名の横位置を調整します。(初期値: 0)
* プラスにすると右へ、マイナスにすると左へ移動します。
* @default 0
* @min -9999
* @max 9999
* @type number
* @parent layoutSettings
*
* @param actorLevelLH
* @text レベル表示位置
* @desc レベルを上から何行目に表示するか設定します。
* -1にすると非表示になります。 (初期値: 1)
* @default 1
* @min -1
* @max 100
* @type number
* @parent layoutSettings
*
* @param actorLevelX
* @text レベル表示位置(X)
* @desc レベルの横位置を調整します。(初期値: 0)
* プラスにすると右へ、マイナスにすると左へ移動します。
* @default 0
* @min -9999
* @max 9999
* @type number
* @parent layoutSettings
*
* @param actorIconLH
* @text ステート表示位置
* @desc ステートアイコンを上から何行目に表示するか設定します。
* -1にすると非表示になります。 (初期値: 2)
* @default 2
* @min -1
* @max 100
* @type number
* @parent layoutSettings
*
* @param actorIconX
* @text ステート表示位置(X)
* @desc ステートアイコンの横位置を調整します。(初期値: 0)
* プラスにすると右へ、マイナスにすると左へ移動します。
* @default 0
* @min -9999
* @max 9999
* @type number
* @parent layoutSettings
*
* @param actorClassLH
* @text 職業名表示位置
* @desc 職業名を上から何行目に表示するか設定します。
* -1にすると非表示になります。 (初期値: 3)
* @default 3
* @min -1
* @max 100
* @type number
* @parent layoutSettings
*
* @param actorClassX
* @text 職業名表示位置(X)
* @desc 職業名の横位置を調整します。(初期値: 0)
* プラスにすると右へ、マイナスにすると左へ移動します。
* @default 0
* @min -9999
* @max 9999
* @type number
* @parent layoutSettings
*
* @param actorGaugeLH
* @text ゲージ表示位置
* @desc HP・MP・TPゲージを上から何行目に表示するか設定します。
* -1にすると非表示になります。 (初期値: 4)
* @default 4
* @min -1
* @max 100
* @type number
* @parent layoutSettings
*
* @param actorGaugeX
* @text ゲージ表示位置(X)
* @desc ゲージの横位置を調整します。(初期値: 0)
* プラスにすると右へ、マイナスにすると左へ移動します。
* @default 0
* @min -9999
* @max 9999
* @type number
* @parent layoutSettings
*
* @param lvPadding
* @text Lvの余白調整値
* @desc Lv表記の余白調整値です。
* 数値を小さくすると余白が狭くなります。 (初期値: 84)
* @default 84
* @min 0
* @max 2000
* @type number
* @parent layoutSettings
*
* @param gaugeWidth
* @text ゲージの幅
* @desc ゲージの幅(長さ)です。 (初期値: 128)
* この設定はメニュー画面トップのみ適用されます。
* @default 128
* @min 0
* @max 2000
* @type number
* @parent layoutSettings
*
* @param pictureSettings
* @text 立ち絵表示の設定
* @desc ※この項目は使用しません
*
* @param showStandingPicture
* @text 立ち絵を表示
* @desc 顔グラフィックの代わりに立ち絵を表示します。
* @default true
* @type boolean
* @parent pictureSettings
*
* @param menuWindowPictureX
* @text X座標始点
* @desc 顔グラフィックの代わりに表示する立ち絵の表示位置(X)です。
* @default 0
* @min -2000
* @max 2000
* @type number
* @parent pictureSettings
*
* @param menuWindowPictureY
* @text Y座標始点
* @desc 顔グラフィックの代わりに表示する立ち絵の表示位置(Y)です。
* @default 0
* @min -2000
* @max 2000
* @type number
* @parent pictureSettings
*
* @param menuWindowPictureScale
* @text 拡大率
* @desc 立ち絵の拡大率です。 (初期値: 100)
* @default 100
* @min -2000
* @max 2000
* @type number
* @parent pictureSettings
*
* @param menuHelpSettings
* @text ヘルプウィンドウの設定
* @desc ※この項目は使用しません
*
* @param menuHelpWindowEnable
* @text ヘルプウィンドウを表示
* @desc メニュー画面上部にヘルプウィンドウを表示します。
* @default true
* @type boolean
* @parent menuHelpSettings
*
* @param menuHelpTexts
* @text メニュー説明文
* @desc メニュー説明文のリストを定義します。
* @default ["{\"symbol\":\"アイテム\",\"helpText\":\"入手したアイテムを使用します。\"}","{\"symbol\":\"スキル\",\"helpText\":\"習得したスキルを使用します。\"}","{\"symbol\":\"装備\",\"helpText\":\"装備を変更します。\"}","{\"symbol\":\"ステータス\",\"helpText\":\"ステータスを確認します。\"}","{\"symbol\":\"並び替え\",\"helpText\":\"パーティの並び順を変更します。\"}","{\"symbol\":\"オプション\",\"helpText\":\"オプション画面を開きます。\"}","{\"symbol\":\"セーブ\",\"helpText\":\"セーブ画面を開きます。\"}","{\"symbol\":\"ゲーム終了\",\"helpText\":\"ゲームを終了します。\"}"]
* @type struct<menuHelpTexts>[]
* @parent menuHelpSettings
*
* @param leftBlockLabel
* @text 左上の項目名
* @desc 左上に表示する項目名です。
* 空白にすると非表示になります。
* @default 現在地:
* @type string
* @parent menuHelpSettings
*
* @param leftBlockValue
* @text 左上の値
* @desc 左上に表示する値をスクリプトで記述します。
* @default $gameMap.displayName()
* @type combo
* @option $gameVariables.value(1) // 変数ID:1の値
* @option $gameSwitches.value(1) ? "有効" : "無効" // スイッチID:1の状態
* @option $gameMap.displayName() // マップ名
* @option $gameParty.size() // パーティー人数
* @option $gameParty.steps() // 現在の歩数
* @option $gameParty.gold() // 所持金
* @option $gameParty.numItems($dataItems[1]) // アイテムID:1の所持数
* @option $gameParty.numItems($dataWeapons[1]) // 武器ID:1の所持数
* @option $gameParty.numItems($dataArmors[1]) // 防具ID:1の所持数
* @option $gameSystem.playtimeText() // プレイ時間
* @option $gameSystem.saveCount() // セーブ回数
* @option $gameSystem.battleCount() // 戦闘回数
* @parent menuHelpSettings
*
* @param leftBlockAlign
* @text 左上の文字揃え
* @desc 左上に表示する値の文字配置を選択します。
* @default left
* @type select
* @option 左揃え
* @value left
* @option 中央揃え
* @value center
* @option 右揃え
* @value right
* @parent menuHelpSettings
*
* @param rightBlockLabel
* @text 右上の項目名
* @desc 右上に表示する項目名です。
* 空白にすると非表示になります。
* @default プレイ時間:
* @type string
* @parent menuHelpSettings
*
* @param rightBlockValue
* @text 右上の値
* @desc 右上に表示する値をスクリプトで記述します。
* @default $gameSystem.playtimeText()
* @type combo
* @option $gameVariables.value(1) // 変数ID:1の値
* @option $gameSwitches.value(1) ? "有効" : "無効" // スイッチID:1の状態
* @option $gameMap.displayName() // マップ名
* @option $gameParty.size() // パーティー人数
* @option $gameParty.steps() // 現在の歩数
* @option $gameParty.gold() // 所持金
* @option $gameParty.numItems($dataItems[1]) // アイテムID:1の所持数
* @option $gameParty.numItems($dataWeapons[1]) // 武器ID:1の所持数
* @option $gameParty.numItems($dataArmors[1]) // 防具ID:1の所持数
* @option $gameSystem.playtimeText() // プレイ時間
* @option $gameSystem.saveCount() // セーブ回数
* @option $gameSystem.battleCount() // 戦闘回数
* @parent menuHelpSettings
*
* @param rightBlockAlign
* @text 右上の文字揃え
* @desc 右上に表示する値の文字配置を選択します。
* @default right
* @type select
* @option 左揃え
* @value left
* @option 中央揃え
* @value center
* @option 右揃え
* @value right
* @parent menuHelpSettings
*
* @param rightBottomBlockLabel
* @text 右下の項目名
* @desc 右下に表示する項目名です。
* ※所持金の表示位置が「ヘルプウィンドウの右下」時は無効
* @default
* @type string
* @parent menuHelpSettings
*
* @param rightBottomBlockValue
* @text 右下の値
* @desc 右下に表示する値をスクリプトで記述します。
* ※所持金の表示位置が「ヘルプウィンドウの右下」時は無効
* @default
* @type combo
* @option $gameVariables.value(1) // 変数ID:1の値
* @option $gameSwitches.value(1) ? "有効" : "無効" // スイッチID:1の状態
* @option $gameMap.displayName() // マップ名
* @option $gameParty.size() // パーティー人数
* @option $gameParty.steps() // 現在の歩数
* @option $gameParty.gold() // 所持金
* @option $gameParty.numItems($dataItems[1]) // アイテムID:1の所持数
* @option $gameParty.numItems($dataWeapons[1]) // 武器ID:1の所持数
* @option $gameParty.numItems($dataArmors[1]) // 防具ID:1の所持数
* @option $gameSystem.playtimeText() // プレイ時間
* @option $gameSystem.saveCount() // セーブ回数
* @option $gameSystem.battleCount() // 戦闘回数
* @parent menuHelpSettings
*
* @param rightBottomBlockAlign
* @text 右下の文字揃え
* @desc 右下に表示する値の文字配置を選択します。
* ※所持金の表示位置が「ヘルプウィンドウの右下」時は無効
* @default left
* @type select
* @option 左揃え
* @value left
* @option 中央揃え
* @value center
* @option 右揃え
* @value right
* @parent menuHelpSettings
*
* @param leftBottomBlockLabel
* @text 左下の項目名
* @desc 左下に表示する項目名です。
* ※設定するとメニュー説明文が表示されなくなります
* @default
* @type string
* @parent menuHelpSettings
*
* @param leftBottomBlockValue
* @text 左下の値
* @desc 左下に表示する値をスクリプトで記述します。
* ※設定するとメニュー説明文が表示されなくなります
* @default
* @type combo
* @option $gameVariables.value(1) // 変数ID:1の値
* @option $gameSwitches.value(1) ? "有効" : "無効" // スイッチID:1の状態
* @option $gameMap.displayName() // マップ名
* @option $gameParty.size() // パーティー人数
* @option $gameParty.steps() // 現在の歩数
* @option $gameParty.gold() // 所持金
* @option $gameParty.numItems($dataItems[1]) // アイテムID:1の所持数
* @option $gameParty.numItems($dataWeapons[1]) // 武器ID:1の所持数
* @option $gameParty.numItems($dataArmors[1]) // 防具ID:1の所持数
* @option $gameSystem.playtimeText() // プレイ時間
* @option $gameSystem.saveCount() // セーブ回数
* @option $gameSystem.battleCount() // 戦闘回数
* @parent menuHelpSettings
*
* @param leftBottomBlockAlign
* @text 左下の文字揃え
* @desc 左下に表示する値の文字配置を選択します。
* @default left
* @type select
* @option 左揃え
* @value left
* @option 中央揃え
* @value center
* @option 右揃え
* @value right
* @parent menuHelpSettings
*/
/*~struct~menuHelpTexts:
*
* @param symbol
* @text メニュー名
* @desc メニュー名を入力します。
* @type string
*
* @param helpText
* @text メニュー説明文
* @desc メニューの説明文を入力します。
* @type string
*/
/*~struct~backgroundImages:
*
* @param sceneName
* @text シーン名
* @desc 背景画像を設定するシーン名です。
* 独自で追加したシーン名を直接入力することもできます。
* @default Scene_Menu
* @type combo
* @option Scene_Menu
* @option Scene_Item
* @option Scene_Skill
* @option Scene_Equip
* @option Scene_Status
* @option Scene_Options
* @option Scene_Save
* @option Scene_Load
* @option Scene_GameEnd
*
* @param imageName
* @text 背景画像
* @desc 背景画像として表示する画像を選択してください。
* @dir img/system
* @type file
* @require 1
*/
(() => {
"use strict";
const pluginName = "LL_MenuScreenCustom";
const parameters = PluginManager.parameters(pluginName);
const leftInputMode = eval(parameters["leftInputMode"] || "true");
const numVisibleRows = Number(parameters["numVisibleRows"] || 2);
const maxCols = Number(parameters["maxCols"] || 2);
const currencyWindowPosition = String(parameters["currencyWindowPosition"] || "helpWindowRightBottom");
// 表示位置の設定
const actorNameLH = Number(parameters["actorNameLH"] || 0);
const actorLevelLH = Number(parameters["actorLevelLH"] || 1);
const actorIconLH = Number(parameters["actorIconLH"] || 2);
const actorClassLH = Number(parameters["actorClassLH"] || 3);
const actorGaugeLH = Number(parameters["actorGaugeLH"] || 4);
const lvPadding = Number(parameters["lvPadding"] || 84);
const gaugeWidth = Number(parameters["gaugeWidth"] || 128);
// 表示位置の設定(X)
const actorNameX = Number(parameters["actorNameX"] || 0);
const actorLevelX = Number(parameters["actorLevelX"] || 0);
const actorIconX = Number(parameters["actorIconX"] || 0);
const actorClassX = Number(parameters["actorClassX"] || 0);
const actorGaugeX = Number(parameters["actorGaugeX"] || 0);
// 立ち絵表示の設定
const showStandingPicture = eval(parameters["showStandingPicture"] || "true");
const menuWindowPictureX = Number(parameters["menuWindowPictureX"] || 0);
const menuWindowPictureY = Number(parameters["menuWindowPictureY"] || 0);
const menuWindowPictureScale = Number(parameters["menuWindowPictureScale"] || 100);
// ヘルプウィンドウの設定
const menuHelpWindowEnable = eval(parameters["menuHelpWindowEnable"] || "true");
const menuHelpTexts = JSON.parse(parameters["menuHelpTexts"] || "null");
const leftBlockLabel = String(parameters["leftBlockLabel"] || "");
const leftBlockValue = String(parameters["leftBlockValue"] || "");
const leftBlockAlign = String(parameters["leftBlockAlign"] || "left");
const rightBlockLabel = String(parameters["rightBlockLabel"] || "");
const rightBlockValue = String(parameters["rightBlockValue"] || "");
const rightBlockAlign = String(parameters["rightBlockAlign"] || "right");
const rightBottomBlockLabel = String(parameters["rightBottomBlockLabel"] || "");
const rightBottomBlockValue = String(parameters["rightBottomBlockValue"] || "");
const rightBottomBlockAlign = String(parameters["rightBottomBlockAlign"] || "left");
const leftBottomBlockLabel = String(parameters["leftBottomBlockLabel"] || "");
const leftBottomBlockValue = String(parameters["leftBottomBlockValue"] || "");
const leftBottomBlockAlign = String(parameters["leftBottomBlockAlign"] || "left");
// 背景画像の設定
const backgroundImages = JSON.parse(parameters["backgroundImages"] || "null");
let menuHelpLists = [];
if (menuHelpTexts) {
menuHelpTexts.forEach((elm) => {
menuHelpLists[String(JSON.parse(elm).symbol)] = String(JSON.parse(elm).helpText);
});
}
let backgroundImageLists = [];
if (backgroundImages) {
backgroundImages.forEach((elm) => {
backgroundImageLists.push(JSON.parse(elm));
});
}
// メニュー画面ヘルプウィンドウの標準高さ (lineHeight)
let menuHelpWindowLH = 1.5;
// ヘルプウィンドウフォントサイズ
const menuHelpWindowFontSize = 22;
const _Scene_MenuBase_createBackground = Scene_MenuBase.prototype.createBackground;
Scene_MenuBase.prototype.createBackground = function() {
let sceneName = SceneManager._scene.constructor.name;
// 背景画像を検索
let originalBackgroundImage = backgroundImageLists.find(function(item) {
if (String(item.sceneName) == sceneName) return true;
});
if (originalBackgroundImage) {
// 独自の背景画像を表示
this._backgroundSprite = new Sprite();
this._backgroundSprite.bitmap = ImageManager.loadSystem(originalBackgroundImage.imageName);
this.addChild(this._backgroundSprite);
return;
}
_Scene_MenuBase_createBackground.apply(this, arguments);
};
// ヘルプウィンドウの高さを定義
Scene_MenuBase.prototype.calcMenuHelpWindowHeight = function() {
let height = this.calcWindowHeight(menuHelpWindowLH, false);
if (!leftBlockLabel && !rightBlockLabel) height = this.calcWindowHeight(1, false);
if (!menuHelpWindowEnable) height = 0;
return height;
};
Scene_Menu.prototype.isRightInputMode = function() {
return !leftInputMode;
};
Scene_MenuBase.prototype.createCancelButton = function() {
this._cancelButton = new Sprite_Button("cancel");
this._cancelButton.x = leftInputMode ? 4 : Graphics.boxWidth - this._cancelButton.width - 4;
this._cancelButton.y = this.buttonY();
this.addWindow(this._cancelButton);
};
Scene_MenuBase.prototype.createPageButtons = function() {
this._pageupButton = new Sprite_Button("pageup");
this._pagedownButton = new Sprite_Button("pagedown");
if (leftInputMode) {
this._pageupButton.x = Graphics.boxWidth - this._pageupButton.width - this._pagedownButton.width - 8;
} else {
this._pageupButton.x = 4;
}
this._pageupButton.y = this.buttonY();
const pageupRight = this._pageupButton.x + this._pageupButton.width;
this._pagedownButton.x = pageupRight + 4;
this._pagedownButton.y = this.buttonY();
this.addWindow(this._pageupButton);
this.addWindow(this._pagedownButton);
this._pageupButton.setClickHandler(this.previousActor.bind(this));
this._pagedownButton.setClickHandler(this.nextActor.bind(this));
};
const _Scene_Menu_create = Scene_Menu.prototype.create;
Scene_Menu.prototype.create = function() {
_Scene_Menu_create.apply(this, arguments);
this.createMenuHelpWindow();
if (currencyWindowPosition != "menuCommandBottom") {
this._goldWindow.visible = false;
}
};
Scene_Menu.prototype.commandWindowRect = function() {
const ww = this.mainCommandWidth();
let wh = this.mainAreaHeight() - this.menuHelpWindowRect().height - this.goldWindowRect().height;
const wx = this.isRightInputMode() ? Graphics.boxWidth - ww : 0;
const wy = this.mainAreaTop() + this.menuHelpWindowRect().height;
if (currencyWindowPosition != "menuCommandBottom") {
wh += this.goldWindowRect().height
}
return new Rectangle(wx-10, wy, ww-60, wh-10);
};
Scene_Menu.prototype.goldWindowRect = function() {
const ww = this.mainCommandWidth();
const wh = this.calcWindowHeight(1, true);
const wx = this.isRightInputMode() ? Graphics.boxWidth - ww : 0;
const wy = this.mainAreaBottom() - wh;
return new Rectangle(wx-70, wy-6, ww, wh);
};
Scene_Menu.prototype.statusWindowRect = function() {
const ww = Graphics.boxWidth - this.mainCommandWidth();
const wh = this.mainAreaHeight() - this.menuHelpWindowRect().height;
const wx = this.isRightInputMode() ? 0 : Graphics.boxWidth - ww;
const wy = this.mainAreaTop() + this.menuHelpWindowRect().height;
return new Rectangle(wx, wy+10, ww-120, wh-20);
};
Scene_Menu.prototype.createMenuHelpWindow = function() {
const rect = this.menuHelpWindowRect();
this._menuHelpWindow = new Window_MenuHelp(rect);
this.addWindow(this._menuHelpWindow);
};
Scene_Menu.prototype.menuHelpWindowRect = function() {
const wx = 0;
const wy = this.mainAreaTop();
const ww = Graphics.boxWidth;
const wh = this.calcMenuHelpWindowHeight();
return new Rectangle(wx+100, wy-10, ww-100, wh);
};
const _Scene_Menu_update = Scene_Menu.prototype.update;
Scene_Menu.prototype.update = function() {
_Scene_Menu_update.apply(this, arguments);
// インフォメーションウィンドウの更新
const helpText = menuHelpLists[this._commandWindow.currentName()] ? menuHelpLists[this._commandWindow.currentName()] : "";
this._menuHelpWindow.setText(helpText);
};
Scene_ItemBase.prototype.actorWindowRect = function() {
const wx = 0;
const wy = Math.min(this.mainAreaTop(), this.helpAreaTop());
const ww = Graphics.boxWidth - this.mainCommandWidth();
const wh = Graphics.boxHeight - this.buttonAreaHeight() - this.calcMenuHelpWindowHeight();
return new Rectangle(wx, wy, ww, wh);
};
// Get Current Name
Window_Command.prototype.currentName = function() {
return this.currentData() ? this.currentData().name : null;
};
// ウィンドウ内に立ち絵を描画
Window_StatusBase.prototype.drawStandingPicture = function(
pictureName, x, y, width, height, sx, sy, scaleX, scaleY
) {
width = width || 200;
height = height || 200;
sx = sx || 0;
sy = sy || 0;
const bitmap = ImageManager.loadPicture(pictureName);
const pw = width;
const ph = height;
let sw = Math.min(width, pw);
let sh = Math.min(height, ph);
let dx = Math.floor(x + Math.max(width - pw, 0) / 2);
let dy = Math.floor(y + Math.max(height - ph, 0) / 2);
let dw = Math.min(width, pw);
let dh = Math.min(height, ph);
// for iOS Safari
if (sx < 0) {
dx += sx * -1 * scaleX;
sw -= sx * -1 * scaleX;
dw -= sx * -1 * scaleX;
sx = 0;
}
if (sy < 0) {
dy += sy * -1 * scaleY;
sh -= sy * -1 * scaleY;
dh -= sy * -1 * scaleY;
sy = 0;
}
bitmap.addLoadListener(function() {
this.contents.blt(bitmap, sx, sy, sw / scaleX, sh / scaleY, dx, dy, dw, dh);
}.bind(this));
};
Window_StatusBase.prototype.exDrawActorSimpleStatus = function(actor, x, y, width) {
const lineHeight = this.lineHeight();
if (actorNameLH > -1) this.drawActorName(actor, x + actorNameX, y + lineHeight * actorNameLH, width - actorNameX);
if (actorLevelLH > -1 && $gameSwitches.value(102)) {
this.drawActorLevel(actor, x + actorLevelX, y + lineHeight * actorLevelLH);
}
if (actorIconLH > -1) this.drawActorIcons(actor, x + actorIconX, y + lineHeight * actorIconLH, width - actorIconX);
if (actorClassLH > -1) this.drawActorClass(actor, x + actorClassX, y + lineHeight * actorClassLH, width - actorClassX);
if (actorGaugeLH > -1) this.placeBasicGauges(actor, x + actorGaugeX, y + lineHeight * actorGaugeLH);
};
Window_MenuStatus.prototype.drawItemImage = function(index) {
const actor = this.actor(index);
const rect = this.itemRect(index);
this.changePaintOpacity(actor.isBattleMember());
// 立ち絵 or 顔グラフィック描画
let mPicture = ExMenuScreenBase.getImageName(actor.actorId());
if (mPicture && showStandingPicture) {
const width = rect.width - 2;
const height = rect.height - 2;
const x = rect.x + 1;
const y = rect.y + 1;
const sx = (Number(mPicture.x) + menuWindowPictureX) * -1;
const sy = (Number(mPicture.y) + menuWindowPictureY) * -1;
let scaleX = Number(mPicture.scaleX) / 100;
let scaleY = Number(mPicture.scaleY) / 100;
// 拡大率を適用
scaleX *= menuWindowPictureScale / 100;
scaleY *= menuWindowPictureScale / 100;
// ピンチ判定
if (ExMenuScreenBase.getHpRate(actor.actorId()) > Number(mPicture.pinchPercentage) || !mPicture.pinchImageName) {
// 通常
this.drawStandingPicture(String(mPicture.imageName), x, y, width, height, sx, sy, scaleX, scaleY);
} else {
// ピンチ
this.drawStandingPicture(String(mPicture.pinchImageName), x, y, width, height, sx, sy, scaleX, scaleY);
}
} else {
let width = ImageManager.faceWidth;
// 横幅が小さい場合、横幅に合わせてトリミング
if (rect.width - 2 < width) {
width = rect.width - 2;
}
const height = rect.height - 2;
const x = rect.x + rect.width - width - 1;
const y = rect.y + 1;
this.drawActorFace(actor, x, y, width, height);
}
this.changePaintOpacity(true);
};
Window_MenuStatus.prototype.drawItemStatus = function(index) {
const actor = this.actor(index);
const rect = this.itemRect(index);
const x = rect.x + 2;
const y = rect.y + 2;
const width = rect.width - 4;
// 画像キャッシュ判定
const mPicture = ExMenuScreenBase.getImageName(actor.actorId());
if (mPicture && showStandingPicture) {
let pictureName = null;
// ピンチ判定 (旧Ver.互換用)
if (ExMenuScreenBase.getHpRate(actor.actorId()) > Number(mPicture.pinchPercentage) || !mPicture.pinchImageName) {
pictureName = String(mPicture.imageName);
} else {
pictureName = String(mPicture.pinchImageName);
}
const bitmap = ImageManager.loadPicture(pictureName);
bitmap.addLoadListener(function() {
this.exDrawActorSimpleStatus(actor, x, y, width);
}.bind(this));
} else {
this.exDrawActorSimpleStatus(actor, x, y, width);
}
};
Window_MenuStatus.prototype.numVisibleRows = function() {
return numVisibleRows;
};
Window_MenuStatus.prototype.maxCols = function() {
return maxCols;
};
Window_MenuStatus.prototype.drawActorLevel = function(actor, x, y) {
this.changeTextColor(ColorManager.systemColor());
this.drawText(TextManager.levelA, x, y, 48);
this.resetTextColor();
this.drawText(actor.level, x + lvPadding, y, 36, "right");
};
Window_MenuStatus.prototype.refreshCursorForAll = function() {
const maxItems = this.maxItems();
if (maxItems > 0) {
const rect = this.itemRect(0);
// 独自に最大数を計算
let maxRectCnt = maxItems;
if (maxRectCnt > maxCols) {
maxRectCnt = Math.ceil(maxRectCnt / maxCols) * maxCols;
}
rect.enlarge(this.itemRect(maxRectCnt - 1));
this.setCursorRect(rect.x, rect.y, rect.width, rect.height);
} else {
this.setCursorRect(0, 0, 0, 0);
}
};
//-----------------------------------------------------------------------------
// Window_MenuHelp
//
function Window_MenuHelp() {
this.initialize(...arguments);
}
Window_MenuHelp.prototype = Object.create(Window_Base.prototype);
Window_MenuHelp.prototype.constructor = Window_MenuHelp;
Window_MenuHelp.prototype.initialize = function(rect) {
Window_Base.prototype.initialize.call(this, rect);
this.refresh();
};
Window_MenuHelp.prototype.setText = function(text) {
this._text = text;
this.refresh();
};
Window_MenuHelp.prototype.clear = function() {
this.setText("");
};
Window_MenuHelp.prototype.refresh = function() {
this.contents.clear();
this.contents.fontSize = this.getFontSize();
// マップ名
this.drawLeftBlock();
// プレイ時間
this.drawRightBlock();
// 所持金
this.drawCurrency();
// メニューヘルプ
this.drawMenuHelp();
this.contents.fontSize = $gameSystem.mainFontSize();
};
Window_MenuHelp.prototype.getFontSize = function() {
return !leftBlockLabel && !rightBlockLabel ? $gameSystem.mainFontSize() : menuHelpWindowFontSize;
};
Window_MenuHelp.prototype.drawLeftBlock = function() {
if (!leftBlockLabel) return;
const y = -6;
const oneThirdWidth = Math.floor(this.innerWidth / 3);
this.changeTextColor(this.systemColor());
this.drawText(leftBlockLabel, 0, y, this.contents.measureTextWidth(leftBlockLabel), leftBlockAlign);
this.resetTextColor();
this.drawText(eval(leftBlockValue), this.contents.measureTextWidth(leftBlockLabel), y, oneThirdWidth * 1.5 - this.contents.measureTextWidth(leftBlockLabel), leftBlockAlign);
};
Window_MenuHelp.prototype.drawRightBlock = function() {
if (!rightBlockLabel) return;
const y = -6;
const oneThirdWidth = Math.floor(this.innerWidth / 3);
this.changeTextColor(this.systemColor());
this.drawText(rightBlockLabel, oneThirdWidth * 1.5, y, this.contents.measureTextWidth(rightBlockLabel), rightBlockAlign);
this.resetTextColor();
this.drawText(eval(rightBlockValue), this.contents.measureTextWidth(rightBlockLabel) + oneThirdWidth * 1.5, y, oneThirdWidth * 1.5 - this.contents.measureTextWidth(rightBlockLabel), rightBlockAlign);
};
Window_MenuHelp.prototype.drawCurrency = function() {
const y = !leftBlockLabel && !rightBlockLabel ? 0 : 24;
const oneThirdWidth = Math.floor(this.innerWidth / 3);
if (currencyWindowPosition == "helpWindowRightBottom") {
// 所持金の表示位置が「ヘルプウィンドウの右下」の場合、所持金を描画
const currencyUnit = TextManager.currencyUnit;
this.drawCurrencyValue($gameParty.gold(), currencyUnit, oneThirdWidth * 1.5, y, oneThirdWidth * 1.5);
} else {
// それ以外の場合、独自の項目を描画
if (!rightBottomBlockLabel) return;
this.changeTextColor(this.systemColor());
this.drawText(rightBottomBlockLabel, oneThirdWidth * 1.5, y, this.contents.measureTextWidth(rightBottomBlockLabel), rightBottomBlockAlign);
this.resetTextColor();
this.drawText(eval(rightBottomBlockValue), this.contents.measureTextWidth(rightBottomBlockLabel) + oneThirdWidth * 1.5, y, oneThirdWidth * 1.5 - this.contents.measureTextWidth(rightBottomBlockLabel), rightBottomBlockAlign);
}
};
Window_MenuHelp.prototype.drawMenuHelp = function() {
const y = !leftBlockLabel && !rightBlockLabel ? 0 : 24;
const oneThirdWidth = Math.floor(this.innerWidth / 3);
if (leftBottomBlockLabel != "") {
// 左下に独自の項目を表示する場合 (v1.4.0)
this.changeTextColor(this.systemColor());
this.drawText(leftBottomBlockLabel, 0, y, this.contents.measureTextWidth(leftBottomBlockLabel), leftBottomBlockAlign);
this.resetTextColor();
this.drawText(eval(leftBottomBlockValue), this.contents.measureTextWidth(leftBottomBlockLabel), y, oneThirdWidth * 1.5 - this.contents.measureTextWidth(leftBottomBlockLabel), leftBottomBlockAlign);
} else {
// メニューヘルプを表示
this.resetTextColor();
this.drawText(this._text ? this._text : "", 0, y, this.innerWidth - oneThirdWidth * 1.5, leftBottomBlockAlign);
}
};
// ゲージ幅調整機能 (v1.3.0)
const _Window_StatusBase_placeGauge = Window_StatusBase.prototype.placeGauge;
Window_StatusBase.prototype.placeGauge = function(actor, type, x, y) {
// メニュー画面トップおよび対象アクター選択画面のみ適用
if (this.constructor.name === "Window_MenuStatus" || this.constructor.name === "Window_MenuActor") {
const key = "actor%1-gauge-%2".format(actor.actorId(), type);
const sprite = this.createInnerSprite(key, Sprite_GaugeExMenuBase);
sprite.setup(actor, type);
sprite.move(x, y);
sprite.show();
} else {
_Window_StatusBase_placeGauge.apply(this, arguments);
}
};
//-----------------------------------------------------------------------------
// Sprite_GaugeExMenuBase
//
// ゲージ幅調整用のゲージスプライトを新規定義します。
function Sprite_GaugeExMenuBase() {
this.initialize(...arguments);
}
Sprite_GaugeExMenuBase.prototype = Object.create(Sprite_Gauge.prototype);
Sprite_GaugeExMenuBase.prototype.constructor = Sprite_GaugeExMenuBase;
Sprite_GaugeExMenuBase.prototype.bitmapWidth = function() {
return gaugeWidth;
};
})();