mirror of
https://github.com/a2-4am/4sports.git
synced 2025-01-29 17:29:50 +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 ", *
|
||
|
}
|