4cade/src/ui.wait.a

87 lines
2.8 KiB
Plaintext
Raw Normal View History

2019-10-08 17:31:41 +00:00
;License:MIT
;(c) 2018-9 by 4am
;
; UI functions for doing things then waiting, or waiting then doing things
;
; - ExecuteTransitionAndWait
; - WaitForKeyFor30Seconds
; - CoverFade
2019-10-10 02:21:46 +00:00
ExecuteTransitionAt6000AndWait
ldy #$60
+HIDE_NEXT_2_BYTES
ExecuteTransitionAt6400AndWait
ldy #$64
+HIDE_NEXT_2_BYTES
ExecuteTransitionAtA000AndWait
ldy #$A0
2019-10-08 17:31:41 +00:00
; /!\ execution falls through here from ui.attract.dhgr/DHGRActionCallback
;------------------------------------------------------------------------------
; 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
2019-10-10 02:21:46 +00:00
lda #0
2019-10-08 17:31:41 +00:00
+STAY @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
2019-10-08 19:01:19 +00:00
bne WAITRTS
2019-10-08 17:31:41 +00:00
bit CLEARKBD
2019-10-08 19:01:19 +00:00
WAITRTS rts
2019-10-08 17:31:41 +00:00
; /!\ keep this last in the file to ensure it doesn't cross a page boundary /!\
;------------------------------------------------------------------------------
; 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
2019-10-08 19:01:19 +00:00
bmi WAITRTS
2019-10-08 17:31:41 +00:00
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
jsr LoadCoverOffscreen
jsr ShowOtherPage
lda OffscreenPage
bne +
jsr LoadCoverOffscreen
jsr ShowOtherPage
+ 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