TerryCavanagh/VVVVVV

Help: `vvvvvvmusic.vvv: Header 0's size value goes past end of file`

Closed this issue · 5 comments

Hi! This is not really a bug report, but more a request for help :-)

I'm working on making SDL2 work for the Wii and I was looking for some games to test it against. I found VVVVVV, and decided to give it a try. After some hours of work, I got it to compile and run in the Dolphin emulator, but the game quits before showing any graphics. I've spent some time debugging it, and I found that it crashes somewhere inside

pppppp_blob.unPackBinary("vvvvvvmusic.vvv")

I've added some debugging lines before this call, and I see them, while I don't see the messages after it. I also see a suspicious warning:

vvvvvvmusic.vvv: Header 0's size value goes past end of file

Do you have some hints? Could it be that I got a corrupted data.zip file? Or (more likely) could this be some endianness issue? The Wii has a PPC processor.

Or (more likely) could this be some endianness issue?

This is pretty likely - the headers in the music file are in little endian format and they're just raw copied over to a struct...

I don't think the Wii has enough RAM to load the standard vvvvvvmusic.vvv in memory anyway - it's 61.7 MB... There is a method to load music in with loose files, but first I'd try to get it working without any music file in place at all - it should be possible to just remove it from the zip.


(Actually this makes me think... Do we even need the loose files method? Couldn't we just keep the PHYSFS_File handle open and seek to wherever we need when a specific song is requested? If we wanted we could even dynamically switch over to this system if a malloc returns NULL... See the potential if we switch over to our own VVV_malloc? If any malloc anywhere were to return NULL, then free all the music that has already been loaded, switch the music file over to streaming mode, and continue on as normal if the same malloc now works...)

I don't think the Wii has enough RAM to load the standard vvvvvvmusic.vvv in memory anyway - it's 61.7 MB...

Oh, indeed! Thanks Daaav, that was very helpful!

There is a method to load music in with loose files, but first I'd try to get it working without any music file in place at all - it should be possible to just remove it from the zip.

Yes, removing the music file from the file makes the problem go away, and I finally see the graphics (which also needs some fixind in my Wii SDL module, since it assumes a 640x480 resolution, and the game appears on the top left quadrant of the screen :-) ).

Do you know how I can extract the music files from the vvvvvvmusic.vvv file?

Do you know how I can extract the music files from the vvvvvvmusic.vvv file?

I found a useful utility for this exact purpose the other day, called SongFlip. https://glaceon.ca/V/SongFlip/

The support for loose files was actually originally implemented specifically for ports to consoles that couldn't hold all music in memory, though I never actually finished the 3DS port that was the motivation for it.

I found a useful utility for this exact purpose the other day, called SongFlip. https://glaceon.ca/V/SongFlip/

Thanks, worked like a charm! Now to the next issue: the MusicTrack constructor loads the music file into memory, and all music tracks are instantiated as the game starts, so I'm again out of luck with the Wii memory :-(

But this issue looks fixable, I'll try to see if I can come up with a patch that loads the music in MusicTrack::Play() and frees it in MusicTrack::Halt().