refactoring

This commit is contained in:
4am 2020-10-01 21:35:55 -04:00
parent 2ea54a1ed0
commit f2b38e4ee8
14 changed files with 451 additions and 578 deletions

View File

@ -49,8 +49,6 @@ k16251Progression
!word M_vi6
!word M_ii
!word M_V
kFinalChord
!word M_I_LONG
;------------------------------------------------------------------------------
; ReinitSoundAfterPrefChange
@ -193,7 +191,7 @@ PlayNextChord
PlayFinalChord
txa
pha
+LD16 kFinalChord
+LDADDR M_I_LONG
jsr PlaySoundToCompletion
pla
tax

View File

@ -76,6 +76,7 @@ Start ; X = Mockingboard slot (from init)
sec ; C=1 triggers full redraw
bcs @GoToMainMenu
!source "src/ui.strings.a"
!source "src/ui.title.a"
!source "src/ui.main.menu.a"
!source "src/ui.select.world.a"
@ -96,8 +97,6 @@ Start ; X = Mockingboard slot (from init)
!source "src/ui.font.courier.double.prime.data.a"
!source "src/ui.font.heavy.silk.a"
!source "src/ui.font.heavy.silk.data.a"
!source "src/electric.duet.a"
!source "src/mockingduet.a"
MainMenuMusic
!bin "res/M.SICILIENNE"
InterstitialProgressMusic
@ -108,5 +107,7 @@ M_I !bin "res/M.I"
M_I_LONG !bin "res/M.I.LONG"
M_vi6 !bin "res/M.VI6"
M_ERROR !bin "res/M.ERROR"
!source "src/electric.duet.a"
!source "src/mockingduet.a"
}
LastMover

View File

@ -5,11 +5,12 @@
;
; Public functions:
; - MaybeLoadWorldFromDisk
; - PreParseWorldData
; - LoadProgressFromDisk
; - LoadProgressFromMemory
; - LoadPuzzleFromMemory
; - MarkPuzzleCompleted
; - FindPackedProgressAddr
; - FindPackedProgress
;
; Public variables:
; - gWorldID
@ -71,9 +72,17 @@ MaybeLoadWorldFromDisk
WorldFileLoaded
!byte $FF ; no file
PreParseWorldData
; find the starting address of each of the 100 puzzles in this world
;------------------------------------------------------------------------------
; PreParseWorldData
; build internal list of pointers to the start of each puzzle within a world,
; after the raw world data has been loaded into memory
;
; in: $9000+ contains raw world data from disk
; out: X = number of puzzles found
; other registers & flags clobbered
; $FE/$FF clobbered
;------------------------------------------------------------------------------
PreParseWorldData
lda #$FF
sta $FE
lda #$8F
@ -110,6 +119,7 @@ PreParseWorldData
;------------------------------------------------------------------------------
; LoadProgressFromDisk
; load PROGRESS file into memory
;
; see comments in MarkPuzzleCompleted for file format
;
@ -146,7 +156,7 @@ LoadProgressFromDisk
;------------------------------------------------------------------------------
LoadProgressFromMemory
lda gWorldID
jsr FindPackedProgressAddr
jsr FindPackedProgress
; ($FE) -> start of the 16-byte structure for this world
; zero destination array
ldx #103
@ -311,7 +321,7 @@ MarkPuzzleCompleted
; start at the beginning. So that's nice.
;
lda gWorldID
jsr FindPackedProgressAddr
jsr FindPackedProgress
; ($FE) -> start of the 16-byte structure for this world
; zero out all 16 bytes
ldy #$0F
@ -373,12 +383,17 @@ MarkPuzzleCompleted
pla
rts
FindPackedProgressAddr
;------------------------------------------------------------------------------
; FindPackedProgress
; find address of a world's packed progress data
;
; in: A = world ID
; out: ($FE) points to first byte of this world's packed progress (16-byte structure)
; A/Y clobbered
; X preserved
; all flags clobbered
;------------------------------------------------------------------------------
FindPackedProgress
pha
+LDADDR PACKEDPROGRESS
+ST16 $FE

View File

@ -7,34 +7,6 @@
; - AboutPage
;
;------------------------------------------------------------------------------
; AboutPage
; display animated credits page
;
; in: none
; out: all registers & flags clobbered
;------------------------------------------------------------------------------
AboutPage
jsr Home
@outerloop
lda #0
sta @loop+1
@loop ldx #$FD ; SMC
lda aboutVTABs, x
sta targetVTAB
lda aboutHTABs, x
sta minHTAB
lda aboutStringsHi, x
beq @outerloop
tay
lda aboutStringsLo, x
jsr HeavySilkReveal
inc @loop+1
ldx #11
jsr LongWaitForKeyWithTimeout
bpl @loop
@exit rts
aboutStringsLo
!byte <sAboutWritten
!byte <sAboutTested
@ -70,24 +42,31 @@ aboutHTABs
!byte 9
!byte 1
!byte 9
sAboutWritten
!byte 21
!raw "COPYRIGHT 2020 BY 4AM"
sAboutTested
!byte 21
!raw "PLAYTESTED BY OPTION8"
sAboutTested2
!byte 10
!raw "AND BESLEY"
sAboutMusic
!byte 22
!raw "MUSIC BY GABRIEL FAURE"
sAboutElectricDuet
!byte 28
!raw "SOUND ROUTINES BY PAUL LUTUS"
sAboutMockingDuet
!byte 35
!raw "MOCKINGBOARD ROUTINES BY CYBERNESTO"
sAboutInspired
!byte 21
!raw "INSPIRED BY TYPESHIFT"
;------------------------------------------------------------------------------
; AboutPage
; display animated credits page
;
; in: none
; out: all registers & flags clobbered
;------------------------------------------------------------------------------
AboutPage
jsr Home
@outerloop
lda #0
sta @loop+1
@loop ldx #$FD ; SMC
lda aboutVTABs, x
sta targetVTAB
lda aboutHTABs, x
sta minHTAB
lda aboutStringsHi, x
beq @outerloop
tay
lda aboutStringsLo, x
jsr HeavySilkReveal
inc @loop+1
ldx #11
jsr LongWaitForKeyWithTimeout
bpl @loop
@exit rts

View File

@ -7,6 +7,175 @@
; - RunDemo
;
DemoDispatchLo
!byte <DemoOnEXIT
!byte <DemoOnLOAD
!byte <DemoOnSHOW
!byte <DemoOnHIDE
!byte <DemoOnLEFT
!byte <DemoOnRIGHT
!byte <DemoOnUP
!byte <DemoOnDOWN
!byte <DemoOnWAIT
!byte <DemoOnNEXT
!byte <DemoOnTYPE
DemoDispatchHi
!byte >DemoOnEXIT
!byte >DemoOnLOAD
!byte >DemoOnSHOW
!byte >DemoOnHIDE
!byte >DemoOnLEFT
!byte >DemoOnRIGHT
!byte >DemoOnUP
!byte >DemoOnDOWN
!byte >DemoOnWAIT
!byte >DemoOnNEXT
!byte >DemoOnTYPE
; opcodes
EXIT = 0
LOAD = 1
SHOW = 2
HIDE = 3
LEFT = 4
RIGHT = 5
UP = 6
DOWN = 7
WAIT = 8
NEXT = 9
TYPE = 10
DemoCode
!byte WAIT ,20
!byte HIDE
!byte LOAD ,0,0
!byte WAIT ,30
!byte HIDE
!byte UP
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte UP
; A C
; --v-
; LOUD
; ----
; ITLE
; B H
!byte SHOW ,<sHelpHeader1,>sHelpHeader1
!byte WAIT ,30
!byte HIDE
!byte LEFT
!byte WAIT ,2
!byte LEFT
!byte WAIT ,2
!byte DOWN
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte UP
!byte WAIT ,2
!byte UP
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte UP
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte UP
; OC
; TUD
; ---v
; ABLE
; ----
; L H
; I
!byte WAIT ,30
!byte UP
!byte WAIT ,2
!byte LEFT
!byte DOWN
!byte WAIT ,2
!byte DOWN
!byte WAIT ,2
!byte LEFT
!byte WAIT ,2
!byte DOWN
!byte WAIT ,2
!byte LEFT
!byte WAIT ,2
!byte UP
!byte WAIT ,2
!byte UP
; A D
; LO E
; v---
; ITCH
; ----
; BU
; L
!byte NEXT
!byte SHOW ,<sHelpHeader2,>sHelpHeader2
!byte WAIT ,30
!byte HIDE
!byte LOAD ,1,4
!byte WAIT ,30
!byte HIDE
!byte TYPE ,2
!byte WAIT ,20
!byte TYPE ,3
!byte WAIT ,20
!byte TYPE ,0
!byte WAIT ,20
!byte TYPE ,1
!byte NEXT
!byte LOAD ,2,1
!byte WAIT ,30
!byte HIDE
!byte TYPE ,2
!byte WAIT ,20
!byte TYPE ,1
!byte WAIT ,20
!byte TYPE ,0
!byte NEXT
!byte LOAD ,3,6
!byte WAIT ,30
!byte HIDE
!byte TYPE ,3
!byte WAIT ,20
!byte TYPE ,1
!byte WAIT ,20
!byte TYPE ,2
!byte WAIT ,20
!byte TYPE ,0
!byte NEXT
!byte LOAD ,4,11
!byte WAIT ,30
!byte HIDE
!byte TYPE ,1
!byte WAIT ,20
!byte TYPE ,3
!byte WAIT ,20
!byte TYPE ,0
!byte WAIT ,20
!byte TYPE ,4
!byte WAIT ,20
!byte TYPE ,2
!byte NEXT
!byte LOAD ,5,3
!byte WAIT ,30
!byte HIDE
!byte TYPE ,0
!byte WAIT ,20
!byte TYPE ,1
!byte WAIT ,20
!byte TYPE ,2
!byte NEXT
!byte EXIT
;------------------------------------------------------------------------------
; RunDemo
; run self-running demo until keypress or completion
@ -143,189 +312,3 @@ GetNextDemoByte
bne +
inc GetNextDemoByte+2
+ rts
DemoDispatchLo
!byte <DemoOnEXIT
!byte <DemoOnLOAD
!byte <DemoOnSHOW
!byte <DemoOnHIDE
!byte <DemoOnLEFT
!byte <DemoOnRIGHT
!byte <DemoOnUP
!byte <DemoOnDOWN
!byte <DemoOnWAIT
!byte <DemoOnNEXT
!byte <DemoOnTYPE
DemoDispatchHi
!byte >DemoOnEXIT
!byte >DemoOnLOAD
!byte >DemoOnSHOW
!byte >DemoOnHIDE
!byte >DemoOnLEFT
!byte >DemoOnRIGHT
!byte >DemoOnUP
!byte >DemoOnDOWN
!byte >DemoOnWAIT
!byte >DemoOnNEXT
!byte >DemoOnTYPE
; opcodes
EXIT = 0
LOAD = 1
SHOW = 2
HIDE = 3
LEFT = 4
RIGHT = 5
UP = 6
DOWN = 7
WAIT = 8
NEXT = 9
TYPE = 10
demoPuzzles
!raw "AOCD,LTUE,IBLH|ABLE,ITCH,LOUD|...HIDDEN IN THIS PUZZLE",$0A
!raw "WEFP,TLTO,DAOY,FICS|DEFY,FLOP,TACO,WITS,FITS|YOU CAN ALSO TYPE LETTERS",$0A
!raw "AYCWT,CRMIL,GDOLE|ADMIT,CYCLE,GROWL|PLAY 12 DIFFERENT SIZES",$0A
!raw "EAIIEO,VOJXCS,BIOAOR,HLBDIK|BABIES,ELIXIR,HIJACK,VOODOO,HOODOO|UNCOMMON LETTERS CAN LIGHT THE WAY",$0A
!raw "SALATST,RHHRUCD,TXRNDRS,LEU AEE,E O Y|EXHAUST,LAUNDRY,RELATES,SHORTED,TERRACE,RELATED,TAUNTED,TERNARY|LETTERS CAN BE REUSED",$0A
!raw "PELTEOT,LIRFICS,M TL RN|MILLION,PERFECT,LETTERS|I HOPE YOU ENJOY",$0A
!raw "["
sDemo
!byte 6
!raw "DEMO-0"
sDemoIntro
!byte 20
!raw "THERE ARE 3 WORDS..."
DemoCode
!byte WAIT ,20
!byte HIDE
!byte LOAD ,0,0
!byte WAIT ,30
!byte HIDE
!byte UP
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte UP
; A C
; --v-
; LOUD
; ----
; ITLE
; B H
!byte SHOW ,<sHelpHeader1,>sHelpHeader1
!byte WAIT ,30
!byte HIDE
!byte LEFT
!byte WAIT ,2
!byte LEFT
!byte WAIT ,2
!byte DOWN
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte UP
!byte WAIT ,2
!byte UP
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte UP
!byte WAIT ,2
!byte RIGHT
!byte WAIT ,2
!byte UP
; OC
; TUD
; ---v
; ABLE
; ----
; L H
; I
!byte WAIT ,30
!byte UP
!byte WAIT ,2
!byte LEFT
!byte DOWN
!byte WAIT ,2
!byte DOWN
!byte WAIT ,2
!byte LEFT
!byte WAIT ,2
!byte DOWN
!byte WAIT ,2
!byte LEFT
!byte WAIT ,2
!byte UP
!byte WAIT ,2
!byte UP
; A D
; LO E
; v---
; ITCH
; ----
; BU
; L
!byte NEXT
!byte SHOW ,<sHelpHeader2,>sHelpHeader2
!byte WAIT ,30
!byte HIDE
!byte LOAD ,1,4
!byte WAIT ,30
!byte HIDE
!byte TYPE ,2
!byte WAIT ,20
!byte TYPE ,3
!byte WAIT ,20
!byte TYPE ,0
!byte WAIT ,20
!byte TYPE ,1
!byte NEXT
!byte LOAD ,2,1
!byte WAIT ,30
!byte HIDE
!byte TYPE ,2
!byte WAIT ,20
!byte TYPE ,1
!byte WAIT ,20
!byte TYPE ,0
!byte NEXT
!byte LOAD ,3,6
!byte WAIT ,30
!byte HIDE
!byte TYPE ,3
!byte WAIT ,20
!byte TYPE ,1
!byte WAIT ,20
!byte TYPE ,2
!byte WAIT ,20
!byte TYPE ,0
!byte NEXT
!byte LOAD ,4,11
!byte WAIT ,30
!byte HIDE
!byte TYPE ,1
!byte WAIT ,20
!byte TYPE ,3
!byte WAIT ,20
!byte TYPE ,0
!byte WAIT ,20
!byte TYPE ,4
!byte WAIT ,20
!byte TYPE ,2
!byte NEXT
!byte LOAD ,5,3
!byte WAIT ,30
!byte HIDE
!byte TYPE ,0
!byte WAIT ,20
!byte TYPE ,1
!byte WAIT ,20
!byte TYPE ,2
!byte NEXT
!byte EXIT

View File

@ -37,25 +37,3 @@ DrawHelpText
+PRINT_AT sHelpQuit, 19, 0
bit GFXMODE
rts
sHelpHeader1
!byte 26
!raw "MOVE COLUMNS TO FORM WORDS"
sHelpHeader2
!byte 26
!raw "USE ALL LETTERS TO ADVANCE"
sHelpLeftRight
!byte 40
!raw "LEFT/RIGHT ARROWS..........SELECT COLUMN"
sHelpUpDown
!byte 40
!raw "UP/DOWN ARROWS...............MOVE COLUMN"
sHelpLetters
!byte 40
!raw "A-Z.......................MOVE TO LETTER"
sHelpRestart
!byte 40
!raw "CTRL-R....................RESTART PUZZLE"
sHelpQuit
!byte 40
!raw "ESC............................MAIN MENU"

View File

@ -8,6 +8,41 @@
; - MaybeShowInterstitial
;
progressStringsLo
!byte <sProgress10
!byte <sProgress20
!byte <sProgress30
!byte <sProgress40
!byte <sProgress50
!byte <sProgress60
!byte <sProgress70
!byte <sProgress80
!byte <sProgress90
!byte <sProgress100
progressStringsHi
!byte >sProgress10
!byte >sProgress20
!byte >sProgress30
!byte >sProgress40
!byte >sProgress50
!byte >sProgress60
!byte >sProgress70
!byte >sProgress80
!byte >sProgress90
!byte >sProgress100
progressHTABs
!byte 7
!byte 8
!byte 8
!byte 8
!byte 7
!byte 2
!byte 9
!byte 7
!byte 6
!byte 4
;------------------------------------------------------------------------------
; MaybeShowInterstitial
; display interstitial progress animation after every 10 completed puzzles
@ -80,72 +115,3 @@ ShowInterstitialWorldComplete
+LDADDR sOneSpace
jsr HeavySilkReveal
+ jmp Home
progressStringsLo
!byte <sProgress10
!byte <sProgress20
!byte <sProgress30
!byte <sProgress40
!byte <sProgress50
!byte <sProgress60
!byte <sProgress70
!byte <sProgress80
!byte <sProgress90
!byte <sProgress100
progressStringsHi
!byte >sProgress10
!byte >sProgress20
!byte >sProgress30
!byte >sProgress40
!byte >sProgress50
!byte >sProgress60
!byte >sProgress70
!byte >sProgress80
!byte >sProgress90
!byte >sProgress100
progressHTABs
!byte 7
!byte 8
!byte 8
!byte 8
!byte 7
!byte 2
!byte 9
!byte 7
!byte 6
!byte 4
sProgress10
!byte 25
!raw "10% COMPLETE! KEEP IT UP!"
sProgress20
!byte 24
!raw "20% COMPLETE! WAY TO GO!"
sProgress30
!byte 24
!raw "30% COMPLETE! FANTASTIC!"
sProgress40
!byte 24
!raw "40% COMPLETE! EXCELLENT!"
sProgress50
!byte 26
!raw "WHOA, WE'RE HALFWAY THERE!"
sProgress60
!byte 36
!raw "60% OF THE TIME, IT WORKS EVERY TIME"
sProgress70
!byte 22
!raw "70% COMPLETE! AMAZING!"
sProgress80
!byte 25
!raw "80% COMPLETE! PHENOMENAL!"
sProgress90
!byte 28
!raw "90% COMPLETE! INCONCEIVABLE!"
sProgress100
!byte 31
!raw "100% COMPLETE! CONGRATULATIONS!"
sOneSpace
!byte 1
!raw " "

View File

@ -67,25 +67,21 @@ MainMenuEventLoop
bcc +
jsr DrawMainMenuTitle
+ jsr DrawMainMenuText
bit CLEARKBD
LoopMusic
-
+LDADDR kMainMenuKeys
+ST16 $EE
+LDADDR MainMenuMusic
jsr PlaySound
bpl LoopMusic ; music played to completion, so start over
bpl - ; music played to completion, no keypress, so start over
bit CLEARKBD
+ sta gLastKeyPressed
sta gLastKeyPressed
ldx #0
- ldy kMainMenuKeys, x
cpy gLastKeyPressed
beq +
inx
bne -
; /!\ execution never reaches here
brk
+ lda kMainMenuKeyHandlersLo, x
sta @j+1
lda kMainMenuKeyHandlersHi, x
@ -163,34 +159,3 @@ DrawMainMenuText
+PRINT_AT sMainMenuQuit, 19, 10
+PRINT_AT sMainMenuDisclaimer, 23, 0
rts
sAsterisk
!byte 1
!byte "*"
sVersion
!byte 4
!raw "V0.4"
sMainMenuPlay
!byte 20
!raw "RETURN.....PLAY GAME"
sMainMenuSound
!byte 18
!raw " S.....SOUND ("
sMainMenuSoundOn
!byte 4
!raw "ON) "
sMainMenuSoundOff
!byte 4
!raw "OFF)"
sMainMenuAbout
!byte 18
!raw " C.....CREDITS"
sMainMenuDemo
!byte 15
!raw " D.....DEMO"
sMainMenuQuit
!byte 15
!raw " Q.....QUIT"
sMainMenuDisclaimer
!byte 40
!raw "* NOT GUARANTEED, ACTUAL COUNT MAY VARY."

View File

@ -23,12 +23,12 @@ gSelectedLogicalColumn
gLastKeyPressed
!byte 0
kWorldLeftMargins
kWorldLeftMargins ; 12 bytes, one for each world
!byte 15,13,12,10
!byte 15,13,12,10
!byte 15,13,12,10
kWorldRightMargins
kWorldRightMargins ; 12 bytes, one for each world
!byte 27,28,30,31
!byte 27,28,30,31
!byte 27,28,30,31
@ -328,7 +328,7 @@ DrawPuzzleChrome
sta HTAB
+LD16 $FE
jsr DrawHeavySilkString
+LDADDR kDash
+LDADDR sDash
jsr DrawHeavySilkString
ldx gPuzzleID
inx ; visible puzzle number is 1-based
@ -465,7 +465,3 @@ DrawOneSelectionIndicator
dex
bne -
rts
sLevel
!byte 5
!raw "LEVEL"

View File

@ -37,7 +37,7 @@ HeavySilkReveal
clc
adc minHTAB
sta maxHTAB
@revealStartingChar=*+1
RevealStartingChar=*+1
lda #$41 ; 'A'
@outerloop
sta randomchar
@ -102,7 +102,7 @@ HeavySilkReveal
lda randomchar
cmp #$20
beq @exit
sta @revealStartingChar
sta RevealStartingChar
lda #$20
bne @outerloop ; always branches
@exit rts

View File

@ -22,7 +22,7 @@ selectedworld = $F3
SelectWorld
jsr Home
jsr UpdateWorldPercents
+LDADDR worlddescriptions
+LDADDR kWorldDescriptions
+ST16 $FE
lda #0
sta counter
@ -49,10 +49,10 @@ SelectWorld
inc $FF
+ inc counter
lda counter
cmp #12 ; ignore world 13 (that's for self-running demo)
cmp #12
bcc -
+PRINT_AT worldhelp, 23, 0
+PRINT_AT sWorldHelp, 23, 0
bit CLEARKBD
@selectWorldLoop
@ -132,7 +132,7 @@ DrawNewlySelectedWorld
GetWorldDescription
; in: X = 0-based world ID
; out: $FE/$FF points to world description buffer
+LDADDR worlddescriptions
+LDADDR kWorldDescriptions
+ST16 $FE
jmp +
- lda $FE
@ -147,11 +147,11 @@ GetWorldDescription
worldindex=$FB
UpdateWorldPercents
+LDADDR worlddescriptions
+LDADDR kWorldDescriptions
+ST16 $FC
lda #0
sta worldindex
-- jsr FindPackedProgressAddr
-- jsr FindPackedProgress
ldy #$0E
lda ($FE), y
tax
@ -175,51 +175,3 @@ UpdateWorldPercents
cmp #12
bne --
rts
worlddescriptions
!raw " 4X3 EASY 0% "
!raw " 5X3 BASIC 0% "
!raw " 6X3 SIMPLE 0% "
!raw " 7X3 RELAXED 0% "
!raw " 4X4 FAIR 0% "
!raw " 5X4 QUICK 0% "
!raw " 6X4 MEDIUM 0% "
!raw " 7X4 AVERAGE 0% "
!raw " 4X5 HARD 0% "
!raw " 5X5 TOUGH 0% "
!raw " 6X5 TRICKY 0% "
!raw " 7X5 COMPLEX 0% "
kWorldShortNames
!byte 3
!raw "4X3"
!byte 3
!raw "5X3"
!byte 3
!raw "6X3"
!byte 3
!raw "7X3"
!byte 3
!raw "4X4"
!byte 3
!raw "5X4"
!byte 3
!raw "6X4"
!byte 3
!raw "7X4"
!byte 3
!raw "4X5"
!byte 3
!raw "5X5"
!byte 3
!raw "6X5"
!byte 3
!raw "7X5"
kDash
!byte 1
!raw "-"
worldhelp
!byte 40
!raw "ARROWS TO SELECT, RETURN TO PLAY, OR ESC"

179
src/ui.strings.a Normal file
View File

@ -0,0 +1,179 @@
;license:MIT
;(c) 2020 by 4am
;
sTitleLine1
!byte 7
!raw "MILLION"
sTitleLine2
!byte 7
!raw "PERFECT"
sTitleLine3
!byte 7
!raw "LETTERS"
sVersion
!byte 4
!raw "V0.5"
sOneSpace
!byte 1
!raw " "
sAsterisk
!byte 1
!raw "*"
sDash
!byte 1
!raw "-"
sMainMenuPlay
!byte 20
!raw "RETURN.....PLAY GAME"
sMainMenuSound
!byte 18
!raw " S.....SOUND ("
sMainMenuSoundOn
!byte 4
!raw "ON) "
sMainMenuSoundOff
!byte 4
!raw "OFF)"
sMainMenuAbout
!byte 18
!raw " C.....CREDITS"
sMainMenuDemo
!byte 15
!raw " D.....DEMO"
sMainMenuQuit
!byte 15
!raw " Q.....QUIT"
sMainMenuDisclaimer
!byte 40
!raw "* NOT GUARANTEED, ACTUAL COUNT MAY VARY."
kWorldDescriptions ; each 20 characters, no length prefix
!raw " 4X3 EASY 0% "
!raw " 5X3 BASIC 0% "
!raw " 6X3 SIMPLE 0% "
!raw " 7X3 RELAXED 0% "
!raw " 4X4 FAIR 0% "
!raw " 5X4 QUICK 0% "
!raw " 6X4 MEDIUM 0% "
!raw " 7X4 AVERAGE 0% "
!raw " 4X5 HARD 0% "
!raw " 5X5 TOUGH 0% "
!raw " 6X5 TRICKY 0% "
!raw " 7X5 COMPLEX 0% "
kWorldShortNames ; each 4 characters including length prefix
!byte 3
!raw "4X3"
!byte 3
!raw "5X3"
!byte 3
!raw "6X3"
!byte 3
!raw "7X3"
!byte 3
!raw "4X4"
!byte 3
!raw "5X4"
!byte 3
!raw "6X4"
!byte 3
!raw "7X4"
!byte 3
!raw "4X5"
!byte 3
!raw "5X5"
!byte 3
!raw "6X5"
!byte 3
!raw "7X5"
sWorldHelp
!byte 40
!raw "ARROWS TO SELECT, RETURN TO PLAY, OR ESC"
sAboutWritten
!byte 21
!raw "COPYRIGHT 2020 BY 4AM"
sAboutTested
!byte 21
!raw "PLAYTESTED BY OPTION8"
sAboutTested2
!byte 10
!raw "AND BESLEY"
sAboutMusic
!byte 22
!raw "MUSIC BY GABRIEL FAURE"
sAboutElectricDuet
!byte 28
!raw "SOUND ROUTINES BY PAUL LUTUS"
sAboutMockingDuet
!byte 35
!raw "MOCKINGBOARD ROUTINES BY CYBERNESTO"
sAboutInspired
!byte 21
!raw "INSPIRED BY TYPESHIFT"
demoPuzzles ; same format as world files on disk
!raw "AOCD,LTUE,IBLH|ABLE,ITCH,LOUD|...HIDDEN IN THIS PUZZLE",$0A
!raw "WEFP,TLTO,DAOY,FICS|DEFY,FLOP,TACO,WITS,FITS|YOU CAN ALSO TYPE LETTERS",$0A
!raw "AYCWT,CRMIL,GDOLE|ADMIT,CYCLE,GROWL|PLAY 12 DIFFERENT SIZES",$0A
!raw "EAIIEO,VOJXCS,BIOAOR,HLBDIK|BABIES,ELIXIR,HIJACK,VOODOO,HOODOO|UNCOMMON LETTERS CAN LIGHT THE WAY",$0A
!raw "SALATST,RHHRUCD,TXRNDRS,LEU AEE,E O Y|EXHAUST,LAUNDRY,RELATES,SHORTED,TERRACE,RELATED,TAUNTED,TERNARY|LETTERS CAN BE REUSED",$0A
!raw "PELTEOT,LIRFICS,M TL RN|MILLION,PERFECT,LETTERS|I HOPE YOU ENJOY",$0A
!raw "["
sDemo
!byte 6
!raw "DEMO-0"
sDemoIntro
!byte 20
!raw "THERE ARE 3 WORDS..."
sLevel
!byte 5
!raw "LEVEL"
sHelpHeader1
!byte 26
!raw "MOVE COLUMNS TO FORM WORDS"
sHelpHeader2
!byte 26
!raw "USE ALL LETTERS TO ADVANCE"
sHelpLeftRight
!byte 40
!raw "LEFT/RIGHT ARROWS..........SELECT COLUMN"
sHelpUpDown
!byte 40
!raw "UP/DOWN ARROWS...............MOVE COLUMN"
sHelpLetters
!byte 40
!raw "A-Z.......................MOVE TO LETTER"
sHelpRestart
!byte 40
!raw "CTRL-R....................RESTART PUZZLE"
sHelpQuit
!byte 40
!raw "ESC............................MAIN MENU"
sProgress10
!byte 25
!raw "10% COMPLETE! KEEP IT UP!"
sProgress20
!byte 24
!raw "20% COMPLETE! WAY TO GO!"
sProgress30
!byte 24
!raw "30% COMPLETE! FANTASTIC!"
sProgress40
!byte 24
!raw "40% COMPLETE! EXCELLENT!"
sProgress50
!byte 26
!raw "WHOA, WE'RE HALFWAY THERE!"
sProgress60
!byte 36
!raw "60% OF THE TIME, IT WORKS EVERY TIME"
sProgress70
!byte 22
!raw "70% COMPLETE! AMAZING!"
sProgress80
!byte 25
!raw "80% COMPLETE! PHENOMENAL!"
sProgress90
!byte 28
!raw "90% COMPLETE! INCONCEIVABLE!"
sProgress100
!byte 31
!raw "100% COMPLETE! CONGRATULATIONS!"

View File

@ -32,6 +32,7 @@ TitlePage
lsr
clc
adc #$41
sta RevealStartingChar
sta initialtitlechar
@outerloop
@ -141,13 +142,3 @@ TitlePage
cpy #$0A
bne --
beq @exit ; always branches
sTitleLine1
!byte 7
!raw "MILLION"
sTitleLine2
!byte 7
!raw "PERFECT"
sTitleLine3
!byte 7
!raw "LETTERS"

View File

@ -1,130 +0,0 @@
OldTitlePage
jsr Home
;TODO add logical-width parameter
jsr DrawThinLines
lda #3
sta row
+LDADDR title
+ST16 $FE
-- lda #6
sta column
- ldy column
lda ($FE), y
ldx row
jsr DrawLargeCharacter
dec column
bpl -
lda $FE
clc
adc #7
sta $FE
bcc +
inc $FF
+ inc row
lda row
cmp #6
bne --
bit GFXMODE
lda #$00
jsr ROM_WAIT
+RTS_IF_KEY
jsr ROM_WAIT
+RTS_IF_KEY
jsr ROM_WAIT
+RTS_IF_KEY
ldy #$00
jsr ScrollUp
ldy #$02
jsr ScrollDown
iny
jsr ScrollUp
ldy #$05
jsr ScrollDown
iny
jsr ScrollUp
@loop
+RTS_IF_KEY
lda #$00
jsr ROM_WAIT
+RTS_IF_KEY
jsr ROM_WAIT
+RTS_IF_KEY
jsr ROM_WAIT
+RTS_IF_KEY
ldy #$00
jsr ScrollDown
jsr ScrollDown
iny
jsr ScrollDown
iny
jsr ScrollUp
iny
jsr ScrollDown
iny
jsr ScrollDown
iny
jsr ScrollUp
iny
jsr ScrollDown
jsr ScrollDown
+RTS_IF_KEY
lda #$00
jsr ROM_WAIT
+RTS_IF_KEY
jsr ROM_WAIT
+RTS_IF_KEY
jsr ROM_WAIT
+RTS_IF_KEY
ldy #$00
jsr ScrollUp
ldy #$02
jsr ScrollUp
iny
jsr ScrollDown
ldy #$05
jsr ScrollUp
iny
jsr ScrollUp
+RTS_IF_KEY
lda #$00
jsr ROM_WAIT
+RTS_IF_KEY
jsr ROM_WAIT
+RTS_IF_KEY
jsr ROM_WAIT
+RTS_IF_KEY
rts
!if 0 {
ldy #$00
jsr ScrollUp
iny
jsr ScrollUp
iny
jsr ScrollDown
jsr ScrollDown
iny
jsr ScrollUp
jsr ScrollUp
iny
jsr ScrollUp
iny
jsr ScrollDown
jsr ScrollDown
iny
jsr ScrollUp
jmp @loop
}
title
!raw "PELTEOT"
!raw "LIRFICS"
!raw "M TL RN"