Files
oracle-of-secrets/Music/stone_tower_temple.asm
2024-09-18 18:21:55 -04:00

175 lines
4.1 KiB
NASM

;=====================================================================================
; The Legend of Zelda: A Link to the Past (Custom Music Track)
; The Legend of Zelda: Majora's Mask - Stone Tower Temple Theme v1.01
; Original Song by Koji Kondo
; Midi by (Unknown)
; ASM Framework by Zarby89
; Ported by Letterbomb
;=====================================================================================
org $1AA763; Sections?
StoneTowerTempleTheme:
!ARAMAddr = $D86A
dw !ARAMAddr+$08
dw $00FF
dw !ARAMAddr
dw $0000
.Channels
!ARAMC = !ARAMAddr-StoneTowerTempleTheme
dw .Channel0+!ARAMC
dw .Channel1+!ARAMC
dw .Channel2+!ARAMC
dw .Channel3+!ARAMC
dw .Channel4+!ARAMC
dw .Channel5+!ARAMC
dw $0000
dw $0000
.Channel0
%SetMasterVolume($DA)
%SetChannelVolume($BF)
%SetTempo(62);
%SetInstrument($02) ; Tympani
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.sub1+!ARAMC, 24)
%CallSubroutine(.sub2+!ARAMC, 64)
db $00 ; End of the channel
.sub1
db $48, B1, B1, $24, Tie, C2, F3s, Tie
db $00 ; End
.sub2
db Rest
db $00 ; End
.Channel1
%SetChannelVolume($FF)
%SetInstrument($18) ; Guitar
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.sub2+!ARAMC, 8)
%CallSubroutine(.sub3+!ARAMC, 1)
%CallSubroutine(.sub4+!ARAMC, 1)
%CallSubroutine(.sub3+!ARAMC, 2)
%CallSubroutine(.sub4+!ARAMC, 1)
%CallSubroutine(.sub3+!ARAMC, 1)
%CallSubroutine(.sub4+!ARAMC, 1)
%CallSubroutine(.sub3+!ARAMC, 1)
%CallSubroutine(.sub4+!ARAMC, 1)
%CallSubroutine(.sub3+!ARAMC, 1)
%CallSubroutine(.sub4+!ARAMC, 1)
%CallSubroutine(.sub3+!ARAMC, 1)
%CallSubroutine(.sub4+!ARAMC, 1)
%CallSubroutine(.sub3+!ARAMC, 1)
db E2, Tie, Tie, Tie
%CallSubroutine(.sub2+!ARAMC, 4)
db $00 ; End of the channel
.sub3
db E2, Tie, Tie, Tie, F2, Tie, D2, Tie
db $00 ; End
.sub4
db E2, Tie, Tie, Tie, F2, Tie, E2, Tie
db $00 ; End
.Channel2
%SetInstrument($09) ; Strings
%SetDurationN($24, $7F) ; 1/8
%CallSubroutine(.sub2+!ARAMC, 48)
%CallSubroutine(.sub5+!ARAMC, 5)
%CallSubroutine(.sub2+!ARAMC, 32)
%CallSubroutine(.sub5+!ARAMC, 4)
%CallSubroutine(.sub2+!ARAMC, 32)
db $00 ; End of the channel
.sub5
db A2, E3, A2, E3, A2, E3, F3, Tie, A2, E3, A2, E3, A2, E3, D3, Tie
db $00 ; End
.Channel3
%SetChannelVolume($BA)
%SetInstrument($0D) ; Ocarina
%SetDurationN($24, $7F) ; 1/8
%CallSubroutine(.sub2+!ARAMC, 64)
%CallSubroutine(.sub7+!ARAMC, 1)
%CallSubroutine(.sub8+!ARAMC, 1)
%CallSubroutine(.sub7+!ARAMC, 1)
%CallSubroutine(.sub9+!ARAMC, 1)
%CallSubroutine(.sub7+!ARAMC, 1)
%CallSubroutine(.sub8+!ARAMC, 1)
%CallSubroutine(.sub7+!ARAMC, 1)
%CallSubroutine(.sub9+!ARAMC, 1)
%CallSubroutine(.sub2+!ARAMC, 16)
%CallSubroutine(.sub10+!ARAMC, 1)
db B4, E5, Tie
%CallSubroutine(.sub11+!ARAMC, 1)
%CallSubroutine(.sub10+!ARAMC, 1)
db C5, $48, B4, B4, A4, Tie
%CallSubroutine(.sub10+!ARAMC, 1)
db Tie, E5, Tie
%CallSubroutine(.sub11+!ARAMC, 1)
db $24, E5, F5, E5, D5, $48, C5, B4, A4, Tie, Tie, Tie
%CallSubroutine(.sub12+!ARAMC, 2)
db $00 ; End of the channel
.sub7
db $48, A4, C5, B4, $24, Tie, G4, A4, C5
db $00 ; End
.sub8
db $09, B4, C5, $12, B4, A4, Tie, $48, G4, E4
db $00 ; End
.sub9
db $09, B4, C5, B4, Tie, $24, G4, $48, A4, Tie
db $00 ; End
.sub10
db $48, E5, E5, $24, D5, Tie, Tie
db $00 ; End
.sub11
db $24, D5, C5, $48, B4, Tie
db $00 ; End
.sub12
db $48, E5, $24, A5, C6, $12, B5, B5, $48, Tie, G5, $24, E5, A5, C6, $12, B5, $48, B5, $24, Tie, $12, Tie
db $00 ; End
.Channel4
%SetChannelVolume($CA)
%SetInstrument($0F) ; Harp
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.sub2+!ARAMC, 48)
%CallSubroutine(.sub13+!ARAMC, 1)
db $24, A4, $48, G4, E4
%CallSubroutine(.sub13+!ARAMC, 1)
db $24, G4, $48, A4, Tie
%CallSubroutine(.sub2+!ARAMC, 64)
db $00 ; End of the channel
.sub13
db $48, A4, C5, $12, B4, B4, $48, Tie, $24, G4, A4, C5, $12, B4, B4
db $00 ; End
.Channel5
%SetChannelVolume($BA)
%SetInstrument($15) ; Choir
%SetDurationN($48, $7F) ; 1/4
%CallSubroutine(.sub2+!ARAMC, 8)
%CallSubroutine(.sub6+!ARAMC, 15)
db $00 ; End of the channel
.sub6
db A2, Tie, Tie, Tie, Tie, Tie, Tie, Tie
db $00 ; End
assert pc() <= $1AB4D5