mirror of
https://github.com/a2-4am/4cade.git
synced 2024-08-28 14:29:22 +00:00
97 lines
3.2 KiB
Plaintext
97 lines
3.2 KiB
Plaintext
;License:MIT
|
|
;(c) 2018-2020 by 4am
|
|
;
|
|
; UI functions for doing things then waiting, or waiting then doing things
|
|
;
|
|
; - ExecuteTransitionAt6000AndWait
|
|
; - ExecuteTransitionAt6400AndWait
|
|
; - ExecuteTransitionAtA000AndWait
|
|
; - ExecuteTransitionAndWait
|
|
; - WaitForKeyFor30Seconds
|
|
; - CoverFade
|
|
|
|
ExecuteTransitionAt6000AndWait
|
|
ldy #$60
|
|
+HIDE_NEXT_2_BYTES
|
|
ExecuteTransitionAt6400AndWait
|
|
ldy #$64
|
|
+HIDE_NEXT_2_BYTES
|
|
ExecuteTransitionAtA000AndWait
|
|
ldy #$A0
|
|
; /!\ execution falls through here to ExecuteTransitionAndWait
|
|
;------------------------------------------------------------------------------
|
|
; ExecuteTransitionAndWait
|
|
; call transition effect code (address passed in) and wait a period of time
|
|
; or until the user presses a key
|
|
;
|
|
; in: A/Y = address of transition effect code
|
|
; out: all flags and registers clobbered
|
|
;------------------------------------------------------------------------------
|
|
ExecuteTransitionAndWait
|
|
lda #0
|
|
+ST16 @j+1
|
|
@j jsr $FDFD ; SMC call transition effect code
|
|
ldx #$20 ; picture is showing so now we wait
|
|
- lda #0
|
|
jsr WaitForKeyWithTimeout
|
|
bmi +
|
|
dex
|
|
bpl -
|
|
+ lda KBD
|
|
cmp #$95
|
|
bne WAITRTS
|
|
bit CLEARKBD
|
|
WAITRTS rts
|
|
|
|
;------------------------------------------------------------------------------
|
|
; WaitForKeyFor30Seconds
|
|
; does what it says on the tin
|
|
;
|
|
; in: none
|
|
; out: if user presses a key before the timer runs out, exits with A = key
|
|
; and X/Y preserved
|
|
; otherwise exits via MegaAttractMode and everything is clobbered
|
|
;------------------------------------------------------------------------------
|
|
WaitForKeyFor30Seconds
|
|
lda #$16 ; initialize timeout counters
|
|
sta Timeout
|
|
sta Timeout+1
|
|
sta Timeout+2
|
|
@loop
|
|
lda KBD
|
|
bmi WAITRTS
|
|
|
|
inc RNDSEED+1 ; these are only ever incremented, never
|
|
bne + ; reset (may be used as a pseudorandom
|
|
inc RNDSEED ; seed)
|
|
+
|
|
dec Timeout
|
|
bne @loop
|
|
dec Timeout+1
|
|
bne @loop
|
|
dec Timeout+2
|
|
bne @loop
|
|
; /!\ execution falls through here to CoverFade
|
|
;------------------------------------------------------------------------------
|
|
; CoverFade
|
|
; load cover file and execute a specific transition effect on it
|
|
;
|
|
; in: none
|
|
; out: exits via MegaAttractMode and everything is clobbered
|
|
;------------------------------------------------------------------------------
|
|
CoverFade
|
|
jsr ForceHGRMode
|
|
jsr LoadCoverOffscreen
|
|
jsr ShowOtherPage
|
|
lda OffscreenPage
|
|
beq CoverFade
|
|
jsr LoadFile ; load transition effect code at $6000
|
|
!word kFXDirectory
|
|
!word kCoverFadeFile
|
|
!word $6000
|
|
jsr $6000 ; call transition effect
|
|
jmp MegaAttractMode ; exit via mega attract mode
|
|
!if (RELBASE != $2000) and (>WaitForKeyFor30Seconds != >*) {
|
|
!error "WaitForKeyFor30Seconds crossed a page (", WaitForKeyFor30Seconds, " to ", *
|
|
}
|