million-perfect-letters/src/ui.demo.a

315 lines
6.9 KiB
Plaintext
Raw Normal View History

;license:MIT
2022-01-18 18:46:15 +00:00
;(c) 2020-2 by 4am
;
; self-running demo
;
; Public functions:
; - RunDemo
;
DemoDispatchLo
!byte <DemoOnEXIT
!byte <DemoOnLOAD
!byte <DemoOnSHOW
!byte <DemoOnHIDE
!byte <DemoOnLEFT
!byte <DemoOnRIGHT
!byte <DemoOnUP
!byte <DemoOnDOWN
!byte <DemoOnWAIT
2020-09-27 03:12:36 +00:00
!byte <DemoOnNEXT
2020-09-27 19:31:32 +00:00
!byte <DemoOnTYPE
DemoDispatchHi
!byte >DemoOnEXIT
!byte >DemoOnLOAD
!byte >DemoOnSHOW
!byte >DemoOnHIDE
!byte >DemoOnLEFT
!byte >DemoOnRIGHT
!byte >DemoOnUP
!byte >DemoOnDOWN
!byte >DemoOnWAIT
2020-09-27 03:12:36 +00:00
!byte >DemoOnNEXT
2020-09-27 19:31:32 +00:00
!byte >DemoOnTYPE
; opcodes
EXIT = 0
LOAD = 1
SHOW = 2
HIDE = 3
LEFT = 4
RIGHT = 5
UP = 6
DOWN = 7
WAIT = 8
2020-09-27 03:12:36 +00:00
NEXT = 9
2020-09-27 19:31:32 +00:00
TYPE = 10
DemoCode
2020-09-27 03:12:36 +00:00
!byte WAIT ,20
!byte HIDE
!byte LOAD ,0,0
2020-09-27 03:12:36 +00:00
!byte WAIT ,30
!byte HIDE
2020-10-05 20:13:20 +00:00
!byte DOWN
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte DOWN
2020-09-27 03:12:36 +00:00
; A C
; --v-
; LOUD
; ----
; ITLE
; B H
2020-09-27 19:31:32 +00:00
!byte SHOW ,<sHelpHeader1,>sHelpHeader1
2020-09-27 03:12:36 +00:00
!byte WAIT ,30
!byte HIDE
!byte LEFT
!byte WAIT ,2
!byte LEFT
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte UP
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte DOWN
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte DOWN
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte DOWN
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte DOWN
2020-09-27 03:12:36 +00:00
; OC
; TUD
; ---v
; ABLE
; ----
; L H
; I
!byte WAIT ,30
2020-10-05 20:13:20 +00:00
!byte DOWN
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
!byte LEFT
2020-10-05 20:13:20 +00:00
!byte UP
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte UP
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
!byte LEFT
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte UP
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
!byte LEFT
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte DOWN
2020-09-27 03:12:36 +00:00
!byte WAIT ,2
2020-10-05 20:13:20 +00:00
!byte DOWN
2020-09-27 03:12:36 +00:00
; A D
; LO E
; v---
; ITCH
; ----
; BU
; L
!byte NEXT
2020-09-27 19:31:32 +00:00
!byte SHOW ,<sHelpHeader2,>sHelpHeader2
!byte WAIT ,30
!byte HIDE
!byte LOAD ,1,4
!byte WAIT ,30
!byte HIDE
2020-09-27 23:19:59 +00:00
!byte TYPE ,2
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,3
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,0
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,1
2020-09-27 19:31:32 +00:00
!byte NEXT
!byte LOAD ,2,1
!byte WAIT ,30
!byte HIDE
2020-09-27 23:19:59 +00:00
!byte TYPE ,2
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,1
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,0
2020-09-27 19:31:32 +00:00
!byte NEXT
!byte LOAD ,3,6
!byte WAIT ,30
!byte HIDE
2020-09-27 23:19:59 +00:00
!byte TYPE ,3
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,1
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,2
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,0
2020-09-27 19:31:32 +00:00
!byte NEXT
!byte LOAD ,4,11
!byte WAIT ,30
!byte HIDE
2020-09-27 23:19:59 +00:00
!byte TYPE ,1
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,3
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,0
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,4
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,2
2020-09-27 19:31:32 +00:00
!byte NEXT
!byte LOAD ,5,3
!byte WAIT ,30
!byte HIDE
2020-09-27 23:19:59 +00:00
!byte TYPE ,0
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,1
2020-09-27 19:31:32 +00:00
!byte WAIT ,20
2020-09-27 23:19:59 +00:00
!byte TYPE ,2
2020-09-27 19:31:32 +00:00
!byte NEXT
!byte EXIT
2020-10-02 01:35:55 +00:00
;------------------------------------------------------------------------------
; RunDemo
; run self-running demo until keypress or completion
;
; in: none
; out: Z = 0
2020-10-02 01:35:55 +00:00
; all other registers & flags clobbered
;------------------------------------------------------------------------------
RunDemo
jsr Home
lda #7
sta targetVTAB
lda #10
sta minHTAB
+LDADDR sDemoIntro
jsr HeavySilkReveal
jsr SetShowingMessage
jsr LoadDemoPuzzles
+LDADDR DemoCode
+ST16 GetNextDemoByte+1
- jsr GetNextDemoByte
lda DemoDispatchLo, x
sta @j+1
lda DemoDispatchHi, x
sta @j+2
@j jsr $FDFD ; SMC
lda KBD
bpl -
jsr DemoOnEXIT ; does not return
LoadDemoPuzzles
+LDADDR demoPuzzles
+ST16 $FC
+LDADDR WORLDDATA
+ST16 $FE
ldx #2
ldy #0
- lda ($FC), y
sta ($FE), y
iny
bne -
inc $FD
inc $FF
dex
bne -
jmp PreParseWorldData
DrawDemoPuzzleChrome
+PRINT_AT sDemo, 2, 33
lda gPuzzleID
clc
adc #$31
sta @s+1
+LDADDR @s
jsr DrawHeavySilkString
jmp DrawPuzzleChromeCommon
@s !byte 1,$FD
DemoOnEXIT
; out: pops 2 bytes off stack
; A = FF
; Z = 0
; other flags & registers unknown, assume clobbered
pla
pla
lda #$FF
sta WorldFileLoaded ; invalidate cache
rts
DemoOnLOAD
jsr GetNextDemoByte
stx gPuzzleID
jsr GetNextDemoByte
stx gWorldID
lda kWorldLeftMargins, x
sta GlobalLeftMargin
lda kPuzzleWidths, x
jsr InitPuzzleStorage
jsr InitPuzzleSound
ldx gPuzzleID
jsr LoadPuzzleFromMemory
lda #0
sta gSelectedLogicalColumn
jsr DrawDemoPuzzleChrome
jsr DrawPuzzle
jsr AnimatePuzzleIntoPlace
jmp DrawColumnSelectionIndicator
DemoOnSHOW
jsr GetNextDemoByte
txa
pha
jsr GetNextDemoByte
txa
tay
pla
jsr SetNextMessage
jmp ShowMessage
DemoOnHIDE=HideMessage
DemoOnLEFT=PlayEventLeftArrow
DemoOnRIGHT=PlayEventRightArrow
DemoOnUP=PlayEventUpArrow
DemoOnDOWN=PlayEventDownArrow
DemoOnWAIT
jsr GetNextDemoByte
jmp LongWaitForKeyWithTimeout
DemoOnNEXT=AnimatePuzzleCompleted
DemoOnTYPE
jsr GetNextDemoByte
txa
asl
asl
asl
- tax
pha
lda target_words, x
beq +
sta gLastKeyPressed
jsr PlayEventLetter
pla
clc
adc #1
bcc -
+ pla
rts
GetNextDemoByte
ldx $FDFD ; SMC
inc GetNextDemoByte+1
bne +
inc GetNextDemoByte+2
+ rts