| [ ƁԌՏ ɱսlէіթӏҽᵴ ]
Ƭout est parti d'un script anonyme trouvé dans un coin du Web et au terme de longues recherches : un code pour un module "MCI" supposé pouvoir jouer des BGS supplémentaires sur RMXP.
En l'état, il ne fonctionnait pas ! J'ai dû le retravailler pour le faire tourner.
Mais lorsque ce script a enfin réussi à faire jouer un fichier audio et qu'il a été harmonisé avec les classes RM (Scene_Map, Scene_Load et Scene_End) … c'est devenu la foire aux possibilités !
N'avez-vous jamais trouvé contraignant qu'RMXP ne puisse jouer qu'un BGS à la fois ? De ne pouvoir qu'en ordonner la lecture et l'arrêt, rien de plus ?
Au terme de trois jours de boulot, je suis très heureux d'avoir pu développer ces quelques fonctionnalités pour agrémenter le présent projet de jeu :
☼ Tandem de BGS pour transitions d'ambiances Jour/Nuit
Au lancement de la partie, deux BGS sont instanciés et lancés avec un volume égal à zéro : une ambiance de jour (nature, oiseaux) et une de nuit (grillons, hiboux). Ces instanciations se retrouvent ensuite couplées avec un script que j'avais déjà réalisé pour gérer les couches de Panoramas extérieurs afin que le ciel change (plein jour, pleine nuit, plus une lente transition en dégradé de l'un à l'autre lors des phases de crépuscule et d'aube).
Ici aussi, cette mécanique s'applique à ces deux BGM afin qu'ils soient joués, l'un à plein volume, l'autre à 0%, lors des moments à ciel fixe, puis qu'ils se remplacent doucement mutuellement dans les phases transitoires en fonction de l'avancée de l'heure.
Un tableau contenant les noms des Tilesets utilisés pour les maps de décors extérieurs est vérifié avec la map parcourue pour agir adéquatement lorsque ces BGM doivent être audibles ; ils sont tous deux ramenés à 0% de volume sinon.
1
2
3
4
5
6
7
| concerne = [
"TILESET Nature", "TILESET Hopital", "TILESET Carrefour",
"TILESET Mines Ext", "TILESET Forge Ext", "TILESET Ville Ext Rue 1", "TILESET Ville Ext Rue 2",
]
if !concerne.include? ($game_map.tileset_name)
$bgs_jour.update_volume(0)
$bgs_nuit.update_volume(0) |
₪ BGS localisé avec intensité du volume selon sa proximité avec le joueur
Un Event placé sur une map contient un appel de script et reçoit en paramètre : un nom de fichier audio d'ambiance sonore, un niveau de volume maximum et une portée. Le volume max est joué lorsque que l'on est à distance X=Y=0 de l'Event, sinon, le son est atténué en fonction de l'importance de la distance d'avec le héros sur toute l'étendue de sa portée en cercle autour de sa position. L'Event est muet si le héros est hors de portée.
J'ai confectionné ce module de façon à ce que le hasard puisse, si souhaité, lancer la première itération de lecture du BGS à une position aléatoire de sa durée de façon à ce que l'on entende pas systématiquement le même début à chaque entrée dans la portée et alors que la boucle de lecture se lance.
1
| $bgsloc.play(@fichier, 0, rand(50000)) |
└► le fichier dure 54 sec, donc choix de démarrage aléatoire dans les 50 000 premières millisecondes de l'enregistrement.
♫ BGM multi-pistes
Dans ce projet, certains endroits auront une musique spécifique, mais la zone la plus vaste, les extérieurs (qui comprennent la forêt, la ville et la périphérie de celle-ci), est vouée à être la même.
En général, concevoir une musique qui soit longue et variée peut suffire à éviter la lassitude du joueur ; mais je voulais aller plus loin.
Imaginez trois musiques différentes, chacune se suivant agréablement, sans transition brute et incohérente, regroupées en un seul gros fichier. Une partie de mon script vouée aux BGM lance aléatoirement une de ces trois pistes (identifiée par le timecode de son début) à chaque entrée dans la zone "extérieure" afin d'éviter, là aussi, que le début de lecture soit toujours le même. La lecture en boucle de tout le fichier s'amorce ensuite normalement.
1
2
| pistes = [0, 180000, 340000]
debut = pistes[rand(3)] |
└► suite de positions en terme de millisecondes à passer pour trouver le début du morceau voulu.
|