AnimateHealingMachine: ld de, PokeCenterFlashingMonitorAndHealBall ld hl, vChars0 + $7c0 lb bc, BANK(PokeCenterFlashingMonitorAndHealBall), $03 ; loads one too many tiles call CopyVideoData ld hl, wUpdateSpritesEnabled ld a, [hl] push af ld [hl], $ff push hl ld a, [rOBP1] push af ld a, $e0 ld [rOBP1], a ld hl, wOAMBuffer + $84 ld de, PokeCenterOAMData call CopyHealingMachineOAM ld a, 4 ld [wAudioFadeOutControl], a ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound .waitLoop ld a, [wAudioFadeOutControl] and a ; is fade-out finished? jr nz, .waitLoop ; if not, check again ld a, [wPartyCount] ld b, a .partyLoop call CopyHealingMachineOAM ld a, SFX_HEALING_MACHINE call PlaySound ld c, 30 call DelayFrames dec b jr nz, .partyLoop ld a, [wAudioROMBank] cp BANK(Audio3_UpdateMusic) ld [wAudioSavedROMBank], a jr nz, .next ld a, SFX_STOP_ALL_MUSIC ld [wNewSoundID], a call PlaySound ld a, BANK(Music_PkmnHealed) ld [wAudioROMBank], a .next ld a, MUSIC_PKMN_HEALED ld [wNewSoundID], a call PlaySound ld d, $28 call FlashSprite8Times .waitLoop2 ld a, [wChannelSoundIDs] cp MUSIC_PKMN_HEALED ; is the healed music still playing? jr z, .waitLoop2 ; if so, check gain ld c, 32 call DelayFrames pop af ld [rOBP1], a pop hl pop af ld [hl], a jp UpdateSprites PokeCenterFlashingMonitorAndHealBall: INCBIN "gfx/overworld/heal_machine.2bpp" PokeCenterOAMData: db $24,$34,$7C,$10 ; heal machine monitor db $2B,$30,$7D,$10 ; pokeballs 1-6 db $2B,$38,$7D,$30 db $30,$30,$7D,$10 db $30,$38,$7D,$30 db $35,$30,$7D,$10 db $35,$38,$7D,$30 ; d = value to xor with palette FlashSprite8Times: ld b, 8 .loop ld a, [rOBP1] xor d ld [rOBP1], a ld c, 10 call DelayFrames dec b jr nz, .loop ret CopyHealingMachineOAM: ; copy one OAM entry and advance the pointers rept 4 ld a, [de] inc de ld [hli], a endr ret