-ImportLSMV can now import GB(C) movies created with LSNES's gambatte core.
--It doesn't sync perfectly because of the subframes, but it does for a while, so the conversion is sane.
--GB(C) .LSMV files currently always have SRAM files packaged with it, which is a bug with LSNES.
---Ilari told me that a fix for now would be to ignore 0 byte SRAM files, so that's what I did.
---There are some cases in which the spurious SRAM files aren't 0 bytes, but that's on Ilari to fix, so I'll let this case fail. Yay, I contributed to LSNES!
-Fixed the controllers used code. The docs had the reserved byte and the controller flags backwards.
-Properly advanced past the savestate bytes. I was reading the wrong size.
--Fixed "controller in use" handling.
---Applied the same logic to ImportVBM, refactored ImportVMV to match.
--Prevented more than 2 controllers from crashing the controller types check for 1.51 and up.
-ImportZMV
--Showed warning messages for both mouses if enabled.
--Marked the controllers used just like I mentioned previously, though it seems to show that no controllers are plugged in...
--Went past the savestate data.
--Added Checksum / GameCode for ImportVBM because those seem more relevant.
-ImportVMV has problems with resets. Not a high priority, but still something worth looking into.
-Parsed the header for ImportZMV. The remainder looks pretty ugly...
--It doesn't seem like I have to worry about PCECD anymore.
--I also don't think I can validate the CRC32 for .SMV because I don't have the original ROM bytes. This was probably used to compare a ROM loaded by Snes9x with the movie. I added it to the movie header in case a core could utilize it.
--I don't think the "start data" of a .VBM is important. After looking at the docs again, it's clear that it's just another term for either the movie's savestate or SRAM, and that the related note about controller data is just an approximation.
-Added Platforms for Import functions that were missing them.
-Merged the ImportSMV functions all into one; most of the stuff is the same.
-Implemented .SMV 1.51 handling. My Arcade's Revenge run synced and beat the first level!
--This also seems to work for 1.52; 3295S finished Act 2.
--1.53 seems identical as well...3587S syncs all the way through.
-Next comes ImportZMV.
--Added platform name.
--Handled input.
---The input seems reasonable, but the frame counts were originally off by 2. Because the docs say "The controller data contains <number_of_frames + 1> frames," I connected the two and discarded the first frame read. I also noticed that Snes9x first accepts input at frame 0 whereas BizHawk does at frame 1, so that makes up for the other frame. I think this is correct.
--Apparently, Snes9x adds garbage bytes to the metadata when you play a movie. The stuff we want, however, is before a NULL character. As such, I refurbished RemoveNull into NullTerminated, which takes a string and returns everything before the first NULL character. Now the author will be displayed properly no matter what.
-Removed an unncessary dependence to Global.Emulator.SystemId in Get/SetControllersAsMnemonic which made it so that importing a movie without loading a game resulted in blank frames.
-ImportVBM now actually appends the frames it parses. Looks pretty good.
--Note that BizHawk cannot currently do anything with the platform (GB, GBC, GBA, SGB), nor are any of the "other" buttons handleable.
2) Ram Poke - fix poking of signed/hex values, set the signed value to the value of the address on load, other misc fixes regarding signed
3) Hex Editor - add Poke to menu/context menu and Ctrl+P hotkey
--I think the proper way to obtain this is through the metadata, which I still don't know how to handle.
-Fixed the savestate offset.
-Parsed out the CRC32 of the ROM, though I haven't done anything to validate this, which is probably a good idea.
--Handled authors, gametype, systemid, coreversion, rom.sha256, moviesram.*, savestate, and subtitles.
--Skipped port1, port2, controlsversion, projectid, saveframe, lagcounter, pollcounters, hostmemory, screenshot, sram.*, rrdata, starttime.*, savetime.*, and prefix.
---I don't think any of these are useful for us, at least not at this stage.
---The other *.sha256 files will be useful if / when BS-X, Sufami turbo, and SGB are implemented.
--Handled flags.
---Handled resets.
---Disallowed subframes and delayed resets.
-.LSMV is good enough for now. .SMV and .ZMV coming next.
--Haven't done anything with the flags because I don't know what they are supposed to do yet.
--Speedy Gonzales v2 doesn't sync after being converted, but I don't think that's my fault.
-Flags and other data will be parsed soon.