4cade/src/ui.animation.a

83 lines
2.6 KiB
Plaintext

;License:MIT
;(c) 2018-9 by 4am
;
; functions for animated title screens
;
; Public functions:
; - MaybeAnimateTitle
;
; /!\ execution falls through from ui.search.mode/FindMatchingTitle
;------------------------------------------------------------------------------
; MaybeAnimateTitle
; slow down to 1 Mhz (always), then check if there is an animation for the
; title screenshot we just displayed, and if so, load it and call it
;
; in: none
; out: C clear
; all other flags clobbered
; all registers clobbered
;------------------------------------------------------------------------------
MaybeAnimateTitle
jsr SwitchToBank2
jsr DisableAcceleratorAndSwitchToBank1
lda #$3F
ldy OffscreenPage
bne +
eor #$60
+ sta SAVE+1
and #$60
sta @a+2
eor #$60
sta @b+2
lda #$FD
sta SAVE
ldy #0
lda (SAVE),y ; see if there is a hidden JMP to an
cmp #$4C ; animation routine for this screen
; at +$1FFD (after the graphics data,
; in the last 3 bytes of a $2000 byte
; file -- this area part of a 'screen
; hole' and is not displayed on screen)
bne @exit ; if not, we're done here
; copy one HGR screen to the other
ldx #$20
@a lda $FD00,y ; SMC
@b sta $FD00,y ; SMC
iny
bne @a
inc @a+2
inc @b+2
dex
bne @a
; load the animation routine, which is stored in a subdirectory by filename
jsr GetGameToLaunch
+STAY +
jsr LoadFile
!word kAnimatedTitleDirectory
+ !word $FDFD
!word 0
ldx #5 ; copy prelaunch code
- lda @titleAnimPrelaunch,x
sta $106,x
dex
bpl -
jsr Launch ; execute the animation
jsr ResyncPage ; we don't know which HGR page is showing
; when the animation returns, so resync
; the current one with our OffscreenPage
; variable
@exit clc ; tell caller not to refresh screen
rts
@titleAnimPrelaunch ; this is executed from $106/main by |Launch|
bit $C082
jmp (SAVE)