phantom-soul-sword-lambda-n.../www/js/plugins/kz_PictureChoices.js
2025-07-11 18:31:55 -07:00

314 lines
No EOL
11 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

/*:ja
* @plugindesc v1.04 - 選択肢の表示の際、選択肢を画像で、画面の自由な場所に配置できるようにします。
* @author Souji Kenzaki
*
* @param Cursor Bitmap Name
* @type string
* @desc カーソル画像名
* @default Cursor
*
* @param Cursor Overhead X
* @type number
* @min -99999
* @desc カーソル位置調整座標X
* @default 0
*
* @param Cursor Overhead Y
* @type number
* @min -99999
* @desc カーソル位置調整座標Y
* @default 0
*
* @param Cursor Max Frame
* @type number
* @desc カーソルアニメーションの最大フレーム数0でアニメーションなし
* @default 0
*
* @param Cursor Frame Spacing
* @type number
* @desc カーソルアニメーションのフレーム間隔
* @default 0
*
* @help
* 有効化はプラグインコマンド GraphicalChoice on
* 無効かは同 GraphicalChoice off
* にて行ってください。(初期状態では無効化されています)
*
* ※画像はカーソル、選択肢画像共に img/choices/ フォルダ内に入れてください。
* 有効化中、イベントコマンドで選択肢の表示を行う際、選択肢のテキストを
* [画像]|[x]|[y]
* の形式にする事で画像で選択肢の表示を行う事が可能です。
*
* 例として
* choice1|30|50
* であれば、choice1.pngを座標(30,50)に表示し選択できるようにします。
*
* 尚、キーボード操作はデフォルトに準じ、上下キーでのみカーソルが動かせる事にご注意ください。
* タッチ/クリック操作はこの制約を受けません。
*
* Cursor Max Frameを1以上にする事で、カーソルをアニメーションさせる事が可能です。
* この場合、例えばCursor Bitmap Nameが cs
* Cursor Max Frameが3だった場合
* cs0.png~cs3.pngまでが順に再生されその後cs0.pngに巻き戻りループします。
*
* スクリプトでゲーム中に以下を変更できます。
*
* カーソル基本画像cn.pngに
* $gameSystem.ChoiceCursor.bmp = "cn";
*
* カーソルのx補正値変更
* $gameSystem.ChoiceCursor.x = 3;
*
* カーソルのy補正値変更
* $gameSystem.ChoiceCursor.y = 5;
*
* カーソルアニメのフレーム数変更
* $gameSystem.ChoiceCursor.maxFrame = 10;
*
* カーソルアニメの再生間隔変更
* $gameSystem.ChoiceCursor.interval = 20;
*
*
*
* 開発協力Special Thanks
* サイリ様(@sairi55)
* ヴァージニアス様(@Virgina_ss)
*/
(function () {
var parameters = PluginManager.parameters('kz_PictureChoices');
var _cursorBmp = String(parameters['Cursor Bitmap Name'] || "");
var _cursorX = Number(parameters['Cursor Overhead X']) || 0;
var _cursorY = Number(parameters['Cursor Overhead Y']) || 0;
var _c_maxFrame = Number(parameters['Cursor Max Frame']) || 0;
var _c_Interval = Number(parameters['Cursor Frame Spacing']) || 0;
var _Game_Interpreter_pluginCommand =
Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function (command, args) {
_Game_Interpreter_pluginCommand.call(this, command, args);
if (command === 'GraphicalChoice') {
$gameSystem.graphicalChoices = (args[0] == "on");
}
};
ImageManager.loadChoices = function (filename, hue) {
return this.loadBitmap('img/choices/', filename, hue, true);
};
const kz_Game_System_prototype_initialize = Game_System.prototype.initialize;
Game_System.prototype.initialize = function () {
kz_Game_System_prototype_initialize.call(this);
this.ChoiceCursor = {}
this.ChoiceCursor.bmp = _cursorBmp;
this.ChoiceCursor.x = _cursorX;
this.ChoiceCursor.y = _cursorY;
this.ChoiceCursor.maxFrame = _c_maxFrame;
this.ChoiceCursor.interval = _c_Interval;
};
var kz_Window_ChoiceList_prototype_windowWidth = Window_ChoiceList.prototype.windowWidth;
Window_ChoiceList.prototype.windowWidth = function () {
if (!$gameSystem.graphicalChoices) {
return kz_Window_ChoiceList_prototype_windowWidth.call(this);
}
return 0;
};
var kz_Window_ChoiceList_prototype_windowHeight = Window_ChoiceList.prototype.windowHeight;
Window_ChoiceList.prototype.windowHeight = function () {
if (!$gameSystem.graphicalChoices) {
return kz_Window_ChoiceList_prototype_windowHeight.call(this);
}
return 0;
};
var kz_Window_ChoiceList_prototype_cursorRight = Window_ChoiceList.prototype.cursorRight;
Window_ChoiceList.prototype.cursorRight = function(wrap) {
if (!$gameSystem.graphicalChoices) {
kz_Window_ChoiceList_prototype_cursorRight.call(this, wrap);
return;
}
this.cursorDown(wrap);
};
var kz_Window_ChoiceList_prototype_cursorLeft = Window_ChoiceList.prototype.cursorLeft;
Window_ChoiceList.prototype.cursorLeft = function(wrap) {
if (!$gameSystem.graphicalChoices) {
kz_Window_ChoiceList_prototype_cursorLeft.call(this, wrap);
return;
}
this.cursorUp(wrap);
};
var kz_Window_ChoiceList_prototype_initialize = Window_ChoiceList.prototype.initialize;
Window_ChoiceList.prototype.initialize = function (messageWindow) {
kz_Window_ChoiceList_prototype_initialize.call(this, messageWindow);
this._choiceSprite = [];
this._cursorSprite = new Sprite_ChoiceCursor($gameSystem.ChoiceCursor.maxFrame, $gameSystem.ChoiceCursor.interval);
};
var kz_Window_ChoiceList_prototype_start = Window_ChoiceList.prototype.start;
Window_ChoiceList.prototype.start = function () {
this.removeAllChoiceSprites();
if ($gameSystem.graphicalChoices) {
this.populateChoiceSprites();
}
kz_Window_ChoiceList_prototype_start.call(this);
if ($gameSystem.graphicalChoices) {
this.x = 0;
this.y = 0;
}
};
Window_ChoiceList.prototype.populateChoiceSprites = function () {
var choices = $gameMessage.choices();
for (var i = 0; i < choices.length; i++) {
var _data = choices[i].split('|')
this._choiceSprite[i] = new Sprite_Base();
this._choiceSprite[i].bitmap = ImageManager.loadChoices(_data[0]);
this._choiceSprite[i].x = _data[1] ? Number(_data[1]) : 0;
this._choiceSprite[i].y = _data[2] ? Number(_data[2]) : 0;
this.addChild(this._choiceSprite[i]);
}
this.addChild(this._cursorSprite);//再追加で一番上に出す
}
Window_ChoiceList.prototype.removeAllChoiceSprites = function () {
for (var i = 0; i < this._choiceSprite.length; i++) {
this.removeChild(this._choiceSprite[i]);
}
this._choiceSprite = [];
}
var kz_Window_ChoiceList_prototype_updateArrows = Window_ChoiceList.prototype.updateArrows;
Window_ChoiceList.prototype.updateArrows = function () {
kz_Window_ChoiceList_prototype_updateArrows.call(this);
if ($gameSystem.graphicalChoices) {
this.downArrowVisible = false;
this.upArrowVisible = false;
}
};
var kz_Window_ChoiceList_prototype_select = Window_ChoiceList.prototype.select;
Window_ChoiceList.prototype.select = function (index) {
kz_Window_ChoiceList_prototype_select.call(this, index);
if ($gameSystem.graphicalChoices) {
if (!this._cursorSprite) {
return;
}
if (index < 0 || !this._choiceSprite || !this._choiceSprite[index]) {
this._cursorSprite.hide()
return;
}
this._cursorSprite.show();
this._cursorSprite.x = this._choiceSprite[index].x + $gameSystem.ChoiceCursor.x;
this._cursorSprite.y = this._choiceSprite[index].y + $gameSystem.ChoiceCursor.y;
}
else if (this._cursorSprite)
{
this._cursorSprite.hide();
}
};
var kz_Window_ChoiceList_prototype_hitTest = Window_ChoiceList.prototype.hitTest;
Window_ChoiceList.prototype.hitTest = function (x, y) {
if (!$gameSystem.graphicalChoices) {
return kz_Window_ChoiceList_prototype_hitTest.call(this, x, y);
}
if (this._choiceSprite) {
for (var i = 0; i < this._choiceSprite.length; i++) {
var xmin = this._choiceSprite[i].x;
var xmax = this._choiceSprite[i].x + this._choiceSprite[i].width;
var ymin = this._choiceSprite[i].y;
var ymax = this._choiceSprite[i].y + this._choiceSprite[i].height;
if (x >= xmin && x <= xmax && y >= ymin && y <= ymax) {
return i;
}
}
}
return -1;
};
var kz_Window_ChoiceList_prototype_isTouchedInsideFrame = Window_ChoiceList.prototype.isTouchedInsideFrame;
Window_ChoiceList.prototype.isTouchedInsideFrame = function () {
if (!$gameSystem.graphicalChoices) {
return kz_Window_ChoiceList_prototype_isTouchedInsideFrame.call(this);
}
return true;
};
function Sprite_ChoiceCursor() {
this.initialize.apply(this, arguments);
}
Sprite_ChoiceCursor.prototype = Object.create(Sprite_Base.prototype);
Sprite_ChoiceCursor.prototype.constructor = Sprite_Weapon;
Sprite_ChoiceCursor.prototype.initialize = function (cursorMaxFrame, cursorInterval) {
Sprite_Base.prototype.initialize.call(this);
if (!cursorMaxFrame) {
this.bitmap = ImageManager.loadChoices($gameSystem.ChoiceCursor.bmp);
}
this._maxFrame = cursorMaxFrame;
this._interval = cursorInterval;
this._currentFrame = 0;
this._currentInterval = 0;
this._currentCursorPicName = "";
};
Sprite_ChoiceCursor.prototype.update = function () {
Sprite_Base.prototype.update.call(this);
this.updateCursorFrameAnimation();
};
Sprite_ChoiceCursor.prototype.updateCursorFrameAnimation = function () {
this._maxFrame = $gameSystem.ChoiceCursor.maxFrame;
this._interval = $gameSystem.ChoiceCursor.interval;
if (!this._maxFrame) {
if (this._currentCursorPicName != $gameSystem.ChoiceCursor.bmp)
{
this.bitmap = ImageManager.loadChoices($gameSystem.ChoiceCursor.bmp);
this._currentCursorPicName = $gameSystem.ChoiceCursor.bmp;
}
return;
}
if (this._currentInterval > this._interval) {
this._currentFrame++;
this._currentInterval = 0;
}
if (this._currentFrame > this._maxFrame) {
this._currentFrame = 0;
}
if (this._currentCursorPicName != this.cursorPicName()) {
this.bitmap = ImageManager.loadChoices(this.cursorPicName());
this._currentCursorPicName = this.cursorPicName();
}
this._currentInterval++;
};
Sprite_ChoiceCursor.prototype.cursorPicName = function () {
return $gameSystem.ChoiceCursor.bmp + String(this._currentFrame);
}
})();