million-perfect-letters/src/million.a
2020-09-26 20:41:16 -04:00

113 lines
3.5 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.accel.a"
FirstMover
!pseudopc $4000 {
Start ; X = Mockingboard slot (from init)
jsr LoadPrefs ; preserves X
jsr InitSound
jsr LoadProgressFromDisk
jsr TitlePage
@GoToMainMenu
; C is set now if main menu requires full redraw
; (e.g. title sequence ended prematurely, or we're
; returning from another screen)
jsr MainMenuEventLoop
; A = world ID
bcc +
jsr EnableAccelerator
jmp Quit
+
sta gWorldID
jsr MaybeLoadWorldFromDisk
bcs @GoToMainMenu
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 DrawPuzzle
jsr AnimatePuzzleIntoPlace
jsr DrawColumnSelectionIndicator
jsr PlayEventLoop
cpx #kCompletedPuzzle
bne +
jsr AnimatePuzzleCompleted
ldx gPuzzleID
jsr MarkPuzzleCompleted
; A = next puzzle ID
; X = number of puzzles completed
jsr MaybeShowInterstitial
bcc @Play
bcs @GoToMainMenu
+
cpx #kRequestedRestart
bne +
jsr Home
lda gPuzzleID
jmp @Play
+
sec ; C=1 triggers full redraw
bcs @GoToMainMenu
!source "src/ui.title.a"
!source "src/ui.main.menu.a"
!source "src/ui.select.world.a"
!source "src/ui.reveal.a"
!source "src/ui.about.a"
!source "src/ui.interstitial.a"
!source "src/ui.play.a"
!source "src/ui.demo.a"
!source "src/ui.help.a"
!source "src/ui.message.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/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"
InterstitialProgressMusic
!bin "res/M.JOY01"
M_ii !bin "res/M.II"
M_V !bin "res/M.V"
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"
}
LastMover