Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==============================================================================
- # ** Lemony's Sound Emitting Events
- #------------------------------------------------------------------------------
- # * This little script allows to make certain events play music/sounds based
- # on player proximity.
- # * It is currently limited by one bgs at a time, resulting in lag if one
- # sound emitting event's area is overlapping other's sound emitting event area.
- #------------------------------------------------------------------------------
- # To use it, simple make a comment inside the target event with the following
- # LSEE TYPE RANGE PITCH VOLUME FILENAME => LSEE BGS 8 100 100 Fire
- # If type is SE or ME, you need two additional variables
- # LSEE TYPE RANGE PITCH VOLUME FILENAME
- #
- #
- # SCRIPT CALL:
- # Mute event custom sound,
- # allow_custom_sound(event_id, value)
- # > event_id => 0 for current event or another ID
- # > value => true or false
- #
- # Ex:
- # allow_custom_sound(0, false) # Mute current event's custom sound
- #
- #==============================================================================
- #==============================================================================
- # ** Game_System
- #==============================================================================
- class Game_System
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :event_sound_stopped
- attr_reader :event_sound_stopped
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- alias kadafi_initialize_1 initialize
- def initialize
- kadafi_initialize_1
- @event_sound_stopped = false
- @saved_bgs = nil
- end
- end
- #==============================================================================
- # ** Game_Event
- #==============================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # * Initialize Private Member Variables
- #--------------------------------------------------------------------------
- alias old_init_private_members_1 init_private_members
- def init_private_members
- old_init_private_members_1
- @custom_sound = false
- @near_player = false
- @saved_bgs_pos = nil
- @custom_sound_allowed = true
- @stop_custom_sound = false
- end
- #--------------------------------------------------------------------------
- # * Set Custom Sound
- #--------------------------------------------------------------------------
- def allow_custom_sound(value)
- @custom_sound_allowed = value
- @stop_custom_sound = false if value
- end
- #--------------------------------------------------------------------------
- # * Save BGS
- #--------------------------------------------------------------------------
- def save_bgs_pos
- @saved_bgs_pos = RPG::BGS.last.pos
- end
- #--------------------------------------------------------------------------
- # * Refresh Alias
- #--------------------------------------------------------------------------
- alias lemony_see_refresh refresh
- #--------------------------------------------------------------------------
- # * Refresh
- #--------------------------------------------------------------------------
- def refresh
- lemony_see_refresh
- return if (@page.nil? || @page.list.nil?)
- @page.list.each {|p| b = p.parameters[0]
- s, @lsee_out = (b != nil && b.is_a?(String)) ? b.split : '', false
- if (p.code == 108 || p.code == 408) && b.include?('LSEE')
- # 0:TYPE 1:RANGE 2:PITCH 3:VOLUME 4:FILENAME 5:DELAY 6:RANDOM
- @lsee_data = [s[1], s[2].to_i, s[3].to_i, s[4].to_i, s[5], s[6].to_i, s[7].to_i]
- break if @lsee_data != nil
- else @lsee_out = true end}
- end
- #--------------------------------------------------------------------------
- # * Determine if Near Player for this script
- #--------------------------------------------------------------------------
- def near_player?
- if @lsee_data
- sx = distance_x_from($game_player.real_x).abs
- sy = distance_y_from($game_player.real_y).abs
- return sx + sy < @lsee_data[1]
- else
- return false
- end
- end
- #--------------------------------------------------------------------------
- # * Update Alias
- #--------------------------------------------------------------------------
- alias lemony_see_update update
- #--------------------------------------------------------------------------
- # * Update
- #--------------------------------------------------------------------------
- def update
- lemony_see_update
- if @custom_sound_allowed == false
- if @lsee_data[0] == 'BGS'
- RPG::BGS.fade(@lsee_data[3] * 100)
- save_bgs_pos
- elsif @lsee_data[0] == 'ME'
- RPG::ME.fade(@lsee_data[3] * 100)
- elsif @lsee_data[0] == 'SE'
- Audio.se_stop
- end
- @stop_custom_sound = true
- $game_system.event_sound_stopped = true
- @custom_sound = false
- @near_player = false
- end
- if @lsee_data && @stop_custom_sound == false
- if near_player? && !@custom_sound
- vol = @lsee_data[3]
- if $game_options
- volume = vol * $game_options.master_volume
- volume *= $game_options.bgm_volume
- else
- volume = vol
- end
- pitch = @lsee_data[2]
- if @lsee_data[0] == 'BGS'
- Audio.bgs_play('Audio/BGS/' + @lsee_data[4], volume.to_i, pitch, 0)
- elsif @lsee_data[0] == 'ME'
- Audio.me_play('Audio/ME/' + @lsee_data[4], volume.to_i, pitch)
- elsif @lsee_data[0] == 'SE'
- Audio.se_play('Audio/SE/' + @lsee_data[4], volume.to_i, pitch)
- end
- @custom_sound = true
- @near_player = true
- elsif near_player? && @custom_sound && $game_system.event_sound_stopped
- vol = @lsee_data[3]
- if $game_options
- volume = vol * $game_options.master_volume
- volume *= $game_options.bgm_volume
- else
- volume = vol
- end
- pitch = @lsee_data[2]
- if @lsee_data[0] == 'BGS'
- pos = @saved_bgs_pos ? @saved_bgs_pos : 0
- Audio.bgs_play('Audio/BGS/' + @lsee_data[4], volume.to_i, pitch, pos)
- @saved_bgs_pos = nil
- elsif @lsee_data[0] == 'ME'
- Audio.me_play('Audio/ME/' + @lsee_data[4], volume.to_i, pitch)
- #~ elsif @lsee_data[0] == 'SE'
- #~ Audio.se_play('Audio/SE/' + @lsee_data[4], volume.to_i, pitch)
- end
- @custom_sound = true
- @near_player = true
- $game_system.event_sound_stopped = false
- end
- if (!near_player? && @near_player)
- if @lsee_data[0] == 'BGS'
- RPG::BGS.fade(@lsee_data[3] * 100)
- save_bgs_pos
- elsif @lsee_data[0] == 'ME'
- RPG::ME.fade(@lsee_data[3] * 100)
- elsif @lsee_data[0] == 'SE'
- Audio.se_stop
- end
- $game_system.event_sound_stopped = true
- @custom_sound = false
- @near_player = false
- end
- end
- #~ if !@lsee_data.nil?
- #~ xx, yy = (@real_x - $game_player.real_x), (@real_y - $game_player.real_y)
- #~ close = (Math.sqrt((xx * xx) + (yy * yy)) <= @lsee_data[1].to_i)
- #~ r, d = @lsee_data[1].to_i, Math.sqrt((xx * xx) + (yy * yy))
- #~ v, go, ms = (r - (d - 1 % r)) * @lsee_data[3].to_i / r, true, ['ME', 'SE']
- #~ if !@lsee_out
- #~ if ms.include?(@lsee_data[0])
- #~ @lsee_timer ||= @lsee_data[5] + rand(@lsee_data[6])
- #~ @lsee_timer = [@lsee_timer - 1, 0].max
- #~ go = @lsee_timer <= 0
- #~ @lsee_timer = nil if go
- #~ end
- #~ out = (!@lsee_data[7].nil? && (@lsee_data[7].volume > 0 && !close)) && go
- #~ f = "#{@lsee_data[0]}.new('#{@lsee_data[4]}', #{v}, #{@lsee_data[2]})"
- #~ @lsee_data[7] ||= eval("RPG::" + f) if close && go
- #~ @lsee_data[7].volume = v if !@lsee_data[7].nil? && close
- #~ @lsee_data[7].play if ((!@lsee_data[7].nil? && close) && go) || out
- #~ @lsee_data[7].volume -= 1 if !@lsee_data[7].nil? && !close
- #~ @lsee_data[7] = nil if (!@lsee_data[7].nil? && @lsee_data[7].volume <= 0)
- #~ elsif @lsee_out
- #~ @lsee_data[7].volume -= 1 if !@lsee_data[7].nil?
- #~ @lsee_data[7].play if !@lsee_data[7].nil? && !ms.include?(@lsee_data[0])
- #~ if (!@lsee_data[7].nil? && @lsee_data[7].volume <= 0)
- #~ @lsee_data, @lsee_out = nil, false
- #~ end
- #~ end
- #~ end
- end
- #--------------------------------------------------------------------------
- # ● Execute Enemy Defeaed Process
- #--------------------------------------------------------------------------
- def execute_enemy_defeated_process
- super
- allow_custom_sound(false)
- end
- end
- #==============================================================================
- # ** Game_Interpreter
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # * Set Custom Sound
- #--------------------------------------------------------------------------
- def allow_custom_sound(event_id, value)
- char = get_character(event_id)
- char.allow_custom_sound(value)
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement