Merge pull request #57 from qwertymodo/master

Allow MSU-1 fanfares to play to the end in non-tournament ROMs
This commit is contained in:
Karkat
2018-09-29 02:43:26 -04:00
committed by GitHub
2 changed files with 77 additions and 62 deletions

View File

@@ -1321,12 +1321,24 @@ JSL.l GetMagicBatItem
; MSU Music
;--------------------------------------------------------------------------------
org $0080D7 ; <- D7 - Bank00.asm:172 (SEP #$30)
spc_nmi:
JML msu_main
NOP
JML msu_main : NOP
spc_continue:
org $0EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20)
org $08C421 ; <- AD4021 F005 - ancilla_receive_item.asm:108 (LDA $2140 : BEQ .wait_for_music)
JML pendant_fanfare : NOP
pendant_continue:
org $08C42B
pendant_done:
org $08C62A ; <- AD4021 D008 - ancilla_receive_item.asm:442 (LDA $2140 : BNE .waitForSilence)
JML crystal_fanfare : NOP
crystal_done:
org $08C637
crystal_done:
org $0EE6EC ; <- E220 A922 - Bank0E.asm:2892 (SEP #$20 : LDA.b #$22 : STA $012C)
JSL.l ending_wait
;--------------------------------------------------------------------------------

119
msu.asm
View File

@@ -75,37 +75,25 @@
!VAL_VOLUME_FULL = #$FF
msu_main:
SEP #$20 ; set 8-bit accumulator
LDA $4210 ; thing we wrote over
REP #$20 ; set 16-bit accumulator
LDA !REG_MSU_ID_01
CMP !VAL_MSU_ID_01
BEQ .continue
SEP #$20 ; set 8-BIT accumulator
LDA $4210 ; thing we wrote over
REP #$20 ; set 16-BIT accumulator
LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BEQ .continue
.nomsu
SEP #$30
JML spc_continue
.continue
LDA !REG_MSU_ID_23
CMP !VAL_MSU_ID_23
BNE .nomsu
LDA !REG_MSU_ID_45
CMP !VAL_MSU_ID_45
BNE .nomsu
LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .nomsu
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .nomsu
SEP #$30
LDX !REG_MUSIC_CONTROL
BNE command_ff
LDA !REG_MSU_LOAD_FLAG
BEQ do_fade
LDX !REG_MUSIC_CONTROL : BNE command_ff
LDA !REG_MSU_LOAD_FLAG : BEQ do_fade
msu_check_busy:
LDA !REG_MSU_STATUS
BIT !FLAG_MSU_STATUS_AUDIO_BUSY
BEQ .ready
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_BUSY : BEQ .ready
JML spc_continue
.ready
LDA !REG_MSU_STATUS
BIT !FLAG_MSU_STATUS_TRACK_MISSING
BNE spc_fallback
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_TRACK_MISSING : BNE spc_fallback
LDA !VAL_VOLUME_FULL
STA !REG_TARGET_VOLUME
STA !REG_CURRENT_VOLUME
@@ -125,23 +113,19 @@ spc_fallback:
JML spc_continue
do_fade:
LDA !REG_CURRENT_VOLUME
CMP !REG_TARGET_VOLUME
BNE .continue
LDA !REG_CURRENT_VOLUME : CMP !REG_TARGET_VOLUME : BNE .continue
JML spc_continue
.continue
BCC .increment
.decrement
SBC !VAL_VOLUME_DECREMENT
BCS .set
SBC !VAL_VOLUME_DECREMENT : BCS .set
.mute
STZ !REG_CURRENT_VOLUME
STZ !REG_MSU_CONTROL
STZ !REG_CURRENT_MSU_TRACK
BRA .set
.increment
ADC !VAL_VOLUME_INCREMENT
BCC .set
ADC !VAL_VOLUME_INCREMENT : BCC .set
LDA !VAL_VOLUME_FULL
.set
STA !REG_CURRENT_VOLUME
@@ -149,38 +133,32 @@ do_fade:
JML spc_continue
command_ff:
CPX !VAL_COMMAND_LOAD_NEW_BANK
BNE command_f3
CPX !VAL_COMMAND_LOAD_NEW_BANK : BNE command_f3
JML spc_continue
command_f3:
CPX !VAL_COMMAND_FULL_VOLUME
BNE command_f2
CPX !VAL_COMMAND_FULL_VOLUME : BNE command_f2
STX !REG_SPC_CONTROL
LDA !VAL_VOLUME_FULL
STA !REG_TARGET_VOLUME
JML spc_continue
command_f2:
CPX !VAL_COMMAND_FADE_HALF
BNE command_f1
CPX !VAL_COMMAND_FADE_HALF : BNE command_f1
STX !REG_SPC_CONTROL
LDA !VAL_VOLUME_HALF
STA !REG_TARGET_VOLUME
JML spc_continue
command_f1:
CPX !VAL_COMMAND_FADE_OUT
BNE load_track
CPX !VAL_COMMAND_FADE_OUT : BNE load_track
STX !REG_SPC_CONTROL
STZ !REG_TARGET_VOLUME
JML spc_continue
load_track:
CPX !REG_CURRENT_MSU_TRACK
BNE .continue
CPX #$1B
BEQ .continue
CPX !REG_CURRENT_MSU_TRACK : BNE .continue
CPX #$1B : BEQ .continue
JML spc_continue
.continue
STX !REG_MSU_TRACK_LO
@@ -191,24 +169,49 @@ load_track:
STX !REG_CURRENT_MSU_TRACK
JML spc_continue
pendant_fanfare:
REP #$20
LDA !TournamentSeed : BNE .spc
LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BNE .spc
LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .spc
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc
SEP #$20
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
.continue
jml pendant_continue
.spc
SEP #$20
LDA !REG_SPC_CONTROL : BNE .continue
.done
jml pendant_done
crystal_fanfare:
REP #$20
LDA !TournamentSeed : BNE .spc
LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BNE .spc
LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .spc
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .spc
SEP #$20
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BEQ .done
.continue
jml crystal_continue
.spc
SEP #$20
LDA !REG_SPC_CONTROL : BNE .continue
.done
jml crystal_done
ending_wait:
rep #$20
lda !REG_MSU_ID_01
cmp !VAL_MSU_ID_01
bne .done
lda !REG_MSU_ID_23
cmp !VAL_MSU_ID_23
bne .done
lda !REG_MSU_ID_45
cmp !VAL_MSU_ID_45
bne .done
sep #$20
REP #$20
LDA !REG_MSU_ID_01 : CMP !VAL_MSU_ID_01 : BNE .done
LDA !REG_MSU_ID_23 : CMP !VAL_MSU_ID_23 : BNE .done
LDA !REG_MSU_ID_45 : CMP !VAL_MSU_ID_45 : BNE .done
SEP #$20
.wait
lda !REG_MSU_STATUS
bit !FLAG_MSU_STATUS_AUDIO_PLAYING
bne .wait
LDA !REG_MSU_STATUS : BIT !FLAG_MSU_STATUS_AUDIO_PLAYING : BNE .wait
.done
sep #$20
lda #$22
rtl
SEP #$20
LDA #$22
RTL