839 lines
29 KiB
JavaScript
839 lines
29 KiB
JavaScript
//=============================================================================
|
|
// RPG Maker MZ - IM_SceneMenu
|
|
//
|
|
// Copyright 2025 I'm moralist/min-pub.com All rights reserved.
|
|
// This source code or any portion thereof must not be
|
|
// reproduced or used without licensed in any manner whatsoever.
|
|
//=============================================================================
|
|
/*:
|
|
* @target MZ
|
|
* @plugindesc カスタムメニュープラグイン
|
|
* @author I'm moralist
|
|
* @base PluginCommonBase
|
|
* @base PluginUtils
|
|
* @base MPP_StateLevel
|
|
* @orderAfter PluginCommonBase
|
|
* @orderAfter SceneLewdStatus
|
|
* @orderAfter PluginUtils
|
|
* @orderAfter MPP_StateLevel
|
|
*
|
|
* @param actor
|
|
* @text アクター
|
|
* @desc スキル等表示アクター
|
|
* @type actor
|
|
* @default 0
|
|
*
|
|
* @param braveLevel
|
|
* @text 勇者レベル
|
|
* @desc エロステ値を管理する変数を指定して下さい。
|
|
* @type variable
|
|
* @default 0
|
|
*
|
|
* @param prostituteLevel
|
|
* @text 娼婦レベル
|
|
* @desc エロステ値を管理する変数を指定して下さい。
|
|
* @type variable
|
|
* @default 0
|
|
*
|
|
* @requiredAssets img/pictures/500System/minimap
|
|
* @requiredAssets img/system/im_menu/menu_effect
|
|
*
|
|
* @help IM_SceneMenu.js
|
|
*
|
|
* Version: 0.0.1
|
|
*
|
|
* カスタムメニュー画面プラグイン
|
|
*/
|
|
(() => {
|
|
"use strict";
|
|
|
|
const pluginName = "IM_SceneMenu";
|
|
const script = document.currentScript;
|
|
const param = PluginManagerEx.createParameter(script);
|
|
|
|
const MENU_TEXT_ITEM = "0900-020-n020-0";
|
|
const MENU_TEXT_SKILL = "0900-021-n021-0";
|
|
const MENU_TEXT_LEWD = "0900-022-n022-0";
|
|
const MENU_TEXT_STATE = "0900-023-n023-0";
|
|
const MENU_TEXT_MAP = "0900-034-n034-0";
|
|
const MENU_TEXT_OPTION = "0900-024-n024-0";
|
|
const MENU_TEXT_ALBUM = "0900-062-n062-0";
|
|
const MENU_TEXT_LOAD = "0900-025-n025-0";
|
|
const MENU_TEXT_SAVE = "0900-026-n026-0";
|
|
|
|
const MENU_TITLE_HP = "0900-027-n027-0";
|
|
const MENU_TITLE_MP = "0900-028-n028-0";
|
|
const MENU_TITLE_TP = "0900-029-n029-0";
|
|
const MENU_TITLE_BRAVE = "0900-030-n030-0";
|
|
const MENU_TITLE_PROSTITUTE = "0900-031-n031-0";
|
|
const MENU_TITLE_LV = "0900-033-n033-0";
|
|
|
|
const HELP_TEXT_CAUTION_ALBUM = "0900-063-n063-0";
|
|
|
|
const NOTICE_TEXT_ALBUM = "0900-067-n067-0";
|
|
|
|
//========================================================================
|
|
// クラス定義 (Window_CustomMenuCommand)
|
|
//========================================================================
|
|
class Window_CustomMenuCommand extends Window_Command {
|
|
constructor() {
|
|
super(...arguments);
|
|
|
|
this._lastCommandSymbol = null;
|
|
this.selectLast();
|
|
this._canRepeat = false;
|
|
}
|
|
|
|
areMainCommandsEnabled() {
|
|
return $gameParty.exists();
|
|
}
|
|
|
|
makeCommandList() {
|
|
const enabled = this.areMainCommandsEnabled()
|
|
this.addCommand(TextResource.getText(MENU_TEXT_ITEM), "item", enabled);
|
|
this.addCommand(TextResource.getText(MENU_TEXT_SKILL), "skill", enabled);
|
|
this.addCommand(TextResource.getText(MENU_TEXT_LEWD), "lewdStatus", !!SceneLewdStatus);
|
|
this.addCommand(TextResource.getText(MENU_TEXT_STATE), "badState", enabled);
|
|
this.addCommand(TextResource.getText(MENU_TEXT_MAP), "map", enabled);
|
|
this.addCommand(TextResource.getText(MENU_TEXT_OPTION), "options", enabled);
|
|
this.addCommand(TextResource.getText(MENU_TEXT_ALBUM), "album", enabled);
|
|
this.addCommand(TextResource.getText(MENU_TEXT_LOAD), "load", enabled);
|
|
this.addCommand(TextResource.getText(MENU_TEXT_SAVE), "save", enabled);
|
|
}
|
|
|
|
drawItem(index) {
|
|
const rect = this.itemLineRect(index);
|
|
const align = this.itemTextAlign();
|
|
this.resetTextColor();
|
|
this.changePaintOpacity(this.isCommandEnabled(index));
|
|
|
|
this.contents.textColor = '#FFFFFF';
|
|
this.contents.fontFace = $gameSystem.mainFontFace();
|
|
this.contents.outlineWidth = 1;
|
|
this.contents.fontSize = 42;
|
|
|
|
this.drawText(this.commandName(index), rect.x, rect.y, rect.width, align);
|
|
}
|
|
|
|
initCommandPosition() {
|
|
this._lastCommandSymbol = null;
|
|
}
|
|
|
|
selectLast() {
|
|
this.selectSymbol(this._lastCommandSymbol);
|
|
}
|
|
|
|
select(index) {
|
|
super.select(index);
|
|
|
|
if (index >= 0 && this.maxItems() > 0 && !!this._helpWindow) {
|
|
this.callUpdateHelp();
|
|
}
|
|
}
|
|
|
|
updateHelp() {
|
|
super.updateHelp();
|
|
const index = this.index();
|
|
const command = this.commandSymbol(index);
|
|
if (command === 'album') {
|
|
this._helpWindow.setText(TextResource.getText(HELP_TEXT_CAUTION_ALBUM));
|
|
} else {
|
|
this._helpWindow.clear();
|
|
}
|
|
}
|
|
|
|
itemHeight() {
|
|
const spacing = this.rowSpacing();
|
|
return 70 + (spacing * 2);
|
|
}
|
|
};
|
|
|
|
//========================================================================
|
|
// クラス定義 (Window_ActorStates)
|
|
//========================================================================
|
|
class Window_ActorStates extends Window_Base {
|
|
constructor() {
|
|
super(...arguments);
|
|
this._actor = null;
|
|
}
|
|
|
|
setActor(actor) {
|
|
if (this._actor !== actor) {
|
|
this._actor = actor;
|
|
this.refresh();
|
|
}
|
|
}
|
|
|
|
refresh() {
|
|
this.paint();
|
|
}
|
|
|
|
paint() {
|
|
const actor = this._actor;
|
|
const lineHeight = this.lineHeight();
|
|
|
|
const line1 = this.createLineBitmap();
|
|
line1.textColor = '#FFFFFF';
|
|
line1.fontFace = $gameSystem.mainFontFace();
|
|
line1.outlineWidth = 1;
|
|
line1.fontSize = 48;
|
|
line1.drawText(actor.name(), 0, 0, 320, lineHeight, 'left');
|
|
|
|
const hpGauge = this.createGaugeBitmap(400, TextResource.getText(MENU_TITLE_HP), actor.hp, actor.mhp, 10);
|
|
line1.blt(hpGauge, 0, 0, hpGauge.width, hpGauge.height, 323, 0);
|
|
|
|
const mpGauge = this.createGaugeBitmap(400, TextResource.getText(MENU_TITLE_MP), actor.mp, actor.mmp, 10);
|
|
line1.blt(mpGauge, 0, 0, mpGauge.width, mpGauge.height, 744, 0);
|
|
|
|
const line2 = this.createLineBitmap();
|
|
line2.textColor = '#BCBCBC';
|
|
line2.fontFace = $gameSystem.mainFontFace();
|
|
line2.outlineWidth = 1;
|
|
line2.fontSize = 48;
|
|
line2.drawText(actor.currentClass().name, 0, 0, 320, lineHeight, 'left');
|
|
|
|
const tpGauge = this.createGaugeBitmap(820, TextResource.getText(MENU_TITLE_TP), actor.tp, 100, 34, '#FFFFFF');
|
|
line2.blt(tpGauge, 0, 0, tpGauge.width, tpGauge.height, 323, 0);
|
|
|
|
const braveLevel = PluginUtils.getVariables(param.braveLevel);
|
|
const line3 = this.createLevelBitmap(MENU_TITLE_BRAVE, braveLevel);
|
|
|
|
const prostituteLevel = PluginUtils.getVariables(param.prostituteLevel) ?? 0;
|
|
const line4 = this.createLevelBitmap(MENU_TITLE_PROSTITUTE, prostituteLevel);
|
|
|
|
const Level = $gameActors.actor(1).level;
|
|
const line5 = this.createLevelBitmap(MENU_TITLE_LV, Level);
|
|
|
|
const contentSx = 78;
|
|
const contentSy = 68;
|
|
this.contents.blt(line1, 0, 0, line1.width, line1.height, contentSx, contentSy);
|
|
this.contents.blt(line2, 0, 0, line1.width, line1.height, contentSx, contentSy + (60 * 1));
|
|
this.contents.blt(line3, 0, 0, line1.width, line1.height, contentSx, contentSy + (60 * 2));
|
|
this.contents.blt(line4, 0, 0, line1.width, line1.height, contentSx, contentSy + (60 * 3));
|
|
this.contents.blt(line5, 0, 0, line1.width, line1.height, contentSx, contentSy + (60 * 4));
|
|
}
|
|
|
|
createLevelBitmap(label, level) {
|
|
const bitmap = this.createLineBitmap();
|
|
const lineHeight = this.lineHeight();
|
|
bitmap.textColor = '#FFFFFF';
|
|
bitmap.fontFace = $gameSystem.mainFontFace();
|
|
bitmap.outlineWidth = 1;
|
|
bitmap.fontSize = 42;
|
|
bitmap.drawText(`${TextResource.getText(label)}`, 744, 0, 280, lineHeight, 'left');
|
|
|
|
const braveLevel = PluginUtils.getVariables(param.braveLevel);
|
|
bitmap.fontFace = 'MPLUS1Code-Regular';
|
|
bitmap.drawText(`${level}`, 1024, 0, 120, lineHeight, 'right');
|
|
return bitmap;
|
|
}
|
|
|
|
createGaugeBitmap(width, title, value, max, gaugeHeight, titleColor = '#FFFFFF') {
|
|
const height = 58;
|
|
const bitmap = new Bitmap(width, height);
|
|
|
|
bitmap.fontFace = 'MPLUS1Code-Regular';
|
|
bitmap.textColor = '#FFFFFF';
|
|
bitmap.outlineWidth = 1;
|
|
bitmap.fontSize = 42;
|
|
|
|
const gaugeMaxWidth = width - 2;
|
|
|
|
// Gauge Frame
|
|
const gaugeSy = (gaugeHeight < (height - 6)) ? (height - gaugeHeight - 6) : 0;
|
|
bitmap.fillRect(0, gaugeSy, width, gaugeHeight, "rgba(0, 0, 0, 0.5)");
|
|
bitmap.fillRect(1, gaugeSy + 1, gaugeMaxWidth, gaugeHeight - 2, '#202020');
|
|
|
|
// Gauge Value
|
|
const percent = Number(value).clamp(0, max) / max;
|
|
const gaugeWidth = gaugeMaxWidth * percent;
|
|
bitmap.fillRect(1, gaugeSy + 1, gaugeWidth, gaugeHeight - 2, '#9F9F9F');
|
|
|
|
const digitWidth = this.calcDigitWidth(max);
|
|
|
|
// MAX
|
|
const maxSx = width - 4 - digitWidth;
|
|
bitmap.drawText(max, maxSx, 6, digitWidth, 52, 'right');
|
|
|
|
// Slash
|
|
const slashWidth = 64;
|
|
const slashSx = maxSx - slashWidth;
|
|
bitmap.drawText('/', slashSx, 6, slashWidth, 52, 'center');
|
|
|
|
// Value
|
|
const valueSx = slashSx - digitWidth;
|
|
bitmap.drawText(value, valueSx, 6, digitWidth, 52, 'right');
|
|
|
|
bitmap.textColor = titleColor;
|
|
|
|
// Title
|
|
const titleWidth = valueSx;
|
|
bitmap.drawText(title, 0, 6, titleWidth, 52, 'left');
|
|
|
|
return bitmap;
|
|
}
|
|
|
|
calcDigitWidth(value) {
|
|
const digit = String(value).length;
|
|
return digit * 21;
|
|
}
|
|
|
|
createLineBitmap() {
|
|
const width = 1144;
|
|
const height = this.lineHeight();
|
|
|
|
return new Bitmap(width, height);
|
|
}
|
|
|
|
lineHeight() {
|
|
return 60;
|
|
}
|
|
|
|
};
|
|
|
|
//========================================================================
|
|
// クラス定義 (Window_BadState)
|
|
//========================================================================
|
|
class Window_BadStates extends Window_Selectable {
|
|
constructor() {
|
|
super(...arguments);
|
|
}
|
|
|
|
setActor(actor) {
|
|
if (this._actor !== actor) {
|
|
this._actor = actor;
|
|
this.refresh();
|
|
}
|
|
}
|
|
|
|
maxCols() {
|
|
return 2;
|
|
}
|
|
|
|
colSpacing() {
|
|
return 20;
|
|
}
|
|
|
|
rowSpacing() {
|
|
return 20;
|
|
}
|
|
|
|
lineHeight() {
|
|
return 60 + (this.itemPadding() * 2);
|
|
}
|
|
|
|
maxItems() {
|
|
if (!!this._actor) {
|
|
return this._actor.states().length;
|
|
} else {
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
select(index) {
|
|
super.select(index);
|
|
|
|
if (this.maxItems() > 0 && !!this._helpWindow) {
|
|
this.callUpdateHelp();
|
|
}
|
|
}
|
|
|
|
updateHelp() {
|
|
super.updateHelp();
|
|
const index = this.index();
|
|
const states = this._actor.states();
|
|
const state = states[index];
|
|
|
|
if (!!state) {
|
|
const baseText = state.note;
|
|
// タグを除去
|
|
const regexp = /<([^<>:]+)(:?)([^>]*)>\n?/g;
|
|
const text = PluginUtils.splitText(baseText.replace(regexp, ""), 21, false).join('\n');
|
|
this._helpWindow.setText(text);
|
|
}
|
|
}
|
|
|
|
drawItemBackground() {
|
|
// nothing to do
|
|
}
|
|
|
|
drawItem(index) {
|
|
const rect = this.itemLineRect(index);
|
|
const states = this._actor.states();
|
|
const state = states[index];
|
|
|
|
const iconIndex = state.iconIndex;
|
|
const icon = this.createIconBitmap(iconIndex);
|
|
const iconSize = 50;
|
|
const iconSy = (rect.height - iconSize) / 2;
|
|
this.contents.blt(icon, 0, 0, icon.width, icon.height, rect.x, rect.y + iconSy, iconSize, iconSize);
|
|
|
|
this.contents.fontSize = 40;
|
|
|
|
const levelWidth = 100;
|
|
const levelSx = (rect.x + rect.width) - levelWidth;
|
|
const level = this._actor._stateLevels[state.id];
|
|
if (!!level) {
|
|
this.contents.drawText(`(${level})`, levelSx, rect.y, levelWidth, this.lineHeight(), 'right');
|
|
}
|
|
|
|
const nameSx = rect.x + 60;
|
|
const nameWidth = levelSx;
|
|
this.contents.drawText(state.name, nameSx, rect.y, nameWidth, this.lineHeight(), 'left');
|
|
}
|
|
|
|
createIconBitmap(iconIndex) {
|
|
const pw = ImageManager.iconWidth;
|
|
const ph = ImageManager.iconHeight;
|
|
|
|
const bitmap = new Bitmap(pw, ph);
|
|
if (iconIndex > 0) {
|
|
const iconSet = ImageManager.loadSystem("IconSet");
|
|
const sx = (iconIndex % 16) * pw;
|
|
const sy = Math.floor(iconIndex / 16) * ph;
|
|
|
|
bitmap.blt(iconSet, sx, sy, pw, ph, 0, 0);
|
|
}
|
|
return bitmap;
|
|
}
|
|
};
|
|
|
|
//========================================================================
|
|
// クラス定義 (Window_CustomSkillStatus)
|
|
//========================================================================
|
|
class Window_CustomSkillStatus extends Window_SkillStatus {
|
|
constructor(rect) {
|
|
super(...arguments);
|
|
}
|
|
|
|
lineHeight() {
|
|
return 52;
|
|
}
|
|
|
|
drawActorSimpleStatus(actor, x, y) {
|
|
const lineHeight = this.lineHeight();
|
|
|
|
const line1 = this.createLineBitmap();
|
|
line1.textColor = '#FFFFFF';
|
|
line1.fontFace = $gameSystem.mainFontFace();
|
|
line1.outlineWidth = 1;
|
|
line1.fontSize = 42;
|
|
line1.drawText(actor.name(), 0, 0, 300, lineHeight, 'left');
|
|
|
|
const hpGauge = this.createGaugeBitmap(400, TextResource.getText(MENU_TITLE_HP), actor.hp, actor.mhp, 10);
|
|
line1.blt(hpGauge, 0, 0, hpGauge.width, hpGauge.height, 300, 0);
|
|
|
|
const mpGauge = this.createGaugeBitmap(400, TextResource.getText(MENU_TITLE_MP), actor.mp, actor.mmp, 10);
|
|
line1.blt(mpGauge, 0, 0, mpGauge.width, mpGauge.height, 720, 0);
|
|
|
|
const line2 = this.createLineBitmap();
|
|
line2.textColor = '#BCBCBC';
|
|
line2.fontFace = $gameSystem.mainFontFace();
|
|
line2.outlineWidth = 1;
|
|
line2.fontSize = 42;
|
|
line2.drawText(actor.currentClass().name, 0, 0, 300, lineHeight, 'left');
|
|
|
|
const tpGauge = this.createGaugeBitmap(820, TextResource.getText(MENU_TITLE_TP), actor.tp, 100, 34, '#FFFFFF');
|
|
line2.blt(tpGauge, 0, 0, tpGauge.width, tpGauge.height, 300, 0);
|
|
|
|
const contentSx = 76;
|
|
const contentSy = 12;
|
|
this.contents.blt(line1, 0, 0, line1.width, line1.height, contentSx, contentSy);
|
|
this.contents.blt(line2, 0, 0, line1.width, line1.height, contentSx, contentSy + 58);
|
|
}
|
|
|
|
createLineBitmap() {
|
|
const width = 1144;
|
|
const height = this.lineHeight();
|
|
|
|
return new Bitmap(width, height);
|
|
}
|
|
|
|
createGaugeBitmap(width, title, value, max, gaugeHeight, titleColor = '#FFFFFF') {
|
|
const height = 52;
|
|
const bitmap = new Bitmap(width, height);
|
|
|
|
bitmap.fontFace = 'MPLUS1Code-Regular';
|
|
bitmap.textColor = '#FFFFFF';
|
|
bitmap.outlineWidth = 1;
|
|
bitmap.fontSize = 36;
|
|
|
|
const gaugeMaxWidth = width - 2;
|
|
|
|
// Gauge Frame
|
|
const gaugeSy = (gaugeHeight < (height - 6)) ? (height - gaugeHeight - 6) : 0;
|
|
bitmap.fillRect(0, gaugeSy, width, gaugeHeight, "rgba(0, 0, 0, 0.5)");
|
|
bitmap.fillRect(1, gaugeSy + 1, gaugeMaxWidth, gaugeHeight - 2, '#202020');
|
|
|
|
// Gauge Value
|
|
const percent = Number(value).clamp(0, max) / max;
|
|
const gaugeWidth = gaugeMaxWidth * percent;
|
|
bitmap.fillRect(1, gaugeSy + 1, gaugeWidth, gaugeHeight - 2, '#9F9F9F');
|
|
|
|
const digitWidth = this.calcDigitWidth(max);
|
|
|
|
// MAX
|
|
const maxSx = width - 4 - digitWidth;
|
|
bitmap.drawText(max, maxSx, 6, digitWidth, 52, 'right');
|
|
|
|
// Slash
|
|
const slashWidth = 64;
|
|
const slashSx = maxSx - slashWidth;
|
|
bitmap.drawText('/', slashSx, 6, slashWidth, 52, 'center');
|
|
|
|
// Value
|
|
const valueSx = slashSx - digitWidth;
|
|
bitmap.drawText(value, valueSx, 6, digitWidth, 52, 'right');
|
|
|
|
bitmap.textColor = titleColor;
|
|
|
|
// Title
|
|
const titleWidth = valueSx;
|
|
bitmap.drawText(title, 0, 6, titleWidth, 52, 'left');
|
|
|
|
return bitmap;
|
|
}
|
|
|
|
calcDigitWidth(value) {
|
|
const digit = String(value).length;
|
|
return digit * 21;
|
|
}
|
|
};
|
|
|
|
//========================================================================
|
|
// クラス定義 (Window_Notice)
|
|
//========================================================================
|
|
class Window_Notice extends Window_Base {
|
|
constructor(rect) {
|
|
super(...arguments);
|
|
|
|
this._label = "";
|
|
this._handlers = {};
|
|
}
|
|
|
|
setText(label) {
|
|
if (this._label !== label) {
|
|
this._label = label;
|
|
this.refresh();
|
|
}
|
|
}
|
|
|
|
clear() {
|
|
this.setText(null);
|
|
}
|
|
|
|
setOkHandler(method) {
|
|
this.setHandler('ok', method);
|
|
}
|
|
|
|
setCancelHandler(method) {
|
|
this.setHandler('cancel', method);
|
|
}
|
|
|
|
setHandler(symbol, method) {
|
|
this._handlers[symbol] = method;
|
|
}
|
|
|
|
isOpenAndActive() {
|
|
return this.isOpen() && this.visible && this.active;
|
|
}
|
|
|
|
refresh() {
|
|
const rect = this.baseTextRect();
|
|
this.contents.clear();
|
|
|
|
if (!!this._label && this._label !== "") {
|
|
const text = TextResource.getText(this._label);
|
|
this.contents.fontSize = 38;
|
|
const lineHeight = 56;
|
|
text.split('\n').forEach((line, index) => {
|
|
this.drawText(line, rect.x, rect.y + (index * lineHeight), rect.width, 'center');
|
|
});
|
|
}
|
|
}
|
|
|
|
isOkTriggered() {
|
|
return Input.isRepeated(InputClass.INPUT_CLASS_OK);
|
|
}
|
|
|
|
isCancelTriggered() {
|
|
return Input.isRepeated(InputClass.INPUT_CLASS_CANCEL);
|
|
}
|
|
|
|
callHandler(symbol) {
|
|
if (!!this._handlers[symbol]) {
|
|
this._handlers[symbol]();
|
|
}
|
|
}
|
|
|
|
processOk() {
|
|
SoundManager.playOk();
|
|
this.callHandler("ok");
|
|
this.close();
|
|
}
|
|
|
|
processCancel() {
|
|
SoundManager.playCancel();
|
|
this.callHandler("cancel");
|
|
this.close();
|
|
}
|
|
|
|
processHandling() {
|
|
if (this.isOpenAndActive()) {
|
|
if (!!this._handlers["ok"] && this.isOkTriggered()) {
|
|
this.processOk();
|
|
}
|
|
if (!!this._handlers["cancel"] && this.isCancelTriggered()) {
|
|
this.processCancel();
|
|
}
|
|
}
|
|
}
|
|
|
|
processTouch() {
|
|
if (this.isOpenAndActive()) {
|
|
if (TouchInput.isClicked()) {
|
|
this.processOk();
|
|
} else if (TouchInput.isCancelled()) {
|
|
this.processCancel();
|
|
}
|
|
}
|
|
}
|
|
|
|
update() {
|
|
this.processHandling();
|
|
this.processTouch();
|
|
super.update();
|
|
}
|
|
};
|
|
|
|
//========================================================================
|
|
// クラス定義 (Scene_CustomMenu)
|
|
//========================================================================
|
|
class Scene_CustomMenu extends Scene_MenuBase {
|
|
constructor() {
|
|
super(...arguments);
|
|
|
|
this._commandWindow = null;
|
|
this._actorStatesWindow = null;
|
|
this._badStatesWindow = null;
|
|
this._helpWindow = null; // create by base class
|
|
|
|
const targetActor = $gameActors.actor(param.actor);
|
|
$gameParty.setMenuActor(targetActor);
|
|
}
|
|
|
|
needsCancelButton() {
|
|
return false;
|
|
}
|
|
|
|
create() {
|
|
super.create();
|
|
|
|
const bitmap = new Bitmap(Graphics.width, Graphics.height);
|
|
bitmap.fillAll('#000000');
|
|
this._backSprite = new Sprite(bitmap);
|
|
this._backSprite.opacity = PluginUtils.percent(255, 60);
|
|
this.addChild(this._backSprite);
|
|
this._backSprite.hide();
|
|
|
|
ImageManager.loadPictureAsync('500System/minimap').then(minimapBitmap => {
|
|
this.minimapSprite = new Sprite(minimapBitmap);
|
|
this.addChild(this.minimapSprite);
|
|
this.minimapSprite.hide();
|
|
|
|
const x = (Graphics.width - minimapBitmap.width) / 2;
|
|
const y = (Graphics.height - minimapBitmap.height) / 2;
|
|
this.minimapSprite.move(x, y);
|
|
});
|
|
|
|
this.createHelpWindow();
|
|
this.createCommandWindow();
|
|
this.createActorStatesWindow();
|
|
this.createBadStatesWindow();
|
|
this.createAlbumNoticeWindow();
|
|
|
|
const actor = this.actor();
|
|
const sprite = new Sprite(ImageManager.loadSystem('im_menu/menu_effect'));
|
|
sprite.zIndex = 100;
|
|
sprite.visible = ((actor.tp / 100) * 100) > 75;
|
|
|
|
this.addChild(sprite);
|
|
}
|
|
|
|
helpWindowRect() {
|
|
return new Rectangle(20, 756, 570, 304);
|
|
}
|
|
|
|
commandWindowRect() {
|
|
return new Rectangle(20, 20, 570, 726);
|
|
}
|
|
|
|
createCommandWindow() {
|
|
const rect = this.commandWindowRect();
|
|
const commandWindow = new Window_CustomMenuCommand(rect);
|
|
commandWindow.initCommandPosition();
|
|
commandWindow.setHandler('item', this.commandItem.bind(this));
|
|
commandWindow.setHandler('skill', this.commandSkill.bind(this));
|
|
commandWindow.setHandler('lewdStatus', this.commandLewdStatus.bind(this));
|
|
commandWindow.setHandler('badState', this.commandBadState.bind(this));
|
|
commandWindow.setHandler('map', this.commandMap.bind(this));
|
|
commandWindow.setHandler('options', this.commandOptions.bind(this));
|
|
commandWindow.setHandler('album', this.commandAlbum.bind(this));
|
|
commandWindow.setHandler('load', this.commandLoad.bind(this));
|
|
commandWindow.setHandler('save', this.commandSave.bind(this));
|
|
commandWindow.setHandler("cancel", this.popScene.bind(this));
|
|
commandWindow.setHelpWindow(this._helpWindow);
|
|
|
|
this.addWindow(commandWindow);
|
|
this._commandWindow = commandWindow;
|
|
}
|
|
|
|
createActorStatesWindow() {
|
|
const rect = new Rectangle(600, 20, 1300, 520);
|
|
const actorStatesWindow = new Window_ActorStates(rect);
|
|
|
|
actorStatesWindow.setActor(this.actor());
|
|
|
|
this.addWindow(actorStatesWindow);
|
|
this._actorStatesWindow = actorStatesWindow;
|
|
}
|
|
|
|
createBadStatesWindow() {
|
|
const rect = new Rectangle(600, 550, 1300, 510);
|
|
const badStatesWindow = new Window_BadStates(rect);
|
|
badStatesWindow.deactivate();
|
|
badStatesWindow.setHelpWindow(this._helpWindow);
|
|
|
|
badStatesWindow.setActor(this.actor());
|
|
badStatesWindow.setHandler("cancel", this.onBadStatesCancel.bind(this));
|
|
|
|
this.addWindow(badStatesWindow);
|
|
this._badStatesWindow = badStatesWindow;
|
|
}
|
|
|
|
createAlbumNoticeWindow() {
|
|
const noticeWindowRect = new Rectangle(505, 295, 910, 490);
|
|
const noticeWindow = new Window_Notice(noticeWindowRect);
|
|
noticeWindow.setText(NOTICE_TEXT_ALBUM);
|
|
noticeWindow.setOkHandler(this.onOkAlbumNotice.bind(this));
|
|
noticeWindow.setCancelHandler(this.onCancelAlbumNotice.bind(this));
|
|
noticeWindow.close();
|
|
noticeWindow.hide();
|
|
|
|
this.addWindow(noticeWindow);
|
|
this._noticeWindow = noticeWindow;
|
|
}
|
|
|
|
onOkAlbumNotice() {
|
|
SceneManager.pop();
|
|
PluginUtils.fireCommonEvent(58); // 回想部屋に移動
|
|
}
|
|
|
|
onCancelAlbumNotice() {
|
|
this._noticeWindow.deactivate();
|
|
this._commandWindow.activate();
|
|
}
|
|
|
|
commandItem() {
|
|
SceneManager.push(Scene_Item);
|
|
}
|
|
|
|
commandSkill() {
|
|
SceneManager.push(Scene_Skill);
|
|
}
|
|
|
|
commandMap() {
|
|
this._backSprite.show();
|
|
this.minimapSprite.show();
|
|
}
|
|
|
|
commandOptions() {
|
|
SceneManager.push(Scene_Options);
|
|
}
|
|
|
|
commandAlbum() {
|
|
this._noticeWindow.show();
|
|
this._noticeWindow.open();
|
|
this._noticeWindow.activate();
|
|
}
|
|
|
|
commandLewdStatus() {
|
|
SceneManager.push(SceneLewdStatus);
|
|
}
|
|
|
|
commandBadState() {
|
|
this._badStatesWindow.activate();
|
|
this._badStatesWindow.select(0);
|
|
}
|
|
|
|
commandLoad() {
|
|
SceneManager.push(Scene_Load);
|
|
}
|
|
|
|
commandSave() {
|
|
SceneManager.push(Scene_Save);
|
|
}
|
|
|
|
onBadStatesCancel() {
|
|
this._badStatesWindow.deselect();
|
|
this._commandWindow.activate();
|
|
}
|
|
|
|
update() {
|
|
super.update();
|
|
|
|
if (this.minimapSprite?.visible) {
|
|
if (TouchInput.isCancelled() || Input.isTriggered('cancel')) {
|
|
SoundManager.playCancel();
|
|
this._backSprite.hide();
|
|
this.minimapSprite.hide();
|
|
this._commandWindow.activate();
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
|
|
//========================================================================
|
|
// コアスクリプト変更部 (Scene_Skill)
|
|
//========================================================================
|
|
const _Scene_Skill_prototype_createStatusWindow = Scene_Skill.prototype.createStatusWindow;
|
|
Scene_Skill.prototype.createStatusWindow = function() {
|
|
const rect = this.statusWindowRect();
|
|
this._statusWindow = new Window_CustomSkillStatus(rect);
|
|
this.addWindow(this._statusWindow);
|
|
};
|
|
|
|
const _Scene_Skill_prototype_needsPageButtons = Scene_Skill.prototype.needsPageButtons;
|
|
Scene_Skill.prototype.needsPageButtons = function() {
|
|
return false;
|
|
};
|
|
|
|
const _Scene_Skill_prototype_needsCancelButton = Scene_Skill.prototype.needsCancelButton;
|
|
Scene_Skill.prototype.needsCancelButton = function() {
|
|
return false;
|
|
};
|
|
|
|
//========================================================================
|
|
// コアスクリプト変更部 (Scene_Map)
|
|
//========================================================================
|
|
const _Scene_Map_prototype_callMenu = Scene_Map.prototype.callMenu;
|
|
Scene_Map.prototype.callMenu = function() {
|
|
SoundManager.playOk();
|
|
SceneManager.push(Scene_CustomMenu);
|
|
$gameTemp.clearDestination();
|
|
this._mapNameWindow.hide();
|
|
this._waitCount = 2;
|
|
};
|
|
|
|
//========================================================================
|
|
// コアスクリプト変更部 (Game_Interpreter)
|
|
//========================================================================
|
|
const _Game_Interpreter_prototype_command351 = Game_Interpreter.prototype.command351;
|
|
Game_Interpreter.prototype.command351 = function() {
|
|
if (!$gameParty.inBattle()) {
|
|
SceneManager.push(Scene_CustomMenu);
|
|
}
|
|
return true;
|
|
};
|
|
})();
|