//============================================================================= // RPGツクールMZ - LL_SprashScreen.js v1.1.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-sprashscreen/ * * @help LL_SprashScreen.js * * スプラッシュスクリーンを表示します。 * スプラッシュスクリーンは複数設定することが可能です。 * 決定キー、クリックでスキップさせることもできます。 * ジングルMEを再生することも可能です。 * (v1.1.0: ジングルMEを画像毎に設定できるようになりました) * * 利用規約: * ・著作権表記は必要ございません。 * ・利用するにあたり報告の必要は特にございません。 * ・商用・非商用問いません。 * ・R18作品にも使用制限はありません。 * ・ゲームに合わせて自由に改変していただいて問題ございません。 * ・プラグイン素材としての再配布(改変後含む)は禁止させていただきます。 * * 作者: ルルの教会 * 作成日: 2022/4/10 * * @param splashImages * @text 画像リスト * @desc スプラッシュスクリーンとして表示する画像リストです。 * 上から順番に表示されます。 * @default [] * @type struct[] * * @param skipEnabled * @text スキップ許可 * @desc 決定キー、クリックでスキップを許可するか設定します。 * @type boolean * @default true * * @param debugDisabled * @text テストプレイ時は非表示 * @desc テストプレイ時は非表示にするか設定します。 * @type boolean * @default false * * @param jingleSettings * @text ジングルの設定 * @desc ※この項目は使用しません * * @param meName * @text ME * @desc 再生する音声ファイルを選択してください。 * @dir audio/me * @type file * @require 1 * @parent jingleSettings * * @param meVolume * @text MEの音量 * @desc MEの音量(0~100%)です。 (初期値: 90%) * @default 90 * @max 100 * @min 0 * @type number * @parent jingleSettings * * @param mePitch * @text MEのピッチ * @desc MEのピッチ(50~150%)です。 (初期値: 100%) * @default 100 * @max 150 * @min 50 * @type number * @parent jingleSettings * * @param mePan * @text MEの位相 * @desc MEの位相(-100~100)です。 (初期値: 0) * @default 0 * @max 100 * @min -100 * @type number * @parent jingleSettings */ /*~struct~splashImages: * * @param imageName * @text 画像ファイル名 * @desc 表示する画像ファイルを選択してください。 * @dir img/system * @type file * @require 1 * * @param fadeTime * @text フェード時間 * @desc フェードイン・フェードアウトの効果時間です。 * @default 60 * @min 0 * @max 999 * @type number * * @param waitTime * @text 表示時間 * @desc フェードイン後の表示時間です。 * @default 60 * @min 0 * @max 999 * @type number * * @param jingleSettings * @text ジングルの設定 * @desc ※この項目は使用しません * * @param meName * @text ME * @desc 再生する音声ファイルを選択してください。 * @dir audio/me * @type file * @require 1 * @parent jingleSettings * * @param meVolume * @text MEの音量 * @desc MEの音量(0~100%)です。 (初期値: 90%) * @default 90 * @max 100 * @min 0 * @type number * @parent jingleSettings * * @param mePitch * @text MEのピッチ * @desc MEのピッチ(50~150%)です。 (初期値: 100%) * @default 100 * @max 150 * @min 50 * @type number * @parent jingleSettings * * @param mePan * @text MEの位相 * @desc MEの位相(-100~100)です。 (初期値: 0) * @default 0 * @max 100 * @min -100 * @type number * @parent jingleSettings * * @param meTiming * @text 再生タイミング * @desc MEを再生するタイミングを選択します。 * @type select * @default before * @option フェードイン前 * @value before * @option フェードイン後 * @value after * @parent jingleSettings */ (() => { const pluginName = "LL_SprashScreen"; const parameters = PluginManager.parameters(pluginName); const paramJsonParse = function (key, value) { try { return JSON.parse(value); } catch (e) { return value; } }; const skipEnabled = eval(parameters["skipEnabled"] || "true"); const debugDisabled = eval(parameters["debugDisabled"] || "false"); // ME const meName = String(parameters["meName"] || ""); const meVolume = Number(parameters["meVolume"] || 90); const mePitch = Number(parameters["mePitch"] || 100); const mePan = Number(parameters["mePan"] || 0); // 画像リスト const splashImages = String(parameters["splashImages"] || "[]"); const splashImageLists = JSON.parse(JSON.stringify(splashImages, paramJsonParse)); const _Scene_Boot_loadSystemImages = Scene_Boot.prototype.loadSystemImages; Scene_Boot.prototype.loadSystemImages = function () { _Scene_Boot_loadSystemImages.call(this); // スプラッシュ画像を読み込み splashImageLists.forEach((item) => { ImageManager.loadSystem(item.imageName); }); }; const _Scene_Boot_startNormalGame = Scene_Boot.prototype.startNormalGame; Scene_Boot.prototype.startNormalGame = function () { if (!DataManager.isBattleTest() && !DataManager.isEventTest() && splashImageLists.length > 0) { if (!Utils.isOptionValid("test") || !debugDisabled) { this.checkPlayerLocation(); DataManager.setupNewGame(); SceneManager.goto(Scene_SplashScreen); return; } } _Scene_Boot_startNormalGame.apply(this, arguments); }; //----------------------------------------------------------------------------- // Scene_SplashScreen // // スプラッシュスクリーンを表示する独自のシーンを追加定義します。 function Scene_SplashScreen() { this.initialize(...arguments); } Scene_SplashScreen.prototype = Object.create(Scene_Base.prototype); Scene_SplashScreen.prototype.constructor = Scene_SplashScreen; Scene_SplashScreen.prototype.initialize = function () { Scene_Base.prototype.initialize.call(this); SceneManager.clearStack(); this._originalSplash = null; this._splashIndex = 0; this._fadeTime = 60; this._waitTime = 0; this._fadeOpacity = 255; this._jingleMe = null; }; Scene_SplashScreen.prototype.create = function () { Scene_Base.prototype.create.call(this); this._originalSplash = new Sprite(); this.addChild(this._originalSplash); }; Scene_SplashScreen.prototype.start = function () { Scene_Base.prototype.start.call(this); this.playMeJingle(); }; Scene_SplashScreen.prototype.update = function () { Scene_Base.prototype.update.call(this); // 画像切り替え if (this._waitTime == 0) { if (this._fadeOpacity == 0) { this.startFadeOut(this._fadeTime, false); } else if (this._fadeOpacity == 255) { this.setSplashImage(); // 終了判定 if (!this._originalSplash.bitmap) { this.gotoNextScene(); return; } this.adjustSpriteImage(); this.startFadeIn(this._fadeTime, false); } } // ジングルME (v1.1.0) if (this._jingleMe) { if (this._jingleMe.timing === "after") { if (this._fadeOpacity == 0 && this._waitTime > 0) { this.playMeJingleEvery(this._jingleMe); } } else { this.playMeJingleEvery(this._jingleMe); } } // スキップ判定 if (skipEnabled) { if (Input.isTriggered("ok") || TouchInput.isTriggered()) { this._waitTime = 0; this.startFadeOut(1, false); } } // ウェイト判定 if (this._fadeOpacity == 0 && this._waitTime > 0) { this._waitTime--; } }; Scene_SplashScreen.prototype.setSplashImage = function () { const splashImage = splashImageLists[this._splashIndex]; this._originalSplash.bitmap = null; if (splashImage) { this._originalSplash.bitmap = ImageManager.loadSystem(splashImage.imageName); this._fadeTime = splashImage.fadeTime; this._waitTime = splashImage.waitTime; // インデックスを更新 this._splashIndex++; // ジングルME (v1.1.0) this._jingleMe = { name: splashImage.meName, volume: splashImage.meVolume, pitch: splashImage.mePitch, pan: splashImage.mePan, timing: splashImage.meTiming }; } }; Scene_SplashScreen.prototype.adjustSpriteImage = function () { this.centerSprite(this._originalSplash); }; Scene_SplashScreen.prototype.playMeJingle = function () { //if (!meName) return; var ary = [ "Vo_sir_8_000", "Vo_yoz_8_000", "Vo_rei_8_000", "Vo_kao_8_000", "Vo_kur_8_000", "Vo_chi_8_000", "Vo_mir_8_000", "Vo_aki_8_000", "Vo_nar_8_000", "Vo_kag_8_000" ]; var num = Math.floor(Math.random() * 10); AudioManager.playVoice({ name: `${ary[num]}1`, volume: meVolume, pitch: mePitch, pan: mePan }); }; Scene_SplashScreen.prototype.playMeJingleEvery = function (me) { if (!me.name) return; this._jingleMe = null; }; Scene_SplashScreen.prototype.gotoNextScene = function () { SceneManager.goto(Scene_Title); }; Scene_Title.prototype.start = function () { Scene_Base.prototype.start.call(this); SceneManager.clearStack(); this.adjustBackground(); this.playTitleMusic(); this.startFadeIn(this.fadeSpeed(), false); AudioManager.stopVoice(); var ary = [ "Vo_sir_8_000", "Vo_yoz_8_000", "Vo_rei_8_000", "Vo_kao_8_000", "Vo_kur_8_000", "Vo_chi_8_000", "Vo_mir_8_000", "Vo_aki_8_000", "Vo_nar_8_000", "Vo_kag_8_000" ]; var num = Math.floor(Math.random() * 10); AudioManager.playVoice({ name: `${ary[num]}2`, volume: meVolume, pitch: mePitch, pan: mePan }); }; })();