show-first/js/plugins/FTKR_ExEscapeCharacters.js
2024-08-08 11:24:10 -05:00

290 lines
11 KiB
JavaScript

//=======↓本プラグインを改変した場合でも、この欄は消さないでください↓===============
// 制御文字を拡張するプラグイン
// FTKR_ExEscapeCharacters.js
// 作成者 : フトコロ
// 作成日 : 2017/03/27
// 最終更新日 : 2017/03/28
// バージョン : v1.0.2
//=======↑本プラグインを改変した場合でも、この欄は消さないでください↑===============
var Imported = Imported || {};
Imported.FTKR_EEC = true;
var FTKR = FTKR || {};
FTKR.EEC = FTKR.EEC || {};
/*:
* @plugindesc v1.0.2 制御文字を拡張するプラグイン
* @author フトコロ
*
* @param -- 画像の表示 --
* @desc
*
* @param Advance Load Files
* @desc ゲーム起動時に読み込む画像ファイル名を指定
* 複数ある場合は、カンマ(,)で区切ること
* @default
*
* @param Enabled Adjust Height
* @desc 画像高さに合わせて、行の高さを自動調整する
* 0 - 無効にする, 1 - 有効にする
* @default 0
*
* @param Image Width
* @desc 制御文字\IMG[]で表示する画像の幅
* @default
*
* @param Image Height
* @desc 制御文字\IMG[]で表示する画像の高さ
* @default
*
* @help
*-----------------------------------------------------------------------------
* 概要
*-----------------------------------------------------------------------------
* 文章の表示等に使用できる制御文字に、以下の制御文字を追加します。
*
* 1. 画像の表示
* \IMG[画像ファイル名(, 画像番号, 画像幅, 画像高さ, 画像拡大率, 表示位置)]
*
* 2. 行の高さの変更
* \LH[行の高さ]
*
*-----------------------------------------------------------------------------
* 設定方法
*-----------------------------------------------------------------------------
* 1.「プラグインマネージャー(プラグイン管理)」に、本プラグインを追加して
* ください。
*
*
*-----------------------------------------------------------------------------
* 「画像の表示」機能
*-----------------------------------------------------------------------------
* 以下の制御文字で画像を表示できます。
*
* \IMG[画像ファイル名(, 画像番号, 画像幅, 画像高さ, 画像拡大率, 表示位置)]
*
* 画像ファイル名
* :表示させたい画像のファイル名を指定します。
* :画像ファイルは、/img/systemフォルダに保存してください。(*1)
*
* 画像番号
* :画像ファイル内の何番目の画像を表示するか指定します。
* :アイコン画像のように、左上の画像を 0番、右上の画像を 15番、
* :左上から一段下の画像を 16番として数えます。
* :入力しない場合は、0番目の画像を表示します。
*
* 画像幅
* :画像の幅を指定します。
* :0を指定、または入力しない場合は、プラグインパラメータ<Image Width>の値を
* :使用します。
*
* 画像高さ
* :画像の高さを指定します。
* :0を指定、または入力しない場合は、プラグインパラメータ<Image Height>の値を
* :使用します。
* :プラグインパラメータ<Enabled Adjust Height>を有効にした場合、
* :画像の高さに合わせて以降の行の高さを自動で調整します。
*
* 画像拡大率
* :100を基準として、画像の拡大率を指定します。
* :入力しない場合は、元のサイズのまま表示します。
*
* 表示位置
* :行の高さよりも、画像高さが小さい場合に、画像を表示する位置を設定できます。
* : 中央(middle) - 中央揃えで表示
* : 下揃え(bottom) - 下揃えで表示
* :入力しない場合は、上揃えで表示します。
*
* 入力例)
* \IMG[file]
* 画像ファイル file.png の 0番目の画像を表示する。
* 画像の幅と高さは、プラグインパラメータの値を使用する。
*
* \IMG[file, 1, 48, 48, 80, 中央]
* 48*48 の画像の画像ファイル file.png の 1番目の画像を80%に
* 縮小して表示する。
* このとき、1行が48よりも大きい場合に中央揃えで表示する。
*
* (*1):画像ファイルは、プラグインパラメータ<Advance Load File>に
* ファイル名を入力することで、ゲーム起動時に事前に読み込むことが
* できます。
* 事前に読み込んでいない画像の場合、ゲーム起動後の最初の画像表示の際に
* 正しく表示できない場合があります。
*
*
*-----------------------------------------------------------------------------
* 「行の高さの変更」機能
*-----------------------------------------------------------------------------
* 以下の制御文字で行の高さの変更できます。
*
* \LH[行の高さ]
*
* 行の高さ
* :この制御文字以降の1行の高さを、pixel単位で指定します。
* :MV標準の行の高さは 36 です。
* :0 を指定すると、標準の高さに変更します。
*
* 入力例)
* \LH[48]
*
*
*-----------------------------------------------------------------------------
* 本プラグインを使用するに当たって ☆重要☆
*-----------------------------------------------------------------------------
* 1.本プラグインは改変可です。
* ただし、一番始めに記載した作成者等の欄は残してください。
*
* 2.本プラグインを使用するに当たって、ゲーム中にライセンス表示することは
* 必須ではありません。ただ、どこかReadme等にでも記載して頂けると嬉しいです。
*
* 3.本プラグインを使用する、または改変するに当たって、私フトコロに許可を取る
* ことや、連絡することは必要ありません。
*
* 4.本プラグインは、有料ゲームに使用して構いません。
* ただし、改変した場合でも、プラグイン単体で販売することは止めてください。
*
* 5.本プラグインは、年齢制限のあるゲームに使用して構いません。
*
*
*-----------------------------------------------------------------------------
* 変更来歴
*-----------------------------------------------------------------------------
*
* v1.0.2 - 2017/03/28 : 不具合修正
*
* v1.0.1 - 2017/03/27 : 機能追加
* 1. 制御文字「行の高さの変更」を追加
* 2. 制御文字「画像の表示」に、行の高さと表示位置の調整機能を追加
*
* v1.0.0 - 2017/03/27 : 初版作成
*
*-----------------------------------------------------------------------------
*/
//=============================================================================
//=============================================================================
// プラグイン パラメータ
//=============================================================================
FTKR.EEC.parameters = PluginManager.parameters("FTKR_ExEscapeCharacters");
FTKR.EEC.files = String(FTKR.EEC.parameters["Advance Load Files"] || "");
FTKR.EEC.width = Number(FTKR.EEC.parameters["Image Width"] || 0);
FTKR.EEC.height = Number(FTKR.EEC.parameters["Image Height"] || 0);
FTKR.EEC.enabledAdjustHeight = Number(
FTKR.EEC.parameters["Enabled Adjust Height"] || 0
);
//画像ファイル内で画像を横に並べられる数
Window_Base.EEC_IMG_LENGTH = 16;
//=============================================================================
// DataManager
//=============================================================================
//画像ファイルの事前ロード
FTKR.EEC.DataManager_loadDatabase = DataManager.loadDatabase;
DataManager.loadDatabase = function (name, src) {
FTKR.EEC.DataManager_loadDatabase.call(this, name, src);
if (!FTKR.EEC.files) return;
images = FTKR.EEC.files.split(",");
if (!images.length) return;
images.forEach(function (image) {
ImageManager.loadSystem(image);
});
};
//=============================================================================
// Window_Base
//=============================================================================
//画像表示関数 /img/system/に保存したname.pngを表示する。
Window_Base.prototype.drawEecImage = function (
name,
index,
x,
y,
width,
height,
scale
) {
if (name) {
var bitmap = ImageManager.loadSystem(name);
var pw = width;
var ph = height;
scale = scale || 1;
var len = Window_Base.EEC_IMG_LENGTH;
var sx = (index % len) * pw;
var sy = Math.floor(index / len) * ph;
this.contents.blt(bitmap, sx, sy, pw, ph, x, y, pw * scale, ph * scale);
}
};
//=============================================================================
// 制御文字の表示処理の修正
//=============================================================================
FTKR.EEC.Window_Base_processEscapeCharacter =
Window_Base.prototype.processEscapeCharacter;
Window_Base.prototype.processEscapeCharacter = function (code, textState) {
switch (code) {
case "IMG":
this.processDrawEecImg(this.obtainEscapeEecParam(textState), textState);
break;
case "LH":
textState.height = this.obtainEscapeParam(textState) || this.lineHeight();
break;
default:
FTKR.EEC.Window_Base_processEscapeCharacter.call(this, code, textState);
break;
}
};
Window_Base.prototype.obtainEscapeEecParam = function (textState) {
var arr = /^\[([^\]]+)\]/.exec(textState.text.slice(textState.index));
if (arr) {
textState.index += arr[0].length;
var eec = arr[1].split(",");
eec = eec.map(function (elm, i) {
return isNaN(parseInt(elm)) ? elm : parseInt(elm);
});
return eec;
} else {
return "";
}
};
Window_Base.prototype.processDrawEecImg = function (ececs, textState) {
var index = ececs[1] || 0;
var width = ececs[2] || FTKR.EEC.width;
var height = ececs[3] || FTKR.EEC.height;
var scale = ececs[4] / 100 || 1;
var imgHeight = 0;
var offset = 0;
if (FTKR.EEC.enabledAdjustHeight) {
imgHeight = Math.floor(height * scale) + 4;
var offset = 0;
switch (ececs[5]) {
case "middle":
case "中央":
offset = (textState.height - imgHeight) / 2;
if (offset < 0) offset = 0;
break;
case "bottom":
case "下揃え":
offset *= 2;
break;
}
}
this.drawEecImage(
ececs[0],
index,
textState.x + 2,
textState.y + 2 + offset,
width,
height,
scale
);
textState.x += Math.floor(width * scale) + 4;
textState.height = Math.max(imgHeight, textState.height);
};