//============================================================================= // RPGツクールMZ - LL_VariableWindow.js v1.0.0 //----------------------------------------------------------------------------- // ルルの教会 (Lulu's Church) // https://nine-yusha.com/ // // URL below for license details. // https://nine-yusha.com/plugin/ //============================================================================= /*: * @target MZ * @plugindesc 変数を画面にウィンドウで表示します。 * @author ルルの教会 * @url https://nine-yusha.com/plugin-variablewindow/ * * @help LL_VariableWindow.js * * 変数を画面にウィンドウで表示します。 * ウィンドウは同時に4つまで表示することができます。 * * プラグインコマンド: * ウィンドウを表示: 変数をウィンドウで表示します。 * ウィンドウを消去: 表示しているウィンドウを消去します。 * * 利用規約: * ・著作権表記は必要ございません。 * ・利用するにあたり報告の必要は特にございません。 * ・商用・非商用問いません。 * ・R18作品にも使用制限はありません。 * ・ゲームに合わせて自由に改変していただいて問題ございません。 * ・プラグイン素材としての再配布(改変後含む)は禁止させていただきます。 * * 作者: ルルの教会 * 作成日: 2022/5/14 * * @command showWindow * @text ウィンドウを表示 * @desc 変数の値をウィンドウで表示します。 * * @arg windowId * @text ウィンドウ番号 * @desc どのウィンドウ番号に表示するか選択します。 * 同時に4つまで表示することが可能です。 * @type select * @default 1 * @option 1 * @value 1 * @option 2 * @value 2 * @option 3 * @value 3 * @option 4 * @value 4 * * @arg variableId * @text 変数 * @desc ウィンドウに表示する変数です。 * @type variable * * @arg windowX * @text X座標 * @desc ウィンドウの表示位置(X)です。(autoと入力すると中央表示) * @default 408 * @type string * * @arg windowY * @text Y座標 * @desc ウィンドウの表示位置(Y)です。(autoと入力すると中央表示) * @default 60 * @type string * * @arg windowWidth * @text 横幅 * @desc ウィンドウの横幅です。 * @default 400 * @type number * * @command hideWindow * @text ウィンドウを消去 * @desc 表示したウィンドウを消去します。 * * @arg windowId * @text ウィンドウ番号 * @desc どのウィンドウ番号を消去するか選択します。 * @type select * @default 1 * @option 1 * @value 1 * @option 2 * @value 2 * @option 3 * @value 3 * @option 4 * @value 4 */ (function () { "use strict"; var pluginName = "LL_VariableWindow"; var parameters = PluginManager.parameters(pluginName); // 変数名の横幅割合 const variableWindowLabelWidth = 0.6; // ウィンドウを表示 PluginManager.registerCommand(pluginName, "showWindow", (args) => { const windowId = Number(args.windowId || 1); const variableId = Number(args.variableId || 0); const x = String(args.windowX || 0); const y = String(args.windowY || 0); const width = Number(args.windowWidth || 400); // 旧セーブデータ対策 if (!$gameSystem._LL_VariableWindow) { $gameSystem._LL_VariableWindow = {}; $gameSystem._LL_VariableWindow[1] = { variableId: null, x: 0, y: 0, width: 0 }; $gameSystem._LL_VariableWindow[2] = { variableId: null, x: 0, y: 0, width: 0 }; $gameSystem._LL_VariableWindow[3] = { variableId: null, x: 0, y: 0, width: 0 }; $gameSystem._LL_VariableWindow[4] = { variableId: null, x: 0, y: 0, width: 0 }; } $gameSystem._LL_VariableWindow[windowId] = { variableId: variableId, x: x, y: y, width: width }; }); // ウィンドウを消去 PluginManager.registerCommand(pluginName, "hideWindow", (args) => { const windowId = Number(args.windowId || 1); // 旧セーブデータ対策 if (!$gameSystem._LL_VariableWindow) { $gameSystem._LL_VariableWindow = {}; $gameSystem._LL_VariableWindow[1] = { variableId: null, x: 0, y: 0, width: 0 }; $gameSystem._LL_VariableWindow[2] = { variableId: null, x: 0, y: 0, width: 0 }; $gameSystem._LL_VariableWindow[3] = { variableId: null, x: 0, y: 0, width: 0 }; $gameSystem._LL_VariableWindow[4] = { variableId: null, x: 0, y: 0, width: 0 }; } $gameSystem._LL_VariableWindow[windowId] = { variableId: null, x: 0, y: 0, width: 0 }; }); //----------------------------------------------------------------------------- // Game_System // // 変数ウィンドウ制御用の独自配列を追加定義します。 const _Game_System_initialize = Game_System.prototype.initialize; Game_System.prototype.initialize = function () { _Game_System_initialize.apply(this, arguments); this._LL_VariableWindow = {}; this._LL_VariableWindow[1] = { variableId: null, x: 0, y: 0, width: 0 }; this._LL_VariableWindow[2] = { variableId: null, x: 0, y: 0, width: 0 }; this._LL_VariableWindow[3] = { variableId: null, x: 0, y: 0, width: 0 }; this._LL_VariableWindow[4] = { variableId: null, x: 0, y: 0, width: 0 }; }; //----------------------------------------------------------------------------- // Scene_Map // const _Scene_Map_stop = Scene_Map.prototype.stop; Scene_Map.prototype.stop = function () { this._exVariableWindow1.hide(); this._exVariableWindow2.hide(); this._exVariableWindow3.hide(); this._exVariableWindow4.hide(); _Scene_Map_stop.apply(this, arguments); }; const _Scene_Map_terminate = Scene_Map.prototype.terminate; Scene_Map.prototype.terminate = function () { _Scene_Map_terminate.apply(this, arguments); if (!SceneManager.isNextScene(Scene_Battle)) { this._exVariableWindow1.hide(); this._exVariableWindow2.hide(); this._exVariableWindow3.hide(); this._exVariableWindow4.hide(); } }; const _Scene_Map_createAllWindows = Scene_Map.prototype.createAllWindows; Scene_Map.prototype.createAllWindows = function () { _Scene_Map_createAllWindows.apply(this, arguments); this.createExVariableWindow(); }; Scene_Map.prototype.update = function () { Scene_Message.prototype.update.call(this); this.updateDestination(); this.updateMenuButton(); if ($gameSwitches.value(144)) { if (TouchInput.isTriggered() || TouchInput.isCancelled() || Input.isTriggered("ok") || Input.isTriggered("escape")) { if ($gameVariables.value(7) == 0) { $gameVariables.setValue(315, []); } else { $gameVariables.setValue(316, []); } $gameSwitches.setValue(144, false); return; } this.updateMainMultiply(); return; } this.updateMapNameWindow(); this.updateMainMultiply(); if (this.isSceneChangeOk()) { this.updateScene(); } else if (SceneManager.isNextScene(Scene_Battle)) { this.updateEncounterEffect(); } this.updateWaitCount(); // #競合対策 // KMS_MapActiveMessage.jsの競合用 this.updateActiveMessageDisplay(); }; Scene_Map.prototype.createExVariableWindow = function () { this._exVariableWindow1 = new Window_ExVariableWindow(); this._exVariableWindow1.setWindowId(1); this.addWindow(this._exVariableWindow1); this._exVariableWindow2 = new Window_ExVariableWindow(); this._exVariableWindow2.setWindowId(2); this.addWindow(this._exVariableWindow2); this._exVariableWindow3 = new Window_ExVariableWindow(); this._exVariableWindow3.setWindowId(3); this.addWindow(this._exVariableWindow3); this._exVariableWindow4 = new Window_ExVariableWindow(); this._exVariableWindow4.setWindowId(4); this.addWindow(this._exVariableWindow4); }; const _Scene_Map_callMenu = Scene_Map.prototype.callMenu; Scene_Map.prototype.callMenu = function () { _Scene_Map_callMenu.apply(this, arguments); this._exVariableWindow1.hide(); this._exVariableWindow2.hide(); this._exVariableWindow3.hide(); this._exVariableWindow4.hide(); }; //----------------------------------------------------------------------------- // Window_ExVariableWindow // // 変数を表示するウィンドウです。 function Window_ExVariableWindow() { this.initialize(...arguments); } Window_ExVariableWindow.prototype = Object.create(Window_Base.prototype); Window_ExVariableWindow.prototype.constructor = Window_ExVariableWindow; Window_ExVariableWindow.prototype.initialize = function () { const rect = new Rectangle(0 - 4, 0 - 4, Graphics.width, Graphics.height); Window_Base.prototype.initialize.call(this, rect); this.width = 0; this.height = 0; this._windowId = null; this.backOpacity = 0; this.frameVisible = false; this.contents.fontFace = "serif"; this.contents.fontSize = 18; //this._backgroundSprite = new Sprite(); //this._backgroundSprite.visible = false; this._CBR_back_sira = ImageManager.loadSystem("result_back_sira"); this._CBR_back_yozu = ImageManager.loadSystem("result_back_yozu"); //this.addChild(this._backgroundSprite); }; Window_ExVariableWindow.prototype.setWindowId = function (id) { this._windowId = id; }; Window_ExVariableWindow.prototype.update = function () { Window_Base.prototype.update.call(this); this.refresh(); }; Window_ExVariableWindow.prototype.updatePadding = function () { this.padding = 0; }; Window_ExVariableWindow.prototype.itemPadding = function () { return 0; }; Window_ExVariableWindow.prototype.colSpacing = function () { return 0; }; Window_ExVariableWindow.prototype.rowSpacing = function () { return 0; }; Window_ExVariableWindow.prototype.windowWidth = function () { return 1280; //900; }; Window_ExVariableWindow.prototype.labelWidth = function () { return Math.floor(this.windowWidth() * variableWindowLabelWidth); }; Window_ExVariableWindow.prototype.windowHeight = function () { return 720; //640; }; Window_ExVariableWindow.prototype.getVariableId = function () { if ($gameSystem._LL_VariableWindow) { return $gameSystem._LL_VariableWindow[this._windowId].variableId; } return null; }; Window_ExVariableWindow.prototype.refresh = function () { if (this.getVariableId()) { if (!this.CBR_drawn) { this.CBR_drawn = true; var keikenLi = [ { name: "Human", unit: "x", var_sira: 259, var_yozu: 339 }, { name: "Monster", unit: "x", var_sira: 260, var_yozu: 340 }, { name: "Beast", unit: "x", var_sira: 261, var_yozu: 341 }, { name: "Sex", unit: "x", var_sira: 262, var_yozu: 342 }, { name: "Anal Sex", unit: "x", var_sira: 263, var_yozu: 343 }, { name: "Fellatio", unit: "x", var_sira: 264, var_yozu: 344 }, { name: "Titjob", unit: "x", var_sira: 265, var_yozu: 345 }, { name: "Handjob", unit: "x", var_sira: 266, var_yozu: 346 }, { name: "Cunnilingus", unit: "x", var_sira: 267, var_yozu: 347 }, { name: "Kiss", unit: "x", var_sira: 268, var_yozu: 348 }, { name: "Breast Grope", unit: "x", var_sira: 269, var_yozu: 349 }, { name: "Ass Grope", unit: "x", var_sira: 270, var_yozu: 350 }, { name: "Fingering", unit: "x", var_sira: 271, var_yozu: 351 }, { name: "Anal Play", unit: "x", var_sira: 272, var_yozu: 352 }, { name: "Masturbation", unit: "x", var_sira: 273, var_yozu: 353 }, { name: "Anal Masturbation", unit: "x", var_sira: 274, var_yozu: 354 }, { name: "Toilet", unit: "x", var_sira: 275, var_yozu: 355 }, { name: "Exhibition Play", unit: "x", var_sira: 276, var_yozu: 356 }, //{ name: "調教", unit: "x", var_sira: 277 , var_yozu:357}, { name: "Deflowering", unit: "x", var_sira: 278, var_yozu: 358 }, { name: "Lesbian Sex", unit: "x", var_sira: 279, var_yozu: 359 }, { name: "Incest", unit: "x", var_sira: 280, var_yozu: 360 }, { name: "Climax", unit: "x", var_sira: 281, var_yozu: 361 }, { name: "Squirting", unit: "x", var_sira: 282, var_yozu: 362 }, { name: "Bukkake", unit: "cc", var_sira: 283, var_yozu: 363 }, { name: "Vaginal Cumshot", unit: "cc", var_sira: 284, var_yozu: 364 }, { name: "Anal Cumshot", unit: "cc", var_sira: 285, var_yozu: 365 }, { name: "Oral Cumshot", unit: "cc", var_sira: 286, var_yozu: 366 }, { name: "Breast Milk", unit: "cc", var_sira: 287, var_yozu: 367 }, { name: "Sex with People", unit: "x", var_sira: 288, var_yozu: 368 }, { name: "Interspecies Sex", unit: "x", var_sira: 289, var_yozu: 369 }, { name: "Orgy", unit: "x", var_sira: 290, var_yozu: 370 }, { name: "Rape", unit: "x", var_sira: 291, var_yozu: 371 }, { name: "Sexual Harassment", unit: "x", var_sira: 292, var_yozu: 372 }, { name: "Service", unit: "x", var_sira: 293, var_yozu: 373 }, { name: "Combat Sex", unit: "x", var_sira: 308, var_yozu: 388 }, { name: "Sex Work", unit: "x", var_sira: 294, var_yozu: 374 }, { name: "Sex Work Earnings", unit: "円", var_sira: 295, var_yozu: 375 }, { name: "Prostitution", unit: "x", var_sira: 296, var_yozu: 376 }, { name: "Prostitution Earnings", unit: "円", var_sira: 297, var_yozu: 377 }, { name: "Breast Milk Sales", unit: "x", var_sira: 298, var_yozu: 378 }, { name: "Milk Sales Earnings", unit: "円", var_sira: 299, var_yozu: 379 }, { name: "Pregnancy", unit: "x", var_sira: 300, var_yozu: 380 }, { name: "Birth", unit: "x", var_sira: 301, var_yozu: 381 }, { name: "Abortion", unit: "x", var_sira: 302, var_yozu: 382 }, { name: "Miscarriage", unit: "x", var_sira: 303, var_yozu: 383 }, { name: "Human Birth", unit: "x", var_sira: 304, var_yozu: 384 }, { name: "Monster Birth", unit: "x", var_sira: 305, var_yozu: 385 }, { name: "Beast Birth", unit: "x", var_sira: 306, var_yozu: 386 }, { name: "Egg Laying", unit: "x", var_sira: 307, var_yozu: 387 } ]; this.width = this.windowWidth(); this.height = this.windowHeight(); this.x = (Graphics.width - this.windowWidth()) / 2; this.y = (Graphics.height - this.windowHeight()) / 2; this.contents.clear(); this.changeTextColor(this.systemColor()); var ac_name = this._windowId === 1 ? "sira" : "yozu"; if (this[`_CBR_back_${ac_name}`]) { this.contents.blt(this[`_CBR_back_${ac_name}`], 0, 0, 1280, 720, 0, 0, 1280, 720); } this.resetTextColor(); var var_bf = $gameVariables.value(ac_name === "sira" ? 315 : 316) || []; var var_start = 242; var draw_item = function (e, a, b, c, x, y) { e.drawTextS(a, x + 40, y, e.labelWidth()); if (b) { e.changeTextColor("#FF4444"); e.drawTextM(`+${b}`, x + 180, y, 100, "right"); e.changeTextColor("#FFFFFF"); } else { e.drawTextS(`+${b}`, x + 180, y, 100, "right"); } e.drawTextS(c, x + 290, y, e.labelWidth()); }; this.contents.fontSize = 22; this.changeTextColor("#000000"); this.drawTextM("H Experience", 15, 122, 300, "center"); this.drawTextM("Partners", 330, 122, 300, "center"); this.drawTextM("Climax/Ejaculation", 330, 122 + 27 * 4 + 2, 300, "center"); this.drawTextM("Situations", 330, 122 + 27 * 12 + 2 * 2, 300, "center"); this.drawTextM("Sex Work", 645, 122, 300, "center"); this.drawTextM("Births", 645, 122 + 27 * 7 + 2, 300, "center"); this.changeTextColor("#FFFFFF"); this.contents.fontSize = 18; //テキスト と 現在の数値 for (var i = 3; i < 21; i++) { var col = 23; var row = Math.floor(i / col); var h = 40; var lh = 27; var var_num = keikenLi[i][`var_${ac_name}`] || 0; draw_item( this, keikenLi[i].name, //$gameVariables.value(keikenLi[i][`var_${ac_name}`]) || 0, $gameVariables.value(var_num) - (var_bf[var_num - var_start] || 0), keikenLi[i].unit, this.itemPadding() + row * (this.windowWidth() / 2 - 160), h + (i % col) * lh + 26 ); } for (var i = 0; i < 3; i++) { var col = 23; var row = Math.floor(i / col); var h = 40; var lh = 27; var top = lh * 3; var left = 314; var var_num = keikenLi[i][`var_${ac_name}`] || 0; draw_item( this, keikenLi[i].name, $gameVariables.value(var_num) - (var_bf[var_num - var_start] || 0), keikenLi[i].unit, left + this.itemPadding() + row * (this.windowWidth() / 2 - 160), top + h + i * lh + 26 ); } for (var i = 21; i < 28; i++) { var col = 23; var row = i; var h = 40; var lh = 27; var top = lh * 6 + 2; var left = 314; var idx = i - 20; var var_num = keikenLi[i][`var_${ac_name}`] || 0; draw_item( this, keikenLi[i].name, //$gameVariables.value(keikenLi[i][`var_${ac_name}`]) || 0, $gameVariables.value(var_num) - (var_bf[var_num - var_start] || 0), keikenLi[i].unit, left + this.itemPadding(), top + h + idx * lh + 26 ); } for (var i = 28; i < 35; i++) { var col = 23; var row = i; var h = 40; var lh = 27; var top = lh * 15 + 2 * 2; var left = 314; var idx = i - 28; var var_num = keikenLi[i][`var_${ac_name}`] || 0; draw_item( this, keikenLi[i].name, //$gameVariables.value(keikenLi[i][`var_${ac_name}`]) || 0, $gameVariables.value(var_num) - (var_bf[var_num - var_start] || 0), keikenLi[i].unit, left + this.itemPadding(), top + h + idx * lh + 26 ); } for (var i = 35; i < 41; i++) { var col = 23; var row = i; var h = 40; var lh = 27; var top = lh * 3; var left = 314 * 2; var idx = i - 35; var var_num = keikenLi[i][`var_${ac_name}`] || 0; draw_item( this, keikenLi[i].name, //$gameVariables.value(keikenLi[i][`var_${ac_name}`]) || 0, $gameVariables.value(var_num) - (var_bf[var_num - var_start] || 0), keikenLi[i].unit, left + this.itemPadding(), top + h + idx * lh + 26 ); } for (var i = 41; i < 49; i++) { var col = 23; var row = i; var h = 40; var lh = 27; var top = lh * 10 + 2; var left = 314 * 2; var idx = i - 41; var var_num = keikenLi[i][`var_${ac_name}`] || 0; draw_item( this, keikenLi[i].name, //$gameVariables.value(keikenLi[i][`var_${ac_name}`]) || 0, $gameVariables.value(var_num) - (var_bf[var_num - var_start] || 0), keikenLi[i].unit, left + this.itemPadding(), top + h + idx * lh + 26 ); } } } else { this.width = 0; this.height = 0; this.t = 0; this.CBR_drawn = false; } }; })();