million-perfect-letters/src/million.a
2020-05-12 15:53:25 -04:00

101 lines
3.0 KiB
Plaintext

;license:MIT
;(c) 2020 by 4am
;
; /!\ Both sound libraries (electric.duet.a and mockingduet.a) are licensed under the
; GPL (2+ and 3+, respectively), so the program as a whole is licensed GPL 3+ by
; transitivity. Some individual files have a more permissive license. See LICENSE
; file for details.
;
!cpu 6502
!to "build/MILLION.SYSTEM",plain
*=$2000
!source "src/constants.a" ; no code
!source "src/macros.a" ; no code
!source "src/million.init.a" ; one-time initialization code, exits via Start
!source "src/hw.mockingboard.a"
!source "src/hw.vbl.init.a"
FirstMover
!pseudopc $4000 {
Start
jsr LoadPrefs
jsr InitSound
jsr LoadProgressFromDisk
jsr TitlePage
; C set if main menu requires full redraw (e.g. title sequence ended prematurely)
@GoToMainMenu
jsr MainMenu
bcc +
jmp Quit
+ sta gWorldID
jsr MaybeLoadWorldFromDisk ; A = world ID from selection page
bcc @PlayNext
jmp $FF59 ; TODO
@PlayNext
jsr LoadProgressFromMemory
; A = next puzzle ID
@Play
sta gPuzzleID
ldx gWorldID
lda kWorldLeftMargins, x
sta GlobalLeftMargin
lda kPuzzleWidths, x
jsr InitPuzzleStorage
jsr InitPuzzleSound
ldx gPuzzleID
jsr LoadPuzzleFromMemory
lda #0
sta gSelectedLogicalColumn
jsr DrawPuzzleChrome
jsr ClearAndDrawPuzzle
jsr AnimatePuzzleIntoPlace
jsr DrawColumnSelectionIndicator
jsr PlayEventLoop
cmp #kCompletedPuzzle
bne +
jsr AnimatePuzzleCompleted
ldx gPuzzleID
jsr MarkPuzzleCompleted
; A - next puzzle ID
jmp @Play
+ cmp #kRequestedRestart
bne +
jsr Home
lda gPuzzleID
jmp @Play
+
sec
bcs @GoToMainMenu
!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/puzzle.a"
!source "src/storage.a"
!source "src/prefs.a"
!source "src/glue.sound.a"
!source "src/glue.mli.a"
!source "src/hw.vbl.a"
!source "src/ui.font.courier.double.prime.a"
!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"
; !bin "res/M.CEMBALO"
M2
!bin "res/M.2"
M5
!bin "res/M.5"
M1
!bin "res/M.1"
M6
!bin "res/M.6"
}
LastMover