diff options
28 files changed, 860 insertions, 15 deletions
| diff --git a/data/connections.txtpb b/data/connections.txtpb index 2b71f7d..c3be3f1 100644 --- a/data/connections.txtpb +++ b/data/connections.txtpb | |||
| @@ -1,19 +1,5 @@ | |||
| 1 | # TODO | 1 | # TODO |
| 2 | # control center -> the_ancient | ||
| 3 | # the_between/Control Center Side/CC | ||
| 4 | # the_gallery/Main Area/CC | ||
| 5 | # the_great/West Side/CC | ||
| 6 | # the_hinterlands/Main Area/LEFT | ||
| 7 | # the_hinterlands/Main Area/RIGHT | ||
| 8 | # the_partial/Control Center Entrance/CC | ||
| 9 | # the_perceptive/Main Area/CC | ||
| 10 | # cc -> relentless (don't use port objects) | ||
| 11 | # the_repetitive/Main Room/CC | ||
| 12 | # cc <-> the shop (keyholder door only needed one way) | ||
| 13 | # the_unyielding/Central Connected Area/BACK (panel) | ||
| 14 | # daedalus/roof -> icarus | 2 | # daedalus/roof -> icarus |
| 15 | # the_tenacious/Control Center Entrance/CC | ||
| 16 | # the_unkempt/Control Center Entrance/CC | ||
| 17 | connections { | 3 | connections { |
| 18 | from { | 4 | from { |
| 19 | port { | 5 | port { |
| @@ -2106,3 +2092,299 @@ connections { | |||
| 2106 | } | 2092 | } |
| 2107 | oneway: true | 2093 | oneway: true |
| 2108 | } | 2094 | } |
| 2095 | connections { | ||
| 2096 | from { | ||
| 2097 | room { | ||
| 2098 | map: "control_center" | ||
| 2099 | name: "Main Area" | ||
| 2100 | } | ||
| 2101 | } | ||
| 2102 | to { | ||
| 2103 | room { | ||
| 2104 | map: "the_relentless" | ||
| 2105 | name: "Turn Room" | ||
| 2106 | } | ||
| 2107 | } | ||
| 2108 | door { | ||
| 2109 | map: "control_center" | ||
| 2110 | name: "Relentless Turn Door" | ||
| 2111 | } | ||
| 2112 | } | ||
| 2113 | connections { | ||
| 2114 | from { | ||
| 2115 | room { | ||
| 2116 | map: "control_center" | ||
| 2117 | name: "Main Area" | ||
| 2118 | } | ||
| 2119 | } | ||
| 2120 | to { | ||
| 2121 | room { | ||
| 2122 | map: "the_relentless" | ||
| 2123 | name: "Shop Room" | ||
| 2124 | } | ||
| 2125 | } | ||
| 2126 | door { | ||
| 2127 | map: "control_center" | ||
| 2128 | name: "Relentless Shop Door" | ||
| 2129 | } | ||
| 2130 | } | ||
| 2131 | connections { | ||
| 2132 | from { | ||
| 2133 | room { | ||
| 2134 | map: "control_center" | ||
| 2135 | name: "Main Area" | ||
| 2136 | } | ||
| 2137 | } | ||
| 2138 | to { | ||
| 2139 | room { | ||
| 2140 | map: "the_relentless" | ||
| 2141 | name: "Left Room" | ||
| 2142 | } | ||
| 2143 | } | ||
| 2144 | door { | ||
| 2145 | map: "control_center" | ||
| 2146 | name: "Relentless Left Door" | ||
| 2147 | } | ||
| 2148 | } | ||
| 2149 | connections { | ||
| 2150 | from { | ||
| 2151 | port { | ||
| 2152 | map: "control_center" | ||
| 2153 | room: "Ancient Entrance" | ||
| 2154 | name: "ANCIENT" | ||
| 2155 | } | ||
| 2156 | } | ||
| 2157 | to { | ||
| 2158 | room { | ||
| 2159 | map: "the_ancient" | ||
| 2160 | name: "Outside" | ||
| 2161 | } | ||
| 2162 | } | ||
| 2163 | oneway: true | ||
| 2164 | } | ||
| 2165 | connections { | ||
| 2166 | from { | ||
| 2167 | port { | ||
| 2168 | map: "the_between" | ||
| 2169 | room: "Control Center Side" | ||
| 2170 | name: "CC" | ||
| 2171 | } | ||
| 2172 | } | ||
| 2173 | to { | ||
| 2174 | port { | ||
| 2175 | map: "control_center" | ||
| 2176 | room: "Between Entrance" | ||
| 2177 | name: "BETWEEN" | ||
| 2178 | } | ||
| 2179 | } | ||
| 2180 | } | ||
| 2181 | connections { | ||
| 2182 | from { | ||
| 2183 | painting { | ||
| 2184 | map: "the_gallery" | ||
| 2185 | room: "Main Area" | ||
| 2186 | name: "CC" | ||
| 2187 | } | ||
| 2188 | } | ||
| 2189 | to { | ||
| 2190 | room { | ||
| 2191 | map: "control_center" | ||
| 2192 | name: "Desert Room" | ||
| 2193 | } | ||
| 2194 | } | ||
| 2195 | oneway: true | ||
| 2196 | } | ||
| 2197 | connections { | ||
| 2198 | from { | ||
| 2199 | port { | ||
| 2200 | map: "the_great" | ||
| 2201 | room: "West Side" | ||
| 2202 | name: "CC" | ||
| 2203 | } | ||
| 2204 | } | ||
| 2205 | to { | ||
| 2206 | port { | ||
| 2207 | map: "control_center" | ||
| 2208 | room: "Entry" | ||
| 2209 | name: "GREAT" | ||
| 2210 | } | ||
| 2211 | } | ||
| 2212 | } | ||
| 2213 | connections { | ||
| 2214 | from { | ||
| 2215 | port { | ||
| 2216 | map: "the_hinterlands" | ||
| 2217 | room: "Main Area" | ||
| 2218 | name: "LEFT" | ||
| 2219 | } | ||
| 2220 | } | ||
| 2221 | to { | ||
| 2222 | port { | ||
| 2223 | map: "control_center" | ||
| 2224 | room: "Main Area" | ||
| 2225 | name: "LEFT" | ||
| 2226 | } | ||
| 2227 | } | ||
| 2228 | } | ||
| 2229 | connections { | ||
| 2230 | from { | ||
| 2231 | port { | ||
| 2232 | map: "the_hinterlands" | ||
| 2233 | room: "Main Area" | ||
| 2234 | name: "RIGHT" | ||
| 2235 | } | ||
| 2236 | } | ||
| 2237 | to { | ||
| 2238 | port { | ||
| 2239 | map: "control_center" | ||
| 2240 | room: "Main Area" | ||
| 2241 | name: "RIGHT" | ||
| 2242 | } | ||
| 2243 | } | ||
| 2244 | } | ||
| 2245 | connections { | ||
| 2246 | from { | ||
| 2247 | port { | ||
| 2248 | map: "the_partial" | ||
| 2249 | room: "Control Center Entrance" | ||
| 2250 | name: "CC" | ||
| 2251 | } | ||
| 2252 | } | ||
| 2253 | to { | ||
| 2254 | port { | ||
| 2255 | map: "control_center" | ||
| 2256 | room: "Partial Entrance" | ||
| 2257 | name: "PARTIAL" | ||
| 2258 | } | ||
| 2259 | } | ||
| 2260 | } | ||
| 2261 | connections { | ||
| 2262 | from { | ||
| 2263 | port { | ||
| 2264 | map: "the_perceptive" | ||
| 2265 | room: "Main Area" | ||
| 2266 | name: "CC" | ||
| 2267 | } | ||
| 2268 | } | ||
| 2269 | to { | ||
| 2270 | port { | ||
| 2271 | map: "control_center" | ||
| 2272 | room: "Perceptive Entrance" | ||
| 2273 | name: "PERCEPTIVE" | ||
| 2274 | } | ||
| 2275 | } | ||
| 2276 | } | ||
| 2277 | connections { | ||
| 2278 | from { | ||
| 2279 | port { | ||
| 2280 | map: "the_repetitive" | ||
| 2281 | room: "Main Room" | ||
| 2282 | name: "CC" | ||
| 2283 | } | ||
| 2284 | } | ||
| 2285 | to { | ||
| 2286 | port { | ||
| 2287 | map: "control_center" | ||
| 2288 | room: "Repetitive Entrance" | ||
| 2289 | name: "REPETITIVE" | ||
| 2290 | } | ||
| 2291 | } | ||
| 2292 | } | ||
| 2293 | connections { | ||
| 2294 | from { | ||
| 2295 | room { | ||
| 2296 | map: "the_shop" | ||
| 2297 | name: "Main Area" | ||
| 2298 | } | ||
| 2299 | } | ||
| 2300 | to { | ||
| 2301 | room { | ||
| 2302 | map: "control_center" | ||
| 2303 | name: "Shop Entrance" | ||
| 2304 | } | ||
| 2305 | } | ||
| 2306 | door { | ||
| 2307 | map: "the_shop" | ||
| 2308 | name: "N Entered" | ||
| 2309 | } | ||
| 2310 | oneway: true | ||
| 2311 | } | ||
| 2312 | connections { | ||
| 2313 | from { | ||
| 2314 | room { | ||
| 2315 | map: "control_center" | ||
| 2316 | name: "Shop Entrance" | ||
| 2317 | } | ||
| 2318 | } | ||
| 2319 | to { | ||
| 2320 | room { | ||
| 2321 | map: "the_shop" | ||
| 2322 | name: "Main Area" | ||
| 2323 | } | ||
| 2324 | } | ||
| 2325 | oneway: true | ||
| 2326 | } | ||
| 2327 | connections { | ||
| 2328 | from { | ||
| 2329 | panel { | ||
| 2330 | map: "the_unyielding" | ||
| 2331 | room: "Central Connected Area" | ||
| 2332 | name: "BACK" | ||
| 2333 | } | ||
| 2334 | } | ||
| 2335 | to { | ||
| 2336 | panel { | ||
| 2337 | map: "control_center" | ||
| 2338 | room: "Unyielding Entrance" | ||
| 2339 | name: "FORTH" | ||
| 2340 | } | ||
| 2341 | } | ||
| 2342 | } | ||
| 2343 | connections { | ||
| 2344 | from { | ||
| 2345 | port { | ||
| 2346 | map: "the_tenacious" | ||
| 2347 | room: "Control Center Entrance" | ||
| 2348 | name: "CC" | ||
| 2349 | } | ||
| 2350 | } | ||
| 2351 | to { | ||
| 2352 | port { | ||
| 2353 | map: "control_center" | ||
| 2354 | room: "Tenacious Entrance" | ||
| 2355 | name: "TENACIOUS" | ||
| 2356 | } | ||
| 2357 | } | ||
| 2358 | } | ||
| 2359 | connections { | ||
| 2360 | from { | ||
| 2361 | port { | ||
| 2362 | map: "the_unkempt" | ||
| 2363 | room: "Control Center Entrance" | ||
| 2364 | name: "CC" | ||
| 2365 | } | ||
| 2366 | } | ||
| 2367 | to { | ||
| 2368 | port { | ||
| 2369 | map: "control_center" | ||
| 2370 | room: "Unkempt Entrance" | ||
| 2371 | name: "UNKEMPT" | ||
| 2372 | } | ||
| 2373 | } | ||
| 2374 | } | ||
| 2375 | connections { | ||
| 2376 | from { | ||
| 2377 | panel { | ||
| 2378 | map: "control_center" | ||
| 2379 | room: "Stormy Entrance" | ||
| 2380 | name: "TURN" | ||
| 2381 | } | ||
| 2382 | } | ||
| 2383 | to { | ||
| 2384 | room { | ||
| 2385 | map: "the_stormy" | ||
| 2386 | name: "Center" | ||
| 2387 | } | ||
| 2388 | } | ||
| 2389 | oneway: true | ||
| 2390 | } | ||
| diff --git a/data/ids.yaml b/data/ids.yaml index 874763b..7222db3 100644 --- a/data/ids.yaml +++ b/data/ids.yaml | |||
| @@ -1,4 +1,61 @@ | |||
| 1 | maps: | 1 | maps: |
| 2 | control_center: | ||
| 3 | rooms: | ||
| 4 | Between Entrance: | ||
| 5 | panels: | ||
| 6 | RIGHT: 2721 | ||
| 7 | Desert Room: | ||
| 8 | panels: | ||
| 9 | LESS: 2722 | ||
| 10 | Entry: | ||
| 11 | panels: | ||
| 12 | HELLO: 2724 | ||
| 13 | Entry Entrance: | ||
| 14 | panels: | ||
| 15 | ENTRY: 2723 | ||
| 16 | Hide Room: | ||
| 17 | panels: | ||
| 18 | HIDE: 2725 | ||
| 19 | Main Area: | ||
| 20 | panels: | ||
| 21 | COLOR: 2726 | ||
| 22 | Letters: 2727 | ||
| 23 | Partial Entrance: | ||
| 24 | panels: | ||
| 25 | PARTIAL: 2729 | ||
| 26 | Perceptive Entrance: | ||
| 27 | panels: | ||
| 28 | COLORS: 2731 | ||
| 29 | PART: 2730 | ||
| 30 | Shop Entrance: | ||
| 31 | panels: | ||
| 32 | HOPS: 2732 | ||
| 33 | Stormy Entrance: | ||
| 34 | panels: | ||
| 35 | TURN: 2733 | ||
| 36 | Tenacious Entrance: | ||
| 37 | panels: | ||
| 38 | HERO: 2734 | ||
| 39 | Unkempt Entrance: | ||
| 40 | panels: | ||
| 41 | RETURN: 2735 | ||
| 42 | Unyielding Entrance: | ||
| 43 | panels: | ||
| 44 | FORTH: 2736 | ||
| 45 | SEEK: 2737 | ||
| 46 | doors: | ||
| 47 | Ancient Entrance: 2715 | ||
| 48 | Between Door: 2716 | ||
| 49 | Desert Door: 2717 | ||
| 50 | Front Door: 2709 | ||
| 51 | Partial Door: 2713 | ||
| 52 | Repetitive Entrance: 2714 | ||
| 53 | Shop Door: 2718 | ||
| 54 | Stormy Entrance: 2710 | ||
| 55 | Tenacious Door: 2719 | ||
| 56 | Unkempt Door: 2712 | ||
| 57 | Unyielding Door: 2720 | ||
| 58 | X1 Door: 2711 | ||
| 2 | daedalus: | 59 | daedalus: |
| 3 | rooms: | 60 | rooms: |
| 4 | After Bee Room: | 61 | After Bee Room: |
| @@ -3718,10 +3775,12 @@ endings: | |||
| 3718 | GOLD: 1207 | 3775 | GOLD: 1207 |
| 3719 | GRAY: 1204 | 3776 | GRAY: 1204 |
| 3720 | GREEN: 1203 | 3777 | GREEN: 1203 |
| 3778 | MINT: 2728 | ||
| 3721 | ORANGE: 1775 | 3779 | ORANGE: 1775 |
| 3722 | PLUM: 1205 | 3780 | PLUM: 1205 |
| 3723 | PURPLE: 1211 | 3781 | PURPLE: 1211 |
| 3724 | RED: 2483 | 3782 | RED: 2483 |
| 3783 | WHITE: 2738 | ||
| 3725 | YELLOW: 1206 | 3784 | YELLOW: 1206 |
| 3726 | special: | 3785 | special: |
| 3727 | Nothing: 1160 | 3786 | Nothing: 1160 |
| diff --git a/data/maps/control_center/connections.txtpb b/data/maps/control_center/connections.txtpb new file mode 100644 index 0000000..432d39d --- /dev/null +++ b/data/maps/control_center/connections.txtpb | |||
| @@ -0,0 +1,85 @@ | |||
| 1 | connections { | ||
| 2 | from_room: "Entry" | ||
| 3 | to_room: "Main Area" | ||
| 4 | door { name: "Front Door" } | ||
| 5 | } | ||
| 6 | connections { | ||
| 7 | from_room: "Main Area" | ||
| 8 | to_room: "Stormy Entrance" | ||
| 9 | door { name: "Stormy Entrance" } | ||
| 10 | } | ||
| 11 | connections { | ||
| 12 | from_room: "Entry" | ||
| 13 | to_room: "Hide Room" | ||
| 14 | door { name: "Hidden Door" } | ||
| 15 | } | ||
| 16 | connections { | ||
| 17 | from_room: "Main Area" | ||
| 18 | to_room: "Mint Ending" | ||
| 19 | door { name: "Mint Ending Door" } | ||
| 20 | } | ||
| 21 | connections { | ||
| 22 | from_room: "Main Area" | ||
| 23 | to_room: "Entry Entrance" | ||
| 24 | door { name: "X1 Door" } | ||
| 25 | } | ||
| 26 | connections { | ||
| 27 | from_room: "Main Area" | ||
| 28 | to_room: "Unkempt Entrance" | ||
| 29 | door { name: "Unkempt Door" } | ||
| 30 | } | ||
| 31 | connections { | ||
| 32 | from_room: "Main Area" | ||
| 33 | to_room: "Partial Entrance" | ||
| 34 | door { name: "Partial Door" } | ||
| 35 | } | ||
| 36 | connections { | ||
| 37 | from_room: "Main Area" | ||
| 38 | to_room: "White Ending" | ||
| 39 | door { name: "White Ending Door" } | ||
| 40 | } | ||
| 41 | connections { | ||
| 42 | from_room: "Main Area" | ||
| 43 | to_room: "Repetitive Entrance" | ||
| 44 | door { name: "Repetitive Entrance" } | ||
| 45 | } | ||
| 46 | connections { | ||
| 47 | from_room: "Main Area" | ||
| 48 | to_room: "Perceptive Entrance" | ||
| 49 | door { name: "Perceptive From Outside" } | ||
| 50 | } | ||
| 51 | connections { | ||
| 52 | from_room: "Main Area" | ||
| 53 | to_room: "Perceptive Entrance" | ||
| 54 | door { name: "Perceptive From Inside" } | ||
| 55 | } | ||
| 56 | connections { | ||
| 57 | from_room: "Main Area" | ||
| 58 | to_room: "Ancient Entrance" | ||
| 59 | door { name: "Ancient Entrance" } | ||
| 60 | } | ||
| 61 | connections { | ||
| 62 | from_room: "Main Area" | ||
| 63 | to_room: "Between Entrance" | ||
| 64 | door { name: "Between Door" } | ||
| 65 | } | ||
| 66 | connections { | ||
| 67 | from_room: "Main Area" | ||
| 68 | to_room: "Desert Room" | ||
| 69 | door { name: "Desert Door" } | ||
| 70 | } | ||
| 71 | connections { | ||
| 72 | from_room: "Main Area" | ||
| 73 | to_room: "Shop Entrance" | ||
| 74 | door { name: "Shop Door" } | ||
| 75 | } | ||
| 76 | connections { | ||
| 77 | from_room: "Main Area" | ||
| 78 | to_room: "Tenacious Entrance" | ||
| 79 | door { name: "Tenacious Door" } | ||
| 80 | } | ||
| 81 | connections { | ||
| 82 | from_room: "Main Area" | ||
| 83 | to_room: "Unyielding Entrance" | ||
| 84 | door { name: "Unyielding Door" } | ||
| 85 | } | ||
| diff --git a/data/maps/control_center/doors.txtpb b/data/maps/control_center/doors.txtpb new file mode 100644 index 0000000..0bb29c1 --- /dev/null +++ b/data/maps/control_center/doors.txtpb | |||
| @@ -0,0 +1,170 @@ | |||
| 1 | doors { | ||
| 2 | name: "Front Door" | ||
| 3 | type: STANDARD | ||
| 4 | receivers: "Components/Doors/entry_1" | ||
| 5 | panels { room: "Entry" name: "HELLO" } | ||
| 6 | location_room: "Entry" | ||
| 7 | } | ||
| 8 | doors { | ||
| 9 | name: "Stormy Entrance" | ||
| 10 | type: STANDARD | ||
| 11 | receivers: "Components/Doors/entry_13" | ||
| 12 | panels { room: "Hide Room" name: "HIDE" } | ||
| 13 | location_room: "Hide Room" | ||
| 14 | } | ||
| 15 | doors { | ||
| 16 | name: "Hidden Door" | ||
| 17 | type: EVENT | ||
| 18 | keyholders { room: "Main Area" name: "1" key: "h" } | ||
| 19 | keyholders { room: "Main Area" name: "2" key: "i" } | ||
| 20 | keyholders { room: "Main Area" name: "3" key: "d" } | ||
| 21 | keyholders { room: "Main Area" name: "4" key: "e" } | ||
| 22 | } | ||
| 23 | doors { | ||
| 24 | name: "Mint Ending Door" | ||
| 25 | type: EVENT | ||
| 26 | keyholders { room: "Main Area" name: "1" key: "e" } | ||
| 27 | keyholders { room: "Main Area" name: "2" key: "x" } | ||
| 28 | keyholders { room: "Main Area" name: "3" key: "i" } | ||
| 29 | keyholders { room: "Main Area" name: "4" key: "t" } | ||
| 30 | } | ||
| 31 | doors { | ||
| 32 | name: "Relentless Left Door" | ||
| 33 | type: EVENT | ||
| 34 | keyholders { room: "Main Area" name: "1" key: "l" } | ||
| 35 | keyholders { room: "Main Area" name: "2" key: "e" } | ||
| 36 | keyholders { room: "Main Area" name: "3" key: "f" } | ||
| 37 | keyholders { room: "Main Area" name: "4" key: "t" } | ||
| 38 | } | ||
| 39 | doors { | ||
| 40 | name: "Relentless Shop Door" | ||
| 41 | type: EVENT | ||
| 42 | keyholders { room: "Main Area" name: "1" key: "s" } | ||
| 43 | keyholders { room: "Main Area" name: "2" key: "h" } | ||
| 44 | keyholders { room: "Main Area" name: "3" key: "o" } | ||
| 45 | keyholders { room: "Main Area" name: "4" key: "p" } | ||
| 46 | } | ||
| 47 | doors { | ||
| 48 | name: "Relentless Turn Door" | ||
| 49 | type: EVENT | ||
| 50 | keyholders { room: "Main Area" name: "1" key: "t" } | ||
| 51 | keyholders { room: "Main Area" name: "2" key: "u" } | ||
| 52 | keyholders { room: "Main Area" name: "3" key: "r" } | ||
| 53 | keyholders { room: "Main Area" name: "4" key: "n" } | ||
| 54 | } | ||
| 55 | doors { | ||
| 56 | name: "X1 Door" | ||
| 57 | type: STANDARD | ||
| 58 | receivers: "Components/Doors/entry_3" | ||
| 59 | panels { room: "Entry Entrance" name: "ENTRY" } | ||
| 60 | location_room: "Entry Entrance" | ||
| 61 | } | ||
| 62 | doors { | ||
| 63 | name: "Unkempt Door" | ||
| 64 | type: STANDARD | ||
| 65 | receivers: "Components/Doors/entry_4" | ||
| 66 | panels { room: "Unkempt Entrance" name: "RETURN" } | ||
| 67 | location_room: "Unkempt Entrance" | ||
| 68 | } | ||
| 69 | doors { | ||
| 70 | name: "Partial Door" | ||
| 71 | type: STANDARD | ||
| 72 | receivers: "Components/Doors/entry_5" | ||
| 73 | panels { room: "Partial Entrance" name: "PARTIAL" } | ||
| 74 | location_room: "Partial Entrance" | ||
| 75 | } | ||
| 76 | doors { | ||
| 77 | name: "Link Blocker" | ||
| 78 | type: EVENT | ||
| 79 | panels { room: "Unkempt Entrance" name: "RETURN" } | ||
| 80 | panels { room: "Partial Entrance" name: "PARTIAL" } | ||
| 81 | panels { room: "Shop Entrance" name: "HOPS" } | ||
| 82 | panels { room: "Tenacious Entrance" name: "HERO" } | ||
| 83 | } | ||
| 84 | doors { | ||
| 85 | name: "White Ending Door" | ||
| 86 | type: EVENT | ||
| 87 | # This is the only time a door depends on endings. However, it's nice to do it | ||
| 88 | # this way instead of just checking for ending room access because this lets | ||
| 89 | # us use events, which makes the playthrough more readable. | ||
| 90 | endings: "MINT" | ||
| 91 | endings: "ORANGE" | ||
| 92 | endings: "GREEN" | ||
| 93 | endings: "GRAY" | ||
| 94 | endings: "PLUM" | ||
| 95 | endings: "YELLOW" | ||
| 96 | endings: "GOLD" | ||
| 97 | endings: "BLACK" | ||
| 98 | endings: "CYAN" | ||
| 99 | endings: "PURPLE" | ||
| 100 | endings: "RED" | ||
| 101 | endings: "BLUE" | ||
| 102 | } | ||
| 103 | doors { | ||
| 104 | name: "Repetitive Entrance" | ||
| 105 | type: STANDARD | ||
| 106 | receivers: "Components/Doors/entry_7" | ||
| 107 | keyholders { room: "Main Area" name: "1" key: "m" } | ||
| 108 | keyholders { room: "Main Area" name: "2" key: "o" } | ||
| 109 | keyholders { room: "Main Area" name: "3" key: "r" } | ||
| 110 | keyholders { room: "Main Area" name: "4" key: "e" } | ||
| 111 | location_room: "Main Area" | ||
| 112 | } | ||
| 113 | doors { | ||
| 114 | name: "Perceptive From Outside" | ||
| 115 | type: EVENT | ||
| 116 | keyholders { room: "Main Area" name: "1" key: "p" } | ||
| 117 | keyholders { room: "Main Area" name: "2" key: "a" } | ||
| 118 | keyholders { room: "Main Area" name: "3" key: "r" } | ||
| 119 | keyholders { room: "Main Area" name: "4" key: "t" } | ||
| 120 | } | ||
| 121 | doors { | ||
| 122 | name: "Perceptive From Inside" | ||
| 123 | type: EVENT | ||
| 124 | panels { room: "Perceptive Entrance" name: "PART" } | ||
| 125 | } | ||
| 126 | doors { | ||
| 127 | name: "Ancient Entrance" | ||
| 128 | type: STANDARD | ||
| 129 | receivers: "Components/Doors/entry_20" | ||
| 130 | keyholders { room: "Main Area" name: "1" key: "z" } | ||
| 131 | keyholders { room: "Main Area" name: "2" key: "e" } | ||
| 132 | keyholders { room: "Main Area" name: "3" key: "r" } | ||
| 133 | keyholders { room: "Main Area" name: "4" key: "o" } | ||
| 134 | location_room: "Main Area" | ||
| 135 | } | ||
| 136 | doors { | ||
| 137 | name: "Between Door" | ||
| 138 | type: STANDARD | ||
| 139 | receivers: "Components/Doors/entry_8" | ||
| 140 | panels { room: "Between Entrance" name: "RIGHT" } | ||
| 141 | location_room: "Between Entrance" | ||
| 142 | } | ||
| 143 | doors { | ||
| 144 | name: "Desert Door" | ||
| 145 | type: STANDARD | ||
| 146 | receivers: "Components/Doors/entry_9" | ||
| 147 | panels { room: "Desert Room" name: "LESS" } | ||
| 148 | location_room: "Desert Room" | ||
| 149 | } | ||
| 150 | doors { | ||
| 151 | name: "Shop Door" | ||
| 152 | type: STANDARD | ||
| 153 | receivers: "Components/Doors/entry_23" | ||
| 154 | panels { room: "Shop Entrance" name: "HOPS" } | ||
| 155 | location_room: "Shop Entrance" | ||
| 156 | } | ||
| 157 | doors { | ||
| 158 | name: "Tenacious Door" | ||
| 159 | type: STANDARD | ||
| 160 | receivers: "Components/Doors/entry_24" | ||
| 161 | panels { room: "Tenacious Entrance" name: "HERO" } | ||
| 162 | location_room: "Tenacious Entrance" | ||
| 163 | } | ||
| 164 | doors { | ||
| 165 | name: "Unyielding Door" | ||
| 166 | type: STANDARD | ||
| 167 | receivers: "Components/Doors/entry_11" | ||
| 168 | panels { room: "Unyielding Entrance" name: "SEEK" } | ||
| 169 | location_room: "Unyielding Entrance" | ||
| 170 | } | ||
| diff --git a/data/maps/control_center/metadata.txtpb b/data/maps/control_center/metadata.txtpb new file mode 100644 index 0000000..bf89670 --- /dev/null +++ b/data/maps/control_center/metadata.txtpb | |||
| @@ -0,0 +1 @@ | |||
| display_name: "Control Center" | |||
| diff --git a/data/maps/control_center/rooms/Ancient Entrance.txtpb b/data/maps/control_center/rooms/Ancient Entrance.txtpb new file mode 100644 index 0000000..9fe50c5 --- /dev/null +++ b/data/maps/control_center/rooms/Ancient Entrance.txtpb | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | name: "Ancient Entrance" | ||
| 2 | ports { | ||
| 3 | name: "ANCIENT" | ||
| 4 | path: "Components/Warps/worldport8" | ||
| 5 | } | ||
| diff --git a/data/maps/control_center/rooms/Between Entrance.txtpb b/data/maps/control_center/rooms/Between Entrance.txtpb new file mode 100644 index 0000000..2c21bdd --- /dev/null +++ b/data/maps/control_center/rooms/Between Entrance.txtpb | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | name: "Between Entrance" | ||
| 2 | panels { | ||
| 3 | name: "RIGHT" | ||
| 4 | path: "Panels/Hallway Right/entry_4" | ||
| 5 | clue: "right" | ||
| 6 | answer: "left" | ||
| 7 | symbols: SUN | ||
| 8 | } | ||
| 9 | ports { | ||
| 10 | name: "BETWEEN" | ||
| 11 | path: "Components/Warps/worldport5" | ||
| 12 | } | ||
| diff --git a/data/maps/control_center/rooms/Desert Room.txtpb b/data/maps/control_center/rooms/Desert Room.txtpb new file mode 100644 index 0000000..fb24faf --- /dev/null +++ b/data/maps/control_center/rooms/Desert Room.txtpb | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | name: "Desert Room" | ||
| 2 | panels { | ||
| 3 | name: "LESS" | ||
| 4 | path: "Panels/Hallway Right/entry_5" | ||
| 5 | clue: "less" | ||
| 6 | answer: "more" | ||
| 7 | symbols: SUN | ||
| 8 | } | ||
| diff --git a/data/maps/control_center/rooms/Entry Entrance.txtpb b/data/maps/control_center/rooms/Entry Entrance.txtpb new file mode 100644 index 0000000..d920523 --- /dev/null +++ b/data/maps/control_center/rooms/Entry Entrance.txtpb | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | name: "Entry Entrance" | ||
| 2 | panels { | ||
| 3 | name: "ENTRY" | ||
| 4 | path: "Panels/Hallway Right/entry_3" | ||
| 5 | clue: "entry" | ||
| 6 | answer: "exit" | ||
| 7 | symbols: SUN | ||
| 8 | } | ||
| 9 | ports { | ||
| 10 | name: "ENTRY" | ||
| 11 | path: "Components/Warps/worldport2" | ||
| 12 | } | ||
| diff --git a/data/maps/control_center/rooms/Entry.txtpb b/data/maps/control_center/rooms/Entry.txtpb new file mode 100644 index 0000000..7ef380c --- /dev/null +++ b/data/maps/control_center/rooms/Entry.txtpb | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | name: "Entry" | ||
| 2 | panels { | ||
| 3 | name: "HELLO" | ||
| 4 | path: "Panels/Doors/entry_1" | ||
| 5 | clue: "hello" | ||
| 6 | answer: "hi" | ||
| 7 | symbols: SUN | ||
| 8 | } | ||
| 9 | ports { | ||
| 10 | name: "GREAT" | ||
| 11 | path: "Components/Warps/worldport" | ||
| 12 | } | ||
| diff --git a/data/maps/control_center/rooms/Hide Room.txtpb b/data/maps/control_center/rooms/Hide Room.txtpb new file mode 100644 index 0000000..826293b --- /dev/null +++ b/data/maps/control_center/rooms/Hide Room.txtpb | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | name: "Hide Room" | ||
| 2 | panels { | ||
| 3 | name: "HIDE" | ||
| 4 | path: "Panels/Doors/entry_4" | ||
| 5 | clue: "hide" | ||
| 6 | answer: "unmask" | ||
| 7 | symbols: SUN | ||
| 8 | } | ||
| diff --git a/data/maps/control_center/rooms/Main Area.txtpb b/data/maps/control_center/rooms/Main Area.txtpb new file mode 100644 index 0000000..192c02a --- /dev/null +++ b/data/maps/control_center/rooms/Main Area.txtpb | |||
| @@ -0,0 +1,66 @@ | |||
| 1 | name: "Main Area" | ||
| 2 | panels { | ||
| 3 | name: "COLOR" | ||
| 4 | path: "Panels/Doors/entry_2" | ||
| 5 | clue: "color" | ||
| 6 | answer: "red" | ||
| 7 | #proxies { answer: "red" path: "Panels/Colors/color_1" } | ||
| 8 | proxies { answer: "blue" path: "Panels/Colors/color_2" } | ||
| 9 | proxies { answer: "green" path: "Panels/Colors/color_3" } | ||
| 10 | proxies { answer: "yellow" path: "Panels/Colors/color_4" } | ||
| 11 | proxies { answer: "white" path: "Panels/Colors/color_5" } | ||
| 12 | proxies { answer: "black" path: "Panels/Colors/color_6" } | ||
| 13 | proxies { answer: "orange" path: "Panels/Colors/color_7" } | ||
| 14 | proxies { answer: "purple" path: "Panels/Colors/color_8" } | ||
| 15 | proxies { answer: "brown" path: "Panels/Colors/color_9" } | ||
| 16 | proxies { answer: "silver" path: "Panels/Colors/color_10" } | ||
| 17 | proxies { answer: "gold" path: "Panels/Colors/color_11" } | ||
| 18 | proxies { answer: "brass" path: "Panels/Colors/color_12" } | ||
| 19 | proxies { answer: "gray" path: "Panels/Colors/color_13" } | ||
| 20 | proxies { answer: "magenta" path: "Panels/Colors/color_14" } | ||
| 21 | } | ||
| 22 | panels { | ||
| 23 | name: "Letters" | ||
| 24 | path: "Panels/Doors/entry_6" | ||
| 25 | clue: "" | ||
| 26 | answer: "link" | ||
| 27 | symbols: LINGO | ||
| 28 | required_door { name: "Link Blocker" } | ||
| 29 | } | ||
| 30 | keyholders { | ||
| 31 | name: "1" | ||
| 32 | path: "Components/KeyHolders/keyHolder" | ||
| 33 | } | ||
| 34 | keyholders { | ||
| 35 | name: "2" | ||
| 36 | path: "Components/KeyHolders/keyHolder2" | ||
| 37 | } | ||
| 38 | keyholders { | ||
| 39 | name: "3" | ||
| 40 | path: "Components/KeyHolders/keyHolder3" | ||
| 41 | } | ||
| 42 | keyholders { | ||
| 43 | name: "4" | ||
| 44 | path: "Components/KeyHolders/keyHolder4" | ||
| 45 | } | ||
| 46 | ports { | ||
| 47 | name: "RIGHT" | ||
| 48 | path: "Components/Warps/worldport6" | ||
| 49 | } | ||
| 50 | ports { | ||
| 51 | name: "LEFT" | ||
| 52 | path: "Components/Warps/worldport7" | ||
| 53 | # Check that this is correct. | ||
| 54 | } | ||
| 55 | ports { | ||
| 56 | name: "RELENTLESS_LEFT" | ||
| 57 | path: "Components/Warps/worldport9" | ||
| 58 | } | ||
| 59 | ports { | ||
| 60 | name: "RELENTLESS_SHOP" | ||
| 61 | path: "Components/Warps/worldport11" | ||
| 62 | } | ||
| 63 | ports { | ||
| 64 | name: "RELENTLESS_TURN" | ||
| 65 | path: "Components/Warps/worldport10" | ||
| 66 | } | ||
| diff --git a/data/maps/control_center/rooms/Mint Ending.txtpb b/data/maps/control_center/rooms/Mint Ending.txtpb new file mode 100644 index 0000000..7ff9fc4 --- /dev/null +++ b/data/maps/control_center/rooms/Mint Ending.txtpb | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | name: "Mint Ending" | ||
| 2 | endings { | ||
| 3 | name: "MINT" | ||
| 4 | path: "Components/Endings/mint_ending" | ||
| 5 | } | ||
| diff --git a/data/maps/control_center/rooms/Partial Entrance.txtpb b/data/maps/control_center/rooms/Partial Entrance.txtpb new file mode 100644 index 0000000..77b68fa --- /dev/null +++ b/data/maps/control_center/rooms/Partial Entrance.txtpb | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | name: "Partial Entrance" | ||
| 2 | panels { | ||
| 3 | name: "PARTIAL" | ||
| 4 | path: "Panels/Hallway Left/entry_5" | ||
| 5 | clue: "partial" | ||
| 6 | answer: "part" | ||
| 7 | symbols: SPARKLES | ||
| 8 | } | ||
| 9 | ports { | ||
| 10 | name: "PARTIAL" | ||
| 11 | path: "Components/Warps/worldport4" | ||
| 12 | } | ||
| diff --git a/data/maps/control_center/rooms/Perceptive Entrance.txtpb b/data/maps/control_center/rooms/Perceptive Entrance.txtpb new file mode 100644 index 0000000..6eec265 --- /dev/null +++ b/data/maps/control_center/rooms/Perceptive Entrance.txtpb | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | name: "Perceptive Entrance" | ||
| 2 | panels { | ||
| 3 | name: "PART" | ||
| 4 | path: "Panels/Doors/stormyPanel2" | ||
| 5 | clue: "part" | ||
| 6 | answer: "hole" | ||
| 7 | symbols: SUN | ||
| 8 | symbols: ZERO | ||
| 9 | } | ||
| 10 | panels { | ||
| 11 | name: "COLORS" | ||
| 12 | path: "Panels/Doors/stormyPanel3" | ||
| 13 | clue: "colors" | ||
| 14 | answer: "hues" | ||
| 15 | symbols: SUN | ||
| 16 | } | ||
| 17 | ports { | ||
| 18 | name: "PERCEPTIVE" | ||
| 19 | path: "Components/Warps/worldport12" | ||
| 20 | } | ||
| diff --git a/data/maps/control_center/rooms/Repetitive Entrance.txtpb b/data/maps/control_center/rooms/Repetitive Entrance.txtpb new file mode 100644 index 0000000..08b8fa4 --- /dev/null +++ b/data/maps/control_center/rooms/Repetitive Entrance.txtpb | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | name: "Repetitive Entrance" | ||
| 2 | ports { | ||
| 3 | name: "REPETITIVE" | ||
| 4 | path: "Components/Warps/worldport14" | ||
| 5 | } | ||
| diff --git a/data/maps/control_center/rooms/Shop Entrance.txtpb b/data/maps/control_center/rooms/Shop Entrance.txtpb new file mode 100644 index 0000000..154c55b --- /dev/null +++ b/data/maps/control_center/rooms/Shop Entrance.txtpb | |||
| @@ -0,0 +1,9 @@ | |||
| 1 | name: "Shop Entrance" | ||
| 2 | # The connection to The Shop isn't a worldport. | ||
| 3 | panels { | ||
| 4 | name: "HOPS" | ||
| 5 | path: "Panels/Hallway Left/entry_6" | ||
| 6 | clue: "hops" | ||
| 7 | answer: "shop" | ||
| 8 | symbols: ANAGRAM | ||
| 9 | } | ||
| diff --git a/data/maps/control_center/rooms/Stormy Entrance.txtpb b/data/maps/control_center/rooms/Stormy Entrance.txtpb new file mode 100644 index 0000000..23e48b5 --- /dev/null +++ b/data/maps/control_center/rooms/Stormy Entrance.txtpb | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | name: "Stormy Entrance" | ||
| 2 | panels { | ||
| 3 | name: "TURN" | ||
| 4 | path: "Components/Warps/stormyPanel" | ||
| 5 | clue: "turn" | ||
| 6 | answer: "spin" | ||
| 7 | symbols: SUN | ||
| 8 | } | ||
| diff --git a/data/maps/control_center/rooms/Tenacious Entrance.txtpb b/data/maps/control_center/rooms/Tenacious Entrance.txtpb new file mode 100644 index 0000000..0527d50 --- /dev/null +++ b/data/maps/control_center/rooms/Tenacious Entrance.txtpb | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | name: "Tenacious Entrance" | ||
| 2 | panels { | ||
| 3 | name: "HERO" | ||
| 4 | path: "Panels/Hallway Left/entry_7" | ||
| 5 | clue: "hero" | ||
| 6 | answer: "zero" | ||
| 7 | symbols: ZERO | ||
| 8 | } | ||
| 9 | ports { | ||
| 10 | name: "TENACIOUS" | ||
| 11 | path: "Components/Warps/worldport13" | ||
| 12 | } | ||
| diff --git a/data/maps/control_center/rooms/Unkempt Entrance.txtpb b/data/maps/control_center/rooms/Unkempt Entrance.txtpb new file mode 100644 index 0000000..b6fc074 --- /dev/null +++ b/data/maps/control_center/rooms/Unkempt Entrance.txtpb | |||
| @@ -0,0 +1,12 @@ | |||
| 1 | name: "Unkempt Entrance" | ||
| 2 | panels { | ||
| 3 | name: "RETURN" | ||
| 4 | path: "Panels/Hallway Left/entry_4" | ||
| 5 | clue: "return" | ||
| 6 | answer: "turn" | ||
| 7 | symbols: SPARKLES | ||
| 8 | } | ||
| 9 | ports { | ||
| 10 | name: "UNKEMPT" | ||
| 11 | path: "Components/Warps/worldport3" | ||
| 12 | } | ||
| diff --git a/data/maps/control_center/rooms/Unyielding Entrance.txtpb b/data/maps/control_center/rooms/Unyielding Entrance.txtpb new file mode 100644 index 0000000..ca22b23 --- /dev/null +++ b/data/maps/control_center/rooms/Unyielding Entrance.txtpb | |||
| @@ -0,0 +1,15 @@ | |||
| 1 | name: "Unyielding Entrance" | ||
| 2 | panels { | ||
| 3 | name: "FORTH" | ||
| 4 | path: "Components/UnlockListeners/panelPorter" | ||
| 5 | clue: "forth" | ||
| 6 | answer: "back" | ||
| 7 | symbols: SUN | ||
| 8 | } | ||
| 9 | panels { | ||
| 10 | name: "SEEK" | ||
| 11 | path: "Panels/Hallway Right/entry_6" | ||
| 12 | clue: "seek" | ||
| 13 | answer: "hide" | ||
| 14 | symbols: SUN | ||
| 15 | } | ||
| diff --git a/data/maps/control_center/rooms/White Ending.txtpb b/data/maps/control_center/rooms/White Ending.txtpb new file mode 100644 index 0000000..62d4a56 --- /dev/null +++ b/data/maps/control_center/rooms/White Ending.txtpb | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | name: "White Ending" | ||
| 2 | endings { | ||
| 3 | name: "WHITE" | ||
| 4 | path: "Components/Endings/white_ending" | ||
| 5 | } | ||
| diff --git a/proto/data.proto b/proto/data.proto index d3933c4..211a7ac 100644 --- a/proto/data.proto +++ b/proto/data.proto | |||
| @@ -104,6 +104,7 @@ message Door { | |||
| 104 | repeated KeyholderAnswer keyholders = 13; | 104 | repeated KeyholderAnswer keyholders = 13; |
| 105 | repeated uint64 rooms = 14; | 105 | repeated uint64 rooms = 14; |
| 106 | repeated uint64 doors = 15; | 106 | repeated uint64 doors = 15; |
| 107 | repeated uint64 endings = 16; | ||
| 107 | 108 | ||
| 108 | optional DoorType type = 8; | 109 | optional DoorType type = 8; |
| 109 | } | 110 | } |
| diff --git a/proto/human.proto b/proto/human.proto index e0021c2..1a15c59 100644 --- a/proto/human.proto +++ b/proto/human.proto | |||
| @@ -86,6 +86,7 @@ message HumanDoor { | |||
| 86 | repeated KeyholderIdentifier keyholders = 10; | 86 | repeated KeyholderIdentifier keyholders = 10; |
| 87 | repeated RoomIdentifier rooms = 11; | 87 | repeated RoomIdentifier rooms = 11; |
| 88 | repeated DoorIdentifier doors = 12; | 88 | repeated DoorIdentifier doors = 12; |
| 89 | repeated string endings = 13; | ||
| 89 | 90 | ||
| 90 | optional DoorType type = 4; | 91 | optional DoorType type = 4; |
| 91 | optional string location_room = 5; | 92 | optional string location_room = 5; |
| diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 3ddb11f..d9fcbe2 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp | |||
| @@ -380,6 +380,10 @@ class DataPacker { | |||
| 380 | door.add_doors( | 380 | door.add_doors( |
| 381 | container_.FindOrAddDoor(map_name, di.name(), current_map_name)); | 381 | container_.FindOrAddDoor(map_name, di.name(), current_map_name)); |
| 382 | } | 382 | } |
| 383 | |||
| 384 | for (const std::string& ending_name : h_door.endings()) { | ||
| 385 | door.add_endings(container_.FindOrAddEnding(ending_name)); | ||
| 386 | } | ||
| 383 | 387 | ||
| 384 | if (h_door.has_control_center_color()) { | 388 | if (h_door.has_control_center_color()) { |
| 385 | door.set_control_center_color(h_door.control_center_color()); | 389 | door.set_control_center_color(h_door.control_center_color()); |
| diff --git a/tools/validator/human_processor.cpp b/tools/validator/human_processor.cpp index 5a7e78a..f53dc79 100644 --- a/tools/validator/human_processor.cpp +++ b/tools/validator/human_processor.cpp | |||
| @@ -337,6 +337,11 @@ class HumanProcessor { | |||
| 337 | DoorInfo& other_door_info = info_.doors[complete_door_identifier]; | 337 | DoorInfo& other_door_info = info_.doors[complete_door_identifier]; |
| 338 | other_door_info.doors_referenced_by.push_back(door_identifier); | 338 | other_door_info.doors_referenced_by.push_back(door_identifier); |
| 339 | } | 339 | } |
| 340 | |||
| 341 | for (const std::string& ei : h_door.endings()) { | ||
| 342 | EndingInfo& ending_info = info_.endings[ei]; | ||
| 343 | ending_info.doors_referenced_by.push_back(door_identifier); | ||
| 344 | } | ||
| 340 | } | 345 | } |
| 341 | 346 | ||
| 342 | void ProcessConnectionsFile(std::filesystem::path path, | 347 | void ProcessConnectionsFile(std::filesystem::path path, |
| diff --git a/tools/validator/structs.h b/tools/validator/structs.h index f7d9dc1..958038d 100644 --- a/tools/validator/structs.h +++ b/tools/validator/structs.h | |||
| @@ -92,6 +92,8 @@ struct LetterInfo { | |||
| 92 | 92 | ||
| 93 | struct EndingInfo { | 93 | struct EndingInfo { |
| 94 | std::vector<RoomIdentifier> defined_in; | 94 | std::vector<RoomIdentifier> defined_in; |
| 95 | |||
| 96 | std::vector<DoorIdentifier> doors_referenced_by; | ||
| 95 | }; | 97 | }; |
| 96 | 98 | ||
| 97 | struct CollectedInfo { | 99 | struct CollectedInfo { |
| diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index b33f602..f802460 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp | |||
| @@ -245,7 +245,16 @@ void ValidateLetter(const LetterIdentifier& letter_identifier, | |||
| 245 | 245 | ||
| 246 | void ValidateEnding(const std::string& ending_name, | 246 | void ValidateEnding(const std::string& ending_name, |
| 247 | const EndingInfo& ending_info) { | 247 | const EndingInfo& ending_info) { |
| 248 | if (ending_info.defined_in.size() > 1) { | 248 | if (ending_info.defined_in.empty()) { |
| 249 | std::cout << "Ending " << ending_name | ||
| 250 | << " has no definition, but was referenced:" << std::endl; | ||
| 251 | |||
| 252 | for (const DoorIdentifier& door_identifier : | ||
| 253 | ending_info.doors_referenced_by) { | ||
| 254 | std::cout << " DOOR " << door_identifier.ShortDebugString() | ||
| 255 | << std::endl; | ||
| 256 | } | ||
| 257 | } else if (ending_info.defined_in.size() > 1) { | ||
| 249 | std::cout << "Ending " << ending_name | 258 | std::cout << "Ending " << ending_name |
| 250 | << " was defined in multiple places:" << std::endl; | 259 | << " was defined in multiple places:" << std::endl; |
| 251 | 260 | ||
