Next Page

UF's adventures in BMS by unknownfile at 11:17 AM EST on December 15, 2006
This thread created by popular request.

BMS (aka JaiSeq) is a sequence format from Gamecube games. As you are all aware, I have been doing analysis on the format for a while.

Known types of JaiSeq archives:
- SeqBank (.arc files) (Super Mario Sunshine, Luigi's Mansion)
- RARC (.arc files) (Zelda WW, Twilight Princess)

For games that use JaiSeq, take a look at the GC stream database, JaiSeq-powered games are usually identified as having "AW" files.

The purpose of this thread is to analyze the formats used by JaiSeq, including AW (samples), AAC (init files), BMS (sequences), and integrate support in in_cube.

More stuff coming soon.
by PokeParadox at 12:29 PM EST on December 15, 2006
All I can say is: Good luck :)
by unknownfile at 3:38 PM EST on December 15, 2006
And voila, I have written an extractor (with help from hcs) that extracts BMSes from seqbanks. The header is similar to the following (C code):

// Generated by BreakPoint Software's Hex Workshop v4.20

unsigned char rawData[16] =
0xA4, 0x08, 0x00, 0xA4, 0x09, 0x00, 0xA4, 0x0A, 0x00, 0xAC, 0x0B, 0x00, 0x00, 0xFE, 0x00, 0x30,
} ;

Regarding the sequences themselves, I am currently doing analysis on the sequence format. Once again, I urge all of you to annoy hcs to decode the .AW sample blocks so that I can figure out how to play this shiz.

You can find the BMS sequences at

And yes, I am aware the extractor is somewhat broken.

by Mouser X at 1:44 AM EST on December 16, 2006
I know that BMS files aren't playable, as they're not understood at all yet. However, because they're sequenced based, I'd recommend that you look into MIDI files, IT files, MOD files, and things like that. That way, you can familiarize yourself with what sequenced formats look like. Hopefully, that'd make understanding BMS easier. Also, to ease the programming end of it, I'd suggest you look for an open source MIDI/IT/MOD/etc. player. That way, you can see how they did things, and modify it to fit your needs.

Of course, a complete re-write might be in order, to accommodate BMS files. Even so, I'd think having something to learn from would help out a lot.

Anyway, good luck on this. I always look forward to whatever progress you may have had. Mouser X over and out.
by jurassicPieter at 3:02 PM EST on December 16, 2006
I wish you good luck. A few years ago i already tried to decipher them but i suck at reverse engineering(not enough patience) so i gave up pretty early only knowing the files start with a 4 byte signature.
I think there is probably more similarities with the way the nintendo ds plays sequenced data.

Edit: I just checked the bms of Donkey Kong Jungle Beat(yes i wanted the music from that game) and what i noticed is F0 and FF are very common and often with 2 bytes in between so i guess these are the note on and note off events. I could be completely wrong though.
Also the the 5th byte the bigger it is the more i see E0 in the file followed by 00 and another byte(and then E0 again). Sounds like empty channels.

edited 4:14 PM EST December 16, 2006
by unknownfile at 4:42 PM EST on December 16, 2006
There is always the possibility of volume controls. Anyways, my extractor is still being written, so I can't really post it yet.

Stuff to implement:

- RARC support
- Yaz0/Yay0 support

Stuff to fix:

- fake RARC suport
by unknownfile at 9:57 PM EST on December 19, 2006
While looking through the Pikmin ISO, I came across a DLL, assembled in x86. This appears to have a lot of the game code inside of it.

Sequence controls might be in there as well...


It was rejected by the SMTP server.

edited 10:32 PM EST December 19, 2006
by valiant at 2:42 AM EST on December 20, 2006
Seems like you sent a mail to Colin Reed. You could always ask him to send you a specification of the BMS format. ;-)

Kudos to you if you manage to reverse-engineer the sequenced files.

edited 2:46 AM EST December 20, 2006
by unknownfile at 7:17 PM EST on December 20, 2006
Pikmin anal-ized.

Sequences now have a different flag. For example:

unsigned char jaiseq_pikmin[4] =
0xC1, 0x07, 0x00, 0x0E, // extra flags
} ;

is different than

unsigned char jaiseq_standard[4] =
0xC1, 0x00, 0x00, 0x00, // unused bytes?
} ;

EDIT: err, screw that

that is the standard format, just stored a bit differently

edited 7:37 PM EST December 20, 2006
good news by unknownfile at 8:36 PM EST on December 21, 2006
AW sample banks figured out, i guess

it is essentially AFC, just modified in a way that I don't know how to decode yet

it's probably mono

Next Page
Go to Page 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Search this thread

Show all threads

Reply to this thread:

User Name Tags:

bold: [b]bold[/b]
italics: [i]italics[/i]
emphasis: [em]emphasis[/em]
underline: [u]underline[/u]
small: [small]small[/small]
Link: [url=]Link[/url]


HCS Forum Index
Halley's Comet Software
forum source