Skip to content

Instantly share code, notes, and snippets.

@rutan
Created September 21, 2013 14:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rutan/6650976 to your computer and use it in GitHub Desktop.
Save rutan/6650976 to your computer and use it in GitHub Desktop.
音量変更スクリプトさん for RGSS2(超暫定パック) ※2013/9/21時点でのRGSS3版を移植。あんまりテストしてません。再定義の嵐。。。  ところどころVXAなのはご察し。
# 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