diff options
author | IIMarckus <iimarckus@gmail.com> | 2019-08-16 01:41:17 -0600 |
---|---|---|
committer | IIMarckus <iimarckus@gmail.com> | 2019-08-16 01:41:17 -0600 |
commit | 23daa5361f2b60b166b78f8ecae3d9d34771183c (patch) | |
tree | 43c3d530c76b5088cace620a805eab418324c505 /home/audio.asm | |
parent | 5194ca8408af8e1c6181b26e60eb942a658514ca (diff) |
Sync home/audio.asm with pokecrystal.
Diffstat (limited to 'home/audio.asm')
-rw-r--r-- | home/audio.asm | 292 |
1 files changed, 178 insertions, 114 deletions
diff --git a/home/audio.asm b/home/audio.asm index 8f3ec91c..d57a126b 100644 --- a/home/audio.asm +++ b/home/audio.asm @@ -1,37 +1,47 @@ -MapSetup_Sound_Off:: ; 3d4f (0:3d4f) +; Audio interfaces. + +MapSetup_Sound_Off:: push hl push de push bc push af - ld a, [hROMBank] + + ldh a, [hROMBank] push af ld a, BANK(_MapSetup_Sound_Off) - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a + call _MapSetup_Sound_Off + pop af - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a + pop af pop bc pop de pop hl ret -UpdateSound:: ; 3d6b (0:3d6b) +UpdateSound:: push hl push de push bc push af - ld a, [hROMBank] + + ldh a, [hROMBank] push af ld a, BANK(_UpdateSound) - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a + call _UpdateSound + pop af - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a + pop af pop bc pop de @@ -39,38 +49,45 @@ UpdateSound:: ; 3d6b (0:3d6b) ret _LoadMusicByte:: - ld [hROMBank], a +; wCurMusicByte = [a:de] + ldh [hROMBank], a ld [MBC3RomBank], a ld a, [de] ld [wCurMusicByte], a - ld a, BANK(_UpdateSound) + ld a, BANK(LoadMusicByte) - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a ret -PlayMusic:: ; 3d98 (0:3d98) +PlayMusic:: +; Play music de. + push hl push de push bc push af - ld a, [hROMBank] + + ldh a, [hROMBank] push af - ld a, BANK(_PlayMusic) - ld [hROMBank], a + ld a, BANK(_PlayMusic) ; aka BANK(_MapSetup_Sound_Off) + ldh [hROMBank], a ld [MBC3RomBank], a + ld a, e and a - jr z, .asm_3daf - call _PlayMusic ; $4b30 - jr .asm_3db2 + jr z, .nomusic + + call _PlayMusic + jr .end -.asm_3daf +.nomusic call _MapSetup_Sound_Off -.asm_3db2 + +.end pop af - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a pop af pop bc @@ -79,51 +96,62 @@ PlayMusic:: ; 3d98 (0:3d98) ret PlayMusic2:: +; Stop playing music, then play music de. + push hl push de push bc push af - ld a, [hROMBank] + + ldh a, [hROMBank] push af ld a, BANK(_PlayMusic) - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a + push de ld de, MUSIC_NONE call _PlayMusic call DelayFrame pop de call _PlayMusic + pop af - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a + pop af pop bc pop de pop hl ret -PlayCry:: ; 3de4 (0:3de4) +PlayCry:: +; Play cry de. + push hl push de push bc push af - ld a, [hROMBank] + + ldh a, [hROMBank] push af + + ; Cries are stuck in one bank. ld a, BANK(PokemonCries) - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a + ld hl, PokemonCries +rept 6 ; sizeof(mon_cry) add hl, de - add hl, de - add hl, de - add hl, de - add hl, de - add hl, de +endr + ld e, [hl] inc hl ld d, [hl] inc hl + ld a, [hli] ld [wCryPitch], a ld a, [hli] @@ -132,42 +160,57 @@ PlayCry:: ; 3de4 (0:3de4) ld [wCryLength], a ld a, [hl] ld [wCryLength + 1], a + ld a, BANK(_PlayCry) - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a + call _PlayCry + pop af - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a + pop af pop bc pop de pop hl ret -PlaySFX:: ; 3e24 (0:3e24) +PlaySFX:: +; Play sound effect de. +; Sound effects are ordered by priority (highest to lowest) + push hl push de push bc push af + + ; Is something already playing? call CheckSFX - jr nc, .asm_3e33 + jr nc, .play + + ; Does it have priority? ld a, [wCurSFX] cp e - jr c, .asm_3e4a -.asm_3e33 - ld a, [hROMBank] + jr c, .done + +.play + ldh a, [hROMBank] push af - ld a, BANK(_PlaySFX) ; $3a - ld [hROMBank], a + ld a, BANK(_PlaySFX) + ldh [hROMBank], a ld [MBC3RomBank], a + ld a, e ld [wCurSFX], a - call _PlaySFX ; $4c04 + call _PlaySFX + pop af - ld [hROMBank], a + ldh [hROMBank], a ld [MBC3RomBank], a -.asm_3e4a + +.done pop af pop bc pop de @@ -179,31 +222,35 @@ WaitPlaySFX:: call PlaySFX ret -WaitSFX:: ; 3e56 (0:3e56) +WaitSFX:: +; infinite loop until sfx is done playing + push hl -.asm_3e57 + +.wait ld hl, wChannel5Flags1 bit 0, [hl] - jr nz, .asm_3e57 + jr nz, .wait ld hl, wChannel6Flags1 bit 0, [hl] - jr nz, .asm_3e57 + jr nz, .wait ld hl, wChannel7Flags1 bit 0, [hl] - jr nz, .asm_3e57 + jr nz, .wait ld hl, wChannel8Flags1 bit 0, [hl] - jr nz, .asm_3e57 + jr nz, .wait + pop hl ret MaxVolume:: - ld a, $77 + ld a, MAX_VOLUME ld [wVolume], a ret LowVolume:: - ld a, $33 + ld a, $33 ; 40% ld [wVolume], a ret @@ -212,41 +259,46 @@ VolumeOff:: ld [wVolume], a ret -FadeOutMusic:: - ld a, $4 +Unused_FadeOutMusic:: + ld a, 4 ld [wMusicFade], a ret FadeInMusic:: - ld a, 4 | 1 << 7 + ld a, 4 | (1 << MUSIC_FADE_IN_F) ld [wMusicFade], a ret -Function3e92:: ; 3e92 (0:3e92) +SkipMusic:: +; Skip a frames of music. +.loop and a ret z dec a call UpdateSound - jr Function3e92 + jr .loop FadeToMapMusic:: push hl push de push bc push af - call GetMapMusic + + call GetMapMusic_MaybeSpecial ld a, [wMapMusic] cp e - jr z, .asm_3eb8 - ld a, $8 + jr z, .done + + ld a, 8 ld [wMusicFade], a ld a, e ld [wMusicFadeID], a ld a, d ld [wMusicFadeID + 1], a ld a, e - ld [wChannelsEnd], a -.asm_3eb8 + ld [wMapMusic], a + +.done pop af pop bc pop de @@ -258,10 +310,12 @@ PlayMapMusic:: push de push bc push af - call GetMapMusic + + call GetMapMusic_MaybeSpecial ld a, [wMapMusic] cp e - jr z, .asm_3edc + jr z, .done + push de ld de, MUSIC_NONE call PlayMusic @@ -270,7 +324,8 @@ PlayMapMusic:: ld a, e ld [wMapMusic], a call PlayMusic -.asm_3edc + +.done pop af pop bc pop de @@ -282,22 +337,25 @@ EnterMapMusic:: push de push bc push af + xor a ld [wDontPlayMapMusicOnReload], a ld de, MUSIC_BICYCLE ld a, [wPlayerState] - cp $1 - jr z, .asm_3ef6 - call GetMapMusic -.asm_3ef6 + cp PLAYER_BIKE + jr z, .play + call GetMapMusic_MaybeSpecial +.play push de ld de, MUSIC_NONE call PlayMusic call DelayFrame pop de + ld a, e - ld [wChannelsEnd], a + ld [wMapMusic], a call PlayMusic + pop af pop bc pop de @@ -309,7 +367,7 @@ TryRestartMapMusic:: and a jr z, RestartMapMusic xor a - ld [wChannelsEnd], a + ld [wMapMusic], a ld de, MUSIC_NONE call PlayMusic call DelayFrame @@ -325,9 +383,9 @@ RestartMapMusic:: ld de, MUSIC_NONE call PlayMusic call DelayFrame - ld a, [wChannelsEnd] + ld a, [wMapMusic] ld e, a - ld d, $0 + ld d, 0 call PlayMusic pop af pop bc @@ -335,15 +393,18 @@ RestartMapMusic:: pop hl ret -SpecialMapMusic:: ; 3f40 (0:3f40) +SpecialMapMusic:: ld a, [wPlayerState] cp PLAYER_SURF jr z, .surf cp PLAYER_SURF_PIKA jr z, .surf - CheckFlag ENGINE_BUG_CONTEST_TIMER + + ld a, [wStatusFlags2] + bit STATUSFLAGS2_BUG_CONTEST_TIMER_F, a jr nz, .contest -.normal + +.no and a ret @@ -360,73 +421,76 @@ SpecialMapMusic:: ; 3f40 (0:3f40) .contest ld a, [wMapGroup] cp GROUP_ROUTE_35_NATIONAL_PARK_GATE - jr nz, .normal + jr nz, .no ld a, [wMapNumber] cp MAP_ROUTE_35_NATIONAL_PARK_GATE jr z, .ranking cp MAP_ROUTE_36_NATIONAL_PARK_GATE - jr nz, .normal + jr nz, .no + .ranking ld de, MUSIC_BUG_CATCHING_CONTEST_RANKING scf ret -GetMapMusic:: ; 3f75 (0:3f75) +GetMapMusic_MaybeSpecial:: call SpecialMapMusic ret c - call GetMapHeaderMusic + call GetMapMusic ret -Function3f7d:: - ld a, $20 - ld [$c398], a - ld [$c39c], a - ld a, $50 - ld [$c399], a - ld a, $58 - ld [$c39d], a +Unreferenced_Function3d9f:: +; Places a BCD number at the +; upper center of the screen. + ld a, 4 * TILE_WIDTH + ld [wVirtualOAMSprite38YCoord], a + ld [wVirtualOAMSprite39YCoord], a + ld a, 10 * TILE_WIDTH + ld [wVirtualOAMSprite38XCoord], a + ld a, 11 * TILE_WIDTH + ld [wVirtualOAMSprite39XCoord], a xor a - ld [$c39b], a - ld [$c39f], a - ld a, [wc196] - cp $64 - jr nc, .asm_3fb3 - add $1 + ld [wVirtualOAMSprite38Attributes], a + ld [wVirtualOAMSprite39Attributes], a + ld a, [wUnusedBCDNumber] + cp 100 + jr nc, .max + add 1 daa ld b, a swap a and $f - add $f6 - ld [$c39a], a + add "0" + ld [wVirtualOAMSprite38TileID], a ld a, b and $f - add $f6 - ld [$c39e], a + add "0" + ld [wVirtualOAMSprite39TileID], a ret -.asm_3fb3 - ld a, $ff - ld [$c39a], a - ld [$c39e], a +.max + ld a, "9" + ld [wVirtualOAMSprite38TileID], a + ld [wVirtualOAMSprite39TileID], a ret -CheckSFX:: ; 3fbc (0:3fbc) +CheckSFX:: +; Return carry if any SFX channels are active. ld a, [wChannel5Flags1] bit 0, a - jr nz, .asm_3fda + jr nz, .playing ld a, [wChannel6Flags1] bit 0, a - jr nz, .asm_3fda + jr nz, .playing ld a, [wChannel7Flags1] bit 0, a - jr nz, .asm_3fda + jr nz, .playing ld a, [wChannel8Flags1] bit 0, a - jr nz, .asm_3fda + jr nz, .playing and a ret - -.asm_3fda +.playing scf ret @@ -434,9 +498,9 @@ TerminateExpBarSound:: xor a ld [wChannel5Flags1], a ld [wSoundInput], a - ld [rNR10], a - ld [rNR11], a - ld [rNR12], a - ld [rNR13], a - ld [rNR14], a + ldh [rNR10], a + ldh [rNR11], a + ldh [rNR12], a + ldh [rNR13], a + ldh [rNR14], a ret |