2018-04-02 19:43:11 +00:00
|
|
|
;license:MIT
|
|
|
|
;(c) 2018 by 4am
|
|
|
|
;
|
|
|
|
; User interface - views and paint routines for 'resume game' screen
|
|
|
|
;
|
|
|
|
; Public functions
|
|
|
|
; - ResumeGameDialog
|
|
|
|
;
|
|
|
|
|
|
|
|
!zone {
|
|
|
|
; View IDs (application-specific, acceptable range 0..15, no duplicates)
|
|
|
|
ID_RESUME_FRAME = 0
|
|
|
|
ID_RESUME_SLOT0 = 1
|
|
|
|
ID_RESUME_SLOT1 = 2
|
|
|
|
ID_RESUME_SLOT2 = 3
|
|
|
|
ID_RESUME_SLOT3 = 4
|
|
|
|
ID_RESUME_SLOT4 = 5
|
|
|
|
ID_RESUME_SLOT5 = 6
|
|
|
|
ID_RESUME_SLOT6 = 7
|
|
|
|
ID_RESUME_SLOT7 = 8
|
|
|
|
ID_RESUME_NEWGAME = 9
|
|
|
|
ID_RESUME_OK = 10
|
|
|
|
ID_RESUME_CANCEL = 11
|
|
|
|
|
|
|
|
gResumeViewInUse
|
|
|
|
!byte 1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0
|
|
|
|
|
|
|
|
; action keys for options screen
|
|
|
|
.keys
|
|
|
|
!byte $CF,ID_RESUME_OK ; O
|
|
|
|
!byte $EF,ID_RESUME_OK ; o
|
|
|
|
!byte $8D,ID_RESUME_OK ; Return
|
|
|
|
!byte $C3,ID_RESUME_CANCEL ; C
|
|
|
|
!byte $E3,ID_RESUME_CANCEL ; c
|
|
|
|
!byte $9B,ID_RESUME_CANCEL ; Esc
|
|
|
|
!byte $B0,ID_RESUME_SLOT0 ; 0
|
|
|
|
!byte $B1,ID_RESUME_SLOT1 ; 1
|
|
|
|
!byte $B2,ID_RESUME_SLOT2 ; 2
|
|
|
|
!byte $B3,ID_RESUME_SLOT3 ; 3
|
|
|
|
!byte $B4,ID_RESUME_SLOT4 ; 4
|
|
|
|
!byte $B5,ID_RESUME_SLOT5 ; 5
|
|
|
|
!byte $B6,ID_RESUME_SLOT6 ; 6
|
|
|
|
!byte $B7,ID_RESUME_SLOT7 ; 7
|
|
|
|
!byte $CE,ID_RESUME_NEWGAME ; N
|
|
|
|
!byte $EE,ID_RESUME_NEWGAME ; n
|
|
|
|
!byte $88,ID_RESUME_PREVIOUS; left arrow
|
|
|
|
!byte $95,ID_RESUME_NEXT ; right arrow
|
|
|
|
!byte $8B,ID_RESUME_PREVIOUS; up arrow
|
|
|
|
!byte $8A,ID_RESUME_NEXT ; down arrow
|
|
|
|
.endkeys
|
|
|
|
|
|
|
|
; IDs of actions that do not correspond to WeeGUI view IDs have high bit set
|
|
|
|
ID_RESUME_PREVIOUS = $81
|
|
|
|
ID_RESUME_NEXT = $82
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; ResumeDialog
|
|
|
|
; call WeeGUI to create and paint 'resume game' screen, and run to completion
|
|
|
|
;
|
|
|
|
; in: WeeGUI initialized
|
|
|
|
; out: exits via MainScreen or LaunchInterpreterWithGame
|
|
|
|
; all registers and flags clobbered
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
ResumeDialog
|
|
|
|
ldx #$FF
|
|
|
|
txs
|
|
|
|
ldx #WGResetAll ; reset WeeGUI
|
|
|
|
jsr WeeGUI
|
|
|
|
|
2018-04-11 19:12:36 +00:00
|
|
|
; TODO call ZINFO and calculate proper height
|
|
|
|
ldy #3
|
|
|
|
sty kViewResumeFrame+3 ; frame top
|
|
|
|
iny
|
|
|
|
sty kViewResumeOK+2 ; OK top
|
|
|
|
iny
|
|
|
|
iny
|
|
|
|
sty kViewResumeCancel+2 ; Cancel top
|
|
|
|
ldy #19
|
|
|
|
sty kViewResumeFrame+5 ; frame visible height
|
|
|
|
sty kViewResumeFrame+7 ; frame height
|
|
|
|
|
|
|
|
jsr CreateDialog
|
|
|
|
!word kViewResumeFrame
|
|
|
|
!word kStringResumeFrame
|
2018-04-02 19:43:11 +00:00
|
|
|
|
|
|
|
jsr CreateButton ; create UI controls
|
2018-04-11 19:12:36 +00:00
|
|
|
!word kViewResumeOK
|
2018-04-02 19:43:11 +00:00
|
|
|
jsr CreateButton
|
2018-04-11 19:12:36 +00:00
|
|
|
!word kViewResumeCancel
|
|
|
|
|
|
|
|
jsr CreateRadio
|
|
|
|
!word kViewResumeSlot0
|
|
|
|
jsr CreateRadio
|
|
|
|
!word kViewResumeSlot1
|
|
|
|
jsr CreateRadio
|
|
|
|
!word kViewResumeSlot2
|
|
|
|
jsr CreateRadio
|
|
|
|
!word kViewResumeSlot3
|
|
|
|
jsr CreateRadio
|
|
|
|
!word kViewResumeSlot4
|
|
|
|
jsr CreateRadio
|
|
|
|
!word kViewResumeSlot5
|
|
|
|
jsr CreateRadio
|
|
|
|
!word kViewResumeSlot6
|
|
|
|
jsr CreateRadio
|
|
|
|
!word kViewResumeSlot7
|
2018-04-02 19:43:11 +00:00
|
|
|
|
|
|
|
ldx #WGDesktop ; paint background
|
|
|
|
jsr WeeGUI
|
|
|
|
|
|
|
|
ldx #WGViewPaintAll ; paint UI controls (window frame, buttons, checkboxes, radio buttons)
|
|
|
|
jsr WeeGUI
|
|
|
|
|
|
|
|
jsr PaintTitleBar ; paint top title bar
|
|
|
|
|
|
|
|
ldx #WGSelectView
|
|
|
|
lda #ID_RESUME_FRAME
|
|
|
|
jsr WeeGUI
|
|
|
|
|
|
|
|
.runLoop
|
|
|
|
ldx #WGPendingViewAction
|
|
|
|
jsr WeeGUI
|
|
|
|
lda $c000
|
|
|
|
bpl .runLoop
|
|
|
|
bit $c010
|
2018-04-11 19:12:36 +00:00
|
|
|
jsr HandleResumeKey
|
2018-04-02 19:43:11 +00:00
|
|
|
bra .runLoop
|
|
|
|
|
|
|
|
;------------------------------------------------------------------------------
|
|
|
|
; internal functions
|
|
|
|
|
2018-04-11 19:12:36 +00:00
|
|
|
HandleResumeKey
|
2018-04-02 19:43:11 +00:00
|
|
|
ldx #.endkeys-.keys
|
|
|
|
- cmp .keys,x
|
|
|
|
beq .foundKey
|
|
|
|
dex
|
|
|
|
dex
|
|
|
|
bpl -
|
|
|
|
jmp SoftBell
|
|
|
|
.foundKey
|
|
|
|
lda .keys+1,x
|
|
|
|
ldx #WGSelectView
|
|
|
|
jsr WeeGUI
|
2018-04-11 19:12:36 +00:00
|
|
|
jmp SimulateClick
|
2018-04-02 19:43:11 +00:00
|
|
|
|
2018-04-11 19:12:36 +00:00
|
|
|
callback_resume_ok = LaunchInterpreterWithGame
|
|
|
|
callback_resume_cancel = MainScreen
|
2018-04-02 19:43:11 +00:00
|
|
|
|
|
|
|
kViewResumeFrame
|
|
|
|
!byte ID_RESUME_FRAME ; view ID
|
|
|
|
!byte 2 ; style (decorated frame)
|
2018-04-11 19:12:36 +00:00
|
|
|
!byte 5 ; left
|
2018-04-02 19:43:11 +00:00
|
|
|
!byte $FD ; top
|
2018-04-11 19:12:36 +00:00
|
|
|
!byte 70 ; visible width
|
2018-04-02 19:43:11 +00:00
|
|
|
!byte $FD ; visible height
|
2018-04-11 19:12:36 +00:00
|
|
|
!byte 70 ; width
|
|
|
|
!byte $FD ; height
|
2018-04-02 19:43:11 +00:00
|
|
|
kStringResumeFrame
|
|
|
|
!text "Resume Game",0
|
|
|
|
|
2018-04-11 19:12:36 +00:00
|
|
|
kViewResumeOK
|
2018-04-02 19:43:11 +00:00
|
|
|
!byte ID_RESUME_OK ; view ID
|
2018-04-11 19:12:36 +00:00
|
|
|
!byte 63 ; left
|
2018-04-02 19:43:11 +00:00
|
|
|
!byte $FD ; top
|
|
|
|
!byte 10 ; width
|
2018-04-11 19:12:36 +00:00
|
|
|
!word callback_resume_ok ; callback
|
2018-04-02 19:43:11 +00:00
|
|
|
!word kStringOK ; caption
|
|
|
|
|
2018-04-11 19:12:36 +00:00
|
|
|
kViewResumeCancel
|
|
|
|
!byte ID_RESUME_CANCEL ; view ID
|
|
|
|
!byte 63 ; left
|
|
|
|
!byte $FD ; top
|
2018-04-02 19:43:11 +00:00
|
|
|
!byte 10 ; width
|
|
|
|
!word callback_resume_cancel ; callback
|
|
|
|
!word kStringCancel ; caption
|
|
|
|
|
2018-04-11 19:12:36 +00:00
|
|
|
kViewResumeSlot0
|
|
|
|
!byte ID_RESUME_SLOT0 ; view ID
|
|
|
|
!byte 8 ; left
|
2018-04-02 19:43:11 +00:00
|
|
|
!byte 4 ; top
|
2018-04-11 19:12:36 +00:00
|
|
|
!word kStringSlot0 ; caption
|
|
|
|
|
|
|
|
kStringSlot0
|
|
|
|
!text " Slot "
|
|
|
|
!byte $30 ; '0' inverse
|
|
|
|
!text ":",0
|
|
|
|
|
|
|
|
kViewResumeSlot1
|
|
|
|
!byte ID_RESUME_SLOT1 ; view ID
|
|
|
|
!byte 8 ; left
|
|
|
|
!byte 6 ; top
|
|
|
|
!word kStringSlot1 ; caption
|
|
|
|
|
|
|
|
kStringSlot1
|
|
|
|
!text " Slot "
|
|
|
|
!byte $31 ; '1' inverse
|
|
|
|
!text ":",0
|
|
|
|
|
|
|
|
kViewResumeSlot2
|
|
|
|
!byte ID_RESUME_SLOT2 ; view ID
|
|
|
|
!byte 8 ; left
|
|
|
|
!byte 8 ; top
|
|
|
|
!word kStringSlot2 ; caption
|
|
|
|
|
|
|
|
kStringSlot2
|
|
|
|
!text " Slot "
|
|
|
|
!byte $32 ; '2' inverse
|
|
|
|
!text ":",0
|
|
|
|
|
|
|
|
kViewResumeSlot3
|
|
|
|
!byte ID_RESUME_SLOT3 ; view ID
|
|
|
|
!byte 8 ; left
|
|
|
|
!byte 10 ; top
|
|
|
|
!word kStringSlot3 ; caption
|
|
|
|
|
|
|
|
kStringSlot3
|
|
|
|
!text " Slot "
|
|
|
|
!byte $33 ; '3' inverse
|
|
|
|
!text ":",0
|
|
|
|
|
|
|
|
kViewResumeSlot4
|
|
|
|
!byte ID_RESUME_SLOT4 ; view ID
|
|
|
|
!byte 8 ; left
|
|
|
|
!byte 12 ; top
|
|
|
|
!word kStringSlot4 ; caption
|
|
|
|
|
|
|
|
kStringSlot4
|
|
|
|
!text " Slot "
|
2018-04-02 19:43:11 +00:00
|
|
|
!byte $34 ; '4' inverse
|
2018-04-11 19:12:36 +00:00
|
|
|
!text ":",0
|
|
|
|
|
|
|
|
kViewResumeSlot5
|
|
|
|
!byte ID_RESUME_SLOT5 ; view ID
|
|
|
|
!byte 8 ; left
|
2018-04-02 19:43:11 +00:00
|
|
|
!byte 14 ; top
|
2018-04-11 19:12:36 +00:00
|
|
|
!word kStringSlot5 ; caption
|
|
|
|
|
|
|
|
kStringSlot5
|
|
|
|
!text " Slot "
|
|
|
|
!byte $35 ; '5' inverse
|
|
|
|
!text ":",0
|
|
|
|
|
|
|
|
kViewResumeSlot6
|
|
|
|
!byte ID_RESUME_SLOT6 ; view ID
|
|
|
|
!byte 8 ; left
|
|
|
|
!byte 16 ; top
|
|
|
|
!word kStringSlot6 ; caption
|
|
|
|
|
|
|
|
kStringSlot6
|
|
|
|
!text " Slot "
|
|
|
|
!byte $36 ; '6' inverse
|
|
|
|
!text ":",0
|
|
|
|
|
|
|
|
kViewResumeSlot7
|
|
|
|
!byte ID_RESUME_SLOT7 ; view ID
|
|
|
|
!byte 8 ; left
|
|
|
|
!byte 18 ; top
|
|
|
|
!word kStringSlot7 ; caption
|
|
|
|
|
|
|
|
kStringSlot7
|
|
|
|
!text " Slot "
|
|
|
|
!byte $37 ; '7' inverse
|
|
|
|
!text ":",0
|
2018-04-02 19:43:11 +00:00
|
|
|
}
|