use games.conf for master game list, remove hard-coded GAMES array

This commit is contained in:
4am 2018-03-28 14:09:39 -04:00
parent f5b5c9a374
commit fc962b6a59
6 changed files with 47 additions and 194 deletions

View File

@ -1,151 +0,0 @@
;license:MIT
;(c) 2018 by 4am
;
; Game directory and filenames
;
; Public constants
; - kNumberOfGames
; - GAMES
;
kNumberOfGames = 34
GAMES ; length of this array must = kNumberOfGames, there is no range checking
!word .adventure
!word .amfv
!word .ballyhoo
!word .beyondzork
!word .borderzone
!word .bureaucracy
!word .cutthroats
!word .deadline
!word .enchanter
!word .hgttg
!word .hollywoodhijinx
!word .infidel
!word .leathergoddesses
!word .lurkinghorror
!word .minizork
!word .moonmist
!word .nordandbert
!word .planetfall
!word .plunderedhearts
!word .seastalker
!word .sherlock
!word .sorcerer
!word .spellbreaker
!word .starcross
!word .stationfall
!word .suspect
!word .suspended
!word .trinity
!word .wishbringer
!word .witness
!word .zorki
!word .zorkii
!word .zorkiii
!word .ztuu
; length-prefixed names of each subdirectory in game directory, 1 per game
.adventure
!byte 9
!raw "ADVENTURE"
.amfv
!byte 4
!raw "AMFV"
.ballyhoo
!byte 8
!raw "BALLYHOO"
.beyondzork
!byte 11
!raw "BEYOND.ZORK"
.borderzone
!byte 11
!raw "BORDER.ZONE"
.bureaucracy
!byte 11
!raw "BUREAUCRACY"
.cutthroats
!byte 10
!raw "CUTTHROATS"
.deadline
!byte 8
!raw "DEADLINE"
.enchanter
!byte 9
!raw "ENCHANTER"
.hgttg
!byte 5
!raw "HGTTG"
.hollywoodhijinx
!byte 9
!raw "HOLLYWOOD"
.infidel
!byte 7
!raw "INFIDEL"
.leathergoddesses
!byte 4
!raw "LGOP"
.lurkinghorror
!byte 14
!raw "LURKING.HORROR"
.minizork
!byte 9
!raw "MINI.ZORK"
.moonmist
!byte 8
!raw "MOONMIST"
.nordandbert
!byte 13
!raw "NORD.AND.BERT"
.planetfall
!byte 10
!raw "PLANETFALL"
.plunderedhearts
!byte 9
!raw "PLUNDERED"
.seastalker
!byte 10
!raw "SEASTALKER"
.sherlock
!byte 8
!raw "SHERLOCK"
.sorcerer
!byte 8
!raw "SORCERER"
.spellbreaker
!byte 12
!raw "SPELLBREAKER"
.starcross
!byte 9
!raw "STARCROSS"
.stationfall
!byte 11
!raw "STATIONFALL"
.suspect
!byte 7
!raw "SUSPECT"
.suspended
!byte 9
!raw "SUSPENDED"
.trinity
!byte 7
!raw "TRINITY"
.wishbringer
!byte 11
!raw "WISHBRINGER"
.witness
!byte 7
!raw "WITNESS"
.zorki
!byte 6
!raw "ZORK.I"
.zorkii
!byte 7
!raw "ZORK.II"
.zorkiii
!byte 8
!raw "ZORK.III"
.ztuu
!byte 4
!raw "ZTUU"

View File

@ -88,6 +88,8 @@ okvs_init
; in: stack contains 2 bytes of parameters:
; +1 [word] handle to storage space
; out: A contains number of keys in this store
; X clobbered
; Y preserved
; $00/$01 clobbered
; $02/$03 clobbered
;------------------------------------------------------------------------------

View File

@ -33,7 +33,7 @@ addrInfo
; LoadGameInfo
; load file with information about the current game
;
; in: gCurrentGame between 0 and (kNumberOfGames-1)
; in: current ProDOS prefix is the same as the PITCH.DARK binary
; out: addrInfo, addrDescription, addrVersions, addrOptions populated
; gVersionsStore populated with keys/values in [versions] section
; gOptionsStore populated with keys/values in [options] section

View File

@ -8,8 +8,6 @@
; - SaveGlobalPreferences
;
; Public variables
; - gCurrentGame byte 0..kNumberOfGames-1
; populated by LoadGlobalPreferences so other code can index into GAMES array for quick access to game shortnames
; - gNeedToSavePrefs byte 0=false, 1=true
; set to 1 if prefs have changed. SaveGlobalPreferences won't write to disk if this is 0.
;
@ -25,9 +23,6 @@
gGlobalPrefsStore
!word 0
gCurrentGame
!byte 0
gNeedToSavePrefs
!byte 0
@ -72,19 +67,6 @@ LoadGlobalPreferences
sta gVersionsStore
lda SRC+1
sta gVersionsStore+1
jsr okvs_get ; get shortname of current game
!word gGlobalPrefsStore
!word kLastPlayed
sta .gameNamePtr
sty .gameNamePtr+1
jsr okvs_get ; look up game in games list to get numeric index
!word gGamesListStore
.gameNamePtr
!word $FDFD ; SMC
stx gCurrentGame
rts
;------------------------------------------------------------------------------
@ -129,21 +111,24 @@ SaveGlobalPreferences
ldy #>.fluff3
jsr addString
jsr okvs_len
!word gGamesListStore
sta .numberOfGames
ldx #0
.gameLoop
phx
txa
asl
tax
lda GAMES,x
ldy GAMES+1,x
stx .n
jsr okvs_nth
!word gGamesListStore
.n !byte $FD ; SMC
sta .gameKey
sty .gameKey+1
jsr addStringFromStore
.gameKey !word $FDFD ; SMC
plx
inx
cpx #kNumberOfGames
.numberOfGames=*+1
cpx #$FD ; SMC
bne .gameLoop
lda #<.eof

View File

@ -12,7 +12,6 @@
!source "src/constants.a"
!source "src/WeeGUI_MLI.s"
!source "src/games.a"
!source "src/okvs.a"
!source "src/prodos.a"
!source "src/ramdisk.a"

View File

@ -170,31 +170,49 @@ HandleKey
}
!zone {
GetCurrentGameIndex
jsr okvs_get ; get shortname of current game
!word gGlobalPrefsStore
!word kLastPlayed
sta .gameNamePtr
sty .gameNamePtr+1
jsr okvs_get ; get numeric index
!word gGamesListStore
.gameNamePtr
!word $FDFD ; SMC
rts ; X = index of current game
callback_previous
lda gCurrentGame
dec
jsr GetCurrentGameIndex
dex
bpl +
lda #kNumberOfGames-1
+ sta gCurrentGame
bra .loadNewGameInfoAndRepaint
callback_next
lda gCurrentGame
inc
cmp #kNumberOfGames
bcc +
lda #0
+ sta gCurrentGame
asl
jsr okvs_len
!word gGamesListStore
tax
lda GAMES,x
dex
+ bra .loadNewGameInfoAndRepaint
callback_next
jsr GetCurrentGameIndex
inx
stx .n
jsr okvs_len
!word gGamesListStore
ldx .n
.n=*+1
cmp #$FD ; SMC
bne .loadNewGameInfoAndRepaint
ldx #0
.loadNewGameInfoAndRepaint
stx .nth
jsr okvs_nth
!word gGamesListStore
.nth !byte $FD ; SMC
sta .gameptr
lda GAMES+1,x
sta .gameptr+1
sty .gameptr+1
jsr okvs_update
!word gGlobalPrefsStore
!word kLastPlayed
.gameptr !word $FDFD ; SMC
.loadNewGameInfoAndRepaint
lda #1
sta gNeedToSavePrefs
jsr LoadGameInfo