alter-egoism/js/plugins/LL_VariableWindow.js
2025-11-01 14:17:42 -05:00

565 lines
19 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=============================================================================
// 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: "人間", unit: "人", var_sira: 259, var_yozu: 339 },
{ name: "魔物", unit: "匹", var_sira: 260, var_yozu: 340 },
{ name: "魔獣", unit: "匹", var_sira: 261, var_yozu: 341 },
{ name: "セックス", unit: "回", var_sira: 262, var_yozu: 342 },
{ name: "アナルセックス", unit: "回", var_sira: 263, var_yozu: 343 },
{ name: "フェラチオ", unit: "回", var_sira: 264, var_yozu: 344 },
{ name: "パイズリ", unit: "回", var_sira: 265, var_yozu: 345 },
{ name: "手コキ", unit: "回", var_sira: 266, var_yozu: 346 },
{ name: "クンニ", unit: "回", var_sira: 267, var_yozu: 347 },
{ name: "キス", unit: "回", var_sira: 268, var_yozu: 348 },
{ name: "乳揉み", unit: "回", var_sira: 269, var_yozu: 349 },
{ name: "尻揉み", unit: "回", var_sira: 270, var_yozu: 350 },
{ name: "手マン", unit: "回", var_sira: 271, var_yozu: 351 },
{ name: "アナル弄り", unit: "回", var_sira: 272, var_yozu: 352 },
{ name: "オナニー", unit: "回", var_sira: 273, var_yozu: 353 },
{ name: "アナニー", unit: "回", var_sira: 274, var_yozu: 354 },
{ name: "トイレ", unit: "回", var_sira: 275, var_yozu: 355 },
{ name: "露出プレイ", unit: "回", var_sira: 276, var_yozu: 356 },
//{ name: "調教", unit: "回", var_sira: 277 , var_yozu:357},
{ name: "筆おろし", unit: "回", var_sira: 278, var_yozu: 358 },
{ name: "レズエッチ", unit: "回", var_sira: 279, var_yozu: 359 },
{ name: "近親相姦", unit: "回", var_sira: 280, var_yozu: 360 },
{ name: "絶頂", unit: "回", var_sira: 281, var_yozu: 361 },
{ name: "潮吹き", unit: "回", var_sira: 282, var_yozu: 362 },
{ name: "ぶっかけ", unit: "cc", var_sira: 283, var_yozu: 363 },
{ name: "膣内射精", unit: "cc", var_sira: 284, var_yozu: 364 },
{ name: "アナル内射精", unit: "cc", var_sira: 285, var_yozu: 365 },
{ name: "口内射精", unit: "cc", var_sira: 286, var_yozu: 366 },
{ name: "母乳噴出", unit: "cc", var_sira: 287, var_yozu: 367 },
{ name: "人との性行為", unit: "回", var_sira: 288, var_yozu: 368 },
{ name: "異種姦", unit: "回", var_sira: 289, var_yozu: 369 },
{ name: "乱交", unit: "回", var_sira: 290, var_yozu: 370 },
{ name: "レイプ", unit: "回", var_sira: 291, var_yozu: 371 },
{ name: "セクハラ", unit: "回", var_sira: 292, var_yozu: 372 },
{ name: "ご奉仕", unit: "回", var_sira: 293, var_yozu: 373 },
{ name: "戦闘中エッチ", unit: "回", var_sira: 308, var_yozu: 388 },
{ name: "風俗仕事", unit: "回", var_sira: 294, var_yozu: 374 },
{ name: "風俗で稼いだ額", unit: "円", var_sira: 295, var_yozu: 375 },
{ name: "売春", unit: "回", var_sira: 296, var_yozu: 376 },
{ name: "売春で稼いだ額", unit: "円", var_sira: 297, var_yozu: 377 },
{ name: "母乳販売", unit: "回", var_sira: 298, var_yozu: 378 },
{ name: "母乳販売で稼いだ額", unit: "円", var_sira: 299, var_yozu: 379 },
{ name: "妊娠", unit: "回", var_sira: 300, var_yozu: 380 },
{ name: "出産", unit: "回", var_sira: 301, var_yozu: 381 },
{ name: "堕胎", unit: "回", var_sira: 302, var_yozu: 382 },
{ name: "流産", unit: "回", var_sira: 303, var_yozu: 383 },
{ name: "人間出産", unit: "人", var_sira: 304, var_yozu: 384 },
{ name: "魔物出産", unit: "匹", var_sira: 305, var_yozu: 385 },
{ name: "魔獣出産", unit: "匹", var_sira: 306, var_yozu: 386 },
{ name: "産卵", unit: "回", 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("エッチ経験", 15, 122, 300, "center");
this.drawTextM("経験相手", 330, 122, 300, "center");
this.drawTextM("絶頂・射精", 330, 122 + 27 * 4 + 2, 300, "center");
this.drawTextM("エロシチュ", 330, 122 + 27 * 12 + 2 * 2, 300, "center");
this.drawTextM("エロ商売", 645, 122, 300, "center");
this.drawTextM("出産", 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;
}
};
})();