1050 lines
39 KiB
JavaScript
1050 lines
39 KiB
JavaScript
// 一度に複数のメッセージウィンドウを表示するプラグイン(v2)
|
|
var Imported = Imported || {};
|
|
Imported.FTKR_EMW = true;
|
|
var FTKR = FTKR || {};
|
|
FTKR.EMW = FTKR.EMW || {};
|
|
/*:
|
|
* @plugindesc
|
|
* @author フトコロ
|
|
*
|
|
* @param --初期設定--
|
|
* @desc
|
|
*
|
|
* @param Create ExWindow Number
|
|
* @desc 拡張ウィンドウを生成する数を設定します。
|
|
* @default 1
|
|
*
|
|
* @param --シーン開始時--
|
|
* @desc
|
|
*
|
|
* @param Scene Start Terminate
|
|
* @desc シーン開始時にすべてのウィンドウIDを強制終了する。
|
|
* 1 - 有効にする、0 - 無効にする
|
|
* @default 1
|
|
*
|
|
* @param --イベント終了時--
|
|
* @desc
|
|
*
|
|
* @param Reset Window Id
|
|
* @desc イベント終了時にウィンドウIDをリセットする。
|
|
* 1 - 有効にする、0 - 無効にする
|
|
* @default 0
|
|
*
|
|
* @help
|
|
*/
|
|
FTKR.EMW.parameters = PluginManager.parameters('JsScript11Set');
|
|
FTKR.EMW.nameWindows = [];
|
|
FTKR.EMW.exwindowNum = Number(FTKR.EMW.parameters['Create ExWindow Number'] || 0);
|
|
FTKR.EMW.scene = {
|
|
startTerminate:Number(FTKR.EMW.parameters['Scene Start Terminate'] || 0),
|
|
};
|
|
FTKR.EMW.event = {
|
|
resetWindowId:Number(FTKR.EMW.parameters['Reset Window Id'] || 0),
|
|
};
|
|
var readObjectMeta = function(obj, metacodes) {
|
|
if (!obj) return false;
|
|
metacodes.some(function(metacode){
|
|
var metaReg = new RegExp('<' + metacode + ':[ ]*(.+)>', 'i');
|
|
return obj.note.match(metaReg);
|
|
});
|
|
return RegExp.$1 ? Number(RegExp.$1) : false;
|
|
};
|
|
var convertPositionX = function(text) {
|
|
switch(true){
|
|
case /左/.test(text):
|
|
case /left/i.test(text):
|
|
case Number(text) === 0:
|
|
return 0;
|
|
case /中/.test(text):
|
|
case /center/i.test(text):
|
|
case Number(text) === 1:
|
|
return 1;
|
|
case /右/.test(text):
|
|
case /right/i.test(text):
|
|
case Number(text) === 2:
|
|
return 2;
|
|
default:
|
|
return undefined;
|
|
}
|
|
};
|
|
var matchTextToRegs = function(test, regs) {
|
|
return regs.some( function(reg){
|
|
return test.match(reg);
|
|
});
|
|
};
|
|
var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
|
|
Game_Interpreter.prototype.pluginCommand = function(command, args) {
|
|
_Game_Interpreter_pluginCommand.call(this, command, args);
|
|
if (!command.match(/EMW_(.+)/i)) return;
|
|
command = RegExp.$1;
|
|
if(!matchTextToRegs(command, [/メッセージウィンドウ(.+)/, /MessageWindow_(.+)/i])) return;
|
|
command = (RegExp.$1 + '').toUpperCase();
|
|
switch (command) {
|
|
case '指定':
|
|
case 'SET':
|
|
this.setMessageWindowId(args);
|
|
break;
|
|
case 'リセット':
|
|
case 'RESET':
|
|
this._windowId = 0;
|
|
break;
|
|
case '強制クローズ':
|
|
case '強制終了':
|
|
case 'CLOSE':
|
|
this.messageWindowTerminate(args);
|
|
break;
|
|
case '終了禁止':
|
|
case 'NOEND':
|
|
var windowId = Number(args[0] || 0);
|
|
if (windowId >= 0) $gameMessageEx.window(windowId).prohibitClose();
|
|
break;
|
|
case '終了許可':
|
|
case 'CANCLOSE':
|
|
var windowId = Number(args[0] || 0);
|
|
if (windowId >= 0) $gameMessageEx.window(windowId).permitClose();
|
|
break;
|
|
case 'サイズ設定':
|
|
case 'SETSIZE':
|
|
this.setMessageWindowSize(args);
|
|
break;
|
|
case '位置設定':
|
|
case 'SETPOSITION':
|
|
var windowId = Number(args[0] || 0);
|
|
if (windowId >= 0) $gameMessageEx.window(windowId).setPositionX(args[1]);
|
|
break;
|
|
case '行動許可':
|
|
case 'CANMOVE':
|
|
var windowId = Number(args[0] || 0);
|
|
if (windowId >= 0) $gameMessageEx.window(windowId).enabledCanMovePlayer(args[1]);
|
|
break;
|
|
case '行動禁止':
|
|
case 'NOTMOVE':
|
|
var windowId = Number(args[0] || 0);
|
|
if (windowId >= 0) $gameMessageEx.window(windowId).disabledCanMovePlayer(args[1]);
|
|
break;
|
|
case 'テキスト更新':
|
|
case 'UPDATE_TEXT':
|
|
var windowId = Number(args[0] || 0);
|
|
if (windowId >= 0) $gameMessageEx.window(windowId).setFinishDisp();
|
|
break;
|
|
}
|
|
};
|
|
Game_Interpreter.prototype.setMessageWindowId = function(args) {
|
|
var windowId = Number(args[0] || 0);
|
|
if (windowId >= 0) {
|
|
this._windowId = windowId;
|
|
var width = 0, heightLine = 0;
|
|
for (var i = 1; i < args.length; i++) {
|
|
var arg = (args[i] + '').toUpperCase();
|
|
switch (arg) {
|
|
case 'テキスト更新':
|
|
case 'UPDATE_TEXT':
|
|
$gameMessageEx.window(windowId).setFinishDisp();
|
|
break;
|
|
case '終了禁止':
|
|
case 'NOEND':
|
|
$gameMessageEx.window(windowId).prohibitClose();
|
|
break;
|
|
case '終了許可':
|
|
case 'CANCLOSE':
|
|
$gameMessageEx.window(windowId).permitClose();
|
|
break;
|
|
case '行動許可':
|
|
case 'CANMOVE':
|
|
$gameMessageEx.window(windowId).enabledCanMovePlayer();
|
|
break;
|
|
case '行動禁止':
|
|
case 'NOTMOVE':
|
|
$gameMessageEx.window(windowId).disabledCanMovePlayer();
|
|
break;
|
|
case '幅':
|
|
case 'WIDTH':
|
|
i++;
|
|
width = Number(args[i]);
|
|
break;
|
|
case '行数':
|
|
case 'LINES':
|
|
i++;
|
|
heightLine = Number(args[i]);
|
|
break;
|
|
default:
|
|
if (convertPositionX(arg) !== undefined) {
|
|
$gameMessageEx.window(windowId).setPositionX(arg);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
if (width || heightLine) {
|
|
$gameMessageEx.window(windowId).setWindowSize(width, heightLine);
|
|
}
|
|
}
|
|
};
|
|
Game_Interpreter.prototype.messageWindowTerminate = function(args) {
|
|
var arg = (args[0] + '').toUpperCase();
|
|
switch (arg) {
|
|
case 'すべて':
|
|
case 'ALL':
|
|
$gameMessageEx.windows().forEach( function(message){
|
|
message.terminate();
|
|
});
|
|
break;
|
|
default:
|
|
var windowId = Number(args[0] || 0);
|
|
if (windowId >= 0) {
|
|
$gameMessageEx.window(windowId).terminate();
|
|
}
|
|
break;
|
|
}
|
|
};
|
|
Game_Interpreter.prototype.setMessageWindowSize = function(args) {
|
|
var windowId = Number(args[0] || 0);
|
|
if (windowId >= 0) {
|
|
var width = 0, heightLine = 0;
|
|
for (var i = 1; i < args.length; i++) {
|
|
var arg = (args[i] + '').toUpperCase();
|
|
switch (arg) {
|
|
case '幅':
|
|
case 'WIDTH':
|
|
i++;
|
|
width = Number(args[i]);
|
|
break;
|
|
case '行数':
|
|
case 'LINES':
|
|
i++;
|
|
heightLine = Number(args[i]);
|
|
break;
|
|
case 'リセット':
|
|
case 'RESET':
|
|
width = Graphics.boxWidth;
|
|
heightLine = 4;
|
|
continue;
|
|
}
|
|
}
|
|
$gameMessageEx.window(windowId).setWindowSize(width, heightLine);
|
|
}
|
|
};
|
|
FTKR.EMW.Game_Message_initialize = Game_Message.prototype.initialize;
|
|
Game_Message.prototype.initialize = function() {
|
|
FTKR.EMW.Game_Message_initialize.call(this);
|
|
this._permissionClose = true;
|
|
this._canMovePlayer = false;
|
|
this._terminate = false;
|
|
this._finishDisp = false;
|
|
};
|
|
FTKR.EMW.Game_Message_clear = Game_Message.prototype.clear;
|
|
Game_Message.prototype.clear = function() {
|
|
FTKR.EMW.Game_Message_clear.call(this);
|
|
this._lastText = false;
|
|
this._positionX = 0;
|
|
this._windowWidth = 0;
|
|
this._windowHeightLine = 0;
|
|
};
|
|
FTKR.EMW.Window_Message_initialize = Window_Message.prototype.initialize;
|
|
Window_Message.prototype.initialize = function() {
|
|
this._windowId = this._windowId || 0;
|
|
this._gameMessage = $gameMessageEx.window(this._windowId);
|
|
FTKR.EMW.Window_Message_initialize.call(this);
|
|
};
|
|
FTKR.EMW.Window_Message_processEscapeCharacter = Window_Message.prototype.processEscapeCharacter;
|
|
Window_Message.prototype.processEscapeCharacter = function(code, textState) {
|
|
switch (code) {
|
|
case 'EMP':
|
|
$gameMessageEx.window(this._windowId).enabledCanMovePlayer();
|
|
break;
|
|
case 'DMP':
|
|
$gameMessageEx.window(this._windowId).disabledCanMovePlayer();
|
|
break;
|
|
default:
|
|
FTKR.EMW.Window_Message_processEscapeCharacter.call(this, code, textState);
|
|
break;
|
|
}
|
|
};
|
|
Game_Message.prototype.canMovePlayer = function() {
|
|
return this._canMovePlayer;
|
|
};
|
|
Game_Message.prototype.enabledCanMovePlayer = function() {
|
|
this._canMovePlayer = true;
|
|
};
|
|
Game_Message.prototype.disabledCanMovePlayer = function() {
|
|
this._canMovePlayer = false;
|
|
};
|
|
Game_Message.prototype.isBusy = function() {
|
|
return $gameMessageEx.windows().some(function(message){
|
|
return message.isEmwBusy();
|
|
});
|
|
};
|
|
Game_Message.prototype.isEmwBusy = function() {
|
|
return this.canMovePlayer() ? false : this.isEmwEventBusy();
|
|
};
|
|
Game_Message.prototype.isEmwEventBusy = function() {
|
|
return this.isLastText() ? false : this.isBusyBase();
|
|
};
|
|
Game_Message.prototype.isBusyBase = function() {
|
|
return (this.hasText() || this.isChoice() ||
|
|
this.isNumberInput() || this.isItemChoice());
|
|
};
|
|
Window_Message.prototype.update = function() {
|
|
this.checkToNotClose();
|
|
Window_Base.prototype.update.call(this);
|
|
while (this.updateConditions()) {
|
|
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.updateConditions = function() {
|
|
return !this.isOpening() && !this.isClosing() && !this._gameMessage.isLastText();
|
|
};
|
|
FTKR.EMW.Window_Message_updateWait = Window_Message.prototype.updateWait;
|
|
Window_Message.prototype.updateWait = function() {
|
|
if (this._gameMessage.isFinishDisp()) {
|
|
this.finishDisplay();
|
|
if (this._gameMessage.isTerminate()) {
|
|
this._gameMessage.resetTerminate();
|
|
}
|
|
return false;
|
|
}
|
|
return FTKR.EMW.Window_Message_updateWait.call(this);
|
|
};
|
|
Window_Message.prototype.finishDisplay = function() {
|
|
this._waitCount = 0;
|
|
if(this._textState) this._textState.index = this._textState.text.length;
|
|
this._pauseSkip = true;
|
|
this.pause = false;
|
|
this._gameMessage.resetFinishDisp();
|
|
};
|
|
FTKR.EMW.Window_Message_terminateMessage = Window_Message.prototype.terminateMessage;
|
|
Window_Message.prototype.terminateMessage = function() {
|
|
this._gameMessage.lastText();
|
|
if (this._gameMessage.canClose()) {
|
|
FTKR.EMW.Window_Message_terminateMessage.call(this);
|
|
}
|
|
};
|
|
Game_Message.prototype.isFinishDisp = function() {
|
|
return this._finishDisp;
|
|
};
|
|
Game_Message.prototype.setFinishDisp = function() {
|
|
this._finishDisp = true;
|
|
};
|
|
Game_Message.prototype.resetFinishDisp = function() {
|
|
this._finishDisp = false;
|
|
};
|
|
Game_Message.prototype.isTerminate = function() {
|
|
return this._terminate;
|
|
};
|
|
Game_Message.prototype.setTerminate = function() {
|
|
this._terminate = true;
|
|
};
|
|
Game_Message.prototype.resetTerminate = function() {
|
|
this._terminate = false;
|
|
};
|
|
Game_Message.prototype.terminate = function() {
|
|
if (!this.isBusyBase()) return;
|
|
this.permitClose();
|
|
this.lastText();
|
|
this.setFinishDisp();
|
|
this.setTerminate();
|
|
var message = this.windowMessageEx();
|
|
if (message) {
|
|
message.activate()
|
|
message.terminateMessage();
|
|
}
|
|
}
|
|
Game_Message.prototype.windowMessageEx = function() {
|
|
return this._window_MessageEx;
|
|
}
|
|
Game_Message.prototype.isLastText = function() {
|
|
return this._lastText;
|
|
};
|
|
Game_Message.prototype.firstText = function() {
|
|
this._lastText = false;
|
|
};
|
|
Game_Message.prototype.lastText = function() {
|
|
this._lastText = true;
|
|
};
|
|
Game_Message.prototype.canClose = function() {
|
|
return this._permissionClose;
|
|
};
|
|
Game_Message.prototype.permitClose = function() {
|
|
this._permissionClose = true;
|
|
};
|
|
Game_Message.prototype.prohibitClose = function() {
|
|
this._permissionClose = false;
|
|
};
|
|
Game_Message.prototype.clearText = function() {
|
|
this._lastText = false;
|
|
this._texts = [];
|
|
};
|
|
Game_Message.prototype.disp = function(text) {
|
|
this.clear();
|
|
this.add(text);
|
|
}
|
|
FTKR.EMW.Window_Message_updatePlacement = Window_Message.prototype.updatePlacement;
|
|
Window_Message.prototype.updatePlacement = function() {
|
|
if ($gameMessage.windowWidth()) {
|
|
this.width = $gameMessage.windowWidth();
|
|
}
|
|
if ($gameMessage.windowHeightLine()) {
|
|
this.height = this.fittingHeight($gameMessage.windowHeightLine());
|
|
}
|
|
FTKR.EMW.Window_Message_updatePlacement.call(this);
|
|
if ($gameMessage.windowPositionX()) {
|
|
this._positionX = $gameMessage.windowPositionX();
|
|
this.x = this._positionX * (Graphics.boxWidth - this.width) / 2;
|
|
}
|
|
};
|
|
Game_Message.prototype.setWindowSize = function(width, heightLine) {
|
|
this._windowWidth = width;
|
|
this._windowHeightLine = heightLine;
|
|
};
|
|
Game_Message.prototype.windowWidth = function() {
|
|
return this._windowWidth;
|
|
};
|
|
Game_Message.prototype.windowHeightLine = function() {
|
|
return this._windowHeightLine;
|
|
};
|
|
Game_Message.prototype.setPositionX = function(positionX) {
|
|
this._positionX = convertPositionX(positionX);
|
|
};
|
|
Game_Message.prototype.windowPositionX = function() {
|
|
return this._positionX;
|
|
};
|
|
FTKR.EMW.Game_Interpreter_initialize = Game_Interpreter.prototype.initialize;
|
|
Game_Interpreter.prototype.initialize = function(depth) {
|
|
FTKR.EMW.Game_Interpreter_initialize.call(this, depth);
|
|
this._windowId = 0;
|
|
};
|
|
Game_Interpreter.prototype.windowId = function() {
|
|
return this._windowId;
|
|
};
|
|
FTKR.EMW.Game_Interpreter_terminate = Game_Interpreter.prototype.terminate;
|
|
Game_Interpreter.prototype.terminate = function() {
|
|
FTKR.EMW.Game_Interpreter_terminate.call(this);
|
|
if (FTKR.EMW.event.resetWindowId) this._windowId = 0;
|
|
};
|
|
FTKR.EMW.Game_Interpreter_command101 = Game_Interpreter.prototype.command101;
|
|
Game_Interpreter.prototype.command101 = function() {
|
|
var windowId = this.windowId();
|
|
if (!windowId) {
|
|
return FTKR.EMW.Game_Interpreter_command101.call(this);
|
|
} else {
|
|
if (!$gameMessageEx.window(windowId).isEmwEventBusy()) {
|
|
$gameMessageEx.window(windowId).clearText();
|
|
$gameMessageEx.window(windowId).setFaceImage(this._params[0], this._params[1]);
|
|
$gameMessageEx.window(windowId).setBackground(this._params[2]);
|
|
$gameMessageEx.window(windowId).setPositionType(this._params[3]);
|
|
this.continueMessages(windowId);
|
|
switch (this.nextEventCode()) {
|
|
case 102:
|
|
this._index++;
|
|
this.setupChoices(this.currentCommand().parameters);
|
|
break;
|
|
case 103:
|
|
this._index++;
|
|
this.setupNumInput(this.currentCommand().parameters);
|
|
break;
|
|
case 104:
|
|
this._index++;
|
|
this.setupItemChoice(this.currentCommand().parameters);
|
|
break;
|
|
}
|
|
this._index++;
|
|
this.setWaitMode('message');
|
|
}
|
|
return false;
|
|
}
|
|
};
|
|
Game_Interpreter.prototype.continueMessages =function(windowId) {
|
|
if (Imported.YEP_MessageCore) {
|
|
while (this.isContinueMessageString()) {
|
|
this._index++;
|
|
if (this._list[this._index].code === 401) {
|
|
$gameMessageEx.window(windowId).addText(this.currentCommand().parameters[0]);
|
|
}
|
|
if ($gameMessageEx.window(windowId)._texts.length >= $gameSystem.messageRows()) break;
|
|
}
|
|
} else {
|
|
while (this.nextEventCode() === 401) {
|
|
this._index++;
|
|
$gameMessageEx.window(windowId).add(this.currentCommand().parameters[0]);
|
|
}
|
|
}
|
|
};
|
|
FTKR.EMW.Game_Interpreter_command102 = Game_Interpreter.prototype.command102;
|
|
Game_Interpreter.prototype.command102 = function() {
|
|
var windowId = this.windowId();
|
|
if (!windowId) {
|
|
return FTKR.EMW.Game_Interpreter_command102.call(this);
|
|
} else {
|
|
if (!$gameMessageEx.window(windowId).isEmwEventBusy()) {
|
|
this.setupChoices(this._params);
|
|
this._index++;
|
|
this.setWaitMode('message');
|
|
}
|
|
return false;
|
|
}
|
|
};
|
|
FTKR.EMW.Game_Interpreter_setupChoices = Game_Interpreter.prototype.setupChoices;
|
|
Game_Interpreter.prototype.setupChoices = function(params) {
|
|
var windowId = this.windowId();
|
|
if (!windowId) {
|
|
FTKR.EMW.Game_Interpreter_setupChoices.call(this, params);
|
|
} else {
|
|
var choices = params[0].clone();
|
|
var cancelType = params[1];
|
|
var defaultType = params.length > 2 ? params[2] : 0;
|
|
var positionType = params.length > 3 ? params[3] : 2;
|
|
var background = params.length > 4 ? params[4] : 0;
|
|
if (cancelType >= choices.length) {
|
|
cancelType = -2;
|
|
}
|
|
$gameMessageEx.window(windowId).setChoices(choices, defaultType, cancelType);
|
|
$gameMessageEx.window(windowId).setChoiceBackground(background);
|
|
$gameMessageEx.window(windowId).setChoicePositionType(positionType);
|
|
$gameMessageEx.window(windowId).setChoiceCallback(function(n) {
|
|
this._branch[this._indent] = n;
|
|
}.bind(this));
|
|
}
|
|
};
|
|
FTKR.EMW.Game_Interpreter_command103 = Game_Interpreter.prototype.command103;
|
|
Game_Interpreter.prototype.command103 = function() {
|
|
var windowId = this.windowId();
|
|
if (!windowId) {
|
|
return FTKR.EMW.Game_Interpreter_command103.call(this);
|
|
} else {
|
|
if (!$gameMessageEx.window(windowId).isEmwEventBusy()) {
|
|
this.setupNumInput(this._params);
|
|
this._index++;
|
|
this.setWaitMode('message');
|
|
}
|
|
return false;
|
|
}
|
|
};
|
|
FTKR.EMW.Game_Interpreter_setupNumInput = Game_Interpreter.prototype.setupNumInput;
|
|
Game_Interpreter.prototype.setupNumInput = function(params) {
|
|
var windowId = this.windowId();
|
|
if (!windowId) {
|
|
FTKR.EMW.Game_Interpreter_setupNumInput.call(this, params);
|
|
} else {
|
|
$gameMessageEx.window(windowId).setNumberInput(params[0], params[1]);
|
|
}
|
|
};
|
|
FTKR.EMW.Game_Interpreter_command104 = Game_Interpreter.prototype.command104;
|
|
Game_Interpreter.prototype.command104 = function() {
|
|
var windowId = this.windowId();
|
|
if (!windowId) {
|
|
return FTKR.EMW.Game_Interpreter_command104.call(this);
|
|
} else {
|
|
if (!$gameMessageEx.window(windowId).isEmwEventBusy()) {
|
|
this.setupItemChoice(this._params);
|
|
this._index++;
|
|
this.setWaitMode('message');
|
|
}
|
|
return false;
|
|
}
|
|
};
|
|
FTKR.EMW.Game_Interpreter_setupItemChoice = Game_Interpreter.prototype.setupItemChoice;
|
|
Game_Interpreter.prototype.setupItemChoice = function(params) {
|
|
var windowId = this.windowId();
|
|
if (!windowId) {
|
|
FTKR.EMW.Game_Interpreter_setupItemChoice.call(this, params);
|
|
} else {
|
|
$gameMessageEx.window(windowId).setItemChoice(params[0], params[1] || 2);
|
|
}
|
|
};
|
|
function Game_MessageEx() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
Game_MessageEx.prototype.initialize = function() {
|
|
this._data = [];
|
|
this._data[0] = $gameMessage;
|
|
};
|
|
Game_MessageEx.prototype.window = function(windowId) {
|
|
if (!this._data[windowId]) {
|
|
this._data[windowId] = new Game_Message();
|
|
}
|
|
return this._data[windowId];
|
|
};
|
|
Game_MessageEx.prototype.windows = function() {
|
|
return this._data;
|
|
};
|
|
function Window_MessageEx(windowId) {
|
|
this._windowId = windowId;
|
|
this.initialize.apply(this);
|
|
}
|
|
Window_MessageEx.prototype = Object.create(Window_Message.prototype);
|
|
Window_MessageEx.prototype.constructor = Window_MessageEx;
|
|
Window_MessageEx.prototype.createSubWindows = function() {
|
|
this._goldWindow = new Window_Gold(0, 0);
|
|
this._goldWindow.x = Graphics.boxWidth - this._goldWindow.width;
|
|
this._goldWindow.openness = 0;
|
|
this._choiceWindow = new Window_ChoiceListEx(this, this._windowId);
|
|
this._numberWindow = new Window_NumberInputEx(this, this._windowId);
|
|
this._itemWindow = new Window_EventItemEx(this, this._windowId);
|
|
};
|
|
Window_MessageEx.prototype.canStart = function() {
|
|
return this._gameMessage.hasText() && !this._gameMessage.scrollMode();
|
|
};
|
|
Window_MessageEx.prototype.startMessage = function() {
|
|
this._textState = {};
|
|
this._textState.index = 0;
|
|
this._textState.text = this.convertEscapeCharacters(this._gameMessage.allText());
|
|
this.newPage(this._textState);
|
|
this.updatePlacement();
|
|
this.updateBackground();
|
|
this.open();
|
|
this.activate();
|
|
};
|
|
Window_MessageEx.prototype.updatePlacement = function() {
|
|
if (this._gameMessage.windowWidth()) {
|
|
this.width = this._gameMessage.windowWidth();
|
|
}
|
|
if (this._gameMessage.windowHeightLine()) {
|
|
this.height = this.fittingHeight(this._gameMessage.windowHeightLine());
|
|
}
|
|
this._positionType = this._gameMessage.positionType();
|
|
this.y = this._positionType * (Graphics.boxHeight - this.height) / 2;
|
|
this._goldWindow.y = this.y > 0 ? 0 : Graphics.boxHeight - this._goldWindow.height;
|
|
var posiX = this._gameMessage.windowPositionX();
|
|
if (posiX) this.x = posiX * (Graphics.boxWidth - this.width) / 2;
|
|
};
|
|
Window_MessageEx.prototype.updateBackground = function() {
|
|
this._background = this._gameMessage.background();
|
|
this.setBackgroundType(this._background);
|
|
};
|
|
Window_MessageEx.prototype.terminateMessage = function() {
|
|
this._gameMessage.lastText();
|
|
if (this._gameMessage.canClose()) {
|
|
if (Imported.YEP_MessageCore) this._nameWindow.deactivate();
|
|
this.close();
|
|
this._goldWindow.close();
|
|
this._gameMessage.clear();
|
|
} else {
|
|
this.deactivate();
|
|
}
|
|
};
|
|
Window_MessageEx.prototype.startInput = function() {
|
|
if (this._gameMessage.isChoice()) {
|
|
this._choiceWindow.start();
|
|
return true;
|
|
} else if (this._gameMessage.isNumberInput()) {
|
|
this._numberWindow.start();
|
|
return true;
|
|
} else if (this._gameMessage.isItemChoice()) {
|
|
this._itemWindow.start();
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
};
|
|
Window_MessageEx.prototype.doesContinue = function() {
|
|
return (this._gameMessage.hasText() && !this._gameMessage.scrollMode() &&
|
|
!this.areSettingsChanged());
|
|
};
|
|
Window_MessageEx.prototype.areSettingsChanged = function() {
|
|
return (this._background !== this._gameMessage.background() ||
|
|
this._positionType !== this._gameMessage.positionType());
|
|
};
|
|
Window_MessageEx.prototype.loadMessageFace = function() {
|
|
this._faceBitmap = ImageManager.reserveFace(this._gameMessage.faceName());
|
|
};
|
|
Window_MessageEx.prototype.drawMessageFace = function() {
|
|
this.drawFace(this._gameMessage.faceName(), this._gameMessage.faceIndex(), 0, 0);
|
|
ImageManager.releaseReservation(this._imageReservationId);
|
|
};
|
|
Window_MessageEx.prototype.newLineX = function() {
|
|
return this._gameMessage.faceName() === '' ? 0 : 168;
|
|
};
|
|
function Window_ChoiceListEx() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
Window_ChoiceListEx.prototype = Object.create(Window_ChoiceList.prototype);
|
|
Window_ChoiceListEx.prototype.constructor = Window_ChoiceListEx;
|
|
Window_ChoiceListEx.prototype.initialize = function(messageWindow, windowId) {
|
|
this._windowId = windowId;
|
|
this._gameMessage = $gameMessageEx.window(this._windowId);
|
|
Window_ChoiceList.prototype.initialize.call(this, messageWindow);
|
|
};
|
|
Window_ChoiceListEx.prototype.selectDefault = function() {
|
|
this.select(this._gameMessage.choiceDefaultType());
|
|
};
|
|
Window_ChoiceListEx.prototype.updatePlacement = function() {
|
|
var positionType = this._gameMessage.choicePositionType();
|
|
var messageY = this._messageWindow.y;
|
|
this.width = this.windowWidth();
|
|
this.height = this.windowHeight();
|
|
switch (positionType) {
|
|
case 0:
|
|
this.x = 0;
|
|
break;
|
|
case 1:
|
|
this.x = (Graphics.boxWidth - this.width) / 2;
|
|
break;
|
|
case 2:
|
|
this.x = Graphics.boxWidth - this.width;
|
|
break;
|
|
}
|
|
if (messageY >= Graphics.boxHeight / 2) {
|
|
this.y = messageY - this.height;
|
|
} else {
|
|
this.y = messageY + this._messageWindow.height;
|
|
}
|
|
};
|
|
Window_ChoiceListEx.prototype.updateBackground = function() {
|
|
this._background = this._gameMessage.choiceBackground();
|
|
this.setBackgroundType(this._background);
|
|
};
|
|
Window_ChoiceListEx.prototype.numVisibleRows = function() {
|
|
var messageY = this._messageWindow.y;
|
|
var messageHeight = this._messageWindow.height;
|
|
var centerY = Graphics.boxHeight / 2;
|
|
var choices = this._gameMessage.choices();
|
|
var numLines = choices.length;
|
|
var maxLines = 8;
|
|
if (messageY < centerY && messageY + messageHeight > centerY) {
|
|
maxLines = 4;
|
|
}
|
|
if (numLines > maxLines) {
|
|
numLines = maxLines;
|
|
}
|
|
return numLines;
|
|
};
|
|
Window_ChoiceListEx.prototype.maxChoiceWidth = function() {
|
|
var maxWidth = 96;
|
|
var choices = this._gameMessage.choices();
|
|
for (var i = 0; i < choices.length; i++) {
|
|
var choiceWidth = this.textWidthEx(choices[i]) + this.textPadding() * 2;
|
|
if (maxWidth < choiceWidth) {
|
|
maxWidth = choiceWidth;
|
|
}
|
|
}
|
|
return maxWidth;
|
|
};
|
|
Window_ChoiceListEx.prototype.makeCommandList = function() {
|
|
var choices = this._gameMessage.choices();
|
|
for (var i = 0; i < choices.length; i++) {
|
|
this.addCommand(choices[i], 'choice');
|
|
}
|
|
};
|
|
Window_ChoiceListEx.prototype.isCancelEnabled = function() {
|
|
return this._gameMessage.choiceCancelType() !== -1;
|
|
};
|
|
Window_ChoiceListEx.prototype.callOkHandler = function() {
|
|
this._gameMessage.onChoice(this.index());
|
|
this._messageWindow.terminateMessage();
|
|
this.close();
|
|
};
|
|
Window_ChoiceListEx.prototype.callCancelHandler = function() {
|
|
this._gameMessage.onChoice(this._gameMessage.choiceCancelType());
|
|
this._messageWindow.terminateMessage();
|
|
this.close();
|
|
};
|
|
function Window_NumberInputEx() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
Window_NumberInputEx.prototype = Object.create(Window_NumberInput.prototype);
|
|
Window_NumberInputEx.prototype.constructor = Window_NumberInputEx;
|
|
Window_NumberInputEx.prototype.initialize = function(messageWindow, windowId) {
|
|
this._windowId = windowId;
|
|
this._gameMessage = $gameMessageEx.window(this._windowId);
|
|
Window_NumberInput.prototype.initialize.call(this, messageWindow);
|
|
};
|
|
Window_NumberInputEx.prototype.start = function() {
|
|
this._maxDigits = this._gameMessage.numInputMaxDigits();
|
|
this._number = $gameVariables.value(this._gameMessage.numInputVariableId());
|
|
this._number = this._number.clamp(0, Math.pow(10, this._maxDigits) - 1);
|
|
this.updatePlacement();
|
|
this.placeButtons();
|
|
this.updateButtonsVisiblity();
|
|
this.createContents();
|
|
this.refresh();
|
|
this.open();
|
|
this.activate();
|
|
this.select(0);
|
|
};
|
|
Window_NumberInputEx.prototype.processOk = function() {
|
|
SoundManager.playOk();
|
|
$gameVariables.setValue(this._gameMessage.numInputVariableId(), this._number);
|
|
this._messageWindow.terminateMessage();
|
|
this.updateInputData();
|
|
this.deactivate();
|
|
this.close();
|
|
};
|
|
function Window_EventItemEx() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
Window_EventItemEx.prototype = Object.create(Window_EventItem.prototype);
|
|
Window_EventItemEx.prototype.constructor = Window_EventItemEx;
|
|
Window_EventItemEx.prototype.initialize = function(messageWindow, windowId) {
|
|
this._windowId = windowId;
|
|
this._gameMessage = $gameMessageEx.window(this._windowId);
|
|
Window_EventItem.prototype.initialize.call(this, messageWindow);
|
|
};
|
|
Window_EventItemEx.prototype.includes = function(item) {
|
|
var itypeId = this._gameMessage.itemChoiceItypeId();
|
|
return DataManager.isItem(item) && item.itypeId === itypeId;
|
|
};
|
|
Window_EventItemEx.prototype.onOk = function() {
|
|
var item = this.item();
|
|
var itemId = item ? item.id : 0;
|
|
$gameVariables.setValue(this._gameMessage.itemChoiceVariableId(), itemId);
|
|
this._messageWindow.terminateMessage();
|
|
this.close();
|
|
};
|
|
Window_EventItemEx.prototype.onCancel = function() {
|
|
$gameVariables.setValue(this._gameMessage.itemChoiceVariableId(), 0);
|
|
this._messageWindow.terminateMessage();
|
|
this.close();
|
|
};
|
|
FTKR.EMW.DataManager_createGameObjects = DataManager.createGameObjects;
|
|
DataManager.createGameObjects = function() {
|
|
FTKR.EMW.DataManager_createGameObjects.call(this);
|
|
$gameMessageEx = new Game_MessageEx();
|
|
};
|
|
FTKR.EMW.Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows;
|
|
Scene_Map.prototype.createAllWindows = function() {
|
|
this.createMessageExWindowAll();
|
|
FTKR.EMW.Scene_Map_createAllWindows.call(this);
|
|
this._messageExWindows[0] = this._messageWindow;
|
|
$gameMessageEx.window(0)._window_MessageEx = this._messageExWindows[0];
|
|
FTKR.EMW.scene.startTerminate ? $gameMessageEx.window(0).terminate() :
|
|
$gameMessageEx.window(0).firstText();
|
|
};
|
|
Scene_Map.prototype.readMapMeta = function() {
|
|
return readObjectMeta($dataMap, ['EMW_生成数', 'EMW_NUMBER']);
|
|
};
|
|
Scene_Map.prototype.createMessageExWindowAll = function() {
|
|
this._messageExWindows = [];
|
|
var number = this.readMapMeta() || FTKR.EMW.exwindowNum;
|
|
for (var i = 1; i < number + 1; i++) {
|
|
this.createMessageExWindow(i);
|
|
}
|
|
};
|
|
Scene_Map.prototype.createMessageExWindow = function(windowId) {
|
|
this._messageExWindows[windowId] = new Window_MessageEx(windowId);
|
|
$gameMessageEx.window(windowId)._window_MessageEx = this._messageExWindows[windowId];
|
|
FTKR.EMW.scene.startTerminate ? $gameMessageEx.window(windowId).terminate() :
|
|
$gameMessageEx.window(windowId).firstText();
|
|
this.addWindow(this._messageExWindows[windowId]);
|
|
this._messageExWindows[windowId].subWindows().forEach(function(window) {
|
|
this.addWindow(window);
|
|
}, this);
|
|
};
|
|
FTKR.EMW.Scene_Map_terminate = Scene_Map.prototype.terminate;
|
|
Scene_Map.prototype.terminate = function() {
|
|
FTKR.EMW.Scene_Map_terminate.call(this);
|
|
if (SceneManager.isNextScene(Scene_Battle) || SceneManager.isNextScene(Scene_Map)) {
|
|
$gameMessageEx.windows().forEach( function(message, i){
|
|
if (i > 0) message.terminate();
|
|
});
|
|
}
|
|
};
|
|
FTKR.EMW.Scene_Battle_createMessagewindow = Scene_Battle.prototype.createMessageWindow;
|
|
Scene_Battle.prototype.createMessageWindow = function() {
|
|
this.createMessageExWindowAll();
|
|
FTKR.EMW.Scene_Battle_createMessagewindow.call(this);
|
|
this._messageExWindows[0] = this._messageWindow;
|
|
$gameMessageEx.window(0)._window_MessageEx = this._messageExWindows[0];
|
|
FTKR.EMW.scene.startTerminate ? $gameMessageEx.window(0).terminate() :
|
|
$gameMessageEx.window(0).firstText();
|
|
};
|
|
Scene_Battle.prototype.readMapMeta = function() {
|
|
return readObjectMeta($dataMap, ['EMW_生成数', 'EMW_NUMBER']);
|
|
};
|
|
Scene_Battle.prototype.createMessageExWindowAll = function() {
|
|
this._messageExWindows = [];
|
|
var number = this.readMapMeta() || FTKR.EMW.exwindowNum;
|
|
for (var i = 1; i < number + 1; i++) {
|
|
this.createMessageExWindow(i);
|
|
}
|
|
};
|
|
Scene_Battle.prototype.createMessageExWindow = function(windowId) {
|
|
this._messageExWindows[windowId] = new Window_MessageEx(windowId);
|
|
$gameMessageEx.window(windowId)._window_MessageEx = this._messageExWindows[windowId];
|
|
FTKR.EMW.scene.startTerminate ? $gameMessageEx.window(windowId).terminate() :
|
|
$gameMessageEx.window(windowId).firstText();
|
|
this.addWindow(this._messageExWindows[windowId]);
|
|
this._messageExWindows[windowId].subWindows().forEach(function(window) {
|
|
this.addWindow(window);
|
|
}, this);
|
|
};
|
|
FTKR.EMW.Scene_Battle_terminate = Scene_Battle.prototype.terminate;
|
|
Scene_Battle.prototype.terminate = function() {
|
|
FTKR.EMW.Scene_Battle_terminate.call(this);
|
|
$gameMessageEx.windows().forEach( function(message, i){
|
|
if (i > 0) message.terminate();
|
|
});
|
|
};
|
|
if (Imported.YEP_MessageCore) {
|
|
FTKR.EMW.Window_MessageEx_createSubWindows = Window_MessageEx.prototype.createSubWindows;
|
|
Window_MessageEx.prototype.createSubWindows = function() {
|
|
FTKR.EMW.Window_MessageEx_createSubWindows.call(this);
|
|
this._nameWindow = new Window_NameBoxEx(this, this._windowId);
|
|
FTKR.EMW.nameWindows[this._windowId] = this._nameWindow;
|
|
var scene = SceneManager._scene;
|
|
scene.addChild(this._nameWindow);
|
|
};
|
|
FTKR.EMW.Window_MessageEx_startMessage = Window_MessageEx.prototype.startMessage;
|
|
Window_MessageEx.prototype.startMessage = function() {
|
|
this._nameWindow.deactivate();
|
|
FTKR.EMW.Window_MessageEx_startMessage.call(this);
|
|
};
|
|
Window_MessageEx.prototype.wordwrapWidth = function(){
|
|
if (Yanfly.Param.MSGTightWrap && this._gameMessage.faceName() !== '') {
|
|
return this.contents.width - this.newLineX();
|
|
}
|
|
return Window_Base.prototype.wordwrapWidth.call(this);
|
|
};
|
|
Window_MessageEx.prototype.newLineX = function() {
|
|
if (this._gameMessage.faceName() === '') {
|
|
return 0;
|
|
} else {
|
|
return eval(Yanfly.Param.MSGFaceIndent);
|
|
}
|
|
};
|
|
Window_MessageEx.prototype.convertNameBox = function(text) {
|
|
var windowId = this._windowId;
|
|
text = text.replace(/\x1bN\<(.*?)\>/gi, function() {
|
|
return FTKR.EMW.nameWindows[windowId].refresh(arguments[1], 1);
|
|
}, this);
|
|
text = text.replace(/\x1bN1\<(.*?)\>/gi, function() {
|
|
return FTKR.EMW.nameWindows[windowId].refresh(arguments[1], 1);
|
|
}, this);
|
|
text = text.replace(/\x1bN2\<(.*?)\>/gi, function() {
|
|
return FTKR.EMW.nameWindows[windowId].refresh(arguments[1], 2);
|
|
}, this);
|
|
text = text.replace(/\x1bN3\<(.*?)\>/gi, function() {
|
|
return FTKR.EMW.nameWindows[windowId].refresh(arguments[1], 3);
|
|
}, this);
|
|
text = text.replace(/\x1bNC\<(.*?)\>/gi, function() {
|
|
return FTKR.EMW.nameWindows[windowId].refresh(arguments[1], 3);
|
|
}, this);
|
|
text = text.replace(/\x1bN4\<(.*?)\>/gi, function() {
|
|
return FTKR.EMW.nameWindows[windowId].refresh(arguments[1], 4);
|
|
}, this);
|
|
text = text.replace(/\x1bN5\<(.*?)\>/gi, function() {
|
|
return FTKR.EMW.nameWindows[windowId].refresh(arguments[1], 5);
|
|
}, this);
|
|
text = text.replace(/\x1bNR\<(.*?)\>/gi, function() {
|
|
return FTKR.EMW.nameWindows[windowId].refresh(arguments[1], 5);
|
|
}, this);
|
|
return text;
|
|
};
|
|
Window_MessageEx.prototype.convertActorFace = function(actor) {
|
|
this._gameMessage.setFaceImage(actor.faceName(), actor.faceIndex());
|
|
return '';
|
|
};
|
|
if (Yanfly.Param.MSGNameBoxClose) {
|
|
Window_MessageEx.prototype.hasDifferentNameBoxText = function() {
|
|
var texts = this._gameMessage._texts;
|
|
var length = texts.length;
|
|
var open = this._nameWindow.isOpen();
|
|
for (var i = 0; i < length; ++i) {
|
|
var text = texts[i];
|
|
if (text.length <= 0) continue;
|
|
if (Yanfly.MsgMacro) {
|
|
text = this.convertMacroText(text);
|
|
text = text.replace(/\x1b/gi, '\\');
|
|
}
|
|
if (text.match(/\\(?:N|N1|N2|N3|N4|N5|NC|NR)<(.*)>/i)) {
|
|
var name = String(RegExp.$1);
|
|
} else if (text.match(/\\(?:ND|ND1|ND2|ND3|ND4|ND5|NDC|NDR)<(.*)>/i)) {
|
|
var name = String(RegExp.$1);
|
|
} else if (text.match(/\\(?:NT|NT1|NT2|NT3|NT4|NT5|NTC|NTR)<(.*)>/i)) {
|
|
var name = String(RegExp.$1);
|
|
}
|
|
if (name) {
|
|
name = name.replace(/\\V\[(\d+)\]/gi, function() {
|
|
return $gameVariables.value(parseInt(arguments[1]));
|
|
}.bind(this));
|
|
name = name.replace(/\\V\[(\d+)\]/gi, function() {
|
|
return $gameVariables.value(parseInt(arguments[1]));
|
|
}.bind(this));
|
|
name = name.replace(/\\N\[(\d+)\]/gi, function() {
|
|
return this.actorName(parseInt(arguments[1]));
|
|
}.bind(this));
|
|
name = name.replace(/\\P\[(\d+)\]/gi, function() {
|
|
return this.partyMemberName(parseInt(arguments[1]));
|
|
}.bind(this));
|
|
name = name.replace(/\\/gi, '\x1b');
|
|
}
|
|
if (name && !open) return true;
|
|
if (name && name !== this._nameWindow._lastNameText) {
|
|
return true;
|
|
}
|
|
}
|
|
if (open && !name) return true;
|
|
return false;
|
|
};
|
|
}
|
|
FTKR.EMW.Window_ChoiceListEx_updatePlacement = Window_ChoiceListEx.prototype.updatePlacement;
|
|
Window_ChoiceListEx.prototype.updatePlacement = function() {
|
|
FTKR.EMW.Window_ChoiceListEx_updatePlacement.call(this);
|
|
var messagePosType = this._gameMessage.positionType();
|
|
if (messagePosType === 0) {
|
|
this.y = this._messageWindow.height;
|
|
} else if (messagePosType === 2) {
|
|
this.y = Graphics.boxHeight - this._messageWindow.height - this.height;
|
|
}
|
|
};
|
|
Window_NumberInputEx.prototype.updatePlacement = function() {
|
|
Window_NumberInput.prototype.updatePlacement.call(this);
|
|
var messageY = this._messageWindow.y;
|
|
var messagePosType = this._gameMessage.positionType();
|
|
if (messagePosType === 0) {
|
|
this.y = this._messageWindow.height;
|
|
} else if (messagePosType === 1) {
|
|
if (messageY >= Graphics.boxHeight / 2) {
|
|
this.y = messageY - this.height;
|
|
} else {
|
|
this.y = messageY + this._messageWindow.height;
|
|
}
|
|
} else if (messagePosType === 2) {
|
|
this.y = Graphics.boxHeight - this._messageWindow.height - this.height;
|
|
}
|
|
};
|
|
Window_EventItemEx.prototype.updatePlacement = function() {
|
|
Window_EventItem.prototype.updatePlacement.call(this);
|
|
var messagePosType = this._gameMessage.positionType();
|
|
if (messagePosType === 0) {
|
|
this.y = Graphics.boxHeight - this.height;
|
|
} else if (messagePosType === 2) {
|
|
this.y = 0;
|
|
}
|
|
};
|
|
function Window_NameBoxEx() {
|
|
this.initialize.apply(this, arguments);
|
|
}
|
|
Window_NameBoxEx.prototype = Object.create(Window_NameBox.prototype);
|
|
Window_NameBoxEx.prototype.constructor = Window_NameBoxEx;
|
|
Window_NameBoxEx.prototype.initialize = function(parentWindow, windowId) {
|
|
this._windowId = windowId;
|
|
this._gameMessage = $gameMessageEx.window(this._windowId);
|
|
Window_NameBox.prototype.initialize.call(this, parentWindow);
|
|
};
|
|
Window_NameBoxEx.prototype.adjustPositionY = function() {
|
|
if (this._gameMessage.positionType() === 0) {
|
|
this.y = this._parentWindow.y + this._parentWindow.height;
|
|
this.y -= eval(Yanfly.Param.MSGNameBoxBufferY);
|
|
} else {
|
|
this.y = this._parentWindow.y;
|
|
this.y -= this.height;
|
|
this.y += eval(Yanfly.Param.MSGNameBoxBufferY);
|
|
}
|
|
if (this.y < 0) {
|
|
this.y = this._parentWindow.y + this._parentWindow.height;
|
|
this.y -= eval(Yanfly.Param.MSGNameBoxBufferY);
|
|
}
|
|
};
|
|
}
|