mutation/www/js/plugins/StackBattleLog.js
2024-08-10 09:53:59 -05:00

349 lines
12 KiB
JavaScript

//
// ログウィンドウ&蓄積型戦闘ログ ver1.05
//
// ------------------------------------------------------
// Copyright (c) 2016 Yana
// Released under the MIT license
// http://opensource.org/licenses/mit-license.php
// ------------------------------------------------------
//
// author Yana
//
var Imported = Imported || {};
Imported["StackBattleLog"] = 1.05;
/*:
* @plugindesc ver1.05/戦闘ログを蓄積型に変更し、戦闘ログを表示するパーティコマンドを追加します。
* @author Yana
*
* @param Stack Log UseLog
* @desc パーティコマンドにログのコマンドを追加するかの設定です。
* true/falseで設定してください。
* @default true
*
* @param Stack Log UseStack
* @desc 戦闘ログを蓄積型に変更するかの設定です。
* true/falseで設定してください。
* @default true
*
* @param Stack Log Text
* @desc パーティコマンドに表示するコマンドの名前です。
* @default Log
*
* @param Stack Log Start
* @desc ログウィンドウに表示する戦闘開始のテキストです。
* @default ------Start Battle------
*
* @param Stack Log TurnEnd
* @desc ログウィンドウに表示するターン終了のテキストです。
* %dをターン数に変換します。
* @default ------ %d Turn End------
*
* @param Stack Log MaxLines
* @desc 戦闘ログの最大行数です。
* @default 6
*
* @param Stack Log FontSize
* @desc 戦闘ログ及びログウィンドウの文字サイズです。
* @default 24
*
* @param Stack Log Size
* @desc 蓄積するログの行数です。
* @default 100
*
* @help このプラグインにはプラグインコマンドはありません。
* ------------------------------------------------------
* 仕様
* ------------------------------------------------------
* このプラグインは、同時に以下の制御文字を追加します。
*
* \FS[FontSize]
* メッセージなど、drawTextExを使用しているテキストの文字サイズを
* FontSizeに変更します。
* この制御文字は\{や\}と違い、最小値、最大値を持ちません。
* ------------------------------------------------------
* 利用規約
* ------------------------------------------------------
* 当プラグインはMITライセンスで公開されています。
* 使用に制限はありません。商用、アダルト、いずれにも使用できます。
* 二次配布も制限はしませんが、サポートは行いません。
* 著作表示は任意です。行わなくても利用できます。
* 要するに、特に規約はありません。
* バグ報告や使用方法等のお問合せはネ実ツクールスレ、または、Twitterにお願いします。
* https://twitter.com/yanatsuki_
* 素材利用は自己責任でお願いします。
* ------------------------------------------------------
* ver1.05:Stack Log MaxLinesのパラメータが正常に機能していないバグを修正
* ver1.04:YEP_MessageCoreとの競合を回避
* ver1.03:制御文字の変換が正常に行われていないバグを修正
* :100行を超えるログを削除する際、正常に削除できていなかったバグを修正
* :残っていたconsole.logを削除
* ver1.01:パーティコマンドのログを無効化する設定にしていても、正常に動作しないバグを修正
* ver1.00:公開
*
*/
(function () {
var parameters = PluginManager.parameters("StackBattleLog");
var stackLogUseLog =
String(parameters["Stack Log UseLog"] || "true") == "true";
var stackLogUseStack =
String(parameters["Stack Log UseStack"] || "true") == "true";
var stackLogText = String(parameters["Stack Log Text"] || "Log");
var stackLogStart = String(
parameters["Stack Log Start"] || "------Start Battle------"
);
// %dをターン数に変換します。
var stackLogTurnEnd = String(
parameters["Stack Log TurnEnd"] || "------ %d Turn End------"
);
var stackLogMaxLines = Number(parameters["Stack Log MaxLines"] || 6);
var stackLogFontSize = Number(parameters["Stack Log FontSize"] || 24);
var stackLogSize = Number(parameters["Stack Log Size"] || 24);
// ログウィンドウの制御に関する部分です。
Game_Temp.prototype.addLog = function (text) {
this._battleLog = this._battleLog || [];
if (this._battleLog.length > stackLogSize) {
this._battleLog.shift();
}
this._battleLog.push(text);
};
Game_Temp.prototype.battleLog = function () {
return this._battleLog || [];
};
var _stacklogw_Window_BattleLog_addText = Window_BattleLog.prototype.addText;
Window_BattleLog.prototype.addText = function (text) {
//text = ('00000'+Graphics.frameCount).slice(-6) + ':' + text//
text = "\\FS[" + stackLogFontSize + "]" + text;
_stacklogw_Window_BattleLog_addText.call(this, text);
$gameTemp.addLog(text);
};
var _stacklogw_Game_Message_add = Game_Message.prototype.add;
Game_Message.prototype.add = function (text) {
_stacklogw_Game_Message_add.call(this, text);
text = "\\FS[" + stackLogFontSize + "]" + text;
if ($gameParty.inBattle()) {
$gameTemp.addLog(text);
}
};
var _stacklogw_BattleManager_startBattle = BattleManager.startBattle;
BattleManager.startBattle = function () {
var text = stackLogStart;
text = "\\FS[" + stackLogFontSize + "]" + text;
$gameTemp.addLog(text);
_stacklogw_BattleManager_startBattle.call(this);
};
var _stacklogw_BattleManager_endTurn = BattleManager.endTurn;
BattleManager.endTurn = function () {
var text = stackLogTurnEnd;
text = "\\FS[" + stackLogFontSize + "]" + text;
text = text.replace(/%d/g, $gameTroop._turnCount);
$gameTemp.addLog(text);
_stacklogw_BattleManager_endTurn.call(this);
};
function Window_StackLog() {
this.initialize.apply(this, arguments);
}
Window_StackLog.prototype = Object.create(Window_Selectable.prototype);
Window_StackLog.prototype.constructor = Window_StackLog;
Window_StackLog.prototype.initialize = function () {
var x = 64;
var y = 64;
var width = Graphics.boxWidth - 128;
var height = Graphics.boxHeight - 128;
Window_Selectable.prototype.initialize.call(this, x, y, width, height);
this.openness = 0;
this.refresh();
};
Window_StackLog.prototype.contentsHeight = function () {
return this.lineHeight() * this.maxItems();
};
Window_StackLog.prototype.maxItems = function () {
if ($gameTemp.battleLog() == []) {
return 1;
} else {
return $gameTemp.battleLog().length;
}
};
Window_StackLog.prototype.drawItem = function (index) {
var text = $gameTemp.battleLog()[index];
var y = this.lineHeight() * (index - this.topRow());
if (text) {
this.drawTextEx(text, 0, y);
}
};
Window_StackLog.prototype.refresh = function () {
this.createContents();
Window_Selectable.prototype.refresh.call(this);
};
Window_StackLog.prototype.lineHeight = function () {
return stackLogFontSize + 8;
};
Scene_Battle.prototype.createStackLogWindow = function () {
this._stackLogWindow = new Window_StackLog();
this._stackLogWindow.setHandler("ok", this.onLogOk.bind(this));
this._stackLogWindow.setHandler("cancel", this.onLogOk.bind(this));
this.addWindow(this._stackLogWindow);
};
var _stacklogw_Scene_Battle_createPartyCommandWindow =
Scene_Battle.prototype.createPartyCommandWindow;
Scene_Battle.prototype.createPartyCommandWindow = function () {
_stacklogw_Scene_Battle_createPartyCommandWindow.call(this);
if (stackLogUseLog) {
this._partyCommandWindow.setHandler("log", this.commandLog.bind(this));
}
};
var _stacklogw_Scene_Battle_createAllWindows =
Scene_Battle.prototype.createAllWindows;
Scene_Battle.prototype.createAllWindows = function () {
_stacklogw_Scene_Battle_createAllWindows.call(this);
this.createStackLogWindow();
};
var _stacklogw_Scene_Battle_isAnyInputWindowActive =
Scene_Battle.prototype.isAnyInputWindowActive;
Scene_Battle.prototype.isAnyInputWindowActive = function () {
return (
_stacklogw_Scene_Battle_isAnyInputWindowActive.call(this) ||
this._stackLogWindow.active
);
};
var _stacklogw_Scene_Battle_changeInputWindow =
Scene_Battle.prototype.changeInputWindow;
Scene_Battle.prototype.changeInputWindow = function () {
if (!this._stackLogWindow.active) {
_stacklogw_Scene_Battle_changeInputWindow.call(this);
}
};
Scene_Battle.prototype.commandLog = function () {
this._stackLogWindow.refresh();
this._stackLogWindow.open();
this._stackLogWindow.activate();
this._stackLogWindow.select($gameTemp.battleLog().length - 1);
this._partyCommandWindow.deactivate();
};
Scene_Battle.prototype.onLogOk = function () {
this._stackLogWindow.close();
this._stackLogWindow.deactivate();
this._partyCommandWindow.activate();
};
var _stacklogw_Window_PartyCommand_makeCommandList =
Window_PartyCommand.prototype.makeCommandList;
Window_PartyCommand.prototype.makeCommandList = function () {
_stacklogw_Window_PartyCommand_makeCommandList.call(this);
if (stackLogUseLog) {
this.addCommand(stackLogText, "log");
}
};
// ログをスタック式に変換する部分です。
// 再定義
Window_BattleLog.prototype.lineHeight = function () {
return stackLogFontSize + 8;
};
if (stackLogUseStack) {
// 蓄積型ログを使用する時のみ定義を行います。
// エイリアス ただし、再定義に近い
var _stacklogw_Window_BattleLog_clear = Window_BattleLog.prototype.clear;
Window_BattleLog.prototype.clear = function () {
this.refresh();
};
Window_BattleLog.prototype.logClear = function () {
_stacklogw_Window_BattleLog_clear.call(this);
};
// 再定義
Window_BattleLog.prototype.maxLines = function () {
return stackLogMaxLines;
};
// 再定義
Window_BattleLog.prototype.popBaseLine = function () {};
var _stacklogw_Window_BattleLog_refresh =
Window_BattleLog.prototype.refresh;
Window_BattleLog.prototype.refresh = function () {
var text = "\\FS[" + stackLogFontSize + "]";
this.drawTextEx(text, 0, 0, 24); // 変更したダミーの文字を送ることでテキストの高さを調整する。
_stacklogw_Window_BattleLog_refresh.call(this);
};
// 再定義
Window_BattleLog.prototype.drawLineText = function (index) {
var length = this._lines.length;
var topLength = length - this.maxLines();
if (topLength < 0) {
topLength = 0;
}
if (index < topLength) {
return;
}
var indexPos = index - topLength;
var rect = this.itemRectForText(indexPos);
this.contents.clearRect(rect.x, rect.y, rect.width, rect.height);
this.drawTextEx(this._lines[index], rect.x, rect.y, rect.width);
};
var _stacklogw_Window_BattleLog_numLines =
Window_BattleLog.prototype.numLines;
Window_BattleLog.prototype.numLines = function () {
var n = _stacklogw_Window_BattleLog_numLines.call(this);
if (n >= this.maxLines()) {
return this.maxLines();
} else {
return n;
}
};
var _stacklogw_Scene_Battle_startPartyCommandSelection =
Scene_Battle.prototype.startPartyCommandSelection;
Scene_Battle.prototype.startPartyCommandSelection = function () {
_stacklogw_Scene_Battle_startPartyCommandSelection.call(this);
this._logWindow.logClear();
};
var _stacklogw_Scene_Battle_update = Scene_Battle.prototype.update;
Scene_Battle.prototype.update = function () {
_stacklogw_Scene_Battle_update.call(this);
if (BattleManager.isAborting() || BattleManager.isBattleEnd()) {
this._logWindow.logClear();
}
};
} // 蓄積型ログ専用処理はここまでです。
if (!Imported.YEP_MessageCore) {
// \FS[FontSize]の制御文字を追加する部分です。
var _stacklogw_Window_Base_processEscapeCharacter =
Window_Base.prototype.processEscapeCharacter;
Window_Base.prototype.processEscapeCharacter = function (code, textState) {
if (code === "FS") {
this.makeFontSize(this.obtainEscapeParam(textState));
} else {
_stacklogw_Window_Base_processEscapeCharacter.call(
this,
code,
textState
);
}
};
}
Window_Base.prototype.makeFontSize = function (fontSize) {
//if (fontSize >= 96){ fontSize = 96 };
//if (fontSize <= 24){ fontSize = 24 };
this.contents.fontSize = fontSize;
};
})();