chore: smaller commits

This commit is contained in:
2025-06-27 15:59:25 -07:00
parent 572beac962
commit 4599690601
25 changed files with 111427 additions and 0 deletions

116
js/plugins/TextPicture.js Normal file
View File

@ -0,0 +1,116 @@
//=============================================================================
// RPG Maker MZ - Text Picture
//=============================================================================
/*:
* @target MZ
* @plugindesc Displays text as a picture.
* @author Yoji Ojima
*
* @help TextPicture.js
*
* This plugin provides a command to show text as a picture.
*
* Use it in the following procedure.
* 1. Call the plugin command "Set Text Picture".
* 2. Execute "Show Picture" without specifying an image.
*
* @command set
* @text Set Text Picture
* @desc Sets text to display as a picture.
* After this, execute "Show Picture" without specifying an image.
*
* @arg text
* @type multiline_string
* @text Text
* @desc Text to display as a picture.
* Control characters are allowed.
*/
/*:ja
* @target MZ
* @plugindesc テキストをピクチャとして表示します。
* @author Yoji Ojima
*
* @help TextPicture.js
*
* このプラグインは、テキストをピクチャとして表示するコマンドを提供します。
*
* 次の手順で使用してください。
* 1. プラグインコマンド「テキストピクチャの設定」を呼び出します。
* 2. 画像を指定せずに「ピクチャの表示」を実行します。
*
* @command set
* @text テキストピクチャの設定
* @desc ピクチャとして表示するテキストを設定します。
* この後、画像を指定せずに「ピクチャの表示」を実行してください。
*
* @arg text
* @type multiline_string
* @text テキスト
* @desc ピクチャとして表示するテキストです。
* 制御文字が使用可能です。
*/
(() => {
const pluginName = "TextPicture";
let textPictureText = "";
PluginManager.registerCommand(pluginName, "set", args => {
textPictureText = String(args.text);
});
const _Game_Picture_show = Game_Picture.prototype.show;
Game_Picture.prototype.show = function() {
_Game_Picture_show.apply(this, arguments);
if (this._name === "" && textPictureText) {
this.mzkp_text = textPictureText;
this.mzkp_textChanged = true;
textPictureText = "";
}
};
const _Sprite_Picture_destroy = Sprite_Picture.prototype.destroy;
Sprite_Picture.prototype.destroy = function() {
destroyTextPictureBitmap(this.bitmap);
_Sprite_Picture_destroy.apply(this, arguments);
};
const _Sprite_Picture_updateBitmap = Sprite_Picture.prototype.updateBitmap;
Sprite_Picture.prototype.updateBitmap = function() {
_Sprite_Picture_updateBitmap.apply(this, arguments);
if (this.visible && this._pictureName === "") {
const picture = this.picture();
const text = picture ? picture.mzkp_text || "" : "";
const textChanged = picture && picture.mzkp_textChanged;
if (this.mzkp_text !== text || textChanged) {
this.mzkp_text = text;
destroyTextPictureBitmap(this.bitmap);
this.bitmap = createTextPictureBitmap(text);
picture.mzkp_textChanged = false;
}
} else {
this.mzkp_text = "";
}
};
function createTextPictureBitmap(text) {
const tempWindow = new Window_Base(new Rectangle());
const size = tempWindow.textSizeEx(text);
tempWindow.padding = 0;
tempWindow.move(0, 0, size.width, size.height);
tempWindow.createContents();
tempWindow.drawTextEx(text, 0, 0, 0);
const bitmap = tempWindow.contents;
tempWindow.contents = null;
tempWindow.destroy();
bitmap.mzkp_isTextPicture = true;
return bitmap;
}
function destroyTextPictureBitmap(bitmap) {
if (bitmap && bitmap.mzkp_isTextPicture) {
bitmap.destroy();
}
}
})();