Raven Administrateur
Messages postés : 1338 Date d'inscription : 20/04/2013 Jauge LPC :
| Sujet: Dynamic_sound Dim 14 Juin 2015 - 17:38 | |
| Yo les gens ! J'vous partage un petit script pour faire des "sons" dynamiques". D'un part, ça permet de rajouter autre chose que BGM/BGS, d'autre part, le son dépendra de l'emplacement que vous lui aurez donné. -> Plus vous serez prêt de la source, plus le son sera fort et inversement. Pour modifier les sons, rendez-vous à la ligne 46 : - Code:
-
@emissions[1] = Sound_Emission.new @emissions[1].setup (10,12,3,4,20,'011-Waterfall01',100) C'est expliqué dans le script, mais pour les non anglophones voilà comment procéder. @emission[X] : C'est l'ID de la map sur laquelle le son est joué. (X,Y,largeur, hauteur, rayon d'effet,'nomdelaBGS',ton) : J'peux pas être plus clair Vous pouvez faire ça pour plusieurs maps hein, pour ça recopiers les deux lignes de codes aux lignes 46 et 47 et modifiez les données en fonction de ce don vous avez besoin. Note 1 : Un petit crédit à Modern Algebra serait cool aussi. Avantages : ++ Pour les sons d'ambiance comme feu de camp, rivières, cascades, foule en colère, etc. Inconvénient :Ce script ne gère qu'un son dynamique par map. - Code:
-
#============================================================================== # Dynamic Sound Emissions # Version: 1.0 # Author: Modern Algebra # Date: August 27, 2007 #------------------------------------------------------------------------------ # Description: # This script allows you to set an object in the map which emits a sound. What # this script does is set the volume of that sound according to how close you # are to the object. If you are far away, the sound will be faint, if you are # close the sound will be loud. Sorry, in this version there can be only one # object per map. #------------------------------------------------------------------------------ # Instructions: # To set the objects which emit sound for each map, see below. #------------------------------------------------------------------------------ # ** Data_Sound_Emission # This class holds all of the objects which emit any sound, for all maps #==============================================================================
class Data_Sound_Emission #------------------------------------------------------------------------- # * Public Instance Variables #------------------------------------------------------------------------- attr_reader :emissions #------------------------------------------------------------------------- # * Object Initialization #------------------------------------------------------------------------- def initialize @emissions = [] #---------------------------------------------------------------------- # * Editable Region #---------------------------------------------------------------------- # Place all sound emitting objects here. Write it like this: # # @emissions[map_id] = Sound_Emission.new # @emissions[map_id].setup (x,y,width,height,radius,bgs,pitch) # # Where map_id is the ID of the map you want the object to appear on, # x and y are the x and y positions of the upper-left corner of the object, # width is the amount of squares in the x direction that the object covers, # height is the amount of squares in the y direction that the object # covers, radius is the number of squares away you want the sound to be # hears, bgs is the bgs you want to play, and pitch is the pitch value #----------------------------------------------------------------------- @emissions[1] = Sound_Emission.new @emissions[1].setup (10,12,3,4,20,'011-Waterfall01',100)
#----------------------------------------------------------------------- # * END Editable Region #----------------------------------------------------------------------- end end #============================================================================== # ** Sound Emitting Object #------------------------------------------------------------------------------ # This class holds all the relevant data for the object which is emitting the # sound. It is accessed through $game_dynamic_sound_emission #============================================================================== class Sound_Emission #------------------------------------------------------------------------- # * Public Instance Variables #------------------------------------------------------------------------- attr_reader :bgs attr_reader :radius attr_reader :pitch #------------------------------------------------------------------------- # * Object Initialization #------------------------------------------------------------------------- def setup (x, y, width, height, radius, bgs, pitch) @rect = Rect.new (x*128, y*128, (width-1)*128, (height-1)*128) @radius = radius*128 @bgs = bgs @pitch = pitch end #------------------------------------------------------------------------- # * Volume # Checks position to determine the appropriate volume. #------------------------------------------------------------------------- def volume (x, y) # Determine distance between position and the sound emitting object distance = [x - @rect.x, y - @rect.y] testers = [@rect.width, @rect.height] for i in 0...2 # For both the x distance and the y distance # Determine total distance in that direction from the object if distance[i] > 0 # IF you are to the right of the object # Take into account the width of the object if distance[i] <= testers[i] # If you are above or beside the object # Neglect the distance in that direction distance[i] = 0 else # Subtract the width to determine the closest row or column distance[i] -= testers[i] end else # Make the value positive distance[i] *= -1 end end # Calculate the total distance total_distance = distance[0] + distance[1] ratio = (total_distance.to_f / @radius.to_f)*100 # Get the percentage ratio = [ratio,100].min ratio = 100 - ratio return ratio end end
#============================================================================== # ** Scene Title #==============================================================================
class Scene_Title #------------------------------------------------------------------------- # * Alias Main to initialize the data class upon startup #------------------------------------------------------------------------- alias add_data_emissions main def main # Initialize $data_sound_objects $data_sound_objects = Data_Sound_Emission.new add_data_emissions end end
#============================================================================== # ** Game Player #==============================================================================
class Game_Player #------------------------------------------------------------------------- # * Alias update to play the BGS #------------------------------------------------------------------------- alias update_volume update def update update_volume if $data_sound_objects.emissions[$game_map.map_id] != nil emitter = $data_sound_objects.emissions[$game_map.map_id] volume = emitter.volume (@real_x, @real_y) bgs = RPG::AudioFile.new (emitter.bgs,volume,emitter.pitch) if volume != 0 $game_system.bgs_play (bgs) else Audio.bgs_stop end end end end |
|
City Hunter Administrateur
Messages postés : 6524 Date d'inscription : 25/05/2011 Jauge LPC :
| Sujet: Re: Dynamic_sound Dim 14 Juin 2015 - 19:09 | |
| On peut aussi largement faire la même chose en évent en coupant ta map par zone et en faisant des conditions. C'est plutôt long et fastidieux, mais avec mes compétences je n'ai guère trouvé mieux ^^
Merci du partage. Des points. |
|
Zexion Administrateur
Messages postés : 6228 Date d'inscription : 04/01/2012 Jauge LPC :
| Sujet: Re: Dynamic_sound Dim 14 Juin 2015 - 19:15 | |
| Intéressant. Merci Raven. |
|
Kasbak Membre V.I.P.
Messages postés : 1356 Date d'inscription : 05/01/2013 Jauge LPC :
| Sujet: Re: Dynamic_sound Dim 21 Juin 2015 - 0:32 | |
| Merci du partage ça peu etre utile. |
|
Siegfried Mage (niveau 2)
Messages postés : 286 Date d'inscription : 31/07/2011 Jauge LPC :
| Sujet: Re: Dynamic_sound Jeu 23 Juil 2015 - 13:22 | |
| Script bien codé et fonctionnalité (je pense) inédite. Excellente idée. Applications possibles : ambiance, mini-jeux, mise en scène (musique inquiétante dans un couloir qui augmente plus on s'approche de l'événement déclencheur d'une catastrophe). Par contre, il remplace toute autre ambiance sonore, non ? Je me demande s'il y aurait moyen de créer plusieurs "flux" de sons autres que BGM/BGS... Je n'y avais jamais pensé avant de voir ce script. |
|
Raven Administrateur
Messages postés : 1338 Date d'inscription : 20/04/2013 Jauge LPC :
| Sujet: Re: Dynamic_sound Jeu 23 Juil 2015 - 14:24 | |
| Non non, il me semble pas qu'il remplace le son ambiant, mais il le "couvre" me semble t-il simplement parce qu'il est très fort. Faudrait que je vérifie. |
|