diff --git a/README.md b/README.md index d787eefa..f00a9764 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,10 @@ May non-multiplayer, non-battle related bugs have been fixed. The aforementioned - 2 invisible stars that show on the title screen are cut off; also, the "presents" logo from RG is re-used! - The healing machine animates correctly! - Using Minimize or Substitute, looking at the Pokedex, and then battling won't cause sprite corruption. +- OAM Updates can no longer be interrupted by V-Blank, avoiding some sprite corruption. +- Trainer Card transition no longer shows weird garbage on DMGs; this was due to not having enough time to load properly. +- Battle victory music plays at the right time; there were some situations where it would happen when you lost. +- Music in Oak's Lab is delayed a frame so it always plays with the correct channels; V-Blank could otherwise interrupt it. and more! Credits diff --git a/engine/battle/core.asm b/engine/battle/core.asm index d7e8760d..4441ca3c 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -780,6 +780,10 @@ FaintEnemyPokemon: hlcoord 0, 0 lb bc, 4, 11 call ClearScreenArea + call AnyPartyAlive ; this fixes victory music playing at the wrong time ; PvK + ld a, d + and a + push af ld a, [wIsInBattle] dec a jr z, .wild_win @@ -798,11 +802,14 @@ FaintEnemyPokemon: jr .sfxplayed .wild_win call EndLowHealthAlarm + pop af + push af ld a, MUSIC_DEFEATED_WILD_MON - call PlayBattleVictoryMusic + call nz, PlayBattleVictoryMusic .sfxplayed ; bug: win sfx is played for wild battles before checking for player mon HP ; this can lead to odd scenarios where both player and enemy faint, as the win sfx plays yet the player never won the battle +; kep fixes this - PvK ld hl, wBattleMonHP ld a, [hli] or [hl] @@ -812,9 +819,7 @@ FaintEnemyPokemon: jr nz, .playermonnotfaint ; if so, don't call RemoveFaintedPlayerMon twice call RemoveFaintedPlayerMon .playermonnotfaint - call AnyPartyAlive - ld a, d - and a + pop af ret z ld hl, EnemyMonFaintedText call PrintText diff --git a/engine/menus/start_sub_menus.asm b/engine/menus/start_sub_menus.asm index 7dfb7dc3..beccc90f 100644 --- a/engine/menus/start_sub_menus.asm +++ b/engine/menus/start_sub_menus.asm @@ -462,6 +462,9 @@ StartMenu_TrainerInfo:: predef DrawBadges ; draw badges ld b, SET_PAL_TRAINER_CARD call RunPaletteCommand + ld a, [wOnSGB] ; this fixes garbage on dmgs + and a + call z, Delay3 call GBPalNormal call WaitForTextScrollButtonPress ; wait for button press call GBPalWhiteOut @@ -469,6 +472,9 @@ StartMenu_TrainerInfo:: call LoadScreenTilesFromBuffer2 ; restore saved screen call RunDefaultPaletteCommand call ReloadMapData + ld a, [wOnSGB] ; this fixes garbage on dmgs + and a + call z, Delay3 call LoadGBPal pop af ldh [hTileAnimations], a diff --git a/home/update_sprites.asm b/home/update_sprites.asm index 5530c2a4..ae0c8644 100644 --- a/home/update_sprites.asm +++ b/home/update_sprites.asm @@ -2,5 +2,9 @@ UpdateSprites:: ld a, [wUpdateSpritesEnabled] dec a ret nz + ld hl, hSkipOAMUpdates + set 0, [hl] homecall _UpdateSprites + ld hl, hSkipOAMUpdates + res 0, [hl] ; this prevents v-blank interference - PvK ret diff --git a/home/vblank.asm b/home/vblank.asm index b8b46ba7..988cbffc 100644 --- a/home/vblank.asm +++ b/home/vblank.asm @@ -26,11 +26,15 @@ VBlank:: call VBlankCopy call VBlankCopyDouble call UpdateMovingBgTiles - call hDMARoutine + ld a, [hSkipOAMUpdates] + bit 0, a + jr nz, .skipOAM + call hDMARoutine ; this prevents v-blank interference - PvK ld a, BANK(PrepareOAMData) ldh [hLoadedROMBank], a ld [MBC1RomBank], a call PrepareOAMData +.skipOAM ; VBlank-sensitive operations end. diff --git a/ram/hram.asm b/ram/hram.asm index 0607a484..29a582b4 100644 --- a/ram/hram.asm +++ b/ram/hram.asm @@ -387,7 +387,7 @@ hWhoseTurn:: db ; 0 on player's turn, 1 on enemy's turn hClearLetterPrintingDelayFlags:: db - ds 1 +hSkipOAMUpdates:: db ; this prevents v-blank interference - PvK ; bit 0: draw HP fraction to the right of bar instead of below (for party menu) ; bit 1: menu is double spaced diff --git a/scripts/OaksLab.asm b/scripts/OaksLab.asm index d1755fa8..c567e0f8 100644 --- a/scripts/OaksLab.asm +++ b/scripts/OaksLab.asm @@ -118,6 +118,7 @@ OaksLabScript4: call UpdateSprites ld hl, wFlags_D733 res 1, [hl] + call DelayFrame call PlayDefaultMusic ld a, $5