add Out Of This World, fix crash in GR action slideshows, fix missing games in DHGR action slideshows, more game ordering fixes

This commit is contained in:
4am 2019-09-08 14:50:50 -04:00
parent ac7584edd8
commit 3ca889a18c
12 changed files with 76 additions and 36 deletions

BIN
res/action.gr/OOTW Normal file

Binary file not shown.

View File

@ -1 +1 @@
# # Mega-Attract-Mode configuration file # # set 1 FAVORITES1.CONF=1 ACTIONHIJ1.CONF=2 JUNGLE.HUNT=0 DHGR1.CONF=3 ACTIONPOP.CONF=2 SAMMY.LIGHTFOOT=0 OTHER4.CONF=1 SHR1.CONF=5 # set 2 FAVORITES4.CONF=1 PITFALL.II=0 SYNERGIST.CONF=1 SPCARTOON.1.=0 ACTIONMNO1.CONF=2 CONAN=0 DHGR2.CONF=3 ACTIONCLR1.CONF=2 ATARI.CONF=1 SNEAKERS=0 SHR2.CONF=5 # set 3 IDSI.CONF=1 HARD.HAT.MACK=0 BALLY.CONF=1 MR.DO.CONF=2 BURGERTIME=0 DHGR3.CONF=3 ACTIONS3.CONF=2 GUMBALL=0 S3.CONF=1 IDSI.CONF=1 SHR3.CONF=5 # set 4 FAVORITES3.CONF=1 BOUNCING.KMNGAS=0 BRODERBUND.CONF=1 ACTIONCLR2.CONF=2 LADY.TUT=0 DHGR4.CONF=3 ACTIONAB1.CONF=2 CD2.CONF=1 SPYS.DEMISE=0 SHR4.CONF=5 # set 5 T1.CONF=1 HARD.HAT.MACK=0 DHGR3.CONF=3 HARD.HAT.MACK=0 ACTIONS3.CONF=2 HARD.HAT.MACK=0 GUMBALL=0 HARD.HAT.MACK=0 S3.CONF=1 BALLY.CONF=1 BALLY.CONF=1 IDSI.CONF=1 BALLY.CONF=1 HARD.HAT.MACK=0 BALLY.CONF=1 BALLY.CONF=1 BALLY.CONF=1 MR.DO.CONF=2 =0 SHR5.CONF=5 # set 6 MATTEL.CONF=1 THUNDERBOMBS=0 FAVORITES2.CONF=1 ACTIONBURG.CONF=2 VINDICATOR=0 ACTDHGR2.CONF=4 ACTIONEFG2.CONF=2 S1.CONF=1 LODE.RUNNER=0 SHR6.CONF=5 # set 7 EFG2.CONF=1 REPTON=0 DATAMOST.CONF=1 ACTIONCLR4.CONF=2 AGENT.USA=0 ACTDHGR3.CONF=4 ACTIONMNO3.CONF=2 MNO.CONF=1 AQUATRON=0 SHR7.CONF=5 # set 8 SIERRA.CONF=1 POOYAN=0 CD1.CONF=1 SPCARTOON.3.=0 ACTIONPQR1.CONF=2 ALIEN.DOWNPOUR=0 ACTDHGR4.CONF=4 ACTIONT1.CONF=2 BOLO=0 T2.CONF=1 BUZZARD.BAIT=0 SHR8.CONF=5 # set 9 MICROFUN.CONF=1 GAMMA.GOBLINS=0 OTHER2.CONF=1 ACTIONCLR5.CONF=2 CEILING.ZERO=0 ACTDHGR5.CONF=4 ACTIONPQR2.CONF=2 P2.CONF=1 ROBOTRON=0 SHR9.CONF=5 # set 10 SYNAPSE.CONF=1 WARP.DESTROYER=0 PICCADILLY.CONF=1 ACTIONT3.CONF=2 WAVY.NAVY=0 ACTDHGR6.CONF=4 ACTIONT2.CONF=2 CD3.CONF=1 TRACK.AND.FIELD=0 SHR10.CONF=5 # set 11 DATAEAST.CONF=1 PEST.PATROL=0 EA.CONF=1 SPCARTOON.4.=0 ACTIONMNO2.CONF=2 CHOPLIFTER=0 ACTDHGR7.CONF=4 ACTIONEFG1.CONF=2 LABYRINTH=0 HIJKL2.CONF=1 GOONIES=0 SHR11.CONF=5 # set 12 SEGA.CONF=1 LOST.TOMB=0 HIJKL.CONF=1 ACTIONEFG3.CONF=2 KARATEKA=0 ACTDHGR8.CONF=4 ACTIONS2.CONF=2 ALIEN.TYPHOON=0 S2.CONF=1 SNAKE.BYTE=0 SHR12.CONF=5 # set 13 ACTIVISION.CONF=1 DINO.EGGS=0 SIRIUS2.CONF=1 ACTIONHIJ2.CONF=2 ALIEN.RAIN=0 ACTDHGR9.CONF=4 ACTIONCD2.CONF=2 BELLHOP=0 GEBELLI.CONF=1 SERPENTINE=0 SHR13.CONF=5 # set 14 PENGUIN.CONF=1 PACMAN=0 DATASOFT.CONF=1 SPCARTOON.5.=0 ACTIONAB3.CONF=2 FLIP.OUT=0 ACTDHGR10.CONF=4 ACTIONCD1.CONF=2 ALIEN.MUNCHIES=0 QR.CONF=1 PLASMANIA=0 SHR14.CONF=5 # set 15 SUBLOGIC.CONF=1 HIGH.RISE=0 EFG1.CONF=1 ACTIONS1.CONF=2 ORILEYS.MINE=0 ACTDHGR11.CONF=4 ACTIONCD3.CONF=2 BEER.RUN=0 OTHER1.CONF=1 SPY.HUNTER=0 SHR15.CONF=5 # set 16 EPYX.CONF=1 NIBBLER=0 AB1.CONF=1 ACTIONPQR3.CONF=2 ALIEN.AMBUSH=0 ACTDHGR12.CONF=4 ACTIONCAPT.CONF=2 TUBEWAY=0 SHR16.CONF=5 # set 17 P1.CONF=1 PIEMAN=0 OTHER3.CONF=1 SPCARTOON.6.=0 ACTIONHIJ3.CONF=2 CHAMP.LODERUN=0 ACTDHGR13.CONF=4 ACTIONHIJ4.CONF=2 AB3.CONF=1 P1.CONF=1 P1.CONF=1 P1.CONF=1 P1.CONF=1 PIEMAN=0 SHR17.CONF=5 # set 18 AB4.CONF=1 P1.CONF=1 ACTDHGR13.CONF=4 P1.CONF=1 ACTIONHIJ4.CONF=2 P1.CONF=1 AB3.CONF=1 PIEMAN=0 PIEMAN=0 P1.CONF=1 PIEMAN=0 PIEMAN=0 PIEMAN=0 OTHER3.CONF=1 PIEMAN=0 SPCARTOON.6.=0 PIEMAN=0 ACTIONHIJ3.CONF=2 PIEMAN=0 CHAMP.LODERUN=0 SHR18.CONF=5 [eof] # Mega-Attract-Mode is split into modules. Each module can be a short # slideshow, a self-running demo (like a game's built-in 'attract mode'), or # even just a single screenshot. Modules are run in the order listed here, one # after the next, until interrupted by user input. The last-run module is # tracked in the global prefs file. # # The same format is used by the per-game attract mode configuration files. # # Format: # key=value # # |key| must be unique within this file # # |value| must be one of # 0 = self-running demo (|key| is an executable binary file in /DEMO/) # 1 = HGR title slideshow (|key| is a file in /SS/ containing files in /TITLE.HGR/) # 2 = HGR action slideshow (|key| is a file in /SS/ containing files in /ACTION.HGR/) # 3 = DHGR title slideshow (|key| is a file in /SS/ containing files in /TITLE.DHGR/) # 4 = DHGR action slideshow (|key| is a file in /SS/ containing files in /ACTION.DHGR/) # 5 = SHR box art slideshow (|key| is a file in /SS/ containing files in /ARTWORK.SHR/) # 6 = GR action slideshow (|key| is a file in /SS/ containing files in /ACTION.GR/) # A = single HGR file (|key| is arbitrary path from program root directory) # B = single DHGR file (|key| is arbitrary path from program root directory) # C = single SHR file (|key| is arbitrary path from program root directory) # D = single GR file (|key| is arbitrary path from program root directory) # # Blank lines and lines beginning with '#' are ignored (like this one!) # A line beginning with '[' terminates the parsing
# # Mega-Attract-Mode configuration file # # set 1 FAVORITES1.CONF=1 ACTIONHIJ1.CONF=2 JUNGLE.HUNT=0 DHGR1.CONF=3 ACTIONPOP.CONF=2 SAMMY.LIGHTFOOT=0 OTHER4.CONF=1 SHR1.CONF=5 # set 2 FAVORITES4.CONF=1 PITFALL.II=0 SYNERGIST.CONF=1 SPCARTOON.1.=0 ACTIONMNO1.CONF=2 CONAN=0 DHGR2.CONF=3 ACTIONCLR1.CONF=2 ATARI.CONF=1 SNEAKERS=0 SHR2.CONF=5 # set 3 BALLY.CONF=1 BURGERTIME=0 BALLY.CONF=1 DHGR3.CONF=3 BALLY.CONF=1 ACTIONS3.CONF=2 BALLY.CONF=1 GUMBALL=0 BALLY.CONF=1 S3.CONF=1 MR.DO.CONF=2 ACTIONEFG4.CONF=2 ATARI2.CONF=1 BRAINTEASERBLVD=0 ACTIONAB5.CONF=2 SPACE.EGGS=0 SHR3.CONF=5 # set 4 FAVORITES3.CONF=1 BOUNCING.KMNGAS=0 BRODERBUND.CONF=1 ACTIONCLR2.CONF=2 LADY.TUT=0 DHGR4.CONF=3 ACTIONAB1.CONF=2 CD2.CONF=1 SPYS.DEMISE=0 SHR4.CONF=5 # set 5 MR.DO.CONF=2 DHGR3.CONF=3 MR.DO.CONF=2 ACTIONS3.CONF=2 MR.DO.CONF=2 GUMBALL=0 MR.DO.CONF=2 S3.CONF=1 BURGERTIME=0 BURGERTIME=0 IDSI.CONF=1 BURGERTIME=0 HARD.HAT.MACK=0 BURGERTIME=0 BALLY.CONF=1 BURGERTIME=0 MR.DO.CONF=2 AXIS.ASSASSIN=0 ACTIONAB4.CONF=2 FIREBIRD=0 SHR5.CONF=5 # set 6 MATTEL.CONF=1 THUNDERBOMBS=0 FAVORITES2.CONF=1 ACTIONBURG.CONF=2 VINDICATOR=0 ACTDHGR2.CONF=4 ACTIONEFG2.CONF=2 S1.CONF=1 LODE.RUNNER=0 SHR6.CONF=5 # set 7 EFG2.CONF=1 REPTON=0 DATAMOST.CONF=1 ACTIONCLR4.CONF=2 AGENT.USA=0 ACTDHGR3.CONF=4 ACTIONMNO3.CONF=2 MNO.CONF=1 AQUATRON=0 SHR7.CONF=5 # set 8 SIERRA.CONF=1 POOYAN=0 CD1.CONF=1 SPCARTOON.3.=0 ACTIONPQR1.CONF=2 ALIEN.DOWNPOUR=0 ACTDHGR4.CONF=4 ACTIONT1.CONF=2 BOLO=0 T2.CONF=1 BUZZARD.BAIT=0 SHR8.CONF=5 # set 9 MICROFUN.CONF=1 GAMMA.GOBLINS=0 OTHER2.CONF=1 ACTIONCLR5.CONF=2 CEILING.ZERO=0 ACTDHGR5.CONF=4 ACTIONPQR2.CONF=2 P2.CONF=1 ROBOTRON=0 SHR9.CONF=5 # set 10 SYNAPSE.CONF=1 WARP.DESTROYER=0 PICCADILLY.CONF=1 ACTIONT3.CONF=2 WAVY.NAVY=0 ACTDHGR6.CONF=4 ACTIONT2.CONF=2 CD3.CONF=1 TRACK.AND.FIELD=0 SHR10.CONF=5 # set 11 DATAEAST.CONF=1 PEST.PATROL=0 EA.CONF=1 SPCARTOON.4.=0 ACTIONMNO2.CONF=2 CHOPLIFTER=0 ACTDHGR7.CONF=4 ACTIONEFG1.CONF=2 LABYRINTH=0 HIJKL2.CONF=1 GOONIES=0 SHR11.CONF=5 # set 12 SEGA.CONF=1 LOST.TOMB=0 HIJKL.CONF=1 ACTIONEFG3.CONF=2 KARATEKA=0 ACTDHGR8.CONF=4 ACTIONS2.CONF=2 ALIEN.TYPHOON=0 S2.CONF=1 SNAKE.BYTE=0 SHR12.CONF=5 # set 13 ACTIVISION.CONF=1 DINO.EGGS=0 SIRIUS2.CONF=1 ACTIONHIJ2.CONF=2 ALIEN.RAIN=0 ACTDHGR9.CONF=4 ACTIONCD2.CONF=2 BELLHOP=0 GEBELLI.CONF=1 SERPENTINE=0 SHR13.CONF=5 # set 14 PENGUIN.CONF=1 PACMAN=0 DATASOFT.CONF=1 SPCARTOON.5.=0 ACTIONAB3.CONF=2 FLIP.OUT=0 ACTDHGR10.CONF=4 ACTIONCD1.CONF=2 ALIEN.MUNCHIES=0 QR.CONF=1 PLASMANIA=0 SHR14.CONF=5 # set 15 SUBLOGIC.CONF=1 HIGH.RISE=0 EFG1.CONF=1 ACTIONS1.CONF=2 ORILEYS.MINE=0 ACTDHGR11.CONF=4 ACTIONCD3.CONF=2 BEER.RUN=0 OTHER1.CONF=1 SPY.HUNTER=0 SHR15.CONF=5 # set 16 EPYX.CONF=1 NIBBLER=0 AB1.CONF=1 ACTIONPQR3.CONF=2 ALIEN.AMBUSH=0 ACTDHGR12.CONF=4 ACTIONCAPT.CONF=2 TUBEWAY=0 SHR16.CONF=5 # set 17 PIEMAN=0 ACTDHGR13.CONF=4 PIEMAN=0 ACTIONHIJ4.CONF=2 PIEMAN=0 AB3.CONF=1 OTHER3.CONF=1 OTHER3.CONF=1 P1.CONF=1 OTHER3.CONF=1 PIEMAN=0 ACTDHGR1.CONF=4 ACTIONAB2.CONF=2 AB2.CONF=1 SPARE.CHANGE=0 SHR17.CONF=5 # set 18 OTHER3.CONF=1 ACTDHGR13.CONF=4 OTHER3.CONF=1 ACTIONHIJ4.CONF=2 OTHER3.CONF=1 AB3.CONF=1 SPCARTOON.6.=0 SPCARTOON.6.=0 P1.CONF=1 SPCARTOON.6.=0 PIEMAN=0 SPCARTOON.6.=0 OTHER3.CONF=1 SPCARTOON.6.=0 SPCARTOON.6.=0 SPCARTOON.6.=0 ACTIONHIJ3.CONF=2 SPCARTOON.6.=0 CHAMP.LODERUN=0 ACTGR1.CONF=6 SHR18.CONF=5 [eof] # Mega-Attract-Mode is split into modules. Each module can be a short # slideshow, a self-running demo (like a game's built-in 'attract mode'), or # even just a single screenshot. Modules are run in the order listed here, one # after the next, until interrupted by user input. The last-run module is # tracked in the global prefs file. # # The same format is used by the per-game attract mode configuration files. # # Format: # key=value # # |key| must be unique within this file # # |value| must be one of # 0 = self-running demo (|key| is an executable binary file in /DEMO/) # 1 = HGR title slideshow (|key| is a file in /SS/ containing files in /TITLE.HGR/) # 2 = HGR action slideshow (|key| is a file in /SS/ containing files in /ACTION.HGR/) # 3 = DHGR title slideshow (|key| is a file in /SS/ containing files in /TITLE.DHGR/) # 4 = DHGR action slideshow (|key| is a file in /SS/ containing files in /ACTION.DHGR/) # 5 = SHR box art slideshow (|key| is a file in /SS/ containing files in /ARTWORK.SHR/) # 6 = GR action slideshow (|key| is a file in /SS/ containing files in /ACTION.GR/) # A = single HGR file (|key| is arbitrary path from program root directory) # B = single DHGR file (|key| is arbitrary path from program root directory) # C = single SHR file (|key| is arbitrary path from program root directory) # D = single GR file (|key| is arbitrary path from program root directory) # # Blank lines and lines beginning with '#' are ignored (like this one!) # A line beginning with '[' terminates the parsing

View File

@ -1 +1 @@
# # Attract mode for NORAD # ACTION.HGR/NORAD2=A ACTION.HGR/NORAD=A [eof]
# # Attract mode for N O R A D # ACTION.HGR/NORAD2=A ACTION.HGR/NORAD=A [eof]

1
res/attract/OOTW Normal file
View File

@ -0,0 +1 @@
# # Attract mode for Out Of This World # ACTION.GR/OOTW=D [eof]

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
# # action shots slideshow of lo-res games # BLOCKCHAIN POLLYWOG [eof]
# # action shots slideshow of lo-res games # OOTW BLOCKCHAIN POLLYWOG [eof]

1
res/title.hgr/OOTW Normal file

File diff suppressed because one or more lines are too long

View File

@ -20,21 +20,25 @@
GetGameDisplayName
; in: A/Y points to game filename
; X = #$60 if we should only look in gGamesListStore for a match
; X = #$EA if we should also look in gSlideshowStore
; out: C clear if game exists in gGamesListStore, and
; A/Y points to game display name (but see hack notes below)
; C set if game does not exist (this can happen because slideshows
; list games that require a joystick, but the games list parser
; filters out joystick-only games if the machine doesn't have a
; joystick)
stx @maybeExit
+STAY @key
+STAY @slideshowKey
jsr okvs_get
!word gGamesListStore
@key !word $FDFD ; SMC
bcc @exit
; Hack to allow self-running demos that don't correspond to a game
; filename. If the name ends in a '.', accept it unconditionally.
; The filename is its own display name. Launching this fake game
; will of course fail, so don't do that.
; Hack to allow self-running demos that don't correspond to a game
; filename. If the name ends in a '.', accept it unconditionally.
; The filename is its own display name. Launching this fake game
; will of course fail, so don't do that.
+LDAY @key
+STAY PARAM
ldy #0
@ -44,6 +48,23 @@ GetGameDisplayName
cmp #"."
beq @forceGoodResult
sec
@maybeExit
!byte $00 ; SMC
; if the key is still not found, AND the caller said to try this, then try
; getting the value of the current record from gSlideshowStore
; (some games have multiple action screenshots, in which case the filename of
; the action screenshot is not the game name, but the value is)
jsr okvs_get
!word gSlideshowStore
@slideshowKey
!word $FDFD ; SMC
+STAY @key3
jsr okvs_get
!word gGamesListStore
@key3 !word $FDFD ; SMC
; note that the game might still not be found (C will be set by okvs_get),
; which can happen if the game can't be played due to memory or joystick
; requirements
rts
@forceGoodResult
+LDAY @key

View File

@ -134,9 +134,16 @@ kDFXConfFile
+
stx gCurrentlyVisibleSlideshowIndex
; try to get the human-readable name of this game from gGamesListStore
+LDAY SAVE
ldx #$60
jsr GetGameDisplayName
bcs @exit ; not found, so just skip this title
; if game is not found (C will be set here), it means it can't be played on
; this machine due to memory or joystick requirements, so we don't display
; it in slideshows
bcs @exit
; (we don't actually use the display name in the title slideshow, we just
; reuse the function for convenience)
; load DHGR screenshot at $4000/main and $4000/aux
+LDADDR kDHGRTitleDirectory
@ -164,13 +171,22 @@ kDFXConfFile
lda KBD
bpl +
@actionExit
rts
+
stx gCurrentlyVisibleSlideshowIndex
; try to get the human-readable name of this game from gGamesListStore
; or gSlideshowStore
+LDAY SAVE
ldx #$EA
jsr GetGameDisplayName
bcs @exit ; not found, so just skip this title
; if game is not found (C will be set here), it means it can't be played on
; this machine due to memory or joystick requirements, so we don't display
; it in slideshows
bcs @actionExit
; (we don't actually use the display name in the DHGR action slideshow, we
; just reuse the function for convenience)
; load DHGR screenshot at $4000/main and $4000/aux
+LDADDR kDHGRActionDirectory

View File

@ -90,14 +90,22 @@ kGRFizzleFile
+
stx gCurrentlyVisibleSlideshowIndex
; try to get the human-readable name of this game from gGamesListStore
; or gSlideshowStore
+LDAY SAVE
ldx #$EA
jsr GetGameDisplayName
bcs @actionExit ; not found, so just skip this title
; if game is not found (C will be set here), it means it can't be played on
; this machine due to memory or joystick requirements, so we don't display
; it in slideshows
bcs @actionExit
; (we don't actually use the display name in the GR action slideshow, we
; just reuse the function for convenience)
; load GR screenshot at $6000
+LOAD_FILE kGRActionDirectory, SAVE
+LDADDR $6000
+LDADDR $6400
jmp ExecuteTransitionAndWait
}

View File

@ -52,12 +52,16 @@ HGRSingle
+
stx gCurrentlyVisibleSlideshowIndex
; check if game exists in the catalog (it might not if it requires a
; joystick and the machine doesn't have one, or if it requires 128K
; but the machine only has 64K)
; try to get the human-readable name of this game from gGamesListStore
+LDAY SAVE
ldx #$60
jsr GetGameDisplayName
bcs @exit ; not found, so just skip this title
; if game is not found (C will be set here), it means it can't be played on
; this machine due to memory or joystick requirements, so we don't display
; it in slideshows
bcs @exit
; (we don't actually use the display name in the title slideshow, we just
; reuse the function for convenience)
; load HGR screenshot at $4000
+LOAD_FILE kHGRTitleDirectory, SAVE
@ -79,7 +83,6 @@ HGRSingle
;------------------------------------------------------------------------------
.HGRActionCallback
+STAY SAVE
+STAY @slideshowKey
lda KBD
bpl +
@ -92,28 +95,17 @@ HGRSingle
+LOAD_FILE kHGRActionDirectory, SAVE
; try to get the human-readable name of this game from gGamesListStore
; and display it in the bottom-left corner
; or gSlideshowStore
+LDAY SAVE
ldx #$EA
jsr GetGameDisplayName
bcc @foundname
; if the key is not found, try getting the value of the current record from
; gSlideshowStore and using that instead
; (some games have multiple action screenshots, in which case the filename of
; the action screenshot is not the game name, but the value is)
jsr okvs_get
!word gSlideshowStore
@slideshowKey
!word $FDFD ; SMC
+STAY @key3
jsr okvs_get
!word gGamesListStore
@key3 !word $FDFD ; SMC
bcs @actionExit ; game still not found, bail
; (could happen if game can't be played
; due to memory or joystick requirements)
@foundname
; if game name is not found (C will be set here), it means the game
; can't be played due to memory or joystick requirements, so we hide
; it from slideshows
bcs @actionExit
; found the game, display its name in the bottom-left corner
+STAY SAVE
@drawname
ldx #0
stx HTAB
ldx #22

View File

@ -180,6 +180,7 @@ RunAttractModule
; language card or auxiliary memory.
+LDAY @key
ldx #$60
jsr GetGameDisplayName
bcc + ; if game doesn't exist, skip the demo
rts