pitch-dark/src/ui.artwork.a

90 lines
2.5 KiB
Plaintext

;license:MIT
;(c) 2018 by 4am
;
; User interface - functions to load and display double hi-res artwork
;
; Public functions
; - DisplayArtwork
;
kArtworkRootDirectory ; length-prefixed pathname of DHGR graphic files
!byte 8
!raw "ARTWORK/"
kArtworkGSRootDirectory ; length-prefixed pathname of SHGR graphic files
!byte 10
!raw "ARTWORKGS/"
;------------------------------------------------------------------------------
; DisplayArtwork
; load and display double hi-res artwork, then wait for key or mouse click
;
; in: WeeGUI initialized
; out: all registers and flags clobbered
;------------------------------------------------------------------------------
DisplayArtwork
ldx #0 ; set Z flag always
!cpu 65816
rep #2 ; clear Z flag on 65816 only
!cpu 65c02
beq + ; skip GS-specific code on non-GS machines (required, will crash on //c, grr)
lda $C029
and #$1F
sta $C029 ; set GS NEWVIDEO mode to turn off linearize
inx
+ jsr ResetPath
+LDADDR kArtworkRootDirectory
dex
bne +
+LDADDR kArtworkGSRootDirectory
+ phx
jsr AddToPath
jsr okvs_get
!word gGlobalPrefsStore
!word kLastPlayed
jsr AddToPath ; gPathname = 'ARTWORK[GS]/<game shortname>'
plx
phx
beq @loadSHR
jsr LoadDHRFile ; load artwork from file
!word gPathname
!word kProDOSFileBuffer
plx
bcc +
- jmp SoftBell
+ sta $C000 ; display double hi-res page 1
sta $C00D
sta $C05E
sta $C001
sta $C057
sta $C052
sta $C054
sta $C050
bcc @waitKey
@loadSHR
jsr LoadSHRFile ; load artwork from file
!word gPathname
!word kProDOSFileBuffer
plx
bcs -
lda $C029
ora #$C1
sta $C029 ; set GS NEWVIDEO mode to turn on SHR mode
@waitKey
phx
jsr ClearPendingInput
- jsr AnyKeyOrClick
bcc -
sta $C051 ; back to text
plx
bne +
lda $C029
and #$3F
sta $C029 ; back to text GS-style
+ jmp ClearPendingInput