Adventures in BMS (Reboot) by Yoshimaster96_2 at 5:31 PM EDT on August 30, 2016
Looking to crack, yet again, the monster that is the BMS file format.
In case you are new, the BMS format is a sequenced format found in several first-party Nintendo games for the GameCube and Wii, such as Sunshine, Pikmin 1/2, Luigi's Mansion, some Double Dash tracks, Zelda, Galaxy, and a few more.
I'm specifically looking for sound effects, as well as looking for some things that were previously missed. So far I found some interesting things:
* A note can have a PPID of 8, in which case it is a 5-byte event rather than a 3-byte event. I think I found 4-byte events too (maybe, verify?) * Some jump and loop events were inadequately described. * Other minor oddities I cannot recall ATM.
Also, do you know how the jumps work and can't implement it, or do you not know how they work at all.
On an unrelated note (no pun intended), it seems the PPID of 8 on a note only does 5 byte events after all. Its format is:
NN 08 VV ?? ??
NN is the note, VV is the volume, and the two ??s are two values related to note length, though IDK which does what. It DOES turn the note on then off though, and is used extensively in sound effects (found in se.scom, pikise.jam, etc.)
So you've been researching BMS further? Do you have any code about it? Online or not?
EDIT: It looks like BMS_DE~1.C supports-ish calls and jumps, but you use C3 and C5 or something, which aren't present in Wind Waker (so I didn't implement).
----
I have a basic implementation of jumps. Arookas has a list of different jump modes, but I don't know if it's complete, nor how different modes work.
I'm trying to maintain the linked-list structure of the original BMS file, while converting note-off events into pitches. This assumes subroutines with note-off events turn the same pitches off every time the subroutine is called. That way, it's easier to convert into other video game formats.
My software is pretty much broken right now.
----
Control (volume) change events have u8, u16, and s16 value. Do you know if the results are relative to magnitude, maximum value, or full swing?
For example: Volume u8(255) vs s16(255) vs s16(32767) vs u16(32767) vs u16(65535)?
I could figure out myself... Once I get my BMS tool *working* again...