Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4064 miembros registrados.
El último usuario registrado es cesarseb233.

Nuestros miembros han publicado un total de 84098 mensajes en 11979 argumentos.

[Tutorial] Condicionar música de batalla

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [Tutorial] Condicionar música de batalla

Mensaje por Wecoc el 2017-04-14, 20:16

Me pidieron cómo hacer esto y es sencillo pero creo que es un buen añadido así que voy a explicarlo.
La música que sucederá en batalla se define en la base de datos, en el apartado Sistema, y se puede cambiar a medio juego desde evento con el comando de evento "Cambiar música de batalla". Pero eso es limitado; ¿qué pasa si queremos definir distintas músicas según la tropa enemiga?

Definir música de batalla por tropa

Algunos pensaréis que se puede asignar al evento de batalla de esa determinada tropa, pero no es así porque al hacer eso primero se ejecuta la música por defecto y luego tras terminar toda la transición/aparición empieza la correcta para esa tropa, lo que queda fatal.

Pues bien, para hacerlo se requiere un script que defina las canciones especiales según la tropa.

Aquí os lo añado, se definen a cada tropa especial las canciones por nombre, volumen y frecuencia.

Código:
#==============================================================================
# ** Battle Sound by Troop (Start)
#==============================================================================

module BattleSound
  # ID => Canción (nombre, volumen, frecuencia)
  TroopBGM = {1 => RPG::AudioFile.new("002-Battle02", 100, 100)}
  # ID => Sonido aparición (nombre, volumen, frecuencia)
  TroopSE  = {1 => RPG::AudioFile.new("013-Move01", 80, 100)}
end

class Scene_Map
  def call_battle
    $game_temp.battle_calling = false
    $game_temp.menu_calling = false
    $game_temp.menu_beep = false
    $game_player.make_encounter_count
    $game_temp.map_bgm = $game_system.playing_bgm
    $game_system.bgm_stop
    #-------------------------------------------------------------------------
    # Sonido de encuentro
    if BattleSound::TroopSE.keys.include?($game_temp.battle_troop_id)
      $game_system.se_play(BattleSound::TroopSE[$game_temp.battle_troop_id])
    else
      $game_system.se_play($data_system.battle_start_se)
    end
    # Música de batalla
    if BattleSound::TroopBGM.keys.include?($game_temp.battle_troop_id)
      $game_system.bgm_play(BattleSound::TroopBGM[$game_temp.battle_troop_id])
    else
      $game_system.bgm_play($game_system.battle_bgm)
    end
    #-------------------------------------------------------------------------
    $game_player.straighten
    $scene = Scene_Battle.new
  end
end

Puse que se pueda definir tanto la música como el sonido de aparición según la tropa. Se podría hacer lo mismo con la música de victoria, pero se modificaría una parte distinta, concretamente el start_phase5 de Scene_Battle. ¿También lo queréis? Está bien...

Spoiler:

Código:
#==============================================================================
# ** Battle Sound by Troop (Victory)
#==============================================================================

module BattleSound
  # ID => Canción (nombre, volumen, frecuencia)
  TroopME = {1 => RPG::AudioFile.new("004-Victory04", 100, 100)}
end

class Scene_Battle
  def start_phase5
    @phase = 5
    #-------------------------------------------------------------------------
    # Música de victoria
    if BattleSound::TroopME.keys.include?($game_temp.battle_troop_id)
      $game_system.me_play(BattleSound::TroopME[$game_temp.battle_troop_id])
    else
      $game_system.me_play($data_system.battle_end_me)
    end
    #-------------------------------------------------------------------------
    $game_system.bgm_play($game_temp.map_bgm)
    exp = 0
    gold = 0
    treasures = []
    for enemy in $game_troop.enemies
      unless enemy.hidden
        exp += enemy.exp
        gold += enemy.gold
        if rand(100) < enemy.treasure_prob
          if enemy.item_id > 0
            treasures.push($data_items[enemy.item_id])
          end
          if enemy.weapon_id > 0
            treasures.push($data_weapons[enemy.weapon_id])
          end
          if enemy.armor_id > 0
            treasures.push($data_armors[enemy.armor_id])
          end
        end
      end
    end
    treasures = treasures[0..5]
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      if actor.cant_get_exp? == false
        last_level = actor.level
        actor.exp += exp
        if actor.level > last_level
          @status_window.level_up(i)
        end
      end
    end
    $game_party.gain_gold(gold)
    for item in treasures
      case item
      when RPG::Item
        $game_party.gain_item(item.id, 1)
      when RPG::Weapon
        $game_party.gain_weapon(item.id, 1)
      when RPG::Armor
        $game_party.gain_armor(item.id, 1)
      end
    end
    @result_window = Window_BattleResult.new(exp, gold, treasures)
    @phase5_wait_count = 100
  end
end

Fijaos que en ese script se podría cambiar el me_play por bgm_play en caso de querer que una música de victoria se reproduzca en loop como en Final Fantasy,
pero luego la línea $game_system.bgm_play($game_temp.map_bgm) habría que borrarla y ponerla dentro del método update_phase5, al final de éste.

Como última anotación, lo he puesto para tropas pero usando mi script Area Support puede ser interesante definirlo por áreas (dependerá del juego).

Música de batalla dinámica

En un boss largo se hace pesada la misma música de batalla durante varios minutos, así que puede ser interesante cambiarla según cuanto HP le queda a ese enemigo.
También es interesante en los boss donde también hay enemigos más pequeños, si matas el grande y quedan por matar los pequeños entonces cambiar la música por la de batalla normal. Todos esos cambios se hacen por engine en los eventos de batalla, a cada tropa enemiga. Solo hay que ponerle de activación "Batalla" y luego una condición (pongo dos ejemplos).





Ese tipo de cosas pueden mejorar bastante las batallas, hacer que parezcan más dinámicas, no tan monótonas.

Además al cambiar de música puede interesarnos también cambiar otro aspecto de la batalla, al mismo tiempo. Entonces puede que nos interese saber de antemano si la canción que suena ya es la que está activando el engine o no.

Para ello hay que usar otra condición con el siguiente código:

$game_system.playing_bgm.name != "nombre"



Y con ésto doy la explicación por concluída. Si tenéis alguna duda posteadla aquí.
avatar
Wecoc
Administrador
Administrador



Créditos 9129

Gracias : 471

Volver arriba Ir abajo

RPG Maker XP Re: [Tutorial] Condicionar música de batalla

Mensaje por Khaikaa el 2017-04-15, 02:57

¡Muy útil! Tengo un pequeño proyecto en XP, probaré a ver que tal funciona :) saludos!!
avatar
Khaikaa
Iniciado
Iniciado

0/3

Créditos 31

Gracias : 7

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.