BG2 tilemap was messed up when unpausing (Fixes #20)

This commit is contained in:
Snesrev
2023-03-14 01:25:21 +01:00
parent 34751f5870
commit d265a76f05
2 changed files with 9 additions and 10 deletions

View File

@@ -1049,25 +1049,22 @@ CoroutineRet GameState_13_Pausing_Async(void) { // 0x828CEF
} }
void BackupBG2TilemapForPauseMenu(void) { // 0x828D51 void BackupBG2TilemapForPauseMenu(void) { // 0x828D51
WriteReg(VMADDL, 1u); WriteRegWord(VMADDL, (reg_BG2SC & 0xFC) << 8 | 1);
WriteReg(VMADDH, reg_BG2SC & 0xFC); // fixed: this was missing
WriteReg(VMAIN, 0x80);
WriteReg(DMAP1, 0x81u); WriteReg(DMAP1, 0x81u);
WriteReg(BBAD1, 0x39u); WriteReg(BBAD1, 0x39u);
WriteReg(A1T1L, 0x5C); WriteRegWord(A1T1L, 0xDF5C);
WriteReg(A1T1H, 0xDFu);
WriteReg(A1B1, 0x7Eu); WriteReg(A1B1, 0x7Eu);
WriteReg(DAS1L, 0); WriteRegWord(DAS1L, 0x1000);
WriteReg(DAS1H, 0x10u);
WriteReg(DAS10, 0); WriteReg(DAS10, 0);
WriteReg(A2A1L, 0); WriteRegWord(A2A1L, 0);
WriteReg(A2A1H, 0);
WriteReg(NTRL1, 0); WriteReg(NTRL1, 0);
WriteReg(MDMAEN, 2u); WriteReg(MDMAEN, 2u);
} }
void RestoreBG2TilemapFromPauseScreen(void) { // 0x828D96 void RestoreBG2TilemapFromPauseScreen(void) { // 0x828D96
WriteReg(VMADDL, 0); WriteRegWord(VMADDL, (reg_BG2SC & 0xFC) << 8);
WriteReg(VMADDH, reg_BG2SC & 0xFC);
WriteReg(VMAIN, 0x80); WriteReg(VMAIN, 0x80);
static const StartDmaCopy unk_828DAE = { 1, 1, 0x18, LONGPTR(0x7edf5c), 0x1000 }; static const StartDmaCopy unk_828DAE = { 1, 1, 0x18, LONGPTR(0x7edf5c), 0x1000 };
SetupDmaTransfer(&unk_828DAE); SetupDmaTransfer(&unk_828DAE);

View File

@@ -318,6 +318,8 @@ uint32 PatchBugs(uint32 mode, uint32 addr) {
// Samus_HandleScrewAttackSpeedBoostingPals reads OOB // Samus_HandleScrewAttackSpeedBoostingPals reads OOB
if (special_samus_palette_frame > 6) if (special_samus_palette_frame > 6)
special_samus_palette_frame = 6; special_samus_palette_frame = 6;
} else if (FixBugHook(0x828D56)) {
WriteReg(VMAIN, 0x80); // BackupBG2TilemapForPauseMenu lacks this
} }
return 0; return 0;