/** * Map of all Locations in the game * Key = Location name, value = Location object */ import { Cities } from "./Cities"; import { Location, IConstructorParams } from "./Location"; import { CityName } from "../Enums"; import { LocationsMetadata } from "./data/LocationsMetadata"; export const Locations: Record = {}; /** * Here, we'll initialize both Locations and Cities data. These can both * be initialized from the `LocationsMetadata` */ function constructLocation(p: IConstructorParams): Location { if (!p.name) { throw new Error(`Invalid constructor parameters for Location. No 'name' property`); } if (Locations[p.name]) { console.warn(`Property with name ${p.name} already exists and is being overwritten`); } Locations[p.name] = new Location(p); return Locations[p.name]; } // First construct all cities Cities[CityName.Aevum].asciiArt = ` [aevum police headquarters] 26 o I \\ [bachman & associates] \\ 56 B x \\ [summit university] \\ \\ 28 \\ [snap fitness gym] x o--L-----------N K \\ / \\ \\ Q [casino] x 58 \\ / [travel agency] \\ 94 95 o 90 x 59 o------o | \\ / \\ | 98 102 103 o--------O------x----o 93 96 o-----+------------o o----o \\ | \\ / [hospital] \\ 61 [ecorp] x 31 99 o-F-o 101 o | | o---E-- | [fulcrum tech.] x 62 / A [aerocorp] [crush fitness gym] | / | | / | o--------D------+--o o | |\\ [rho construction] H [netlink tech.] | J | | \\ | 34 x \\ [clarke inc.] C | \\ [world stock exchange] | | \\ | | o-M-------R--------o [galactic cybersystems] G 35 x | [watchdog security] | 67 o [the slums] P `; Cities[CityName.Chongqing].asciiArt = ` | 75 o \\ o 76 7 | | | + 77 [world stock exchange] F | \\ o 78 [kuaigong international] \\ / 38 o----x--x------x------A------G-- / 39 | 41 [church] 37 o + 79 o--x--x-C-0 / | / / x-----+-----x-----0 [hospital] [solaris space system] B | | + 80 | | 34 o E [travel agency] | | x 82 [the slums] D `; Cities[CityName.Ishima].asciiArt = ` o 59 o o | [storm tech.] | | G [world stock exchange] | | 28 | 23 o--C------o--------+----x----o | / / 25 | 27 \\ x 57 / / | \\ | / / | \\ | o 22 o | \\| 29/56 | | o | [hospital] D / \\ 3 2 1 o | / \\ o-------x------o / o / \\ / 48 o / 55 x \\ / \\ / / x [glitch] \\ / [nova medical] / 4/30 \\ 49 x A \\ H / \\ / \\ / \\ [travel agency] F o 31 / \\ 51 / / o----B------x-----o o 50 52 [omega soft.] [the slums] E `; Cities[CityName.NewTokyo].asciiArt = ` o \\ [arcade] E [defcomm] \\ o--x---A--x--o [travel agency] 7 8 10 H [vitalife] o 12 [global pharmaceuticals] | o--D-x----x-------x-C-+--------x--x-B-x---x-o 21 22 23 \\ 24 25 26 27 \\ [noodle bar] x 14 \\ \\ [hospital] o 15 [world stock exchange] | o--x--F--x-----x-----x---+---x----x--I--x-o | | o 17 G [the slums] `; Cities[CityName.Sector12].asciiArt = ` 78 o 97 o [icarus microsystems] / N [powerhouse gym] o I 1 | | / o-----+---x----o 4 A [alpha ent.] o-------o / | 3 \\ | \\ / | \\ | [iron gym] x 95 (79) x \\ | / \\ | o-E----+----x----J--o 10 / o----T--o | | 8 \\ 94 x 80 x [city hall] | x 11 / [world stock exchange] | | \\ / | C [cia] \\ / Q [hospital] | F P [universal energy] | o [deltaone] \\ / | 35 o---------x 13/92/36 L [megacorp] 33 / / \\ | o------------o 34 / \\ (29) | / [carmichael sec.] D \\ o-----+-----x------o / O [rothman university] | 31 32 [nsa] M | / B [blade industries] H | / [four sigma] | [joe's guns] / | / 85 o--G--------K--------S-------o 88 [the slums] R [foodnstuff] [travel agency] `; Cities[CityName.Volhaven].asciiArt = ` [omnia cybersystems] 17 66 68 o o------G-------o \\ / \\ \\ o 65 o 69 [syscore sec.] H | | \\ | | [millenium fitness gym] \\ | 21 22 23 24 | 26 o----+--x--x----x---x---+-----x-------D-----o 19 | | 28 | F [omnitek inc.] [hospital] J 63 o | / 72 3 | 5 6 / 9 o--------+----x-----x----+----------M-------o / | | / 61 x [helios labs] B [world stock exchange] [travel agency] L | | / | o / E [nwo] / 75 / [computek] | / / A-------o------I-----o 1 o | | | [zb] o 77 [lexocorp] C | o 57 [the slums] K `; // Then construct all locations, and add them to the cities as we go. for (const metadata of LocationsMetadata) { const loc = constructLocation(metadata); const cityName = loc.city; if (cityName === null) { // Generic location, add to all cities for (const city of Object.values(CityName)) { Cities[city].addLocation(loc.name); } } else { Cities[cityName].addLocation(loc.name); } }