Add message and bailout on invalid save.
[open-adventure.git] / adventure.yaml
index b1c4358c762c2972a0b8c2839f5b52c2cb47dc45..b2464989f4e6d8b98827efcceca747ab1318eeb2 100644 (file)
 #      long:         Long description, always shown on first encounter.
 #      short:        Short description. If none, use long description.
 #      maptag:       Tag for mapping, not used by the game itself.
-#                    Only used if the "short" propery in !!null.
+#                    Only used if the "short" property in !!null.
 #      conditions:   A dictionary of attributes
 #        LIT           Light
 #        OILY          If FLUID flag is on: true for oil, false for water
 #        FLUID         Liquid asset
 #        NOARRR                Pirate doesn't go here unless following player
 #        NOBACK                Cannot use "back" to move away
+#        ALLDIFFERENT   Part of the maze all different (used in grapher only)
+#        ALLALIKE       Part of the maze all alike (used in grapher only)
 #        HCAVE         Trying to get into cave
 #        HBIRD         Trying to catch bird
 #        HSNAKE                Trying to deal with snake
 #    All attributes are optional except the long description and
 #    travel. Order of locations is not significant.
 #
-# arbitrary_messages: These are arguments to rspeak(). Some spans of
-#    these messages need to be kept adjacent and ordered (for now),
-#    though there are no dependencies on actual numbers left.  To see
-#    which, grep for rspeak() calls containing expressions with
-#    arithmetic.  Eventually, these will be pulled out into more
-#    appropriate data structures. Then ordering can be dropped.
+# arbitrary_messages: These are arguments to rspeak(). Order is
+#    not significant.
 #
 # classes: Each item contains a point threshold and a message
 #    describing a classification of player.  Point thresholds must be
@@ -83,7 +81,7 @@
 #    Order doesn't matter; the logic simply tests every threshold on
 #    the assumption that turn counts never decrease nor skip values.
 #
-# objects: Objects that are refernced in C code or the YAML by name
+# objects: Objects that are referenced in C code or the YAML by name
 #    have human-readable names; others are named OBJ with a numeric suffix.
 #    Objects have attributes as follows...
 #      inventory:    A description for use in the inventory command.
 # message when the message is printed.  These sequences are:
 #       %d = an integer
 #       %s = an ASCII string
-#      %S = The letter 's' or nothing (if a previous %d value is exactly 1)
+#      %S = the letter 's' or nothing (if a previous %d value is exactly 1)
 #      %V = substitute program version string
 #
 # Copyright (c) 2017 by Eric S. Raymond
 # SPDX-License-Identifier: BSD-2-clause
 
+# Motion names of the form MOT_* are not explicitly referenced in the
+# locations YAML, but usually get compiled into generated C.
 motions: !!omap
 - MOT_0:
     words: !!null
@@ -369,7 +369,7 @@ locations: !!omap
     description:
       long: !!null
       short: !!null
-      maptag: !!null
+      maptag: 'Nowhere'
     conditions: {}
     travel: [
     ]
@@ -959,7 +959,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [UPWAR], action: [goto, LOC_MISTWEST]},
@@ -973,7 +973,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [WEST], action: [goto, LOC_ALIKE1]},
@@ -985,7 +985,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [EAST], action: [goto, LOC_ALIKE2]},
@@ -998,7 +998,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [WEST], action: [goto, LOC_ALIKE1]},
@@ -1012,7 +1012,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOARRR: true}
+    conditions: {DEEP: true, NOARRR: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [WEST, OUT], action: [goto, LOC_ALIKE4]},
@@ -1022,7 +1022,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOARRR: true}
+    conditions: {DEEP: true, NOARRR: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [EAST, OUT], action: [goto, LOC_ALIKE4]},
@@ -1032,7 +1032,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOARRR: true}
+    conditions: {DEEP: true, NOARRR: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [UPWAR, OUT], action: [goto, LOC_ALIKE3]},
@@ -1042,7 +1042,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [EAST], action: [goto, LOC_ALIKE6]},
@@ -1053,7 +1053,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [EAST], action: [goto, LOC_ALIKE3]},
@@ -1066,7 +1066,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [WEST], action: [goto, LOC_ALIKE5]},
@@ -1079,7 +1079,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [WEST], action: [goto, LOC_ALIKE6]},
@@ -1094,7 +1094,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [WEST], action: [goto, LOC_ALIKE7]},
@@ -1106,7 +1106,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOARRR: true}
+    conditions: {DEEP: true, NOARRR: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [WEST, OUT], action: [goto, LOC_ALIKE9]},
@@ -1116,7 +1116,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [WEST], action: [goto, LOC_ALIKE8]},
@@ -1129,7 +1129,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOARRR: true}
+    conditions: {DEEP: true, NOARRR: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [UPWAR, OUT], action: [goto, LOC_ALIKE10]},
@@ -1142,7 +1142,7 @@ locations: !!omap
           up.  The maze continues at this level.
       short: 'You''re at brink of pit.'
       maptag: !!null
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     travel: [
       {verbs: [DOWN, CLIMB], action: [goto, LOC_BIRDCHAMBER]},
       {verbs: [WEST], action: [goto, LOC_ALIKE10]},
@@ -1155,7 +1155,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {NOARRR: true, DEEP: true}
+    conditions: {NOARRR: true, DEEP: true, ALLALIKE: true}
     travel: [
       {verbs: [EAST, OUT], action: [goto, LOC_PITBRINK]},
     ]
@@ -1374,7 +1374,7 @@ locations: !!omap
           very tight canyon 15 feet below.  If you go down you may not be able
           to get back up.
       short: 'You''re in secret e/w canyon above tight canyon.'
-      maptag: 'Secret e/w canyom'
+      maptag: 'Secret e/w canyon'
     conditions: {DEEP: true}
     travel: [
       {verbs: [EAST], action: [goto, LOC_KINGHALL]},
@@ -1439,7 +1439,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [NORTH], action: [goto, LOC_ALIKE1]},
@@ -1452,7 +1452,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true}
+    conditions: {DEEP: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [WEST, OUT], action: [goto, LOC_ALIKE11]},
@@ -1462,7 +1462,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOARRR: true}
+    conditions: {DEEP: true, NOARRR: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [SOUTH, OUT], action: [goto, LOC_ALIKE3]},
@@ -1472,7 +1472,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     travel: [
       {verbs: [SOUTH], action: [goto, LOC_PITBRINK]},
       {verbs: [EAST], action: [goto, LOC_ALIKE13]},
@@ -1483,7 +1483,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     travel: [
       {verbs: [NORTH], action: [goto, LOC_PITBRINK]},
       {verbs: [WEST], action: [goto, LOC_ALIKE12]},
@@ -1494,7 +1494,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {NOARRR: true, DEEP: true}
+    conditions: {NOARRR: true, DEEP: true, ALLALIKE: true}
     travel: [
       {verbs: [EAST, OUT], action: [goto, LOC_ALIKE12]},
     ]
@@ -1503,7 +1503,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOARRR: true}
+    conditions: {DEEP: true, NOARRR: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [UPWAR, OUT], action: [goto, LOC_ALIKE8]},
@@ -1513,7 +1513,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all alike.'
       short: !!null
       maptag: 'Maze all alike.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLALIKE: true}
     hints: [*maze]
     travel: [
       {verbs: [UPWAR, DOWN], action: [goto, LOC_ALIKE4]},
@@ -1765,7 +1765,7 @@ locations: !!omap
       long: 'You are in a maze of twisty little passages, all different.'
       short: !!null
       maptag: 'Maze all different'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [SOUTH], action: [goto, LOC_DIFFERENT3]},
       {verbs: [SW], action: [goto, LOC_DIFFERENT4]},
@@ -1835,7 +1835,7 @@ locations: !!omap
           having done so you would be unable to reach it to climb back up.
       short: 'You''re at top of stalactite.'
       maptag: !!null
-    conditions: {DEEP: true}
+    conditions: {DEEP: true, ALLALIKE: true}
     travel: [
       {verbs: [NORTH], action: [goto, LOC_SECRET2]},
       {verbs: [DOWN, JUMP, CLIMB], cond: [pct, 40],
@@ -1848,7 +1848,7 @@ locations: !!omap
       long: 'You are in a little maze of twisting passages, all different.'
       short: !!null
       maptag: 'Maze all different'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [SW], action: [goto, LOC_DIFFERENT3]},
       {verbs: [NORTH], action: [goto, LOC_DIFFERENT4]},
@@ -1883,7 +1883,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: !!null
-    conditions: {DEEP: true}
+    conditions: {DEEP: true, ALLALIKE: true}
     travel: [
       {verbs: [SE], action: [goto, LOC_ALIKE13]},
     ]
@@ -1902,7 +1902,7 @@ locations: !!omap
           wall, and stretches to the other end of the room, where various other
           sundry objects can be glimpsed dimly in the distance.
       short: 'You''re at ne end.'
-      maptag: 'Reoisitory ne end'
+      maptag: 'Repository ne end'
     conditions: {DEEP: true, LIT: true}
     sound: MURMURING_SNORING
     travel: [
@@ -2151,7 +2151,7 @@ locations: !!omap
       long: 'You are in a maze of twisting little passages, all different.'
       short: !!null
       maptag: 'Maze all different.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [WEST], action: [goto, LOC_DIFFERENT1]},
       {verbs: [SE], action: [goto, LOC_DIFFERENT4]},
@@ -2169,7 +2169,7 @@ locations: !!omap
       long: 'You are in a little maze of twisty passages, all different.'
       short: !!null
       maptag: 'Maze all different.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [NW], action: [goto, LOC_DIFFERENT1]},
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT3]},
@@ -2187,7 +2187,7 @@ locations: !!omap
       long: 'You are in a twisting maze of little passages, all different.'
       short: !!null
       maptag: 'Maze all different.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [UPWAR], action: [goto, LOC_DIFFERENT1]},
       {verbs: [DOWN], action: [goto, LOC_DIFFERENT3]},
@@ -2205,7 +2205,7 @@ locations: !!omap
       long: 'You are in a twisting little maze of passages, all different.'
       short: !!null
       maptag: 'Maze all different.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [NE], action: [goto, LOC_DIFFERENT1]},
       {verbs: [NORTH], action: [goto, LOC_DIFFERENT3]},
@@ -2223,7 +2223,7 @@ locations: !!omap
       long: 'You are in a twisty little maze of passages, all different.'
       short: !!null
       maptag: 'Maze all different.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [NORTH], action: [goto, LOC_DIFFERENT1]},
       {verbs: [SE], action: [goto, LOC_DIFFERENT3]},
@@ -2241,7 +2241,7 @@ locations: !!omap
       long: 'You are in a twisty maze of little passages, all different.'
       short: !!null
       maptag: 'Maze all different.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [EAST], action: [goto, LOC_DIFFERENT1]},
       {verbs: [WEST], action: [goto, LOC_DIFFERENT3]},
@@ -2259,7 +2259,7 @@ locations: !!omap
       long: 'You are in a little twisty maze of passages, all different.'
       short: !!null
       maptag: 'Maze all different.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [SE], action: [goto, LOC_DIFFERENT1]},
       {verbs: [NE], action: [goto, LOC_DIFFERENT3]},
@@ -2277,7 +2277,7 @@ locations: !!omap
       long: 'You are in a maze of little twisting passages, all different.'
       short: !!null
       maptag: 'Maze all different.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [DOWN], action: [goto, LOC_DIFFERENT1]},
       {verbs: [EAST], action: [goto, LOC_DIFFERENT3]},
@@ -2295,7 +2295,7 @@ locations: !!omap
       long: 'You are in a maze of little twisty passages, all different.'
       short: !!null
       maptag: 'Maze all different.'
-    conditions: {DEEP: true, NOBACK: true}
+    conditions: {DEEP: true, NOBACK: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [SW], action: [goto, LOC_DIFFERENT1]},
       {verbs: [NW], action: [goto, LOC_DIFFERENT3]},
@@ -2313,7 +2313,7 @@ locations: !!omap
       long: 'Dead end'
       short: !!null
       maptag: !!null
-    conditions: {DEEP: true}
+    conditions: {DEEP: true, ALLDIFFERENT: true}
     travel: [
       {verbs: [NORTH, OUT], action: [goto, LOC_DIFFERENT2]},
       {verbs: [SOUTH], cond: [not, VEND, VEND_BLOCKS], action: [goto, LOC_ROUGHHEWN]},
@@ -2323,7 +2323,7 @@ locations: !!omap
     description:
       long: 'You are in a long, rough-hewn, north/south corridor.'
       short: !!null
-      maptag: 'Rough-newn corridor'
+      maptag: 'Rough-hewn corridor'
     conditions: {DEEP: true}
     travel: [
       {verbs: [NORTH], action: [goto, LOC_DEADEND13]},
@@ -2354,7 +2354,7 @@ locations: !!omap
     description:
       long: 'You are in the ogre''s storeroom.  The only exit is to the south.'
       short: !!null
-      maptag: 'Ogre''s streroom.'
+      maptag: 'Ogre''s storeroom.'
     conditions: {DEEP: true}
     travel: [
       {verbs: [SOUTH, OUT], action: [goto, LOC_LARGE]},
@@ -2755,7 +2755,7 @@ locations: !!omap
           You are on a small ledge at the top of a nearly vertical cliff.
           There is a low crawl leading off to the northeast.
       short: 'You''re at top of cliff.'
-      maptag: 'Cliiftop'
+      maptag: 'Clifftop'
     conditions: {DEEP: true}
     travel: [
       {verbs: [CLIMB, DOWN], action: [goto, LOC_CLIFFACE]},
@@ -3173,6 +3173,7 @@ arbitrary_messages:  !!omap
     To achieve the next higher rating would be a neat trick!
     Congratulations!!
 - OFF_SCALE: 'You just went off my scale!!'
+- SAVERESUME_DISABLED: 'Save and resume are disabled.'
 - RESUME_HELP: 'To resume your Adventure, start a new game and then say "RESUME".'
 # This message is not currently used
 #- TABLE_SPACE: |-
@@ -3188,13 +3189,13 @@ arbitrary_messages:  !!omap
     save file format, and this program uses Version %d.%d.  You must find an instance
     using that other version in order to resume that Adventure.
 # This message is not currently used
-#- SAVE_TAMPERING: |-
-#    A dark fog creeps in to surround you.  From somewhere in the fog you
-#    hear a stern voice.  "This Adventure has been tampered with!  You have
-#    been dabbling in magic, knowing not the havoc you might cause thereby.
-#    Leave at once, before you do irrevocable harm!"  The fog thickens,
-#    until at last you can see nothing at all.  Your vision then clears,
-#    and you find yourself back in The Real World.
+- SAVE_TAMPERING: |-
+    A dark fog creeps in to surround you.  From somewhere in the fog you
+    hear a stern voice.  "This Adventure has been tampered with!  You have
+    been dabbling in magic, knowing not the havoc you might cause thereby.
+    Leave at once, before you do irrevocable harm!"  The fog thickens,
+    until at last you can see nothing at all.  Your vision then clears,
+    and you find yourself back in The Real World.
 - TWIST_TURN: |-
     Sorry, but the path twisted and turned so much that I can't figure
     out which way to go to get back.
@@ -3325,7 +3326,7 @@ objects: !!omap
     - 'The bird does not seem inclined to sing while in the cage.'
     - 'It almost seems as though the bird is trying to tell you something.'
     - |-
-      To your surprise, you can understand the bird''s chirping; it is
+      To your surprise, you can understand the bird's chirping; it is
       singing about the joys of its forest home.
     - 'The bird does not seem inclined to sing while in the cage.'
     - |-