Files
oracle-of-secrets/Music/ww_ganondorf.asm
2024-08-31 15:28:50 -04:00

323 lines
8.2 KiB
NASM

; =========================================================
; The Legend of Zelda: Wind Waker - Ganondorf Battle
; Kenta Nagata, Hajime Wakai, Toru Minegishi, and Koji Kondo
; Test code to play the song as the game start (Only for Testing)
!n = $7F
org $00FFD7 ; Set rom on 16mb
db #$0B
org $3FFFFF ; write at the last position to expand on 2mb
db #$00
org $0CC120
LDA #$02 : STA $012C
STA $2140 : STA $0133 : STA $0130
RTL
; org $1BAD7A
; GanondorfBattle:
; ARAMAddr = $2BB3
org $1A9FF8
print pc
GanondorfBattle:
{
!ARAMAddr = $D0FF
dw !ARAMAddr+$0A ; Intro
dw !ARAMAddr+$1A ; Looping
dw $00FF
dw !ARAMAddr+$02 ; Looping Section
dw $0000
.ChannelsIntro
!ARAMC = !ARAMAddr-GanondorfBattle
dw .IntroChannel0_Trombone+!ARAMC
dw .IntroChannel1_ChoirAndTrumpet+!ARAMC
dw .IntroChannel2_Strings+!ARAMC
dw .IntroChannel4_TimpaniAndSnare+!ARAMC
dw .IntroChannel5_Cymbal+!ARAMC
dw .IntroChannel3_Horn+!ARAMC
dw $0000
dw $0000
.Channels
!ARAMC = !ARAMAddr-GanondorfBattle
dw .Channel0_Piano+!ARAMC
dw .Channel1_Horn+!ARAMC
dw .Channel2_Trumpet+!ARAMC
dw .Channel3_TromboneAndCymbal+!ARAMC
dw .Channel4_Timpani+!ARAMC
dw .Channel5_Snare+!ARAMC
dw $0000 ; dw .Channel6+!ARAMC
dw $0000
; ---------------------------------------------
; Intro Channels
{
.IntroChannel0_Trombone
%SetMasterVolume($88)
%SetTempo(100)
%Trombone()
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.intro+!ARAMC, 1)
%CallSubroutine(.strings01+!ARAMC, 1)
%CallSubroutine(.sustain+!ARAMC, 1)
%CallSubroutine(.silence+!ARAMC, 6)
db $00
.IntroChannel1_ChoirAndTrumpet
%Choir()
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.intro+!ARAMC, 1)
%Trumpet()
%CallSubroutine(.strings01+!ARAMC, 1)
%CallSubroutine(.sustain+!ARAMC, 1)
%CallSubroutine(.silence+!ARAMC, 6)
db $00
.IntroChannel2_Strings
%Strings()
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.intro+!ARAMC, 1)
%CallSubroutine(.strings01+!ARAMC, 1)
%CallSubroutine(.sustain+!ARAMC, 1)
%CallSubroutine(.silence+!ARAMC, 6)
db $00
.IntroChannel3_Horn
%Horn()
%SetChannelVolume($C8)
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.intro+!ARAMC, 1)
%CallSubroutine(.strings01+!ARAMC, 1)
%CallSubroutine(.silence+!ARAMC, 6)
db $00
.IntroChannel4_TimpaniAndSnare
%Tympani()
%SetChannelVolume($C8)
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.silence+!ARAMC, 3)
%CallSubroutine(.drums+!ARAMC, 1)
%CallSubroutine(.sustain+!ARAMC, 4)
%Snare()
%SetDurationN(!32nd, $7F) ; 1/32
%CallSubroutine(.snare00+!ARAMC, 8)
db $00
.IntroChannel5_Cymbal
%Cymbal()
%SetChannelVolume($F8)
%SetDurationN(!4th, $7F) ; 1/4
%EchoVBits($FF, $1E, $1E)
%EchoParams($01, $14, $02)
%CallSubroutine(.silence+!ARAMC, 3)
%CallSubroutine(.drums+!ARAMC, 1)
db !4th, G2, Tie, Tie
%CallSubroutine(.silence+!ARAMC, 8)
db $00
}
; ---------------------------------------------
; Main Channels
{
.Channel0_Piano
%SetMasterVolume($C8)
%Piano()
%SetChannelVolume($F8)
%SetDurationN(!4th, $7F) ; 1/4
%EchoVBits($FF, $1E, $1E)
%EchoParams($02, $14, $02)
%CallSubroutine(.piano01+!ARAMC, 2)
%CallSubroutine(.piano02+!ARAMC, 1)
%CallSubroutine(.piano01+!ARAMC, 2)
%CallSubroutine(.piano02+!ARAMC, 1)
%CallSubroutine(.piano03+!ARAMC, 1)
%CallSubroutine(.piano04+!ARAMC, 1)
%CallSubroutine(.piano02+!ARAMC, 1)
%CallSubroutine(.piano01+!ARAMC, 1)
%CallSubroutine(.piano02+!ARAMC, 1)
%CallSubroutine(.piano01+!ARAMC, 1)
%CallSubroutine(.piano02+!ARAMC, 1)
%CallSubroutine(.piano03+!ARAMC, 1)
%CallSubroutine(.piano04+!ARAMC, 1)
%CallSubroutine(.silence+!ARAMC, 96)
db $00
.Channel1_Horn
%Horn()
%SetChannelVolume($DC)
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.silence+!ARAMC, 4)
%CallSubroutine(.horn01+!ARAMC, 1)
%CallSubroutine(.horns02+!ARAMC, 1)
%CallSubroutine(.horns03+!ARAMC, 1)
%CallSubroutine(.horns02+!ARAMC, 1)
%CallSubroutine(.silence+!ARAMC, 72)
db $00
.Channel2_Trumpet
%Trumpet()
%SetChannelVolume($E8)
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.silence+!ARAMC, 4)
%CallSubroutine(.horn01+!ARAMC, 1)
%CallSubroutine(.horns02+!ARAMC, 1)
%CallSubroutine(.horns03+!ARAMC, 1)
%CallSubroutine(.horns02+!ARAMC, 1)
%CallSubroutine(.intro+!ARAMC, 1)
%CallSubroutine(.silence+!ARAMC, 4)
%CallSubroutine(.intro+!ARAMC, 1)
%CallSubroutine(.silence+!ARAMC, 96)
db $00
.Channel3_TromboneAndCymbal
%Trombone()
%SetChannelVolume($BC)
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.silence+!ARAMC, 4)
; %TremoloOn(10, 4, 50)
%CallSubroutine(.horn01+!ARAMC, 1)
%CallSubroutine(.horns02+!ARAMC, 1)
%CallSubroutine(.horns03+!ARAMC, 1)
%CallSubroutine(.horns02+!ARAMC, 1)
; %TremoloOff()
%CallSubroutine(.intro+!ARAMC, 1)
%Cymbal()
%SetChannelVolume($F8)
%SetDurationN(!4th, $7F) ; 1/4
%EchoVBits($FF, $1E, $1E)
%EchoParams($01, $14, $02)
%CallSubroutine(.drums+!ARAMC, 1)
db !4th, G2, Tie, Tie
%Trombone()
%CallSubroutine(.silence+!ARAMC, 96)
db $00
.Channel4_Timpani
%Tympani()
%SetChannelVolume($78)
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.timpani01+!ARAMC, 12)
%Choir()
%SetChannelVolume($A8)
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.choir01+!ARAMC, 2)
db $00
.Channel5_Snare
%Snare()
%SetChannelVolume($8C)
%SetDurationN(!32nd, $7F) ; 1/32
%CallSubroutine(.snare01+!ARAMC, 24)
%SetDurationN(!4th, $7F) ; 1/4
%CallSubroutine(.silence+!ARAMC, 32)
%SetDurationN(!32nd, $7F) ; 1/32
%CallSubroutine(.snare01+!ARAMC, 32)
db $00
}
; ---------------------------------------------
.silence
db Rest, $00
.sustain
db Tie, $00
; 4 bars
.intro
db D4s, D4, F4s, F4, Tie, D4s, !16th, D4, Tie, F4s, Tie
db !4th, F4, !16th, D4s, Tie, D4, Tie, !4th, F4s, F4, Rest
db $00 ; End
.snare00
db E5
db $00
.snare01
db E5, Rest
db E5, Rest
db E5, Rest
db E5, Rest
db E5, Rest, Rest, Rest
db E5, Rest, Rest, Rest
db $00
.choir01
db !4th, G3s, Tie, Tie, !8th, D3s, Tie, !4th, G3, Tie, Tie, !8th, F3, Tie
db !4th, D3s, Tie, Tie, !8th, F3, Tie, !4th, D3, Tie, Tie, Tie
db $00
.piano01
db !8th, G1, C2, A1s, G1, !4th, C2, C2
db $00
.piano02
db !8th, G1, C2, A1s, G1, !4th, C2, C2s
db !8th, G1s, C2s, B1, G1s, !4th, C2s, E2
db !8th, G1s, C2s, B1, G1s, !4th, C2s, E2
db !8th, G1, C2, A1s, G1, !4th, C2, C2s
db !8th, G1s, C2s, B1, G1s, !4th, C2s, E2
db !8th, G1s, C2s, B1, G1s, !4th, C2s, E2
db $00
.piano03
db !8th, G1s, C2s, B1, G1s, !4th, C2s, E2
db !8th, G1s, C2s, B1, G1s, !4th, C2s, !8th, E2, G2, F2
db !4th, D2s, Tie, C2s
db $00
.piano04
db !8th, E2, G2, F2
db !4th, D2s, Tie, C2s, Tie, Tie, Tie, Tie, F1
db $00
.drums
db G2, Tie, Tie, G2, Tie, G2, Tie, Tie
db $00
.strings01
db !8th, G3s, A3s, !4th, Rest, !8th, G3, G3s, !4th, D3s, E3
db !4th, Rest
db !8th, G3s, A3s, !4th, Rest, !8th, G3, G3s, !4th, D2, F2, Tie
db $00
.timpani01
db !8th, G1, !4th, C2, !8th, G1, !4th, C2, C2, !8th, G1, !4th, C2, !8th, G1, !4th, C2
db $00
.horn01
db !8th, G3, !4th, A3s, !8th, G3, F3s, !4th, G3
db !16th, F3s, Tie, G3, Tie, !8th, A3s, B3, !4th, G3
db !16th, F3, Tie, F3s, Tie, F3, Tie, !8th, D3, C3s, D3, Tie
db $00
.horns02
db !8th, D3, F3, F3s, !4th, A3
db !8th, G3s, !4th, B3
db !8th, A3s, !4th, C4s, Tie
db B3, !8th, A3, A3, !4th, A3s, E3, G3
db $00
.horns03
db F3s, G3, Tie, !8th, F3s, G3, !4th, A3s, B3
db G3, !8th, F3, F3s, F3, !4th, D3, C3s, D3, Tie
db $00
}
print "End of WW Ganondorf ", pc