Created
September 21, 2013 14:07
-
-
Save rutan/6650976 to your computer and use it in GitHub Desktop.
音量変更スクリプトさん for RGSS2(超暫定パック)
※2013/9/21時点でのRGSS3版を移植。あんまりテストしてません。再定義の嵐。。。
ところどころVXAなのはご察し。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# coding: utf-8 | |
#=============================================================================== | |
# ■ 音量変更スクリプトさん for RGSS2(超暫定パック) | |
#------------------------------------------------------------------------------- | |
# 2013/09/21 Ru/むっくRu | |
#------------------------------------------------------------------------------- | |
# 【注意】 | |
# RGSS3用の音量変更スクリプトをRGSS2で動くようにごにょごにょしたものです。 | |
# 基本的に動作については一切の保証をしません。 | |
#------------------------------------------------------------------------------- | |
# 全体の音量変更に関する機能を追加します | |
# | |
# ● タイトル画面,メニュー画面に音量調整の項目が追加されます | |
# | |
# ● Audioモジュールに以下のメソッドが追加されます | |
# Audio.bgm_vol …… BGMのマスターボリューム取得 | |
# Audio.bgs_vol …… BGSのマスターボリューム取得 | |
# Audio.se_vol …… SEのマスターボリューム取得 | |
# Audio.me_vol …… MEのマスターボリューム取得 | |
# Audio.bgm_vol=数値 …… BGMのマスターボリューム設定(0~100) | |
# Audio.bgs_vol=数値 …… BGSのマスターボリューム設定(0~100) | |
# Audio.se_vol=数値 …… SEのマスターボリューム設定(0~100) | |
# Audio.me_vol=数値 …… MEのマスターボリューム設定(0~100) | |
# | |
#------------------------------------------------------------------------------- | |
# 【更新履歴】 | |
# 2013/09/21 RGSS3版をもとに移植 | |
#------------------------------------------------------------------------------- | |
#=============================================================================== | |
# ● 設定項目 | |
#=============================================================================== | |
module HZM_VXA | |
module AudioVol | |
# ● タイトル画面に音量調整を表示するか? | |
# ※タイトル画面のメニュー項目を再定義するため, | |
# 他にタイトルのメニューをいじるスクリプトを導入する場合は | |
# 競合する可能性があります. | |
# true …… 表示する | |
# false …… 表示しない | |
TITLE_FLAG = true | |
# タイトル画面に表示する項目名 | |
TITLE_NAME = "音量設定" | |
# ● メニュー画面に音量調整を表示するか? | |
# true …… 表示する | |
# false …… 表示しない | |
MENU_FLAG = true | |
# メニュー画面に表示する項目名 | |
MENU_NAME = "音量設定" | |
# ● 音量変更項目のタイプ | |
# 0 …… BGM/BGS/SE/MEすべて一括で設定 | |
# 1 …… BGM+BGS と SE+ME の2種類で設定 | |
# 2 …… BGM/BGS/SE/ME の4種類それぞれで設定 | |
TYPE = 2 | |
# ● 音量設定画面の項目名 | |
CONFIG_ALL_NAME = "音量" # タイプ「0」を選択時に使用されます | |
CONFIG_BGM_NAME = "BGM" # タイプ「1」「2」を選択時に使用されます | |
CONFIG_BGS_NAME = "BGS" # タイプ「2」を選択時に使用されます | |
CONFIG_SE_NAME = "SE" # タイプ「1」「2」を選択時に使用されます | |
CONFIG_ME_NAME = "ME" # タイプ「2」を選択時に使用されます | |
CONFIG_EXIT_NAME = "決定" | |
# ● 音量変更の変動量 | |
ADD_VOL_NORMAL = 5 # 左右キーの変動量 | |
ADD_VOL_HIGH = 25 # LRキーの変動量 | |
# ● 音量設定画面のウィンドウ幅 | |
WINDOW_WIDTH = 200 | |
# ● 音量変更画面の音量ゲージの色 | |
COLOR1 = Color.new(255, 255, 255) | |
COLOR2 = Color.new( 64, 64, 255) | |
# ● 音量設定を保存する | |
# Game.ini内に音量情報を保存することで | |
# 次回起動時にも音量を反映できるようになります | |
# true …… 保存する | |
# false …… 保存しない | |
USE_INI = true | |
end | |
end | |
#=============================================================================== | |
# ↑ ここまで設定 ↑ | |
# ↓ 以下、スクリプト部 ↓ | |
#=============================================================================== | |
module Audio | |
#----------------------------------------------------------------------------- | |
# ● 音量設定:BGM(独自) | |
#----------------------------------------------------------------------------- | |
def self.bgm_vol=(vol) | |
@hzm_vxa_audioVol_bgm = self.vol_range(vol) | |
end | |
#----------------------------------------------------------------------------- | |
# ● 音量設定:BGS(独自) | |
#----------------------------------------------------------------------------- | |
def self.bgs_vol=(vol) | |
@hzm_vxa_audioVol_bgs = self.vol_range(vol) | |
end | |
#----------------------------------------------------------------------------- | |
# ● 音量設定:SE(独自) | |
#----------------------------------------------------------------------------- | |
def self.se_vol=(vol) | |
@hzm_vxa_audioVol_se = self.vol_range(vol) | |
end | |
#----------------------------------------------------------------------------- | |
# ● 音量設定:ME(独自) | |
#----------------------------------------------------------------------------- | |
def self.me_vol=(vol) | |
@hzm_vxa_audioVol_me = self.vol_range(vol) | |
end | |
#----------------------------------------------------------------------------- | |
# ● 音量範囲指定 | |
#----------------------------------------------------------------------------- | |
def self.vol_range(vol) | |
vol = vol.to_i | |
vol < 0 ? 0 : vol < 100 ? vol : 100 | |
end | |
#----------------------------------------------------------------------------- | |
# ● 音量取得:BGM(独自) | |
#----------------------------------------------------------------------------- | |
def self.bgm_vol | |
@hzm_vxa_audioVol_bgm ||= 100 | |
end | |
#----------------------------------------------------------------------------- | |
# ● 音量取得:BGS(独自) | |
#----------------------------------------------------------------------------- | |
def self.bgs_vol | |
@hzm_vxa_audioVol_bgs ||= 100 | |
end | |
#----------------------------------------------------------------------------- | |
# ● 音量取得:SE(独自) | |
#----------------------------------------------------------------------------- | |
def self.se_vol | |
@hzm_vxa_audioVol_se ||= 100 | |
end | |
#----------------------------------------------------------------------------- | |
# ● 音量取得:ME(独自) | |
#----------------------------------------------------------------------------- | |
def self.me_vol | |
@hzm_vxa_audioVol_me ||= 100 | |
end | |
end | |
unless $! # F12リセット時は実行しない | |
class << Audio | |
#----------------------------------------------------------------------------- | |
# ● 再生:BGM(エイリアス) | |
#----------------------------------------------------------------------------- | |
alias hzm_vxa_audioVol_bgm_play bgm_play | |
def bgm_play(filename, volume = 100, pitch = 100) | |
hzm_vxa_audioVol_bgm_play(filename, self.bgm_vol * volume / 100, pitch) | |
end | |
#----------------------------------------------------------------------------- | |
# ● 再生:BGS(エイリアス) | |
#----------------------------------------------------------------------------- | |
alias hzm_vxa_audioVol_bgs_play bgs_play | |
def bgs_play(filename, volume = 100, pitch = 100) | |
hzm_vxa_audioVol_bgs_play(filename, self.bgs_vol * volume / 100, pitch) | |
end | |
#----------------------------------------------------------------------------- | |
# ● 再生:SE(エイリアス) | |
#----------------------------------------------------------------------------- | |
alias hzm_vxa_audioVol_se_play se_play | |
def se_play(filename, volume = 100, pitch = 100) | |
hzm_vxa_audioVol_se_play(filename, self.se_vol * volume / 100, pitch) | |
end | |
#----------------------------------------------------------------------------- | |
# ● 再生:ME(エイリアス) | |
#----------------------------------------------------------------------------- | |
alias hzm_vxa_audioVol_me_play me_play | |
def me_play(filename, volume = 100, pitch = 100) | |
hzm_vxa_audioVol_me_play(filename, self.me_vol * volume / 100, pitch) | |
end | |
end | |
end | |
# タイトル画面に追加 | |
if HZM_VXA::AudioVol::TITLE_FLAG | |
class Scene_Title < Scene_Base | |
#-------------------------------------------------------------------------- | |
# ● フレーム更新(再定義) | |
#-------------------------------------------------------------------------- | |
def update | |
super | |
@command_window.update | |
if Input.trigger?(Input::C) | |
case @command_window.index | |
when 0 # ニューゲーム | |
command_new_game | |
when 1 # コンティニュー | |
command_continue | |
when 2 # 音量設定 | |
hzm_vx_command_vol | |
when 3 # シャットダウン | |
command_shutdown | |
end | |
end | |
end | |
#-------------------------------------------------------------------------- | |
# ● コマンドウィンドウの作成(再定義) | |
#-------------------------------------------------------------------------- | |
def create_command_window | |
s1 = Vocab::new_game | |
s2 = Vocab::continue | |
s3 = HZM_VXA::AudioVol::TITLE_NAME | |
s4 = Vocab::shutdown | |
@command_window = Window_Command.new(172, [s1, s2, s3, s4]) | |
@command_window.x = (Graphics.width - @command_window.width) / 2 | |
@command_window.y = Graphics.height - @command_window.height - 32 | |
if @continue_enabled # コンティニューが有効な場合 | |
@command_window.index = 1 # カーソルを合わせる | |
else # 無効な場合 | |
@command_window.draw_item(1, false) # コマンドを半透明表示にする | |
end | |
@command_window.openness = 0 | |
@command_window.open | |
end | |
#-------------------------------------------------------------------------- | |
# ● コマンド:音量設定 | |
#-------------------------------------------------------------------------- | |
def hzm_vx_command_vol | |
Sound.play_decision | |
$scene = HZM_VXA::AudioVol::Scene_VolConfig.new(:title) | |
end | |
end | |
end | |
# メニューに追加 | |
if HZM_VXA::AudioVol::MENU_FLAG | |
class Scene_Menu < Scene_Base | |
#-------------------------------------------------------------------------- | |
# ● コマンドウィンドウの作成(再定義) | |
#-------------------------------------------------------------------------- | |
def create_command_window | |
s1 = Vocab::item | |
s2 = Vocab::skill | |
s3 = Vocab::equip | |
s4 = Vocab::status | |
s5 = Vocab::save | |
s6 = HZM_VXA::AudioVol::MENU_NAME | |
s7 = Vocab::game_end | |
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7]) | |
@command_window.index = @menu_index | |
if $game_party.members.size == 0 # パーティ人数が 0 人の場合 | |
@command_window.draw_item(0, false) # アイテムを無効化 | |
@command_window.draw_item(1, false) # スキルを無効化 | |
@command_window.draw_item(2, false) # 装備を無効化 | |
@command_window.draw_item(3, false) # ステータスを無効化 | |
end | |
if $game_system.save_disabled # セーブ禁止の場合 | |
@command_window.draw_item(4, false) # セーブを無効化 | |
end | |
end | |
#-------------------------------------------------------------------------- | |
# ● コマンド選択の更新(再定義) | |
#-------------------------------------------------------------------------- | |
def update_command_selection | |
if Input.trigger?(Input::B) | |
Sound.play_cancel | |
$scene = Scene_Map.new | |
elsif Input.trigger?(Input::C) | |
if $game_party.members.size == 0 and @command_window.index < 4 | |
Sound.play_buzzer | |
return | |
elsif $game_system.save_disabled and @command_window.index == 4 | |
Sound.play_buzzer | |
return | |
end | |
Sound.play_decision | |
case @command_window.index | |
when 0 # アイテム | |
$scene = Scene_Item.new | |
when 1,2,3 # スキル、装備、ステータス | |
start_actor_selection | |
when 4 # セーブ | |
$scene = Scene_File.new(true, false, false) | |
when 5 # 音量変更 | |
$scene = HZM_VXA::AudioVol::Scene_VolConfig.new(:menu) | |
when 6 # ゲーム終了 | |
$scene = Scene_End.new | |
end | |
end | |
end | |
end | |
end | |
# 音量変更ウィンドウ | |
module HZM_VXA | |
module AudioVol | |
class Window_VolConfig < Window_Command | |
#------------------------------------------------------------------------- | |
# ● 生成 | |
#------------------------------------------------------------------------- | |
def initialize | |
super(window_width, make_command_list) | |
self.x = (Graphics.width - self.width ) / 2 | |
self.y = (Graphics.height - self.height) / 2 | |
end | |
#------------------------------------------------------------------------- | |
# ● ウィンドウ幅の取得 | |
#------------------------------------------------------------------------- | |
def window_width | |
HZM_VXA::AudioVol::WINDOW_WIDTH | |
end | |
#-------------------------------------------------------------------------- | |
# ● アライメントの取得 | |
#-------------------------------------------------------------------------- | |
def alignment | |
case @mode | |
when 0; return 1 if @alignment_index == 1 | |
when 1; return 1 if @alignment_index == 2 | |
when 2; return 1 if @alignment_index == 4 | |
end | |
0 | |
end | |
#------------------------------------------------------------------------- | |
# ● コマンド生成 | |
#------------------------------------------------------------------------- | |
def make_command_list | |
case HZM_VXA::AudioVol::TYPE | |
when 0 | |
@mode = 0 | |
[ | |
HZM_VXA::AudioVol::CONFIG_ALL_NAME, | |
HZM_VXA::AudioVol::CONFIG_EXIT_NAME, | |
] | |
when 1 | |
@mode = 1 | |
[ | |
HZM_VXA::AudioVol::CONFIG_BGM_NAME, | |
HZM_VXA::AudioVol::CONFIG_SE_NAME, | |
HZM_VXA::AudioVol::CONFIG_EXIT_NAME, | |
] | |
else | |
@mode = 2 | |
[ | |
HZM_VXA::AudioVol::CONFIG_BGM_NAME, | |
HZM_VXA::AudioVol::CONFIG_BGS_NAME, | |
HZM_VXA::AudioVol::CONFIG_SE_NAME, | |
HZM_VXA::AudioVol::CONFIG_ME_NAME, | |
HZM_VXA::AudioVol::CONFIG_EXIT_NAME, | |
] | |
end | |
end | |
#------------------------------------------------------------------------- | |
# ● 項目の描画(再定義) | |
#------------------------------------------------------------------------- | |
def draw_item(index) | |
@alignment_index = index | |
rect = item_rect(index) | |
rect.x += 4 | |
rect.width -= 8 | |
self.contents.clear_rect(rect) | |
self.contents.font.color = normal_color | |
self.contents.draw_text(rect, @commands[index], alignment) | |
# 決定ボタンの場合は終わり | |
return if (@mode == 0 and index >= 1) or (@mode == 1 and index >= 2) or (@mode == 2 and index >= 4) | |
# 音量の場合はゲージと数値を描画 | |
vol = 0 | |
case index | |
when 0; vol = Audio.bgm_vol | |
when 1; vol = @mode == 1 ? Audio.se_vol : Audio.bgs_vol | |
when 2; vol = Audio.se_vol | |
when 3; vol = Audio.me_vol | |
end | |
draw_gauge(rect.x + 96, rect.y, rect.width - 96, vol/100.0, HZM_VXA::AudioVol::COLOR1, HZM_VXA::AudioVol::COLOR2) | |
self.contents.draw_text(rect, vol, 2) | |
end | |
alias redraw_item draw_item | |
#-------------------------------------------------------------------------- | |
# ● ゲージの描画 | |
#-------------------------------------------------------------------------- | |
def draw_gauge(x, y, width, rate, color1, color2) | |
y = y + WLH - 8 | |
self.contents.fill_rect(x, y, width, 6, gauge_back_color) | |
self.contents.gradient_fill_rect(x, y, width * rate, 6, color1, color2) | |
end | |
#------------------------------------------------------------------------- | |
# ● 音量増加 | |
#------------------------------------------------------------------------- | |
def vol_add(index, val) | |
call_flag = false | |
case @mode | |
when 0 | |
call_flag = add_vol_bgm(val) | |
Audio.bgs_vol = Audio.bgm_vol | |
Audio.se_vol = Audio.bgm_vol | |
Audio.me_vol = Audio.bgm_vol | |
when 1 | |
case index | |
when 0 | |
call_flag = add_vol_bgm(val) | |
Audio.bgs_vol = Audio.bgm_vol | |
when 1 | |
call_flag = add_vol_se(val) | |
Audio.me_vol = Audio.se_vol | |
end | |
when 2 | |
case index | |
when 0 | |
call_flag = add_vol_bgm(val) | |
when 1 | |
call_flag = add_vol_bgs(val) | |
when 2 | |
call_flag = add_vol_se(val) | |
when 3 | |
call_flag = add_vol_me(val) | |
end | |
end | |
if call_flag | |
Sound.play_cursor | |
redraw_item(index) | |
end | |
end | |
def add_vol_bgm(val) | |
old = Audio.bgm_vol | |
Audio.bgm_vol += val | |
if music = RPG::BGM.last and music.name.size > 0 | |
Audio.bgm_play("Audio/BGM/#{music.name}", music.volume, music.pitch) | |
end | |
Audio.bgm_vol != old | |
end | |
def add_vol_bgs(val) | |
old = Audio.bgs_vol | |
Audio.bgs_vol += val | |
Audio.bgs_vol != old | |
end | |
def add_vol_se(val) | |
old = Audio.se_vol | |
Audio.se_vol += val | |
Audio.se_vol != old | |
end | |
def add_vol_me(val) | |
old = Audio.me_vol | |
Audio.me_vol += val | |
Audio.me_vol != old | |
end | |
#-------------------------------------------------------------------------- | |
# ● 決定ボタンが選択中かどうか? | |
#-------------------------------------------------------------------------- | |
def selected_submit? | |
case @mode | |
when 0; return false unless index == 1 | |
when 1; return false unless index == 2 | |
when 2; return false unless index == 4 | |
end | |
true | |
end | |
#------------------------------------------------------------------------- | |
# ● キー操作 | |
#------------------------------------------------------------------------- | |
def cursor_left(wrap = false) | |
vol_add(@index, -HZM_VXA::AudioVol::ADD_VOL_NORMAL) | |
end | |
def cursor_right(wrap = false) | |
vol_add(@index, HZM_VXA::AudioVol::ADD_VOL_NORMAL) | |
end | |
def cursor_pageup | |
vol_add(@index, -HZM_VXA::AudioVol::ADD_VOL_HIGH) | |
end | |
def cursor_pagedown | |
vol_add(@index, HZM_VXA::AudioVol::ADD_VOL_HIGH) | |
end | |
end | |
class Scene_MenuBase < Scene_Base | |
def start | |
super | |
create_menu_background | |
end | |
def create_help_window | |
@help_window = Window_Help.new | |
@help_window.viewport = @viewport | |
end | |
end | |
class Scene_VolConfig < Scene_MenuBase | |
#-------------------------------------------------------------------------- | |
# ● オブジェクト初期化 | |
#-------------------------------------------------------------------------- | |
def initialize(from = :event) | |
@from = from | |
end | |
#-------------------------------------------------------------------------- | |
# ● タイトル画面から開いたか? | |
#-------------------------------------------------------------------------- | |
def from_title? | |
@from == :title | |
end | |
#-------------------------------------------------------------------------- | |
# ● メニュー画面から開いたか? | |
#-------------------------------------------------------------------------- | |
def from_menu? | |
@from == :menu | |
end | |
#------------------------------------------------------------------------- | |
# ● 開始処理 | |
#------------------------------------------------------------------------- | |
def start | |
super | |
create_help_window | |
@command_window = Window_VolConfig.new | |
@command_window.active = true | |
@help_window.set_text("音量の調整ができます(←音量を下げる/音量を上げる→)") | |
end | |
#------------------------------------------------------------------------- | |
# ● 終了処理 | |
#------------------------------------------------------------------------- | |
def terminate | |
super | |
dispose_menu_background | |
@help_window.dispose | |
@command_window.dispose | |
if HZM_VXA::AudioVol::USE_INI | |
HZM_VXA::Ini.save('AudioVol', 'BGM', Audio.bgm_vol) | |
HZM_VXA::Ini.save('AudioVol', 'BGS', Audio.bgs_vol) | |
HZM_VXA::Ini.save('AudioVol', 'SE', Audio.se_vol) | |
HZM_VXA::Ini.save('AudioVol', 'ME', Audio.me_vol) | |
end | |
end | |
#------------------------------------------------------------------------- | |
# ● 更新処理 | |
#------------------------------------------------------------------------- | |
def update | |
super | |
@command_window.update | |
if Input.trigger?(Input::C) and @command_window.selected_submit? | |
Sound.play_decision | |
return_scene | |
elsif Input.trigger?(Input::B) | |
Sound.play_cancel | |
@command_window.index = @command_window.commands.size - 1 | |
end | |
end | |
#-------------------------------------------------------------------------- | |
# ● 元の画面へ戻る | |
#-------------------------------------------------------------------------- | |
def return_scene | |
if from_title? | |
$scene = Scene_Title.new | |
elsif from_menu? | |
$scene = Scene_Menu.new(5) | |
else | |
$scene = Scene_Map.new | |
end | |
end | |
end | |
end | |
end | |
if HZM_VXA::AudioVol::USE_INI | |
module HZM_VXA | |
module Base | |
GetPrivateProfileInt = Win32API.new('kernel32', 'GetPrivateProfileInt', %w(p p i p), 'i') | |
WritePrivateProfileString = Win32API.new('kernel32', 'WritePrivateProfileString', %w(p p p p), 'i') | |
end | |
class Ini | |
INI_FILENAME = './Game.ini' | |
def self.load(section, key) | |
HZM_VXA::Base::GetPrivateProfileInt.call(section, key, 100, INI_FILENAME).to_i | |
end | |
def self.save(section, key, value) | |
HZM_VXA::Base::WritePrivateProfileString.call(section, key, value.to_i.to_s, INI_FILENAME) != 0 | |
end | |
end | |
end | |
# 音量初期値読込 | |
Audio.bgm_vol = (HZM_VXA::Ini.load('AudioVol', 'BGM') or 100) | |
Audio.bgs_vol = (HZM_VXA::Ini.load('AudioVol', 'BGS') or 100) | |
Audio.se_vol = (HZM_VXA::Ini.load('AudioVol', 'SE') or 100) | |
Audio.me_vol = (HZM_VXA::Ini.load('AudioVol', 'ME') or 100) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment