/*: * @target MZ * @plugindesc ムービー再生開始時にBGMボリュームを適用(Video.playをフック) v1.0.0 * @author yuz-co-show * * @command InstallBgmHook * @text BGM音量フックをインストール * @desc 以後、ムービー再生開始時に BGM 音量(AudioManager.bgmVolume)を適用。 * * @command UninstallBgmHook * @text BGM音量フックを解除 * @desc Video.play の上書きを解除して元に戻します。 * * @help * MZではムービーは静的クラス Video が扱います(Video.play / Video.setVolume)。 * このプラグインはプラグインコマンドで Video.play を一度だけ上書きし、 * 再生のたびに「開始時点の BGM 音量」を 0..1 に換算して Video.setVolume へ渡します。 * * 仕様: * - 反映は「開始時だけ」。再生中にBGM音量を変えても追従しません。 * - 参照: AudioManager.bgmVolume(0..100)。無ければ ConfigManager.volumeBgm を使用。 * - 他プラグインが後から Video.play を上書きした場合は、再度「インストール」を実行してください。 */ (() => { 'use strict'; const PLUGIN_NAME = document.currentScript.src.split('/').pop().replace(/\.js$/, ''); function getBgmVol01() { let v = 100; if (typeof AudioManager !== 'undefined' && typeof AudioManager.bgmVolume === 'number') { v = AudioManager.bgmVolume; } else if (typeof ConfigManager !== 'undefined' && typeof ConfigManager.volumeBgm === 'number') { v = ConfigManager.volumeBgm; } return Math.max(0, Math.min(1, v / 100)); } function install() { if (typeof Video === 'undefined' || typeof Video.play !== 'function' || typeof Video.setVolume !== 'function') { console.warn('MovieBgmVolumeMZ: Video API が未準備のためフックできませんでした。'); return false; } if (Video.__mbv_hooked) return true; Video.__mbv_originalPlay = Video.play.bind(Video); Video.play = function(src) { try { Video.setVolume(getBgmVol01()); } catch (_) {} return Video.__mbv_originalPlay(src); }; Video.__mbv_hooked = true; return true; } function uninstall() { if (typeof Video === 'undefined') return false; if (!Video.__mbv_hooked) return true; if (typeof Video.__mbv_originalPlay === 'function') { Video.play = Video.__mbv_originalPlay; } Video.__mbv_hooked = false; return true; } PluginManager.registerCommand(PLUGIN_NAME, 'InstallBgmHook', install); PluginManager.registerCommand(PLUGIN_NAME, 'UninstallBgmHook', uninstall); })();