generated from nhcarrigan/template
6631 lines
190 KiB
JavaScript
6631 lines
190 KiB
JavaScript
//=============================================================================
|
||
// rmmz_windows.js v1.4.4
|
||
//=============================================================================
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_Base
|
||
//
|
||
// The superclass of all windows within the game.
|
||
|
||
function Window_Base() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_Base.prototype = Object.create(Window.prototype);
|
||
Window_Base.prototype.constructor = Window_Base;
|
||
|
||
Window_Base.prototype.initialize = function(rect) {
|
||
Window.prototype.initialize.call(this);
|
||
this.loadWindowskin();
|
||
this.checkRectObject(rect);
|
||
this.move(rect.x, rect.y, rect.width, rect.height);
|
||
this.updatePadding();
|
||
this.updateBackOpacity();
|
||
this.updateTone();
|
||
this.createContents();
|
||
this._opening = false;
|
||
this._closing = false;
|
||
this._dimmerSprite = null;
|
||
};
|
||
|
||
Window_Base.prototype.destroy = function(options) {
|
||
this.destroyContents();
|
||
if (this._dimmerSprite) {
|
||
this._dimmerSprite.bitmap.destroy();
|
||
}
|
||
Window.prototype.destroy.call(this, options);
|
||
};
|
||
|
||
Window_Base.prototype.checkRectObject = function(rect) {
|
||
if (typeof rect !== "object" || !("x" in rect)) {
|
||
// Probably MV plugin is used
|
||
throw new Error("Argument must be a Rectangle");
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.lineHeight = function() {
|
||
return 36;
|
||
};
|
||
|
||
Window_Base.prototype.itemWidth = function() {
|
||
return this.innerWidth;
|
||
};
|
||
|
||
Window_Base.prototype.itemHeight = function() {
|
||
return this.lineHeight();
|
||
};
|
||
|
||
Window_Base.prototype.itemPadding = function() {
|
||
return 8;
|
||
};
|
||
|
||
Window_Base.prototype.baseTextRect = function() {
|
||
const rect = new Rectangle(0, 0, this.innerWidth, this.innerHeight);
|
||
rect.pad(-this.itemPadding(), 0);
|
||
return rect;
|
||
};
|
||
|
||
Window_Base.prototype.loadWindowskin = function() {
|
||
this.windowskin = ImageManager.loadSystem("Window");
|
||
};
|
||
|
||
Window_Base.prototype.updatePadding = function() {
|
||
this.padding = $gameSystem.windowPadding();
|
||
};
|
||
|
||
Window_Base.prototype.updateBackOpacity = function() {
|
||
this.backOpacity = $gameSystem.windowOpacity();
|
||
};
|
||
|
||
Window_Base.prototype.fittingHeight = function(numLines) {
|
||
return numLines * this.itemHeight() + $gameSystem.windowPadding() * 2;
|
||
};
|
||
|
||
Window_Base.prototype.updateTone = function() {
|
||
const tone = $gameSystem.windowTone();
|
||
this.setTone(tone[0], tone[1], tone[2]);
|
||
};
|
||
|
||
Window_Base.prototype.createContents = function() {
|
||
const width = this.contentsWidth();
|
||
const height = this.contentsHeight();
|
||
this.destroyContents();
|
||
this.contents = new Bitmap(width, height);
|
||
this.contentsBack = new Bitmap(width, height);
|
||
this.resetFontSettings();
|
||
};
|
||
|
||
Window_Base.prototype.destroyContents = function() {
|
||
if (this.contents) {
|
||
this.contents.destroy();
|
||
}
|
||
if (this.contentsBack) {
|
||
this.contentsBack.destroy();
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.contentsWidth = function() {
|
||
return this.innerWidth;
|
||
};
|
||
|
||
Window_Base.prototype.contentsHeight = function() {
|
||
return this.innerHeight;
|
||
};
|
||
|
||
Window_Base.prototype.resetFontSettings = function() {
|
||
this.contents.fontFace = $gameSystem.mainFontFace();
|
||
this.contents.fontSize = $gameSystem.mainFontSize();
|
||
this.resetTextColor();
|
||
};
|
||
|
||
Window_Base.prototype.resetTextColor = function() {
|
||
this.changeTextColor(ColorManager.normalColor());
|
||
this.changeOutlineColor(ColorManager.outlineColor());
|
||
};
|
||
|
||
Window_Base.prototype.update = function() {
|
||
Window.prototype.update.call(this);
|
||
this.updateTone();
|
||
this.updateOpen();
|
||
this.updateClose();
|
||
this.updateBackgroundDimmer();
|
||
};
|
||
|
||
Window_Base.prototype.updateOpen = function() {
|
||
if (this._opening) {
|
||
this.openness += 32;
|
||
if (this.isOpen()) {
|
||
this._opening = false;
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.updateClose = function() {
|
||
if (this._closing) {
|
||
this.openness -= 32;
|
||
if (this.isClosed()) {
|
||
this._closing = false;
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.open = function() {
|
||
if (!this.isOpen()) {
|
||
this._opening = true;
|
||
}
|
||
this._closing = false;
|
||
};
|
||
|
||
Window_Base.prototype.close = function() {
|
||
if (!this.isClosed()) {
|
||
this._closing = true;
|
||
}
|
||
this._opening = false;
|
||
};
|
||
|
||
Window_Base.prototype.isOpening = function() {
|
||
return this._opening;
|
||
};
|
||
|
||
Window_Base.prototype.isClosing = function() {
|
||
return this._closing;
|
||
};
|
||
|
||
Window_Base.prototype.show = function() {
|
||
this.visible = true;
|
||
};
|
||
|
||
Window_Base.prototype.hide = function() {
|
||
this.visible = false;
|
||
};
|
||
|
||
Window_Base.prototype.activate = function() {
|
||
this.active = true;
|
||
};
|
||
|
||
Window_Base.prototype.deactivate = function() {
|
||
this.active = false;
|
||
};
|
||
|
||
Window_Base.prototype.systemColor = function() {
|
||
return ColorManager.systemColor();
|
||
};
|
||
|
||
Window_Base.prototype.translucentOpacity = function() {
|
||
return 160;
|
||
};
|
||
|
||
Window_Base.prototype.changeTextColor = function(color) {
|
||
this.contents.textColor = color;
|
||
};
|
||
|
||
Window_Base.prototype.changeOutlineColor = function(color) {
|
||
this.contents.outlineColor = color;
|
||
};
|
||
|
||
Window_Base.prototype.changePaintOpacity = function(enabled) {
|
||
this.contents.paintOpacity = enabled ? 255 : this.translucentOpacity();
|
||
};
|
||
|
||
Window_Base.prototype.drawRect = function(x, y, width, height) {
|
||
const outlineColor = this.contents.outlineColor;
|
||
const mainColor = this.contents.textColor;
|
||
this.contents.fillRect(x, y, width, height, outlineColor);
|
||
this.contents.fillRect(x + 1, y + 1, width - 2, height - 2, mainColor);
|
||
};
|
||
|
||
Window_Base.prototype.drawText = function(text, x, y, maxWidth, align) {
|
||
this.contents.drawText(text, x, y, maxWidth, this.lineHeight(), align);
|
||
};
|
||
|
||
Window_Base.prototype.textWidth = function(text) {
|
||
return this.contents.measureTextWidth(text);
|
||
};
|
||
|
||
Window_Base.prototype.drawTextEx = function(text, x, y, width) {
|
||
this.resetFontSettings();
|
||
const textState = this.createTextState(text, x, y, width);
|
||
this.processAllText(textState);
|
||
return textState.outputWidth;
|
||
};
|
||
|
||
Window_Base.prototype.textSizeEx = function(text) {
|
||
this.resetFontSettings();
|
||
const textState = this.createTextState(text, 0, 0, 0);
|
||
textState.drawing = false;
|
||
this.processAllText(textState);
|
||
return { width: textState.outputWidth, height: textState.outputHeight };
|
||
};
|
||
|
||
Window_Base.prototype.createTextState = function(text, x, y, width) {
|
||
const rtl = Utils.containsArabic(text);
|
||
const textState = {};
|
||
textState.text = this.convertEscapeCharacters(text);
|
||
textState.index = 0;
|
||
textState.x = rtl ? x + width : x;
|
||
textState.y = y;
|
||
textState.width = width;
|
||
textState.height = this.calcTextHeight(textState);
|
||
textState.startX = textState.x;
|
||
textState.startY = textState.y;
|
||
textState.rtl = rtl;
|
||
textState.buffer = this.createTextBuffer(rtl);
|
||
textState.drawing = true;
|
||
textState.outputWidth = 0;
|
||
textState.outputHeight = 0;
|
||
return textState;
|
||
};
|
||
|
||
Window_Base.prototype.processAllText = function(textState) {
|
||
while (textState.index < textState.text.length) {
|
||
this.processCharacter(textState);
|
||
}
|
||
this.flushTextState(textState);
|
||
};
|
||
|
||
Window_Base.prototype.flushTextState = function(textState) {
|
||
const text = textState.buffer;
|
||
const rtl = textState.rtl;
|
||
const width = this.textWidth(text);
|
||
const height = textState.height;
|
||
const x = rtl ? textState.x - width : textState.x;
|
||
const y = textState.y;
|
||
if (textState.drawing) {
|
||
this.contents.drawText(text, x, y, width, height);
|
||
}
|
||
textState.x += rtl ? -width : width;
|
||
textState.buffer = this.createTextBuffer(rtl);
|
||
const outputWidth = Math.abs(textState.x - textState.startX);
|
||
if (textState.outputWidth < outputWidth) {
|
||
textState.outputWidth = outputWidth;
|
||
}
|
||
textState.outputHeight = y - textState.startY + height;
|
||
};
|
||
|
||
Window_Base.prototype.createTextBuffer = function(rtl) {
|
||
// U+202B: RIGHT-TO-LEFT EMBEDDING
|
||
return rtl ? "\u202B" : "";
|
||
};
|
||
|
||
Window_Base.prototype.convertEscapeCharacters = function(text) {
|
||
/* eslint no-control-regex: 0 */
|
||
text = text.replace(/\\/g, "\x1b");
|
||
text = text.replace(/\x1b\x1b/g, "\\");
|
||
text = text.replace(/\x1bV\[(\d+)\]/gi, (_, p1) =>
|
||
$gameVariables.value(parseInt(p1))
|
||
);
|
||
text = text.replace(/\x1bV\[(\d+)\]/gi, (_, p1) =>
|
||
$gameVariables.value(parseInt(p1))
|
||
);
|
||
text = text.replace(/\x1bN\[(\d+)\]/gi, (_, p1) =>
|
||
this.actorName(parseInt(p1))
|
||
);
|
||
text = text.replace(/\x1bP\[(\d+)\]/gi, (_, p1) =>
|
||
this.partyMemberName(parseInt(p1))
|
||
);
|
||
text = text.replace(/\x1bG/gi, TextManager.currencyUnit);
|
||
return text;
|
||
};
|
||
|
||
Window_Base.prototype.actorName = function(n) {
|
||
const actor = n >= 1 ? $gameActors.actor(n) : null;
|
||
return actor ? actor.name() : "";
|
||
};
|
||
|
||
Window_Base.prototype.partyMemberName = function(n) {
|
||
const actor = n >= 1 ? $gameParty.members()[n - 1] : null;
|
||
return actor ? actor.name() : "";
|
||
};
|
||
|
||
Window_Base.prototype.processCharacter = function(textState) {
|
||
const c = textState.text[textState.index++];
|
||
if (c.charCodeAt(0) < 0x20) {
|
||
this.flushTextState(textState);
|
||
this.processControlCharacter(textState, c);
|
||
} else {
|
||
textState.buffer += c;
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.processControlCharacter = function(textState, c) {
|
||
if (c === "\n") {
|
||
this.processNewLine(textState);
|
||
}
|
||
if (c === "\x1b") {
|
||
const code = this.obtainEscapeCode(textState);
|
||
this.processEscapeCharacter(code, textState);
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.processNewLine = function(textState) {
|
||
textState.x = textState.startX;
|
||
textState.y += textState.height;
|
||
textState.height = this.calcTextHeight(textState);
|
||
};
|
||
|
||
Window_Base.prototype.obtainEscapeCode = function(textState) {
|
||
const regExp = /^[$.|^!><{}\\]|^[A-Z]+/i;
|
||
const arr = regExp.exec(textState.text.slice(textState.index));
|
||
if (arr) {
|
||
textState.index += arr[0].length;
|
||
return arr[0].toUpperCase();
|
||
} else {
|
||
return "";
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.obtainEscapeParam = function(textState) {
|
||
const regExp = /^\[\d+\]/;
|
||
const arr = regExp.exec(textState.text.slice(textState.index));
|
||
if (arr) {
|
||
textState.index += arr[0].length;
|
||
return parseInt(arr[0].slice(1));
|
||
} else {
|
||
return "";
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.processEscapeCharacter = function(code, textState) {
|
||
switch (code) {
|
||
case "C":
|
||
this.processColorChange(this.obtainEscapeParam(textState));
|
||
break;
|
||
case "I":
|
||
this.processDrawIcon(this.obtainEscapeParam(textState), textState);
|
||
break;
|
||
case "PX":
|
||
textState.x = this.obtainEscapeParam(textState);
|
||
break;
|
||
case "PY":
|
||
textState.y = this.obtainEscapeParam(textState);
|
||
break;
|
||
case "FS":
|
||
this.contents.fontSize = this.obtainEscapeParam(textState);
|
||
break;
|
||
case "{":
|
||
this.makeFontBigger();
|
||
break;
|
||
case "}":
|
||
this.makeFontSmaller();
|
||
break;
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.processColorChange = function(colorIndex) {
|
||
this.changeTextColor(ColorManager.textColor(colorIndex));
|
||
};
|
||
|
||
Window_Base.prototype.processDrawIcon = function(iconIndex, textState) {
|
||
if (textState.drawing) {
|
||
this.drawIcon(iconIndex, textState.x + 2, textState.y + 2);
|
||
}
|
||
textState.x += ImageManager.iconWidth + 4;
|
||
};
|
||
|
||
Window_Base.prototype.makeFontBigger = function() {
|
||
if (this.contents.fontSize <= 96) {
|
||
this.contents.fontSize += 12;
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.makeFontSmaller = function() {
|
||
if (this.contents.fontSize >= 24) {
|
||
this.contents.fontSize -= 12;
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.calcTextHeight = function(textState) {
|
||
const lineSpacing = this.lineHeight() - $gameSystem.mainFontSize();
|
||
const lastFontSize = this.contents.fontSize;
|
||
const lines = textState.text.slice(textState.index).split("\n");
|
||
const textHeight = this.maxFontSizeInLine(lines[0]) + lineSpacing;
|
||
this.contents.fontSize = lastFontSize;
|
||
return textHeight;
|
||
};
|
||
|
||
Window_Base.prototype.maxFontSizeInLine = function(line) {
|
||
let maxFontSize = this.contents.fontSize;
|
||
const regExp = /\x1b({|}|FS)(\[(\d+)])?/gi;
|
||
for (;;) {
|
||
const array = regExp.exec(line);
|
||
if (!array) {
|
||
break;
|
||
}
|
||
const code = String(array[1]).toUpperCase();
|
||
if (code === "{") {
|
||
this.makeFontBigger();
|
||
} else if (code === "}") {
|
||
this.makeFontSmaller();
|
||
} else if (code === "FS") {
|
||
this.contents.fontSize = parseInt(array[3]);
|
||
}
|
||
if (this.contents.fontSize > maxFontSize) {
|
||
maxFontSize = this.contents.fontSize;
|
||
}
|
||
}
|
||
return maxFontSize;
|
||
};
|
||
|
||
Window_Base.prototype.drawIcon = function(iconIndex, x, y) {
|
||
const bitmap = ImageManager.loadSystem("IconSet");
|
||
const pw = ImageManager.iconWidth;
|
||
const ph = ImageManager.iconHeight;
|
||
const sx = (iconIndex % 16) * pw;
|
||
const sy = Math.floor(iconIndex / 16) * ph;
|
||
this.contents.blt(bitmap, sx, sy, pw, ph, x, y);
|
||
};
|
||
|
||
// prettier-ignore
|
||
Window_Base.prototype.drawFace = function(
|
||
faceName, faceIndex, x, y, width, height
|
||
) {
|
||
width = width || ImageManager.faceWidth;
|
||
height = height || ImageManager.faceHeight;
|
||
const bitmap = ImageManager.loadFace(faceName);
|
||
const pw = ImageManager.faceWidth;
|
||
const ph = ImageManager.faceHeight;
|
||
const sw = Math.min(width, pw);
|
||
const sh = Math.min(height, ph);
|
||
const dx = Math.floor(x + Math.max(width - pw, 0) / 2);
|
||
const dy = Math.floor(y + Math.max(height - ph, 0) / 2);
|
||
const sx = Math.floor((faceIndex % 4) * pw + (pw - sw) / 2);
|
||
const sy = Math.floor(Math.floor(faceIndex / 4) * ph + (ph - sh) / 2);
|
||
this.contents.blt(bitmap, sx, sy, sw, sh, dx, dy);
|
||
};
|
||
|
||
// prettier-ignore
|
||
Window_Base.prototype.drawCharacter = function(
|
||
characterName, characterIndex, x, y
|
||
) {
|
||
const bitmap = ImageManager.loadCharacter(characterName);
|
||
const big = ImageManager.isBigCharacter(characterName);
|
||
const pw = bitmap.width / (big ? 3 : 12);
|
||
const ph = bitmap.height / (big ? 4 : 8);
|
||
const n = big ? 0: characterIndex;
|
||
const sx = ((n % 4) * 3 + 1) * pw;
|
||
const sy = Math.floor(n / 4) * 4 * ph;
|
||
this.contents.blt(bitmap, sx, sy, pw, ph, x - pw / 2, y - ph);
|
||
};
|
||
|
||
Window_Base.prototype.drawItemName = function(item, x, y, width) {
|
||
if (item) {
|
||
const iconY = y + (this.lineHeight() - ImageManager.iconHeight) / 2;
|
||
const textMargin = ImageManager.iconWidth + 4;
|
||
const itemWidth = Math.max(0, width - textMargin);
|
||
this.resetTextColor();
|
||
this.drawIcon(item.iconIndex, x, iconY);
|
||
this.drawText(item.name, x + textMargin, y, itemWidth);
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.drawCurrencyValue = function(value, unit, x, y, width) {
|
||
const unitWidth = Math.min(80, this.textWidth(unit));
|
||
this.resetTextColor();
|
||
this.drawText(value, x, y, width - unitWidth - 6, "right");
|
||
this.changeTextColor(ColorManager.systemColor());
|
||
this.drawText(unit, x + width - unitWidth, y, unitWidth, "right");
|
||
};
|
||
|
||
Window_Base.prototype.setBackgroundType = function(type) {
|
||
if (type === 0) {
|
||
this.opacity = 255;
|
||
} else {
|
||
this.opacity = 0;
|
||
}
|
||
if (type === 1) {
|
||
this.showBackgroundDimmer();
|
||
} else {
|
||
this.hideBackgroundDimmer();
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.showBackgroundDimmer = function() {
|
||
if (!this._dimmerSprite) {
|
||
this.createDimmerSprite();
|
||
}
|
||
const bitmap = this._dimmerSprite.bitmap;
|
||
if (bitmap.width !== this.width || bitmap.height !== this.height) {
|
||
this.refreshDimmerBitmap();
|
||
}
|
||
this._dimmerSprite.visible = true;
|
||
this.updateBackgroundDimmer();
|
||
};
|
||
|
||
Window_Base.prototype.createDimmerSprite = function() {
|
||
this._dimmerSprite = new Sprite();
|
||
this._dimmerSprite.bitmap = new Bitmap(0, 0);
|
||
this._dimmerSprite.x = -4;
|
||
this.addChildToBack(this._dimmerSprite);
|
||
};
|
||
|
||
Window_Base.prototype.hideBackgroundDimmer = function() {
|
||
if (this._dimmerSprite) {
|
||
this._dimmerSprite.visible = false;
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.updateBackgroundDimmer = function() {
|
||
if (this._dimmerSprite) {
|
||
this._dimmerSprite.opacity = this.openness;
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.refreshDimmerBitmap = function() {
|
||
if (this._dimmerSprite) {
|
||
const bitmap = this._dimmerSprite.bitmap;
|
||
const w = this.width > 0 ? this.width + 8 : 0;
|
||
const h = this.height;
|
||
const m = this.padding;
|
||
const c1 = ColorManager.dimColor1();
|
||
const c2 = ColorManager.dimColor2();
|
||
bitmap.resize(w, h);
|
||
bitmap.gradientFillRect(0, 0, w, m, c2, c1, true);
|
||
bitmap.fillRect(0, m, w, h - m * 2, c1);
|
||
bitmap.gradientFillRect(0, h - m, w, m, c1, c2, true);
|
||
this._dimmerSprite.setFrame(0, 0, w, h);
|
||
}
|
||
};
|
||
|
||
Window_Base.prototype.playCursorSound = function() {
|
||
SoundManager.playCursor();
|
||
};
|
||
|
||
Window_Base.prototype.playOkSound = function() {
|
||
SoundManager.playOk();
|
||
};
|
||
|
||
Window_Base.prototype.playBuzzerSound = function() {
|
||
SoundManager.playBuzzer();
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_Scrollable
|
||
//
|
||
// The window class with scroll functions.
|
||
|
||
function Window_Scrollable() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_Scrollable.prototype = Object.create(Window_Base.prototype);
|
||
Window_Scrollable.prototype.constructor = Window_Scrollable;
|
||
|
||
Window_Scrollable.prototype.initialize = function(rect) {
|
||
Window_Base.prototype.initialize.call(this, rect);
|
||
this._scrollX = 0;
|
||
this._scrollY = 0;
|
||
this._scrollBaseX = 0;
|
||
this._scrollBaseY = 0;
|
||
this.clearScrollStatus();
|
||
};
|
||
|
||
Window_Scrollable.prototype.clearScrollStatus = function() {
|
||
this._scrollTargetX = 0;
|
||
this._scrollTargetY = 0;
|
||
this._scrollDuration = 0;
|
||
this._scrollAccelX = 0;
|
||
this._scrollAccelY = 0;
|
||
this._scrollTouching = false;
|
||
this._scrollLastTouchX = 0;
|
||
this._scrollLastTouchY = 0;
|
||
this._scrollLastCursorVisible = false;
|
||
};
|
||
|
||
Window_Scrollable.prototype.scrollX = function() {
|
||
return this._scrollX;
|
||
};
|
||
|
||
Window_Scrollable.prototype.scrollY = function() {
|
||
return this._scrollY;
|
||
};
|
||
|
||
Window_Scrollable.prototype.scrollBaseX = function() {
|
||
return this._scrollBaseX;
|
||
};
|
||
|
||
Window_Scrollable.prototype.scrollBaseY = function() {
|
||
return this._scrollBaseY;
|
||
};
|
||
|
||
Window_Scrollable.prototype.scrollTo = function(x, y) {
|
||
const scrollX = x.clamp(0, this.maxScrollX());
|
||
const scrollY = y.clamp(0, this.maxScrollY());
|
||
if (this._scrollX !== scrollX || this._scrollY !== scrollY) {
|
||
this._scrollX = scrollX;
|
||
this._scrollY = scrollY;
|
||
this.updateOrigin();
|
||
}
|
||
};
|
||
|
||
Window_Scrollable.prototype.scrollBy = function(x, y) {
|
||
this.scrollTo(this._scrollX + x, this._scrollY + y);
|
||
};
|
||
|
||
Window_Scrollable.prototype.smoothScrollTo = function(x, y) {
|
||
this._scrollTargetX = x.clamp(0, this.maxScrollX());
|
||
this._scrollTargetY = y.clamp(0, this.maxScrollY());
|
||
this._scrollDuration = Input.keyRepeatInterval;
|
||
};
|
||
|
||
Window_Scrollable.prototype.smoothScrollBy = function(x, y) {
|
||
if (this._scrollDuration === 0) {
|
||
this._scrollTargetX = this.scrollX();
|
||
this._scrollTargetY = this.scrollY();
|
||
}
|
||
this.smoothScrollTo(this._scrollTargetX + x, this._scrollTargetY + y);
|
||
};
|
||
|
||
Window_Scrollable.prototype.setScrollAccel = function(x, y) {
|
||
this._scrollAccelX = x;
|
||
this._scrollAccelY = y;
|
||
};
|
||
|
||
Window_Scrollable.prototype.overallWidth = function() {
|
||
return this.innerWidth;
|
||
};
|
||
|
||
Window_Scrollable.prototype.overallHeight = function() {
|
||
return this.innerHeight;
|
||
};
|
||
|
||
Window_Scrollable.prototype.maxScrollX = function() {
|
||
return Math.max(0, this.overallWidth() - this.innerWidth);
|
||
};
|
||
|
||
Window_Scrollable.prototype.maxScrollY = function() {
|
||
return Math.max(0, this.overallHeight() - this.innerHeight);
|
||
};
|
||
|
||
Window_Scrollable.prototype.scrollBlockWidth = function() {
|
||
return this.itemWidth();
|
||
};
|
||
|
||
Window_Scrollable.prototype.scrollBlockHeight = function() {
|
||
return this.itemHeight();
|
||
};
|
||
|
||
Window_Scrollable.prototype.smoothScrollDown = function(n) {
|
||
this.smoothScrollBy(0, this.itemHeight() * n);
|
||
};
|
||
|
||
Window_Scrollable.prototype.smoothScrollUp = function(n) {
|
||
this.smoothScrollBy(0, -this.itemHeight() * n);
|
||
};
|
||
|
||
Window_Scrollable.prototype.update = function() {
|
||
Window_Base.prototype.update.call(this);
|
||
this.processWheelScroll();
|
||
this.processTouchScroll();
|
||
this.updateSmoothScroll();
|
||
this.updateScrollAccel();
|
||
this.updateArrows();
|
||
this.updateOrigin();
|
||
};
|
||
|
||
Window_Scrollable.prototype.processWheelScroll = function() {
|
||
if (this.isWheelScrollEnabled() && this.isTouchedInsideFrame()) {
|
||
const threshold = 20;
|
||
if (TouchInput.wheelY >= threshold) {
|
||
this.smoothScrollDown(1);
|
||
}
|
||
if (TouchInput.wheelY <= -threshold) {
|
||
this.smoothScrollUp(1);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Scrollable.prototype.processTouchScroll = function() {
|
||
if (this.isTouchScrollEnabled()) {
|
||
if (TouchInput.isTriggered() && this.isTouchedInsideFrame()) {
|
||
this.onTouchScrollStart();
|
||
}
|
||
if (this._scrollTouching) {
|
||
if (TouchInput.isReleased()) {
|
||
this.onTouchScrollEnd();
|
||
} else if (TouchInput.isMoved()) {
|
||
this.onTouchScroll();
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Scrollable.prototype.isWheelScrollEnabled = function() {
|
||
return this.isScrollEnabled();
|
||
};
|
||
|
||
Window_Scrollable.prototype.isTouchScrollEnabled = function() {
|
||
return this.isScrollEnabled();
|
||
};
|
||
|
||
Window_Scrollable.prototype.isScrollEnabled = function() {
|
||
return true;
|
||
};
|
||
|
||
Window_Scrollable.prototype.isTouchedInsideFrame = function() {
|
||
const touchPos = new Point(TouchInput.x, TouchInput.y);
|
||
const localPos = this.worldTransform.applyInverse(touchPos);
|
||
return this.innerRect.contains(localPos.x, localPos.y);
|
||
};
|
||
|
||
Window_Scrollable.prototype.onTouchScrollStart = function() {
|
||
this._scrollTouching = true;
|
||
this._scrollLastTouchX = TouchInput.x;
|
||
this._scrollLastTouchY = TouchInput.y;
|
||
this._scrollLastCursorVisible = this.cursorVisible;
|
||
this.setScrollAccel(0, 0);
|
||
};
|
||
|
||
Window_Scrollable.prototype.onTouchScroll = function() {
|
||
const accelX = this._scrollLastTouchX - TouchInput.x;
|
||
const accelY = this._scrollLastTouchY - TouchInput.y;
|
||
this.setScrollAccel(accelX, accelY);
|
||
this._scrollLastTouchX = TouchInput.x;
|
||
this._scrollLastTouchY = TouchInput.y;
|
||
this.cursorVisible = false;
|
||
};
|
||
|
||
Window_Scrollable.prototype.onTouchScrollEnd = function() {
|
||
this._scrollTouching = false;
|
||
this.cursorVisible = this._scrollLastCursorVisible;
|
||
};
|
||
|
||
Window_Scrollable.prototype.updateSmoothScroll = function() {
|
||
if (this._scrollDuration > 0) {
|
||
const d = this._scrollDuration;
|
||
const deltaX = (this._scrollTargetX - this._scrollX) / d;
|
||
const deltaY = (this._scrollTargetY - this._scrollY) / d;
|
||
this.scrollBy(deltaX, deltaY);
|
||
this._scrollDuration--;
|
||
}
|
||
};
|
||
|
||
Window_Scrollable.prototype.updateScrollAccel = function() {
|
||
if (this._scrollAccelX !== 0 || this._scrollAccelY !== 0) {
|
||
this.scrollBy(this._scrollAccelX, this._scrollAccelY);
|
||
this._scrollAccelX *= 0.92;
|
||
this._scrollAccelY *= 0.92;
|
||
if (Math.abs(this._scrollAccelX) < 1) {
|
||
this._scrollAccelX = 0;
|
||
}
|
||
if (Math.abs(this._scrollAccelY) < 1) {
|
||
this._scrollAccelY = 0;
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Scrollable.prototype.updateArrows = function() {
|
||
this.downArrowVisible = this._scrollY < this.maxScrollY();
|
||
this.upArrowVisible = this._scrollY > 0;
|
||
};
|
||
|
||
Window_Scrollable.prototype.updateOrigin = function() {
|
||
const blockWidth = this.scrollBlockWidth() || 1;
|
||
const blockHeight = this.scrollBlockHeight() || 1;
|
||
const baseX = this._scrollX - (this._scrollX % blockWidth);
|
||
const baseY = this._scrollY - (this._scrollY % blockHeight);
|
||
if (baseX !== this._scrollBaseX || baseY !== this._scrollBaseY) {
|
||
this.updateScrollBase(baseX, baseY);
|
||
this.paint();
|
||
}
|
||
this.origin.x = this._scrollX % blockWidth;
|
||
this.origin.y = this._scrollY % blockHeight;
|
||
};
|
||
|
||
Window_Scrollable.prototype.updateScrollBase = function(baseX, baseY) {
|
||
const deltaX = baseX - this._scrollBaseX;
|
||
const deltaY = baseY - this._scrollBaseY;
|
||
this._scrollBaseX = baseX;
|
||
this._scrollBaseY = baseY;
|
||
this.moveCursorBy(-deltaX, -deltaY);
|
||
this.moveInnerChildrenBy(-deltaX, -deltaY);
|
||
};
|
||
|
||
Window_Scrollable.prototype.paint = function() {
|
||
// to be overridden
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_Selectable
|
||
//
|
||
// The window class with cursor movement functions.
|
||
|
||
function Window_Selectable() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_Selectable.prototype = Object.create(Window_Scrollable.prototype);
|
||
Window_Selectable.prototype.constructor = Window_Selectable;
|
||
|
||
Window_Selectable.prototype.initialize = function(rect) {
|
||
Window_Scrollable.prototype.initialize.call(this, rect);
|
||
this._index = -1;
|
||
this._cursorFixed = false;
|
||
this._cursorAll = false;
|
||
this._helpWindow = null;
|
||
this._handlers = {};
|
||
this._doubleTouch = false;
|
||
this._canRepeat = true;
|
||
this.deactivate();
|
||
};
|
||
|
||
Window_Selectable.prototype.index = function() {
|
||
return this._index;
|
||
};
|
||
|
||
Window_Selectable.prototype.cursorFixed = function() {
|
||
return this._cursorFixed;
|
||
};
|
||
|
||
Window_Selectable.prototype.setCursorFixed = function(cursorFixed) {
|
||
this._cursorFixed = cursorFixed;
|
||
};
|
||
|
||
Window_Selectable.prototype.cursorAll = function() {
|
||
return this._cursorAll;
|
||
};
|
||
|
||
Window_Selectable.prototype.setCursorAll = function(cursorAll) {
|
||
this._cursorAll = cursorAll;
|
||
};
|
||
|
||
Window_Selectable.prototype.maxCols = function() {
|
||
return 1;
|
||
};
|
||
|
||
Window_Selectable.prototype.maxItems = function() {
|
||
return 0;
|
||
};
|
||
|
||
Window_Selectable.prototype.colSpacing = function() {
|
||
return 8;
|
||
};
|
||
|
||
Window_Selectable.prototype.rowSpacing = function() {
|
||
return 4;
|
||
};
|
||
|
||
Window_Selectable.prototype.itemWidth = function() {
|
||
return Math.floor(this.innerWidth / this.maxCols());
|
||
};
|
||
|
||
Window_Selectable.prototype.itemHeight = function() {
|
||
return Window_Scrollable.prototype.itemHeight.call(this) + 8;
|
||
};
|
||
|
||
Window_Selectable.prototype.contentsHeight = function() {
|
||
return this.innerHeight + this.itemHeight();
|
||
};
|
||
|
||
Window_Selectable.prototype.maxRows = function() {
|
||
return Math.max(Math.ceil(this.maxItems() / this.maxCols()), 1);
|
||
};
|
||
|
||
Window_Selectable.prototype.overallHeight = function() {
|
||
return this.maxRows() * this.itemHeight();
|
||
};
|
||
|
||
Window_Selectable.prototype.activate = function() {
|
||
Window_Scrollable.prototype.activate.call(this);
|
||
this.reselect();
|
||
};
|
||
|
||
Window_Selectable.prototype.deactivate = function() {
|
||
Window_Scrollable.prototype.deactivate.call(this);
|
||
this.reselect();
|
||
};
|
||
|
||
Window_Selectable.prototype.select = function(index) {
|
||
this._index = index;
|
||
this.refreshCursor();
|
||
this.callUpdateHelp();
|
||
};
|
||
|
||
Window_Selectable.prototype.forceSelect = function(index) {
|
||
this.select(index);
|
||
this.ensureCursorVisible(false);
|
||
};
|
||
|
||
Window_Selectable.prototype.smoothSelect = function(index) {
|
||
this.select(index);
|
||
this.ensureCursorVisible(true);
|
||
};
|
||
|
||
Window_Selectable.prototype.deselect = function() {
|
||
this.select(-1);
|
||
};
|
||
|
||
Window_Selectable.prototype.reselect = function() {
|
||
this.select(this._index);
|
||
this.ensureCursorVisible(true);
|
||
this.cursorVisible = true;
|
||
};
|
||
|
||
Window_Selectable.prototype.row = function() {
|
||
return Math.floor(this.index() / this.maxCols());
|
||
};
|
||
|
||
Window_Selectable.prototype.topRow = function() {
|
||
return Math.floor(this.scrollY() / this.itemHeight());
|
||
};
|
||
|
||
Window_Selectable.prototype.maxTopRow = function() {
|
||
return Math.max(0, this.maxRows() - this.maxPageRows());
|
||
};
|
||
|
||
Window_Selectable.prototype.setTopRow = function(row) {
|
||
this.scrollTo(this.scrollX(), row * this.itemHeight());
|
||
};
|
||
|
||
Window_Selectable.prototype.maxPageRows = function() {
|
||
return Math.floor(this.innerHeight / this.itemHeight());
|
||
};
|
||
|
||
Window_Selectable.prototype.maxPageItems = function() {
|
||
return this.maxPageRows() * this.maxCols();
|
||
};
|
||
|
||
Window_Selectable.prototype.maxVisibleItems = function() {
|
||
const visibleRows = Math.ceil(this.contentsHeight() / this.itemHeight());
|
||
return visibleRows * this.maxCols();
|
||
};
|
||
|
||
Window_Selectable.prototype.isHorizontal = function() {
|
||
return this.maxPageRows() === 1;
|
||
};
|
||
|
||
Window_Selectable.prototype.topIndex = function() {
|
||
return this.topRow() * this.maxCols();
|
||
};
|
||
|
||
Window_Selectable.prototype.itemRect = function(index) {
|
||
const maxCols = this.maxCols();
|
||
const itemWidth = this.itemWidth();
|
||
const itemHeight = this.itemHeight();
|
||
const colSpacing = this.colSpacing();
|
||
const rowSpacing = this.rowSpacing();
|
||
const col = index % maxCols;
|
||
const row = Math.floor(index / maxCols);
|
||
const x = col * itemWidth + colSpacing / 2 - this.scrollBaseX();
|
||
const y = row * itemHeight + rowSpacing / 2 - this.scrollBaseY();
|
||
const width = itemWidth - colSpacing;
|
||
const height = itemHeight - rowSpacing;
|
||
return new Rectangle(x, y, width, height);
|
||
};
|
||
|
||
Window_Selectable.prototype.itemRectWithPadding = function(index) {
|
||
const rect = this.itemRect(index);
|
||
const padding = this.itemPadding();
|
||
rect.x += padding;
|
||
rect.width -= padding * 2;
|
||
return rect;
|
||
};
|
||
|
||
Window_Selectable.prototype.itemLineRect = function(index) {
|
||
const rect = this.itemRectWithPadding(index);
|
||
const padding = (rect.height - this.lineHeight()) / 2;
|
||
rect.y += padding;
|
||
rect.height -= padding * 2;
|
||
return rect;
|
||
};
|
||
|
||
Window_Selectable.prototype.setHelpWindow = function(helpWindow) {
|
||
this._helpWindow = helpWindow;
|
||
this.callUpdateHelp();
|
||
};
|
||
|
||
Window_Selectable.prototype.showHelpWindow = function() {
|
||
if (this._helpWindow) {
|
||
this._helpWindow.show();
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.hideHelpWindow = function() {
|
||
if (this._helpWindow) {
|
||
this._helpWindow.hide();
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.setHandler = function(symbol, method) {
|
||
this._handlers[symbol] = method;
|
||
};
|
||
|
||
Window_Selectable.prototype.isHandled = function(symbol) {
|
||
return !!this._handlers[symbol];
|
||
};
|
||
|
||
Window_Selectable.prototype.callHandler = function(symbol) {
|
||
if (this.isHandled(symbol)) {
|
||
this._handlers[symbol]();
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.isOpenAndActive = function() {
|
||
return this.isOpen() && this.visible && this.active;
|
||
};
|
||
|
||
Window_Selectable.prototype.isCursorMovable = function() {
|
||
return (
|
||
this.isOpenAndActive() &&
|
||
!this._cursorFixed &&
|
||
!this._cursorAll &&
|
||
this.maxItems() > 0
|
||
);
|
||
};
|
||
|
||
Window_Selectable.prototype.cursorDown = function(wrap) {
|
||
const index = this.index();
|
||
const maxItems = this.maxItems();
|
||
const maxCols = this.maxCols();
|
||
if (index < maxItems - maxCols || (wrap && maxCols === 1)) {
|
||
this.smoothSelect((index + maxCols) % maxItems);
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.cursorUp = function(wrap) {
|
||
const index = Math.max(0, this.index());
|
||
const maxItems = this.maxItems();
|
||
const maxCols = this.maxCols();
|
||
if (index >= maxCols || (wrap && maxCols === 1)) {
|
||
this.smoothSelect((index - maxCols + maxItems) % maxItems);
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.cursorRight = function(wrap) {
|
||
const index = this.index();
|
||
const maxItems = this.maxItems();
|
||
const maxCols = this.maxCols();
|
||
const horizontal = this.isHorizontal();
|
||
if (maxCols >= 2 && (index < maxItems - 1 || (wrap && horizontal))) {
|
||
this.smoothSelect((index + 1) % maxItems);
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.cursorLeft = function(wrap) {
|
||
const index = Math.max(0, this.index());
|
||
const maxItems = this.maxItems();
|
||
const maxCols = this.maxCols();
|
||
const horizontal = this.isHorizontal();
|
||
if (maxCols >= 2 && (index > 0 || (wrap && horizontal))) {
|
||
this.smoothSelect((index - 1 + maxItems) % maxItems);
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.cursorPagedown = function() {
|
||
const index = this.index();
|
||
const maxItems = this.maxItems();
|
||
if (this.topRow() + this.maxPageRows() < this.maxRows()) {
|
||
this.smoothScrollDown(this.maxPageRows());
|
||
this.select(Math.min(index + this.maxPageItems(), maxItems - 1));
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.cursorPageup = function() {
|
||
const index = this.index();
|
||
if (this.topRow() > 0) {
|
||
this.smoothScrollUp(this.maxPageRows());
|
||
this.select(Math.max(index - this.maxPageItems(), 0));
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.isScrollEnabled = function() {
|
||
return this.active || this.index() < 0;
|
||
};
|
||
|
||
Window_Selectable.prototype.update = function() {
|
||
this.processCursorMove();
|
||
this.processHandling();
|
||
this.processTouch();
|
||
Window_Scrollable.prototype.update.call(this);
|
||
};
|
||
|
||
Window_Selectable.prototype.processCursorMove = function() {
|
||
if (this.isCursorMovable()) {
|
||
const lastIndex = this.index();
|
||
if (Input.isRepeated("down")) {
|
||
this.cursorDown(Input.isTriggered("down"));
|
||
}
|
||
if (Input.isRepeated("up")) {
|
||
this.cursorUp(Input.isTriggered("up"));
|
||
}
|
||
if (Input.isRepeated("right")) {
|
||
this.cursorRight(Input.isTriggered("right"));
|
||
}
|
||
if (Input.isRepeated("left")) {
|
||
this.cursorLeft(Input.isTriggered("left"));
|
||
}
|
||
if (!this.isHandled("pagedown") && Input.isTriggered("pagedown")) {
|
||
this.cursorPagedown();
|
||
}
|
||
if (!this.isHandled("pageup") && Input.isTriggered("pageup")) {
|
||
this.cursorPageup();
|
||
}
|
||
if (this.index() !== lastIndex) {
|
||
this.playCursorSound();
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.processHandling = function() {
|
||
if (this.isOpenAndActive()) {
|
||
if (this.isOkEnabled() && this.isOkTriggered()) {
|
||
return this.processOk();
|
||
}
|
||
if (this.isCancelEnabled() && this.isCancelTriggered()) {
|
||
return this.processCancel();
|
||
}
|
||
if (this.isHandled("pagedown") && Input.isTriggered("pagedown")) {
|
||
return this.processPagedown();
|
||
}
|
||
if (this.isHandled("pageup") && Input.isTriggered("pageup")) {
|
||
return this.processPageup();
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.processTouch = function() {
|
||
if (this.isOpenAndActive()) {
|
||
if (this.isHoverEnabled() && TouchInput.isHovered()) {
|
||
this.onTouchSelect(false);
|
||
} else if (TouchInput.isTriggered()) {
|
||
this.onTouchSelect(true);
|
||
}
|
||
if (TouchInput.isClicked()) {
|
||
this.onTouchOk();
|
||
} else if (TouchInput.isCancelled()) {
|
||
this.onTouchCancel();
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.isHoverEnabled = function() {
|
||
return true;
|
||
};
|
||
|
||
Window_Selectable.prototype.onTouchSelect = function(trigger) {
|
||
this._doubleTouch = false;
|
||
if (this.isCursorMovable()) {
|
||
const lastIndex = this.index();
|
||
const hitIndex = this.hitIndex();
|
||
if (hitIndex >= 0) {
|
||
if (hitIndex === this.index()) {
|
||
this._doubleTouch = true;
|
||
}
|
||
this.select(hitIndex);
|
||
}
|
||
if (trigger && this.index() !== lastIndex) {
|
||
this.playCursorSound();
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.onTouchOk = function() {
|
||
if (this.isTouchOkEnabled()) {
|
||
const hitIndex = this.hitIndex();
|
||
if (this._cursorFixed) {
|
||
if (hitIndex === this.index()) {
|
||
this.processOk();
|
||
}
|
||
} else if (hitIndex >= 0) {
|
||
this.processOk();
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.onTouchCancel = function() {
|
||
if (this.isCancelEnabled()) {
|
||
this.processCancel();
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.hitIndex = function() {
|
||
const touchPos = new Point(TouchInput.x, TouchInput.y);
|
||
const localPos = this.worldTransform.applyInverse(touchPos);
|
||
return this.hitTest(localPos.x, localPos.y);
|
||
};
|
||
|
||
Window_Selectable.prototype.hitTest = function(x, y) {
|
||
if (this.innerRect.contains(x, y)) {
|
||
const cx = this.origin.x + x - this.padding;
|
||
const cy = this.origin.y + y - this.padding;
|
||
const topIndex = this.topIndex();
|
||
for (let i = 0; i < this.maxVisibleItems(); i++) {
|
||
const index = topIndex + i;
|
||
if (index < this.maxItems()) {
|
||
const rect = this.itemRect(index);
|
||
if (rect.contains(cx, cy)) {
|
||
return index;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return -1;
|
||
};
|
||
|
||
Window_Selectable.prototype.isTouchOkEnabled = function() {
|
||
return (
|
||
this.isOkEnabled() &&
|
||
(this._cursorFixed || this._cursorAll || this._doubleTouch)
|
||
);
|
||
};
|
||
|
||
Window_Selectable.prototype.isOkEnabled = function() {
|
||
return this.isHandled("ok");
|
||
};
|
||
|
||
Window_Selectable.prototype.isCancelEnabled = function() {
|
||
return this.isHandled("cancel");
|
||
};
|
||
|
||
Window_Selectable.prototype.isOkTriggered = function() {
|
||
return this._canRepeat ? Input.isRepeated("ok") : Input.isTriggered("ok");
|
||
};
|
||
|
||
Window_Selectable.prototype.isCancelTriggered = function() {
|
||
return Input.isRepeated("cancel");
|
||
};
|
||
|
||
Window_Selectable.prototype.processOk = function() {
|
||
if (this.isCurrentItemEnabled()) {
|
||
this.playOkSound();
|
||
this.updateInputData();
|
||
this.deactivate();
|
||
this.callOkHandler();
|
||
} else {
|
||
this.playBuzzerSound();
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.callOkHandler = function() {
|
||
this.callHandler("ok");
|
||
};
|
||
|
||
Window_Selectable.prototype.processCancel = function() {
|
||
SoundManager.playCancel();
|
||
this.updateInputData();
|
||
this.deactivate();
|
||
this.callCancelHandler();
|
||
};
|
||
|
||
Window_Selectable.prototype.callCancelHandler = function() {
|
||
this.callHandler("cancel");
|
||
};
|
||
|
||
Window_Selectable.prototype.processPageup = function() {
|
||
this.updateInputData();
|
||
this.deactivate();
|
||
this.callHandler("pageup");
|
||
};
|
||
|
||
Window_Selectable.prototype.processPagedown = function() {
|
||
this.updateInputData();
|
||
this.deactivate();
|
||
this.callHandler("pagedown");
|
||
};
|
||
|
||
Window_Selectable.prototype.updateInputData = function() {
|
||
Input.update();
|
||
TouchInput.update();
|
||
this.clearScrollStatus();
|
||
};
|
||
|
||
Window_Selectable.prototype.ensureCursorVisible = function(smooth) {
|
||
if (this._cursorAll) {
|
||
this.scrollTo(0, 0);
|
||
} else if (this.innerHeight > 0 && this.row() >= 0) {
|
||
const scrollY = this.scrollY();
|
||
const itemTop = this.row() * this.itemHeight();
|
||
const itemBottom = itemTop + this.itemHeight();
|
||
const scrollMin = itemBottom - this.innerHeight;
|
||
if (scrollY > itemTop) {
|
||
if (smooth) {
|
||
this.smoothScrollTo(0, itemTop);
|
||
} else {
|
||
this.scrollTo(0, itemTop);
|
||
}
|
||
} else if (scrollY < scrollMin) {
|
||
if (smooth) {
|
||
this.smoothScrollTo(0, scrollMin);
|
||
} else {
|
||
this.scrollTo(0, scrollMin);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.callUpdateHelp = function() {
|
||
if (this.active && this._helpWindow) {
|
||
this.updateHelp();
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.updateHelp = function() {
|
||
this._helpWindow.clear();
|
||
};
|
||
|
||
Window_Selectable.prototype.setHelpWindowItem = function(item) {
|
||
if (this._helpWindow) {
|
||
this._helpWindow.setItem(item);
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.isCurrentItemEnabled = function() {
|
||
return true;
|
||
};
|
||
|
||
Window_Selectable.prototype.drawAllItems = function() {
|
||
const topIndex = this.topIndex();
|
||
for (let i = 0; i < this.maxVisibleItems(); i++) {
|
||
const index = topIndex + i;
|
||
if (index < this.maxItems()) {
|
||
this.drawItemBackground(index);
|
||
this.drawItem(index);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.drawItem = function(/*index*/) {
|
||
//
|
||
};
|
||
|
||
Window_Selectable.prototype.clearItem = function(index) {
|
||
const rect = this.itemRect(index);
|
||
this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
|
||
this.contentsBack.clearRect(rect.x, rect.y, rect.width, rect.height);
|
||
};
|
||
|
||
Window_Selectable.prototype.drawItemBackground = function(index) {
|
||
const rect = this.itemRect(index);
|
||
this.drawBackgroundRect(rect);
|
||
};
|
||
|
||
Window_Selectable.prototype.drawBackgroundRect = function(rect) {
|
||
const c1 = ColorManager.itemBackColor1();
|
||
const c2 = ColorManager.itemBackColor2();
|
||
const x = rect.x;
|
||
const y = rect.y;
|
||
const w = rect.width;
|
||
const h = rect.height;
|
||
this.contentsBack.gradientFillRect(x, y, w, h, c1, c2, true);
|
||
this.contentsBack.strokeRect(x, y, w, h, c1);
|
||
};
|
||
|
||
Window_Selectable.prototype.redrawItem = function(index) {
|
||
if (index >= 0) {
|
||
this.clearItem(index);
|
||
this.drawItemBackground(index);
|
||
this.drawItem(index);
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.redrawCurrentItem = function() {
|
||
this.redrawItem(this.index());
|
||
};
|
||
|
||
Window_Selectable.prototype.refresh = function() {
|
||
this.paint();
|
||
};
|
||
|
||
Window_Selectable.prototype.paint = function() {
|
||
if (this.contents) {
|
||
this.contents.clear();
|
||
this.contentsBack.clear();
|
||
this.drawAllItems();
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.refreshCursor = function() {
|
||
if (this._cursorAll) {
|
||
this.refreshCursorForAll();
|
||
} else if (this.index() >= 0) {
|
||
const rect = this.itemRect(this.index());
|
||
this.setCursorRect(rect.x, rect.y, rect.width, rect.height);
|
||
} else {
|
||
this.setCursorRect(0, 0, 0, 0);
|
||
}
|
||
};
|
||
|
||
Window_Selectable.prototype.refreshCursorForAll = function() {
|
||
const maxItems = this.maxItems();
|
||
if (maxItems > 0) {
|
||
const rect = this.itemRect(0);
|
||
rect.enlarge(this.itemRect(maxItems - 1));
|
||
this.setCursorRect(rect.x, rect.y, rect.width, rect.height);
|
||
} else {
|
||
this.setCursorRect(0, 0, 0, 0);
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_Command
|
||
//
|
||
// The superclass of windows for selecting a command.
|
||
|
||
function Window_Command() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_Command.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_Command.prototype.constructor = Window_Command;
|
||
|
||
Window_Command.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this.refresh();
|
||
this.select(0);
|
||
this.activate();
|
||
};
|
||
|
||
Window_Command.prototype.maxItems = function() {
|
||
return this._list.length;
|
||
};
|
||
|
||
Window_Command.prototype.clearCommandList = function() {
|
||
this._list = [];
|
||
};
|
||
|
||
Window_Command.prototype.makeCommandList = function() {
|
||
//
|
||
};
|
||
|
||
// prettier-ignore
|
||
Window_Command.prototype.addCommand = function(
|
||
name, symbol, enabled = true, ext = null
|
||
) {
|
||
this._list.push({ name: name, symbol: symbol, enabled: enabled, ext: ext });
|
||
};
|
||
|
||
Window_Command.prototype.commandName = function(index) {
|
||
return this._list[index].name;
|
||
};
|
||
|
||
Window_Command.prototype.commandSymbol = function(index) {
|
||
return this._list[index].symbol;
|
||
};
|
||
|
||
Window_Command.prototype.isCommandEnabled = function(index) {
|
||
return this._list[index].enabled;
|
||
};
|
||
|
||
Window_Command.prototype.currentData = function() {
|
||
return this.index() >= 0 ? this._list[this.index()] : null;
|
||
};
|
||
|
||
Window_Command.prototype.isCurrentItemEnabled = function() {
|
||
return this.currentData() ? this.currentData().enabled : false;
|
||
};
|
||
|
||
Window_Command.prototype.currentSymbol = function() {
|
||
return this.currentData() ? this.currentData().symbol : null;
|
||
};
|
||
|
||
Window_Command.prototype.currentExt = function() {
|
||
return this.currentData() ? this.currentData().ext : null;
|
||
};
|
||
|
||
Window_Command.prototype.findSymbol = function(symbol) {
|
||
return this._list.findIndex(item => item.symbol === symbol);
|
||
};
|
||
|
||
Window_Command.prototype.selectSymbol = function(symbol) {
|
||
const index = this.findSymbol(symbol);
|
||
if (index >= 0) {
|
||
this.forceSelect(index);
|
||
} else {
|
||
this.forceSelect(0);
|
||
}
|
||
};
|
||
|
||
Window_Command.prototype.findExt = function(ext) {
|
||
return this._list.findIndex(item => item.ext === ext);
|
||
};
|
||
|
||
Window_Command.prototype.selectExt = function(ext) {
|
||
const index = this.findExt(ext);
|
||
if (index >= 0) {
|
||
this.forceSelect(index);
|
||
} else {
|
||
this.forceSelect(0);
|
||
}
|
||
};
|
||
|
||
Window_Command.prototype.drawItem = function(index) {
|
||
const rect = this.itemLineRect(index);
|
||
const align = this.itemTextAlign();
|
||
this.resetTextColor();
|
||
this.changePaintOpacity(this.isCommandEnabled(index));
|
||
this.drawText(this.commandName(index), rect.x, rect.y, rect.width, align);
|
||
};
|
||
|
||
Window_Command.prototype.itemTextAlign = function() {
|
||
return "center";
|
||
};
|
||
|
||
Window_Command.prototype.isOkEnabled = function() {
|
||
return true;
|
||
};
|
||
|
||
Window_Command.prototype.callOkHandler = function() {
|
||
const symbol = this.currentSymbol();
|
||
if (this.isHandled(symbol)) {
|
||
this.callHandler(symbol);
|
||
} else if (this.isHandled("ok")) {
|
||
Window_Selectable.prototype.callOkHandler.call(this);
|
||
} else {
|
||
this.activate();
|
||
}
|
||
};
|
||
|
||
Window_Command.prototype.refresh = function() {
|
||
this.clearCommandList();
|
||
this.makeCommandList();
|
||
Window_Selectable.prototype.refresh.call(this);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_HorzCommand
|
||
//
|
||
// The command window for the horizontal selection format.
|
||
|
||
function Window_HorzCommand() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_HorzCommand.prototype = Object.create(Window_Command.prototype);
|
||
Window_HorzCommand.prototype.constructor = Window_HorzCommand;
|
||
|
||
Window_HorzCommand.prototype.initialize = function(rect) {
|
||
Window_Command.prototype.initialize.call(this, rect);
|
||
};
|
||
|
||
Window_HorzCommand.prototype.maxCols = function() {
|
||
return 4;
|
||
};
|
||
|
||
Window_HorzCommand.prototype.itemTextAlign = function() {
|
||
return "center";
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_Help
|
||
//
|
||
// The window for displaying the description of the selected item.
|
||
|
||
function Window_Help() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_Help.prototype = Object.create(Window_Base.prototype);
|
||
Window_Help.prototype.constructor = Window_Help;
|
||
|
||
Window_Help.prototype.initialize = function(rect) {
|
||
Window_Base.prototype.initialize.call(this, rect);
|
||
this._text = "";
|
||
};
|
||
|
||
Window_Help.prototype.setText = function(text) {
|
||
if (this._text !== text) {
|
||
this._text = text;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_Help.prototype.clear = function() {
|
||
this.setText("");
|
||
};
|
||
|
||
Window_Help.prototype.setItem = function(item) {
|
||
this.setText(item ? item.description : "");
|
||
};
|
||
|
||
Window_Help.prototype.refresh = function() {
|
||
const rect = this.baseTextRect();
|
||
this.contents.clear();
|
||
this.drawTextEx(this._text, rect.x, rect.y, rect.width);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_Gold
|
||
//
|
||
// The window for displaying the party's gold.
|
||
|
||
function Window_Gold() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_Gold.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_Gold.prototype.constructor = Window_Gold;
|
||
|
||
Window_Gold.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this.refresh();
|
||
};
|
||
|
||
Window_Gold.prototype.colSpacing = function() {
|
||
return 0;
|
||
};
|
||
|
||
Window_Gold.prototype.refresh = function() {
|
||
const rect = this.itemLineRect(0);
|
||
const x = rect.x;
|
||
const y = rect.y;
|
||
const width = rect.width;
|
||
this.contents.clear();
|
||
this.drawCurrencyValue(this.value(), this.currencyUnit(), x, y, width);
|
||
};
|
||
|
||
Window_Gold.prototype.value = function() {
|
||
return $gameParty.gold();
|
||
};
|
||
|
||
Window_Gold.prototype.currencyUnit = function() {
|
||
return TextManager.currencyUnit;
|
||
};
|
||
|
||
Window_Gold.prototype.open = function() {
|
||
this.refresh();
|
||
Window_Selectable.prototype.open.call(this);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_StatusBase
|
||
//
|
||
// The superclass of windows for displaying actor status.
|
||
|
||
function Window_StatusBase() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_StatusBase.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_StatusBase.prototype.constructor = Window_StatusBase;
|
||
|
||
Window_StatusBase.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this._additionalSprites = {};
|
||
this.loadFaceImages();
|
||
};
|
||
|
||
Window_StatusBase.prototype.loadFaceImages = function() {
|
||
for (const actor of $gameParty.members()) {
|
||
ImageManager.loadFace(actor.faceName());
|
||
}
|
||
};
|
||
|
||
Window_StatusBase.prototype.refresh = function() {
|
||
this.hideAdditionalSprites();
|
||
Window_Selectable.prototype.refresh.call(this);
|
||
};
|
||
|
||
Window_StatusBase.prototype.hideAdditionalSprites = function() {
|
||
for (const sprite of Object.values(this._additionalSprites)) {
|
||
sprite.hide();
|
||
}
|
||
};
|
||
|
||
Window_StatusBase.prototype.placeActorName = function(actor, x, y) {
|
||
const key = "actor%1-name".format(actor.actorId());
|
||
const sprite = this.createInnerSprite(key, Sprite_Name);
|
||
sprite.setup(actor);
|
||
sprite.move(x, y);
|
||
sprite.show();
|
||
};
|
||
|
||
Window_StatusBase.prototype.placeStateIcon = function(actor, x, y) {
|
||
const key = "actor%1-stateIcon".format(actor.actorId());
|
||
const sprite = this.createInnerSprite(key, Sprite_StateIcon);
|
||
sprite.setup(actor);
|
||
sprite.move(x, y);
|
||
sprite.show();
|
||
};
|
||
|
||
Window_StatusBase.prototype.placeGauge = function(actor, type, x, y) {
|
||
const key = "actor%1-gauge-%2".format(actor.actorId(), type);
|
||
const sprite = this.createInnerSprite(key, Sprite_Gauge);
|
||
sprite.setup(actor, type);
|
||
sprite.move(x, y);
|
||
sprite.show();
|
||
};
|
||
|
||
Window_StatusBase.prototype.createInnerSprite = function(key, spriteClass) {
|
||
const dict = this._additionalSprites;
|
||
if (dict[key]) {
|
||
return dict[key];
|
||
} else {
|
||
const sprite = new spriteClass();
|
||
dict[key] = sprite;
|
||
this.addInnerChild(sprite);
|
||
return sprite;
|
||
}
|
||
};
|
||
|
||
Window_StatusBase.prototype.placeTimeGauge = function(actor, x, y) {
|
||
if (BattleManager.isTpb()) {
|
||
this.placeGauge(actor, "time", x, y);
|
||
}
|
||
};
|
||
|
||
Window_StatusBase.prototype.placeBasicGauges = function(actor, x, y) {
|
||
this.placeGauge(actor, "hp", x, y);
|
||
this.placeGauge(actor, "mp", x, y + this.gaugeLineHeight());
|
||
if ($dataSystem.optDisplayTp) {
|
||
this.placeGauge(actor, "tp", x, y + this.gaugeLineHeight() * 2);
|
||
}
|
||
};
|
||
|
||
Window_StatusBase.prototype.gaugeLineHeight = function() {
|
||
return 24;
|
||
};
|
||
|
||
Window_StatusBase.prototype.drawActorCharacter = function(actor, x, y) {
|
||
this.drawCharacter(actor.characterName(), actor.characterIndex(), x, y);
|
||
};
|
||
|
||
// prettier-ignore
|
||
Window_StatusBase.prototype.drawActorFace = function(
|
||
actor, x, y, width, height
|
||
) {
|
||
this.drawFace(actor.faceName(), actor.faceIndex(), x, y, width, height);
|
||
};
|
||
|
||
Window_StatusBase.prototype.drawActorName = function(actor, x, y, width) {
|
||
width = width || 168;
|
||
this.changeTextColor(ColorManager.hpColor(actor));
|
||
this.drawText(actor.name(), x, y, width);
|
||
};
|
||
|
||
Window_StatusBase.prototype.drawActorClass = function(actor, x, y, width) {
|
||
width = width || 168;
|
||
this.resetTextColor();
|
||
this.drawText(actor.currentClass().name, x, y, width);
|
||
};
|
||
|
||
Window_StatusBase.prototype.drawActorNickname = function(actor, x, y, width) {
|
||
width = width || 270;
|
||
this.resetTextColor();
|
||
this.drawText(actor.nickname(), x, y, width);
|
||
};
|
||
|
||
Window_StatusBase.prototype.drawActorLevel = function(actor, x, y) {
|
||
this.changeTextColor(ColorManager.systemColor());
|
||
this.drawText(TextManager.levelA, x, y, 48);
|
||
this.resetTextColor();
|
||
this.drawText(actor.level, x + 84, y, 36, "right");
|
||
};
|
||
|
||
Window_StatusBase.prototype.drawActorIcons = function(actor, x, y, width) {
|
||
width = width || 144;
|
||
const iconWidth = ImageManager.iconWidth;
|
||
const icons = actor.allIcons().slice(0, Math.floor(width / iconWidth));
|
||
let iconX = x;
|
||
for (const icon of icons) {
|
||
this.drawIcon(icon, iconX, y + 2);
|
||
iconX += iconWidth;
|
||
}
|
||
};
|
||
|
||
Window_StatusBase.prototype.drawActorSimpleStatus = function(actor, x, y) {
|
||
const lineHeight = this.lineHeight();
|
||
const x2 = x + 180;
|
||
this.drawActorName(actor, x, y);
|
||
this.drawActorLevel(actor, x, y + lineHeight * 1);
|
||
this.drawActorIcons(actor, x, y + lineHeight * 2);
|
||
this.drawActorClass(actor, x2, y);
|
||
this.placeBasicGauges(actor, x2, y + lineHeight);
|
||
};
|
||
|
||
Window_StatusBase.prototype.actorSlotName = function(actor, index) {
|
||
const slots = actor.equipSlots();
|
||
return $dataSystem.equipTypes[slots[index]];
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_MenuCommand
|
||
//
|
||
// The window for selecting a command on the menu screen.
|
||
|
||
function Window_MenuCommand() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_MenuCommand.prototype = Object.create(Window_Command.prototype);
|
||
Window_MenuCommand.prototype.constructor = Window_MenuCommand;
|
||
|
||
Window_MenuCommand.prototype.initialize = function(rect) {
|
||
Window_Command.prototype.initialize.call(this, rect);
|
||
this.selectLast();
|
||
this._canRepeat = false;
|
||
};
|
||
|
||
Window_MenuCommand._lastCommandSymbol = null;
|
||
|
||
Window_MenuCommand.initCommandPosition = function() {
|
||
this._lastCommandSymbol = null;
|
||
};
|
||
|
||
Window_MenuCommand.prototype.makeCommandList = function() {
|
||
this.addMainCommands();
|
||
this.addFormationCommand();
|
||
this.addOriginalCommands();
|
||
this.addOptionsCommand();
|
||
this.addSaveCommand();
|
||
this.addGameEndCommand();
|
||
};
|
||
|
||
Window_MenuCommand.prototype.addMainCommands = function() {
|
||
const enabled = this.areMainCommandsEnabled();
|
||
if (this.needsCommand("item")) {
|
||
this.addCommand(TextManager.item, "item", enabled);
|
||
}
|
||
if (this.needsCommand("skill")) {
|
||
this.addCommand(TextManager.skill, "skill", enabled);
|
||
}
|
||
if (this.needsCommand("equip")) {
|
||
this.addCommand(TextManager.equip, "equip", enabled);
|
||
}
|
||
if (this.needsCommand("status")) {
|
||
this.addCommand(TextManager.status, "status", enabled);
|
||
}
|
||
};
|
||
|
||
Window_MenuCommand.prototype.addFormationCommand = function() {
|
||
if (this.needsCommand("formation")) {
|
||
const enabled = this.isFormationEnabled();
|
||
this.addCommand(TextManager.formation, "formation", enabled);
|
||
}
|
||
};
|
||
|
||
Window_MenuCommand.prototype.addOriginalCommands = function() {
|
||
//
|
||
};
|
||
|
||
Window_MenuCommand.prototype.addOptionsCommand = function() {
|
||
if (this.needsCommand("options")) {
|
||
const enabled = this.isOptionsEnabled();
|
||
this.addCommand(TextManager.options, "options", enabled);
|
||
}
|
||
};
|
||
|
||
Window_MenuCommand.prototype.addSaveCommand = function() {
|
||
if (this.needsCommand("save")) {
|
||
const enabled = this.isSaveEnabled();
|
||
this.addCommand(TextManager.save, "save", enabled);
|
||
}
|
||
};
|
||
|
||
Window_MenuCommand.prototype.addGameEndCommand = function() {
|
||
const enabled = this.isGameEndEnabled();
|
||
this.addCommand(TextManager.gameEnd, "gameEnd", enabled);
|
||
};
|
||
|
||
Window_MenuCommand.prototype.needsCommand = function(name) {
|
||
const table = ["item", "skill", "equip", "status", "formation", "save"];
|
||
const index = table.indexOf(name);
|
||
if (index >= 0) {
|
||
return $dataSystem.menuCommands[index];
|
||
}
|
||
return true;
|
||
};
|
||
|
||
Window_MenuCommand.prototype.areMainCommandsEnabled = function() {
|
||
return $gameParty.exists();
|
||
};
|
||
|
||
Window_MenuCommand.prototype.isFormationEnabled = function() {
|
||
return $gameParty.size() >= 2 && $gameSystem.isFormationEnabled();
|
||
};
|
||
|
||
Window_MenuCommand.prototype.isOptionsEnabled = function() {
|
||
return true;
|
||
};
|
||
|
||
Window_MenuCommand.prototype.isSaveEnabled = function() {
|
||
return !DataManager.isEventTest() && $gameSystem.isSaveEnabled();
|
||
};
|
||
|
||
Window_MenuCommand.prototype.isGameEndEnabled = function() {
|
||
return true;
|
||
};
|
||
|
||
Window_MenuCommand.prototype.processOk = function() {
|
||
Window_MenuCommand._lastCommandSymbol = this.currentSymbol();
|
||
Window_Command.prototype.processOk.call(this);
|
||
};
|
||
|
||
Window_MenuCommand.prototype.selectLast = function() {
|
||
this.selectSymbol(Window_MenuCommand._lastCommandSymbol);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_MenuStatus
|
||
//
|
||
// The window for displaying party member status on the menu screen.
|
||
|
||
function Window_MenuStatus() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_MenuStatus.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_MenuStatus.prototype.constructor = Window_MenuStatus;
|
||
|
||
Window_MenuStatus.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this._formationMode = false;
|
||
this._pendingIndex = -1;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_MenuStatus.prototype.maxItems = function() {
|
||
return $gameParty.size();
|
||
};
|
||
|
||
Window_MenuStatus.prototype.numVisibleRows = function() {
|
||
return 4;
|
||
};
|
||
|
||
Window_MenuStatus.prototype.itemHeight = function() {
|
||
return Math.floor(this.innerHeight / this.numVisibleRows());
|
||
};
|
||
|
||
Window_MenuStatus.prototype.actor = function(index) {
|
||
return $gameParty.members()[index];
|
||
};
|
||
|
||
Window_MenuStatus.prototype.drawItem = function(index) {
|
||
this.drawPendingItemBackground(index);
|
||
this.drawItemImage(index);
|
||
this.drawItemStatus(index);
|
||
};
|
||
|
||
Window_MenuStatus.prototype.drawPendingItemBackground = function(index) {
|
||
if (index === this._pendingIndex) {
|
||
const rect = this.itemRect(index);
|
||
const color = ColorManager.pendingColor();
|
||
this.changePaintOpacity(false);
|
||
this.contents.fillRect(rect.x, rect.y, rect.width, rect.height, color);
|
||
this.changePaintOpacity(true);
|
||
}
|
||
};
|
||
|
||
Window_MenuStatus.prototype.drawItemImage = function(index) {
|
||
const actor = this.actor(index);
|
||
const rect = this.itemRect(index);
|
||
const width = ImageManager.faceWidth;
|
||
const height = rect.height - 2;
|
||
this.changePaintOpacity(actor.isBattleMember());
|
||
this.drawActorFace(actor, rect.x + 1, rect.y + 1, 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 + 180;
|
||
const y = rect.y + Math.floor(rect.height / 2 - this.lineHeight() * 1.5);
|
||
this.drawActorSimpleStatus(actor, x, y);
|
||
};
|
||
|
||
Window_MenuStatus.prototype.processOk = function() {
|
||
Window_StatusBase.prototype.processOk.call(this);
|
||
const actor = this.actor(this.index());
|
||
$gameParty.setMenuActor(actor);
|
||
};
|
||
|
||
Window_MenuStatus.prototype.isCurrentItemEnabled = function() {
|
||
if (this._formationMode) {
|
||
const actor = this.actor(this.index());
|
||
return actor && actor.isFormationChangeOk();
|
||
} else {
|
||
return true;
|
||
}
|
||
};
|
||
|
||
Window_MenuStatus.prototype.selectLast = function() {
|
||
this.smoothSelect($gameParty.menuActor().index() || 0);
|
||
};
|
||
|
||
Window_MenuStatus.prototype.formationMode = function() {
|
||
return this._formationMode;
|
||
};
|
||
|
||
Window_MenuStatus.prototype.setFormationMode = function(formationMode) {
|
||
this._formationMode = formationMode;
|
||
};
|
||
|
||
Window_MenuStatus.prototype.pendingIndex = function() {
|
||
return this._pendingIndex;
|
||
};
|
||
|
||
Window_MenuStatus.prototype.setPendingIndex = function(index) {
|
||
const lastPendingIndex = this._pendingIndex;
|
||
this._pendingIndex = index;
|
||
this.redrawItem(this._pendingIndex);
|
||
this.redrawItem(lastPendingIndex);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_MenuActor
|
||
//
|
||
// The window for selecting a target actor on the item and skill screens.
|
||
|
||
function Window_MenuActor() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_MenuActor.prototype = Object.create(Window_MenuStatus.prototype);
|
||
Window_MenuActor.prototype.constructor = Window_MenuActor;
|
||
|
||
Window_MenuActor.prototype.initialize = function(rect) {
|
||
Window_MenuStatus.prototype.initialize.call(this, rect);
|
||
this.hide();
|
||
};
|
||
|
||
Window_MenuActor.prototype.processOk = function() {
|
||
if (!this.cursorAll()) {
|
||
$gameParty.setTargetActor($gameParty.members()[this.index()]);
|
||
}
|
||
this.callOkHandler();
|
||
};
|
||
|
||
Window_MenuActor.prototype.selectLast = function() {
|
||
this.forceSelect($gameParty.targetActor().index() || 0);
|
||
};
|
||
|
||
Window_MenuActor.prototype.selectForItem = function(item) {
|
||
const actor = $gameParty.menuActor();
|
||
const action = new Game_Action(actor);
|
||
action.setItemObject(item);
|
||
this.setCursorFixed(false);
|
||
this.setCursorAll(false);
|
||
if (action.isForUser()) {
|
||
if (DataManager.isSkill(item)) {
|
||
this.setCursorFixed(true);
|
||
this.forceSelect(actor.index());
|
||
} else {
|
||
this.selectLast();
|
||
}
|
||
} else if (action.isForAll()) {
|
||
this.setCursorAll(true);
|
||
this.forceSelect(0);
|
||
} else {
|
||
this.selectLast();
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ItemCategory
|
||
//
|
||
// The window for selecting a category of items on the item and shop screens.
|
||
|
||
function Window_ItemCategory() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ItemCategory.prototype = Object.create(Window_HorzCommand.prototype);
|
||
Window_ItemCategory.prototype.constructor = Window_ItemCategory;
|
||
|
||
Window_ItemCategory.prototype.initialize = function(rect) {
|
||
Window_HorzCommand.prototype.initialize.call(this, rect);
|
||
};
|
||
|
||
Window_ItemCategory.prototype.maxCols = function() {
|
||
return 4;
|
||
};
|
||
|
||
Window_ItemCategory.prototype.update = function() {
|
||
Window_HorzCommand.prototype.update.call(this);
|
||
if (this._itemWindow) {
|
||
this._itemWindow.setCategory(this.currentSymbol());
|
||
}
|
||
};
|
||
|
||
Window_ItemCategory.prototype.makeCommandList = function() {
|
||
if (this.needsCommand("item")) {
|
||
this.addCommand(TextManager.item, "item");
|
||
}
|
||
if (this.needsCommand("weapon")) {
|
||
this.addCommand(TextManager.weapon, "weapon");
|
||
}
|
||
if (this.needsCommand("armor")) {
|
||
this.addCommand(TextManager.armor, "armor");
|
||
}
|
||
if (this.needsCommand("keyItem")) {
|
||
this.addCommand(TextManager.keyItem, "keyItem");
|
||
}
|
||
};
|
||
|
||
Window_ItemCategory.prototype.needsCommand = function(name) {
|
||
const table = ["item", "weapon", "armor", "keyItem"];
|
||
const index = table.indexOf(name);
|
||
if (index >= 0) {
|
||
return $dataSystem.itemCategories[index];
|
||
}
|
||
return true;
|
||
};
|
||
|
||
Window_ItemCategory.prototype.setItemWindow = function(itemWindow) {
|
||
this._itemWindow = itemWindow;
|
||
};
|
||
|
||
Window_ItemCategory.prototype.needsSelection = function() {
|
||
return this.maxItems() >= 2;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ItemList
|
||
//
|
||
// The window for selecting an item on the item screen.
|
||
|
||
function Window_ItemList() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ItemList.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_ItemList.prototype.constructor = Window_ItemList;
|
||
|
||
Window_ItemList.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this._category = "none";
|
||
this._data = [];
|
||
};
|
||
|
||
Window_ItemList.prototype.setCategory = function(category) {
|
||
if (this._category !== category) {
|
||
this._category = category;
|
||
this.refresh();
|
||
this.scrollTo(0, 0);
|
||
}
|
||
};
|
||
|
||
Window_ItemList.prototype.maxCols = function() {
|
||
return 2;
|
||
};
|
||
|
||
Window_ItemList.prototype.colSpacing = function() {
|
||
return 16;
|
||
};
|
||
|
||
Window_ItemList.prototype.maxItems = function() {
|
||
return this._data ? this._data.length : 1;
|
||
};
|
||
|
||
Window_ItemList.prototype.item = function() {
|
||
return this.itemAt(this.index());
|
||
};
|
||
|
||
Window_ItemList.prototype.itemAt = function(index) {
|
||
return this._data && index >= 0 ? this._data[index] : null;
|
||
};
|
||
|
||
Window_ItemList.prototype.isCurrentItemEnabled = function() {
|
||
return this.isEnabled(this.item());
|
||
};
|
||
|
||
Window_ItemList.prototype.includes = function(item) {
|
||
switch (this._category) {
|
||
case "item":
|
||
return DataManager.isItem(item) && item.itypeId === 1;
|
||
case "weapon":
|
||
return DataManager.isWeapon(item);
|
||
case "armor":
|
||
return DataManager.isArmor(item);
|
||
case "keyItem":
|
||
return DataManager.isItem(item) && item.itypeId === 2;
|
||
default:
|
||
return false;
|
||
}
|
||
};
|
||
|
||
Window_ItemList.prototype.needsNumber = function() {
|
||
if (this._category === "keyItem") {
|
||
return $dataSystem.optKeyItemsNumber;
|
||
} else {
|
||
return true;
|
||
}
|
||
};
|
||
|
||
Window_ItemList.prototype.isEnabled = function(item) {
|
||
return $gameParty.canUse(item);
|
||
};
|
||
|
||
Window_ItemList.prototype.makeItemList = function() {
|
||
this._data = $gameParty.allItems().filter(item => this.includes(item));
|
||
if (this.includes(null)) {
|
||
this._data.push(null);
|
||
}
|
||
};
|
||
|
||
Window_ItemList.prototype.selectLast = function() {
|
||
const index = this._data.indexOf($gameParty.lastItem());
|
||
this.forceSelect(index >= 0 ? index : 0);
|
||
};
|
||
|
||
Window_ItemList.prototype.drawItem = function(index) {
|
||
const item = this.itemAt(index);
|
||
if (item) {
|
||
const numberWidth = this.numberWidth();
|
||
const rect = this.itemLineRect(index);
|
||
this.changePaintOpacity(this.isEnabled(item));
|
||
this.drawItemName(item, rect.x, rect.y, rect.width - numberWidth);
|
||
this.drawItemNumber(item, rect.x, rect.y, rect.width);
|
||
this.changePaintOpacity(1);
|
||
}
|
||
};
|
||
|
||
Window_ItemList.prototype.numberWidth = function() {
|
||
return this.textWidth("000");
|
||
};
|
||
|
||
Window_ItemList.prototype.drawItemNumber = function(item, x, y, width) {
|
||
if (this.needsNumber()) {
|
||
this.drawText(":", x, y, width - this.textWidth("00"), "right");
|
||
this.drawText($gameParty.numItems(item), x, y, width, "right");
|
||
}
|
||
};
|
||
|
||
Window_ItemList.prototype.updateHelp = function() {
|
||
this.setHelpWindowItem(this.item());
|
||
};
|
||
|
||
Window_ItemList.prototype.refresh = function() {
|
||
this.makeItemList();
|
||
Window_Selectable.prototype.refresh.call(this);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_SkillType
|
||
//
|
||
// The window for selecting a skill type on the skill screen.
|
||
|
||
function Window_SkillType() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_SkillType.prototype = Object.create(Window_Command.prototype);
|
||
Window_SkillType.prototype.constructor = Window_SkillType;
|
||
|
||
Window_SkillType.prototype.initialize = function(rect) {
|
||
Window_Command.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
};
|
||
|
||
Window_SkillType.prototype.setActor = function(actor) {
|
||
if (this._actor !== actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
this.selectLast();
|
||
}
|
||
};
|
||
|
||
Window_SkillType.prototype.makeCommandList = function() {
|
||
if (this._actor) {
|
||
const skillTypes = this._actor.skillTypes();
|
||
for (const stypeId of skillTypes) {
|
||
const name = $dataSystem.skillTypes[stypeId];
|
||
this.addCommand(name, "skill", true, stypeId);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_SkillType.prototype.update = function() {
|
||
Window_Command.prototype.update.call(this);
|
||
if (this._skillWindow) {
|
||
this._skillWindow.setStypeId(this.currentExt());
|
||
}
|
||
};
|
||
|
||
Window_SkillType.prototype.setSkillWindow = function(skillWindow) {
|
||
this._skillWindow = skillWindow;
|
||
};
|
||
|
||
Window_SkillType.prototype.selectLast = function() {
|
||
const skill = this._actor.lastMenuSkill();
|
||
if (skill) {
|
||
this.selectExt(skill.stypeId);
|
||
} else {
|
||
this.forceSelect(0);
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_SkillStatus
|
||
//
|
||
// The window for displaying the skill user's status on the skill screen.
|
||
|
||
function Window_SkillStatus() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_SkillStatus.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_SkillStatus.prototype.constructor = Window_SkillStatus;
|
||
|
||
Window_SkillStatus.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
};
|
||
|
||
Window_SkillStatus.prototype.setActor = function(actor) {
|
||
if (this._actor !== actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_SkillStatus.prototype.refresh = function() {
|
||
Window_StatusBase.prototype.refresh.call(this);
|
||
if (this._actor) {
|
||
const x = this.colSpacing() / 2;
|
||
const h = this.innerHeight;
|
||
const y = h / 2 - this.lineHeight() * 1.5;
|
||
this.drawActorFace(this._actor, x + 1, 0, 144, h);
|
||
this.drawActorSimpleStatus(this._actor, x + 180, y);
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_SkillList
|
||
//
|
||
// The window for selecting a skill on the skill screen.
|
||
|
||
function Window_SkillList() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_SkillList.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_SkillList.prototype.constructor = Window_SkillList;
|
||
|
||
Window_SkillList.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
this._stypeId = 0;
|
||
this._data = [];
|
||
};
|
||
|
||
Window_SkillList.prototype.setActor = function(actor) {
|
||
if (this._actor !== actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
this.scrollTo(0, 0);
|
||
}
|
||
};
|
||
|
||
Window_SkillList.prototype.setStypeId = function(stypeId) {
|
||
if (this._stypeId !== stypeId) {
|
||
this._stypeId = stypeId;
|
||
this.refresh();
|
||
this.scrollTo(0, 0);
|
||
}
|
||
};
|
||
|
||
Window_SkillList.prototype.maxCols = function() {
|
||
return 2;
|
||
};
|
||
|
||
Window_SkillList.prototype.colSpacing = function() {
|
||
return 16;
|
||
};
|
||
|
||
Window_SkillList.prototype.maxItems = function() {
|
||
return this._data ? this._data.length : 1;
|
||
};
|
||
|
||
Window_SkillList.prototype.item = function() {
|
||
return this.itemAt(this.index());
|
||
};
|
||
|
||
Window_SkillList.prototype.itemAt = function(index) {
|
||
return this._data && index >= 0 ? this._data[index] : null;
|
||
};
|
||
|
||
Window_SkillList.prototype.isCurrentItemEnabled = function() {
|
||
return this.isEnabled(this._data[this.index()]);
|
||
};
|
||
|
||
Window_SkillList.prototype.includes = function(item) {
|
||
return item && item.stypeId === this._stypeId;
|
||
};
|
||
|
||
Window_SkillList.prototype.isEnabled = function(item) {
|
||
return this._actor && this._actor.canUse(item);
|
||
};
|
||
|
||
Window_SkillList.prototype.makeItemList = function() {
|
||
if (this._actor) {
|
||
this._data = this._actor.skills().filter(item => this.includes(item));
|
||
} else {
|
||
this._data = [];
|
||
}
|
||
};
|
||
|
||
Window_SkillList.prototype.selectLast = function() {
|
||
const index = this._data.indexOf(this._actor.lastSkill());
|
||
this.forceSelect(index >= 0 ? index : 0);
|
||
};
|
||
|
||
Window_SkillList.prototype.drawItem = function(index) {
|
||
const skill = this.itemAt(index);
|
||
if (skill) {
|
||
const costWidth = this.costWidth();
|
||
const rect = this.itemLineRect(index);
|
||
this.changePaintOpacity(this.isEnabled(skill));
|
||
this.drawItemName(skill, rect.x, rect.y, rect.width - costWidth);
|
||
this.drawSkillCost(skill, rect.x, rect.y, rect.width);
|
||
this.changePaintOpacity(1);
|
||
}
|
||
};
|
||
|
||
Window_SkillList.prototype.costWidth = function() {
|
||
return this.textWidth("000");
|
||
};
|
||
|
||
Window_SkillList.prototype.drawSkillCost = function(skill, x, y, width) {
|
||
if (this._actor.skillTpCost(skill) > 0) {
|
||
this.changeTextColor(ColorManager.tpCostColor());
|
||
this.drawText(this._actor.skillTpCost(skill), x, y, width, "right");
|
||
} else if (this._actor.skillMpCost(skill) > 0) {
|
||
this.changeTextColor(ColorManager.mpCostColor());
|
||
this.drawText(this._actor.skillMpCost(skill), x, y, width, "right");
|
||
}
|
||
};
|
||
|
||
Window_SkillList.prototype.updateHelp = function() {
|
||
this.setHelpWindowItem(this.item());
|
||
};
|
||
|
||
Window_SkillList.prototype.refresh = function() {
|
||
this.makeItemList();
|
||
Window_Selectable.prototype.refresh.call(this);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_EquipStatus
|
||
//
|
||
// The window for displaying parameter changes on the equipment screen.
|
||
|
||
function Window_EquipStatus() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_EquipStatus.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_EquipStatus.prototype.constructor = Window_EquipStatus;
|
||
|
||
Window_EquipStatus.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
this._tempActor = null;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_EquipStatus.prototype.setActor = function(actor) {
|
||
if (this._actor !== actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_EquipStatus.prototype.colSpacing = function() {
|
||
return 0;
|
||
};
|
||
|
||
Window_EquipStatus.prototype.refresh = function() {
|
||
this.contents.clear();
|
||
if (this._actor) {
|
||
const nameRect = this.itemLineRect(0);
|
||
this.drawActorName(this._actor, nameRect.x, 0, nameRect.width);
|
||
this.drawActorFace(this._actor, nameRect.x, nameRect.height);
|
||
this.drawAllParams();
|
||
}
|
||
};
|
||
|
||
Window_EquipStatus.prototype.setTempActor = function(tempActor) {
|
||
if (this._tempActor !== tempActor) {
|
||
this._tempActor = tempActor;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_EquipStatus.prototype.drawAllParams = function() {
|
||
for (let i = 0; i < 6; i++) {
|
||
const x = this.itemPadding();
|
||
const y = this.paramY(i);
|
||
this.drawItem(x, y, 2 + i);
|
||
}
|
||
};
|
||
|
||
Window_EquipStatus.prototype.drawItem = function(x, y, paramId) {
|
||
const paramX = this.paramX();
|
||
const paramWidth = this.paramWidth();
|
||
const rightArrowWidth = this.rightArrowWidth();
|
||
this.drawParamName(x, y, paramId);
|
||
if (this._actor) {
|
||
this.drawCurrentParam(paramX, y, paramId);
|
||
}
|
||
this.drawRightArrow(paramX + paramWidth, y);
|
||
if (this._tempActor) {
|
||
this.drawNewParam(paramX + paramWidth + rightArrowWidth, y, paramId);
|
||
}
|
||
};
|
||
|
||
Window_EquipStatus.prototype.drawParamName = function(x, y, paramId) {
|
||
const width = this.paramX() - this.itemPadding() * 2;
|
||
this.changeTextColor(ColorManager.systemColor());
|
||
this.drawText(TextManager.param(paramId), x, y, width);
|
||
};
|
||
|
||
Window_EquipStatus.prototype.drawCurrentParam = function(x, y, paramId) {
|
||
const paramWidth = this.paramWidth();
|
||
this.resetTextColor();
|
||
this.drawText(this._actor.param(paramId), x, y, paramWidth, "right");
|
||
};
|
||
|
||
Window_EquipStatus.prototype.drawRightArrow = function(x, y) {
|
||
const rightArrowWidth = this.rightArrowWidth();
|
||
this.changeTextColor(ColorManager.systemColor());
|
||
this.drawText("\u2192", x, y, rightArrowWidth, "center");
|
||
};
|
||
|
||
Window_EquipStatus.prototype.drawNewParam = function(x, y, paramId) {
|
||
const paramWidth = this.paramWidth();
|
||
const newValue = this._tempActor.param(paramId);
|
||
const diffvalue = newValue - this._actor.param(paramId);
|
||
this.changeTextColor(ColorManager.paramchangeTextColor(diffvalue));
|
||
this.drawText(newValue, x, y, paramWidth, "right");
|
||
};
|
||
|
||
Window_EquipStatus.prototype.rightArrowWidth = function() {
|
||
return 32;
|
||
};
|
||
|
||
Window_EquipStatus.prototype.paramWidth = function() {
|
||
return 48;
|
||
};
|
||
|
||
Window_EquipStatus.prototype.paramX = function() {
|
||
const itemPadding = this.itemPadding();
|
||
const rightArrowWidth = this.rightArrowWidth();
|
||
const paramWidth = this.paramWidth();
|
||
return this.innerWidth - itemPadding - paramWidth * 2 - rightArrowWidth;
|
||
};
|
||
|
||
Window_EquipStatus.prototype.paramY = function(index) {
|
||
const faceHeight = ImageManager.faceHeight;
|
||
return faceHeight + Math.floor(this.lineHeight() * (index + 1.5));
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_EquipCommand
|
||
//
|
||
// The window for selecting a command on the equipment screen.
|
||
|
||
function Window_EquipCommand() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_EquipCommand.prototype = Object.create(Window_HorzCommand.prototype);
|
||
Window_EquipCommand.prototype.constructor = Window_EquipCommand;
|
||
|
||
Window_EquipCommand.prototype.initialize = function(rect) {
|
||
Window_HorzCommand.prototype.initialize.call(this, rect);
|
||
};
|
||
|
||
Window_EquipCommand.prototype.maxCols = function() {
|
||
return 3;
|
||
};
|
||
|
||
Window_EquipCommand.prototype.makeCommandList = function() {
|
||
this.addCommand(TextManager.equip2, "equip");
|
||
this.addCommand(TextManager.optimize, "optimize");
|
||
this.addCommand(TextManager.clear, "clear");
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_EquipSlot
|
||
//
|
||
// The window for selecting an equipment slot on the equipment screen.
|
||
|
||
function Window_EquipSlot() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_EquipSlot.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_EquipSlot.prototype.constructor = Window_EquipSlot;
|
||
|
||
Window_EquipSlot.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_EquipSlot.prototype.setActor = function(actor) {
|
||
if (this._actor !== actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_EquipSlot.prototype.update = function() {
|
||
Window_StatusBase.prototype.update.call(this);
|
||
if (this._itemWindow) {
|
||
this._itemWindow.setSlotId(this.index());
|
||
}
|
||
};
|
||
|
||
Window_EquipSlot.prototype.maxItems = function() {
|
||
return this._actor ? this._actor.equipSlots().length : 0;
|
||
};
|
||
|
||
Window_EquipSlot.prototype.item = function() {
|
||
return this.itemAt(this.index());
|
||
};
|
||
|
||
Window_EquipSlot.prototype.itemAt = function(index) {
|
||
return this._actor ? this._actor.equips()[index] : null;
|
||
};
|
||
|
||
Window_EquipSlot.prototype.drawItem = function(index) {
|
||
if (this._actor) {
|
||
const slotName = this.actorSlotName(this._actor, index);
|
||
const item = this.itemAt(index);
|
||
const slotNameWidth = this.slotNameWidth();
|
||
const rect = this.itemLineRect(index);
|
||
const itemWidth = rect.width - slotNameWidth;
|
||
this.changeTextColor(ColorManager.systemColor());
|
||
this.changePaintOpacity(this.isEnabled(index));
|
||
this.drawText(slotName, rect.x, rect.y, slotNameWidth, rect.height);
|
||
this.drawItemName(item, rect.x + slotNameWidth, rect.y, itemWidth);
|
||
this.changePaintOpacity(true);
|
||
}
|
||
};
|
||
|
||
Window_EquipSlot.prototype.slotNameWidth = function() {
|
||
return 138;
|
||
};
|
||
|
||
Window_EquipSlot.prototype.isEnabled = function(index) {
|
||
return this._actor ? this._actor.isEquipChangeOk(index) : false;
|
||
};
|
||
|
||
Window_EquipSlot.prototype.isCurrentItemEnabled = function() {
|
||
return this.isEnabled(this.index());
|
||
};
|
||
|
||
Window_EquipSlot.prototype.setStatusWindow = function(statusWindow) {
|
||
this._statusWindow = statusWindow;
|
||
this.callUpdateHelp();
|
||
};
|
||
|
||
Window_EquipSlot.prototype.setItemWindow = function(itemWindow) {
|
||
this._itemWindow = itemWindow;
|
||
};
|
||
|
||
Window_EquipSlot.prototype.updateHelp = function() {
|
||
Window_StatusBase.prototype.updateHelp.call(this);
|
||
this.setHelpWindowItem(this.item());
|
||
if (this._statusWindow) {
|
||
this._statusWindow.setTempActor(null);
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_EquipItem
|
||
//
|
||
// The window for selecting an equipment item on the equipment screen.
|
||
|
||
function Window_EquipItem() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_EquipItem.prototype = Object.create(Window_ItemList.prototype);
|
||
Window_EquipItem.prototype.constructor = Window_EquipItem;
|
||
|
||
Window_EquipItem.prototype.initialize = function(rect) {
|
||
Window_ItemList.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
this._slotId = 0;
|
||
};
|
||
|
||
Window_EquipItem.prototype.maxCols = function() {
|
||
return 1;
|
||
};
|
||
|
||
Window_EquipItem.prototype.colSpacing = function() {
|
||
return 8;
|
||
};
|
||
|
||
Window_EquipItem.prototype.setActor = function(actor) {
|
||
if (this._actor !== actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
this.scrollTo(0, 0);
|
||
}
|
||
};
|
||
|
||
Window_EquipItem.prototype.setSlotId = function(slotId) {
|
||
if (this._slotId !== slotId) {
|
||
this._slotId = slotId;
|
||
this.refresh();
|
||
this.scrollTo(0, 0);
|
||
}
|
||
};
|
||
|
||
Window_EquipItem.prototype.includes = function(item) {
|
||
if (item === null) {
|
||
return true;
|
||
}
|
||
return (
|
||
this._actor &&
|
||
this._actor.canEquip(item) &&
|
||
item.etypeId === this.etypeId()
|
||
);
|
||
};
|
||
|
||
Window_EquipItem.prototype.etypeId = function() {
|
||
if (this._actor && this._slotId >= 0) {
|
||
return this._actor.equipSlots()[this._slotId];
|
||
} else {
|
||
return 0;
|
||
}
|
||
};
|
||
|
||
Window_EquipItem.prototype.isEnabled = function(/*item*/) {
|
||
return true;
|
||
};
|
||
|
||
Window_EquipItem.prototype.selectLast = function() {
|
||
//
|
||
};
|
||
|
||
Window_EquipItem.prototype.setStatusWindow = function(statusWindow) {
|
||
this._statusWindow = statusWindow;
|
||
this.callUpdateHelp();
|
||
};
|
||
|
||
Window_EquipItem.prototype.updateHelp = function() {
|
||
Window_ItemList.prototype.updateHelp.call(this);
|
||
if (this._actor && this._statusWindow && this._slotId >= 0) {
|
||
const actor = JsonEx.makeDeepCopy(this._actor);
|
||
actor.forceChangeEquip(this._slotId, this.item());
|
||
this._statusWindow.setTempActor(actor);
|
||
}
|
||
};
|
||
|
||
Window_EquipItem.prototype.playOkSound = function() {
|
||
//
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_Status
|
||
//
|
||
// The window for displaying full status on the status screen.
|
||
|
||
function Window_Status() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_Status.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_Status.prototype.constructor = Window_Status;
|
||
|
||
Window_Status.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
this.refresh();
|
||
this.activate();
|
||
};
|
||
|
||
Window_Status.prototype.setActor = function(actor) {
|
||
if (this._actor !== actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_Status.prototype.refresh = function() {
|
||
Window_StatusBase.prototype.refresh.call(this);
|
||
if (this._actor) {
|
||
this.drawBlock1();
|
||
this.drawBlock2();
|
||
}
|
||
};
|
||
|
||
Window_Status.prototype.drawBlock1 = function() {
|
||
const y = this.block1Y();
|
||
this.drawActorName(this._actor, 6, y, 168);
|
||
this.drawActorClass(this._actor, 192, y, 168);
|
||
this.drawActorNickname(this._actor, 432, y, 270);
|
||
};
|
||
|
||
Window_Status.prototype.block1Y = function() {
|
||
return 0;
|
||
};
|
||
|
||
Window_Status.prototype.drawBlock2 = function() {
|
||
const y = this.block2Y();
|
||
this.drawActorFace(this._actor, 12, y);
|
||
this.drawBasicInfo(204, y);
|
||
this.drawExpInfo(456, y);
|
||
};
|
||
|
||
Window_Status.prototype.block2Y = function() {
|
||
const lineHeight = this.lineHeight();
|
||
const min = lineHeight;
|
||
const max = this.innerHeight - lineHeight * 4;
|
||
return Math.floor((lineHeight * 1.4).clamp(min, max));
|
||
};
|
||
|
||
Window_Status.prototype.drawBasicInfo = function(x, y) {
|
||
const lineHeight = this.lineHeight();
|
||
this.drawActorLevel(this._actor, x, y + lineHeight * 0);
|
||
this.drawActorIcons(this._actor, x, y + lineHeight * 1);
|
||
this.placeBasicGauges(this._actor, x, y + lineHeight * 2);
|
||
};
|
||
|
||
Window_Status.prototype.drawExpInfo = function(x, y) {
|
||
const lineHeight = this.lineHeight();
|
||
const expTotal = TextManager.expTotal.format(TextManager.exp);
|
||
const expNext = TextManager.expNext.format(TextManager.level);
|
||
this.changeTextColor(ColorManager.systemColor());
|
||
this.drawText(expTotal, x, y + lineHeight * 0, 270);
|
||
this.drawText(expNext, x, y + lineHeight * 2, 270);
|
||
this.resetTextColor();
|
||
this.drawText(this.expTotalValue(), x, y + lineHeight * 1, 270, "right");
|
||
this.drawText(this.expNextValue(), x, y + lineHeight * 3, 270, "right");
|
||
};
|
||
|
||
Window_Status.prototype.expTotalValue = function() {
|
||
if (this._actor.isMaxLevel()) {
|
||
return "-------";
|
||
} else {
|
||
return this._actor.currentExp();
|
||
}
|
||
};
|
||
|
||
Window_Status.prototype.expNextValue = function() {
|
||
if (this._actor.isMaxLevel()) {
|
||
return "-------";
|
||
} else {
|
||
return this._actor.nextRequiredExp();
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_StatusParams
|
||
//
|
||
// The window for displaying parameters on the status screen.
|
||
|
||
function Window_StatusParams() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_StatusParams.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_StatusParams.prototype.constructor = Window_StatusParams;
|
||
|
||
Window_StatusParams.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
};
|
||
|
||
Window_StatusParams.prototype.setActor = function(actor) {
|
||
if (this._actor !== actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_StatusParams.prototype.maxItems = function() {
|
||
return 6;
|
||
};
|
||
|
||
Window_StatusParams.prototype.itemHeight = function() {
|
||
return this.lineHeight();
|
||
};
|
||
|
||
Window_StatusParams.prototype.drawItem = function(index) {
|
||
const rect = this.itemLineRect(index);
|
||
const paramId = index + 2;
|
||
const name = TextManager.param(paramId);
|
||
const value = this._actor.param(paramId);
|
||
this.changeTextColor(ColorManager.systemColor());
|
||
this.drawText(name, rect.x, rect.y, 160);
|
||
this.resetTextColor();
|
||
this.drawText(value, rect.x + 160, rect.y, 60, "right");
|
||
};
|
||
|
||
Window_StatusParams.prototype.drawItemBackground = function(/*index*/) {
|
||
//
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_StatusEquip
|
||
//
|
||
// The window for displaying equipment items on the status screen.
|
||
|
||
function Window_StatusEquip() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_StatusEquip.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_StatusEquip.prototype.constructor = Window_StatusEquip;
|
||
|
||
Window_StatusEquip.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
};
|
||
|
||
Window_StatusEquip.prototype.setActor = function(actor) {
|
||
if (this._actor !== actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_StatusEquip.prototype.maxItems = function() {
|
||
return this._actor ? this._actor.equipSlots().length : 0;
|
||
};
|
||
|
||
Window_StatusEquip.prototype.itemHeight = function() {
|
||
return this.lineHeight();
|
||
};
|
||
|
||
Window_StatusEquip.prototype.drawItem = function(index) {
|
||
const rect = this.itemLineRect(index);
|
||
const equips = this._actor.equips();
|
||
const item = equips[index];
|
||
const slotName = this.actorSlotName(this._actor, index);
|
||
const sw = 138;
|
||
this.changeTextColor(ColorManager.systemColor());
|
||
this.drawText(slotName, rect.x, rect.y, sw, rect.height);
|
||
this.drawItemName(item, rect.x + sw, rect.y, rect.width - sw);
|
||
};
|
||
|
||
Window_StatusEquip.prototype.drawItemBackground = function(/*index*/) {
|
||
//
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_Options
|
||
//
|
||
// The window for changing various settings on the options screen.
|
||
|
||
function Window_Options() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_Options.prototype = Object.create(Window_Command.prototype);
|
||
Window_Options.prototype.constructor = Window_Options;
|
||
|
||
Window_Options.prototype.initialize = function(rect) {
|
||
Window_Command.prototype.initialize.call(this, rect);
|
||
};
|
||
|
||
Window_Options.prototype.makeCommandList = function() {
|
||
this.addGeneralOptions();
|
||
this.addVolumeOptions();
|
||
};
|
||
|
||
Window_Options.prototype.addGeneralOptions = function() {
|
||
this.addCommand(TextManager.alwaysDash, "alwaysDash");
|
||
this.addCommand(TextManager.commandRemember, "commandRemember");
|
||
this.addCommand(TextManager.touchUI, "touchUI");
|
||
};
|
||
|
||
Window_Options.prototype.addVolumeOptions = function() {
|
||
this.addCommand(TextManager.bgmVolume, "bgmVolume");
|
||
this.addCommand(TextManager.bgsVolume, "bgsVolume");
|
||
this.addCommand(TextManager.meVolume, "meVolume");
|
||
this.addCommand(TextManager.seVolume, "seVolume");
|
||
};
|
||
|
||
Window_Options.prototype.drawItem = function(index) {
|
||
const title = this.commandName(index);
|
||
const status = this.statusText(index);
|
||
const rect = this.itemLineRect(index);
|
||
const statusWidth = this.statusWidth();
|
||
const titleWidth = rect.width - statusWidth;
|
||
this.resetTextColor();
|
||
this.changePaintOpacity(this.isCommandEnabled(index));
|
||
this.drawText(title, rect.x, rect.y, titleWidth, "left");
|
||
this.drawText(status, rect.x + titleWidth, rect.y, statusWidth, "right");
|
||
};
|
||
|
||
Window_Options.prototype.statusWidth = function() {
|
||
return 120;
|
||
};
|
||
|
||
Window_Options.prototype.statusText = function(index) {
|
||
const symbol = this.commandSymbol(index);
|
||
const value = this.getConfigValue(symbol);
|
||
if (this.isVolumeSymbol(symbol)) {
|
||
return this.volumeStatusText(value);
|
||
} else {
|
||
return this.booleanStatusText(value);
|
||
}
|
||
};
|
||
|
||
Window_Options.prototype.isVolumeSymbol = function(symbol) {
|
||
return symbol.includes("Volume");
|
||
};
|
||
|
||
Window_Options.prototype.booleanStatusText = function(value) {
|
||
return value ? "ON" : "OFF";
|
||
};
|
||
|
||
Window_Options.prototype.volumeStatusText = function(value) {
|
||
return value + "%";
|
||
};
|
||
|
||
Window_Options.prototype.processOk = function() {
|
||
const index = this.index();
|
||
const symbol = this.commandSymbol(index);
|
||
if (this.isVolumeSymbol(symbol)) {
|
||
this.changeVolume(symbol, true, true);
|
||
} else {
|
||
this.changeValue(symbol, !this.getConfigValue(symbol));
|
||
}
|
||
};
|
||
|
||
Window_Options.prototype.cursorRight = function() {
|
||
const index = this.index();
|
||
const symbol = this.commandSymbol(index);
|
||
if (this.isVolumeSymbol(symbol)) {
|
||
this.changeVolume(symbol, true, false);
|
||
} else {
|
||
this.changeValue(symbol, true);
|
||
}
|
||
};
|
||
|
||
Window_Options.prototype.cursorLeft = function() {
|
||
const index = this.index();
|
||
const symbol = this.commandSymbol(index);
|
||
if (this.isVolumeSymbol(symbol)) {
|
||
this.changeVolume(symbol, false, false);
|
||
} else {
|
||
this.changeValue(symbol, false);
|
||
}
|
||
};
|
||
|
||
Window_Options.prototype.changeVolume = function(symbol, forward, wrap) {
|
||
const lastValue = this.getConfigValue(symbol);
|
||
const offset = this.volumeOffset();
|
||
const value = lastValue + (forward ? offset : -offset);
|
||
if (value > 100 && wrap) {
|
||
this.changeValue(symbol, 0);
|
||
} else {
|
||
this.changeValue(symbol, value.clamp(0, 100));
|
||
}
|
||
};
|
||
|
||
Window_Options.prototype.volumeOffset = function() {
|
||
return 20;
|
||
};
|
||
|
||
Window_Options.prototype.changeValue = function(symbol, value) {
|
||
const lastValue = this.getConfigValue(symbol);
|
||
if (lastValue !== value) {
|
||
this.setConfigValue(symbol, value);
|
||
this.redrawItem(this.findSymbol(symbol));
|
||
this.playCursorSound();
|
||
}
|
||
};
|
||
|
||
Window_Options.prototype.getConfigValue = function(symbol) {
|
||
return ConfigManager[symbol];
|
||
};
|
||
|
||
Window_Options.prototype.setConfigValue = function(symbol, volume) {
|
||
ConfigManager[symbol] = volume;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_SavefileList
|
||
//
|
||
// The window for selecting a save file on the save and load screens.
|
||
|
||
function Window_SavefileList() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_SavefileList.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_SavefileList.prototype.constructor = Window_SavefileList;
|
||
|
||
Window_SavefileList.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this.activate();
|
||
this._mode = null;
|
||
this._autosave = false;
|
||
};
|
||
|
||
Window_SavefileList.prototype.setMode = function(mode, autosave) {
|
||
this._mode = mode;
|
||
this._autosave = autosave;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_SavefileList.prototype.maxItems = function() {
|
||
return DataManager.maxSavefiles() - (this._autosave ? 0 : 1);
|
||
};
|
||
|
||
Window_SavefileList.prototype.numVisibleRows = function() {
|
||
return 5;
|
||
};
|
||
|
||
Window_SavefileList.prototype.itemHeight = function() {
|
||
return Math.floor(this.innerHeight / this.numVisibleRows());
|
||
};
|
||
|
||
Window_SavefileList.prototype.drawItem = function(index) {
|
||
const savefileId = this.indexToSavefileId(index);
|
||
const info = DataManager.savefileInfo(savefileId);
|
||
const rect = this.itemRectWithPadding(index);
|
||
this.resetTextColor();
|
||
this.changePaintOpacity(this.isEnabled(savefileId));
|
||
this.drawTitle(savefileId, rect.x, rect.y + 4);
|
||
if (info) {
|
||
this.drawContents(info, rect);
|
||
}
|
||
};
|
||
|
||
Window_SavefileList.prototype.indexToSavefileId = function(index) {
|
||
return index + (this._autosave ? 0 : 1);
|
||
};
|
||
|
||
Window_SavefileList.prototype.savefileIdToIndex = function(savefileId) {
|
||
return savefileId - (this._autosave ? 0 : 1);
|
||
};
|
||
|
||
Window_SavefileList.prototype.isEnabled = function(savefileId) {
|
||
if (this._mode === "save") {
|
||
return savefileId > 0;
|
||
} else {
|
||
return !!DataManager.savefileInfo(savefileId);
|
||
}
|
||
};
|
||
|
||
Window_SavefileList.prototype.savefileId = function() {
|
||
return this.indexToSavefileId(this.index());
|
||
};
|
||
|
||
Window_SavefileList.prototype.selectSavefile = function(savefileId) {
|
||
const index = Math.max(0, this.savefileIdToIndex(savefileId));
|
||
this.select(index);
|
||
this.setTopRow(index - 2);
|
||
};
|
||
|
||
Window_SavefileList.prototype.drawTitle = function(savefileId, x, y) {
|
||
if (savefileId === 0) {
|
||
this.drawText(TextManager.autosave, x, y, 180);
|
||
} else {
|
||
this.drawText(TextManager.file + " " + savefileId, x, y, 180);
|
||
}
|
||
};
|
||
|
||
Window_SavefileList.prototype.drawContents = function(info, rect) {
|
||
const bottom = rect.y + rect.height;
|
||
if (rect.width >= 420) {
|
||
this.drawPartyCharacters(info, rect.x + 220, bottom - 8);
|
||
}
|
||
const lineHeight = this.lineHeight();
|
||
const y2 = bottom - lineHeight - 4;
|
||
if (y2 >= lineHeight) {
|
||
this.drawPlaytime(info, rect.x, y2, rect.width);
|
||
}
|
||
};
|
||
|
||
Window_SavefileList.prototype.drawPartyCharacters = function(info, x, y) {
|
||
if (info.characters) {
|
||
let characterX = x;
|
||
for (const data of info.characters) {
|
||
this.drawCharacter(data[0], data[1], characterX, y);
|
||
characterX += 48;
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_SavefileList.prototype.drawPlaytime = function(info, x, y, width) {
|
||
if (info.playtime) {
|
||
this.drawText(info.playtime, x, y, width, "right");
|
||
}
|
||
};
|
||
|
||
Window_SavefileList.prototype.playOkSound = function() {
|
||
//
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ShopCommand
|
||
//
|
||
// The window for selecting buy/sell on the shop screen.
|
||
|
||
function Window_ShopCommand() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ShopCommand.prototype = Object.create(Window_HorzCommand.prototype);
|
||
Window_ShopCommand.prototype.constructor = Window_ShopCommand;
|
||
|
||
Window_ShopCommand.prototype.initialize = function(rect) {
|
||
Window_HorzCommand.prototype.initialize.call(this, rect);
|
||
};
|
||
|
||
Window_ShopCommand.prototype.setPurchaseOnly = function(purchaseOnly) {
|
||
this._purchaseOnly = purchaseOnly;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_ShopCommand.prototype.maxCols = function() {
|
||
return 3;
|
||
};
|
||
|
||
Window_ShopCommand.prototype.makeCommandList = function() {
|
||
this.addCommand(TextManager.buy, "buy");
|
||
this.addCommand(TextManager.sell, "sell", !this._purchaseOnly);
|
||
this.addCommand(TextManager.cancel, "cancel");
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ShopBuy
|
||
//
|
||
// The window for selecting an item to buy on the shop screen.
|
||
|
||
function Window_ShopBuy() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ShopBuy.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_ShopBuy.prototype.constructor = Window_ShopBuy;
|
||
|
||
Window_ShopBuy.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this._money = 0;
|
||
};
|
||
|
||
Window_ShopBuy.prototype.setupGoods = function(shopGoods) {
|
||
this._shopGoods = shopGoods;
|
||
this.refresh();
|
||
this.select(0);
|
||
};
|
||
|
||
Window_ShopBuy.prototype.maxItems = function() {
|
||
return this._data ? this._data.length : 1;
|
||
};
|
||
|
||
Window_ShopBuy.prototype.item = function() {
|
||
return this.itemAt(this.index());
|
||
};
|
||
|
||
Window_ShopBuy.prototype.itemAt = function(index) {
|
||
return this._data && index >= 0 ? this._data[index] : null;
|
||
};
|
||
|
||
Window_ShopBuy.prototype.setMoney = function(money) {
|
||
this._money = money;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_ShopBuy.prototype.isCurrentItemEnabled = function() {
|
||
return this.isEnabled(this._data[this.index()]);
|
||
};
|
||
|
||
Window_ShopBuy.prototype.price = function(item) {
|
||
return this._price[this._data.indexOf(item)] || 0;
|
||
};
|
||
|
||
Window_ShopBuy.prototype.isEnabled = function(item) {
|
||
return (
|
||
item && this.price(item) <= this._money && !$gameParty.hasMaxItems(item)
|
||
);
|
||
};
|
||
|
||
Window_ShopBuy.prototype.refresh = function() {
|
||
this.makeItemList();
|
||
Window_Selectable.prototype.refresh.call(this);
|
||
};
|
||
|
||
Window_ShopBuy.prototype.makeItemList = function() {
|
||
this._data = [];
|
||
this._price = [];
|
||
for (const goods of this._shopGoods) {
|
||
const item = this.goodsToItem(goods);
|
||
if (item) {
|
||
this._data.push(item);
|
||
this._price.push(goods[2] === 0 ? item.price : goods[3]);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_ShopBuy.prototype.goodsToItem = function(goods) {
|
||
switch (goods[0]) {
|
||
case 0:
|
||
return $dataItems[goods[1]];
|
||
case 1:
|
||
return $dataWeapons[goods[1]];
|
||
case 2:
|
||
return $dataArmors[goods[1]];
|
||
default:
|
||
return null;
|
||
}
|
||
};
|
||
|
||
Window_ShopBuy.prototype.drawItem = function(index) {
|
||
const item = this.itemAt(index);
|
||
const price = this.price(item);
|
||
const rect = this.itemLineRect(index);
|
||
const priceWidth = this.priceWidth();
|
||
const priceX = rect.x + rect.width - priceWidth;
|
||
const nameWidth = rect.width - priceWidth;
|
||
this.changePaintOpacity(this.isEnabled(item));
|
||
this.drawItemName(item, rect.x, rect.y, nameWidth);
|
||
this.drawText(price, priceX, rect.y, priceWidth, "right");
|
||
this.changePaintOpacity(true);
|
||
};
|
||
|
||
Window_ShopBuy.prototype.priceWidth = function() {
|
||
return 96;
|
||
};
|
||
|
||
Window_ShopBuy.prototype.setStatusWindow = function(statusWindow) {
|
||
this._statusWindow = statusWindow;
|
||
this.callUpdateHelp();
|
||
};
|
||
|
||
Window_ShopBuy.prototype.updateHelp = function() {
|
||
this.setHelpWindowItem(this.item());
|
||
if (this._statusWindow) {
|
||
this._statusWindow.setItem(this.item());
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ShopSell
|
||
//
|
||
// The window for selecting an item to sell on the shop screen.
|
||
|
||
function Window_ShopSell() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ShopSell.prototype = Object.create(Window_ItemList.prototype);
|
||
Window_ShopSell.prototype.constructor = Window_ShopSell;
|
||
|
||
Window_ShopSell.prototype.initialize = function(rect) {
|
||
Window_ItemList.prototype.initialize.call(this, rect);
|
||
};
|
||
|
||
Window_ShopSell.prototype.isEnabled = function(item) {
|
||
return item && item.price > 0;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ShopNumber
|
||
//
|
||
// The window for inputting quantity of items to buy or sell on the shop
|
||
// screen.
|
||
|
||
function Window_ShopNumber() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ShopNumber.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_ShopNumber.prototype.constructor = Window_ShopNumber;
|
||
|
||
Window_ShopNumber.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this._item = null;
|
||
this._max = 1;
|
||
this._price = 0;
|
||
this._number = 1;
|
||
this._currencyUnit = TextManager.currencyUnit;
|
||
this.createButtons();
|
||
this.select(0);
|
||
this._canRepeat = false;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.isScrollEnabled = function() {
|
||
return false;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.number = function() {
|
||
return this._number;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.setup = function(item, max, price) {
|
||
this._item = item;
|
||
this._max = Math.floor(max);
|
||
this._price = price;
|
||
this._number = 1;
|
||
this.placeButtons();
|
||
this.refresh();
|
||
};
|
||
|
||
Window_ShopNumber.prototype.setCurrencyUnit = function(currencyUnit) {
|
||
this._currencyUnit = currencyUnit;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_ShopNumber.prototype.createButtons = function() {
|
||
this._buttons = [];
|
||
if (ConfigManager.touchUI) {
|
||
for (const type of ["down2", "down", "up", "up2", "ok"]) {
|
||
const button = new Sprite_Button(type);
|
||
this._buttons.push(button);
|
||
this.addInnerChild(button);
|
||
}
|
||
this._buttons[0].setClickHandler(this.onButtonDown2.bind(this));
|
||
this._buttons[1].setClickHandler(this.onButtonDown.bind(this));
|
||
this._buttons[2].setClickHandler(this.onButtonUp.bind(this));
|
||
this._buttons[3].setClickHandler(this.onButtonUp2.bind(this));
|
||
this._buttons[4].setClickHandler(this.onButtonOk.bind(this));
|
||
}
|
||
};
|
||
|
||
Window_ShopNumber.prototype.placeButtons = function() {
|
||
const sp = this.buttonSpacing();
|
||
const totalWidth = this.totalButtonWidth();
|
||
let x = (this.innerWidth - totalWidth) / 2;
|
||
for (const button of this._buttons) {
|
||
button.x = x;
|
||
button.y = this.buttonY();
|
||
x += button.width + sp;
|
||
}
|
||
};
|
||
|
||
Window_ShopNumber.prototype.totalButtonWidth = function() {
|
||
const sp = this.buttonSpacing();
|
||
return this._buttons.reduce((r, button) => r + button.width + sp, -sp);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.buttonSpacing = function() {
|
||
return 8;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.refresh = function() {
|
||
Window_Selectable.prototype.refresh.call(this);
|
||
this.drawItemBackground(0);
|
||
this.drawCurrentItemName();
|
||
this.drawMultiplicationSign();
|
||
this.drawNumber();
|
||
this.drawHorzLine();
|
||
this.drawTotalPrice();
|
||
};
|
||
|
||
Window_ShopNumber.prototype.drawCurrentItemName = function() {
|
||
const padding = this.itemPadding();
|
||
const x = padding * 2;
|
||
const y = this.itemNameY();
|
||
const width = this.multiplicationSignX() - padding * 3;
|
||
this.drawItemName(this._item, x, y, width);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.drawMultiplicationSign = function() {
|
||
const sign = this.multiplicationSign();
|
||
const width = this.textWidth(sign);
|
||
const x = this.multiplicationSignX();
|
||
const y = this.itemNameY();
|
||
this.resetTextColor();
|
||
this.drawText(sign, x, y, width);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.multiplicationSign = function() {
|
||
return "\u00d7";
|
||
};
|
||
|
||
Window_ShopNumber.prototype.multiplicationSignX = function() {
|
||
const sign = this.multiplicationSign();
|
||
const width = this.textWidth(sign);
|
||
return this.cursorX() - width * 2;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.drawNumber = function() {
|
||
const x = this.cursorX();
|
||
const y = this.itemNameY();
|
||
const width = this.cursorWidth() - this.itemPadding();
|
||
this.resetTextColor();
|
||
this.drawText(this._number, x, y, width, "right");
|
||
};
|
||
|
||
Window_ShopNumber.prototype.drawHorzLine = function() {
|
||
const padding = this.itemPadding();
|
||
const lineHeight = this.lineHeight();
|
||
const itemY = this.itemNameY();
|
||
const totalY = this.totalPriceY();
|
||
const x = padding;
|
||
const y = Math.floor((itemY + totalY + lineHeight) / 2);
|
||
const width = this.innerWidth - padding * 2;
|
||
this.drawRect(x, y, width, 5);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.drawTotalPrice = function() {
|
||
const padding = this.itemPadding();
|
||
const total = this._price * this._number;
|
||
const width = this.innerWidth - padding * 2;
|
||
const y = this.totalPriceY();
|
||
this.drawCurrencyValue(total, this._currencyUnit, 0, y, width);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.itemNameY = function() {
|
||
return Math.floor(this.innerHeight / 2 - this.lineHeight() * 1.5);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.totalPriceY = function() {
|
||
return Math.floor(this.itemNameY() + this.lineHeight() * 2);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.buttonY = function() {
|
||
return Math.floor(this.totalPriceY() + this.lineHeight() * 2);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.cursorWidth = function() {
|
||
const padding = this.itemPadding();
|
||
const digitWidth = this.textWidth("0");
|
||
return this.maxDigits() * digitWidth + padding * 2;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.cursorX = function() {
|
||
const padding = this.itemPadding();
|
||
return this.innerWidth - this.cursorWidth() - padding * 2;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.maxDigits = function() {
|
||
return 2;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.update = function() {
|
||
Window_Selectable.prototype.update.call(this);
|
||
this.processNumberChange();
|
||
};
|
||
|
||
Window_ShopNumber.prototype.playOkSound = function() {
|
||
//
|
||
};
|
||
|
||
Window_ShopNumber.prototype.processNumberChange = function() {
|
||
if (this.isOpenAndActive()) {
|
||
if (Input.isRepeated("right")) {
|
||
this.changeNumber(1);
|
||
}
|
||
if (Input.isRepeated("left")) {
|
||
this.changeNumber(-1);
|
||
}
|
||
if (Input.isRepeated("up")) {
|
||
this.changeNumber(10);
|
||
}
|
||
if (Input.isRepeated("down")) {
|
||
this.changeNumber(-10);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_ShopNumber.prototype.changeNumber = function(amount) {
|
||
const lastNumber = this._number;
|
||
this._number = (this._number + amount).clamp(1, this._max);
|
||
if (this._number !== lastNumber) {
|
||
this.playCursorSound();
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_ShopNumber.prototype.itemRect = function() {
|
||
const rect = new Rectangle();
|
||
rect.x = this.cursorX();
|
||
rect.y = this.itemNameY();
|
||
rect.width = this.cursorWidth();
|
||
rect.height = this.lineHeight();
|
||
return rect;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.isTouchOkEnabled = function() {
|
||
return false;
|
||
};
|
||
|
||
Window_ShopNumber.prototype.onButtonUp = function() {
|
||
this.changeNumber(1);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.onButtonUp2 = function() {
|
||
this.changeNumber(10);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.onButtonDown = function() {
|
||
this.changeNumber(-1);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.onButtonDown2 = function() {
|
||
this.changeNumber(-10);
|
||
};
|
||
|
||
Window_ShopNumber.prototype.onButtonOk = function() {
|
||
this.processOk();
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ShopStatus
|
||
//
|
||
// The window for displaying number of items in possession and the actor's
|
||
// equipment on the shop screen.
|
||
|
||
function Window_ShopStatus() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ShopStatus.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_ShopStatus.prototype.constructor = Window_ShopStatus;
|
||
|
||
Window_ShopStatus.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this._item = null;
|
||
this._pageIndex = 0;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_ShopStatus.prototype.refresh = function() {
|
||
this.contents.clear();
|
||
if (this._item) {
|
||
const x = this.itemPadding();
|
||
this.drawPossession(x, 0);
|
||
if (this.isEquipItem()) {
|
||
const y = Math.floor(this.lineHeight() * 1.5);
|
||
this.drawEquipInfo(x, y);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_ShopStatus.prototype.setItem = function(item) {
|
||
this._item = item;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_ShopStatus.prototype.isEquipItem = function() {
|
||
return DataManager.isWeapon(this._item) || DataManager.isArmor(this._item);
|
||
};
|
||
|
||
Window_ShopStatus.prototype.drawPossession = function(x, y) {
|
||
const width = this.innerWidth - this.itemPadding() - x;
|
||
const possessionWidth = this.textWidth("0000");
|
||
this.changeTextColor(ColorManager.systemColor());
|
||
this.drawText(TextManager.possession, x, y, width - possessionWidth);
|
||
this.resetTextColor();
|
||
this.drawText($gameParty.numItems(this._item), x, y, width, "right");
|
||
};
|
||
|
||
Window_ShopStatus.prototype.drawEquipInfo = function(x, y) {
|
||
const members = this.statusMembers();
|
||
for (let i = 0; i < members.length; i++) {
|
||
const actorY = y + Math.floor(this.lineHeight() * i * 2.2);
|
||
this.drawActorEquipInfo(x, actorY, members[i]);
|
||
}
|
||
};
|
||
|
||
Window_ShopStatus.prototype.statusMembers = function() {
|
||
const start = this._pageIndex * this.pageSize();
|
||
const end = start + this.pageSize();
|
||
return $gameParty.members().slice(start, end);
|
||
};
|
||
|
||
Window_ShopStatus.prototype.pageSize = function() {
|
||
return 4;
|
||
};
|
||
|
||
Window_ShopStatus.prototype.maxPages = function() {
|
||
return Math.floor(
|
||
($gameParty.size() + this.pageSize() - 1) / this.pageSize()
|
||
);
|
||
};
|
||
|
||
Window_ShopStatus.prototype.drawActorEquipInfo = function(x, y, actor) {
|
||
const item1 = this.currentEquippedItem(actor, this._item.etypeId);
|
||
const width = this.innerWidth - x - this.itemPadding();
|
||
const enabled = actor.canEquip(this._item);
|
||
this.changePaintOpacity(enabled);
|
||
this.resetTextColor();
|
||
this.drawText(actor.name(), x, y, width);
|
||
if (enabled) {
|
||
this.drawActorParamChange(x, y, actor, item1);
|
||
}
|
||
this.drawItemName(item1, x, y + this.lineHeight(), width);
|
||
this.changePaintOpacity(true);
|
||
};
|
||
|
||
// prettier-ignore
|
||
Window_ShopStatus.prototype.drawActorParamChange = function(
|
||
x, y, actor, item1
|
||
) {
|
||
const width = this.innerWidth - this.itemPadding() - x;
|
||
const paramId = this.paramId();
|
||
const change =
|
||
this._item.params[paramId] - (item1 ? item1.params[paramId] : 0);
|
||
this.changeTextColor(ColorManager.paramchangeTextColor(change));
|
||
this.drawText((change > 0 ? "+" : "") + change, x, y, width, "right");
|
||
};
|
||
|
||
Window_ShopStatus.prototype.paramId = function() {
|
||
return DataManager.isWeapon(this._item) ? 2 : 3;
|
||
};
|
||
|
||
Window_ShopStatus.prototype.currentEquippedItem = function(actor, etypeId) {
|
||
const list = [];
|
||
const equips = actor.equips();
|
||
const slots = actor.equipSlots();
|
||
for (let i = 0; i < slots.length; i++) {
|
||
if (slots[i] === etypeId) {
|
||
list.push(equips[i]);
|
||
}
|
||
}
|
||
const paramId = this.paramId();
|
||
let worstParam = Number.MAX_VALUE;
|
||
let worstItem = null;
|
||
for (const item of list) {
|
||
if (item && item.params[paramId] < worstParam) {
|
||
worstParam = item.params[paramId];
|
||
worstItem = item;
|
||
}
|
||
}
|
||
return worstItem;
|
||
};
|
||
|
||
Window_ShopStatus.prototype.update = function() {
|
||
Window_StatusBase.prototype.update.call(this);
|
||
this.updatePage();
|
||
};
|
||
|
||
Window_ShopStatus.prototype.updatePage = function() {
|
||
if (this.isPageChangeEnabled() && this.isPageChangeRequested()) {
|
||
this.changePage();
|
||
}
|
||
};
|
||
|
||
Window_ShopStatus.prototype.isPageChangeEnabled = function() {
|
||
return this.visible && this.maxPages() >= 2;
|
||
};
|
||
|
||
Window_ShopStatus.prototype.isPageChangeRequested = function() {
|
||
if (Input.isTriggered("shift")) {
|
||
return true;
|
||
}
|
||
if (TouchInput.isTriggered() && this.isTouchedInsideFrame()) {
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
|
||
Window_ShopStatus.prototype.changePage = function() {
|
||
this._pageIndex = (this._pageIndex + 1) % this.maxPages();
|
||
this.refresh();
|
||
this.playCursorSound();
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_NameEdit
|
||
//
|
||
// The window for editing an actor's name on the name input screen.
|
||
|
||
function Window_NameEdit() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_NameEdit.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_NameEdit.prototype.constructor = Window_NameEdit;
|
||
|
||
Window_NameEdit.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this._actor = null;
|
||
this._maxLength = 0;
|
||
this._name = "";
|
||
this._index = 0;
|
||
this._defaultName = 0;
|
||
this.deactivate();
|
||
};
|
||
|
||
Window_NameEdit.prototype.setup = function(actor, maxLength) {
|
||
this._actor = actor;
|
||
this._maxLength = maxLength;
|
||
this._name = actor.name().slice(0, this._maxLength);
|
||
this._index = this._name.length;
|
||
this._defaultName = this._name;
|
||
ImageManager.loadFace(actor.faceName());
|
||
};
|
||
|
||
Window_NameEdit.prototype.name = function() {
|
||
return this._name;
|
||
};
|
||
|
||
Window_NameEdit.prototype.restoreDefault = function() {
|
||
this._name = this._defaultName;
|
||
this._index = this._name.length;
|
||
this.refresh();
|
||
return this._name.length > 0;
|
||
};
|
||
|
||
Window_NameEdit.prototype.add = function(ch) {
|
||
if (this._index < this._maxLength) {
|
||
this._name += ch;
|
||
this._index++;
|
||
this.refresh();
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
|
||
Window_NameEdit.prototype.back = function() {
|
||
if (this._index > 0) {
|
||
this._index--;
|
||
this._name = this._name.slice(0, this._index);
|
||
this.refresh();
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
|
||
Window_NameEdit.prototype.faceWidth = function() {
|
||
return 144;
|
||
};
|
||
|
||
Window_NameEdit.prototype.charWidth = function() {
|
||
const text = $gameSystem.isJapanese() ? "\uff21" : "A";
|
||
return this.textWidth(text);
|
||
};
|
||
|
||
Window_NameEdit.prototype.left = function() {
|
||
const nameCenter = (this.innerWidth + this.faceWidth()) / 2;
|
||
const nameWidth = (this._maxLength + 1) * this.charWidth();
|
||
return Math.min(nameCenter - nameWidth / 2, this.innerWidth - nameWidth);
|
||
};
|
||
|
||
Window_NameEdit.prototype.itemRect = function(index) {
|
||
const x = this.left() + index * this.charWidth();
|
||
const y = 54;
|
||
const width = this.charWidth();
|
||
const height = this.lineHeight();
|
||
return new Rectangle(x, y, width, height);
|
||
};
|
||
|
||
Window_NameEdit.prototype.underlineRect = function(index) {
|
||
const rect = this.itemRect(index);
|
||
rect.x++;
|
||
rect.y += rect.height - 4;
|
||
rect.width -= 2;
|
||
rect.height = 2;
|
||
return rect;
|
||
};
|
||
|
||
Window_NameEdit.prototype.underlineColor = function() {
|
||
return ColorManager.normalColor();
|
||
};
|
||
|
||
Window_NameEdit.prototype.drawUnderline = function(index) {
|
||
const rect = this.underlineRect(index);
|
||
const color = this.underlineColor();
|
||
this.contents.paintOpacity = 48;
|
||
this.contents.fillRect(rect.x, rect.y, rect.width, rect.height, color);
|
||
this.contents.paintOpacity = 255;
|
||
};
|
||
|
||
Window_NameEdit.prototype.drawChar = function(index) {
|
||
const rect = this.itemRect(index);
|
||
this.resetTextColor();
|
||
this.drawText(this._name[index] || "", rect.x, rect.y);
|
||
};
|
||
|
||
Window_NameEdit.prototype.refresh = function() {
|
||
this.contents.clear();
|
||
this.drawActorFace(this._actor, 0, 0);
|
||
for (let i = 0; i < this._maxLength; i++) {
|
||
this.drawUnderline(i);
|
||
}
|
||
for (let j = 0; j < this._name.length; j++) {
|
||
this.drawChar(j);
|
||
}
|
||
const rect = this.itemRect(this._index);
|
||
this.setCursorRect(rect.x, rect.y, rect.width, rect.height);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_NameInput
|
||
//
|
||
// The window for selecting text characters on the name input screen.
|
||
|
||
function Window_NameInput() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_NameInput.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_NameInput.prototype.constructor = Window_NameInput;
|
||
|
||
// prettier-ignore
|
||
Window_NameInput.LATIN1 =
|
||
[ "A","B","C","D","E", "a","b","c","d","e",
|
||
"F","G","H","I","J", "f","g","h","i","j",
|
||
"K","L","M","N","O", "k","l","m","n","o",
|
||
"P","Q","R","S","T", "p","q","r","s","t",
|
||
"U","V","W","X","Y", "u","v","w","x","y",
|
||
"Z","[","]","^","_", "z","{","}","|","~",
|
||
"0","1","2","3","4", "!","#","$","%","&",
|
||
"5","6","7","8","9", "(",")","*","+","-",
|
||
"/","=","@","<",">", ":",";"," ","Page","OK" ];
|
||
// prettier-ignore
|
||
Window_NameInput.LATIN2 =
|
||
[ "Á","É","Í","Ó","Ú", "á","é","í","ó","ú",
|
||
"À","È","Ì","Ò","Ù", "à","è","ì","ò","ù",
|
||
"Â","Ê","Î","Ô","Û", "â","ê","î","ô","û",
|
||
"Ä","Ë","Ï","Ö","Ü", "ä","ë","ï","ö","ü",
|
||
"Ā","Ē","Ī","Ō","Ū", "ā","ē","ī","ō","ū",
|
||
"Ã","Å","Æ","Ç","Ð", "ã","å","æ","ç","ð",
|
||
"Ñ","Õ","Ø","Š","Ŵ", "ñ","õ","ø","š","ŵ",
|
||
"Ý","Ŷ","Ÿ","Ž","Þ", "ý","ÿ","ŷ","ž","þ",
|
||
"IJ","Œ","ij","œ","ß", "«","»"," ","Page","OK" ];
|
||
// prettier-ignore
|
||
Window_NameInput.RUSSIA =
|
||
[ "А","Б","В","Г","Д", "а","б","в","г","д",
|
||
"Е","Ё","Ж","З","И", "е","ё","ж","з","и",
|
||
"Й","К","Л","М","Н", "й","к","л","м","н",
|
||
"О","П","Р","С","Т", "о","п","р","с","т",
|
||
"У","Ф","Х","Ц","Ч", "у","ф","х","ц","ч",
|
||
"Ш","Щ","Ъ","Ы","Ь", "ш","щ","ъ","ы","ь",
|
||
"Э","Ю","Я","^","_", "э","ю","я","%","&",
|
||
"0","1","2","3","4", "(",")","*","+","-",
|
||
"5","6","7","8","9", ":",";"," ","","OK" ];
|
||
// prettier-ignore
|
||
Window_NameInput.JAPAN1 =
|
||
[ "あ","い","う","え","お", "が","ぎ","ぐ","げ","ご",
|
||
"か","き","く","け","こ", "ざ","じ","ず","ぜ","ぞ",
|
||
"さ","し","す","せ","そ", "だ","ぢ","づ","で","ど",
|
||
"た","ち","つ","て","と", "ば","び","ぶ","べ","ぼ",
|
||
"な","に","ぬ","ね","の", "ぱ","ぴ","ぷ","ぺ","ぽ",
|
||
"は","ひ","ふ","へ","ほ", "ぁ","ぃ","ぅ","ぇ","ぉ",
|
||
"ま","み","む","め","も", "っ","ゃ","ゅ","ょ","ゎ",
|
||
"や","ゆ","よ","わ","ん", "ー","~","・","=","☆",
|
||
"ら","り","る","れ","ろ", "ゔ","を"," ","カナ","決定" ];
|
||
// prettier-ignore
|
||
Window_NameInput.JAPAN2 =
|
||
[ "ア","イ","ウ","エ","オ", "ガ","ギ","グ","ゲ","ゴ",
|
||
"カ","キ","ク","ケ","コ", "ザ","ジ","ズ","ゼ","ゾ",
|
||
"サ","シ","ス","セ","ソ", "ダ","ヂ","ヅ","デ","ド",
|
||
"タ","チ","ツ","テ","ト", "バ","ビ","ブ","ベ","ボ",
|
||
"ナ","ニ","ヌ","ネ","ノ", "パ","ピ","プ","ペ","ポ",
|
||
"ハ","ヒ","フ","ヘ","ホ", "ァ","ィ","ゥ","ェ","ォ",
|
||
"マ","ミ","ム","メ","モ", "ッ","ャ","ュ","ョ","ヮ",
|
||
"ヤ","ユ","ヨ","ワ","ン", "ー","~","・","=","☆",
|
||
"ラ","リ","ル","レ","ロ", "ヴ","ヲ"," ","英数","決定" ];
|
||
// prettier-ignore
|
||
Window_NameInput.JAPAN3 =
|
||
[ "A","B","C","D","E", "a","b","c","d","e",
|
||
"F","G","H","I","J", "f","g","h","i","j",
|
||
"K","L","M","N","O", "k","l","m","n","o",
|
||
"P","Q","R","S","T", "p","q","r","s","t",
|
||
"U","V","W","X","Y", "u","v","w","x","y",
|
||
"Z","[","]","^","_", "z","{","}","|","~",
|
||
"0","1","2","3","4", "!","#","$","%","&",
|
||
"5","6","7","8","9", "(",")","*","+","-",
|
||
"/","=","@","<",">", ":",";"," ","かな","決定" ];
|
||
|
||
Window_NameInput.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this._editWindow = null;
|
||
this._page = 0;
|
||
this._index = 0;
|
||
};
|
||
|
||
Window_NameInput.prototype.setEditWindow = function(editWindow) {
|
||
this._editWindow = editWindow;
|
||
this.refresh();
|
||
this.updateCursor();
|
||
this.activate();
|
||
};
|
||
|
||
Window_NameInput.prototype.table = function() {
|
||
if ($gameSystem.isJapanese()) {
|
||
return [
|
||
Window_NameInput.JAPAN1,
|
||
Window_NameInput.JAPAN2,
|
||
Window_NameInput.JAPAN3
|
||
];
|
||
} else if ($gameSystem.isRussian()) {
|
||
return [Window_NameInput.RUSSIA];
|
||
} else {
|
||
return [Window_NameInput.LATIN1, Window_NameInput.LATIN2];
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.maxCols = function() {
|
||
return 10;
|
||
};
|
||
|
||
Window_NameInput.prototype.maxItems = function() {
|
||
return 90;
|
||
};
|
||
|
||
Window_NameInput.prototype.itemWidth = function() {
|
||
return Math.floor((this.innerWidth - this.groupSpacing()) / 10);
|
||
};
|
||
|
||
Window_NameInput.prototype.groupSpacing = function() {
|
||
return 24;
|
||
};
|
||
|
||
Window_NameInput.prototype.character = function() {
|
||
return this._index < 88 ? this.table()[this._page][this._index] : "";
|
||
};
|
||
|
||
Window_NameInput.prototype.isPageChange = function() {
|
||
return this._index === 88;
|
||
};
|
||
|
||
Window_NameInput.prototype.isOk = function() {
|
||
return this._index === 89;
|
||
};
|
||
|
||
Window_NameInput.prototype.itemRect = function(index) {
|
||
const itemWidth = this.itemWidth();
|
||
const itemHeight = this.itemHeight();
|
||
const colSpacing = this.colSpacing();
|
||
const rowSpacing = this.rowSpacing();
|
||
const groupSpacing = this.groupSpacing();
|
||
const col = index % 10;
|
||
const group = Math.floor(col / 5);
|
||
const x = col * itemWidth + group * groupSpacing + colSpacing / 2;
|
||
const y = Math.floor(index / 10) * itemHeight + rowSpacing / 2;
|
||
const width = itemWidth - colSpacing;
|
||
const height = itemHeight - rowSpacing;
|
||
return new Rectangle(x, y, width, height);
|
||
};
|
||
|
||
Window_NameInput.prototype.drawItem = function(index) {
|
||
const table = this.table();
|
||
const character = table[this._page][index];
|
||
const rect = this.itemLineRect(index);
|
||
this.drawText(character, rect.x, rect.y, rect.width, "center");
|
||
};
|
||
|
||
Window_NameInput.prototype.updateCursor = function() {
|
||
const rect = this.itemRect(this._index);
|
||
this.setCursorRect(rect.x, rect.y, rect.width, rect.height);
|
||
};
|
||
|
||
Window_NameInput.prototype.isCursorMovable = function() {
|
||
return this.active;
|
||
};
|
||
|
||
Window_NameInput.prototype.cursorDown = function(wrap) {
|
||
if (this._index < 80 || wrap) {
|
||
this._index = (this._index + 10) % 90;
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.cursorUp = function(wrap) {
|
||
if (this._index >= 10 || wrap) {
|
||
this._index = (this._index + 80) % 90;
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.cursorRight = function(wrap) {
|
||
if (this._index % 10 < 9) {
|
||
this._index++;
|
||
} else if (wrap) {
|
||
this._index -= 9;
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.cursorLeft = function(wrap) {
|
||
if (this._index % 10 > 0) {
|
||
this._index--;
|
||
} else if (wrap) {
|
||
this._index += 9;
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.cursorPagedown = function() {
|
||
this._page = (this._page + 1) % this.table().length;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_NameInput.prototype.cursorPageup = function() {
|
||
this._page = (this._page + this.table().length - 1) % this.table().length;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_NameInput.prototype.processCursorMove = function() {
|
||
const lastPage = this._page;
|
||
Window_Selectable.prototype.processCursorMove.call(this);
|
||
this.updateCursor();
|
||
if (this._page !== lastPage) {
|
||
this.playCursorSound();
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.processHandling = function() {
|
||
if (this.isOpen() && this.active) {
|
||
if (Input.isTriggered("shift")) {
|
||
this.processJump();
|
||
}
|
||
if (Input.isRepeated("cancel")) {
|
||
this.processBack();
|
||
}
|
||
if (Input.isRepeated("ok")) {
|
||
this.processOk();
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.isCancelEnabled = function() {
|
||
return true;
|
||
};
|
||
|
||
Window_NameInput.prototype.processCancel = function() {
|
||
this.processBack();
|
||
};
|
||
|
||
Window_NameInput.prototype.processJump = function() {
|
||
if (this._index !== 89) {
|
||
this._index = 89;
|
||
this.playCursorSound();
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.processBack = function() {
|
||
if (this._editWindow.back()) {
|
||
SoundManager.playCancel();
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.processOk = function() {
|
||
if (this.character()) {
|
||
this.onNameAdd();
|
||
} else if (this.isPageChange()) {
|
||
this.playOkSound();
|
||
this.cursorPagedown();
|
||
} else if (this.isOk()) {
|
||
this.onNameOk();
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.onNameAdd = function() {
|
||
if (this._editWindow.add(this.character())) {
|
||
this.playOkSound();
|
||
} else {
|
||
this.playBuzzerSound();
|
||
}
|
||
};
|
||
|
||
Window_NameInput.prototype.onNameOk = function() {
|
||
if (this._editWindow.name() === "") {
|
||
if (this._editWindow.restoreDefault()) {
|
||
this.playOkSound();
|
||
} else {
|
||
this.playBuzzerSound();
|
||
}
|
||
} else {
|
||
this.playOkSound();
|
||
this.callOkHandler();
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_NameBox
|
||
//
|
||
// The window for displaying a speaker name above the message window.
|
||
|
||
function Window_NameBox() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_NameBox.prototype = Object.create(Window_Base.prototype);
|
||
Window_NameBox.prototype.constructor = Window_NameBox;
|
||
|
||
Window_NameBox.prototype.initialize = function() {
|
||
Window_Base.prototype.initialize.call(this, new Rectangle());
|
||
this.openness = 0;
|
||
this._name = "";
|
||
};
|
||
|
||
Window_NameBox.prototype.setMessageWindow = function(messageWindow) {
|
||
this._messageWindow = messageWindow;
|
||
};
|
||
|
||
Window_NameBox.prototype.setName = function(name) {
|
||
if (this._name !== name) {
|
||
this._name = name;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_NameBox.prototype.clear = function() {
|
||
this.setName("");
|
||
};
|
||
|
||
Window_NameBox.prototype.start = function() {
|
||
this.updatePlacement();
|
||
this.updateBackground();
|
||
this.createContents();
|
||
this.refresh();
|
||
};
|
||
|
||
Window_NameBox.prototype.updatePlacement = function() {
|
||
this.width = this.windowWidth();
|
||
this.height = this.windowHeight();
|
||
const messageWindow = this._messageWindow;
|
||
if ($gameMessage.isRTL()) {
|
||
this.x = messageWindow.x + messageWindow.width - this.width;
|
||
} else {
|
||
this.x = messageWindow.x;
|
||
}
|
||
if (messageWindow.y > 0) {
|
||
this.y = messageWindow.y - this.height;
|
||
} else {
|
||
this.y = messageWindow.y + messageWindow.height;
|
||
}
|
||
};
|
||
|
||
Window_NameBox.prototype.updateBackground = function() {
|
||
this.setBackgroundType($gameMessage.background());
|
||
};
|
||
|
||
Window_NameBox.prototype.windowWidth = function() {
|
||
if (this._name) {
|
||
const textWidth = this.textSizeEx(this._name).width;
|
||
const padding = this.padding + this.itemPadding();
|
||
const width = Math.ceil(textWidth) + padding * 2;
|
||
return Math.min(width, Graphics.boxWidth);
|
||
} else {
|
||
return 0;
|
||
}
|
||
};
|
||
|
||
Window_NameBox.prototype.windowHeight = function() {
|
||
return this.fittingHeight(1);
|
||
};
|
||
|
||
Window_NameBox.prototype.refresh = function() {
|
||
const rect = this.baseTextRect();
|
||
this.contents.clear();
|
||
this.drawTextEx(this._name, rect.x, rect.y, rect.width);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ChoiceList
|
||
//
|
||
// The window used for the event command [Show Choices].
|
||
|
||
function Window_ChoiceList() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ChoiceList.prototype = Object.create(Window_Command.prototype);
|
||
Window_ChoiceList.prototype.constructor = Window_ChoiceList;
|
||
|
||
Window_ChoiceList.prototype.initialize = function() {
|
||
Window_Command.prototype.initialize.call(this, new Rectangle());
|
||
this.createCancelButton();
|
||
this.openness = 0;
|
||
this.deactivate();
|
||
this._background = 0;
|
||
this._canRepeat = false;
|
||
};
|
||
|
||
Window_ChoiceList.prototype.setMessageWindow = function(messageWindow) {
|
||
this._messageWindow = messageWindow;
|
||
};
|
||
|
||
Window_ChoiceList.prototype.createCancelButton = function() {
|
||
if (ConfigManager.touchUI) {
|
||
this._cancelButton = new Sprite_Button("cancel");
|
||
this._cancelButton.visible = false;
|
||
this.addChild(this._cancelButton);
|
||
}
|
||
};
|
||
|
||
Window_ChoiceList.prototype.start = function() {
|
||
this.updatePlacement();
|
||
this.updateBackground();
|
||
this.placeCancelButton();
|
||
this.createContents();
|
||
this.refresh();
|
||
this.scrollTo(0, 0);
|
||
this.selectDefault();
|
||
this.open();
|
||
this.activate();
|
||
};
|
||
|
||
Window_ChoiceList.prototype.update = function() {
|
||
Window_Selectable.prototype.update.call(this);
|
||
this.updateCancelButton();
|
||
};
|
||
|
||
Window_ChoiceList.prototype.updateCancelButton = function() {
|
||
if (this._cancelButton) {
|
||
this._cancelButton.visible = this.needsCancelButton() && this.isOpen();
|
||
}
|
||
};
|
||
|
||
Window_ChoiceList.prototype.selectDefault = function() {
|
||
this.select($gameMessage.choiceDefaultType());
|
||
};
|
||
|
||
Window_ChoiceList.prototype.updatePlacement = function() {
|
||
this.x = this.windowX();
|
||
this.y = this.windowY();
|
||
this.width = this.windowWidth();
|
||
this.height = this.windowHeight();
|
||
};
|
||
|
||
Window_ChoiceList.prototype.updateBackground = function() {
|
||
this._background = $gameMessage.choiceBackground();
|
||
this.setBackgroundType(this._background);
|
||
};
|
||
|
||
Window_ChoiceList.prototype.placeCancelButton = function() {
|
||
if (this._cancelButton) {
|
||
const spacing = 8;
|
||
const button = this._cancelButton;
|
||
const right = this.x + this.width;
|
||
if (right < Graphics.boxWidth - button.width + spacing) {
|
||
button.x = this.width + spacing;
|
||
} else {
|
||
button.x = -button.width - spacing;
|
||
}
|
||
button.y = this.height / 2 - button.height / 2;
|
||
}
|
||
};
|
||
|
||
Window_ChoiceList.prototype.windowX = function() {
|
||
const positionType = $gameMessage.choicePositionType();
|
||
if (positionType === 1) {
|
||
return (Graphics.boxWidth - this.windowWidth()) / 2;
|
||
} else if (positionType === 2) {
|
||
return Graphics.boxWidth - this.windowWidth();
|
||
} else {
|
||
return 0;
|
||
}
|
||
};
|
||
|
||
Window_ChoiceList.prototype.windowY = function() {
|
||
const messageY = this._messageWindow.y;
|
||
if (messageY >= Graphics.boxHeight / 2) {
|
||
return messageY - this.windowHeight();
|
||
} else {
|
||
return messageY + this._messageWindow.height;
|
||
}
|
||
};
|
||
|
||
Window_ChoiceList.prototype.windowWidth = function() {
|
||
const width = this.maxChoiceWidth() + this.colSpacing() + this.padding * 2;
|
||
return Math.min(width, Graphics.boxWidth);
|
||
};
|
||
|
||
Window_ChoiceList.prototype.windowHeight = function() {
|
||
return this.fittingHeight(this.numVisibleRows());
|
||
};
|
||
|
||
Window_ChoiceList.prototype.numVisibleRows = function() {
|
||
const choices = $gameMessage.choices();
|
||
return Math.min(choices.length, this.maxLines());
|
||
};
|
||
|
||
Window_ChoiceList.prototype.maxLines = function() {
|
||
const messageWindow = this._messageWindow;
|
||
const messageY = messageWindow ? messageWindow.y : 0;
|
||
const messageHeight = messageWindow ? messageWindow.height : 0;
|
||
const centerY = Graphics.boxHeight / 2;
|
||
if (messageY < centerY && messageY + messageHeight > centerY) {
|
||
return 4;
|
||
} else {
|
||
return 8;
|
||
}
|
||
};
|
||
|
||
Window_ChoiceList.prototype.maxChoiceWidth = function() {
|
||
let maxWidth = 96;
|
||
const choices = $gameMessage.choices();
|
||
for (const choice of choices) {
|
||
const textWidth = this.textSizeEx(choice).width;
|
||
const choiceWidth = Math.ceil(textWidth) + this.itemPadding() * 2;
|
||
if (maxWidth < choiceWidth) {
|
||
maxWidth = choiceWidth;
|
||
}
|
||
}
|
||
return maxWidth;
|
||
};
|
||
|
||
Window_ChoiceList.prototype.makeCommandList = function() {
|
||
const choices = $gameMessage.choices();
|
||
for (const choice of choices) {
|
||
this.addCommand(choice, "choice");
|
||
}
|
||
};
|
||
|
||
Window_ChoiceList.prototype.drawItem = function(index) {
|
||
const rect = this.itemLineRect(index);
|
||
this.drawTextEx(this.commandName(index), rect.x, rect.y, rect.width);
|
||
};
|
||
|
||
Window_ChoiceList.prototype.isCancelEnabled = function() {
|
||
return $gameMessage.choiceCancelType() !== -1;
|
||
};
|
||
|
||
Window_ChoiceList.prototype.needsCancelButton = function() {
|
||
return $gameMessage.choiceCancelType() === -2;
|
||
};
|
||
|
||
Window_ChoiceList.prototype.callOkHandler = function() {
|
||
$gameMessage.onChoice(this.index());
|
||
this._messageWindow.terminateMessage();
|
||
this.close();
|
||
};
|
||
|
||
Window_ChoiceList.prototype.callCancelHandler = function() {
|
||
$gameMessage.onChoice($gameMessage.choiceCancelType());
|
||
this._messageWindow.terminateMessage();
|
||
this.close();
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_NumberInput
|
||
//
|
||
// The window used for the event command [Input Number].
|
||
|
||
function Window_NumberInput() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_NumberInput.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_NumberInput.prototype.constructor = Window_NumberInput;
|
||
|
||
Window_NumberInput.prototype.initialize = function() {
|
||
Window_Selectable.prototype.initialize.call(this, new Rectangle());
|
||
this._number = 0;
|
||
this._maxDigits = 1;
|
||
this.openness = 0;
|
||
this.createButtons();
|
||
this.deactivate();
|
||
this._canRepeat = false;
|
||
};
|
||
|
||
Window_NumberInput.prototype.setMessageWindow = function(messageWindow) {
|
||
this._messageWindow = messageWindow;
|
||
};
|
||
|
||
Window_NumberInput.prototype.start = function() {
|
||
this._maxDigits = $gameMessage.numInputMaxDigits();
|
||
this._number = $gameVariables.value($gameMessage.numInputVariableId());
|
||
this._number = this._number.clamp(0, Math.pow(10, this._maxDigits) - 1);
|
||
this.updatePlacement();
|
||
this.placeButtons();
|
||
this.createContents();
|
||
this.refresh();
|
||
this.open();
|
||
this.activate();
|
||
this.select(0);
|
||
};
|
||
|
||
Window_NumberInput.prototype.updatePlacement = function() {
|
||
const messageY = this._messageWindow.y;
|
||
const spacing = 8;
|
||
this.width = this.windowWidth();
|
||
this.height = this.windowHeight();
|
||
this.x = (Graphics.boxWidth - this.width) / 2;
|
||
if (messageY >= Graphics.boxHeight / 2) {
|
||
this.y = messageY - this.height - spacing;
|
||
} else {
|
||
this.y = messageY + this._messageWindow.height + spacing;
|
||
}
|
||
};
|
||
|
||
Window_NumberInput.prototype.windowWidth = function() {
|
||
const totalItemWidth = this.maxCols() * this.itemWidth();
|
||
const totalButtonWidth = this.totalButtonWidth();
|
||
return Math.max(totalItemWidth, totalButtonWidth) + this.padding * 2;
|
||
};
|
||
|
||
Window_NumberInput.prototype.windowHeight = function() {
|
||
if (ConfigManager.touchUI) {
|
||
return this.fittingHeight(1) + this.buttonSpacing() + 48;
|
||
} else {
|
||
return this.fittingHeight(1);
|
||
}
|
||
};
|
||
|
||
Window_NumberInput.prototype.maxCols = function() {
|
||
return this._maxDigits;
|
||
};
|
||
|
||
Window_NumberInput.prototype.maxItems = function() {
|
||
return this._maxDigits;
|
||
};
|
||
|
||
Window_NumberInput.prototype.itemWidth = function() {
|
||
return 48;
|
||
};
|
||
|
||
Window_NumberInput.prototype.itemRect = function(index) {
|
||
const rect = Window_Selectable.prototype.itemRect.call(this, index);
|
||
const innerMargin = this.innerWidth - this.maxCols() * this.itemWidth();
|
||
rect.x += innerMargin / 2;
|
||
return rect;
|
||
};
|
||
|
||
Window_NumberInput.prototype.isScrollEnabled = function() {
|
||
return false;
|
||
};
|
||
|
||
Window_NumberInput.prototype.isHoverEnabled = function() {
|
||
return false;
|
||
};
|
||
|
||
Window_NumberInput.prototype.createButtons = function() {
|
||
this._buttons = [];
|
||
if (ConfigManager.touchUI) {
|
||
for (const type of ["down", "up", "ok"]) {
|
||
const button = new Sprite_Button(type);
|
||
this._buttons.push(button);
|
||
this.addInnerChild(button);
|
||
}
|
||
this._buttons[0].setClickHandler(this.onButtonDown.bind(this));
|
||
this._buttons[1].setClickHandler(this.onButtonUp.bind(this));
|
||
this._buttons[2].setClickHandler(this.onButtonOk.bind(this));
|
||
}
|
||
};
|
||
|
||
Window_NumberInput.prototype.placeButtons = function() {
|
||
const sp = this.buttonSpacing();
|
||
const totalWidth = this.totalButtonWidth();
|
||
let x = (this.innerWidth - totalWidth) / 2;
|
||
for (const button of this._buttons) {
|
||
button.x = x;
|
||
button.y = this.buttonY();
|
||
x += button.width + sp;
|
||
}
|
||
};
|
||
|
||
Window_NumberInput.prototype.totalButtonWidth = function() {
|
||
const sp = this.buttonSpacing();
|
||
return this._buttons.reduce((r, button) => r + button.width + sp, -sp);
|
||
};
|
||
|
||
Window_NumberInput.prototype.buttonSpacing = function() {
|
||
return 8;
|
||
};
|
||
|
||
Window_NumberInput.prototype.buttonY = function() {
|
||
return this.itemHeight() + this.buttonSpacing();
|
||
};
|
||
|
||
Window_NumberInput.prototype.update = function() {
|
||
Window_Selectable.prototype.update.call(this);
|
||
this.processDigitChange();
|
||
};
|
||
|
||
Window_NumberInput.prototype.processDigitChange = function() {
|
||
if (this.isOpenAndActive()) {
|
||
if (Input.isRepeated("up")) {
|
||
this.changeDigit(true);
|
||
} else if (Input.isRepeated("down")) {
|
||
this.changeDigit(false);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_NumberInput.prototype.changeDigit = function(up) {
|
||
const index = this.index();
|
||
const place = Math.pow(10, this._maxDigits - 1 - index);
|
||
let n = Math.floor(this._number / place) % 10;
|
||
this._number -= n * place;
|
||
if (up) {
|
||
n = (n + 1) % 10;
|
||
} else {
|
||
n = (n + 9) % 10;
|
||
}
|
||
this._number += n * place;
|
||
this.refresh();
|
||
this.playCursorSound();
|
||
};
|
||
|
||
Window_NumberInput.prototype.isTouchOkEnabled = function() {
|
||
return false;
|
||
};
|
||
|
||
Window_NumberInput.prototype.isOkEnabled = function() {
|
||
return true;
|
||
};
|
||
|
||
Window_NumberInput.prototype.isCancelEnabled = function() {
|
||
return false;
|
||
};
|
||
|
||
Window_NumberInput.prototype.processOk = function() {
|
||
this.playOkSound();
|
||
$gameVariables.setValue($gameMessage.numInputVariableId(), this._number);
|
||
this._messageWindow.terminateMessage();
|
||
this.updateInputData();
|
||
this.deactivate();
|
||
this.close();
|
||
};
|
||
|
||
Window_NumberInput.prototype.drawItem = function(index) {
|
||
const rect = this.itemLineRect(index);
|
||
const align = "center";
|
||
const s = this._number.padZero(this._maxDigits);
|
||
const c = s.slice(index, index + 1);
|
||
this.resetTextColor();
|
||
this.drawText(c, rect.x, rect.y, rect.width, align);
|
||
};
|
||
|
||
Window_NumberInput.prototype.onButtonUp = function() {
|
||
this.changeDigit(true);
|
||
};
|
||
|
||
Window_NumberInput.prototype.onButtonDown = function() {
|
||
this.changeDigit(false);
|
||
};
|
||
|
||
Window_NumberInput.prototype.onButtonOk = function() {
|
||
this.processOk();
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_EventItem
|
||
//
|
||
// The window used for the event command [Select Item].
|
||
|
||
function Window_EventItem() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_EventItem.prototype = Object.create(Window_ItemList.prototype);
|
||
Window_EventItem.prototype.constructor = Window_EventItem;
|
||
|
||
Window_EventItem.prototype.initialize = function(rect) {
|
||
Window_ItemList.prototype.initialize.call(this, rect);
|
||
this.createCancelButton();
|
||
this.openness = 0;
|
||
this.deactivate();
|
||
this.setHandler("ok", this.onOk.bind(this));
|
||
this.setHandler("cancel", this.onCancel.bind(this));
|
||
};
|
||
|
||
Window_EventItem.prototype.setMessageWindow = function(messageWindow) {
|
||
this._messageWindow = messageWindow;
|
||
};
|
||
|
||
Window_EventItem.prototype.createCancelButton = function() {
|
||
if (ConfigManager.touchUI) {
|
||
this._cancelButton = new Sprite_Button("cancel");
|
||
this._cancelButton.visible = false;
|
||
this.addChild(this._cancelButton);
|
||
}
|
||
};
|
||
|
||
Window_EventItem.prototype.start = function() {
|
||
this.refresh();
|
||
this.updatePlacement();
|
||
this.placeCancelButton();
|
||
this.forceSelect(0);
|
||
this.open();
|
||
this.activate();
|
||
};
|
||
|
||
Window_EventItem.prototype.update = function() {
|
||
Window_Selectable.prototype.update.call(this);
|
||
this.updateCancelButton();
|
||
};
|
||
|
||
Window_EventItem.prototype.updateCancelButton = function() {
|
||
if (this._cancelButton) {
|
||
this._cancelButton.visible = this.isOpen();
|
||
}
|
||
};
|
||
|
||
Window_EventItem.prototype.updatePlacement = function() {
|
||
if (this._messageWindow.y >= Graphics.boxHeight / 2) {
|
||
this.y = 0;
|
||
} else {
|
||
this.y = Graphics.boxHeight - this.height;
|
||
}
|
||
};
|
||
|
||
Window_EventItem.prototype.placeCancelButton = function() {
|
||
if (this._cancelButton) {
|
||
const spacing = 8;
|
||
const button = this._cancelButton;
|
||
if (this.y === 0) {
|
||
button.y = this.height + spacing;
|
||
} else if (this._messageWindow.y >= Graphics.boxHeight / 4) {
|
||
const distance = this.y - this._messageWindow.y;
|
||
button.y = -button.height - spacing - distance;
|
||
} else {
|
||
button.y = -button.height - spacing;
|
||
}
|
||
button.x = this.width - button.width - spacing;
|
||
}
|
||
};
|
||
|
||
Window_EventItem.prototype.includes = function(item) {
|
||
const itypeId = $gameMessage.itemChoiceItypeId();
|
||
return DataManager.isItem(item) && item.itypeId === itypeId;
|
||
};
|
||
|
||
Window_EventItem.prototype.needsNumber = function() {
|
||
const itypeId = $gameMessage.itemChoiceItypeId();
|
||
if (itypeId === 2) {
|
||
// Key Item
|
||
return $dataSystem.optKeyItemsNumber;
|
||
} else if (itypeId >= 3) {
|
||
// Hidden Item
|
||
return false;
|
||
} else {
|
||
// Normal Item
|
||
return true;
|
||
}
|
||
};
|
||
|
||
Window_EventItem.prototype.isEnabled = function(/*item*/) {
|
||
return true;
|
||
};
|
||
|
||
Window_EventItem.prototype.onOk = function() {
|
||
const item = this.item();
|
||
const itemId = item ? item.id : 0;
|
||
$gameVariables.setValue($gameMessage.itemChoiceVariableId(), itemId);
|
||
this._messageWindow.terminateMessage();
|
||
this.close();
|
||
};
|
||
|
||
Window_EventItem.prototype.onCancel = function() {
|
||
$gameVariables.setValue($gameMessage.itemChoiceVariableId(), 0);
|
||
this._messageWindow.terminateMessage();
|
||
this.close();
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_Message
|
||
//
|
||
// The window for displaying text messages.
|
||
|
||
function Window_Message() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_Message.prototype = Object.create(Window_Base.prototype);
|
||
Window_Message.prototype.constructor = Window_Message;
|
||
|
||
Window_Message.prototype.initialize = function(rect) {
|
||
Window_Base.prototype.initialize.call(this, rect);
|
||
this.openness = 0;
|
||
this.initMembers();
|
||
};
|
||
|
||
Window_Message.prototype.initMembers = function() {
|
||
this._background = 0;
|
||
this._positionType = 2;
|
||
this._waitCount = 0;
|
||
this._faceBitmap = null;
|
||
this._textState = null;
|
||
this._goldWindow = null;
|
||
this._nameBoxWindow = null;
|
||
this._choiceListWindow = null;
|
||
this._numberInputWindow = null;
|
||
this._eventItemWindow = null;
|
||
this.clearFlags();
|
||
};
|
||
|
||
Window_Message.prototype.setGoldWindow = function(goldWindow) {
|
||
this._goldWindow = goldWindow;
|
||
};
|
||
|
||
Window_Message.prototype.setNameBoxWindow = function(nameBoxWindow) {
|
||
this._nameBoxWindow = nameBoxWindow;
|
||
};
|
||
|
||
Window_Message.prototype.setChoiceListWindow = function(choiceListWindow) {
|
||
this._choiceListWindow = choiceListWindow;
|
||
};
|
||
|
||
Window_Message.prototype.setNumberInputWindow = function(numberInputWindow) {
|
||
this._numberInputWindow = numberInputWindow;
|
||
};
|
||
|
||
Window_Message.prototype.setEventItemWindow = function(eventItemWindow) {
|
||
this._eventItemWindow = eventItemWindow;
|
||
};
|
||
|
||
Window_Message.prototype.clearFlags = function() {
|
||
this._showFast = false;
|
||
this._lineShowFast = false;
|
||
this._pauseSkip = false;
|
||
};
|
||
|
||
Window_Message.prototype.update = function() {
|
||
this.checkToNotClose();
|
||
Window_Base.prototype.update.call(this);
|
||
this.synchronizeNameBox();
|
||
while (!this.isOpening() && !this.isClosing()) {
|
||
if (this.updateWait()) {
|
||
return;
|
||
} else if (this.updateLoading()) {
|
||
return;
|
||
} else if (this.updateInput()) {
|
||
return;
|
||
} else if (this.updateMessage()) {
|
||
return;
|
||
} else if (this.canStart()) {
|
||
this.startMessage();
|
||
} else {
|
||
this.startInput();
|
||
return;
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.checkToNotClose = function() {
|
||
if (this.isOpen() && this.isClosing() && this.doesContinue()) {
|
||
this.open();
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.synchronizeNameBox = function() {
|
||
this._nameBoxWindow.openness = this.openness;
|
||
};
|
||
|
||
Window_Message.prototype.canStart = function() {
|
||
return $gameMessage.hasText() && !$gameMessage.scrollMode();
|
||
};
|
||
|
||
Window_Message.prototype.startMessage = function() {
|
||
const text = $gameMessage.allText();
|
||
const textState = this.createTextState(text, 0, 0, 0);
|
||
textState.x = this.newLineX(textState);
|
||
textState.startX = textState.x;
|
||
this._textState = textState;
|
||
this.newPage(this._textState);
|
||
this.updatePlacement();
|
||
this.updateBackground();
|
||
this.open();
|
||
this._nameBoxWindow.start();
|
||
};
|
||
|
||
Window_Message.prototype.newLineX = function(textState) {
|
||
const faceExists = $gameMessage.faceName() !== "";
|
||
const faceWidth = ImageManager.faceWidth;
|
||
const spacing = 20;
|
||
const margin = faceExists ? faceWidth + spacing : 4;
|
||
return textState.rtl ? this.innerWidth - margin : margin;
|
||
};
|
||
|
||
Window_Message.prototype.updatePlacement = function() {
|
||
const goldWindow = this._goldWindow;
|
||
this._positionType = $gameMessage.positionType();
|
||
this.y = (this._positionType * (Graphics.boxHeight - this.height)) / 2;
|
||
if (goldWindow) {
|
||
goldWindow.y = this.y > 0 ? 0 : Graphics.boxHeight - goldWindow.height;
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.updateBackground = function() {
|
||
this._background = $gameMessage.background();
|
||
this.setBackgroundType(this._background);
|
||
};
|
||
|
||
Window_Message.prototype.terminateMessage = function() {
|
||
this.close();
|
||
this._goldWindow.close();
|
||
$gameMessage.clear();
|
||
};
|
||
|
||
Window_Message.prototype.updateWait = function() {
|
||
if (this._waitCount > 0) {
|
||
this._waitCount--;
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.updateLoading = function() {
|
||
if (this._faceBitmap) {
|
||
if (this._faceBitmap.isReady()) {
|
||
this.drawMessageFace();
|
||
this._faceBitmap = null;
|
||
return false;
|
||
} else {
|
||
return true;
|
||
}
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.updateInput = function() {
|
||
if (this.isAnySubWindowActive()) {
|
||
return true;
|
||
}
|
||
if (this.pause) {
|
||
if (this.isTriggered()) {
|
||
Input.update();
|
||
this.pause = false;
|
||
if (!this._textState) {
|
||
this.terminateMessage();
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
|
||
Window_Message.prototype.isAnySubWindowActive = function() {
|
||
return (
|
||
this._choiceListWindow.active ||
|
||
this._numberInputWindow.active ||
|
||
this._eventItemWindow.active
|
||
);
|
||
};
|
||
|
||
Window_Message.prototype.updateMessage = function() {
|
||
const textState = this._textState;
|
||
if (textState) {
|
||
while (!this.isEndOfText(textState)) {
|
||
if (this.needsNewPage(textState)) {
|
||
this.newPage(textState);
|
||
}
|
||
this.updateShowFast();
|
||
this.processCharacter(textState);
|
||
if (this.shouldBreakHere(textState)) {
|
||
break;
|
||
}
|
||
}
|
||
this.flushTextState(textState);
|
||
if (this.isEndOfText(textState) && !this.isWaiting()) {
|
||
this.onEndOfText();
|
||
}
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.shouldBreakHere = function(textState) {
|
||
if (this.canBreakHere(textState)) {
|
||
if (!this._showFast && !this._lineShowFast) {
|
||
return true;
|
||
}
|
||
if (this.isWaiting()) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
|
||
Window_Message.prototype.canBreakHere = function(textState) {
|
||
if (!this.isEndOfText(textState)) {
|
||
const c = textState.text[textState.index];
|
||
if (c.charCodeAt(0) >= 0xdc00 && c.charCodeAt(0) <= 0xdfff) {
|
||
// surrogate pair
|
||
return false;
|
||
}
|
||
if (textState.rtl && c.charCodeAt(0) > 0x20) {
|
||
return false;
|
||
}
|
||
}
|
||
return true;
|
||
};
|
||
|
||
Window_Message.prototype.onEndOfText = function() {
|
||
if (!this.startInput()) {
|
||
if (!this._pauseSkip) {
|
||
this.startPause();
|
||
} else {
|
||
this.terminateMessage();
|
||
}
|
||
}
|
||
this._textState = null;
|
||
};
|
||
|
||
Window_Message.prototype.startInput = function() {
|
||
if ($gameMessage.isChoice()) {
|
||
this._choiceListWindow.start();
|
||
return true;
|
||
} else if ($gameMessage.isNumberInput()) {
|
||
this._numberInputWindow.start();
|
||
return true;
|
||
} else if ($gameMessage.isItemChoice()) {
|
||
this._eventItemWindow.start();
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.isTriggered = function() {
|
||
return (
|
||
Input.isRepeated("ok") ||
|
||
Input.isRepeated("cancel") ||
|
||
TouchInput.isRepeated()
|
||
);
|
||
};
|
||
|
||
Window_Message.prototype.doesContinue = function() {
|
||
return (
|
||
$gameMessage.hasText() &&
|
||
!$gameMessage.scrollMode() &&
|
||
!this.areSettingsChanged()
|
||
);
|
||
};
|
||
|
||
Window_Message.prototype.areSettingsChanged = function() {
|
||
return (
|
||
this._background !== $gameMessage.background() ||
|
||
this._positionType !== $gameMessage.positionType()
|
||
);
|
||
};
|
||
|
||
Window_Message.prototype.updateShowFast = function() {
|
||
if (this.isTriggered()) {
|
||
this._showFast = true;
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.newPage = function(textState) {
|
||
this.contents.clear();
|
||
this.resetFontSettings();
|
||
this.clearFlags();
|
||
this.updateSpeakerName();
|
||
this.loadMessageFace();
|
||
textState.x = textState.startX;
|
||
textState.y = 0;
|
||
textState.height = this.calcTextHeight(textState);
|
||
};
|
||
|
||
Window_Message.prototype.updateSpeakerName = function() {
|
||
this._nameBoxWindow.setName($gameMessage.speakerName());
|
||
};
|
||
|
||
Window_Message.prototype.loadMessageFace = function() {
|
||
this._faceBitmap = ImageManager.loadFace($gameMessage.faceName());
|
||
};
|
||
|
||
Window_Message.prototype.drawMessageFace = function() {
|
||
const faceName = $gameMessage.faceName();
|
||
const faceIndex = $gameMessage.faceIndex();
|
||
const rtl = $gameMessage.isRTL();
|
||
const width = ImageManager.faceWidth;
|
||
const height = this.innerHeight;
|
||
const x = rtl ? this.innerWidth - width - 4 : 4;
|
||
this.drawFace(faceName, faceIndex, x, 0, width, height);
|
||
};
|
||
|
||
Window_Message.prototype.processControlCharacter = function(textState, c) {
|
||
Window_Base.prototype.processControlCharacter.call(this, textState, c);
|
||
if (c === "\f") {
|
||
this.processNewPage(textState);
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.processNewLine = function(textState) {
|
||
this._lineShowFast = false;
|
||
Window_Base.prototype.processNewLine.call(this, textState);
|
||
if (this.needsNewPage(textState)) {
|
||
this.startPause();
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.processNewPage = function(textState) {
|
||
if (textState.text[textState.index] === "\n") {
|
||
textState.index++;
|
||
}
|
||
textState.y = this.contents.height;
|
||
this.startPause();
|
||
};
|
||
|
||
Window_Message.prototype.isEndOfText = function(textState) {
|
||
return textState.index >= textState.text.length;
|
||
};
|
||
|
||
Window_Message.prototype.needsNewPage = function(textState) {
|
||
return (
|
||
!this.isEndOfText(textState) &&
|
||
textState.y + textState.height > this.contents.height
|
||
);
|
||
};
|
||
|
||
Window_Message.prototype.processEscapeCharacter = function(code, textState) {
|
||
switch (code) {
|
||
case "$":
|
||
this._goldWindow.open();
|
||
break;
|
||
case ".":
|
||
this.startWait(15);
|
||
break;
|
||
case "|":
|
||
this.startWait(60);
|
||
break;
|
||
case "!":
|
||
this.startPause();
|
||
break;
|
||
case ">":
|
||
this._lineShowFast = true;
|
||
break;
|
||
case "<":
|
||
this._lineShowFast = false;
|
||
break;
|
||
case "^":
|
||
this._pauseSkip = true;
|
||
break;
|
||
default:
|
||
Window_Base.prototype.processEscapeCharacter.call(
|
||
this,
|
||
code,
|
||
textState
|
||
);
|
||
break;
|
||
}
|
||
};
|
||
|
||
Window_Message.prototype.startWait = function(count) {
|
||
this._waitCount = count;
|
||
};
|
||
|
||
Window_Message.prototype.startPause = function() {
|
||
this.startWait(10);
|
||
this.pause = true;
|
||
};
|
||
|
||
Window_Message.prototype.isWaiting = function() {
|
||
return this.pause || this._waitCount > 0;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ScrollText
|
||
//
|
||
// The window for displaying scrolling text. No frame is displayed, but it
|
||
// is handled as a window for convenience.
|
||
|
||
function Window_ScrollText() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ScrollText.prototype = Object.create(Window_Base.prototype);
|
||
Window_ScrollText.prototype.constructor = Window_ScrollText;
|
||
|
||
Window_ScrollText.prototype.initialize = function(rect) {
|
||
Window_Base.prototype.initialize.call(this, new Rectangle());
|
||
this.opacity = 0;
|
||
this.hide();
|
||
this._reservedRect = rect;
|
||
this._text = "";
|
||
this._allTextHeight = 0;
|
||
};
|
||
|
||
Window_ScrollText.prototype.update = function() {
|
||
Window_Base.prototype.update.call(this);
|
||
if ($gameMessage.scrollMode()) {
|
||
if (this._text) {
|
||
this.updateMessage();
|
||
}
|
||
if (!this._text && $gameMessage.hasText()) {
|
||
this.startMessage();
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_ScrollText.prototype.startMessage = function() {
|
||
this._text = $gameMessage.allText();
|
||
if (this._text) {
|
||
this.updatePlacement();
|
||
this.refresh();
|
||
this.show();
|
||
} else {
|
||
$gameMessage.clear();
|
||
}
|
||
};
|
||
|
||
Window_ScrollText.prototype.refresh = function() {
|
||
this._allTextHeight = this.textSizeEx(this._text).height;
|
||
this.createContents();
|
||
this.origin.y = -this.height;
|
||
const rect = this.baseTextRect();
|
||
this.drawTextEx(this._text, rect.x, rect.y, rect.width);
|
||
};
|
||
|
||
Window_ScrollText.prototype.updatePlacement = function() {
|
||
const rect = this._reservedRect;
|
||
this.move(rect.x, rect.y, rect.width, rect.height);
|
||
};
|
||
|
||
Window_ScrollText.prototype.contentsHeight = function() {
|
||
return Math.max(this._allTextHeight, 1);
|
||
};
|
||
|
||
Window_ScrollText.prototype.updateMessage = function() {
|
||
this.origin.y += this.scrollSpeed();
|
||
if (this.origin.y >= this.contents.height) {
|
||
this.terminateMessage();
|
||
}
|
||
};
|
||
|
||
Window_ScrollText.prototype.scrollSpeed = function() {
|
||
let speed = $gameMessage.scrollSpeed() / 2;
|
||
if (this.isFastForward()) {
|
||
speed *= this.fastForwardRate();
|
||
}
|
||
return speed;
|
||
};
|
||
|
||
Window_ScrollText.prototype.isFastForward = function() {
|
||
if ($gameMessage.scrollNoFast()) {
|
||
return false;
|
||
} else {
|
||
return (
|
||
Input.isPressed("ok") ||
|
||
Input.isPressed("shift") ||
|
||
TouchInput.isPressed()
|
||
);
|
||
}
|
||
};
|
||
|
||
Window_ScrollText.prototype.fastForwardRate = function() {
|
||
return 3;
|
||
};
|
||
|
||
Window_ScrollText.prototype.terminateMessage = function() {
|
||
this._text = null;
|
||
$gameMessage.clear();
|
||
this.hide();
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_MapName
|
||
//
|
||
// The window for displaying the map name on the map screen.
|
||
|
||
function Window_MapName() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_MapName.prototype = Object.create(Window_Base.prototype);
|
||
Window_MapName.prototype.constructor = Window_MapName;
|
||
|
||
Window_MapName.prototype.initialize = function(rect) {
|
||
Window_Base.prototype.initialize.call(this, rect);
|
||
this.opacity = 0;
|
||
this.contentsOpacity = 0;
|
||
this._showCount = 0;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_MapName.prototype.update = function() {
|
||
Window_Base.prototype.update.call(this);
|
||
if (this._showCount > 0 && $gameMap.isNameDisplayEnabled()) {
|
||
this.updateFadeIn();
|
||
this._showCount--;
|
||
} else {
|
||
this.updateFadeOut();
|
||
}
|
||
};
|
||
|
||
Window_MapName.prototype.updateFadeIn = function() {
|
||
this.contentsOpacity += 16;
|
||
};
|
||
|
||
Window_MapName.prototype.updateFadeOut = function() {
|
||
this.contentsOpacity -= 16;
|
||
};
|
||
|
||
Window_MapName.prototype.open = function() {
|
||
this.refresh();
|
||
this._showCount = 150;
|
||
};
|
||
|
||
Window_MapName.prototype.close = function() {
|
||
this._showCount = 0;
|
||
};
|
||
|
||
Window_MapName.prototype.refresh = function() {
|
||
this.contents.clear();
|
||
if ($gameMap.displayName()) {
|
||
const width = this.innerWidth;
|
||
this.drawBackground(0, 0, width, this.lineHeight());
|
||
this.drawText($gameMap.displayName(), 0, 0, width, "center");
|
||
}
|
||
};
|
||
|
||
Window_MapName.prototype.drawBackground = function(x, y, width, height) {
|
||
const color1 = ColorManager.dimColor1();
|
||
const color2 = ColorManager.dimColor2();
|
||
const half = width / 2;
|
||
this.contents.gradientFillRect(x, y, half, height, color2, color1);
|
||
this.contents.gradientFillRect(x + half, y, half, height, color1, color2);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_BattleLog
|
||
//
|
||
// The window for displaying battle progress. No frame is displayed, but it is
|
||
// handled as a window for convenience.
|
||
|
||
function Window_BattleLog() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_BattleLog.prototype = Object.create(Window_Base.prototype);
|
||
Window_BattleLog.prototype.constructor = Window_BattleLog;
|
||
|
||
Window_BattleLog.prototype.initialize = function(rect) {
|
||
Window_Base.prototype.initialize.call(this, rect);
|
||
this.opacity = 0;
|
||
this._lines = [];
|
||
this._methods = [];
|
||
this._waitCount = 0;
|
||
this._waitMode = "";
|
||
this._baseLineStack = [];
|
||
this._spriteset = null;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_BattleLog.prototype.setSpriteset = function(spriteset) {
|
||
this._spriteset = spriteset;
|
||
};
|
||
|
||
Window_BattleLog.prototype.maxLines = function() {
|
||
return 10;
|
||
};
|
||
|
||
Window_BattleLog.prototype.numLines = function() {
|
||
return this._lines.length;
|
||
};
|
||
|
||
Window_BattleLog.prototype.messageSpeed = function() {
|
||
return 16;
|
||
};
|
||
|
||
Window_BattleLog.prototype.isBusy = function() {
|
||
return this._waitCount > 0 || this._waitMode || this._methods.length > 0;
|
||
};
|
||
|
||
Window_BattleLog.prototype.update = function() {
|
||
if (!this.updateWait()) {
|
||
this.callNextMethod();
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.updateWait = function() {
|
||
return this.updateWaitCount() || this.updateWaitMode();
|
||
};
|
||
|
||
Window_BattleLog.prototype.updateWaitCount = function() {
|
||
if (this._waitCount > 0) {
|
||
this._waitCount -= this.isFastForward() ? 3 : 1;
|
||
if (this._waitCount < 0) {
|
||
this._waitCount = 0;
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
|
||
Window_BattleLog.prototype.updateWaitMode = function() {
|
||
let waiting = false;
|
||
switch (this._waitMode) {
|
||
case "effect":
|
||
waiting = this._spriteset.isEffecting();
|
||
break;
|
||
case "movement":
|
||
waiting = this._spriteset.isAnyoneMoving();
|
||
break;
|
||
}
|
||
if (!waiting) {
|
||
this._waitMode = "";
|
||
}
|
||
return waiting;
|
||
};
|
||
|
||
Window_BattleLog.prototype.setWaitMode = function(waitMode) {
|
||
this._waitMode = waitMode;
|
||
};
|
||
|
||
Window_BattleLog.prototype.callNextMethod = function() {
|
||
if (this._methods.length > 0) {
|
||
const method = this._methods.shift();
|
||
if (method.name && this[method.name]) {
|
||
this[method.name].apply(this, method.params);
|
||
} else {
|
||
throw new Error("Method not found: " + method.name);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.isFastForward = function() {
|
||
return (
|
||
Input.isLongPressed("ok") ||
|
||
Input.isPressed("shift") ||
|
||
TouchInput.isLongPressed()
|
||
);
|
||
};
|
||
|
||
Window_BattleLog.prototype.push = function(methodName) {
|
||
const methodArgs = Array.prototype.slice.call(arguments, 1);
|
||
this._methods.push({ name: methodName, params: methodArgs });
|
||
};
|
||
|
||
Window_BattleLog.prototype.clear = function() {
|
||
this._lines = [];
|
||
this._baseLineStack = [];
|
||
this.refresh();
|
||
};
|
||
|
||
Window_BattleLog.prototype.wait = function() {
|
||
this._waitCount = this.messageSpeed();
|
||
};
|
||
|
||
Window_BattleLog.prototype.waitForEffect = function() {
|
||
this.setWaitMode("effect");
|
||
};
|
||
|
||
Window_BattleLog.prototype.waitForMovement = function() {
|
||
this.setWaitMode("movement");
|
||
};
|
||
|
||
Window_BattleLog.prototype.addText = function(text) {
|
||
this._lines.push(text);
|
||
this.refresh();
|
||
this.wait();
|
||
};
|
||
|
||
Window_BattleLog.prototype.pushBaseLine = function() {
|
||
this._baseLineStack.push(this._lines.length);
|
||
};
|
||
|
||
Window_BattleLog.prototype.popBaseLine = function() {
|
||
const baseLine = this._baseLineStack.pop();
|
||
while (this._lines.length > baseLine) {
|
||
this._lines.pop();
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.waitForNewLine = function() {
|
||
let baseLine = 0;
|
||
if (this._baseLineStack.length > 0) {
|
||
baseLine = this._baseLineStack[this._baseLineStack.length - 1];
|
||
}
|
||
if (this._lines.length > baseLine) {
|
||
this.wait();
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.popupDamage = function(target) {
|
||
if (target.shouldPopupDamage()) {
|
||
target.startDamagePopup();
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.performActionStart = function(subject, action) {
|
||
subject.performActionStart(action);
|
||
};
|
||
|
||
Window_BattleLog.prototype.performAction = function(subject, action) {
|
||
subject.performAction(action);
|
||
};
|
||
|
||
Window_BattleLog.prototype.performActionEnd = function(subject) {
|
||
subject.performActionEnd();
|
||
};
|
||
|
||
Window_BattleLog.prototype.performDamage = function(target) {
|
||
target.performDamage();
|
||
};
|
||
|
||
Window_BattleLog.prototype.performMiss = function(target) {
|
||
target.performMiss();
|
||
};
|
||
|
||
Window_BattleLog.prototype.performRecovery = function(target) {
|
||
target.performRecovery();
|
||
};
|
||
|
||
Window_BattleLog.prototype.performEvasion = function(target) {
|
||
target.performEvasion();
|
||
};
|
||
|
||
Window_BattleLog.prototype.performMagicEvasion = function(target) {
|
||
target.performMagicEvasion();
|
||
};
|
||
|
||
Window_BattleLog.prototype.performCounter = function(target) {
|
||
target.performCounter();
|
||
};
|
||
|
||
Window_BattleLog.prototype.performReflection = function(target) {
|
||
target.performReflection();
|
||
};
|
||
|
||
Window_BattleLog.prototype.performSubstitute = function(substitute, target) {
|
||
substitute.performSubstitute(target);
|
||
};
|
||
|
||
Window_BattleLog.prototype.performCollapse = function(target) {
|
||
target.performCollapse();
|
||
};
|
||
|
||
// prettier-ignore
|
||
Window_BattleLog.prototype.showAnimation = function(
|
||
subject, targets, animationId
|
||
) {
|
||
if (animationId < 0) {
|
||
this.showAttackAnimation(subject, targets);
|
||
} else {
|
||
this.showNormalAnimation(targets, animationId);
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.showAttackAnimation = function(subject, targets) {
|
||
if (subject.isActor()) {
|
||
this.showActorAttackAnimation(subject, targets);
|
||
} else {
|
||
this.showEnemyAttackAnimation(subject, targets);
|
||
}
|
||
};
|
||
|
||
// prettier-ignore
|
||
Window_BattleLog.prototype.showActorAttackAnimation = function(
|
||
subject, targets
|
||
) {
|
||
this.showNormalAnimation(targets, subject.attackAnimationId1(), false);
|
||
this.showNormalAnimation(targets, subject.attackAnimationId2(), true);
|
||
};
|
||
|
||
// prettier-ignore
|
||
Window_BattleLog.prototype.showEnemyAttackAnimation = function(
|
||
/* subject, targets */
|
||
) {
|
||
SoundManager.playEnemyAttack();
|
||
};
|
||
|
||
// prettier-ignore
|
||
Window_BattleLog.prototype.showNormalAnimation = function(
|
||
targets, animationId, mirror
|
||
) {
|
||
const animation = $dataAnimations[animationId];
|
||
if (animation) {
|
||
$gameTemp.requestAnimation(targets, animationId, mirror);
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.refresh = function() {
|
||
this.drawBackground();
|
||
this.contents.clear();
|
||
for (let i = 0; i < this._lines.length; i++) {
|
||
this.drawLineText(i);
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.drawBackground = function() {
|
||
const rect = this.backRect();
|
||
const color = this.backColor();
|
||
this.contentsBack.clear();
|
||
this.contentsBack.paintOpacity = this.backPaintOpacity();
|
||
this.contentsBack.fillRect(rect.x, rect.y, rect.width, rect.height, color);
|
||
this.contentsBack.paintOpacity = 255;
|
||
};
|
||
|
||
Window_BattleLog.prototype.backRect = function() {
|
||
const height = this.numLines() * this.itemHeight();
|
||
return new Rectangle(0, 0, this.innerWidth, height);
|
||
};
|
||
|
||
Window_BattleLog.prototype.lineRect = function(index) {
|
||
const itemHeight = this.itemHeight();
|
||
const padding = this.itemPadding();
|
||
const x = padding;
|
||
const y = index * itemHeight;
|
||
const width = this.innerWidth - padding * 2;
|
||
const height = itemHeight;
|
||
return new Rectangle(x, y, width, height);
|
||
};
|
||
|
||
Window_BattleLog.prototype.backColor = function() {
|
||
return "#000000";
|
||
};
|
||
|
||
Window_BattleLog.prototype.backPaintOpacity = function() {
|
||
return 64;
|
||
};
|
||
|
||
Window_BattleLog.prototype.drawLineText = function(index) {
|
||
const rect = this.lineRect(index);
|
||
this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
|
||
this.drawTextEx(this._lines[index], rect.x, rect.y, rect.width);
|
||
};
|
||
|
||
Window_BattleLog.prototype.startTurn = function() {
|
||
this.push("wait");
|
||
};
|
||
|
||
Window_BattleLog.prototype.startAction = function(subject, action, targets) {
|
||
const item = action.item();
|
||
this.push("performActionStart", subject, action);
|
||
this.push("waitForMovement");
|
||
this.push("performAction", subject, action);
|
||
this.push("showAnimation", subject, targets.clone(), item.animationId);
|
||
this.displayAction(subject, item);
|
||
};
|
||
|
||
Window_BattleLog.prototype.endAction = function(subject) {
|
||
this.push("waitForNewLine");
|
||
this.push("clear");
|
||
this.push("performActionEnd", subject);
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayCurrentState = function(subject) {
|
||
const stateText = subject.mostImportantStateText();
|
||
if (stateText) {
|
||
this.push("addText", stateText.format(subject.name()));
|
||
this.push("wait");
|
||
this.push("clear");
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayRegeneration = function(subject) {
|
||
this.push("popupDamage", subject);
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayAction = function(subject, item) {
|
||
const numMethods = this._methods.length;
|
||
if (DataManager.isSkill(item)) {
|
||
this.displayItemMessage(item.message1, subject, item);
|
||
this.displayItemMessage(item.message2, subject, item);
|
||
} else {
|
||
this.displayItemMessage(TextManager.useItem, subject, item);
|
||
}
|
||
if (this._methods.length === numMethods) {
|
||
this.push("wait");
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayItemMessage = function(fmt, subject, item) {
|
||
if (fmt) {
|
||
this.push("addText", fmt.format(subject.name(), item.name));
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayCounter = function(target) {
|
||
this.push("performCounter", target);
|
||
this.push("addText", TextManager.counterAttack.format(target.name()));
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayReflection = function(target) {
|
||
this.push("performReflection", target);
|
||
this.push("addText", TextManager.magicReflection.format(target.name()));
|
||
};
|
||
|
||
Window_BattleLog.prototype.displaySubstitute = function(substitute, target) {
|
||
const substName = substitute.name();
|
||
const text = TextManager.substitute.format(substName, target.name());
|
||
this.push("performSubstitute", substitute, target);
|
||
this.push("addText", text);
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayActionResults = function(subject, target) {
|
||
if (target.result().used) {
|
||
this.push("pushBaseLine");
|
||
this.displayCritical(target);
|
||
this.push("popupDamage", target);
|
||
this.push("popupDamage", subject);
|
||
this.displayDamage(target);
|
||
this.displayAffectedStatus(target);
|
||
this.displayFailure(target);
|
||
this.push("waitForNewLine");
|
||
this.push("popBaseLine");
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayFailure = function(target) {
|
||
if (target.result().isHit() && !target.result().success) {
|
||
this.push("addText", TextManager.actionFailure.format(target.name()));
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayCritical = function(target) {
|
||
if (target.result().critical) {
|
||
if (target.isActor()) {
|
||
this.push("addText", TextManager.criticalToActor);
|
||
} else {
|
||
this.push("addText", TextManager.criticalToEnemy);
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayDamage = function(target) {
|
||
if (target.result().missed) {
|
||
this.displayMiss(target);
|
||
} else if (target.result().evaded) {
|
||
this.displayEvasion(target);
|
||
} else {
|
||
this.displayHpDamage(target);
|
||
this.displayMpDamage(target);
|
||
this.displayTpDamage(target);
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayMiss = function(target) {
|
||
let fmt;
|
||
if (target.result().physical) {
|
||
const isActor = target.isActor();
|
||
fmt = isActor ? TextManager.actorNoHit : TextManager.enemyNoHit;
|
||
this.push("performMiss", target);
|
||
} else {
|
||
fmt = TextManager.actionFailure;
|
||
}
|
||
this.push("addText", fmt.format(target.name()));
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayEvasion = function(target) {
|
||
let fmt;
|
||
if (target.result().physical) {
|
||
fmt = TextManager.evasion;
|
||
this.push("performEvasion", target);
|
||
} else {
|
||
fmt = TextManager.magicEvasion;
|
||
this.push("performMagicEvasion", target);
|
||
}
|
||
this.push("addText", fmt.format(target.name()));
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayHpDamage = function(target) {
|
||
if (target.result().hpAffected) {
|
||
if (target.result().hpDamage > 0 && !target.result().drain) {
|
||
this.push("performDamage", target);
|
||
}
|
||
if (target.result().hpDamage < 0) {
|
||
this.push("performRecovery", target);
|
||
}
|
||
this.push("addText", this.makeHpDamageText(target));
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayMpDamage = function(target) {
|
||
if (target.isAlive() && target.result().mpDamage !== 0) {
|
||
if (target.result().mpDamage < 0) {
|
||
this.push("performRecovery", target);
|
||
}
|
||
this.push("addText", this.makeMpDamageText(target));
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayTpDamage = function(target) {
|
||
if (target.isAlive() && target.result().tpDamage !== 0) {
|
||
if (target.result().tpDamage < 0) {
|
||
this.push("performRecovery", target);
|
||
}
|
||
this.push("addText", this.makeTpDamageText(target));
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayAffectedStatus = function(target) {
|
||
if (target.result().isStatusAffected()) {
|
||
this.push("pushBaseLine");
|
||
this.displayChangedStates(target);
|
||
this.displayChangedBuffs(target);
|
||
this.push("waitForNewLine");
|
||
this.push("popBaseLine");
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayAutoAffectedStatus = function(target) {
|
||
if (target.result().isStatusAffected()) {
|
||
this.displayAffectedStatus(target, null);
|
||
this.push("clear");
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayChangedStates = function(target) {
|
||
this.displayAddedStates(target);
|
||
this.displayRemovedStates(target);
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayAddedStates = function(target) {
|
||
const result = target.result();
|
||
const states = result.addedStateObjects();
|
||
for (const state of states) {
|
||
const stateText = target.isActor() ? state.message1 : state.message2;
|
||
if (state.id === target.deathStateId()) {
|
||
this.push("performCollapse", target);
|
||
}
|
||
if (stateText) {
|
||
this.push("popBaseLine");
|
||
this.push("pushBaseLine");
|
||
this.push("addText", stateText.format(target.name()));
|
||
this.push("waitForEffect");
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayRemovedStates = function(target) {
|
||
const result = target.result();
|
||
const states = result.removedStateObjects();
|
||
for (const state of states) {
|
||
if (state.message4) {
|
||
this.push("popBaseLine");
|
||
this.push("pushBaseLine");
|
||
this.push("addText", state.message4.format(target.name()));
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayChangedBuffs = function(target) {
|
||
const result = target.result();
|
||
this.displayBuffs(target, result.addedBuffs, TextManager.buffAdd);
|
||
this.displayBuffs(target, result.addedDebuffs, TextManager.debuffAdd);
|
||
this.displayBuffs(target, result.removedBuffs, TextManager.buffRemove);
|
||
};
|
||
|
||
Window_BattleLog.prototype.displayBuffs = function(target, buffs, fmt) {
|
||
for (const paramId of buffs) {
|
||
const text = fmt.format(target.name(), TextManager.param(paramId));
|
||
this.push("popBaseLine");
|
||
this.push("pushBaseLine");
|
||
this.push("addText", text);
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.makeHpDamageText = function(target) {
|
||
const result = target.result();
|
||
const damage = result.hpDamage;
|
||
const isActor = target.isActor();
|
||
let fmt;
|
||
if (damage > 0 && result.drain) {
|
||
fmt = isActor ? TextManager.actorDrain : TextManager.enemyDrain;
|
||
return fmt.format(target.name(), TextManager.hp, damage);
|
||
} else if (damage > 0) {
|
||
fmt = isActor ? TextManager.actorDamage : TextManager.enemyDamage;
|
||
return fmt.format(target.name(), damage);
|
||
} else if (damage < 0) {
|
||
fmt = isActor ? TextManager.actorRecovery : TextManager.enemyRecovery;
|
||
return fmt.format(target.name(), TextManager.hp, -damage);
|
||
} else {
|
||
fmt = isActor ? TextManager.actorNoDamage : TextManager.enemyNoDamage;
|
||
return fmt.format(target.name());
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.makeMpDamageText = function(target) {
|
||
const result = target.result();
|
||
const damage = result.mpDamage;
|
||
const isActor = target.isActor();
|
||
let fmt;
|
||
if (damage > 0 && result.drain) {
|
||
fmt = isActor ? TextManager.actorDrain : TextManager.enemyDrain;
|
||
return fmt.format(target.name(), TextManager.mp, damage);
|
||
} else if (damage > 0) {
|
||
fmt = isActor ? TextManager.actorLoss : TextManager.enemyLoss;
|
||
return fmt.format(target.name(), TextManager.mp, damage);
|
||
} else if (damage < 0) {
|
||
fmt = isActor ? TextManager.actorRecovery : TextManager.enemyRecovery;
|
||
return fmt.format(target.name(), TextManager.mp, -damage);
|
||
} else {
|
||
return "";
|
||
}
|
||
};
|
||
|
||
Window_BattleLog.prototype.makeTpDamageText = function(target) {
|
||
const result = target.result();
|
||
const damage = result.tpDamage;
|
||
const isActor = target.isActor();
|
||
let fmt;
|
||
if (damage > 0) {
|
||
fmt = isActor ? TextManager.actorLoss : TextManager.enemyLoss;
|
||
return fmt.format(target.name(), TextManager.tp, damage);
|
||
} else if (damage < 0) {
|
||
fmt = isActor ? TextManager.actorGain : TextManager.enemyGain;
|
||
return fmt.format(target.name(), TextManager.tp, -damage);
|
||
} else {
|
||
return "";
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_PartyCommand
|
||
//
|
||
// The window for selecting whether to fight or escape on the battle screen.
|
||
|
||
function Window_PartyCommand() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_PartyCommand.prototype = Object.create(Window_Command.prototype);
|
||
Window_PartyCommand.prototype.constructor = Window_PartyCommand;
|
||
|
||
Window_PartyCommand.prototype.initialize = function(rect) {
|
||
Window_Command.prototype.initialize.call(this, rect);
|
||
this.openness = 0;
|
||
this.deactivate();
|
||
};
|
||
|
||
Window_PartyCommand.prototype.makeCommandList = function() {
|
||
this.addCommand(TextManager.fight, "fight");
|
||
this.addCommand(TextManager.escape, "escape", BattleManager.canEscape());
|
||
};
|
||
|
||
Window_PartyCommand.prototype.setup = function() {
|
||
this.refresh();
|
||
this.forceSelect(0);
|
||
this.activate();
|
||
this.open();
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_ActorCommand
|
||
//
|
||
// The window for selecting an actor's action on the battle screen.
|
||
|
||
function Window_ActorCommand() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_ActorCommand.prototype = Object.create(Window_Command.prototype);
|
||
Window_ActorCommand.prototype.constructor = Window_ActorCommand;
|
||
|
||
Window_ActorCommand.prototype.initialize = function(rect) {
|
||
Window_Command.prototype.initialize.call(this, rect);
|
||
this.openness = 0;
|
||
this.deactivate();
|
||
this._actor = null;
|
||
};
|
||
|
||
Window_ActorCommand.prototype.makeCommandList = function() {
|
||
if (this._actor) {
|
||
this.addAttackCommand();
|
||
this.addSkillCommands();
|
||
this.addGuardCommand();
|
||
this.addItemCommand();
|
||
}
|
||
};
|
||
|
||
Window_ActorCommand.prototype.addAttackCommand = function() {
|
||
this.addCommand(TextManager.attack, "attack", this._actor.canAttack());
|
||
};
|
||
|
||
Window_ActorCommand.prototype.addSkillCommands = function() {
|
||
const skillTypes = this._actor.skillTypes();
|
||
for (const stypeId of skillTypes) {
|
||
const name = $dataSystem.skillTypes[stypeId];
|
||
this.addCommand(name, "skill", true, stypeId);
|
||
}
|
||
};
|
||
|
||
Window_ActorCommand.prototype.addGuardCommand = function() {
|
||
this.addCommand(TextManager.guard, "guard", this._actor.canGuard());
|
||
};
|
||
|
||
Window_ActorCommand.prototype.addItemCommand = function() {
|
||
this.addCommand(TextManager.item, "item");
|
||
};
|
||
|
||
Window_ActorCommand.prototype.setup = function(actor) {
|
||
this._actor = actor;
|
||
this.refresh();
|
||
this.selectLast();
|
||
this.activate();
|
||
this.open();
|
||
};
|
||
|
||
Window_ActorCommand.prototype.actor = function() {
|
||
return this._actor;
|
||
};
|
||
|
||
Window_ActorCommand.prototype.processOk = function() {
|
||
if (this._actor) {
|
||
if (ConfigManager.commandRemember) {
|
||
this._actor.setLastCommandSymbol(this.currentSymbol());
|
||
} else {
|
||
this._actor.setLastCommandSymbol("");
|
||
}
|
||
}
|
||
Window_Command.prototype.processOk.call(this);
|
||
};
|
||
|
||
Window_ActorCommand.prototype.selectLast = function() {
|
||
this.forceSelect(0);
|
||
if (this._actor && ConfigManager.commandRemember) {
|
||
const symbol = this._actor.lastCommandSymbol();
|
||
this.selectSymbol(symbol);
|
||
if (symbol === "skill") {
|
||
const skill = this._actor.lastBattleSkill();
|
||
if (skill) {
|
||
this.selectExt(skill.stypeId);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_BattleStatus
|
||
//
|
||
// The window for displaying the status of party members on the battle screen.
|
||
|
||
function Window_BattleStatus() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_BattleStatus.prototype = Object.create(Window_StatusBase.prototype);
|
||
Window_BattleStatus.prototype.constructor = Window_BattleStatus;
|
||
|
||
Window_BattleStatus.prototype.initialize = function(rect) {
|
||
Window_StatusBase.prototype.initialize.call(this, rect);
|
||
this.frameVisible = false;
|
||
this.openness = 0;
|
||
this._bitmapsReady = 0;
|
||
this.preparePartyRefresh();
|
||
};
|
||
|
||
Window_BattleStatus.prototype.extraHeight = function() {
|
||
return 10;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.maxCols = function() {
|
||
return 4;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.itemHeight = function() {
|
||
return this.innerHeight;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.maxItems = function() {
|
||
return $gameParty.battleMembers().length;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.rowSpacing = function() {
|
||
return 0;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.updatePadding = function() {
|
||
this.padding = 8;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.actor = function(index) {
|
||
return $gameParty.battleMembers()[index];
|
||
};
|
||
|
||
Window_BattleStatus.prototype.selectActor = function(actor) {
|
||
const members = $gameParty.battleMembers();
|
||
this.select(members.indexOf(actor));
|
||
};
|
||
|
||
Window_BattleStatus.prototype.update = function() {
|
||
Window_StatusBase.prototype.update.call(this);
|
||
if ($gameTemp.isBattleRefreshRequested()) {
|
||
this.preparePartyRefresh();
|
||
}
|
||
};
|
||
|
||
Window_BattleStatus.prototype.preparePartyRefresh = function() {
|
||
$gameTemp.clearBattleRefreshRequest();
|
||
this._bitmapsReady = 0;
|
||
for (const actor of $gameParty.members()) {
|
||
const bitmap = ImageManager.loadFace(actor.faceName());
|
||
bitmap.addLoadListener(this.performPartyRefresh.bind(this));
|
||
}
|
||
};
|
||
|
||
Window_BattleStatus.prototype.performPartyRefresh = function() {
|
||
this._bitmapsReady++;
|
||
if (this._bitmapsReady >= $gameParty.members().length) {
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_BattleStatus.prototype.drawItem = function(index) {
|
||
this.drawItemImage(index);
|
||
this.drawItemStatus(index);
|
||
};
|
||
|
||
Window_BattleStatus.prototype.drawItemImage = function(index) {
|
||
const actor = this.actor(index);
|
||
const rect = this.faceRect(index);
|
||
this.drawActorFace(actor, rect.x, rect.y, rect.width, rect.height);
|
||
};
|
||
|
||
Window_BattleStatus.prototype.drawItemStatus = function(index) {
|
||
const actor = this.actor(index);
|
||
const rect = this.itemRectWithPadding(index);
|
||
const nameX = this.nameX(rect);
|
||
const nameY = this.nameY(rect);
|
||
const stateIconX = this.stateIconX(rect);
|
||
const stateIconY = this.stateIconY(rect);
|
||
const basicGaugesX = this.basicGaugesX(rect);
|
||
const basicGaugesY = this.basicGaugesY(rect);
|
||
this.placeTimeGauge(actor, nameX, nameY);
|
||
this.placeActorName(actor, nameX, nameY);
|
||
this.placeStateIcon(actor, stateIconX, stateIconY);
|
||
this.placeBasicGauges(actor, basicGaugesX, basicGaugesY);
|
||
};
|
||
|
||
Window_BattleStatus.prototype.faceRect = function(index) {
|
||
const rect = this.itemRect(index);
|
||
rect.pad(-1);
|
||
rect.height = this.nameY(rect) + this.gaugeLineHeight() / 2 - rect.y;
|
||
return rect;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.nameX = function(rect) {
|
||
return rect.x;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.nameY = function(rect) {
|
||
return this.basicGaugesY(rect) - this.gaugeLineHeight();
|
||
};
|
||
|
||
Window_BattleStatus.prototype.stateIconX = function(rect) {
|
||
return rect.x + rect.width - ImageManager.iconWidth / 2 + 4;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.stateIconY = function(rect) {
|
||
return rect.y + ImageManager.iconHeight / 2 + 4;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.basicGaugesX = function(rect) {
|
||
return rect.x;
|
||
};
|
||
|
||
Window_BattleStatus.prototype.basicGaugesY = function(rect) {
|
||
const bottom = rect.y + rect.height - this.extraHeight();
|
||
const numGauges = $dataSystem.optDisplayTp ? 3 : 2;
|
||
return bottom - this.gaugeLineHeight() * numGauges;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_BattleActor
|
||
//
|
||
// The window for selecting a target actor on the battle screen.
|
||
|
||
function Window_BattleActor() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_BattleActor.prototype = Object.create(Window_BattleStatus.prototype);
|
||
Window_BattleActor.prototype.constructor = Window_BattleActor;
|
||
|
||
Window_BattleActor.prototype.initialize = function(rect) {
|
||
Window_BattleStatus.prototype.initialize.call(this, rect);
|
||
this.openness = 255;
|
||
this.hide();
|
||
};
|
||
|
||
Window_BattleActor.prototype.show = function() {
|
||
this.forceSelect(0);
|
||
$gameTemp.clearTouchState();
|
||
Window_BattleStatus.prototype.show.call(this);
|
||
};
|
||
|
||
Window_BattleActor.prototype.hide = function() {
|
||
Window_BattleStatus.prototype.hide.call(this);
|
||
$gameParty.select(null);
|
||
};
|
||
|
||
Window_BattleActor.prototype.select = function(index) {
|
||
Window_BattleStatus.prototype.select.call(this, index);
|
||
$gameParty.select(this.actor(index));
|
||
};
|
||
|
||
Window_BattleActor.prototype.processTouch = function() {
|
||
Window_BattleStatus.prototype.processTouch.call(this);
|
||
if (this.isOpenAndActive()) {
|
||
const target = $gameTemp.touchTarget();
|
||
if (target) {
|
||
const members = $gameParty.battleMembers();
|
||
if (members.includes(target)) {
|
||
this.select(members.indexOf(target));
|
||
if ($gameTemp.touchState() === "click") {
|
||
this.processOk();
|
||
}
|
||
}
|
||
$gameTemp.clearTouchState();
|
||
}
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_BattleEnemy
|
||
//
|
||
// The window for selecting a target enemy on the battle screen.
|
||
|
||
function Window_BattleEnemy() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_BattleEnemy.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_BattleEnemy.prototype.constructor = Window_BattleEnemy;
|
||
|
||
Window_BattleEnemy.prototype.initialize = function(rect) {
|
||
this._enemies = [];
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this.refresh();
|
||
this.hide();
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.maxCols = function() {
|
||
return 2;
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.maxItems = function() {
|
||
return this._enemies.length;
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.enemy = function() {
|
||
return this._enemies[this.index()];
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.enemyIndex = function() {
|
||
const enemy = this.enemy();
|
||
return enemy ? enemy.index() : -1;
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.drawItem = function(index) {
|
||
this.resetTextColor();
|
||
const name = this._enemies[index].name();
|
||
const rect = this.itemLineRect(index);
|
||
this.drawText(name, rect.x, rect.y, rect.width);
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.show = function() {
|
||
this.refresh();
|
||
this.forceSelect(0);
|
||
$gameTemp.clearTouchState();
|
||
Window_Selectable.prototype.show.call(this);
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.hide = function() {
|
||
Window_Selectable.prototype.hide.call(this);
|
||
$gameTroop.select(null);
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.refresh = function() {
|
||
this._enemies = $gameTroop.aliveMembers();
|
||
Window_Selectable.prototype.refresh.call(this);
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.select = function(index) {
|
||
Window_Selectable.prototype.select.call(this, index);
|
||
$gameTroop.select(this.enemy());
|
||
};
|
||
|
||
Window_BattleEnemy.prototype.processTouch = function() {
|
||
Window_Selectable.prototype.processTouch.call(this);
|
||
if (this.isOpenAndActive()) {
|
||
const target = $gameTemp.touchTarget();
|
||
if (target) {
|
||
if (this._enemies.includes(target)) {
|
||
this.select(this._enemies.indexOf(target));
|
||
if ($gameTemp.touchState() === "click") {
|
||
this.processOk();
|
||
}
|
||
}
|
||
$gameTemp.clearTouchState();
|
||
}
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_BattleSkill
|
||
//
|
||
// The window for selecting a skill to use on the battle screen.
|
||
|
||
function Window_BattleSkill() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_BattleSkill.prototype = Object.create(Window_SkillList.prototype);
|
||
Window_BattleSkill.prototype.constructor = Window_BattleSkill;
|
||
|
||
Window_BattleSkill.prototype.initialize = function(rect) {
|
||
Window_SkillList.prototype.initialize.call(this, rect);
|
||
this.hide();
|
||
};
|
||
|
||
Window_BattleSkill.prototype.show = function() {
|
||
this.selectLast();
|
||
this.showHelpWindow();
|
||
Window_SkillList.prototype.show.call(this);
|
||
};
|
||
|
||
Window_BattleSkill.prototype.hide = function() {
|
||
this.hideHelpWindow();
|
||
Window_SkillList.prototype.hide.call(this);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_BattleItem
|
||
//
|
||
// The window for selecting an item to use on the battle screen.
|
||
|
||
function Window_BattleItem() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_BattleItem.prototype = Object.create(Window_ItemList.prototype);
|
||
Window_BattleItem.prototype.constructor = Window_BattleItem;
|
||
|
||
Window_BattleItem.prototype.initialize = function(rect) {
|
||
Window_ItemList.prototype.initialize.call(this, rect);
|
||
this.hide();
|
||
};
|
||
|
||
Window_BattleItem.prototype.includes = function(item) {
|
||
return $gameParty.canUse(item);
|
||
};
|
||
|
||
Window_BattleItem.prototype.show = function() {
|
||
this.selectLast();
|
||
this.showHelpWindow();
|
||
Window_ItemList.prototype.show.call(this);
|
||
};
|
||
|
||
Window_BattleItem.prototype.hide = function() {
|
||
this.hideHelpWindow();
|
||
Window_ItemList.prototype.hide.call(this);
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_TitleCommand
|
||
//
|
||
// The window for selecting New Game/Continue on the title screen.
|
||
|
||
function Window_TitleCommand() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_TitleCommand.prototype = Object.create(Window_Command.prototype);
|
||
Window_TitleCommand.prototype.constructor = Window_TitleCommand;
|
||
|
||
Window_TitleCommand.prototype.initialize = function(rect) {
|
||
Window_Command.prototype.initialize.call(this, rect);
|
||
this.openness = 0;
|
||
this.selectLast();
|
||
};
|
||
|
||
Window_TitleCommand._lastCommandSymbol = null;
|
||
|
||
Window_TitleCommand.initCommandPosition = function() {
|
||
this._lastCommandSymbol = null;
|
||
};
|
||
|
||
Window_TitleCommand.prototype.makeCommandList = function() {
|
||
const continueEnabled = this.isContinueEnabled();
|
||
this.addCommand(TextManager.newGame, "newGame");
|
||
this.addCommand(TextManager.continue_, "continue", continueEnabled);
|
||
this.addCommand(TextManager.options, "options");
|
||
};
|
||
|
||
Window_TitleCommand.prototype.isContinueEnabled = function() {
|
||
return DataManager.isAnySavefileExists();
|
||
};
|
||
|
||
Window_TitleCommand.prototype.processOk = function() {
|
||
Window_TitleCommand._lastCommandSymbol = this.currentSymbol();
|
||
Window_Command.prototype.processOk.call(this);
|
||
};
|
||
|
||
Window_TitleCommand.prototype.selectLast = function() {
|
||
if (Window_TitleCommand._lastCommandSymbol) {
|
||
this.selectSymbol(Window_TitleCommand._lastCommandSymbol);
|
||
} else if (this.isContinueEnabled()) {
|
||
this.selectSymbol("continue");
|
||
}
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_GameEnd
|
||
//
|
||
// The window for selecting "Go to Title" on the game end screen.
|
||
|
||
function Window_GameEnd() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_GameEnd.prototype = Object.create(Window_Command.prototype);
|
||
Window_GameEnd.prototype.constructor = Window_GameEnd;
|
||
|
||
Window_GameEnd.prototype.initialize = function(rect) {
|
||
Window_Command.prototype.initialize.call(this, rect);
|
||
this.openness = 0;
|
||
this.open();
|
||
};
|
||
|
||
Window_GameEnd.prototype.makeCommandList = function() {
|
||
this.addCommand(TextManager.toTitle, "toTitle");
|
||
this.addCommand(TextManager.cancel, "cancel");
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_DebugRange
|
||
//
|
||
// The window for selecting a block of switches/variables on the debug screen.
|
||
|
||
function Window_DebugRange() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_DebugRange.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_DebugRange.prototype.constructor = Window_DebugRange;
|
||
|
||
Window_DebugRange.lastTopRow = 0;
|
||
Window_DebugRange.lastIndex = 0;
|
||
|
||
Window_DebugRange.prototype.initialize = function(rect) {
|
||
this._maxSwitches = Math.ceil(($dataSystem.switches.length - 1) / 10);
|
||
this._maxVariables = Math.ceil(($dataSystem.variables.length - 1) / 10);
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this.refresh();
|
||
this.setTopRow(Window_DebugRange.lastTopRow);
|
||
this.select(Window_DebugRange.lastIndex);
|
||
this.activate();
|
||
};
|
||
|
||
Window_DebugRange.prototype.maxItems = function() {
|
||
return this._maxSwitches + this._maxVariables;
|
||
};
|
||
|
||
Window_DebugRange.prototype.update = function() {
|
||
Window_Selectable.prototype.update.call(this);
|
||
if (this._editWindow) {
|
||
const index = this.index();
|
||
this._editWindow.setMode(this.mode(index));
|
||
this._editWindow.setTopId(this.topId(index));
|
||
}
|
||
};
|
||
|
||
Window_DebugRange.prototype.mode = function(index) {
|
||
return this.isSwitchMode(index) ? "switch" : "variable";
|
||
};
|
||
|
||
Window_DebugRange.prototype.topId = function(index) {
|
||
if (this.isSwitchMode(index)) {
|
||
return index * 10 + 1;
|
||
} else {
|
||
return (index - this._maxSwitches) * 10 + 1;
|
||
}
|
||
};
|
||
|
||
Window_DebugRange.prototype.isSwitchMode = function(index) {
|
||
return index < this._maxSwitches;
|
||
};
|
||
|
||
Window_DebugRange.prototype.drawItem = function(index) {
|
||
const rect = this.itemLineRect(index);
|
||
const c = this.isSwitchMode(index) ? "S" : "V";
|
||
const start = this.topId(index);
|
||
const end = start + 9;
|
||
const text = c + " [" + start.padZero(4) + "-" + end.padZero(4) + "]";
|
||
this.drawText(text, rect.x, rect.y, rect.width);
|
||
};
|
||
|
||
Window_DebugRange.prototype.isCancelTriggered = function() {
|
||
return (
|
||
Window_Selectable.prototype.isCancelTriggered() ||
|
||
Input.isTriggered("debug")
|
||
);
|
||
};
|
||
|
||
Window_DebugRange.prototype.processCancel = function() {
|
||
Window_Selectable.prototype.processCancel.call(this);
|
||
Window_DebugRange.lastTopRow = this.topRow();
|
||
Window_DebugRange.lastIndex = this.index();
|
||
};
|
||
|
||
Window_DebugRange.prototype.setEditWindow = function(editWindow) {
|
||
this._editWindow = editWindow;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|
||
// Window_DebugEdit
|
||
//
|
||
// The window for displaying switches and variables on the debug screen.
|
||
|
||
function Window_DebugEdit() {
|
||
this.initialize(...arguments);
|
||
}
|
||
|
||
Window_DebugEdit.prototype = Object.create(Window_Selectable.prototype);
|
||
Window_DebugEdit.prototype.constructor = Window_DebugEdit;
|
||
|
||
Window_DebugEdit.prototype.initialize = function(rect) {
|
||
Window_Selectable.prototype.initialize.call(this, rect);
|
||
this._mode = "switch";
|
||
this._topId = 1;
|
||
this.refresh();
|
||
};
|
||
|
||
Window_DebugEdit.prototype.maxItems = function() {
|
||
return 10;
|
||
};
|
||
|
||
Window_DebugEdit.prototype.drawItem = function(index) {
|
||
const dataId = this._topId + index;
|
||
const idText = dataId.padZero(4) + ":";
|
||
const idWidth = this.textWidth(idText);
|
||
const statusWidth = this.textWidth("-00000000");
|
||
const name = this.itemName(dataId);
|
||
const status = this.itemStatus(dataId);
|
||
const rect = this.itemLineRect(index);
|
||
this.resetTextColor();
|
||
this.drawText(idText, rect.x, rect.y, rect.width);
|
||
rect.x += idWidth;
|
||
rect.width -= idWidth + statusWidth;
|
||
this.drawText(name, rect.x, rect.y, rect.width);
|
||
this.drawText(status, rect.x + rect.width, rect.y, statusWidth, "right");
|
||
};
|
||
|
||
Window_DebugEdit.prototype.itemName = function(dataId) {
|
||
if (this._mode === "switch") {
|
||
return $dataSystem.switches[dataId];
|
||
} else {
|
||
return $dataSystem.variables[dataId];
|
||
}
|
||
};
|
||
|
||
Window_DebugEdit.prototype.itemStatus = function(dataId) {
|
||
if (this._mode === "switch") {
|
||
return $gameSwitches.value(dataId) ? "[ON]" : "[OFF]";
|
||
} else {
|
||
return String($gameVariables.value(dataId));
|
||
}
|
||
};
|
||
|
||
Window_DebugEdit.prototype.setMode = function(mode) {
|
||
if (this._mode !== mode) {
|
||
this._mode = mode;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_DebugEdit.prototype.setTopId = function(id) {
|
||
if (this._topId !== id) {
|
||
this._topId = id;
|
||
this.refresh();
|
||
}
|
||
};
|
||
|
||
Window_DebugEdit.prototype.currentId = function() {
|
||
return this._topId + this.index();
|
||
};
|
||
|
||
Window_DebugEdit.prototype.update = function() {
|
||
Window_Selectable.prototype.update.call(this);
|
||
if (this.active) {
|
||
if (this._mode === "switch") {
|
||
this.updateSwitch();
|
||
} else {
|
||
this.updateVariable();
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_DebugEdit.prototype.updateSwitch = function() {
|
||
if (Input.isRepeated("ok")) {
|
||
const switchId = this.currentId();
|
||
this.playCursorSound();
|
||
$gameSwitches.setValue(switchId, !$gameSwitches.value(switchId));
|
||
this.redrawCurrentItem();
|
||
}
|
||
};
|
||
|
||
Window_DebugEdit.prototype.updateVariable = function() {
|
||
const variableId = this.currentId();
|
||
const value = $gameVariables.value(variableId);
|
||
if (typeof value === "number") {
|
||
const newValue = value + this.deltaForVariable();
|
||
if (value !== newValue) {
|
||
$gameVariables.setValue(variableId, newValue);
|
||
this.playCursorSound();
|
||
this.redrawCurrentItem();
|
||
}
|
||
}
|
||
};
|
||
|
||
Window_DebugEdit.prototype.deltaForVariable = function() {
|
||
if (Input.isRepeated("right")) {
|
||
return 1;
|
||
} else if (Input.isRepeated("left")) {
|
||
return -1;
|
||
} else if (Input.isRepeated("pagedown")) {
|
||
return 10;
|
||
} else if (Input.isRepeated("pageup")) {
|
||
return -10;
|
||
}
|
||
return 0;
|
||
};
|
||
|
||
//-----------------------------------------------------------------------------
|