;license:MIT ;(c) 2018-2020 by 4am ; ; HGR title and action slideshows ; ; Public functions ; - HGRTitleSlideshow ; - HGRActionSlideshow ; - HGRSingle ; ;------------------------------------------------------------------------------ ; HGRTitleSlideshow ; execute a slideshow of hi-res title screenshots ; ; in: none ; out: everything clobbered ; graphics mode still displaying hi-res screen with last picture visible ;------------------------------------------------------------------------------ HGRTitleSlideshow jsr LoadHGRTransition ; load transition effect code at $6000 jsr okvs_iter ; cycle through all listed HGR files !word gSlideshowStore !word HGRTitleCallback ; address of callback (called on each file) rts ; exit with last picture still visible ;------------------------------------------------------------------------------ ; HGRActionSlideshow ; execute a slideshow of hi-res action screenshots ; ; in: none ; out: everything clobbered ; graphics mode still displaying hi-res screen with last picture visible ;------------------------------------------------------------------------------ HGRActionSlideshow jsr LoadHGRTransition ; load transition effect code at $6000 jsr okvs_iter ; cycle through all listed HGR files !word gSlideshowStore !word HGRActionCallback ; address of callback (called on each file) rts ; exit with last picture still visible ;------------------------------------------------------------------------------ ; HGRSingle ; display a single hi-res screenshot, with transition effect ; ; in: none ; out: everything clobbered ; graphics mode still displaying hi-res screen with last picture visible ;------------------------------------------------------------------------------ HGRSingle +STAY @fname jsr LoadFile ; load compressed HGR screenshot at $3FF8 !word kRootDirectory @fname !word $FDFD ; SMC !word $3FF8 jsr DecompressHGR jsr LoadHGRTransition ; load transition effect code at $6000 jmp ExecuteTransitionAt6000AndWait ;------------------------------------------------------------------------------ ; LoadHGRTransition [private] ; looks up name of next HGR transition effect in FX.CONF and loads that file ; at $6000 ; in: gGlobalPrefsStore has been initialized ; out: all registers and flags clobbered ; $6000..$BFFF contains transition effect code ;------------------------------------------------------------------------------ LoadHGRTransition jsr LoadFile ; load HGR transition effects list into $8000 !word kRootDirectory !word kFXConfFile - !word $8000 jsr ParseKeyValueList ; parse HGR transition effects list into $6000 !word gFXStore !word - !byte 0 jsr pref_get ; get HGR transition effect from prefs !word kNextFX !word gFXStore +STAY ++ ; A/Y = filename (don't load file yet) ; X = index of the transition in FX store +LDADDR gFXStore jsr okvs_next ; get transition after this one +STAY + jsr pref_set ; update prefs store and save to disk !word kNextFX + !word $FDFD ; SMC jsr LoadFile ; now load transition effect code into $6000 !word kFXDirectory ++ !word $FDFD ; SMC !word $6000 HGRRTS rts ;------------------------------------------------------------------------------ ; HGRTitleCallback [private] ; callback called by okvs_iter on gSlideshowStore ; to load and display a single HGR title screenshot ; in: A/Y contains address of filename (name only, path is always /TITLE.HGR/) ; X contains 0-based index of the current record in gSlideshowStore ; out: all registers and flags clobbered ; $0800..$1EFF preserved (this contains the gSlideshowStore OKVS data) ; $2000..$BFFF clobbered by graphics data and transition code ;------------------------------------------------------------------------------ HGRTitleCallback bit KBD bmi HGRRTS +STAY + jsr GetGameInfo ; if game is not found (C will be set here), it means it can't be played on ; this machine due to memory or joystick requirements, so we don't display ; it in slideshows bcs HGRRTS stx gGameToLaunch jsr LoadFile ; load HGR screenshot at $4000 !word kHGRTitleDirectory + !word $FDFD ; SMC !word $4000 jmp ExecuteTransitionAt6000AndWait ;------------------------------------------------------------------------------ ; HGRActionCallback [private] ; callback called by okvs_iter on gSlideshowStore ; to load and display a single HGR action screenshot ; in: A/Y contains address of filename (name only, path is always /ACTION.HGR/) ; X contains 0-based index of the current record in gSlideshowStore ; gGamesListStore must be initialized ; out: all registers and flags clobbered ; $0800..$1EFF preserved (this contains the gSlideshowStore OKVS data) ; $2000..$BFFF clobbered by graphics data and transition code ;------------------------------------------------------------------------------ HGRActionCallback bit KBD bmi HGRRTS +STAY + jsr GetGameInfoInActionSlideshow ; if game name is not found (C will be set here), it means the game ; can't be played due to memory or joystick requirements, so we hide ; it from slideshows bcs HGRRTS ; found the game +STAY SAVE ; (SAVE) -> game title stx gGameToLaunch jsr LoadFile ; load compressed HGR screenshot at $3FF8 !word kHGRActionDirectory + !word $FDFD ; SMC !word $3FF8 jsr DecompressHGR jmp DrawGameTitleInActionSlideshowHGR ;------------------------------------------------------------------------------ ; DecompressHGR [private] ; ; in: compressed HGR loaded to $3FF8+ ; file size in sizelo2/sizehi2 as set by ProRWTS2 ; out: decompressed HGR at $4000..$5FFF ; $00A7..$00A8 clobbered by decompressor ; $00AE..$00AF clobbered by decompressor ; $00FC..$00FF clobbered by decompressor ; $0200..$03CB clobbered by decompressor ;------------------------------------------------------------------------------ DecompressHGR lda #$3F DecompressCommon pha jsr SwitchToBank2 jsr EnableAccelerator lda sizehi2 pha lda sizelo2 pha lda #>(@loaddecrunch - 1) pha lda #<(@loaddecrunch - 1) pha lda auxreq bne + jmp LoadFile ; load decompression code to $200 + jmp LoadAuxFile ; load decompression code to $200/aux @loaddecrunch !word kRootDirectory !word kDecrunchFile !word $200 ldx auxreq sta $C002,x sta $C004,x jsr $314 ; decrunch entry jsr SwitchToBank2 jmp DisableAcceleratorAndSwitchToBank1