Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Pause BGM

Can someone edit this script so it pauses the BGM as well?
Code:
#┌───────────────────────────────────────
#│
#│  TRCS.19
#│  "ポーズ画面" ver1.40 (2006.03.12 h22)
#│  by NO
#│  http://chobi.net/~no/
#│  
#└───────────────────────────────────────
# BGMがない場合にも対応
module TRCS19_STOPPING
  #--------------------------------------------------------------------------
  # ○ 設定項目
  #--------------------------------------------------------------------------

  # ポーズボタン (文字列指定)
  PAUSE_BUTTON = "X"
  
  # ポーズテキスト
  PAUSE_TEXT = "pause"
  
  # ポーズテキストカラー
  # → [R, G, B, alpha] で設定
  PAUSE_TEXT_COLOR = [255, 255, 255, 255]
  
  # ポーズ 開始SE
  PAUSE_START_SE = "002-System02"
  
  # ポーズ 終了SE
  PAUSE_END_SE = "003-System03"

  # ポーズ時の背景色
  # → [R, G, B, alpha] で設定 (通常時と比べた相対値)
  PAUSE_TONE = [-64, -64, -64, 0]
  
  # ポーズ時はプレイ時間を停止させる
  # → YES = true, NO = false
  STOP_TIME = false #allow/disallow freezing play time during pause
  
  # ポーズ中の音量低下率(%指定)
  VOL_DOWN_RATE = 50
  
  # ポーズ許可スイッチ名
  # → スイッチIDを指定することも可能
  PAUSE_SW_NAME = "ポーズ許可" #Set a switch name to allow/disallow pause
    
  # ポーズボタン定義
  PAUSE_BUTTON2 = eval("Input::#{PAUSE_BUTTON}")
  
  #--------------------------------------------------------------------------
  # ○ 画面停止
  #--------------------------------------------------------------------------
  def stopping
    # SE を演奏
    Audio.se_play("Audio/SE/" + PAUSE_START_SE) if !PAUSE_START_SE.empty?
    # BGMが演奏中の場合
    if $game_system.playing_bgm != nil and !$game_system.playing_bgm.name.empty?
      # 演奏中BGMの音量を退避
      dummy_vol = $game_system.playing_bgm.volume
      # 音量を下げて演奏
      new_vol = (dummy_vol * VOL_DOWN_RATE / 100).to_i
      Audio.bgm_play("Audio/BGM/" + $game_system.playing_bgm.name, new_vol)
    end
    # 現在の色調を退避
    dummy_tone = $game_screen.tone.clone
    
    # ビューポートの作成
    viewport1 = Viewport.new(0, 0, 640, 480)
    viewport1.z = 10000
    viewport1.tone = Tone.new(*PAUSE_TONE)
    # フィルター用スプライトの作成
    sprite1 = Sprite.new(viewport1)
    sprite1.tone = Tone.new(0, 0, 0, 0)
    sprite1.bitmap = Bitmap.new(640, 480)
    # 文字サイズ決定
    width = sprite1.bitmap.text_size(PAUSE_TEXT).width
    
    # ビューポートの作成
    viewport2 = Viewport.new((640 - width) / 2, (480 - 32) / 2, width, 32)
    viewport2.z = 10000
    # 文字用スプライトの作成
    sprite2 = Sprite.new(viewport2)
    sprite2.bitmap = Bitmap.new(width, 32)
    
    # 文字描画
    sprite2.bitmap.font = Font.new
    sprite2.bitmap.font.color = Color.new(*PAUSE_TEXT_COLOR)
    sprite2.bitmap.draw_text(0, 0, width, 32, PAUSE_TEXT)
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # ボタンが押された場合
      if Input.trigger?(PAUSE_BUTTON2)
        # SE を演奏
        Audio.se_play("Audio/SE/" + PAUSE_START_SE) if !PAUSE_START_SE.empty?
        # BGMが演奏中の場合
        if $game_system.playing_bgm != nil and !$game_system.playing_bgm.name.empty?
          # 音量を戻して演奏
          Audio.bgm_play("Audio/BGM/" + $game_system.playing_bgm.name, dummy_vol)
        end
        # ループ脱出
        break
      end
    end
    
    # 色調を元に戻す
    sprite1.viewport.tone = dummy_tone
    # 解放
    sprite1.dispose
    sprite2.dispose
    sprite1 = nil
    sprite2 = nil
  end
  #--------------------------------------------------------------------------
  # ○ 画面停止が可能か
  #--------------------------------------------------------------------------
  def can_stop?
    if PAUSE_SW_NAME.is_a?(Numeric)
      return ($game_switches[PAUSE_SW_NAME] rescue true)
    else
      return ($game_switches[$data_system.switches.index(PAUSE_SW_NAME)] rescue true)
    end
  end
end
#==============================================================================
# â–  Scene_Map
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # ○ インクルード
  #--------------------------------------------------------------------------
  include TRCS19_STOPPING
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  alias trcs19_update update
  def update
    # ボタンが押された場合
    if Input.trigger?(PAUSE_BUTTON2) and can_stop?
      # フレームカウントを退避
      tmp = Graphics.frame_count
      # 画面停止
      stopping
      # ポーズ中はプレイ時間を進めない場合
      if STOP_TIME
        # フレームカウントを修正
        Graphics.frame_count = tmp
      end
    end
    # 呼び戻す
    trcs19_update
  end
end
#==============================================================================
# â–  Scene_Battle
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ○ インクルード
  #--------------------------------------------------------------------------
  include TRCS19_STOPPING
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  alias trcs19_update update
  def update
    # ボタンが押された場合
    if Input.trigger?(PAUSE_BUTTON2) and can_stop?
      # フレームカウントを退避
      tmp = Graphics.frame_count
      # 画面停止
      stopping
      # ポーズ中はプレイ時間を進めない場合
      if STOP_TIME
        # フレームカウントを修正
        Graphics.frame_count = tmp
      end
    end
    # 呼び戻す
    trcs19_update
  end
end

Changing the volume to 0 doesn't work.
 
I tried it and when the Pause Button is pushed the BGM does stop.\

Edit: Ah I hear it now.

Replace wht you have with this:
Code:
#┌───────────────────────────────────────
#│
#│  TRCS.19
#│  "ポーズ画面" ver1.40 (2006.03.12 h22)
#│  by NO
#│  http://chobi.net/~no/
#│  
#└───────────────────────────────────────
# BGMがない場合にも対応
module TRCS19_STOPPING
  #--------------------------------------------------------------------------
  # ○ 設定項目
  #--------------------------------------------------------------------------

  # ポーズボタン (文字列指定)
  PAUSE_BUTTON = "X"
  
  # ポーズテキスト
  PAUSE_TEXT = "pause"
  
  # ポーズテキストカラー
  # → [R, G, B, alpha] で設定
  PAUSE_TEXT_COLOR = [255, 255, 255, 255]
  
  # ポーズ 開始SE
  PAUSE_START_SE = "002-System02"
  
  # ポーズ 終了SE
  PAUSE_END_SE = "003-System03"

  # ポーズ時の背景色
  # → [R, G, B, alpha] で設定 (通常時と比べた相対値)
  PAUSE_TONE = [-64, -64, -64, 0]
  
  # ポーズ時はプレイ時間を停止させる
  # → YES = true, NO = false
  STOP_TIME = false #allow/disallow freezing play time during pause
  
  # ポーズ中の音量低下率(%指定)
  VOL_DOWN_RATE = 0
  
  # ポーズ許可スイッチ名
  # → スイッチIDを指定することも可能
  PAUSE_SW_NAME = "ポーズ許可" #Set a switch name to allow/disallow pause
    
  # ポーズボタン定義
  PAUSE_BUTTON2 = eval("Input::#{PAUSE_BUTTON}")
  
  #--------------------------------------------------------------------------
  # ○ 画面停止
  #--------------------------------------------------------------------------
  def stopping
    # SE を演奏
    Audio.se_play("Audio/SE/" + PAUSE_START_SE) if !PAUSE_START_SE.empty?
    # BGMが演奏中の場合
    if $game_system.playing_bgm != nil and !$game_system.playing_bgm.name.empty?
      # 演奏中BGMの音量を退避
      dummy_vol = $game_system.playing_bgm.volume
      # 音量を下げて演奏
      new_vol = (dummy_vol * VOL_DOWN_RATE / 100).to_i
      Audio.bgm_play("Audio/BGM/" + $game_system.playing_bgm.name, new_vol)
    end
    # 現在の色調を退避
    dummy_tone = $game_screen.tone.clone
    
    # ビューポートの作成
    viewport1 = Viewport.new(0, 0, 640, 480)
    viewport1.z = 10000
    viewport1.tone = Tone.new(*PAUSE_TONE)
    # フィルター用スプライトの作成
    sprite1 = Sprite.new(viewport1)
    sprite1.tone = Tone.new(0, 0, 0, 0)
    sprite1.bitmap = Bitmap.new(640, 480)
    # 文字サイズ決定
    width = sprite1.bitmap.text_size(PAUSE_TEXT).width
    
    # ビューポートの作成
    viewport2 = Viewport.new((640 - width) / 2, (480 - 32) / 2, width, 32)
    viewport2.z = 10000
    # 文字用スプライトの作成
    sprite2 = Sprite.new(viewport2)
    sprite2.bitmap = Bitmap.new(width, 32)
    
    # 文字描画
    sprite2.bitmap.font = Font.new
    sprite2.bitmap.font.color = Color.new(*PAUSE_TEXT_COLOR)
    sprite2.bitmap.draw_text(0, 0, width, 32, PAUSE_TEXT)
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # ボタンが押された場合
      if Input.trigger?(PAUSE_BUTTON2)
        # SE を演奏
        Audio.se_play("Audio/SE/" + PAUSE_START_SE) if !PAUSE_START_SE.empty?
        # BGMが演奏中の場合
        if $game_system.playing_bgm != nil and !$game_system.playing_bgm.name.empty?
          # 音量を戻して演奏
          Audio.bgm_play("Audio/BGM/" + $game_system.playing_bgm.name, dummy_vol)
        end
        # ループ脱出
        break
      end
    end
    
    # 色調を元に戻す
    sprite1.viewport.tone = dummy_tone
    # 解放
    sprite1.dispose
    sprite2.dispose
    sprite1 = nil
    sprite2 = nil
  end
  #--------------------------------------------------------------------------
  # ○ 画面停止が可能か
  #--------------------------------------------------------------------------
  def can_stop?
    if PAUSE_SW_NAME.is_a?(Numeric)
      return ($game_switches[PAUSE_SW_NAME] rescue true)
    else
      return ($game_switches[$data_system.switches.index(PAUSE_SW_NAME)] rescue true)
    end
  end
end
#==============================================================================
# â–  Scene_Map
#==============================================================================

class Scene_Map
  #--------------------------------------------------------------------------
  # ○ インクルード
  #--------------------------------------------------------------------------
  include TRCS19_STOPPING
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  alias trcs19_update update
  def update
    # ボタンが押された場合
    if Input.trigger?(PAUSE_BUTTON2) and can_stop?
      # フレームカウントを退避
      tmp = Graphics.frame_count
      # 画面停止
      stopping
      # ポーズ中はプレイ時間を進めない場合
      if STOP_TIME
        # フレームカウントを修正
        Graphics.frame_count = tmp
      end
    end
    # 呼び戻す
    trcs19_update
  end
end
#==============================================================================
# â–  Scene_Battle
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ○ インクルード
  #--------------------------------------------------------------------------
  include TRCS19_STOPPING
  #--------------------------------------------------------------------------
  # ○ フレーム更新
  #--------------------------------------------------------------------------
  alias trcs19_update update
  def update
    # ボタンが押された場合
    if Input.trigger?(PAUSE_BUTTON2) and can_stop?
      # フレームカウントを退避
      tmp = Graphics.frame_count
      # 画面停止
      stopping
      # ポーズ中はプレイ時間を進めない場合
      if STOP_TIME
        # フレームカウントを修正
        Graphics.frame_count = tmp
      end
    end
    # 呼び戻す
    trcs19_update
  end
end
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top