Er, no... SNESTool does parse that. In fact, SNESTool is where I copied that clip command from.
Oh, oops x.x
For some reason, I thought you came up with that command. Thanks for the correction.
Well, I went ahead and put together a Cocoa version of the UPS patcher because I'm a mac user...
You rock!! Thank you very much :D
Take IPS, make it use XOR instead of plain old overwriting, and add checksums for everything but the patcher itself, and you basically have this format.
That was the idea. Fix what's wrong with IPS, and keep the new format as simple as possible. And as you can see, people can already write their own patchers in ~30 minutes time.
What's the point in keeping the checksum of the patch file itself?
To detect corruption errors in the patch itself. Sure it's rare, but we're only talking about four bytes. Call it peace of mind.
And it discourages hand-hacking of the patch (with a hex editor) since you basically have to run it through a program afterwards in order to make it correct because you, the one hand-hacking it, cannot be trusted.
Does anyone really sit there and hack IPS files directly? Modify the resultant ROM for that. I'm aiming for features more likely to be used. People hand-editing patches is less likely than people applying patches and wanting to make sure the patching process succeeded. Compare to something outside your niche: how many people burn ISOs and want to validate the burn, and now how many people manually hex edit the ISOs by hand first?
Seriously, again ... how many people modify IPS patches by hand? How many people will be seriously inconvenienced by not being able to do this? There are more appropriate tools for this, such as xkas (yes, it can even be used on systems other than SNES and GBA, albeit without opcode support.)
And if you can compute XOR diffs between two files in your head while modifying data -- wow. My hat is off.
For the target file itself, UPS records one checksum. Suppose there are multiple supported versions of the target data (for example, a patch that can work with both FF6 v1.0 and v1.1)? What then?
XOR data doesn't play well with multiple versions. Again, I had to weigh what was more practical. What happens more often? Someone makes a patch that can safely convert multiple versions of a game, or someone patches a game that has a header when the patch was made against an unheadered ROM, or a hacked / modified ROM, or a different version of the same game (v1.0 vs v1.1)?
The DQ6 IPS patch by NoProgress is the only case I think off off the top of my head that applies to multiple input files. Does anyone else want to compare a random sampling of ~50 IPS patches and determine how many contain this ability?
Even if you change parts that differ between the two versions, with IPS, you could make a patch that supports both: add data that can change both to a known state.
Right, that's the trade off. And with IPS, you can never revert a file to its original state, using only the modified file and the patch.
Both are rarely used features, but I believe the latter is more valuable. The latter has novel uses outside of ROM translations (eg file backups), too. We can disagree if you like.
So, to be honest, I don't see how this is significantly better than IPS
Of course not, you've pointed out every possible disadvantage while ignoring every advantage but one. Not surprising since you're working on your own competing format.
Recap:
UPS is better than IPS because:
- it guarantees that you have converted file X to file Y; it can use this information to quickly determine whether a ROM header needs to be stripped or not
- it verifies the patch file integrity itself
- it's bi-directional, so you can un-apply hard patching if needed; easier to store / re-download a ~100kb UPS patch than a ~32MB Japanese ROM backup
- it supports infinitely sized files, no 16MB limit
- it's easier to implement
- no ambiguity in the file format, and no "extended features" -- all patchers make 1:1 identical UPS patches
- because of its simplicity and PD licensing, we will be adding it to multiple emulators for soft-patching -- ZSNES, Snes9X and bsnes for sure; VBA-M most likely; as it's supported by multiple emu devs, we'll be developing libraries to get this into even more emus
UPS is worse than IPS because:
- you can't apply the same patch to multiple input files to get the same output file
- you can't edit it directly in a hex editor ... yeah
UPS was a peer reviewed format. You're the first person I've seen who prefers uni-directional patching to bi-directional XOR patching. I wish you would have chimed in during the past two years myself, Nach, Derrick and others were discussing the format spec on this very forum.
I understand you want to promote your own format, but please don't attempt to do so by denigrating ours. I'll return the same respect to your XRIF format.