[VX] Reprendre musique de map à la fin d'un combat
Auteur
Message
mew10
Citadin Lv.7
Age : 29 Inscrit le : 29/11/2009 Messages : 162
Sujet: [VX] Reprendre musique de map à la fin d'un combat Sam 14 Mai 2011 - 12:07
Hey tout le monde !!
Alors si vous l'avez pas remarqué, lorsque vous finissez un combat, la musique BGM de la carte revient au début ><. Pour résoudre ce problème, KGC a fait un très beau script, malheuresement incompatible avec les musiques de victoires :/ Cette époque est révolue !!! Un merveilleux scripteur, BulletXt, a inventé un nouveau script qui gère la reprise du BGm avec le son de victoire à la perfection !! Il est même compatible avec d'autres scripts (rapport de combat, couper la musique de victoire au retour à la map, etc.) et propose même 2 options en plus !!
Ceependant, ce script à 2 défaults à préciser. D'abord, c'est que à chaque fois que vous lancez votre projet un nouveau programme s'ouvre, qu'il faudra fermer manuellement une fois que vous aurez fini de jouer (mais bon c'est pas dur). Ensuite, votre musique de combat ne doit pas être au format MIDI et/ou provenir des musiques du RTP (les ressources de bases, inclusesavec le programme RPG Maker VX), mais bon cette contrainte est assez facile à éviter (pour info le script supporte les musiques au format mp3, ogg , wav et wma, ce qui propose quand même un large choix ^^).
Bon cependant ce script necessite pas mal de choses : - avant tout il vous faut Microsoft Visual C++ 2008 Redistributable Package, téléchargable ici - ensuite téléchargez la démo avec le script là. - pour finir remplacez le script "Continue BGM After Battle" par celui-ci (c'est juste une MAJ du script) :
Description: This script will make your map's bgm continue playing after battle ends instead of restarting.
WARNING: You must have installed Microsoft Visual C++ 2008 Redistributable Package, you can get it here: http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en
WARNING2: you must not set a battle BGM that is MIDI format and/or part of RTP.
To install to a new project: -copy this script and place it as FIRST script in the Material section -copy all dlls found in root directory of the demo -copy mplayer folder -copy Start.exe and Rescue.exe
When starting the game, you can either normally start it from Game.exe or from Start.exe (clicking on Start.exe avoids loading external gui). =end
# CONFIGURATION
#this is the name of the exe to start the game. Do not add file extension. STARTGAME = "Start" #this is the name of the Recover Audio engine exe. Do not add file extension. RESCUE = "Rescue"
#this is a switch ID. When ON, map's BGM will continue playing in battle. CONTINUE_BGM = 1
#this is a switch ID. When ON, it enables Random Battle BGM. ENABLE_RANDOM_BATTLE_BGM = 2 =begin these are the Battle BGMs that you want to play randomly. example: BATTLE_BGMS_THAT_PLAY_RANDOMLY = ["Battle1", "Battle2","Battle3"] You can change this array at any time in game through a script call inside event. To do this type for example: $audio_random_battle = ["r_Battle1", "r_Battle2","r_Battle3"] =end BATTLE_BGMS_THAT_PLAY_RANDOMLY = ["r_Battle1", "r_Battle2","r_Battle3"]
################################################################################ ######################### END CONFIGURATION #################################### ################################################################################
#this holds the random battle array globally $audio_random_battle = BATTLE_BGMS_THAT_PLAY_RANDOMLY $audio_battle_bgm_random_tmp_id = "nil" FORMAT_OF_SONGS = ["mp3","ogg","wav","wma"] ######################### CHECK IF ENGINE IS RUNNING ########################### #if in test mode, start the recover audio engine begin #send a string to server. if it exists it means it must not open a new recover gui. open("\\\\.\\pipe\\audio_engine_xt",'w') { |pipe| pipe.write("nil,nil,nil"); } rescue recover = 1 #this returns true if there is no recover gui engine running. if recover == 1 Thread.new{system (RESCUE)} recover = 0 end end
############################ Handle F12 Reset key ############################## unless $f12_cleaner_F3XXEFA1.nil? #if in test mode, warn the user he is leaving testing mode if $TEST p sprintf("You are now leaving testing mode.") end
#kill recover GUI and mplayer system "start /MIN /B taskkill /F /IM #{RESCUE+".exe"} " system "start /MIN /B taskkill /F /IM #{"mplayer.exe"} "
# Opens the game executable in a new thread Thread.new{system (STARTGAME+".exe")} # Exits this thread exit end $f12_cleaner_F3XXEFA1 = true
module AudioSuffix def suffix_check for codec in 0...FORMAT_OF_SONGS.size path = "Audio\\BGM\\" path.gsub!('\\', "/") song_file_name = $game_system.battle_bgm.name + "." + FORMAT_OF_SONGS[codec]
if FileTest.exist?(path+song_file_name) $audio_suffix = "." + FORMAT_OF_SONGS[codec] break end end end
def recover # start recover audio engine Thread.new{system (RESCUE)} #warn the user that the engine has crashed $game_message.texts.push("The Audio Engine server has crashed.") $game_message.texts.push("A Rescue GUI mode of the engine should have started.") $game_message.texts.push("If it didn't, please manually click on #{RESCUE}.exe .") $game_message.texts.push("Remember to close it after closing game.") #do a sleep of n seconds to give the time for the engine to start sleep(4) #FIX: its not said 6 seconds are enough end
end
class Game_Map
# initialize the Random Battle BGM array # the original Random Battle BGM code was made from ERZENGEL attr_accessor :rbmfiles alias audio_rbm_initialize initialize def initialize #set @rbmfiles to the Battle BGM array set by user in CONFIGURATION @rbmfiles = $audio_random_battle audio_rbm_initialize end
#this is a real time update. gets executed each frame. #this makes the random battle array always be aware of any change #set from Player. alias bulletxt_random_battle_update update def update bulletxt_random_battle_update @rbmfiles = $audio_random_battle end end
class Scene_Map < Scene_Base include AudioSuffix
def call_battle
# This handles Random Battle BGM rbmoff = $data_system.battle_bgm.name.clone # if true, it means Random Battle BGM should happen if $game_switches[ENABLE_RANDOM_BATTLE_BGM] #debug battle bgm array #p $game_map.rbmfiles # this gets a random element from the array audio = rand($game_map.rbmfiles.size) #if < 1, it must not add anything to array if $game_map.rbmfiles.size > 1 #this puts back the previously removed element into array. at first run #this doesn't add anything because the variable is set to nil $game_map.rbmfiles.push($audio_battle_bgm_random_tmp_id) if $audio_battle_bgm_random_tmp_id != "nil" end #this global variable holds the last random Battle BGM. it's needed so at #next run we know the element to put back in array (since it gets deleted below) $audio_battle_bgm_random_tmp_id = $game_map.rbmfiles[audio] #debug the battle bgm that is about to play #p $audio_battle_bgm_random_tmp_id #this tells VX who is the random Battle BGM to play $data_system.battle_bgm.name = $game_map.rbmfiles[audio] #if < 1, it must not remove anything from array if $game_map.rbmfiles.size > 1 =begin remove current Battle BGM from array, so at next battle the random won't play this again. This avoids that a battle BGM plays 2 times consecutively. The element gets back in to array at next run after getting the new random battle bgm to play. =end $game_map.rbmfiles.delete_at(audio) end else #here the Random Battle BGM code finishes. end
if $game_switches[CONTINUE_BGM] continue_bgm return end
#get values of current plaging bgm $audio_name = $game_temp.map_bgm.name $audio_volume = $game_temp.map_bgm.volume $audio_pitch = $game_temp.map_bgm.pitch #start playing the same bgm again but with volume at 0 Audio.bgm_play("Audio/BGM/" + $audio_name, 0, $audio_pitch) rescue nil #make game temp bgm be equal to the new playing BGM, so after battle ends #it knows who's the values of the bgm to restore (it actually just continues #playing it but with volume restored) $game_temp.map_bgm = RPG::BGM.new $game_temp.map_bgm.name = $audio_name $game_temp.map_bgm.volume = $audio_volume $game_temp.map_bgm.pitch = $audio_pitch
RPG::BGS.stop Sound.play_battle_start
#call suffix function, it returns the exact suffix of bgm suffix_check #prepeare bgm volume and name to send to server volume = $game_system.battle_bgm.volume id = $game_system.battle_bgm.name + $audio_suffix battle_song = id + ",play," + volume.to_s() open("\\\\.\\pipe\\audio_engine_xt",'w') { |pipe| pipe.write(battle_song); } rescue rec = 1
if rec == 1 recover rec = 0 open("\\\\.\\pipe\\audio_engine_xt",'w') { |pipe| pipe.write(battle_song); } rescue nil end
$game_temp.next_scene = nil $scene = Scene_Battle.new end
def continue_bgm Sound.play_battle_start $game_temp.next_scene = nil $scene = Scene_Battle.new end
end
# Forced Victory ME Stop - KGC_ForceStopVictoryME # http://ytomy.sakura.ne.jp module KGC module ForceStopVictoryME # Fade out time (milli-second) # If set to 0, the ME stops instantly upon scene change to map. FADE_TIME = 1000 end end $imported = {} if $imported == nil $imported["ForceStopVictoryME"] = true #end code of Forced Victory ME Stop - KGC_ForceStopVictoryME
class Scene_Battle < Scene_Base include AudioSuffix
alias bulletxt_continue_bgm_process_victory process_victory def process_victory
# Forced Victory ME Stop - KGC_ForceStopVictoryME # http://ytomy.sakura.ne.jp return if result != 0 @@_victory_me_thread = Thread.new { time = KGC::ForceStopVictoryME::FADE_TIME RPG::ME.fade(time) # Start ME Fade sleep(time / 1000.0) # Wait until the fade is done. RPG::ME.stop # Stop ME } #end code of Forced Victory ME Stop - KGC_ForceStopVictoryME end
end
Voilà la démo est totalement prête !!
Alors pour importez ce script vers votre projet vous devez : - copier le script de la démo TOUT EN HAUT de la section "Materials" - copier tout les fichiers .dll à la racine de votre projet (là ou se trouve le fichier Game.exe de votre projet). - copier les dossiers "mplayer" et "photon_backend" une nouvelle fois à la racine de votre projet". - enfin copier les fichiers "Start.exe" et "Rescue.exe", là encore, à la racine de votre projet. Sa y est c'est installer dans votre projet !!
Pour finir parlons de la configuration. Là encore, c'est pas compliqué : le script s'éxecute à chaque combat, aucune configuration nécessaire !!! Cependant, en plus de cette fonction, ce script en offre 2 autres !! - Si vous le souhaitez, la musique de map peut se poursuivre durant le combat à la place de la musique de combat !! Pour cela, il vous suffit d'activer l'interrupetur 1 (modifiable à la ligne 37 du script, modifiez 1 par le chiffre de votre choix). - Aussi, la musique de combat peut être aléatoire parmi les musiques de votre choix !! Pour cela, il faut activer l'interrupetur 2 (modifiable à la ligne 40 du script, modifiez 2 par le chiffre de votre choix). Le nom des musiques qui seront jouées aléatoirement peuvent être définies à la ligne 7 du script (regardez le texte en violet), et vous pouvez changer les musiques de combat qui doivent être jouées aléatoirement tout moment durant le jeu grâce à l'appel de script : $audio_random_battle = ["r_Battle1", "r_Battle2","r_Battle3"] Remplacez r_Battle1, r_Battle2 et r_Battle3 par le nom des musiques de votre choix (sans extension je crois).
Pour le reste de la config, faut un minimum de connaissances, mais bon le reste est loin d'être primordiale (sauf si vous souhaitez customiser le message qui apparait en cas de crash :p).
En espérant que sa vous sera utile ^^
cagt3000
Citadin Lv.7
Age : 123 Inscrit le : 08/04/2010 Messages : 218
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Sam 14 Mai 2011 - 14:45
Salut a toi,
Merci de nous avoir partager ce script, mais je pense qu'il est un peu inutile. Vois-tu, regarde bien TOUT ce que t'as besoin pour faire marcher ce script:
- Microsoft Visual C++ 2008 Redistributable Package (Euh... qu'est ce qu'il a avoir avec RPGMVX ?) - Le script en lui même (OK, je veux bien) - Tout les fichiers .dll de la démo (Juste pour un script ?????) - Les dossiers "mplayer", "photon_backend", "Start.exe" et "Rescue.exe" (Euh...)
EN PLUS, il ouvre un programme a part (ce qui peut être chiant pour certain cas), ET il n'est pas compatible non seulement avec certain types de fichier, MAIS EN PLUS on ne peux utiliser les musiques qui nous sont donnes !
Je ne voudrais pas te décourager, et je sais que ce n'est pas toi qui a fait ce script, mais il n'est pas génial... Mais merci quand même du partage !
A bientôt !
P.S.: Au passage, oui il y a déjà le script de KGC pour que la BGM de la map continue, mais il a aussi fait un script pour que la musique de victoire s’arrête aussi. ET la compatibilité est très bonne... même parfaite je dirais.
Zangther
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Sam 14 Mai 2011 - 14:49
Tous ces fichiers sont là tout simplement parce qu'on en a besoin. Oui, RGSS2 ne propose pas de base un moyen de faire ça de base ( oui, les script de KGC ne marchent pas ensemble il l'a lui même indiqué ).
Mais je suis d'accord pour dire que autant c'est chasser la mouche avec une kalach'. Installer la librairie Visual C++, mettre toutes les dlls dans le projet, ajouter des exes différents de ceux de base de RPG maker. Tout ça pour juste une mini fonction...
Enfin merci quand même du partage.
mew10
Citadin Lv.7
Age : 29 Inscrit le : 29/11/2009 Messages : 162
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Sam 14 Mai 2011 - 15:11
cagt3000 a écrit:
EN PLUS, il ouvre un programme a part (ce qui peut être chiant pour certain cas), ET il n'est pas compatible non seulement avec certain types de fichier, MAIS EN PLUS on ne peux utiliser les musiques qui nous sont donnes !
Suffit de prendre les musiques du RTP, p'têt de les renommer, et de les placer dans le dossier de ton jeu. Là c'est fonctionnel normalement.
cagt3000 a écrit:
P.S.: Au passage, oui il y a déjà le script de KGC pour que la BGM de la map continue, mais il a aussi fait un script pour que la musique de victoire s’arrête aussi. ET la compatibilité est très bonne... même parfaite je dirais.
Moi perso la dernière fois que j'avais tenté sa avait pas marché, à toi de voir. Et puis les deux options supplémentaires sont vraiment très utiles je trouve (encore le son de combat aléatoire sa existait déjà, mais la musique de la map qui continue durant le combat c'est vraiment utile).
Perso je le recommande, ensuite c'est vous qui voyez !!
MAT77164
Citadin Lv.7
Age : 27 Avertissements : 1Inscrit le : 14/06/2010 Messages : 182
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Dim 15 Mai 2011 - 7:55
Oui, je l'utiliserai surement dans mon projet.
Merci du partage.
Ice Monkey
Templier Lv.15
Age : 26 Inscrit le : 30/01/2011 Messages : 1273
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Dim 15 Mai 2011 - 11:08
Pour moi, je ne voit pas tellement quel intérêt il y a reprendre le BGM après le combat. Si je joue à un jeu, je fais gaffe à la musique mais pas au point de me dire "c'est nul, la musique a recommencé du début". De plus, toutes ces contraintes pour si peu, ça bouffe tellement de place que c'est vraiment obsolète. Ce n'est que mon point de vu hein.
A pluch'
TaZ
Age : 30 Inscrit le : 22/11/2008 Messages : 3382
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Dim 15 Mai 2011 - 11:59
Des fois, ça peut être frustrant de ne jamais entendre la partie finale d'une musique, quand on sait qu'elle est bien. Mais là ça relève plus du maker que du joueur.
mew10
Citadin Lv.7
Age : 29 Inscrit le : 29/11/2009 Messages : 162
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Dim 15 Mai 2011 - 12:39
Disons que j'apprécie beaucoup les musiques de jeu vidéo, et pour en profiter il y a certaines choses de requises, comme ceci.
Zangther
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Dim 15 Mai 2011 - 15:23
Ben si tu mets des musiques qui durent deux ans, c'est logique que tu n'entendes pas la fin.
Si tu gère bien ton cas, que tu équilibre la fréquence des combats aléatoires et la longueur des musiques, ça ira bien.
mew10
Citadin Lv.7
Age : 29 Inscrit le : 29/11/2009 Messages : 162
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Dim 15 Mai 2011 - 17:50
En moyenne ma musique dure 1m30, c'est sûr que sans combat c'est assez long, mais avec des combats, si sa recommence à chaque fois, c'est plutôt chiant x) Surtout que je fait des musiques en ogg (voir mon tuto), donc dès que t'as fini un combat si tu retombe sur l'intro de la musique, sa fait bizarre non ?
Zangther
Maître des Duels
Age : 32 Inscrit le : 29/07/2009 Messages : 7841
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Dim 15 Mai 2011 - 17:58
Non. Pas pour moi. Enfin, y'a un truc que je me demandais. Les dlls, les exe modifiés c'est simple oui. mais la lib de C++ tu fais comment pour l'installer en même temps que ton projet ?
mew10
Citadin Lv.7
Age : 29 Inscrit le : 29/11/2009 Messages : 162
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat Lun 16 Mai 2011 - 10:56
J'y est réfléchi moi aussi, mais au final j'ai trouvé.
Avant tout, je tient à dire que le fichier batch c'est une suite de commande qui s'affiche dans le boitier noir de Windows, on peut tout faire avec.
D'abord j'utiliser Instal Creator qui installe tout ce qui doit être installé (jeu + microsoft machintruc) dans C:\nomduprojet, et ensuite sa execute un programme que l'on peut créé facilement, écrit en batch. Là sa execute le batch A.
Le premier batch lance l'installation du jeu, puis de Microsoft machintruc, déplace un second batch vers le bureau et enfin lance la désinstallation du premier Install Creator. Enfin le second batch supprime le dossier C:\nomduprojet (Install Creator ne retire pas tout lors de la cdésinstallation) et le raccourci du premier batch sur le bureau (qui a été créé au cas où l'utilisateur ferme le processus d'installation du premier batch), et enfin affiche un message qui demande la supression manuelle du second batch (qui est sur le bureau).
Sa a l'air compliqué mais en fait c'est facile, les batchs se créés depuis le bloc note, sa prend 2Ko et c'est super simple à créé (y'a des milliers de tuto sur le web).
Contenu sponsorisé
Sujet: Re: [VX] Reprendre musique de map à la fin d'un combat
[VX] Reprendre musique de map à la fin d'un combat