I'm disappointed that not all NSF files contain sound effects. [snip] If anyone wants to point me to a comprehensive guide about NSF...
Whether or not the sfx can be included in the NSF often depends on how they are programmed into the game.
NSFs operate on some basic assumptions:
- Each track is prepped by an "Init routine" which does some rudimentary setup
- A "Play routine" is called every frame to advance the logic and playback the song
This works well for music because that's how virtually all music engines operate. The init routine will either prep some pointers, or set some internal flag which tells the music driver to load a new song. Then the play routine will run the music driver to step through the score and play back the actual song.
Some (but not all) music drivers embed sfx capabilities into the driver.... so that sfx are played back the same way music is. For those games, sfx can be easily included in the NSF because they're treated just like any other song.
Other games (FF1 is an example), don't have sfx in the music driver, and instead have multiple different playback routines for sfx (often in different banks). Some sfx playback is even hardcoded in game logic! So if you want to try to include those in an NSF rip, you'd have to rip several different playback mechanisms, and write a chunk of custom code to "fork" init and play logic to choose the correct mechanism for the selected track.
It's more difficult than it might seem... since it requires a pretty solid understanding of where all the data is in the ROM. Rippers generally don't have to delve that deep into the ROM or get that much of an understanding of the underlying engine. They just have to find the play routine and extract it --- which can often by found easily by doing a stack trace from an APU register write.
In FF1's case... some of the sfx aren't even updated every frame... but are paused for it to complete animations. So if you just pull out the sfx engine and play it back normally, the sfx will not sound how it does in-game.
So yeah... sfx in NSFs is a can of worms. It's not that the rippers were lazy and didn't include them... it's that sometimes it just isn't practical to include them.
As for comprehensive guides on NSFs.... the format itself is pretty basic:
http://wiki.nesdev.com/w/index.php/NSFAside from what I just mentioned above and the ref page describing the format, I'm not sure what else you'd need to know... but if you have further questions I'd be happy to answer them.