Mega Man 2 Scrolling Fix v1.0 By Justin Olbrantz (Quantam) This patch rewrites the method used by MM2/RM2 for vertical scrolling so that it no longer shows visual artifacts on the top and bottom of the screen during scrolling. Patches for both Mega Man 2 (USA) and Rockman 2 (Japan) are included. This patch incorporates my MM2 MMC3 patch from https://www.romhacking.net/hacks/7478/. As there is the possibility that in the future the MMC3 patch could be updated out of sync with this patch, this patch includes the .inc files from the mm2mmc3 version it uses, and the compatibility section includes information for mm2mmc3 as well. Mega Man 2 (USA): PRG-ROM CRC32 0FCFC04D / MD5 0527A0EE512F69E08B8DB6DC97964632 File CRC32 5E268761 / MD5 8E4BC5B03FFBD4EF91400E92E50DD294 File CRC32 80E08660 / MD5 302761A666AC89C21F185052D02127D3 File CRC32 A9BD44BC / MD5 CAAEB9EE3B52839DE261FD16F93103E6 Rockman 2: PRG-ROM CRC32 6150517C / MD5 770D55A19AE91DCAA9560D6AA7321737 File CRC32 30B91650 / MD5 055FB8DC626FB1FBADC0A193010A3E3F Others with the same PRG-ROM checksums will likely work just as well. WHY? This patch began as part of the MM2 FamiTracker support patch, before being split into its own patch as it could be useful even without FamiTracker support. The buggy implementation of DPCM sound in the NES can corrupt reads from other hardware such as the screen buffer and controllers, and requires special care when reading from this hardware to work around this corruption. One of the two places MM2 reads from the screen buffer is in performing vertical scrolls, as it does not take advantage of NES screen mirroring in this scroll direction (seemingly a holdover from MM1, which lacked the ability to switch between screen mirroring directions). This design also results in a visible scrolling seam at the top and bottom of the screen as new level data is loaded in real time. This patch implements mirroring for vertical scrolling, allowing smooth, artifact-free vertical scrolling. In doing so, it also eliminates one of the ways MM2 reads from the screen buffer. COMPATIBILITY This patch uses file offsets 3bd34-3bd3f that were previously free. As well, this patch frees up the following ranges that were previously used: 3ca26-3cb1b (US) / 3ca23-3cb18 (J) ($f6 bytes) 3d1a2-3d1ee (US) / 3d19f-3d1eb (J) ($4d bytes) Additionally, this patch significantly modifies the following ranges: 3d191-3d1a1 (US) / 3d18e-3d19e (J) MMC3 Patch mm2mmc3 frees up the following previously used range of file offsets: 3804f-38060 (12) As well, mm2mmc3 substantially modifies the following ranges: 38038-3804e 38061-38066 3c010-3c060 3d09d-3d0e6 (US) / 3d09a-3d0e3 (J) Additionally, to free up space mm2mmc3 eliminates the SetMmc1Ctrl function used to set the screen mirroring mode. Instead, hacks should directly set the mirror register MirrorReg to either MIRROR_VERTICAL or MIRROR_HORIZONTAL, should they need to change the mirroring mode. INCORPORATION INTO OTHER HACKS It's perfectly fine to incorporate this patch into other hacks. In such case, please add a line to that hack's readme (or hack description/credits if no readme) indicating that hack uses this patch and link to this patch on RHDN.