add about page

This commit is contained in:
4am 2020-05-04 12:56:05 -04:00
parent e089ce7d43
commit 07de19b3cd
4 changed files with 205 additions and 6 deletions

2
notes
View File

@ -17,3 +17,5 @@ Subjective bugs:
4x3-042 reuses VERY too soon
5x3-004 reuses ENJOY too soon
5x4-002 does not recognize ROWED or SOWED

View File

@ -73,6 +73,7 @@ Start
!source "src/glue.sound.a"
!source "src/ui.title.a"
!source "src/ui.main.menu.a"
!source "src/ui.about.a"
!source "src/ui.play.a"
!source "src/ui.common.a"
!source "src/ui.font.courier.double.prime.a"
@ -84,3 +85,4 @@ Start
MainMenuMusic
!bin "res/M.CEMBALO"
}
LastMover

189
src/ui.about.a Normal file
View File

@ -0,0 +1,189 @@
;license:MIT
;(c) 2019 by qkumba
;(c) 2020 by 4am
;
; animated about screen
;
; Public functions:
; - AboutPage
;
targetVTAB = $F0
minHTAB = $F1
maxHTAB = $F2
randomchar = $F3
revealchar = $F4
revealindex = $F5
revealtext = $FE
revealStringsLo
!byte <kAboutWritten
!byte <kAboutTested
!byte <kAboutMusic
!byte <kAboutElectricDuet
!byte <kAboutMockingDuet
!byte 0
revealStringsHi
!byte >kAboutWritten
!byte >kAboutTested
!byte >kAboutMusic
!byte >kAboutElectricDuet
!byte >kAboutMockingDuet
!byte 0
revealVTABs
!byte 4
!byte 20
!byte 9
!byte 14
!byte 19
revealHTABs
!byte 5
!byte 16
!byte 17
!byte 9
!byte 1
kAboutWritten
!byte 14
!raw "WRITTEN BY 4AM"
kAboutTested
!byte 20
!raw "PLAYTESTED BY QKUMBA"
kAboutMusic
!byte 20
!raw "MUSIC BY ALIAM LENAT"
kAboutElectricDuet
!byte 28
!raw "SOUND ROUTINES BY PAUL LUTUS"
kAboutMockingDuet
!byte 35
!raw "MOCKINGBOARD ROUTINES BY CYBERNESTO"
AboutPage
jsr Home
@outerloop
lda #0
sta revealindex
@loop ldx revealindex
lda revealVTABs, x
sta targetVTAB
lda revealHTABs, x
sta minHTAB
lda revealStringsHi, x
beq @outerloop
tay
lda revealStringsLo, x
jsr HeavySilkReveal
ldx #5
lda #0
- jsr WaitForKeyWithTimeout
bmi @exit
dex
bpl -
inc revealindex
bne @loop
@exit rts
HeavySilkReveal
+ST16 revealtext
ldy #0
lda (revealtext), y
clc
adc minHTAB
sta maxHTAB
RevealStartingChar=*+1
lda #$41 ; 'A'
@outerloop
sta randomchar
; init RNG
ldy #1
sty @rnd1+1
dey
sty @rnd2+1
@loop
; generate next value in linear feedback shift register (LFSR)
ldy @rnd1+1
ldx @rnd2+1
lsr @rnd2+1
ror @rnd1+1
bcc +
; feedback polynomial form #$03FC for period of 1023
; https://en.wikipedia.org/wiki/Linear-feedback_shift_register
; https://users.ece.cmu.edu/~koopman/lfsr/index.html
lda @rnd1+1
eor #$FC
sta @rnd1+1
lda @rnd2+1
eor #$03
sta @rnd2+1
; calculate VTAB/HTAB from 2-byte LFSR value
+ lda #24
sta VTAB
dey
cpy #$FF
bne +
dex
+ tya
- dec VTAB
bmi @loop
sec
sbc #40
bcs -
dex
bpl -
eor #$FF
sta HTAB
jsr @draw
lda randomchar
cmp #$20
beq +
inc randomchar
cmp #$5A
bcc +
sbc #$19
sta randomchar
; wait after drawing each letter, while checking for keypress
+ lda #$0A
jsr WaitForKeyWithTimeout
bmi @exit
; exit conditions for feedback polynomial
@rnd2 lda #0 ; SMC
bne @loop
@rnd1 lda #0 ; SMC
cmp #1
bne @loop
; loop back to do the reveal
lda randomchar
cmp #$20
beq @exit
sta RevealStartingChar
lda #$20
bne @outerloop ; always branches
@exit
rts
@draw
; check if this position is part of the reveal text
lda VTAB
cmp targetVTAB
bne @drawRandom
lda HTAB
cmp minHTAB
bcc @drawRandom
cmp maxHTAB
bcc @drawReveal
@drawRandom
; draw 'random' character
lda #randomchar
- ldy #$00
ldx #$01
jmp DrawHeavySilkBuffer
@drawReveal
; draw character from reveal text
sec
sbc minHTAB
tay
iny
lda (revealtext), y
sta revealchar
lda #revealchar
bne - ; always branches

View File

@ -26,6 +26,8 @@ MainMenu
and #$7F
cmp #$0D ; Return
beq @eventReturn
cmp #$01 ; Ctrl-A
beq @eventCtrlA
cmp #$1B ; Esc
bne @menuloop
;@eventEsc
@ -35,6 +37,10 @@ MainMenu
jsr SelectWorld
bcs MainMenu
rts ; return to caller with A = world ID
@eventCtrlA
jsr AboutPage
sec
bcs MainMenu
@drawMenuTitle
jsr Home
lda #1
@ -56,8 +62,8 @@ MainMenu
@drawMenuText
+PRINT_AT asterisk, 2, 30
+PRINT_AT menuline_play, 13, 10
+PRINT_AT menuline_demo, 14, 10
+PRINT_AT menuline_sound, 15, 10
+PRINT_AT menuline_sound, 14, 10
+PRINT_AT menuline_about, 15, 10
+PRINT_AT menuline_quit, 16, 10
+PRINT_AT disclaimer, 23, 0
rts
@ -232,12 +238,12 @@ asterisk
menuline_play
!byte 20
!raw "RETURN.....PLAY GAME"
menuline_demo
!byte 20
!raw "CTRL-D.....DEMO MODE"
menuline_sound
!byte 21
!raw "CTRL-S.....SOUND (ON)"
!raw "CTRL-S.....SOUND (ON) "
menuline_about
!byte 16
!raw "CTRL-A.....ABOUT"
menuline_quit
!byte 15
!raw " ESC.....QUIT"