Advertisement
Kakakadafi

[Overwrite] Emitting music monsters

Oct 23rd, 2017
238
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 9.42 KB | None | 0 0
  1. #==============================================================================
  2. # ** Lemony's Sound Emitting Events
  3. #------------------------------------------------------------------------------
  4. # * This little script allows to make certain events play music/sounds based
  5. # on player proximity.
  6. # * It is currently limited by one bgs at a time, resulting in lag if one
  7. # sound emitting event's area is overlapping other's sound emitting event area.
  8. #------------------------------------------------------------------------------
  9. # To use it, simple make a comment inside the target event with the following
  10. # LSEE TYPE RANGE PITCH VOLUME FILENAME => LSEE BGS 8 100 100 Fire
  11. # If type is SE or ME, you need two additional variables
  12. # LSEE TYPE RANGE PITCH VOLUME FILENAME
  13. #
  14. #
  15. # SCRIPT CALL:
  16. # Mute event custom sound,
  17. # allow_custom_sound(event_id, value)
  18. # > event_id => 0 for current event or another ID
  19. # > value => true or false
  20. #
  21. # Ex:
  22. # allow_custom_sound(0, false) # Mute current event's custom sound
  23. #
  24. #==============================================================================
  25. #==============================================================================
  26. # ** Game_System
  27. #==============================================================================
  28.  
  29. class Game_System
  30.   #--------------------------------------------------------------------------
  31.   # * Public Instance Variables
  32.   #--------------------------------------------------------------------------
  33.   attr_accessor :event_sound_stopped          
  34.   attr_reader   :event_sound_stopped              
  35.   #--------------------------------------------------------------------------
  36.   # * Object Initialization
  37.   #--------------------------------------------------------------------------
  38.   alias kadafi_initialize_1 initialize
  39.   def initialize
  40.     kadafi_initialize_1
  41.     @event_sound_stopped = false
  42.     @saved_bgs = nil
  43.   end
  44. end
  45.  
  46. #==============================================================================
  47. # ** Game_Event
  48. #==============================================================================
  49.  
  50. class Game_Event < Game_Character
  51.   #--------------------------------------------------------------------------
  52.   # * Initialize Private Member Variables
  53.   #--------------------------------------------------------------------------
  54.   alias old_init_private_members_1 init_private_members
  55.   def init_private_members
  56.     old_init_private_members_1
  57.     @custom_sound = false
  58.     @near_player = false
  59.     @saved_bgs_pos = nil
  60.     @custom_sound_allowed = true
  61.     @stop_custom_sound = false
  62.   end
  63.   #--------------------------------------------------------------------------
  64.   # * Set Custom Sound
  65.   #--------------------------------------------------------------------------
  66.   def allow_custom_sound(value)
  67.     @custom_sound_allowed = value
  68.     @stop_custom_sound = false if value
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # * Save BGS
  72.   #--------------------------------------------------------------------------
  73.   def save_bgs_pos
  74.     @saved_bgs_pos = RPG::BGS.last.pos
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # * Refresh Alias
  78.   #--------------------------------------------------------------------------
  79.   alias lemony_see_refresh refresh
  80.   #--------------------------------------------------------------------------
  81.   # * Refresh
  82.   #--------------------------------------------------------------------------
  83.   def refresh
  84.     lemony_see_refresh
  85.     return if (@page.nil? || @page.list.nil?)
  86.     @page.list.each {|p| b = p.parameters[0]
  87.     s, @lsee_out = (b != nil && b.is_a?(String)) ? b.split : '', false
  88.     if (p.code == 108 || p.code == 408) && b.include?('LSEE')
  89.                 # 0:TYPE 1:RANGE 2:PITCH 3:VOLUME 4:FILENAME 5:DELAY 6:RANDOM
  90.       @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]
  91.       break if @lsee_data != nil
  92.     else @lsee_out = true end}
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # * Determine if Near Player for this script
  96.   #--------------------------------------------------------------------------
  97.   def near_player?
  98.   if @lsee_data
  99.     sx = distance_x_from($game_player.real_x).abs
  100.     sy = distance_y_from($game_player.real_y).abs
  101.     return sx + sy < @lsee_data[1]
  102.   else
  103.       return false
  104.     end
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # * Update Alias
  108.   #--------------------------------------------------------------------------
  109.   alias lemony_see_update update
  110.   #--------------------------------------------------------------------------
  111.   # * Update
  112.   #--------------------------------------------------------------------------
  113.   def update
  114.     lemony_see_update
  115.     if @custom_sound_allowed == false
  116.         if @lsee_data[0] == 'BGS'
  117.           RPG::BGS.fade(@lsee_data[3] * 100)
  118.           save_bgs_pos
  119.         elsif @lsee_data[0] == 'ME'
  120.           RPG::ME.fade(@lsee_data[3] * 100)
  121.         elsif @lsee_data[0] == 'SE'
  122.          Audio.se_stop
  123.         end
  124.         @stop_custom_sound = true
  125.         $game_system.event_sound_stopped = true
  126.         @custom_sound = false
  127.         @near_player = false
  128.     end
  129.   if @lsee_data && @stop_custom_sound == false
  130.     if near_player? && !@custom_sound
  131.         vol = @lsee_data[3]
  132.         if $game_options
  133.           volume = vol * $game_options.master_volume
  134.           volume *= $game_options.bgm_volume
  135.         else
  136.           volume = vol
  137.         end
  138.         pitch = @lsee_data[2]
  139.         if @lsee_data[0] == 'BGS'
  140.           Audio.bgs_play('Audio/BGS/' + @lsee_data[4], volume.to_i, pitch, 0)
  141.         elsif @lsee_data[0] == 'ME'
  142.           Audio.me_play('Audio/ME/' + @lsee_data[4], volume.to_i, pitch)
  143.         elsif @lsee_data[0] == 'SE'
  144.           Audio.se_play('Audio/SE/' + @lsee_data[4], volume.to_i, pitch)
  145.         end
  146.         @custom_sound = true
  147.         @near_player = true
  148.     elsif near_player? && @custom_sound && $game_system.event_sound_stopped
  149.         vol = @lsee_data[3]
  150.         if $game_options
  151.           volume = vol * $game_options.master_volume
  152.           volume *= $game_options.bgm_volume
  153.         else
  154.           volume = vol
  155.         end
  156.         pitch = @lsee_data[2]
  157.         if @lsee_data[0] == 'BGS'
  158.           pos = @saved_bgs_pos ? @saved_bgs_pos : 0
  159.           Audio.bgs_play('Audio/BGS/' + @lsee_data[4], volume.to_i, pitch, pos)
  160.           @saved_bgs_pos = nil
  161.         elsif @lsee_data[0] == 'ME'
  162.           Audio.me_play('Audio/ME/' + @lsee_data[4], volume.to_i, pitch)
  163. #~         elsif @lsee_data[0] == 'SE'
  164. #~           Audio.se_play('Audio/SE/' + @lsee_data[4], volume.to_i, pitch)
  165.         end
  166.         @custom_sound = true
  167.         @near_player = true
  168.         $game_system.event_sound_stopped = false
  169.     end
  170.     if (!near_player? && @near_player)
  171.         if @lsee_data[0] == 'BGS'
  172.           RPG::BGS.fade(@lsee_data[3] * 100)
  173.           save_bgs_pos
  174.         elsif @lsee_data[0] == 'ME'
  175.           RPG::ME.fade(@lsee_data[3] * 100)
  176.         elsif @lsee_data[0] == 'SE'
  177.          Audio.se_stop
  178.         end
  179.         $game_system.event_sound_stopped = true
  180.         @custom_sound = false
  181.         @near_player = false
  182.       end
  183.   end
  184.  
  185. #~  if !@lsee_data.nil?
  186. #~    xx, yy = (@real_x - $game_player.real_x), (@real_y - $game_player.real_y)
  187. #~    close = (Math.sqrt((xx * xx) + (yy * yy)) <= @lsee_data[1].to_i)
  188. #~    r, d = @lsee_data[1].to_i, Math.sqrt((xx * xx) + (yy * yy))
  189. #~    v, go, ms = (r - (d - 1 % r)) * @lsee_data[3].to_i / r, true, ['ME', 'SE']
  190. #~    if !@lsee_out
  191. #~       if ms.include?(@lsee_data[0])
  192. #~         @lsee_timer ||= @lsee_data[5] + rand(@lsee_data[6])
  193. #~         @lsee_timer = [@lsee_timer - 1, 0].max
  194. #~         go = @lsee_timer <= 0
  195. #~         @lsee_timer = nil if go
  196. #~       end
  197. #~       out = (!@lsee_data[7].nil? && (@lsee_data[7].volume > 0 && !close)) && go
  198. #~       f = "#{@lsee_data[0]}.new('#{@lsee_data[4]}', #{v}, #{@lsee_data[2]})"
  199. #~       @lsee_data[7] ||= eval("RPG::" + f) if close && go
  200. #~       @lsee_data[7].volume = v if !@lsee_data[7].nil? && close
  201. #~       @lsee_data[7].play if ((!@lsee_data[7].nil? && close) && go) || out
  202. #~       @lsee_data[7].volume -= 1 if !@lsee_data[7].nil? && !close
  203. #~       @lsee_data[7] = nil if (!@lsee_data[7].nil? && @lsee_data[7].volume <= 0)
  204. #~    elsif @lsee_out
  205. #~       @lsee_data[7].volume -= 1 if !@lsee_data[7].nil?
  206. #~       @lsee_data[7].play if !@lsee_data[7].nil? && !ms.include?(@lsee_data[0])
  207. #~       if (!@lsee_data[7].nil? && @lsee_data[7].volume <= 0)
  208. #~         @lsee_data, @lsee_out = nil, false
  209. #~       end
  210. #~    end
  211. #~  end
  212. end
  213.  
  214.   #--------------------------------------------------------------------------
  215.   # ● Execute Enemy Defeaed Process
  216.   #--------------------------------------------------------------------------        
  217.    def execute_enemy_defeated_process
  218.       super
  219.       allow_custom_sound(false)
  220.     end  
  221.      
  222. end
  223.  
  224. #==============================================================================
  225. # ** Game_Interpreter
  226. #==============================================================================
  227.  
  228. class Game_Interpreter
  229.   #--------------------------------------------------------------------------
  230.   # * Set Custom Sound
  231.   #--------------------------------------------------------------------------
  232.   def allow_custom_sound(event_id, value)
  233.     char = get_character(event_id)
  234.     char.allow_custom_sound(value)
  235.   end
  236. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement