Final Fantasy: Crystal Chronicles (GC) BGM/WD/WI reverse-engineered by BlackFurniture at 12:24 AM EDT on August 16, 2016
Hi everyone
I've been spending some time reverse-engineering the wavetable (WD), instrument info (WI) and sequence (BGM) files for Final Fantasy: Crystal Chronicles.
The file formats are a similar to the PS2 Squaresoft BGM/WD files, but specifically tailored for the GameCube. For example, the endian is different, looping ADPCMs are used, ADSR is done in software, etc. FFCC also has instrument and sample names stored in .wi files, even though they are not actually used in the game.
I discovered that VGMTrans is slightly off, and misses or misinterprets some variables in the data, so my discoveries may be useful for that project (if it's still being maintained?). Reverse-engineering was helped by the fact that a debug symbol map was left in the game data, so I was able to restore some function names.
I have written a BGM/WD/WI to Renoise song converter, which I believe is quite accurate. It maps everything, i.e. song loops, notes, ADSR, and track effects/commands.
Renoise .xrns for every BGM: Download Converter source: GitHub
The only thing that was difficult to map was the reverb effect parameters, but I think my solution is pretty faithful to the original.
Please let me know if you hear anything odd in the songs. You can listen to them using the free version of Renoise (even though you can't render to files using the demo).
The next step would be to get rid of Renoise and write a custom player in C++/Python/both. I'm not sure if that would be worth my time, but I'd like to know what you think.
@Delon: Some of BGM MIDI commands don't map very well to standard MIDI. Also, at least in FFCC, you have long acoustic recordings or premixed clips that are turned on using note-ons. You obviously can't convert that to meaningful MIDI.
Generally, I'm not particularly interested in exporting/importing MIDI, or really modding any files.
@hcs, @Nisto: Thanks! I'm currently uploading a render of all the songs to SoundCloud. Will update the thread when it's done.
It also includes audio streams (which were already playable with vgmstream).
I'm still in the process of renaming the tracks, but this should do for now. I'm uploading the raw .wav files as well, and will update the thread when done :)
100 - Departure 101 - Annual Festival 105 - Today, Becoming Tomorrow 106 - Across the Divide 107 - The First Town 109 - Magii is Everything (sans opening) 111 - Monster's Dance ~Rondo~ 112 - I'm Moogle 113 - Make a Resolution 115 - Goblin's Lair 118 - To the Successor of the Crystal 120 - Sleeping Treasure in the Sand 121 - Orgel of Water 123 - Mag Mail 131 - Promised Grace 134 - Eternal Oath (sans opening) 135 - Something Burns in the Heart (sans opening) 136 - Unite, Descent 137 - Sad Monster 139 - My Den 156 - Silence 159 - Magii is Everything (Opening) 184 - Eternal Oath (Opening) 185 - Something Burns in the Heart (Opening) str0001 - Myrrh Tree str0002 - Sound of the Wind str0003 - Starry Moonlit Night str0006 - Thoroughly Blue str0007 - Water of Life
Some of the songs do not start right, meaning there are pieces missing. Still, this is really great progress, and I hope to see the aforementioned issue fixed soon!
"Some of the songs do not start right" This reminds me... vgmtrans rips some Zelda Spirit Tracks (Nintendo DS) songs incorrectly. For example, the train theme is missing intro, and only plays a looped segment once. That's because Spirit Tracks uses variables to control looping, and vgmtrans ignores variables and always jumps, skipping parts of the song.
Maybe there's a similar issue here, where a variable isn't initialized or processed correctly by the decoder, leading to layout errors? (Another possibility is starting decoding from the wrong address).
Note that I have absolutely no experience with FFCC.
----
Is Renoise an appropriate format for decoding, editing, reencoding, and porting sequenced music between games? Does it maintain the structure (jumps and calls) of the original game sequence? If so, I don't have to design my own format. Yay^!!!!~
Uikiri: Note that the intro to some of the tracks is stored in separate tracks. IIRC, the intro can be found in track_id + 50. Maybe I can merge these in the future, but the data is there. In the game, the intro transitions into the main track after selecting your equipment, so it's not clear how many times we should loop the intro either.
nobody1089: Renoise supports at least 1 loop point, but maybe it supports more. It was enough for FF:CC, at least!
You may be able to use it as a common format for sequenced music, but that probably depends on the format(s) you want to target.
To download this, copy the link, type a # at the end of the link, and then paste the key after the #. I don't know how long this will remain up, as Mega seems to be getting more strict with copyright stuff. They explicitly made me agree not to "violate copyright", so get it while you can.
Would it be appropriate to upload this to vgm.hcs64.com? It's not quite native music, but it's probably the closest we'll get, barring some herculean effort to create a sort of specialized .xsf format.
if someone does though, i hope he/she doesn't get clapped down while doing so! or being told that "posting recorded sequenced music" or just plain sequenced music is not allowed.
Yes. You can get the file via that hash with a local IPFS client, or you can try using a gateway like ipfs.io/ipfs/, cloudflare-ipfs.com/ipfs/, etc, just stick the hash on the end of the URL. You'll need a downloader that supports resuming, because a gateway is almost certainly going to timeout several times before finishing a file that large. (This is a generic "you", I know you don't need this, Uikri)
The idea is that anyone can host it, then, and a client with the hash will find available sources. If you're running a client daemon it automatically caches and makes available stuff you've downloaded. It's like a trackerless torrent via a magnet link in some ways.
Or there's this http link, but I make no promises about availability. (Really no promises about IPFS availability, either, but at least someone else could mirror it.)
I wasn't able to find a copy, but fortunately the converter source code is still up at the GitHub link, so it should be possible to convert them again.
Reupload of the Renoise .xrns files for every song. https://www.mediafire.com/file/urfzi4t07pujgd9/FFCC_Renoise.zip/file
@hcs Would you be willing and able to help me understand how to use the converter code on github?
Also, I've got the songs playing in Renoise, and there is an addon that lets you export all the instruments/samples as wav and just... holy shit, BlackFurniture gave us so much more than I realized at the time. I wish I could express my gratitude to them.