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.

edited 12:25 AM EDT August 16, 2016
by Delon at 2:11 PM EDT on August 16, 2016
What i would like to have is this:
A mid2bgm converter in addition to a bgm2mid converter like vgmtrans.

Since vgmtrans is unable to convert a midi file back to it's original bgm format again.

And have you found this WIP project before? :
https://github.com/GovanifY/BGM_Tools

Can someone make it work on (Final Fantasy X-2) and not only (Kingdom Hearts) PS2 games?

It's the PSF2 files i want to modify in a midi editor like (FL STUDIO). And then convert them back to the (Final Fantasy X-2) .bgm file format.

And finally use the (mkpsf2) application in cmd.
To create a PSF2 song.

I can't stand waiting a decade or two as nobody1089 said to me, until he gets to the PSF2 game specific music drivers and so on + stuff like that.
by hcs at 2:26 PM EDT on August 16, 2016
Delon, that's not relevant to this thread.

Nice work BlackFurniture!
by Nisto at 3:54 PM EDT on August 16, 2016
Yeah, congrats on your work! And cheers for using Renoise.

I might check it out even though I'm not particularly a fan of FF Crystal Chronicles... since I can!

edited 3:54 PM EDT August 16, 2016
by BlackFurniture at 7:17 PM EDT on August 16, 2016
@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.

by BlackFurniture at 10:58 AM EDT on August 17, 2016
The playlist is ready: SoundCloud

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 :)
by starerik at 11:22 AM EDT on August 17, 2016
This sounds amazing! I actually had no clue that CC was sequenced.
by JFD62780 at 4:34 PM EDT on August 17, 2016
*listens to song 120 on the ReNoise Demo which he begrudgingly downloaded... and sobs happily...*

The art of reverse engineering... It's grown up...

I'm so proud of you, BlackFurny... *spills more liquid pride*

edited 4:36 PM EDT August 17, 2016
by BlackFurniture at 6:12 PM EDT on August 21, 2016
All the renders as .wav (including streams).
Download (2.5GB)

Will update the first post as well.

EDIT: Ah, I guess I can't do that?

edited 6:12 PM EDT August 21, 2016
by MurraySkull at 5:31 AM EDT on August 22, 2016
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
by Koto at 7:29 AM EDT on August 22, 2016
Congratulations for your work and thanks for the renders.

Could you lend us the loop info, to make custom files playable with vgmstream? Thank u

See ya
by Uikri at 8:15 PM EDT on October 10, 2016
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!
by nobody1089 at 5:08 AM EDT on October 12, 2016
"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^!!!!~

edited 5:08 AM EDT October 12, 2016
by BlackFurniture at 5:29 AM EDT on October 24, 2016
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.
by Uikri at 2:30 AM EDT on October 26, 2016
BlackFurniture I can more than work with that. I was just wanting the intros to be identical to the soundtrack release. I love you.

edited 2:32 AM EDT October 26, 2016
by Uikri at 7:23 AM EDT on June 11, 2020
Mega removed the streams and renders upload, so I am reuploading it, because we waited over a decade for this, and I'm not letting it stay gone.
by Uikri at 7:50 AM EDT on June 11, 2020
And here it is!

Link: https://mega.nz/file/7RdjHYaR

Key: OZbyGSJ0T3LRU_LQxwWVVrGD7EFf78ECpqc0H8a3N_g

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.
by Mysterious Stranger at 5:13 PM EDT on June 11, 2020
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.
by AnonRunzes at 6:05 PM EDT on June 11, 2020
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.

edited 6:09 PM EDT June 11, 2020
by hcs at 11:02 PM EDT on June 11, 2020
Not going to provide a link, but I compressed it (WavPack, saves ~0.9GB) and I'm serving it on IPFS, Qmchjg5PUqRZhTV5bU6iSr3tLRxRsZ13CPmMnkrRyzNmLd.
by Uikri at 3:40 PM EDT on June 16, 2020
hcs, is IPFS the "InterPlanetary File System"?

edited 3:39 PM EDT June 16, 2020
by hcs at 7:35 PM EDT on June 16, 2020
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.)

edited 7:36 PM EDT June 16, 2020
by LusciousCloud at 5:52 AM EDT on August 22, 2023
I'm interested in the rips that are in Renoise's .xms format, but the link for them is dead. Would anyone happen to still have those?
by hcs at 10:32 AM EDT on August 23, 2023
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.
by LusciousCloud at 12:22 PM EDT on August 24, 2023
Hah, I completely blanked on the github, didn't even notice the link to it in the OP, that's silly. Thanks for pointing it out :-)
by PikpikPretzel at 6:19 AM EST on January 31, 2025
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.

edited 6:37 AM EST January 31, 2025
by hcs at 12:37 PM EST on January 31, 2025
I'd never used the tool, sorry, not sure how to run Python with a C++ module like this. Thanks for the reupload!


Go to Page 0

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=http://www.google.com]Link[/url]

[img=https://www.hcs64.com/images/mm1.png]
Password
Subject
Message

HCS Forum Index
Halley's Comet Software
forum source