Rm2k / 2k3 - Como evitar a repetição da introdução da música de fundo em um mapa (formato WAV)

DevRPG2k DevRPG2k
estão participando dessa conversa. 0 membros e 1 visitante (1 bot) estão vendo.

DevRPG2k Membro
Rm2k / 2k3 - Como evitar a repetição da introdução da música de fundo em um mapa (formato WAV)
Embora os modelos RM2K e RM2K3 possuam a opção de verificar quando um loop de música de fundo termina, isso parece funcionar apenas com MIDI e MP3, e não com músicas em formato WAV

Dom, 19 de julho de 2026, 02:14:16 - Última modificação: Dom, 19 de julho de 2026, 16:39:29 por DevRPG2k

Então, digamos que eu queira criar um mapa com uma introdução musical, mas que não se repita. Como não é MIDI, isso é impossível, pelo que entendi.

Basta definir a introdução como a música do mapa:

No mapa, um evento seria criado em Processo Paralelo e, dentro dele, um Ramo Condicional seria criado com esta opção:

Dentro dele, a música de fundo (BGM) começaria a tocar, repetindo-se em loop e apagando o evento, pois ele não seria mais necessário até que o jogador saísse e retornasse ao mesmo mapa:




O problema é que isso não funciona com arquivos WAV, que, embora raros, podem ser uma das únicas maneiras de incluir sons ambientes específicos.

Para verificar a posição de reprodução da música de fundo, existe uma opção nas variáveis ​​que reconhece o formato WAV:

Como não é possível determinar o tamanho exato de cada música no TICK, utilizei duas variáveis ​​para comparação. A primeira delas é lida constantemente:

@> Control Variables: [0005:MIDI Pos.Curr] = MIDI Play Location (Tick)


O segundo valor sempre copiará o valor do primeiro, desde que o primeiro seja maior ou igual ao segundo:

@> Conditional Branch: Variable [0005:MIDI Pos.Curr] >= Variable [0006:MIDI Pos.Dura]
@> Control Variables: [0006:MIDI Pos.Dura] = Variable [0005]
@>
: Else
@>
: Branch End


Isso significa que, quando a posição retornar a zero, a exceção para essa condição será executada. Portanto, eu altero a música de fundo e depois excluo o evento.

@> Control Variables: [0005:MIDI Pos.Curr] = MIDI Play Location (Tick)
@> Conditional Branch: Variable [0005:MIDI Pos.Curr] >= Variable [0006:MIDI Pos.Dura]
@> Control Variables: [0006:MIDI Pos.Dura] = Variable [0005]
@>
: Else
@> Play BGM: 'Village1', 100, 100, 50
@> Erase Event
@>
: Branch End
@> Wait: 0.0 seconds

(Incluí o tempo de espera simplesmente por hábito, para evitar lentidão em processadores mais antigos)




Para aprimorar ainda mais o sistema, você pode aplicar um fade-out rápido à introdução e um fade-in à música em loop:

@> Control Variables: [0005:MIDI Pos.Curr] = MIDI Play Location (Tick)
@> Conditional Branch: Variable [0005:MIDI Pos.Curr] >= Variable [0006:MIDI Pos.Dura]
@> Control Variables: [0006:MIDI Pos.Dura] = Variable [0005]
@>
: Else
@> Fadeout BGM: 1 seconds
@> Play BGM: 'Village1', 100, 100, 50, @1.0s
@> Erase Event
@>
: Branch End
@> Wait: 0.0 seconds

No entanto, é bem provável que não funcione como deveria com a maioria das músicas, então a melhor abordagem seria fazer isso durante a edição musical e também incluir um segundo de silêncio no final, após o fade-out.




Mas como fazer isso funcionar com uma cutscene ou um evento de diálogo que muda a música, mas você quer que ela continue apenas após a introdução da música? Nesse caso, podemos usar um loop para esperar a música terminar:

@> Text: Hello Mr. Hero...
@> Play BGM: 'BossFinal_Intro', 100, 50, 50
@> Loop
@> Control Variables: [0005:MIDI Pos.Curr] = MIDI Play Location (Tick)
@> Conditional Branch: Variable [0005:MIDI Pos.Curr] >= Variable [0006:MIDI Pos.Dura]
@> Control Variables: [0006:MIDI Pos.Dura] = Variable [0005]
@>
: Else
@> Play BGM: 'BossFinal', 100, 100, 50
@> Break Loop
@>
: Branch End
@>
: Repeat Above
@> Text: This is the moment when we meet for the final battle!




Agora, supondo que vários mapas ou todas as cidades tenham sua própria introdução e você não queira ter que criar um evento desse tipo para cada mapa copiando e colando, lembre-se de que o comando Apagar Evento em Eventos Comuns só funciona no RM2K3 :

Criado por Dante, inspirado na versão de 2007 da RPG Menace - A Ameaça RPG, feito com Rails 8.1.3, Ruby 4.0.5 e 💛.