;License:MIT ;(c) 2018-9 by 4am ; ; UI functions for doing things then waiting, or waiting then doing things ; ; - ExecuteTransitionAndWait ; - WaitForKeyFor30Seconds ; - CoverFade ExecuteTransitionAt6000AndWait ldy #$60 +HIDE_NEXT_2_BYTES ExecuteTransitionAt6400AndWait ldy #$64 +HIDE_NEXT_2_BYTES ExecuteTransitionAtA000AndWait ldy #$A0 ; /!\ 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 lda #0 +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 bne WAITRTS bit CLEARKBD WAITRTS rts ; /!\ 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 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 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 !if (RELBASE != $2000) and (>WaitForKeyFor30Seconds != >*) { !error "WaitForKeyFor30Seconds crossed a page (", WaitForKeyFor30Seconds, " to ", * }