'sup, today I bring you another soundtrack that I worked a few months ago, which turned out to be my largest project thus far.
The game in question is Last Bible 3, which you probably only know because of Underworld Forest from the SMWC greatest hits, and maybe a couple more songs from it that are already in the music section. It turns out that most of the music in this game is great, but fairly unknown, and also not the easiest to port compared to other SNES games.
Since there's a lot of songs in here (62), I didn't try to ear port it or use SPC2MML or whatever, as it would've taken forever, so instead I did a bit of disassembling of the original spc driver code and wrote a small SPC->MML converter for the game, which turned out to be pretty fun to do and very useful for making this project possible. If you're interested, here's the disassembly (very incomplete and sparsely commented), and here's the tool.
With the coding out of the way, it was just time to fix the outputs (like volumes, pitch bends, tunings) and optimize them, which took a couple months of work. I decided to also re-port the songs that do already have ports since with the tool I could get more accurate (and usually smaller) results.
I've actually pretty much identified the vast majority, if not all of the VCMDs across all of the builds for this particular sound driver, so I'll contribute my research here to improve your utensil!
First off, this build is an exact match to Majin Tensei II: Spiral Nemesis: thus, the code could be adapted accordingly to that game's memory location references if needed.
For your unsupported commands...
$3E writes the voice bit directly to the KON DSP register. Thus, it can essentially mean to retrigger a previous note, just like what you guessed. (You put the comment in the wrong location: that comment is for VCMD $3D: $3E's should have gone into $095C).
$D0 sets the number of ticks to subtract from the overall note length to 1 tick.
$D1 sets the number of ticks to subtract from the overall note length to 0 ticks... which means subtraction is disabled.
$DA fades in the master volume and has two parameters: xx is the number of ticks per step, and yy is the amount to add to the MVOL DSP registers per step. This could be translated to the global volume.
$EA is a key off VCMD, but its execution is slightly different: this one writes the voice bit to the KOFF DSP register via overwriting it.
$EB subtracts the overall note length by the parameter indicated.
$EC is the opposite of $DA, and fades out the master volume. The parameters are the same, except yy is the amount to subtract the MVOL DSP registers per step. Both of these sound like they could translate to a song volume command of some kind.
$ED outputs the value specified to $2143/$F7. Unfortunately, it's only one byte, whereas AddmusicK's data out VCMD uses two bytes.
$EE is not useful to AddmusicK: it disables extra music/SFX from playing (they can still be stopped). That's kind of like setting both !ProtectSFX6 and !ProtectSFX7... but there's no custom ASM support in AddmusicK.
$EF is the opposite of $EE, and turns that back on.
$FA sets a voice to be keyed off xx ticks prior to the end of the note, like a type 2 remote code event. This could be replicated through the quantization command (you'd have to keep track of velocity, though) or a type 2 remote code event (with DSP register write of the voice bit).
$FB works like $EB, but the paramter is an index ID (as in, it's an offset from the note length index ID) instead of being in ticks.
$FE triggers another sound ID. This means you have to read a header all over again.
Some other notes...
$D2 is indeed identical to $E0 except it doesn't store to a backup. The backup I believe is used with a sound driver command that restores from a backup after interrupting it with something else.
I mirrored these descriptions in the Github repository for future reference.
Also, that's a nice start to the disassembly! Looks like we still have some ironing out to do as far as distinguishing between code and data, but that's otherwise a pretty good start!
Of course you already know everything about this, didn't doubt it lol thanks for the insight, and yeah I didn't spend too much time trying to figure out all the inner workings since they weren't really important for the task at hand... If I ever come back to the tool for some other game I'll keep them in mind
LB3, I pretty much love all the songs in Last Bible 3, requested quite a few of them, and now I shall want no more, for Kevin has fulfilled that little nudge in my mind and heart. You're a legend man, porting one soundtrack after the other. I have to ask, what is your drive to do this?
Why hasn't anybody made ledge grabbing and crawling ASM yet?
Finally, the so awaited and magical OST is now making here on the site! People now have much more options to choose for their hacks, other than being limited with just the Undeworld Forest. That's then defines an end of an era.
Well, jokes aside lmao. That's REALLY impressive that you decided to make a program, just to help you port this big OST. That shows how've grown with programming along the time!
Amazing stuff as usual, great job on it!
Wow, that's a lot of cool music. Battle 1, Battle 2, Battle 3, Boss Battle 1 and Boss Battle 2 are fantastic songs, that aside from the difficulty in the technical aspect, I'm surprised that have not been ported yet. Fantastic work in bringing those to SMW.
I'm not at all familiar with this game, but the amount of effort you poured into both the technical and music side of this project is phenomenal in and of itself. Not quite sure what the meme here is as mentioned by a couple other users, but this soundtrack has quite a few jams throughout it. Thank you for your hard work on this, I can tell a lot of people are going to appreciate it.