princess-synergy/www/js/plugins/JsScript22Set.js
2026-02-05 14:03:22 -06:00

827 lines
37 KiB
JavaScript

// (C) 2015 Triacontane
// http://opensource.org/licenses/mit-license.php
// 1.10.1 2018/05/30 アウトラインカラー取得で0およびその他の文字列を指定したときに正しく色が設定されない問題を修正(by奏ねこまさん)
// [Blog] : https://triacontane.blogspot.jp/
// [Twitter]: https://twitter.com/triacontane/
// [GitHub] : https://github.com/triacontane/
/*:
* @plugindesc
* @author トリアコンタン
*
* @param itemIconSwitchId
* @text アイテムアイコンスイッチID
* @desc 指定した番号のスイッチがONのとき\ITEM[n]でアイコンが表示されます。指定しない場合、常に表示されます。
* @default 0
* @type switch
*
* @help
*/
let DText_NRZureX = 0;
let DText_NRZureY = 0;
(function() {
'use strict';
var getCommandName = function(command) {
return (command || '').toUpperCase();
};
var getArgNumber = function(arg, min, max) {
if (arguments.length < 2) min = -Infinity;
if (arguments.length < 3) max = Infinity;
return (parseInt(convertEscapeCharacters(arg.toString())) || 0).clamp(min, max);
};
var getArgString = function(arg, upperFlg) {
arg = convertEscapeCharacters(arg);
return upperFlg ? arg.toUpperCase() : arg;
};
var getArgBoolean = function(arg) {
return (arg || '').toUpperCase() === 'ON';
};
var connectArgs = function(args, startIndex, endIndex) {
if (arguments.length < 2) startIndex = 0;
if (arguments.length < 3) endIndex = args.length;
var text = '';
for (var i = startIndex; i < endIndex; i++) {
text += args[i];
if (i < endIndex - 1) text += ' ';
}
return text;
};
var convertEscapeCharacters = function(text) {
if (text === undefined || text === null) text = '';
var window = SceneManager.getHiddenWindow();
return window ? window.convertEscapeCharacters(text) : text;
};
var getUsingVariables = function(text) {
var usingVariables = [];
text = text.replace(/\\/g, '\x1b');
text = text.replace(/\x1b\x1b/g, '\\');
text = text.replace(/\x1bV\[(\d+),\s*(\d+)]/gi, function() {
var number = parseInt(arguments[1], 10);
usingVariables.push(number);
return $gameVariables.value(number);
}.bind(this));
text = text.replace(/\x1bV\[(\d+)]/gi, function() {
var number = parseInt(arguments[1], 10);
usingVariables.push(number);
return $gameVariables.value(number);
}.bind(this));
text = text.replace(/\x1bV\[(\d+)]/gi, function() {
var number = parseInt(arguments[1], 10);
usingVariables.push(number);
return $gameVariables.value(number);
}.bind(this));
return usingVariables;
};
/**
* Create plugin parameter. param[paramName] ex. param.commandPrefix
* @param pluginName plugin name(EncounterSwitchConditions)
* @returns {Object} Created parameter
*/
var createPluginParameter = function(pluginName) {
var paramReplacer = function(key, value) {
if (value === 'null') {
return value;
}
if (value[0] === '"' && value[value.length - 1] === '"') {
return value;
}
try {
return JSON.parse(value);
} catch (e) {
return value;
}
};
var parameter = JSON.parse(JSON.stringify(PluginManager.parameters(pluginName), paramReplacer));
PluginManager.setParameters(pluginName, parameter);
return parameter;
};
var textDecParam = createPluginParameter('TextDecoration');
var param = createPluginParameter('JsScript22Set');
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.apply(this, arguments);
this.pluginCommandDTextPicture(command, args);
};
Game_Interpreter.textAlignMapper = {
LEFT: 0, CENTER: 1, RIGHT: 2, : 0, 中央: 1, : 2
};
Game_Interpreter.prototype.pluginCommandDTextPicture = function(command, args) {
switch (getCommandName(command)) {
case 'D_TEXT' :
if (isNaN(args[args.length - 1]) || args.length === 1) args.push($gameScreen.dTextSize || 28);
var fontSize = getArgNumber(args.pop());
$gameScreen.setDTextPicture(connectArgs(args), fontSize);
break;
case 'D_TEXT_SETTING':
switch (getCommandName(args[0])) {
case 'ALIGN' :
$gameScreen.dTextAlign = isNaN(args[1]) ?
Game_Interpreter.textAlignMapper[getArgString(args[1], true)] : getArgNumber(args[1], 0, 2);
break;
case 'BG_COLOR' :
$gameScreen.dTextBackColor = getArgString(connectArgs(args, 1));
break;
case 'BG_GRADATION_LEFT' :
$gameScreen.dTextGradationLeft = getArgNumber(args[1], 0);
break;
case 'BG_GRADATION_RIGHT' :
$gameScreen.dTextGradationRight = getArgNumber(args[1], 0);
break;
case 'FONT':
args.shift();
$gameScreen.setDtextFont(getArgString(connectArgs(args)));
break;
case 'REAL_TIME' :
$gameScreen.dTextRealTime = getArgBoolean(args[1]);
break;
case 'WINDOW':
$gameScreen.dWindowFrame = getArgBoolean(args[1]);
break;
}
break;
case 'D_TEXT_WINDOW_CURSOR' :
var windowRect = null;
if (getArgBoolean(args[1])) {
windowRect = {
x : getArgNumber(args[3] || '', 0),
y : getArgNumber(args[4] || '', 0),
width : getArgNumber(args[5] || '', 0),
height: getArgNumber(args[6] || '', 0)
};
}
$gameScreen.setDTextWindowCursor(getArgNumber(args[0], 0), windowRect);
break;
case 'D_TEXT_WINDOW_CURSOR_ACTIVE' :
$gameScreen.setDTextWindowCursorActive(getArgNumber(args[0], 0), getArgBoolean(args[1]));
break;
}
};
var _Game_Variables_setValue = Game_Variables.prototype.setValue;
Game_Variables.prototype.setValue = function(variableId, value) {
variableId = parseInt(variableId);
if (this.value(variableId) !== value) {
this._changedVariables = this.getChangedVariables();
if (!this._changedVariables.contains(variableId)) {
this._changedVariables.push(variableId);
}
}
_Game_Variables_setValue.apply(this, arguments);
};
Game_Variables.prototype.getChangedVariables = function() {
return this._changedVariables || [];
};
Game_Variables.prototype.clearChangedVariables = function() {
return this._changedVariables = [];
};
var _Game_Screen_clear = Game_Screen.prototype.clear;
Game_Screen.prototype.clear = function() {
_Game_Screen_clear.call(this);
this.clearDTextPicture();
};
Game_Screen.prototype.clearDTextPicture = function() {
this.dTextValue = null;
this.dTextOriginal = null;
this.dTextRealTime = null;
this.dTextSize = 0;
this.dTextAlign = 0;
this.dTextBackColor = null;
this.dTextFont = null;
this.dUsingVariables = null;
this.dWindowFrame = null;
this.dTextGradationRight = 0;
this.dTextGradationLeft = 0;
};
Game_Screen.prototype.setDTextPicture = function(value, size) {
if (typeof TranslationManager !== 'undefined') {
TranslationManager.translateIfNeed(value, function(translatedText) {
value = translatedText;
});
}
this.dUsingVariables = (this.dUsingVariables || []).concat(getUsingVariables(value));
this.dTextValue = (this.dTextValue || '') + getArgString(value, false) + '\n';
this.dTextOriginal = (this.dTextOriginal || '') + value + '\n';
this.dTextSize = size;
this.DText_NRZureX = DText_NRZureX;
this.DText_NRZureY = DText_NRZureY;
};
Game_Screen.prototype.setDTextWindowCursor = function(pictureId, rect) {
var picture = this.picture(pictureId);
if (picture) {
picture.setWindowCursor(rect);
picture.setWindowCursorActive(true);
}
};
Game_Screen.prototype.setDTextWindowCursorActive = function(pictureId, value) {
var picture = this.picture(pictureId);
if (picture) {
picture.setWindowCursorActive(value);
}
};
Game_Screen.prototype.getDTextPictureInfo = function() {
return {
value : this.dTextValue,
size : this.dTextSize || 0,
align : this.dTextAlign || 0,
color : this.dTextBackColor,
font : this.dTextFont,
usingVariables: this.dUsingVariables,
realTime : this.dTextRealTime,
originalValue : this.dTextOriginal,
windowFrame : this.dWindowFrame,
gradationLeft : this.dTextGradationLeft,
gradationRight: this.dTextGradationRight,
DText_NRZureX: this.DText_NRZureX,
DText_NRZureY: this.DText_NRZureY,
};
};
Game_Screen.prototype.isSettingDText = function() {
return !!this.dTextValue;
};
Game_Screen.prototype.setDtextFont = function(name) {
this.dTextFont = name;
};
var _Game_Screen_updatePictures = Game_Screen.prototype.updatePictures;
Game_Screen.prototype.updatePictures = function() {
_Game_Screen_updatePictures.apply(this, arguments);
$gameVariables.clearChangedVariables();
};
var _Game_Picture_initBasic = Game_Picture.prototype.initBasic;
Game_Picture.prototype.initBasic = function() {
_Game_Picture_initBasic.call(this);
this.dTextValue = null;
this.dTextInfo = null;
};
var _Game_Picture_show = Game_Picture.prototype.show;
Game_Picture.prototype.show = function(name, origin, x, y, scaleX,
scaleY, opacity, blendMode) {
if ($gameScreen.isSettingDText() && !name) {
arguments[0] = "DTextPicture::" + Date.now().toString();
this.dTextInfo = $gameScreen.getDTextPictureInfo();
$gameScreen.clearDTextPicture();
} else {
this.dTextInfo = null;
}
_Game_Picture_show.apply(this, arguments);
};
var _Game_Picture_update = Game_Picture.prototype.update;
Game_Picture.prototype.update = function() {
_Game_Picture_update.apply(this, arguments);
if (this.dTextInfo && this.dTextInfo.realTime) {
this.updateDTextVariable();
}
};
Game_Picture.prototype.updateDTextVariable = function() {
$gameVariables.getChangedVariables().forEach(function(variableId) {
if (this.dTextInfo.usingVariables.contains(variableId)) {
this._name = "DTextPicture::" + Date.now().toString();
this.dTextInfo.value = getArgString(this.dTextInfo.originalValue, false);
}
}, this);
};
Game_Picture.prototype.setWindowCursor = function(rect) {
this._windowCursor = rect;
};
Game_Picture.prototype.getWindowCursor = function() {
return this._windowCursor;
};
Game_Picture.prototype.setWindowCursorActive = function(value) {
this._windowCursorActive = value;
};
Game_Picture.prototype.getWindowCursorActive = function() {
return this._windowCursorActive;
};
SceneManager.getHiddenWindow = function() {
if (!this._hiddenWindow) {
this._hiddenWindow = new Window_Hidden(1, 1, 1, 1);
}
return this._hiddenWindow;
};
SceneManager.getSpriteset = function() {
return this._scene._spriteset;
};
var _Window_Base_convertEscapeCharacters = Window_Base.prototype.convertEscapeCharacters;
Window_Base.prototype.convertEscapeCharacters = function(text) {
text = _Window_Base_convertEscapeCharacters.call(this, text);
text = text.replace(/\x1bV\[(\d+),\s*(\d+)]/gi, function() {
return this.getVariablePadZero($gameVariables.value(parseInt(arguments[1], 10)), arguments[2]);
}.bind(this));
text = text.replace(/\x1bITEM\[(\d+)]/gi, function() {
var item = $dataItems[getArgNumber(arguments[1], 1, $dataItems.length)];
return this.getItemInfoText(item);
}.bind(this));
text = text.replace(/\x1bWEAPON\[(\d+)]/gi, function() {
var item = $dataWeapons[getArgNumber(arguments[1], 1, $dataWeapons.length)];
return this.getItemInfoText(item);
}.bind(this));
text = text.replace(/\x1bJOB\[(\d+)]/gi, function() {
var item = $dataClasses[getArgNumber(arguments[1], 1, $dataClasses.length)];
return item.name;
}.bind(this));
text = text.replace(/\x1bARMOR\[(\d+)]/gi, function() {
var item = $dataArmors[getArgNumber(arguments[1], 1, $dataArmors.length)];
return this.getItemInfoText(item);
}.bind(this));
text = text.replace(/\x1bSKILL\[(\d+)]/gi, function() {
var item = $dataSkills[getArgNumber(arguments[1], 1, $dataSkills.length)];
return this.getItemInfoText(item);
}.bind(this));
text = text.replace(/\x1bSTATE\[(\d+)]/gi, function() {
var item = $dataStates[getArgNumber(arguments[1], 1, $dataStates.length)];
return this.getItemInfoText(item);
}.bind(this));
return text;
};
Window_Base.prototype.getItemInfoText = function(item) {
if (!item) {
return '';
}
return (this.isValidDTextIconSwitch() ? '\x1bi[' + item.iconIndex + ']' : '') + item.name;
};
Window_Base.prototype.isValidDTextIconSwitch = function() {
return !param.itemIconSwitchId || $gameSwitches.value(param.itemIconSwitchId);
};
Window_Base.prototype.getVariablePadZero = function(value, digit) {
return (value < 0 ? '-' : '') + Math.abs(value).padZero(digit);
};
var _Sprite_Picture_update = Sprite_Picture.prototype.update;
Sprite_Picture.prototype.update = function() {
_Sprite_Picture_update.apply(this, arguments);
if (this._frameWindow) {
this.updateFrameWindow();
}
};
Sprite_Picture.prototype.updateFrameWindow = function() {
var padding = this._frameWindow.standardPadding();
this._frameWindow.x = this.x - (this.anchor.x * this.width * this.scale.x) - padding;
this._frameWindow.y = this.y - (this.anchor.y * this.height * this.scale.y) - padding;
this._frameWindow.opacity = this.opacity;
if (!this.visible) {
this.removeFrameWindow();
return;
}
if (!this._addFrameWindow) {
this.addFrameWindow();
}
if (Graphics.frameCount % 2 === 0) {
this.adjustScaleFrameWindow();
}
this.updateFrameWindowCursor();
};
Sprite_Picture.prototype.updateFrameWindowCursor = function() {
var picture = this.picture();
if (!picture) {
return;
}
var rect = picture.getWindowCursor();
if (rect) {
var width = rect.width || this._frameWindow.contentsWidth();
var height = rect.width || this._frameWindow.contentsHeight();
this._frameWindow.setCursorRect(0, 0, width, height);
this._frameWindow.active = picture.getWindowCursorActive();
} else {
this._frameWindow.setCursorRect(0, 0, 0, 0);
}
};
Sprite_Picture.prototype.adjustScaleFrameWindow = function() {
var padding = this._frameWindow.standardPadding();
var newFrameWidth = Math.floor(this.width * this.scale.x + padding * 2);
var newFrameHeight = Math.floor(this.height * this.scale.x + padding * 2);
if (this._frameWindow.width !== newFrameWidth || this._frameWindow.height !== newFrameHeight) {
this._frameWindow.move(this._frameWindow.x, this._frameWindow.y, newFrameWidth, newFrameHeight);
}
};
Sprite_Picture.prototype.addFrameWindow = function() {
var parent = this.parent;
if (parent) {
var index = parent.getChildIndex(this);
parent.addChildAt(this._frameWindow, index);
this._addFrameWindow = true;
}
};
Sprite_Picture.prototype.removeFrameWindow = function() {
var parent = this.parent;
if (parent) {
parent.removeChild(this._frameWindow);
this._frameWindow = null;
this._addFrameWindow = false;
}
};
var _Sprite_Picture_loadBitmap = Sprite_Picture.prototype.loadBitmap;
Sprite_Picture.prototype.loadBitmap = function() {
this.dTextInfo = this.picture().dTextInfo;
if (this.dTextInfo) {
this.makeDynamicBitmap();
} else {
_Sprite_Picture_loadBitmap.apply(this, arguments);
}
};
Sprite_Picture.prototype.makeDynamicBitmap = function() {
this.textWidths = [];
this.hiddenWindow = SceneManager.getHiddenWindow();
this.hiddenWindow.resetFontSettings(this.dTextInfo);
var bitmapVirtual = new Bitmap_Virtual();
this._processText(bitmapVirtual);
this.hiddenWindow.resetFontSettings(this.dTextInfo);
this.bitmap = new Bitmap(bitmapVirtual.width, bitmapVirtual.height);
this.applyTextDecoration();
this.bitmap.fontFace = this.hiddenWindow.contents.fontFace;
if (this.dTextInfo.color) {
this.bitmap.fillAll(this.dTextInfo.color);
var h = this.bitmap.height;
var w = this.bitmap.width;
var gradationLeft = this.dTextInfo.gradationLeft;
if (gradationLeft > 0) {
this.bitmap.clearRect(0, 0, gradationLeft, h);
this.bitmap.gradientFillRect(0, 0, gradationLeft, h, 'rgba(0, 0, 0, 0)', this.dTextInfo.color, false);
}
var gradationRight = this.dTextInfo.gradationRight;
if (gradationRight > 0) {
this.bitmap.clearRect(w - gradationRight, 0, gradationRight, h);
this.bitmap.gradientFillRect(w - gradationRight, 0, gradationRight, h, this.dTextInfo.color, 'rgba(0, 0, 0, 0)', false);
}
}
this._processText(this.bitmap);
this._colorTone = [0, 0, 0, 0];
if (this._frameWindow) {
this.removeFrameWindow();
}
if (this.dTextInfo.windowFrame) {
var scaleX = this.picture().scaleX() / 100;
var scaleY = this.picture().scaleY() / 100;
this.makeFrameWindow(bitmapVirtual.width * scaleX, bitmapVirtual.height * scaleY);
}
this.hiddenWindow = null;
};
Sprite_Picture.prototype.applyTextDecoration = function() {
if (textDecParam.Mode >= 0) {
this.bitmap.outlineColor =
'rgba(%1,%2,%3,%4)'.format(textDecParam.Red, textDecParam.Green, textDecParam.Blue, textDecParam.Alpha / 255);
this.bitmap.decorationMode = textDecParam.Mode;
}
};
Sprite_Picture.prototype.makeFrameWindow = function(width, height) {
var padding = this.hiddenWindow.standardPadding();
this._frameWindow = new Window_Base(0, 0, width + padding * 2, height + padding * 2);
};
Sprite_Picture.prototype._processText = function(bitmap) {
var textState = {index: 0, x: 0, y: 0, text: this.dTextInfo.value, left: 0, line: -1, height: 0};
this._processNewLine(textState, bitmap);
textState.height = this.hiddenWindow.calcTextHeight(textState, false);
textState.index = 0;
while (textState.text[textState.index]) {
this._processCharacter(textState, bitmap);
}
};
Sprite_Picture.prototype._processCharacter = function(textState, bitmap) {
if (textState.text[textState.index] === '\x1b') {
var code = this.hiddenWindow.obtainEscapeCode(textState);
switch (code) {
case 'C':
bitmap.textColor = this.hiddenWindow.textColor(this.hiddenWindow.obtainEscapeParam(textState));
break;
case 'I':
this._processDrawIcon(this.hiddenWindow.obtainEscapeParam(textState), textState, bitmap , this.dTextInfo.DText_NRZureX);
break;
case '{':
this.hiddenWindow.makeFontBigger();
break;
case '}':
this.hiddenWindow.makeFontSmaller();
break;
case 'F':
switch (this.hiddenWindow.obtainEscapeParamString(textState).toUpperCase()) {
case 'I':
bitmap.fontItalic = true;
break;
case 'B':
bitmap.fontBoldFotDtext = true;
break;
case '/':
case 'N':
bitmap.fontItalic = false;
bitmap.fontBoldFotDtext = false;
break;
}
break;
case 'OC':
var colorCode = this.hiddenWindow.obtainEscapeParamString(textState);
var colorIndex = Number(colorCode);
if (!isNaN(colorIndex)) {
bitmap.outlineColor = this.hiddenWindow.textColor(colorIndex);
} else {
bitmap.outlineColor = colorCode;
}
break;
case 'OW':
bitmap.outlineWidth = this.hiddenWindow.obtainEscapeParam(textState);
break;
}
} else if (textState.text[textState.index] === '\n') {
this._processNewLine(textState, bitmap);
} else {
var c = textState.text[textState.index++];
var w = this.hiddenWindow.textWidth(c);
bitmap.fontSize = this.hiddenWindow.contents.fontSize;
if(textState.x == 0) {
if(this.dTextInfo != null) {
textState.height += (this.dTextInfo.DText_NRZureY);
}
}
bitmap.drawText(c, textState.x, textState.y, w * 2, textState.height, 'left');
if(this.dTextInfo != null) {
textState.x += this.dTextInfo.DText_NRZureX;
}
textState.x += w;
}
};
Sprite_Picture.prototype._processNewLine = function(textState, bitmap) {
if (bitmap instanceof Bitmap_Virtual)
this.textWidths[textState.line] = textState.x;
this.hiddenWindow.processNewLine(textState);
textState.line++;
if (bitmap instanceof Bitmap)
textState.x = (bitmap.width - this.textWidths[textState.line]) / 2 * this.dTextInfo.align;
};
Sprite_Picture.prototype._processDrawIcon = function(iconIndex, textState, bitmap , _ZureX) {
var iconBitmap = ImageManager.loadSystem('IconSet');
var pw = Window_Base._iconWidth;
var ph = Window_Base._iconHeight;
var sx = iconIndex % 16 * pw;
var sy = Math.floor(iconIndex / 16) * ph;
bitmap.blt(iconBitmap, sx, sy, pw, ph, textState.x + 2, textState.y + (textState.height - ph) / 2);
textState.x += Window_Base._iconWidth + 4 + _ZureX;
};
function Bitmap_Virtual() {
this.initialize.apply(this, arguments);
}
Bitmap_Virtual.prototype.initialize = function() {
this.window = SceneManager.getHiddenWindow();
this.width = 0;
this.height = 0;
};
Bitmap_Virtual.prototype.drawText = function(text, x, y) {
var baseWidth = this.window.textWidth(text);
var fontSize = this.window.contents.fontSize;
if (this.fontItalic) {
baseWidth += Math.floor(fontSize / 6);
}
if (this.fontBoldFotDtext) {
baseWidth += 2;
}
this.width = Math.max(x + baseWidth, this.width);
this.height = Math.max(y + fontSize + 8, this.height);
};
Bitmap_Virtual.prototype.blt = function(source, sx, sy, sw, sh, dx, dy, dw, dh) {
this.width = Math.max(dx + (dw || sw), this.width);
this.height = Math.max(dy + (dh || sh), this.height);
};
function Window_Hidden() {
this.initialize.apply(this, arguments);
}
Window_Hidden.prototype.backOpacity = null;
Window_Hidden.prototype = Object.create(Window_Base.prototype);
Window_Hidden.prototype.constructor = Window_Hidden;
Window_Hidden.prototype._createAllParts = function() {
this._windowBackSprite = {};
this._windowSpriteContainer = {};
this._windowContentsSprite = new Sprite();
this.addChild(this._windowContentsSprite);
};
Window_Hidden.prototype._refreshAllParts = function() {};
Window_Hidden.prototype._refreshBack = function() {};
Window_Hidden.prototype._refreshFrame = function() {};
Window_Hidden.prototype._refreshCursor = function() {};
Window_Hidden.prototype._refreshArrows = function() {};
Window_Hidden.prototype._refreshPauseSign = function() {};
Window_Hidden.prototype.updateTransform = function() {};
Window_Hidden.prototype.resetFontSettings = function(dTextInfo) {
if (dTextInfo) {
var customFont = dTextInfo.font ? dTextInfo.font + ',' : '';
this.contents.fontFace = customFont + this.standardFontFace();
this.contents.fontSize = dTextInfo.size || this.standardFontSize();
} else {
Window_Base.prototype.resetFontSettings.apply(this, arguments);
}
};
Window_Hidden.prototype.obtainEscapeParamString = function(textState) {
var arr = /^\[.+?]/.exec(textState.text.slice(textState.index));
if (arr) {
textState.index += arr[0].length;
return arr[0].substring(1, arr[0].length - 1);
} else {
return '';
}
};
var _Bitmap__makeFontNameText = Bitmap.prototype._makeFontNameText;
Bitmap.prototype._makeFontNameText = function() {
return (this.fontBoldFotDtext ? 'bold ' : '') + _Bitmap__makeFontNameText.apply(this, arguments);
};
var _NSprite_update = NSprite.prototype.update;
NSprite.prototype.update = function() {
_NSprite_update.apply(this, arguments);
if (this._frameWindow) {
this.updateFrameWindow();
}
};
NSprite.prototype.updateFrameWindow = function() {
var padding = this._frameWindow.standardPadding();
this._frameWindow.x = this.x - (this.anchor.x * this.width * this.scale.x) - padding;
this._frameWindow.y = this.y - (this.anchor.y * this.height * this.scale.y) - padding;
this._frameWindow.opacity = this.opacity;
if (!this.visible) {
this.removeFrameWindow();
return;
}
if (!this._addFrameWindow) {
this.addFrameWindow();
}
if (Graphics.frameCount % 2 === 0) {
this.adjustScaleFrameWindow();
}
this.updateFrameWindowCursor();
};
NSprite.prototype.updateFrameWindowCursor = function() {
var picture = this.picture();
if (!picture) {
return;
}
var rect = picture.getWindowCursor();
if (rect) {
var width = rect.width || this._frameWindow.contentsWidth();
var height = rect.width || this._frameWindow.contentsHeight();
this._frameWindow.setCursorRect(0, 0, width, height);
this._frameWindow.active = picture.getWindowCursorActive();
} else {
this._frameWindow.setCursorRect(0, 0, 0, 0);
}
};
NSprite.prototype.adjustScaleFrameWindow = function() {
var padding = this._frameWindow.standardPadding();
var newFrameWidth = Math.floor(this.width * this.scale.x + padding * 2);
var newFrameHeight = Math.floor(this.height * this.scale.x + padding * 2);
if (this._frameWindow.width !== newFrameWidth || this._frameWindow.height !== newFrameHeight) {
this._frameWindow.move(this._frameWindow.x, this._frameWindow.y, newFrameWidth, newFrameHeight);
}
};
NSprite.prototype.addFrameWindow = function() {
var parent = this.parent;
if (parent) {
var index = parent.getChildIndex(this);
parent.addChildAt(this._frameWindow, index);
this._addFrameWindow = true;
}
};
NSprite.prototype.removeFrameWindow = function() {
var parent = this.parent;
if (parent) {
parent.removeChild(this._frameWindow);
this._frameWindow = null;
this._addFrameWindow = false;
}
};
var _NSprite_loadBitmap = NSprite.prototype.loadBitmap;
NSprite.prototype.loadBitmap = function() {
if (_SetdTextInfo) {
this.makeDynamicBitmap();
} else {
_NSprite_loadBitmap.apply(this, arguments);
}
};
NSprite.prototype.makeDynamicBitmap = function() {
this.DText_NRZureX = DText_NRZureX;
this.DText_NRZureY = DText_NRZureY;
this.textWidths = [];
this.hiddenWindow = SceneManager.getHiddenWindow();
this.hiddenWindow.resetFontSettings(_SetdTextInfo);
var bitmapVirtual = new Bitmap_Virtual();
this._processText(bitmapVirtual);
this.hiddenWindow.resetFontSettings(_SetdTextInfo);
this.bitmap = new Bitmap(bitmapVirtual.width, bitmapVirtual.height);
this.applyTextDecoration();
this.bitmap.fontFace = this.hiddenWindow.contents.fontFace;
if (_SetdTextInfo.color) {
this.bitmap.fillAll(_SetdTextInfo.color);
var h = this.bitmap.height;
var w = this.bitmap.width;
var gradationLeft = _SetdTextInfo.gradationLeft;
if (gradationLeft > 0) {
this.bitmap.clearRect(0, 0, gradationLeft, h);
this.bitmap.gradientFillRect(0, 0, gradationLeft, h, 'rgba(0, 0, 0, 0)', _SetdTextInfo.color, false);
}
var gradationRight = _SetdTextInfo.gradationRight;
if (gradationRight > 0) {
this.bitmap.clearRect(w - gradationRight, 0, gradationRight, h);
this.bitmap.gradientFillRect(w - gradationRight, 0, gradationRight, h, _SetdTextInfo.color, 'rgba(0, 0, 0, 0)', false);
}
}
this._processText(this.bitmap);
this._colorTone = [0, 0, 0, 0];
if (this._frameWindow) {
this.removeFrameWindow();
}
if (_SetdTextInfo.windowFrame) {
var scaleX = this.picture().scaleX() / 100;
var scaleY = this.picture().scaleY() / 100;
this.makeFrameWindow(bitmapVirtual.width * scaleX, bitmapVirtual.height * scaleY);
}
this.hiddenWindow = null;
};
NSprite.prototype.applyTextDecoration = function() {
if (textDecParam.Mode >= 0) {
this.bitmap.outlineColor =
'rgba(%1,%2,%3,%4)'.format(textDecParam.Red, textDecParam.Green, textDecParam.Blue, textDecParam.Alpha / 255);
this.bitmap.decorationMode = textDecParam.Mode;
}
};
NSprite.prototype.makeFrameWindow = function(width, height) {
var padding = this.hiddenWindow.standardPadding();
this._frameWindow = new Window_Base(0, 0, width + padding * 2, height + padding * 2);
};
NSprite.prototype._processText = function(bitmap) {
var textState = {index: 0, x: 0, y: 0, text: _SetdTextInfo.value, left: 0, line: -1, height: 0};
this._processNewLine(textState, bitmap);
textState.height = this.hiddenWindow.calcTextHeight(textState, false);
textState.index = 0;
while (textState.text[textState.index]) {
this._processCharacter(textState, bitmap);
}
};
NSprite.prototype._processCharacter = function(textState, bitmap) {
if (textState.text[textState.index] === '\x1b') {
var code = this.hiddenWindow.obtainEscapeCode(textState);
switch (code) {
case 'C':
bitmap.textColor = this.hiddenWindow.textColor(this.hiddenWindow.obtainEscapeParam(textState));
break;
case 'I':
this._processDrawIcon(this.hiddenWindow.obtainEscapeParam(textState), textState, bitmap);
break;
case '{':
this.hiddenWindow.makeFontBigger();
break;
case '}':
this.hiddenWindow.makeFontSmaller();
break;
case 'F':
switch (this.hiddenWindow.obtainEscapeParamString(textState).toUpperCase()) {
case 'I':
bitmap.fontItalic = true;
break;
case 'B':
bitmap.fontBoldFotDtext = true;
break;
case '/':
case 'N':
bitmap.fontItalic = false;
bitmap.fontBoldFotDtext = false;
break;
}
break;
case 'OC':
var colorCode = this.hiddenWindow.obtainEscapeParamString(textState);
var colorIndex = Number(colorCode);
if (!isNaN(colorIndex)) {
bitmap.outlineColor = this.hiddenWindow.textColor(colorIndex);
} else {
bitmap.outlineColor = colorCode;
}
break;
case 'OW':
bitmap.outlineWidth = this.hiddenWindow.obtainEscapeParam(textState);
break;
}
} else if (textState.text[textState.index] === '\n') {
this._processNewLine(textState, bitmap);
} else {
var c = textState.text[textState.index++];
var w = this.hiddenWindow.textWidth(c);
if(textState.x == 0) {
if(this.DText_NRZureY != undefined) {
textState.height += (this.DText_NRZureY * textState.line);
}
}
bitmap.fontSize = this.hiddenWindow.contents.fontSize;
bitmap.drawText(c, textState.x, textState.y, w * 2, textState.height, 'left');
if(this.DText_NRZureX != undefined) {
textState.x += this.DText_NRZureX;
}
textState.x += w;
}
};
NSprite.prototype._processNewLine = function(textState, bitmap) {
if (bitmap instanceof Bitmap_Virtual)
this.textWidths[textState.line] = textState.x;
this.hiddenWindow.processNewLine(textState);
textState.line++;
if (bitmap instanceof Bitmap)
textState.x = (bitmap.width - this.textWidths[textState.line]) / 2 * _SetdTextInfo.align;
};
NSprite.prototype._processDrawIcon = function(iconIndex, textState, bitmap) {
var iconBitmap = ImageManager.loadSystem('IconSet');
var pw = Window_Base._iconWidth;
var ph = Window_Base._iconHeight;
var sx = iconIndex % 16 * pw;
var sy = Math.floor(iconIndex / 16) * ph;
bitmap.blt(iconBitmap, sx, sy, pw, ph, textState.x + 2, textState.y + (textState.height - ph) / 2);
textState.x += Window_Base._iconWidth + 4;
};
})();