Merge pull request #256 from Rangi42/master

Add subdirectories to engine/ similar to pokecrystal
This commit is contained in:
Rangi 2020-07-03 09:38:52 -04:00 committed by GitHub
commit c85050497c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
125 changed files with 349 additions and 343 deletions

231
audio.asm
View file

@ -352,248 +352,30 @@ INCLUDE "audio/sfx/cry21_3.asm"
INCLUDE "audio/sfx/cry22_3.asm"
SECTION "Audio Engine 1", ROMX
PlayBattleMusic::
xor a
ld [wAudioFadeOutControl], a
ld [wLowHealthAlarm], a
dec a
ld [wNewSoundID], a
call PlaySound ; stop music
call DelayFrame
ld c, BANK(Music_GymLeaderBattle)
ld a, [wGymLeaderNo]
and a
jr z, .notGymLeaderBattle
ld a, MUSIC_GYM_LEADER_BATTLE
jr .playSong
.notGymLeaderBattle
ld a, [wCurOpponent]
cp OPP_ID_OFFSET
jr c, .wildBattle
cp OPP_SONY3
jr z, .finalBattle
cp OPP_LANCE
jr nz, .normalTrainerBattle
ld a, MUSIC_GYM_LEADER_BATTLE ; lance also plays gym leader theme
jr .playSong
.normalTrainerBattle
ld a, MUSIC_TRAINER_BATTLE
jr .playSong
.finalBattle
ld a, MUSIC_FINAL_BATTLE
jr .playSong
.wildBattle
ld a, MUSIC_WILD_BATTLE
.playSong
jp PlayMusic
INCLUDE "audio/play_battle_music.asm"
INCLUDE "audio/engine_1.asm"
INCLUDE "audio/alternate_tempo.asm"
; an alternate start for MeetRival which has a different first measure
Music_RivalAlternateStart::
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld hl, wChannelCommandPointers
ld de, Music_MeetRival_branch_b1a2
call Audio1_OverwriteChannelPointer
ld de, Music_MeetRival_branch_b21d
call Audio1_OverwriteChannelPointer
ld de, Music_MeetRival_branch_b2b5
SECTION "Low Health Alarm (Audio Engine 2)", ROMX
Audio1_OverwriteChannelPointer:
ld a, e
ld [hli], a
ld a, d
ld [hli], a
ret
; an alternate tempo for MeetRival which is slightly slower
Music_RivalAlternateTempo::
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld hl, wChannelCommandPointers
ld de, Music_MeetRival_branch_b119
jp Audio1_OverwriteChannelPointer
; applies both the alternate start and alternate tempo
Music_RivalAlternateStartAndTempo::
call Music_RivalAlternateStart
ld hl, wChannelCommandPointers
ld de, Music_MeetRival_branch_b19b
jp Audio1_OverwriteChannelPointer
; an alternate tempo for Cities1 which is used for the Hall of Fame room
Music_Cities1AlternateTempo::
ld a, 10
ld [wAudioFadeOutCounterReloadValue], a
ld [wAudioFadeOutCounter], a
ld a, $ff ; stop playing music after the fade-out is finished
ld [wAudioFadeOutControl], a
ld c, 100
call DelayFrames ; wait for the fade-out to finish
ld c, BANK(Music_Cities1)
ld a, MUSIC_CITIES1
call PlayMusic
ld hl, wChannelCommandPointers
ld de, Music_Cities1_branch_aa6f
jp Audio1_OverwriteChannelPointer
INCLUDE "audio/low_health_alarm.asm"
SECTION "Audio Engine 2", ROMX
Music_DoLowHealthAlarm::
ld a, [wLowHealthAlarm]
cp $ff
jr z, .disableAlarm
bit 7, a ;alarm enabled?
ret z ;nope
and $7f ;low 7 bits are the timer.
jr nz, .asm_21383 ;if timer > 0, play low tone.
call .playToneHi
ld a, 30 ;keep this tone for 30 frames.
jr .asm_21395 ;reset the timer.
.asm_21383
cp 20
jr nz, .asm_2138a ;if timer == 20,
call .playToneLo ;actually set the sound registers.
.asm_2138a
ld a, $86
ld [wChannelSoundIDs + Ch5], a ;disable sound channel?
ld a, [wLowHealthAlarm]
and $7f ;decrement alarm timer.
dec a
.asm_21395
; reset the timer and enable flag.
set 7, a
ld [wLowHealthAlarm], a
ret
.disableAlarm
xor a
ld [wLowHealthAlarm], a ;disable alarm
ld [wChannelSoundIDs + Ch5], a ;re-enable sound channel?
ld de, .toneDataSilence
jr .playTone
;update the sound registers to change the frequency.
;the tone set here stays until we change it.
.playToneHi
ld de, .toneDataHi
jr .playTone
.playToneLo
ld de, .toneDataLo
;update sound channel 1 to play the alarm, overriding all other sounds.
.playTone
ld hl, rNR10 ;channel 1 sound register
ld c, $5
xor a
.copyLoop
ld [hli], a
ld a, [de]
inc de
dec c
jr nz, .copyLoop
ret
;bytes to write to sound channel 1 registers for health alarm.
;starting at FF11 (FF10 is always zeroed), so these bytes are:
;length, envelope, freq lo, freq hi
.toneDataHi
db $A0,$E2,$50,$87
.toneDataLo
db $B0,$E2,$EE,$86
;written to stop the alarm
.toneDataSilence
db $00,$00,$00,$80
INCLUDE "engine/menu/bills_pc.asm"
INCLUDE "audio/engine_2.asm"
Music_PokeFluteInBattle::
; begin playing the "caught mon" sound effect
ld a, SFX_CAUGHT_MON
call PlaySoundWaitForCurrent
; then immediately overwrite the channel pointers
ld hl, wChannelCommandPointers + Ch5 * 2
ld de, SFX_Pokeflute_Ch5
call Audio2_OverwriteChannelPointer
ld de, SFX_Pokeflute_Ch6
call Audio2_OverwriteChannelPointer
ld de, SFX_Pokeflute_Ch7
Audio2_OverwriteChannelPointer:
ld a, e
ld [hli], a
ld a, d
ld [hli], a
ret
INCLUDE "audio/poke_flute.asm"
SECTION "Audio Engine 3", ROMX
PlayPokedexRatingSfx::
ld a, [$ffdc]
ld c, $0
ld hl, OwnedMonValues
.getSfxPointer
cp [hl]
jr c, .gotSfxPointer
inc c
inc hl
jr .getSfxPointer
.gotSfxPointer
push bc
ld a, $ff
ld [wNewSoundID], a
call PlaySoundWaitForCurrent
pop bc
ld b, $0
ld hl, PokedexRatingSfxPointers
add hl, bc
add hl, bc
ld a, [hli]
ld c, [hl]
call PlayMusic
jp PlayDefaultMusic
PokedexRatingSfxPointers:
db SFX_DENIED, BANK(SFX_Denied_3)
db SFX_POKEDEX_RATING, BANK(SFX_Pokedex_Rating_1)
db SFX_GET_ITEM_1, BANK(SFX_Get_Item1_1)
db SFX_CAUGHT_MON, BANK(SFX_Caught_Mon)
db SFX_LEVEL_UP, BANK(SFX_Level_Up)
db SFX_GET_KEY_ITEM, BANK(SFX_Get_Key_Item_1)
db SFX_GET_ITEM_2, BANK(SFX_Get_Item2_1)
OwnedMonValues:
db 10, 40, 60, 90, 120, 150, $ff
INCLUDE "audio/pokedex_rating_sfx.asm"
INCLUDE "audio/engine_3.asm"
SECTION "Music 1", ROMX
INCLUDE "audio/music/pkmnhealed.asm"
@ -663,4 +445,3 @@ INCLUDE "audio/music/surfing.asm"
INCLUDE "audio/music/jigglypuffsong.asm"
INCLUDE "audio/music/halloffame.asm"
INCLUDE "audio/music/credits.asm"

50
audio/alternate_tempo.asm Normal file
View file

@ -0,0 +1,50 @@
; an alternate start for MeetRival which has a different first measure
Music_RivalAlternateStart::
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld hl, wChannelCommandPointers
ld de, Music_MeetRival_branch_b1a2
call Audio1_OverwriteChannelPointer
ld de, Music_MeetRival_branch_b21d
call Audio1_OverwriteChannelPointer
ld de, Music_MeetRival_branch_b2b5
Audio1_OverwriteChannelPointer:
ld a, e
ld [hli], a
ld a, d
ld [hli], a
ret
; an alternate tempo for MeetRival which is slightly slower
Music_RivalAlternateTempo::
ld c, BANK(Music_MeetRival)
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld hl, wChannelCommandPointers
ld de, Music_MeetRival_branch_b119
jp Audio1_OverwriteChannelPointer
; applies both the alternate start and alternate tempo
Music_RivalAlternateStartAndTempo::
call Music_RivalAlternateStart
ld hl, wChannelCommandPointers
ld de, Music_MeetRival_branch_b19b
jp Audio1_OverwriteChannelPointer
; an alternate tempo for Cities1 which is used for the Hall of Fame room
Music_Cities1AlternateTempo::
ld a, 10
ld [wAudioFadeOutCounterReloadValue], a
ld [wAudioFadeOutCounter], a
ld a, $ff ; stop playing music after the fade-out is finished
ld [wAudioFadeOutControl], a
ld c, 100
call DelayFrames ; wait for the fade-out to finish
ld c, BANK(Music_Cities1)
ld a, MUSIC_CITIES1
call PlayMusic
ld hl, wChannelCommandPointers
ld de, Music_Cities1_branch_aa6f
jp Audio1_OverwriteChannelPointer

View file

@ -0,0 +1,75 @@
Music_DoLowHealthAlarm::
ld a, [wLowHealthAlarm]
cp $ff
jr z, .disableAlarm
bit 7, a ;alarm enabled?
ret z ;nope
and $7f ;low 7 bits are the timer.
jr nz, .asm_21383 ;if timer > 0, play low tone.
call .playToneHi
ld a, 30 ;keep this tone for 30 frames.
jr .asm_21395 ;reset the timer.
.asm_21383
cp 20
jr nz, .asm_2138a ;if timer == 20,
call .playToneLo ;actually set the sound registers.
.asm_2138a
ld a, $86
ld [wChannelSoundIDs + Ch5], a ;disable sound channel?
ld a, [wLowHealthAlarm]
and $7f ;decrement alarm timer.
dec a
.asm_21395
; reset the timer and enable flag.
set 7, a
ld [wLowHealthAlarm], a
ret
.disableAlarm
xor a
ld [wLowHealthAlarm], a ;disable alarm
ld [wChannelSoundIDs + Ch5], a ;re-enable sound channel?
ld de, .toneDataSilence
jr .playTone
;update the sound registers to change the frequency.
;the tone set here stays until we change it.
.playToneHi
ld de, .toneDataHi
jr .playTone
.playToneLo
ld de, .toneDataLo
;update sound channel 1 to play the alarm, overriding all other sounds.
.playTone
ld hl, rNR10 ;channel 1 sound register
ld c, $5
xor a
.copyLoop
ld [hli], a
ld a, [de]
inc de
dec c
jr nz, .copyLoop
ret
;bytes to write to sound channel 1 registers for health alarm.
;starting at FF11 (FF10 is always zeroed), so these bytes are:
;length, envelope, freq lo, freq hi
.toneDataHi
db $A0,$E2,$50,$87
.toneDataLo
db $B0,$E2,$EE,$86
;written to stop the alarm
.toneDataSilence
db $00,$00,$00,$80

View file

@ -1,3 +1,5 @@
; This file is INCLUDEd three times, once in each audio engine.
dw $F82C ; C_
dw $F89D ; C#
dw $F907 ; D_

View file

@ -0,0 +1,34 @@
PlayBattleMusic::
xor a
ld [wAudioFadeOutControl], a
ld [wLowHealthAlarm], a
dec a
ld [wNewSoundID], a
call PlaySound ; stop music
call DelayFrame
ld c, BANK(Music_GymLeaderBattle)
ld a, [wGymLeaderNo]
and a
jr z, .notGymLeaderBattle
ld a, MUSIC_GYM_LEADER_BATTLE
jr .playSong
.notGymLeaderBattle
ld a, [wCurOpponent]
cp OPP_ID_OFFSET
jr c, .wildBattle
cp OPP_SONY3
jr z, .finalBattle
cp OPP_LANCE
jr nz, .normalTrainerBattle
ld a, MUSIC_GYM_LEADER_BATTLE ; lance also plays gym leader theme
jr .playSong
.normalTrainerBattle
ld a, MUSIC_TRAINER_BATTLE
jr .playSong
.finalBattle
ld a, MUSIC_FINAL_BATTLE
jr .playSong
.wildBattle
ld a, MUSIC_WILD_BATTLE
.playSong
jp PlayMusic

18
audio/poke_flute.asm Normal file
View file

@ -0,0 +1,18 @@
Music_PokeFluteInBattle::
; begin playing the "caught mon" sound effect
ld a, SFX_CAUGHT_MON
call PlaySoundWaitForCurrent
; then immediately overwrite the channel pointers
ld hl, wChannelCommandPointers + Ch5 * 2
ld de, SFX_Pokeflute_Ch5
call Audio2_OverwriteChannelPointer
ld de, SFX_Pokeflute_Ch6
call Audio2_OverwriteChannelPointer
ld de, SFX_Pokeflute_Ch7
Audio2_OverwriteChannelPointer:
ld a, e
ld [hli], a
ld a, d
ld [hli], a
ret

View file

@ -0,0 +1,36 @@
PlayPokedexRatingSfx::
ld a, [$ffdc]
ld c, $0
ld hl, OwnedMonValues
.getSfxPointer
cp [hl]
jr c, .gotSfxPointer
inc c
inc hl
jr .getSfxPointer
.gotSfxPointer
push bc
ld a, $ff
ld [wNewSoundID], a
call PlaySoundWaitForCurrent
pop bc
ld b, $0
ld hl, PokedexRatingSfxPointers
add hl, bc
add hl, bc
ld a, [hli]
ld c, [hl]
call PlayMusic
jp PlayDefaultMusic
PokedexRatingSfxPointers:
db SFX_DENIED, BANK(SFX_Denied_3)
db SFX_POKEDEX_RATING, BANK(SFX_Pokedex_Rating_1)
db SFX_GET_ITEM_1, BANK(SFX_Get_Item1_1)
db SFX_CAUGHT_MON, BANK(SFX_Caught_Mon)
db SFX_LEVEL_UP, BANK(SFX_Level_Up)
db SFX_GET_KEY_ITEM, BANK(SFX_Get_Key_Item_1)
db SFX_GET_ITEM_2, BANK(SFX_Get_Item2_1)
OwnedMonValues:
db 10, 40, 60, 90, 120, 150, $ff

View file

@ -1,3 +1,5 @@
; This file is INCLUDEd three times, once for each audio engine.
dw .wave0
dw .wave1
dw .wave2

7
data/hm_moves.asm Normal file
View file

@ -0,0 +1,7 @@
HMMoveArray:
db CUT
db FLY
db SURF
db STRENGTH
db FLASH
db -1

View file

@ -279,7 +279,7 @@ INCLUDE "data/trainer_pic_money_pointers.asm"
INCLUDE "text/trainer_names.asm"
INCLUDE "engine/battle/bank_e_misc.asm"
INCLUDE "engine/battle/misc.asm"
INCLUDE "engine/battle/read_trainer_party.asm"

Some files were not shown because too many files have changed in this diff Show more