« on: April 02, 2016, 08:19:34 am »
The problem if the patcher checks the CRC of the whole ROM before applying patches, is that it will not be possible to apply 2 patches one on the top of the other. However, doing that is often desirable, for instance a translation and two bugfixes patches you'll want to be applied simultaneously.
My opinion is that only the CRC of the patched blocks should be checked, instead of the whole ROM. That way, it becomes simple to check whether two patches are "compatible" or not.
In some cases, the blocks could overlap while still being somewhat compatible, it has happened to me that using PATCH1 then PATCH2 does not work, but that using PATCH2 and then PATCH1 does work. I do not remember the details unfortunately (*). But in those cases, it'd be nice to have just a warning with the location of the potentially conflicting data, but still allows the patching to be done. As opposed to have an error and have the patched refusing to apply it.
In all cases, any sane person will keep a backup of the clean ROM, so even if patching doesn't work, that's not the end of the world, you just throw the failed ROM away and there we go.
(*) As far as I can remember I was trying to patch Chrono Trigger with a french translation, while simulaneously apply the "Level-0" patch. It took me a lot of tries, but eventually I got something that was somewhat working. Apparently the Level-0 patch moves text arround, so applying that patch first and then applying the french translation did NOT work. However, applying first the french translation first, and then Level-0 worked - some text was in english again, (due to the Level-0 patch moving it arround), but the game as a whole still worked.
Now we can all agree that the "Level-0" patch is somewhat defective to do things this way, however, it just happens to do things that way and we cannot change that.