3 # Enhance adventure.yaml entries with explicit properties based on Section 9
4 # of adventure.text and the kludgy macro definitions in advent.h.
6 # The FORCED bit can't be set here. That has to be done fom the travel arrays.
8 # This script is meant to be gotten right, used once, and then discarded.
9 # We'll leave a copy in the repository history for reference
11 # When in doubt, make the code dumber and the data smarter.
15 # This is the original location-attribute data from section 9 of adventure.text
16 # Bit indices are the first element of each tuple; the remaining numbers are
17 # indices of locations with that bit set.
19 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10),
20 (0, 100, 115, 116, 126, 145, 146, 147, 148, 149, 150),
21 (0, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160),
22 (0, 161, 162, 163, 164, 165, 166, 167),
24 (2, 1, 3, 4, 7, 38, 95, 113, 24, 168, 169),
25 (3, 46, 47, 48, 54, 56, 58, 82, 85, 86),
26 (3, 122, 123, 124, 125, 126, 127, 128, 129, 130),
27 (4, 6, 145, 146, 147, 148, 149, 150, 151, 152),
28 (4, 153, 154, 155, 156, 157, 158, 159, 160, 161),
29 (4, 162, 163, 164, 165, 166, 42, 43, 44, 45),
30 (4, 49, 50, 51, 52, 53, 55, 57, 80, 83),
31 (4, 84, 87, 107, 112, 131, 132, 133, 134, 135),
32 (4, 136, 137, 138, 139, 108),
36 (14, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51),
37 (14, 52, 53, 54, 55, 56, 80, 81, 82, 86, 87),
41 (18, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154),
42 (18, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164),
45 (20, 8, 15, 64, 109, 126),
48 # Names for attribute bits
78 # For reference from advent.h:
80 # define FOREST(LOC) ((LOC) >= LOC_FOREST1 && (LOC) <= LOC_FOREST22)
82 #/* The following two functions were added to fix a bug (game.clock1 decremented
83 # * while in forest). They should probably be replaced by using another
84 # * "cond" bit. For now, however, a quick fix... OUTSID(LOC) is true if
85 # * LOC is outside, INDEEP(LOC) is true if LOC is "deep" in the cave (hall
86 # * of mists or deeper). Note special kludges for "Foof!" locs. */
87 # define OUTSID(LOC) ((LOC) <= LOC_GRATE || FOREST(LOC) || (LOC) == PLAC[SAPPH] || (LOC) == LOC_FOOF2 || (LOC) == LOC_FOOF4)
88 # define INDEEP(LOC) ((LOC) >= LOC_MISTHALL && !OUTSID(LOC) && (LOC) != LOC_FOOF1)
93 for props in section12:
95 if props[0] not in attrs:
96 attrs[attrnames[props[0]]] = True
97 # Adod new attributes. These are computed the same way as the
98 # INDEEP(), OUTSID(), and FOREST() macros in advent.h.
100 attrs["FOREST"] = True
101 # 167 is the sapphire's start location
102 if loc in range(1, grate+1) or name in ("FOOF2", "FOOF4") or name == sapphireloc:
103 attrs["ABOVE"] = True
104 if not loc in range(0, misthall+1) and name != "FOOF1" and 6 not in attrs:
106 naqmes = str(attrs).replace("'", "").replace("True", "true").replace("False", "false")
107 return " conditions: %s\n" % (names,)
109 if __name__ == "__main__":
110 with open("adventure.yaml", "r") as fp:
113 locnames = [el[0] for el in db["locations"]]
119 if line.startswith("- LOC"):
121 sys.stdout.write(genline(ln))
123 sys.stdout.write(line)