Likewise, patchers and emulators need to be updated to support the new checksum extension. Since they need to be updated anyway, you might as well update them by adding BPS support instead of yet another new format.
That's the thing though, this isn't yet another format. It's still IPS. People who are too stubborn to update will still be able to use apply these new patches.
The whole point is that updating will grant you extra functionality -- but if you don't update you don't gain or lose anything. So updating
isn't necessary. Nobody will actually have to download a new patcher.
The problem with newer patch formats like BPS is familiarity and incompatability. Aside from there being several conflicting formats, everyone knows and is familiar with IPS -- and they
have to be because 99% of NES/SNES/etc ROM hacks are in IPS format. So everyone in ROM hacking needs an IPS patcher. It's kind of a pain in the arse to download a hack that's in a format you don't have a patcher for, then you have to hunt down a new patching program. And yeah there are programs that apply multiple formats -- and you might not say it's that big of a deal... but it kind of is.
(Your choice of words in describing "yet another patch format" is sort of a testament that there isn't any real successor to IPS -- there are just multiple competing formats. That might be another reason why none of them have really caught on)
Ultimately I mostly agree with you guys. IPS is stupid and nobody should really use it. But people still do. And at this point it's unavoidable. IPS has too big of an existing library, user base, and software support to ignore. Simply discarding it and using a different format might be the ideal solution -- but it is not practical -- which is why it hasn't happened and likely will not happen at any point in the foreseeable future.
If anything, this idea is the worst of both worlds, because the users who are still stubbornly using ZSNES 1.42 in 2016 will be able to use these extended-IPS patches without seeing any of the actual benefits of the extension.
That's not the worst of any world -- that's the entire point.
Upgrade to deluxe package? Get extra bells and whistles!
Don't want to upgrade? Don't worry, you don't have to, it'll still work.
IMO all software packages should take that approach instead of trying to cram updates down users throats. Backwards compatability is a wonderful thing.
edit: I changed my mind, let's post it: a nice way would be to count the checksum over the old bytes over the patched offsets. This way the patch applies only to files where those particular locations were unchanged, which in various cases rules out bad alignment (header vs no header) and obviously uncompatible other hacks (though some risk remains). Would still fail to apply in some desirable situations where ips would work.
That's a
FANTASTIC idea! =)
Full-file CRC does block that. Changed-byte CRC would be much more flexible.
This would mean you'd have to parse the entire IPS before calculating the CRC... so it might make sense to put this on the end of the file instead of the front.
Putting it at the front has a problem I didn't think of before... it hinders patch-layering for patches which change the first couple of bytes (which may be common in NES hacks).
Maybe they could be put at the front... but instead of the offset always being 0, it could be arbitrary -- that way you could put metadata blocks in a region of the file that the patch will be overwriting anyway. I think I like that better.
It is the reason why I like IPS personally. That it doesn't ensure file identity. This property could be improved too but.. I don't know if this is the discussion for that.
This is absolutely the discussion for that. I want to iron out all these details before I write up a patcher. =)