diff --git a/.gitignore b/.gitignore index f4bcd35c32ae..aaea45ce985a 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ *.apmc *.apz5 *.aptloz +*.apemerald *.pyc *.pyd *.sfc diff --git a/CommonClient.py b/CommonClient.py index a5e9b4553ab4..0952b08a58e7 100644 --- a/CommonClient.py +++ b/CommonClient.py @@ -758,6 +758,7 @@ async def process_server_cmd(ctx: CommonContext, args: dict): ctx.slot_info = {int(pid): data for pid, data in args["slot_info"].items()} ctx.hint_points = args.get("hint_points", 0) ctx.consume_players_package(args["players"]) + ctx.stored_data_notification_keys.add(f"_read_hints_{ctx.team}_{ctx.slot}") msgs = [] if ctx.locations_checked: msgs.append({"cmd": "LocationChecks", @@ -836,10 +837,14 @@ async def process_server_cmd(ctx: CommonContext, args: dict): elif cmd == "Retrieved": ctx.stored_data.update(args["keys"]) + if ctx.ui and f"_read_hints_{ctx.team}_{ctx.slot}" in args["keys"]: + ctx.ui.update_hints() elif cmd == "SetReply": ctx.stored_data[args["key"]] = args["value"] - if args["key"].startswith("EnergyLink"): + if ctx.ui and f"_read_hints_{ctx.team}_{ctx.slot}" == args["key"]: + ctx.ui.update_hints() + elif args["key"].startswith("EnergyLink"): ctx.current_energy_link_value = args["value"] if ctx.ui: ctx.ui.set_new_energy_link_value() diff --git a/Fill.py b/Fill.py index c9660ab708ca..9fdbcc384392 100644 --- a/Fill.py +++ b/Fill.py @@ -112,7 +112,7 @@ def fill_restrictive(world: MultiWorld, base_state: CollectionState, locations: location.item = None placed_item.location = None - swap_state = sweep_from_pool(base_state, [placed_item] if unsafe else []) + swap_state = sweep_from_pool(base_state, [placed_item, *item_pool] if unsafe else item_pool) # unsafe means swap_state assumes we can somehow collect placed_item before item_to_place # by continuing to swap, which is not guaranteed. This is unsafe because there is no mechanic # to clean that up later, so there is a chance generation fails. diff --git a/Main.py b/Main.py index 691b88b13706..7b42a89d12be 100644 --- a/Main.py +++ b/Main.py @@ -265,7 +265,7 @@ def find_common_pool(players: Set[int], shared_pool: Set[str]) -> Tuple[ if any(world.item_links.values()): world._all_state = None - logger.info("Running Item Plando") + logger.info("Running Item Plando.") distribute_planned(world) diff --git a/README.md b/README.md index 54b659397f1b..a6a482942efc 100644 --- a/README.md +++ b/README.md @@ -51,6 +51,8 @@ Currently, the following games are supported: * Muse Dash * DOOM 1993 * Terraria +* Lingo +* Pokémon Emerald For setup and instructions check out our [tutorials page](https://archipelago.gg/tutorial/). Downloads can be found at [Releases](https://github.com/ArchipelagoMW/Archipelago/releases), including compiled diff --git a/UndertaleClient.py b/UndertaleClient.py index 62fbe128bdb9..e1538ce81d2e 100644 --- a/UndertaleClient.py +++ b/UndertaleClient.py @@ -27,14 +27,14 @@ def _cmd_resync(self): self.ctx.syncing = True def _cmd_patch(self): - """Patch the game.""" + """Patch the game. Only use this command if /auto_patch fails.""" if isinstance(self.ctx, UndertaleContext): os.makedirs(name=os.path.join(os.getcwd(), "Undertale"), exist_ok=True) self.ctx.patch_game() self.output("Patched.") def _cmd_savepath(self, directory: str): - """Redirect to proper save data folder. (Use before connecting!)""" + """Redirect to proper save data folder. This is necessary for Linux users to use before connecting.""" if isinstance(self.ctx, UndertaleContext): self.ctx.save_game_folder = directory self.output("Changed to the following directory: " + self.ctx.save_game_folder) @@ -67,7 +67,7 @@ def _cmd_auto_patch(self, steaminstall: typing.Optional[str] = None): self.output("Patching successful!") def _cmd_online(self): - """Makes you no longer able to see other Undertale players.""" + """Toggles seeing other Undertale players.""" if isinstance(self.ctx, UndertaleContext): self.ctx.update_online_mode(not ("Online" in self.ctx.tags)) if "Online" in self.ctx.tags: diff --git a/Utils.py b/Utils.py index 114c2e81035a..bb68602cceb3 100644 --- a/Utils.py +++ b/Utils.py @@ -174,12 +174,16 @@ def user_path(*path: str) -> str: if user_path.cached_path != local_path(): import filecmp if not os.path.exists(user_path("manifest.json")) or \ + not os.path.exists(local_path("manifest.json")) or \ not filecmp.cmp(local_path("manifest.json"), user_path("manifest.json"), shallow=True): import shutil - for dn in ("Players", "data/sprites"): + for dn in ("Players", "data/sprites", "data/lua"): shutil.copytree(local_path(dn), user_path(dn), dirs_exist_ok=True) - for fn in ("manifest.json",): - shutil.copy2(local_path(fn), user_path(fn)) + if not os.path.exists(local_path("manifest.json")): + warnings.warn(f"Upgrading {user_path()} from something that is not a proper install") + else: + shutil.copy2(local_path("manifest.json"), user_path("manifest.json")) + os.makedirs(user_path("worlds"), exist_ok=True) return os.path.join(user_path.cached_path, *path) diff --git a/WebHostLib/options.py b/WebHostLib/options.py index 1a2aab6d883d..3c0f47f32714 100644 --- a/WebHostLib/options.py +++ b/WebHostLib/options.py @@ -136,16 +136,20 @@ def get_html_doc(option_type: type(Options.Option)) -> str: option["defaultValue"] = "random" weighted_options["baseOptions"]["game"][game_name] = 0 - weighted_options["games"][game_name] = {} - weighted_options["games"][game_name]["gameSettings"] = game_options - weighted_options["games"][game_name]["gameItems"] = tuple(world.item_names) - weighted_options["games"][game_name]["gameItemGroups"] = [ - group for group in world.item_name_groups.keys() if group != "Everything" - ] - weighted_options["games"][game_name]["gameLocations"] = tuple(world.location_names) - weighted_options["games"][game_name]["gameLocationGroups"] = [ - group for group in world.location_name_groups.keys() if group != "Everywhere" - ] + weighted_options["games"][game_name] = { + "gameSettings": game_options, + "gameItems": tuple(world.item_names), + "gameItemGroups": [ + group for group in world.item_name_groups.keys() if group != "Everything" + ], + "gameItemDescriptions": world.item_descriptions, + "gameLocations": tuple(world.location_names), + "gameLocationGroups": [ + group for group in world.location_name_groups.keys() if group != "Everywhere" + ], + "gameLocationDescriptions": world.location_descriptions, + } with open(os.path.join(target_folder, 'weighted-options.json'), "w") as f: json.dump(weighted_options, f, indent=2, separators=(',', ': ')) + diff --git a/WebHostLib/static/assets/trackerCommon.js b/WebHostLib/static/assets/trackerCommon.js index 41c4020dace8..cb16a4de782d 100644 --- a/WebHostLib/static/assets/trackerCommon.js +++ b/WebHostLib/static/assets/trackerCommon.js @@ -55,7 +55,7 @@ window.addEventListener('load', () => { render: function (data, type, row) { if (type === "sort" || type === 'type') { if (data === "None") - return -1; + return Number.MAX_VALUE; return parseInt(data); } diff --git a/WebHostLib/static/assets/weighted-options.js b/WebHostLib/static/assets/weighted-options.js index 3811bd42bac9..34dfbae4bbee 100644 --- a/WebHostLib/static/assets/weighted-options.js +++ b/WebHostLib/static/assets/weighted-options.js @@ -1024,12 +1024,18 @@ class GameSettings { // Builds a div for a setting whose value is a list of locations. #buildLocationsDiv(setting) { - return this.#buildListDiv(setting, this.data.gameLocations, this.data.gameLocationGroups); + return this.#buildListDiv(setting, this.data.gameLocations, { + groups: this.data.gameLocationGroups, + descriptions: this.data.gameLocationDescriptions, + }); } // Builds a div for a setting whose value is a list of items. #buildItemsDiv(setting) { - return this.#buildListDiv(setting, this.data.gameItems, this.data.gameItemGroups); + return this.#buildListDiv(setting, this.data.gameItems, { + groups: this.data.gameItemGroups, + descriptions: this.data.gameItemDescriptions + }); } // Builds a div for a setting named `setting` with a list value that can @@ -1038,12 +1044,15 @@ class GameSettings { // The `groups` option can be a list of additional options for this list // (usually `item_name_groups` or `location_name_groups`) that are displayed // in a special section at the top of the list. - #buildListDiv(setting, items, groups = []) { + // + // The `descriptions` option can be a map from item names or group names to + // descriptions for the user's benefit. + #buildListDiv(setting, items, {groups = [], descriptions = {}} = {}) { const div = document.createElement('div'); div.classList.add('simple-list'); groups.forEach((group) => { - const row = this.#addListRow(setting, group); + const row = this.#addListRow(setting, group, descriptions[group]); div.appendChild(row); }); @@ -1052,7 +1061,7 @@ class GameSettings { } items.forEach((item) => { - const row = this.#addListRow(setting, item); + const row = this.#addListRow(setting, item, descriptions[item]); div.appendChild(row); }); @@ -1060,7 +1069,9 @@ class GameSettings { } // Builds and returns a row for a list of checkboxes. - #addListRow(setting, item) { + // + // If `help` is passed, it's displayed as a help tooltip for this list item. + #addListRow(setting, item, help = undefined) { const row = document.createElement('div'); row.classList.add('list-row'); @@ -1081,6 +1092,23 @@ class GameSettings { const name = document.createElement('span'); name.innerText = item; + + if (help) { + const helpSpan = document.createElement('span'); + helpSpan.classList.add('interactive'); + helpSpan.setAttribute('data-tooltip', help); + helpSpan.innerText = '(?)'; + name.innerText += ' '; + name.appendChild(helpSpan); + + // Put the first 7 tooltips below their rows. CSS tooltips in scrolling + // containers can't be visible outside those containers, so this helps + // ensure they won't be pushed out the top. + if (helpSpan.parentNode.childNodes.length < 7) { + helpSpan.classList.add('tooltip-bottom'); + } + } + label.appendChild(name); row.appendChild(label); diff --git a/data/client.kv b/data/client.kv index f0e36169002a..3b48d216ddb3 100644 --- a/data/client.kv +++ b/data/client.kv @@ -17,6 +17,12 @@ color: "FFFFFF" : tab_width: root.width / app.tab_count +: + text_size: self.width, None + size_hint_y: None + height: self.texture_size[1] + font_size: dp(20) + markup: True : canvas.before: Color: @@ -24,11 +30,6 @@ Rectangle: size: self.size pos: self.pos - text_size: self.width, None - size_hint_y: None - height: self.texture_size[1] - font_size: dp(20) - markup: True : messages: 1000 # amount of messages stored in client logs. cols: 1 @@ -44,6 +45,70 @@ height: self.minimum_height orientation: 'vertical' spacing: dp(3) +: + canvas.before: + Color: + rgba: (.0, 0.9, .1, .3) if self.selected else (0.2, 0.2, 0.2, 1) if self.striped else (0.18, 0.18, 0.18, 1) + Rectangle: + size: self.size + pos: self.pos + height: self.minimum_height + receiving_text: "Receiving Player" + item_text: "Item" + finding_text: "Finding Player" + location_text: "Location" + entrance_text: "Entrance" + found_text: "Found?" + TooltipLabel: + id: receiving + text: root.receiving_text + halign: 'center' + valign: 'center' + pos_hint: {"center_y": 0.5} + TooltipLabel: + id: item + text: root.item_text + halign: 'center' + valign: 'center' + pos_hint: {"center_y": 0.5} + TooltipLabel: + id: finding + text: root.finding_text + halign: 'center' + valign: 'center' + pos_hint: {"center_y": 0.5} + TooltipLabel: + id: location + text: root.location_text + halign: 'center' + valign: 'center' + pos_hint: {"center_y": 0.5} + TooltipLabel: + id: entrance + text: root.entrance_text + halign: 'center' + valign: 'center' + pos_hint: {"center_y": 0.5} + TooltipLabel: + id: found + text: root.found_text + halign: 'center' + valign: 'center' + pos_hint: {"center_y": 0.5} +: + cols: 1 + viewclass: 'HintLabel' + scroll_y: self.height + scroll_type: ["content", "bars"] + bar_width: dp(12) + effect_cls: "ScrollEffect" + SelectableRecycleBoxLayout: + default_size: None, dp(20) + default_size_hint: 1, None + size_hint_y: None + height: self.minimum_height + orientation: 'vertical' + spacing: dp(3) : text: "Server:" size_hint_x: None diff --git a/docs/CODEOWNERS b/docs/CODEOWNERS index e92bfa42b628..83f47235323a 100644 --- a/docs/CODEOWNERS +++ b/docs/CODEOWNERS @@ -61,6 +61,9 @@ # Kingdom Hearts 2 /worlds/kh2/ @JaredWeakStrike +# Lingo +/worlds/lingo/ @hatkirby + # Links Awakening DX /worlds/ladx/ @zig-for @@ -92,6 +95,9 @@ # Overcooked! 2 /worlds/overcooked2/ @toasterparty +# Pokemon Emerald +/worlds/pokemon_emerald/ @Zunawe + # Pokemon Red and Blue /worlds/pokemon_rb/ @Alchav diff --git a/docs/world api.md b/docs/world api.md index b128e2b146b4..9b7573dccd9d 100644 --- a/docs/world api.md +++ b/docs/world api.md @@ -121,6 +121,38 @@ Classification is one of `LocationProgressType.DEFAULT`, `PRIORITY` or `EXCLUDED The Fill algorithm will force progression items to be placed at priority locations, giving a higher chance of them being required, and will prevent progression and useful items from being placed at excluded locations. +#### Documenting Locations + +Worlds can optionally provide a `location_descriptions` map which contains +human-friendly descriptions of locations or location groups. These descriptions +will show up in location-selection options in the Weighted Options page. Extra +indentation and single newlines will be collapsed into spaces. + +```python +# Locations.py + +location_descriptions = { + "Red Potion #6": "In a secret destructible block under the second stairway", + "L2 Spaceship": """ + The group of all items in the spaceship in Level 2. + + This doesn't include the item on the spaceship door, since it can be + accessed without the Spaeship Key. + """ +} +``` + +```python +# __init__.py + +from worlds.AutoWorld import World +from .Locations import location_descriptions + + +class MyGameWorld(World): + location_descriptions = location_descriptions +``` + ### Items Items are all things that can "drop" for your game. This may be RPG items like @@ -147,6 +179,37 @@ Other classifications include * `progression_skip_balancing`: the combination of `progression` and `skip_balancing`, i.e., a progression item that will not be moved around by progression balancing; used, e.g., for currency or tokens +#### Documenting Items + +Worlds can optionally provide an `item_descriptions` map which contains +human-friendly descriptions of items or item groups. These descriptions will +show up in item-selection options in the Weighted Options page. Extra +indentation and single newlines will be collapsed into spaces. + +```python +# Items.py + +item_descriptions = { + "Red Potion": "A standard health potion", + "Spaceship Key": """ + The key to the spaceship in Level 2. + + This is necessary to get to the Star Realm. + """ +} +``` + +```python +# __init__.py + +from worlds.AutoWorld import World +from .Items import item_descriptions + + +class MyGameWorld(World): + item_descriptions = item_descriptions +``` + ### Events Events will mark some progress. You define an event location, an diff --git a/inno_setup.iss b/inno_setup.iss index b6f40f770110..b4779b1067b7 100644 --- a/inno_setup.iss +++ b/inno_setup.iss @@ -153,6 +153,11 @@ Root: HKCR; Subkey: "{#MyAppName}bn3bpatch"; ValueData: "Arc Root: HKCR; Subkey: "{#MyAppName}bn3bpatch\DefaultIcon"; ValueData: "{app}\ArchipelagoMMBN3Client.exe,0"; ValueType: string; ValueName: ""; Root: HKCR; Subkey: "{#MyAppName}bn3bpatch\shell\open\command"; ValueData: """{app}\ArchipelagoMMBN3Client.exe"" ""%1"""; ValueType: string; ValueName: ""; +Root: HKCR; Subkey: ".apemerald"; ValueData: "{#MyAppName}pkmnepatch"; Flags: uninsdeletevalue; ValueType: string; ValueName: ""; +Root: HKCR; Subkey: "{#MyAppName}pkmnepatch"; ValueData: "Archipelago Pokemon Emerald Patch"; Flags: uninsdeletekey; ValueType: string; ValueName: ""; +Root: HKCR; Subkey: "{#MyAppName}pkmnepatch\DefaultIcon"; ValueData: "{app}\ArchipelagoBizHawkClient.exe,0"; ValueType: string; ValueName: ""; +Root: HKCR; Subkey: "{#MyAppName}pkmnepatch\shell\open\command"; ValueData: """{app}\ArchipelagoBizHawkClient.exe"" ""%1"""; ValueType: string; ValueName: ""; + Root: HKCR; Subkey: ".apladx"; ValueData: "{#MyAppName}ladxpatch"; Flags: uninsdeletevalue; ValueType: string; ValueName: ""; Root: HKCR; Subkey: "{#MyAppName}ladxpatch"; ValueData: "Archipelago Links Awakening DX Patch"; Flags: uninsdeletekey; ValueType: string; ValueName: ""; Root: HKCR; Subkey: "{#MyAppName}ladxpatch\DefaultIcon"; ValueData: "{app}\ArchipelagoLinksAwakeningClient.exe,0"; ValueType: string; ValueName: ""; diff --git a/kvui.py b/kvui.py index 71bf80c86d9b..22e179d5be94 100644 --- a/kvui.py +++ b/kvui.py @@ -5,12 +5,13 @@ if sys.platform == "win32": import ctypes + # kivy 2.2.0 introduced DPI awareness on Windows, but it makes the UI enter an infinitely recursive re-layout # by setting the application to not DPI Aware, Windows handles scaling the entire window on its own, ignoring kivy's try: ctypes.windll.shcore.SetProcessDpiAwareness(0) except FileNotFoundError: # shcore may not be found on <= Windows 7 - pass # TODO: remove silent except when Python 3.8 is phased out. + pass # TODO: remove silent except when Python 3.8 is phased out. os.environ["KIVY_NO_CONSOLELOG"] = "1" os.environ["KIVY_NO_FILELOG"] = "1" @@ -18,14 +19,15 @@ os.environ["KIVY_LOG_ENABLE"] = "0" import Utils + if Utils.is_frozen(): os.environ["KIVY_DATA_DIR"] = Utils.local_path("data") from kivy.config import Config Config.set("input", "mouse", "mouse,disable_multitouch") -Config.set('kivy', 'exit_on_escape', '0') -Config.set('graphics', 'multisamples', '0') # multisamples crash old intel drivers +Config.set("kivy", "exit_on_escape", "0") +Config.set("graphics", "multisamples", "0") # multisamples crash old intel drivers from kivy.app import App from kivy.core.window import Window @@ -58,7 +60,6 @@ fade_in_animation = Animation(opacity=0, duration=0) + Animation(opacity=1, duration=0.25) - from NetUtils import JSONtoTextParser, JSONMessagePart, SlotType from Utils import async_start @@ -77,8 +78,8 @@ class HoverBehavior(object): border_point = ObjectProperty(None) def __init__(self, **kwargs): - self.register_event_type('on_enter') - self.register_event_type('on_leave') + self.register_event_type("on_enter") + self.register_event_type("on_leave") Window.bind(mouse_pos=self.on_mouse_pos) Window.bind(on_cursor_leave=self.on_cursor_leave) super(HoverBehavior, self).__init__(**kwargs) @@ -106,7 +107,7 @@ def on_cursor_leave(self, *args): self.dispatch("on_leave") -Factory.register('HoverBehavior', HoverBehavior) +Factory.register("HoverBehavior", HoverBehavior) class ToolTip(Label): @@ -121,6 +122,60 @@ class HovererableLabel(HoverBehavior, Label): pass +class TooltipLabel(HovererableLabel): + tooltip = None + + def create_tooltip(self, text, x, y): + text = text.replace("
", "\n").replace("&", "&").replace("&bl;", "[").replace("&br;", "]") + if self.tooltip: + # update + self.tooltip.children[0].text = text + else: + self.tooltip = FloatLayout() + tooltip_label = ToolTip(text=text) + self.tooltip.add_widget(tooltip_label) + fade_in_animation.start(self.tooltip) + App.get_running_app().root.add_widget(self.tooltip) + + # handle left-side boundary to not render off-screen + x = max(x, 3 + self.tooltip.children[0].texture_size[0] / 2) + + # position float layout + self.tooltip.x = x - self.tooltip.width / 2 + self.tooltip.y = y - self.tooltip.height / 2 + 48 + + def remove_tooltip(self): + if self.tooltip: + App.get_running_app().root.remove_widget(self.tooltip) + self.tooltip = None + + def on_mouse_pos(self, window, pos): + if not self.get_root_window(): + return # Abort if not displayed + super().on_mouse_pos(window, pos) + if self.refs and self.hovered: + + tx, ty = self.to_widget(*pos, relative=True) + # Why TF is Y flipped *within* the texture? + ty = self.texture_size[1] - ty + hit = False + for uid, zones in self.refs.items(): + for zone in zones: + x, y, w, h = zone + if x <= tx <= w and y <= ty <= h: + self.create_tooltip(uid.split("|", 1)[1], *pos) + hit = True + break + if not hit: + self.remove_tooltip() + + def on_enter(self): + pass + + def on_leave(self): + self.remove_tooltip() + + class ServerLabel(HovererableLabel): def __init__(self, *args, **kwargs): super(HovererableLabel, self).__init__(*args, **kwargs) @@ -189,11 +244,10 @@ class SelectableRecycleBoxLayout(FocusBehavior, LayoutSelectionBehavior, """ Adds selection and focus behaviour to the view. """ -class SelectableLabel(RecycleDataViewBehavior, HovererableLabel): +class SelectableLabel(RecycleDataViewBehavior, TooltipLabel): """ Add selection support to the Label """ index = None selected = BooleanProperty(False) - tooltip = None def refresh_view_attrs(self, rv, index, data): """ Catch and handle the view changes """ @@ -201,56 +255,6 @@ def refresh_view_attrs(self, rv, index, data): return super(SelectableLabel, self).refresh_view_attrs( rv, index, data) - def create_tooltip(self, text, x, y): - text = text.replace("
", "\n").replace('&', '&').replace('&bl;', '[').replace('&br;', ']') - if self.tooltip: - # update - self.tooltip.children[0].text = text - else: - self.tooltip = FloatLayout() - tooltip_label = ToolTip(text=text) - self.tooltip.add_widget(tooltip_label) - fade_in_animation.start(self.tooltip) - App.get_running_app().root.add_widget(self.tooltip) - - # handle left-side boundary to not render off-screen - x = max(x, 3+self.tooltip.children[0].texture_size[0] / 2) - - # position float layout - self.tooltip.x = x - self.tooltip.width / 2 - self.tooltip.y = y - self.tooltip.height / 2 + 48 - - def remove_tooltip(self): - if self.tooltip: - App.get_running_app().root.remove_widget(self.tooltip) - self.tooltip = None - - def on_mouse_pos(self, window, pos): - if not self.get_root_window(): - return # Abort if not displayed - super().on_mouse_pos(window, pos) - if self.refs and self.hovered: - - tx, ty = self.to_widget(*pos, relative=True) - # Why TF is Y flipped *within* the texture? - ty = self.texture_size[1] - ty - hit = False - for uid, zones in self.refs.items(): - for zone in zones: - x, y, w, h = zone - if x <= tx <= w and y <= ty <= h: - self.create_tooltip(uid.split("|", 1)[1], *pos) - hit = True - break - if not hit: - self.remove_tooltip() - - def on_enter(self): - pass - - def on_leave(self): - self.remove_tooltip() - def on_touch_down(self, touch): """ Add selection on touch down """ if super(SelectableLabel, self).on_touch_down(touch): @@ -274,7 +278,7 @@ def on_touch_down(self, touch): elif not cmdinput.text and text.startswith("Missing: "): cmdinput.text = text.replace("Missing: ", "!hint_location ") - Clipboard.copy(text.replace('&', '&').replace('&bl;', '[').replace('&br;', ']')) + Clipboard.copy(text.replace("&", "&").replace("&bl;", "[").replace("&br;", "]")) return self.parent.select_with_touch(self.index, touch) def apply_selection(self, rv, index, is_selected): @@ -282,9 +286,68 @@ def apply_selection(self, rv, index, is_selected): self.selected = is_selected +class HintLabel(RecycleDataViewBehavior, BoxLayout): + selected = BooleanProperty(False) + striped = BooleanProperty(False) + index = None + no_select = [] + + def __init__(self): + super(HintLabel, self).__init__() + self.receiving_text = "" + self.item_text = "" + self.finding_text = "" + self.location_text = "" + self.entrance_text = "" + self.found_text = "" + for child in self.children: + child.bind(texture_size=self.set_height) + + def set_height(self, instance, value): + self.height = max([child.texture_size[1] for child in self.children]) + + def refresh_view_attrs(self, rv, index, data): + self.index = index + if "select" in data and not data["select"] and index not in self.no_select: + self.no_select.append(index) + self.striped = data["striped"] + self.receiving_text = data["receiving"]["text"] + self.item_text = data["item"]["text"] + self.finding_text = data["finding"]["text"] + self.location_text = data["location"]["text"] + self.entrance_text = data["entrance"]["text"] + self.found_text = data["found"]["text"] + self.height = self.minimum_height + return super(HintLabel, self).refresh_view_attrs(rv, index, data) + + def on_touch_down(self, touch): + """ Add selection on touch down """ + if super(HintLabel, self).on_touch_down(touch): + return True + if self.index not in self.no_select: + if self.collide_point(*touch.pos): + if self.selected: + self.parent.clear_selection() + else: + text = "".join([self.receiving_text, "\'s ", self.item_text, " is at ", self.location_text, " in ", + self.finding_text, "\'s World", (" at " + self.entrance_text) + if self.entrance_text != "Vanilla" + else "", ". (", self.found_text.lower(), ")"]) + temp = MarkupLabel(text).markup + text = "".join( + part for part in temp if not part.startswith(("[color", "[/color]", "[ref=", "[/ref]"))) + Clipboard.copy(escape_markup(text).replace("&", "&").replace("&bl;", "[").replace("&br;", "]")) + return self.parent.select_with_touch(self.index, touch) + + def apply_selection(self, rv, index, is_selected): + """ Respond to the selection of items in the view. """ + if self.index not in self.no_select: + self.selected = is_selected + + class ConnectBarTextInput(TextInput): def insert_text(self, substring, from_undo=False): - s = substring.replace('\n', '').replace('\r', '') + s = substring.replace("\n", "").replace("\r", "") return super(ConnectBarTextInput, self).insert_text(s, from_undo=from_undo) @@ -302,7 +365,7 @@ def __init__(self, **kwargs): def __init__(self, title, text, error=False, **kwargs): label = MessageBox.MessageBoxLabel(text=text) separator_color = [217 / 255, 129 / 255, 122 / 255, 1.] if error else [47 / 255., 167 / 255., 212 / 255, 1.] - super().__init__(title=title, content=label, size_hint=(None, None), width=max(100, int(label.width)+40), + super().__init__(title=title, content=label, size_hint=(None, None), width=max(100, int(label.width) + 40), separator_color=separator_color, **kwargs) self.height += max(0, label.height - 18) @@ -358,11 +421,14 @@ def build(self) -> Layout: # top part server_label = ServerLabel() self.connect_layout.add_widget(server_label) - self.server_connect_bar = ConnectBarTextInput(text=self.ctx.suggested_address or "archipelago.gg:", size_hint_y=None, + self.server_connect_bar = ConnectBarTextInput(text=self.ctx.suggested_address or "archipelago.gg:", + size_hint_y=None, height=dp(30), multiline=False, write_tab=False) + def connect_bar_validate(sender): if not self.ctx.server: self.connect_button_action(sender) + self.server_connect_bar.bind(on_text_validate=connect_bar_validate) self.connect_layout.add_widget(self.server_connect_bar) self.server_connect_button = Button(text="Connect", size=(dp(100), dp(30)), size_hint_y=None, size_hint_x=None) @@ -383,20 +449,22 @@ def connect_bar_validate(sender): bridge_logger = logging.getLogger(logger_name) panel = TabbedPanelItem(text=display_name) self.log_panels[display_name] = panel.content = UILog(bridge_logger) - self.tabs.add_widget(panel) + if len(self.logging_pairs) > 1: + # show Archipelago tab if other logging is present + self.tabs.add_widget(panel) + + hint_panel = TabbedPanelItem(text="Hints") + self.log_panels["Hints"] = hint_panel.content = HintLog(self.json_to_kivy_parser) + self.tabs.add_widget(hint_panel) + + if len(self.logging_pairs) == 1: + self.tabs.default_tab_text = "Archipelago" self.main_area_container = GridLayout(size_hint_y=1, rows=1) self.main_area_container.add_widget(self.tabs) self.grid.add_widget(self.main_area_container) - if len(self.logging_pairs) == 1: - # Hide Tab selection if only one tab - self.tabs.clear_tabs() - self.tabs.do_default_tab = False - self.tabs.current_tab.height = 0 - self.tabs.tab_height = 0 - # bottom part bottom_layout = BoxLayout(orientation="horizontal", size_hint_y=None, height=dp(30)) info_button = Button(size=(dp(100), dp(30)), text="Command:", size_hint_x=None) @@ -422,7 +490,7 @@ def connect_bar_validate(sender): return self.container def update_texts(self, dt): - if hasattr(self.tabs.content.children[0], 'fix_heights'): + if hasattr(self.tabs.content.children[0], "fix_heights"): self.tabs.content.children[0].fix_heights() # TODO: remove this when Kivy fixes this upstream if self.ctx.server: self.title = self.base_title + " " + Utils.__version__ + \ @@ -499,6 +567,10 @@ def set_new_energy_link_value(self): if hasattr(self, "energy_link_label"): self.energy_link_label.text = f"EL: {Utils.format_SI_prefix(self.ctx.current_energy_link_value)}J" + def update_hints(self): + hints = self.ctx.stored_data[f"_read_hints_{self.ctx.team}_{self.ctx.slot}"] + self.log_panels["Hints"].refresh_hints(hints) + # default F1 keybind, opens a settings menu, that seems to break the layout engine once closed def open_settings(self, *largs): pass @@ -513,12 +585,12 @@ def __init__(self, on_log): def format_compact(record: logging.LogRecord) -> str: if isinstance(record.msg, Exception): return str(record.msg) - return (f'{record.exc_info[1]}\n' if record.exc_info else '') + str(record.msg).split("\n")[0] + return (f"{record.exc_info[1]}\n" if record.exc_info else "") + str(record.msg).split("\n")[0] def handle(self, record: logging.LogRecord) -> None: - if getattr(record, 'skip_gui', False): + if getattr(record, "skip_gui", False): pass # skip output - elif getattr(record, 'compact_gui', False): + elif getattr(record, "compact_gui", False): self.on_log(self.format_compact(record)) else: self.on_log(self.format(record)) @@ -552,6 +624,44 @@ def fix_heights(self): element.height = element.texture_size[1] +class HintLog(RecycleView): + header = { + "receiving": {"text": "[u]Receiving Player[/u]"}, + "item": {"text": "[u]Item[/u]"}, + "finding": {"text": "[u]Finding Player[/u]"}, + "location": {"text": "[u]Location[/u]"}, + "entrance": {"text": "[u]Entrance[/u]"}, + "found": {"text": "[u]Status[/u]"}, + "striped": True, + "select": False, + } + + def __init__(self, parser): + super(HintLog, self).__init__() + self.data = [self.header] + self.parser = parser + + def refresh_hints(self, hints): + self.data = [self.header] + striped = False + for hint in hints: + self.data.append({ + "striped": striped, + "receiving": {"text": self.parser.handle_node({"type": "player_id", "text": hint["receiving_player"]})}, + "item": {"text": self.parser.handle_node( + {"type": "item_id", "text": hint["item"], "flags": hint["item_flags"]})}, + "finding": {"text": self.parser.handle_node({"type": "player_id", "text": hint["finding_player"]})}, + "location": {"text": self.parser.handle_node({"type": "location_id", "text": hint["location"]})}, + "entrance": {"text": self.parser.handle_node({"type": "color" if hint["entrance"] else "text", + "color": "blue", "text": hint["entrance"] + if hint["entrance"] else "Vanilla"})}, + "found": { + "text": self.parser.handle_node({"type": "color", "color": "green" if hint["found"] else "red", + "text": "Found" if hint["found"] else "Not Found"})}, + }) + striped = not striped + + class E(ExceptionHandler): logger = logging.getLogger("Client") @@ -599,7 +709,7 @@ def _handle_player_id(self, node: JSONMessagePart): f"Type: {SlotType(slot_info.type).name}" if slot_info.group_members: text += f"
Members:
" + \ - '
'.join(self.ctx.player_names[player] for player in slot_info.group_members) + "
".join(self.ctx.player_names[player] for player in slot_info.group_members) node.setdefault("refs", []).append(text) return super(KivyJSONtoTextParser, self)._handle_player_id(node) @@ -627,4 +737,3 @@ def _handle_text(self, node: JSONMessagePart): if os.path.exists(user_file): logging.info("Loading user.kv into builder.") Builder.load_file(user_file) - diff --git a/requirements.txt b/requirements.txt index bfc637a80a2b..7f9cddc2879c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -5,8 +5,8 @@ jellyfish>=1.0.1 jinja2>=3.1.2 schema>=0.7.5 kivy>=2.2.0 -bsdiff4>=1.2.3 +bsdiff4>=1.2.4 platformdirs>=3.9.1 certifi>=2023.7.22 -cython>=0.29.35 +cython>=3.0.5 cymem>=2.0.8 diff --git a/setup.py b/setup.py index cea60dab8320..73b3477b623c 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ # This is a bit jank. We need cx-Freeze to be able to run anything from this script, so install it try: - requirement = 'cx-Freeze>=6.15.2' + requirement = 'cx-Freeze>=6.15.10' import pkg_resources try: pkg_resources.require(requirement) diff --git a/test/bases.py b/test/bases.py index 2054c2d18725..3d704579a7f3 100644 --- a/test/bases.py +++ b/test/bases.py @@ -333,3 +333,24 @@ def fulfills_accessibility() -> bool: placed_items = [loc.item for loc in self.multiworld.get_locations() if loc.item and loc.item.code] self.assertLessEqual(len(self.multiworld.itempool), len(placed_items), "Unplaced Items remaining in itempool") + + def test_descriptions_have_valid_names(self): + """Ensure all item and location descriptions match a name of the corresponding type""" + if not (self.run_default_tests and self.constructed): + return + with self.subTest("Game", game=self.game): + with self.subTest("Items"): + world = self.multiworld.worlds[1] + valid_names = world.item_names.union(world.item_name_groups) + for name in world.item_descriptions.keys(): + with self.subTest("Name should be valid", name=name): + self.assertIn(name, valid_names, + """All item descriptions must match defined item names""") + + with self.subTest("Locations"): + world = self.multiworld.worlds[1] + valid_names = world.location_names.union(world.location_name_groups) + for name in world.location_descriptions.keys(): + with self.subTest("Name should be valid", name=name): + self.assertIn(name, valid_names, + """All item descriptions must match defined item names""") diff --git a/test/general/test_fill.py b/test/general/test_fill.py index 1e469ef04d0d..e454b3e61d7a 100644 --- a/test/general/test_fill.py +++ b/test/general/test_fill.py @@ -442,6 +442,47 @@ def test_swap_to_earlier_location_with_item_rule(self): self.assertTrue(sphere1_loc.item, "Did not swap required item into Sphere 1") self.assertEqual(sphere1_loc.item, allowed_item, "Wrong item in Sphere 1") + def test_swap_to_earlier_location_with_item_rule2(self): + """Test that swap works before all items are placed""" + multi_world = generate_multi_world(1) + player1 = generate_player_data(multi_world, 1, 5, 5) + locations = player1.locations[:] # copy required + items = player1.prog_items[:] # copy required + # Two items provide access to sphere 2. + # One of them is forbidden in sphere 1, the other is first placed in sphere 4 because of placement order, + # requiring a swap. + # There are spheres in between, so for the swap to work, it'll have to assume all other items are collected. + one_to_two1 = items[4].name + one_to_two2 = items[3].name + three_to_four = items[2].name + two_to_three1 = items[1].name + two_to_three2 = items[0].name + # Sphere 4 + set_rule(locations[0], lambda state: ((state.has(one_to_two1, player1.id) or state.has(one_to_two2, player1.id)) + and state.has(two_to_three1, player1.id) + and state.has(two_to_three2, player1.id) + and state.has(three_to_four, player1.id))) + # Sphere 3 + set_rule(locations[1], lambda state: ((state.has(one_to_two1, player1.id) or state.has(one_to_two2, player1.id)) + and state.has(two_to_three1, player1.id) + and state.has(two_to_three2, player1.id))) + # Sphere 2 + set_rule(locations[2], lambda state: state.has(one_to_two1, player1.id) or state.has(one_to_two2, player1.id)) + # Sphere 1 + sphere1_loc1 = locations[3] + sphere1_loc2 = locations[4] + # forbid one_to_two2 in sphere 1 to make the swap happen as described above + add_item_rule(sphere1_loc1, lambda item_to_place: item_to_place.name != one_to_two2) + add_item_rule(sphere1_loc2, lambda item_to_place: item_to_place.name != one_to_two2) + + # Now fill should place one_to_two1 in sphere1_loc1 or sphere1_loc2 via swap, + # which it will attempt before two_to_three and three_to_four are placed, testing the behavior. + fill_restrictive(multi_world, multi_world.state, player1.locations, player1.prog_items) + # assert swap happened + self.assertTrue(sphere1_loc1.item and sphere1_loc2.item, "Did not swap required item into Sphere 1") + self.assertTrue(sphere1_loc1.item.name == one_to_two1 or + sphere1_loc2.item.name == one_to_two1, "Wrong item in Sphere 1") + def test_double_sweep(self): """Test that sweep doesn't duplicate Event items when sweeping""" # test for PR1114 diff --git a/test/general/test_implemented.py b/test/general/test_implemented.py index b60bcee46784..624be710185d 100644 --- a/test/general/test_implemented.py +++ b/test/general/test_implemented.py @@ -40,8 +40,8 @@ def test_slot_data(self): # has an await for generate_output which isn't being called if game_name in {"Ocarina of Time", "Zillion"}: continue - with self.subTest(game_name): - multiworld = setup_solo_multiworld(world_type) + multiworld = setup_solo_multiworld(world_type) + with self.subTest(game=game_name, seed=multiworld.seed): distribute_items_restrictive(multiworld) call_all(multiworld, "post_fill") for key, data in multiworld.worlds[1].fill_slot_data().items(): diff --git a/worlds/AutoWorld.py b/worlds/AutoWorld.py index d05797cf9e12..67403472fc5b 100644 --- a/worlds/AutoWorld.py +++ b/worlds/AutoWorld.py @@ -3,6 +3,7 @@ import hashlib import logging import pathlib +import re import sys import time from dataclasses import make_dataclass @@ -51,11 +52,17 @@ def __new__(mcs, name: str, bases: Tuple[type, ...], dct: Dict[str, Any]) -> Aut dct["item_name_groups"] = {group_name: frozenset(group_set) for group_name, group_set in dct.get("item_name_groups", {}).items()} dct["item_name_groups"]["Everything"] = dct["item_names"] + dct["item_descriptions"] = {name: _normalize_description(description) for name, description + in dct.get("item_descriptions", {}).items()} + dct["item_descriptions"]["Everything"] = "All items in the entire game." dct["location_names"] = frozenset(dct["location_name_to_id"]) dct["location_name_groups"] = {group_name: frozenset(group_set) for group_name, group_set in dct.get("location_name_groups", {}).items()} dct["location_name_groups"]["Everywhere"] = dct["location_names"] dct["all_item_and_group_names"] = frozenset(dct["item_names"] | set(dct.get("item_name_groups", {}))) + dct["location_descriptions"] = {name: _normalize_description(description) for name, description + in dct.get("location_descriptions", {}).items()} + dct["location_descriptions"]["Everywhere"] = "All locations in the entire game." # move away from get_required_client_version function if "game" in dct: @@ -113,10 +120,10 @@ def _timed_call(method: Callable[..., Any], *args: Any, taken = time.perf_counter() - start if taken > 1.0: if player and multiworld: - perf_logger.info(f"Took {taken} seconds in {method.__qualname__} for player {player}, " + perf_logger.info(f"Took {taken:.4f} seconds in {method.__qualname__} for player {player}, " f"named {multiworld.player_name[player]}.") else: - perf_logger.info(f"Took {taken} seconds in {method.__qualname__}.") + perf_logger.info(f"Took {taken:.4f} seconds in {method.__qualname__}.") return ret @@ -205,9 +212,23 @@ class World(metaclass=AutoWorldRegister): item_name_groups: ClassVar[Dict[str, Set[str]]] = {} """maps item group names to sets of items. Example: {"Weapons": {"Sword", "Bow"}}""" + item_descriptions: ClassVar[Dict[str, str]] = {} + """An optional map from item names (or item group names) to brief descriptions for users. + + Individual newlines and indentation will be collapsed into spaces before these descriptions are + displayed. This may cover only a subset of items. + """ + location_name_groups: ClassVar[Dict[str, Set[str]]] = {} """maps location group names to sets of locations. Example: {"Sewer": {"Sewer Key Drop 1", "Sewer Key Drop 2"}}""" + location_descriptions: ClassVar[Dict[str, str]] = {} + """An optional map from location names (or location group names) to brief descriptions for users. + + Individual newlines and indentation will be collapsed into spaces before these descriptions are + displayed. This may cover only a subset of locations. + """ + data_version: ClassVar[int] = 0 """ Increment this every time something in your world's names/id mappings changes. @@ -462,3 +483,17 @@ def data_package_checksum(data: "GamesPackage") -> str: assert sorted(data) == list(data), "Data not ordered" from NetUtils import encode return hashlib.sha1(encode(data).encode()).hexdigest() + + +def _normalize_description(description): + """Normalizes a description in item_descriptions or location_descriptions. + + This allows authors to write descritions with nice indentation and line lengths in their world + definitions without having it affect the rendered format. + """ + # First, collapse the whitespace around newlines and the ends of the description. + description = re.sub(r' *\n *', '\n', description.strip()) + # Next, condense individual newlines into spaces. + description = re.sub(r'(? None: zip_file = file if file else self.path if not zip_file: raise FileNotFoundError(f"Cannot write {self.__class__.__name__} due to no path provided.") - with zipfile.ZipFile(zip_file, "w", self.compression_method, True, self.compression_level) \ - as zf: - if file: - self.path = zf.filename - self.write_contents(zf) + with semaphore: # TODO: remove semaphore once generate_output has a thread limit + with zipfile.ZipFile( + zip_file, "w", self.compression_method, True, self.compression_level) as zf: + if file: + self.path = zf.filename + self.write_contents(zf) def write_contents(self, opened_zipfile: zipfile.ZipFile) -> None: manifest = self.get_manifest() diff --git a/worlds/__init__.py b/worlds/__init__.py index c6208fa9a159..40e0b20f1974 100644 --- a/worlds/__init__.py +++ b/worlds/__init__.py @@ -5,19 +5,20 @@ import warnings import zipimport -folder = os.path.dirname(__file__) +from Utils import user_path, local_path -__all__ = { +local_folder = os.path.dirname(__file__) +user_folder = user_path("worlds") if user_path() != local_path() else None + +__all__ = ( "lookup_any_item_id_to_name", "lookup_any_location_id_to_name", "network_data_package", "AutoWorldRegister", "world_sources", - "folder", -} - -if typing.TYPE_CHECKING: - from .AutoWorld import World + "local_folder", + "user_folder", +) class GamesData(typing.TypedDict): @@ -41,13 +42,13 @@ class WorldSource(typing.NamedTuple): is_zip: bool = False relative: bool = True # relative to regular world import folder - def __repr__(self): + def __repr__(self) -> str: return f"{self.__class__.__name__}({self.path}, is_zip={self.is_zip}, relative={self.relative})" @property def resolved_path(self) -> str: if self.relative: - return os.path.join(folder, self.path) + return os.path.join(local_folder, self.path) return self.path def load(self) -> bool: @@ -56,6 +57,7 @@ def load(self) -> bool: importer = zipimport.zipimporter(self.resolved_path) if hasattr(importer, "find_spec"): # new in Python 3.10 spec = importer.find_spec(os.path.basename(self.path).rsplit(".", 1)[0]) + assert spec, f"{self.path} is not a loadable module" mod = importlib.util.module_from_spec(spec) else: # TODO: remove with 3.8 support mod = importer.load_module(os.path.basename(self.path).rsplit(".", 1)[0]) @@ -72,7 +74,7 @@ def load(self) -> bool: importlib.import_module(f".{self.path}", "worlds") return True - except Exception as e: + except Exception: # A single world failing can still mean enough is working for the user, log and carry on import traceback import io @@ -87,14 +89,16 @@ def load(self) -> bool: # find potential world containers, currently folders and zip-importable .apworld's world_sources: typing.List[WorldSource] = [] -file: os.DirEntry # for me (Berserker) at least, PyCharm doesn't seem to infer the type correctly -for file in os.scandir(folder): - # prevent loading of __pycache__ and allow _* for non-world folders, disable files/folders starting with "." - if not file.name.startswith(("_", ".")): - if file.is_dir(): - world_sources.append(WorldSource(file.name)) - elif file.is_file() and file.name.endswith(".apworld"): - world_sources.append(WorldSource(file.name, is_zip=True)) +for folder in (folder for folder in (user_folder, local_folder) if folder): + relative = folder == local_folder + for entry in os.scandir(folder): + # prevent loading of __pycache__ and allow _* for non-world folders, disable files/folders starting with "." + if not entry.name.startswith(("_", ".")): + file_name = entry.name if relative else os.path.join(folder, entry.name) + if entry.is_dir(): + world_sources.append(WorldSource(file_name, relative=relative)) + elif entry.is_file() and entry.name.endswith(".apworld"): + world_sources.append(WorldSource(file_name, is_zip=True, relative=relative)) # import all submodules to trigger AutoWorldRegister world_sources.sort() @@ -105,7 +109,7 @@ def load(self) -> bool: lookup_any_location_id_to_name = {} games: typing.Dict[str, GamesPackage] = {} -from .AutoWorld import AutoWorldRegister +from .AutoWorld import AutoWorldRegister # noqa: E402 # Build the data package for each game. for world_name, world in AutoWorldRegister.world_types.items(): diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index e1ae0cc6e6c3..b80cec578a97 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -783,6 +783,7 @@ def get_nonnative_item_sprite(code: int) -> int: def patch_rom(world: MultiWorld, rom: LocalRom, player: int, enemized: bool): local_random = world.per_slot_randoms[player] + local_world = world.worlds[player] # patch items @@ -1190,12 +1191,8 @@ def chunk(l, n): ]) # set Fountain bottle exchange items - if world.difficulty[player] in ['hard', 'expert']: - rom.write_byte(0x348FF, [0x16, 0x2B, 0x2C, 0x2D, 0x3C, 0x48][local_random.randint(0, 5)]) - rom.write_byte(0x3493B, [0x16, 0x2B, 0x2C, 0x2D, 0x3C, 0x48][local_random.randint(0, 5)]) - else: - rom.write_byte(0x348FF, [0x16, 0x2B, 0x2C, 0x2D, 0x3C, 0x3D, 0x48][local_random.randint(0, 6)]) - rom.write_byte(0x3493B, [0x16, 0x2B, 0x2C, 0x2D, 0x3C, 0x3D, 0x48][local_random.randint(0, 6)]) + rom.write_byte(0x348FF, item_table[local_world.waterfall_fairy_bottle_fill].item_code) + rom.write_byte(0x3493B, item_table[local_world.pyramid_fairy_bottle_fill].item_code) # enable Fat Fairy Chests rom.write_bytes(0x1FC16, [0xB1, 0xC6, 0xF9, 0xC9, 0xC6, 0xF9]) diff --git a/worlds/alttp/__init__.py b/worlds/alttp/__init__.py index d89e65c59d89..2cae70e0ea49 100644 --- a/worlds/alttp/__init__.py +++ b/worlds/alttp/__init__.py @@ -249,6 +249,8 @@ def enemizer_path(self) -> str: rom_name_available_event: threading.Event has_progressive_bows: bool dungeons: typing.Dict[str, Dungeon] + waterfall_fairy_bottle_fill: str + pyramid_fairy_bottle_fill: str def __init__(self, *args, **kwargs): self.dungeon_local_item_names = set() @@ -256,6 +258,8 @@ def __init__(self, *args, **kwargs): self.rom_name_available_event = threading.Event() self.has_progressive_bows = False self.dungeons = {} + self.waterfall_fairy_bottle_fill = "Bottle" + self.pyramid_fairy_bottle_fill = "Bottle" super(ALTTPWorld, self).__init__(*args, **kwargs) @classmethod @@ -273,52 +277,62 @@ def stage_assert_generate(cls, multiworld: MultiWorld): def generate_early(self): player = self.player - world = self.multiworld + multiworld = self.multiworld - if world.mode[player] == 'standard' \ - and world.smallkey_shuffle[player] \ - and world.smallkey_shuffle[player] != smallkey_shuffle.option_universal \ - and world.smallkey_shuffle[player] != smallkey_shuffle.option_own_dungeons \ - and world.smallkey_shuffle[player] != smallkey_shuffle.option_start_with: + # fairy bottle fills + bottle_options = [ + "Bottle (Red Potion)", "Bottle (Green Potion)", "Bottle (Blue Potion)", + "Bottle (Bee)", "Bottle (Good Bee)" + ] + if multiworld.difficulty[player] not in ["hard", "expert"]: + bottle_options.append("Bottle (Fairy)") + self.waterfall_fairy_bottle_fill = self.random.choice(bottle_options) + self.pyramid_fairy_bottle_fill = self.random.choice(bottle_options) + + if multiworld.mode[player] == 'standard' \ + and multiworld.smallkey_shuffle[player] \ + and multiworld.smallkey_shuffle[player] != smallkey_shuffle.option_universal \ + and multiworld.smallkey_shuffle[player] != smallkey_shuffle.option_own_dungeons \ + and multiworld.smallkey_shuffle[player] != smallkey_shuffle.option_start_with: self.multiworld.local_early_items[self.player]["Small Key (Hyrule Castle)"] = 1 # system for sharing ER layouts - self.er_seed = str(world.random.randint(0, 2 ** 64)) + self.er_seed = str(multiworld.random.randint(0, 2 ** 64)) - if "-" in world.shuffle[player]: - shuffle, seed = world.shuffle[player].split("-", 1) - world.shuffle[player] = shuffle + if "-" in multiworld.shuffle[player]: + shuffle, seed = multiworld.shuffle[player].split("-", 1) + multiworld.shuffle[player] = shuffle if shuffle == "vanilla": self.er_seed = "vanilla" - elif seed.startswith("group-") or world.is_race: - self.er_seed = get_same_seed(world, ( - shuffle, seed, world.retro_caves[player], world.mode[player], world.logic[player])) + elif seed.startswith("group-") or multiworld.is_race: + self.er_seed = get_same_seed(multiworld, ( + shuffle, seed, multiworld.retro_caves[player], multiworld.mode[player], multiworld.logic[player])) else: # not a race or group seed, use set seed as is. self.er_seed = seed - elif world.shuffle[player] == "vanilla": + elif multiworld.shuffle[player] == "vanilla": self.er_seed = "vanilla" for dungeon_item in ["smallkey_shuffle", "bigkey_shuffle", "compass_shuffle", "map_shuffle"]: - option = getattr(world, dungeon_item)[player] + option = getattr(multiworld, dungeon_item)[player] if option == "own_world": - world.local_items[player].value |= self.item_name_groups[option.item_name_group] + multiworld.local_items[player].value |= self.item_name_groups[option.item_name_group] elif option == "different_world": - world.non_local_items[player].value |= self.item_name_groups[option.item_name_group] - if world.mode[player] == "standard": - world.non_local_items[player].value -= {"Small Key (Hyrule Castle)"} + multiworld.non_local_items[player].value |= self.item_name_groups[option.item_name_group] + if multiworld.mode[player] == "standard": + multiworld.non_local_items[player].value -= {"Small Key (Hyrule Castle)"} elif option.in_dungeon: self.dungeon_local_item_names |= self.item_name_groups[option.item_name_group] if option == "original_dungeon": self.dungeon_specific_item_names |= self.item_name_groups[option.item_name_group] - world.difficulty_requirements[player] = difficulties[world.difficulty[player]] + multiworld.difficulty_requirements[player] = difficulties[multiworld.difficulty[player]] # enforce pre-defined local items. - if world.goal[player] in ["localtriforcehunt", "localganontriforcehunt"]: - world.local_items[player].value.add('Triforce Piece') + if multiworld.goal[player] in ["localtriforcehunt", "localganontriforcehunt"]: + multiworld.local_items[player].value.add('Triforce Piece') # Not possible to place crystals outside boss prizes yet (might as well make it consistent with pendants too). - world.non_local_items[player].value -= item_name_groups['Pendants'] - world.non_local_items[player].value -= item_name_groups['Crystals'] + multiworld.non_local_items[player].value -= item_name_groups['Pendants'] + multiworld.non_local_items[player].value -= item_name_groups['Crystals'] create_dungeons = create_dungeons @@ -364,7 +378,6 @@ def create_regions(self): world.register_indirect_condition(world.get_region(region_name, player), world.get_entrance(entrance_name, player)) - def collect_item(self, state: CollectionState, item: Item, remove=False): item_name = item.name if item_name.startswith('Progressive '): @@ -693,13 +706,18 @@ def bool_to_text(variable: typing.Union[bool, str]) -> str: spoiler_handle.write('Prize shuffle %s\n' % self.multiworld.shuffle_prizes[self.player]) def write_spoiler(self, spoiler_handle: typing.TextIO) -> None: + player_name = self.multiworld.get_player_name(self.player) spoiler_handle.write("\n\nMedallions:\n") - spoiler_handle.write(f"\nMisery Mire ({self.multiworld.get_player_name(self.player)}):" + spoiler_handle.write(f"\nMisery Mire ({player_name}):" f" {self.multiworld.required_medallions[self.player][0]}") spoiler_handle.write( - f"\nTurtle Rock ({self.multiworld.get_player_name(self.player)}):" + f"\nTurtle Rock ({player_name}):" f" {self.multiworld.required_medallions[self.player][1]}") - + spoiler_handle.write("\n\nFairy Fountain Bottle Fill:\n") + spoiler_handle.write(f"\nPyramid Fairy ({player_name}):" + f" {self.pyramid_fairy_bottle_fill}") + spoiler_handle.write(f"\nWaterfall Fairy ({player_name}):" + f" {self.waterfall_fairy_bottle_fill}") if self.multiworld.boss_shuffle[self.player] != "none": def create_boss_map() -> typing.Dict: boss_map = { diff --git a/worlds/checksfinder/__init__.py b/worlds/checksfinder/__init__.py index 4978500da0cb..621e8f5c37b2 100644 --- a/worlds/checksfinder/__init__.py +++ b/worlds/checksfinder/__init__.py @@ -14,8 +14,8 @@ class ChecksFinderWeb(WebWorld): "A guide to setting up the Archipelago ChecksFinder software on your computer. This guide covers " "single-player, multiworld, and related software.", "English", - "checksfinder_en.md", - "checksfinder/en", + "setup_en.md", + "setup/en", ["Mewlif"] )] diff --git a/worlds/checksfinder/docs/checksfinder_en.md b/worlds/checksfinder/docs/setup_en.md similarity index 100% rename from worlds/checksfinder/docs/checksfinder_en.md rename to worlds/checksfinder/docs/setup_en.md diff --git a/worlds/dark_souls_3/Items.py b/worlds/dark_souls_3/Items.py index 754282e73647..a13235b12aac 100644 --- a/worlds/dark_souls_3/Items.py +++ b/worlds/dark_souls_3/Items.py @@ -1271,6 +1271,14 @@ def get_name_to_id() -> dict: ("Dorris Swarm", 0x40393870, DS3ItemCategory.SKIP), ]] +item_descriptions = { + "Cinders": """ + All four Cinders of a Lord. + + Once you have these four, you can fight Soul of Cinder and win the game. + """, +} + _all_items = _vanilla_items + _dlc_items item_dictionary = {item_data.name: item_data for item_data in _all_items} diff --git a/worlds/dark_souls_3/__init__.py b/worlds/dark_souls_3/__init__.py index 195d319887d5..b9879f70f302 100644 --- a/worlds/dark_souls_3/__init__.py +++ b/worlds/dark_souls_3/__init__.py @@ -7,7 +7,7 @@ from worlds.AutoWorld import World, WebWorld from worlds.generic.Rules import set_rule, add_rule, add_item_rule -from .Items import DarkSouls3Item, DS3ItemCategory, item_dictionary, key_item_names +from .Items import DarkSouls3Item, DS3ItemCategory, item_dictionary, key_item_names, item_descriptions from .Locations import DarkSouls3Location, DS3LocationCategory, location_tables, location_dictionary from .Options import RandomizeWeaponLevelOption, PoolTypeOption, dark_souls_options @@ -60,6 +60,7 @@ class DarkSouls3World(World): "Cinders of a Lord - Lothric Prince" } } + item_descriptions = item_descriptions def __init__(self, multiworld: MultiWorld, player: int): diff --git a/worlds/dlcquest/__init__.py b/worlds/dlcquest/__init__.py index e4e0a29274da..c22b7cd9847b 100644 --- a/worlds/dlcquest/__init__.py +++ b/worlds/dlcquest/__init__.py @@ -3,7 +3,7 @@ from BaseClasses import Tutorial, CollectionState from worlds.AutoWorld import WebWorld, World from . import Options -from .Items import DLCQuestItem, ItemData, create_items, item_table +from .Items import DLCQuestItem, ItemData, create_items, item_table, items_by_group, Group from .Locations import DLCQuestLocation, location_table from .Options import DLCQuestOptions from .Regions import create_regions @@ -60,7 +60,9 @@ def create_items(self): created_items = create_items(self, self.options, locations_count + len(items_to_exclude), self.multiworld.random) self.multiworld.itempool += created_items - self.multiworld.early_items[self.player]["Movement Pack"] = 1 + + if self.options.campaign == Options.Campaign.option_basic or self.options.campaign == Options.Campaign.option_both: + self.multiworld.early_items[self.player]["Movement Pack"] = 1 for item in items_to_exclude: if item in self.multiworld.itempool: @@ -77,6 +79,10 @@ def create_item(self, item: Union[str, ItemData]) -> DLCQuestItem: return DLCQuestItem(item.name, item.classification, item.code, self.player) + def get_filler_item_name(self) -> str: + trap = self.multiworld.random.choice(items_by_group[Group.Trap]) + return trap.name + def fill_slot_data(self): options_dict = self.options.as_dict( "death_link", "ending_choice", "campaign", "coinsanity", "item_shuffle" diff --git a/worlds/factorio/Locations.py b/worlds/factorio/Locations.py index f9db5f4a2bd8..52f0954cba30 100644 --- a/worlds/factorio/Locations.py +++ b/worlds/factorio/Locations.py @@ -3,18 +3,13 @@ from .Technologies import factorio_base_id from .Options import MaxSciencePack -boundary: int = 0xff -total_locations: int = 0xff - -assert total_locations <= boundary - def make_pools() -> Dict[str, List[str]]: pools: Dict[str, List[str]] = {} for i, pack in enumerate(MaxSciencePack.get_ordered_science_packs(), start=1): - max_needed: int = 0xff + max_needed: int = 999 prefix: str = f"AP-{i}-" - pools[pack] = [prefix + hex(x)[2:].upper().zfill(2) for x in range(1, max_needed + 1)] + pools[pack] = [prefix + str(x).upper().zfill(3) for x in range(1, max_needed + 1)] return pools diff --git a/worlds/factorio/Mod.py b/worlds/factorio/Mod.py index 270e7dacf087..c897e72dcd11 100644 --- a/worlds/factorio/Mod.py +++ b/worlds/factorio/Mod.py @@ -5,7 +5,7 @@ import shutil import threading import zipfile -from typing import Optional, TYPE_CHECKING +from typing import Optional, TYPE_CHECKING, Any, List, Callable, Tuple import jinja2 @@ -24,6 +24,7 @@ data_final_template: Optional[jinja2.Template] = None locale_template: Optional[jinja2.Template] = None control_template: Optional[jinja2.Template] = None +settings_template: Optional[jinja2.Template] = None template_load_lock = threading.Lock() @@ -62,15 +63,24 @@ class FactorioModFile(worlds.Files.APContainer): game = "Factorio" compression_method = zipfile.ZIP_DEFLATED # Factorio can't load LZMA archives + writing_tasks: List[Callable[[], Tuple[str, str]]] + + def __init__(self, *args: Any, **kwargs: Any): + super().__init__(*args, **kwargs) + self.writing_tasks = [] def write_contents(self, opened_zipfile: zipfile.ZipFile): # directory containing Factorio mod has to come first, or Factorio won't recognize this file as a mod. mod_dir = self.path[:-4] # cut off .zip for root, dirs, files in os.walk(mod_dir): for file in files: - opened_zipfile.write(os.path.join(root, file), - os.path.relpath(os.path.join(root, file), + filename = os.path.join(root, file) + opened_zipfile.write(filename, + os.path.relpath(filename, os.path.join(mod_dir, '..'))) + for task in self.writing_tasks: + target, content = task() + opened_zipfile.writestr(target, content) # now we can add extras. super(FactorioModFile, self).write_contents(opened_zipfile) @@ -98,6 +108,7 @@ def load_template(name: str): locations = [(location, location.item) for location in world.science_locations] mod_name = f"AP-{multiworld.seed_name}-P{player}-{multiworld.get_file_safe_player_name(player)}" + versioned_mod_name = mod_name + "_" + Utils.__version__ random = multiworld.per_slot_randoms[player] @@ -153,48 +164,38 @@ def flop_random(low, high, base=None): template_data["free_sample_blacklist"].update({item: 1 for item in multiworld.free_sample_blacklist[player].value}) template_data["free_sample_blacklist"].update({item: 0 for item in multiworld.free_sample_whitelist[player].value}) - control_code = control_template.render(**template_data) - data_template_code = data_template.render(**template_data) - data_final_fixes_code = data_final_template.render(**template_data) - settings_code = settings_template.render(**template_data) + mod_dir = os.path.join(output_directory, versioned_mod_name) - mod_dir = os.path.join(output_directory, mod_name + "_" + Utils.__version__) - en_locale_dir = os.path.join(mod_dir, "locale", "en") - os.makedirs(en_locale_dir, exist_ok=True) + zf_path = os.path.join(mod_dir + ".zip") + mod = FactorioModFile(zf_path, player=player, player_name=multiworld.player_name[player]) if world.zip_path: - # Maybe investigate read from zip, write to zip, without temp file? with zipfile.ZipFile(world.zip_path) as zf: for file in zf.infolist(): if not file.is_dir() and "/data/mod/" in file.filename: path_part = Utils.get_text_after(file.filename, "/data/mod/") - target = os.path.join(mod_dir, path_part) - os.makedirs(os.path.split(target)[0], exist_ok=True) - - with open(target, "wb") as f: - f.write(zf.read(file)) + mod.writing_tasks.append(lambda arcpath=versioned_mod_name+"/"+path_part, content=zf.read(file): + (arcpath, content)) else: shutil.copytree(os.path.join(os.path.dirname(__file__), "data", "mod"), mod_dir, dirs_exist_ok=True) - with open(os.path.join(mod_dir, "data.lua"), "wt") as f: - f.write(data_template_code) - with open(os.path.join(mod_dir, "data-final-fixes.lua"), "wt") as f: - f.write(data_final_fixes_code) - with open(os.path.join(mod_dir, "control.lua"), "wt") as f: - f.write(control_code) - with open(os.path.join(mod_dir, "settings.lua"), "wt") as f: - f.write(settings_code) - locale_content = locale_template.render(**template_data) - with open(os.path.join(en_locale_dir, "locale.cfg"), "wt") as f: - f.write(locale_content) + mod.writing_tasks.append(lambda: (versioned_mod_name + "/data.lua", + data_template.render(**template_data))) + mod.writing_tasks.append(lambda: (versioned_mod_name + "/data-final-fixes.lua", + data_final_template.render(**template_data))) + mod.writing_tasks.append(lambda: (versioned_mod_name + "/control.lua", + control_template.render(**template_data))) + mod.writing_tasks.append(lambda: (versioned_mod_name + "/settings.lua", + settings_template.render(**template_data))) + mod.writing_tasks.append(lambda: (versioned_mod_name + "/locale/en/locale.cfg", + locale_template.render(**template_data))) + info = base_info.copy() info["name"] = mod_name - with open(os.path.join(mod_dir, "info.json"), "wt") as f: - json.dump(info, f, indent=4) + mod.writing_tasks.append(lambda: (versioned_mod_name + "/info.json", + json.dumps(info, indent=4))) - # zip the result - zf_path = os.path.join(mod_dir + ".zip") - mod = FactorioModFile(zf_path, player=player, player_name=multiworld.player_name[player]) + # write the mod file mod.write() - + # clean up shutil.rmtree(mod_dir) diff --git a/worlds/factorio/__init__.py b/worlds/factorio/__init__.py index 8308bb2d6559..eb078720c668 100644 --- a/worlds/factorio/__init__.py +++ b/worlds/factorio/__init__.py @@ -541,7 +541,7 @@ def __init__(self, player: int, name: str, address: int, parent: Region): super(FactorioScienceLocation, self).__init__(player, name, address, parent) # "AP-{Complexity}-{Cost}" self.complexity = int(self.name[3]) - 1 - self.rel_cost = int(self.name[5:], 16) + self.rel_cost = int(self.name[5:]) self.ingredients = {Factorio.ordered_science_packs[self.complexity]: 1} for complexity in range(self.complexity): diff --git a/worlds/factorio/data/mod/info.json b/worlds/factorio/data/mod/info.json deleted file mode 100644 index 70a951834428..000000000000 --- a/worlds/factorio/data/mod/info.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "archipelago-client", - "version": "0.0.1", - "title": "Archipelago", - "author": "Berserker and Dewiniaid", - "homepage": "https://archipelago.gg", - "description": "Integration client for the Archipelago Randomizer", - "factorio_version": "1.1", - "dependencies": [ - "base >= 1.1.0", - "? science-not-invited", - "? factory-levels" - ] -} diff --git a/worlds/lingo/LL1.yaml b/worlds/lingo/LL1.yaml new file mode 100644 index 000000000000..db1418f5963d --- /dev/null +++ b/worlds/lingo/LL1.yaml @@ -0,0 +1,7516 @@ +--- + # This file is an associative array where the keys are region names. Rooms + # have four properties: entrances, panels, doors, and paintings. + # + # entrances is an array of regions from which this room can be accessed. The + # key of each entry is the room that can access this one. The value is a list + # of OR'd requirements for being able to access this room from the other one, + # although the list can be elided if there is only one requirement, and the + # value True can be used if there are no requirements (i.e. you always have + # access to this room if you have access to the other). Each requirement + # describes a door that must be opened in order to access this room from the + # other. The door is described by both the door's name and the name of the + # room that the door is in. The room name may be omitted if the door is + # located in the current room. + # + # panels is an array of panels in the room. The key of the array is an + # arbitrary name for the panel. Panels can have the following fields: + # - id: The internal ID of the panel in the LINGO map + # - required_room: In addition to having access to this room, the player must + # also have access to this other room in order to solve this + # panel. + # - required_door: In addition to having access to this room, the player must + # also have this door opened in order to solve this panel. + # - required_panel: In addition to having access to this room, the player must + # also be able to access this other panel in order to solve + # this panel. + # - colors: A list of colors that are required to be unlocked in order + # to solve this panel + # - check: A location check will be created for this individual panel. + # - exclude_reduce: Panel checks are assumed to be INCLUDED when reduce checks + # is on. This option excludes the check anyway. + # - tag: Label that describes how panel randomization should be + # done. In reorder mode, panels with the same tag can be + # shuffled amongst themselves. "forbid" is a special value + # meaning that no randomization should be done. This field is + # mandatory. + # - link: Panels with the same link label are randomized as a group. + # - subtag: Used to identify the separate parts of a linked group. + # - copy_to_sign: When randomizing this panel, the hint should be copied to + # the specified sign(s). + # - achievement: The name of the achievement that is received upon solving + # this panel. + # - non_counting: If True, this panel does not contribute to the total needed + # to unlock Level 2. + # + # doors is an array of doors associated with this room. When door + # randomization is enabled, each of these is an item. The key is a name that + # will be displayed as part of the item's name. Doors can have the following + # fields: + # - id: A string or list of internal door IDs from the LINGO map. + # In door shuffle mode, collecting the item generated for + # this door will open the doors listed here. + # - painting_id: An internal ID of a painting that should be moved upon + # receiving this door. + # - panels: These are the panels that canonically open this door. If + # there is only one panel for the door, then that panel is a + # check. If there is more than one panel, then that entire + # set of panels must be solved for a check. Panels can + # either be a string (representing a panel in this room) or + # a dict containing "room" and "panel". + # - item_name: Overrides the name of the item generated for this door. + # If not specified, the item name will be generated from + # the room name and the door name. + # - location_name: Overrides the name of the location generated for this + # door. If not specified, the location name will be + # generated using the names of the panels. + # - skip_location: If true, no location is generated for this door. + # - skip_item: If true, no item is generated for this door. + # - group: When simple doors is used, all doors with the same group + # will be covered by a single item. + # - include_reduce: Door checks are assumed to be EXCLUDED when reduce checks + # is on. This option includes the check anyway. + # - junk_item: If on, the item for this door will be considered a junk + # item instead of a progression item. Only use this for + # doors that could never gate progression regardless of + # options and state. + # - event: Denotes that the door is event only. This is similar to + # setting both skip_location and skip_item. + # + # paintings is an array of paintings in the room. This is used for painting + # shuffling. + # - id: The internal painting ID from the LINGO map. + # - enter_only: If true, painting shuffling will not place a warp exit on + # this painting. + # - exit_only: If true, painting shuffling will not place a warp entrance + # on this painting. + # - orientation: One of north/south/east/west. This is the direction that + # the player is facing when they are interacting with it, + # not the orientation of the painting itself. "North" is + # the direction the player faces at a new game, with the + # positive X axis to the right. + # - required_door: This door must be open for the painting to be usable as an + # entrance. If required_door is set, enter_only must be + # True. + # - required: Marks a painting as being the only entrance for a room, + # and thus it is required to be an exit when randomized. + # Use "required_when_no_doors" instead if it would be + # possible to enter the room without the painting in door + # shuffle mode. + # - req_blocked: Marks that a painting cannot be an entrance leading to a + # required painting. Paintings within a room that has a + # required painting are automatically req blocked. + # Use "req_blocked_when_no_doors" instead if it would be + # fine in door shuffle mode. + # - move: Denotes that the painting is able to move. + Starting Room: + entrances: + Menu: True + panels: + HI: + id: Entry Room/Panel_hi_hi + tag: midwhite + HIDDEN: + id: Entry Room/Panel_hidden_hidden + tag: midwhite + TYPE: + id: Entry Room/Panel_type_type + tag: midwhite + THIS: + id: Entry Room/Panel_this_this + tag: midwhite + WRITE: + id: Entry Room/Panel_write_write + tag: midwhite + SAME: + id: Entry Room/Panel_same_same + tag: midwhite + doors: + Main Door: + event: True + panels: + - HI + Back Right Door: + id: Entry Room Area Doors/Door_hidden_hidden + include_reduce: True + panels: + - HIDDEN + Rhyme Room Entrance: + id: + - Palindrome Room Area Doors/Door_level_level_2 + - Palindrome Room Area Doors/Door_racecar_racecar_2 + - Palindrome Room Area Doors/Door_solos_solos_2 + skip_location: True + group: Rhyme Room Doors + panels: + - room: The Tenacious + panel: LEVEL (Black) + - room: The Tenacious + panel: RACECAR (Black) + - room: The Tenacious + panel: SOLOS (Black) + paintings: + - id: arrows_painting + exit_only: True + orientation: south + - id: arrows_painting2 + disable: True + move: True + - id: arrows_painting3 + disable: True + move: True + - id: garden_painting_tower2 + enter_only: True + orientation: north + move: True + required_door: + room: Hedge Maze + door: Painting Shortcut + - id: flower_painting_8 + enter_only: True + orientation: north + move: True + required_door: + room: Courtyard + door: Painting Shortcut + - id: symmetry_painting_a_starter + enter_only: True + orientation: west + move: True + required_door: + room: The Wondrous (Doorknob) + door: Painting Shortcut + - id: pencil_painting6 + enter_only: True + orientation: east + move: True + required_door: + room: Outside The Bold + door: Painting Shortcut + - id: blueman_painting_3 + enter_only: True + orientation: east + move: True + required_door: + room: Outside The Undeterred + door: Painting Shortcut + - id: eyes_yellow_painting2 + enter_only: True + orientation: west + move: True + required_door: + room: Outside The Agreeable + door: Painting Shortcut + Hidden Room: + entrances: + Starting Room: + room: Starting Room + door: Back Right Door + The Seeker: + door: Seeker Entrance + Dead End Area: + door: Dead End Door + Knight Night (Outer Ring): + door: Knight Night Entrance + panels: + DEAD END: + id: Appendix Room/Panel_deadend_deadened + check: True + exclude_reduce: True + tag: topwhite + OPEN: + id: Heteronym Room/Panel_entrance_entrance + tag: midwhite + LIES: + id: Appendix Room/Panel_lies_lies + tag: midwhite + doors: + Dead End Door: + id: Appendix Room Area Doors/Door_rat_tar_2 + skip_location: true + group: Dead End Area Access + panels: + - room: Hub Room + panel: RAT + Knight Night Entrance: + id: Appendix Room Area Doors/Door_rat_tar_4 + skip_location: true + panels: + - room: Hub Room + panel: RAT + Seeker Entrance: + id: Entry Room Area Doors/Door_entrance_entrance + item_name: The Seeker - Entrance + panels: + - OPEN + Rhyme Room Entrance: + id: + - Appendix Room Area Doors/Door_rat_tar_3 + - Double Room Area Doors/Door_room_entry_stairs + skip_location: True + group: Rhyme Room Doors + panels: + - room: The Tenacious + panel: LEVEL (Black) + - room: The Tenacious + panel: RACECAR (Black) + - room: The Tenacious + panel: SOLOS (Black) + - room: Hub Room + panel: RAT + paintings: + - id: owl_painting + orientation: north + The Seeker: + entrances: + Hidden Room: + room: Hidden Room + door: Seeker Entrance + Pilgrim Room: + room: Pilgrim Room + door: Shortcut to The Seeker + panels: + Achievement: + id: Countdown Panels/Panel_seeker_seeker + required_room: Hidden Room + tag: forbid + check: True + achievement: The Seeker + BEAR: + id: Heteronym Room/Panel_bear_bear + tag: midwhite + MINE: + id: Heteronym Room/Panel_mine_mine + tag: double midwhite + subtag: left + link: exact MINE + MINE (2): + id: Heteronym Room/Panel_mine_mine_2 + tag: double midwhite + subtag: right + link: exact MINE + BOW: + id: Heteronym Room/Panel_bow_bow + tag: midwhite + DOES: + id: Heteronym Room/Panel_does_does + tag: midwhite + MOBILE: + id: Heteronym Room/Panel_mobile_mobile + tag: double midwhite + subtag: left + link: exact MOBILE + MOBILE (2): + id: Heteronym Room/Panel_mobile_mobile_2 + tag: double midwhite + subtag: right + link: exact MOBILE + DESERT: + id: Heteronym Room/Panel_desert_desert + tag: topmid white stack + subtag: mid + link: topmid DESERT + DESSERT: + id: Heteronym Room/Panel_desert_dessert + tag: topmid white stack + subtag: top + link: topmid DESERT + SOW: + id: Heteronym Room/Panel_sow_sow + tag: topmid white stack + subtag: mid + link: topmid SOW + SEW: + id: Heteronym Room/Panel_sow_so + tag: topmid white stack + subtag: top + link: topmid SOW + TO: + id: Heteronym Room/Panel_two_to + tag: double topwhite + subtag: left + link: hp TWO + TOO: + id: Heteronym Room/Panel_two_too + tag: double topwhite + subtag: right + link: hp TWO + WRITE: + id: Heteronym Room/Panel_write_right + tag: topwhite + EWE: + id: Heteronym Room/Panel_you_ewe + tag: topwhite + KNOT: + id: Heteronym Room/Panel_not_knot + tag: double topwhite + subtag: left + link: hp NOT + NAUGHT: + id: Heteronym Room/Panel_not_naught + tag: double topwhite + subtag: right + link: hp NOT + BEAR (2): + id: Heteronym Room/Panel_bear_bare + tag: topwhite + Second Room: + entrances: + Starting Room: + room: Starting Room + door: Main Door + Hub Room: + door: Exit Door + panels: + HI: + id: Entry Room/Panel_hi_high + tag: topwhite + LOW: + id: Entry Room/Panel_low_low + tag: forbid # This is a midwhite pretending to be a botwhite + ANOTHER TRY: + id: Entry Room/Panel_advance + tag: topwhite + LEVEL 2: + # We will set up special rules for this in code. + id: EndPanel/Panel_level_2 + tag: forbid + non_counting: True + check: True + required_panel: + - panel: ANOTHER TRY + doors: + Exit Door: + id: Entry Room Area Doors/Door_hi_high + location_name: Second Room - Good Luck + include_reduce: True + panels: + - HI + - LOW + Hub Room: + entrances: + Second Room: + room: Second Room + door: Exit Door + Dead End Area: + door: Near RAT Door + Crossroads: + door: Crossroads Entrance + The Tenacious: + door: Tenacious Entrance + Warts Straw Area: + door: Symmetry Door + Hedge Maze: + door: Shortcut to Hedge Maze + Orange Tower First Floor: + room: Orange Tower First Floor + door: Shortcut to Hub Room + Owl Hallway: + painting: True + Outside The Initiated: + room: Outside The Initiated + door: Shortcut to Hub Room + The Traveled: + door: Traveled Entrance + Roof: True # through the sunwarp + Outside The Undeterred: # (NOTE: used in hardcoded pilgrimage) + room: Outside The Undeterred + door: Green Painting + painting: True + panels: + ORDER: + id: Shuffle Room/Panel_order_chaos + colors: black + tag: botblack + SLAUGHTER: + id: Palindrome Room/Panel_slaughter_laughter + colors: red + tag: midred + NEAR: + id: Symmetry Room/Panel_near_far + colors: black + tag: botblack + FAR: + id: Symmetry Room/Panel_far_near + colors: black + tag: botblack + TRACE: + id: Maze Room/Panel_trace_trace + tag: midwhite + RAT: + id: Appendix Room/Panel_rat_tar + colors: black + check: True + exclude_reduce: True + tag: midblack + OPEN: + id: Synonym Room/Panel_open_open + tag: midwhite + FOUR: + id: Backside Room/Panel_four_four_3 + tag: midwhite + required_door: + room: Outside The Undeterred + door: Fours + LOST: + id: Shuffle Room/Panel_lost_found + colors: black + tag: botblack + FORWARD: + id: Entry Room/Panel_forward_forward + tag: midwhite + BETWEEN: + id: Entry Room/Panel_between_between + tag: midwhite + BACKWARD: + id: Entry Room/Panel_backward_backward + tag: midwhite + doors: + Crossroads Entrance: + id: Shuffle Room Area Doors/Door_chaos + panels: + - ORDER + Tenacious Entrance: + id: Palindrome Room Area Doors/Door_slaughter_laughter + group: Entrances to The Tenacious + panels: + - SLAUGHTER + Symmetry Door: + id: + - Symmetry Room Area Doors/Door_near_far + - Symmetry Room Area Doors/Door_far_near + group: Symmetry Doors + panels: + - NEAR + - FAR + Shortcut to Hedge Maze: + id: Maze Area Doors/Door_trace_trace + group: Hedge Maze Doors + panels: + - TRACE + Near RAT Door: + id: Appendix Room Area Doors/Door_deadend_deadened + skip_location: True + group: Dead End Area Access + panels: + - room: Hidden Room + panel: DEAD END + Traveled Entrance: + id: Appendix Room Area Doors/Door_open_open + item_name: The Traveled - Entrance + group: Entrance to The Traveled + panels: + - OPEN + Lost Door: + id: Shuffle Room Area Doors/Door_lost_found + junk_item: True + panels: + - LOST + paintings: + - id: maze_painting + orientation: west + Dead End Area: + entrances: + Hidden Room: + room: Hidden Room + door: Dead End Door + Hub Room: + room: Hub Room + door: Near RAT Door + panels: + FOUR: + id: Backside Room/Panel_four_four_2 + tag: midwhite + required_door: + room: Outside The Undeterred + door: Fours + EIGHT: + id: Backside Room/Panel_eight_eight_8 + tag: midwhite + required_door: + room: Number Hunt + door: Eights + paintings: + - id: smile_painting_6 + orientation: north + Pilgrim Antechamber: + # Let's not shuffle the paintings yet. + entrances: + # The pilgrimage is hardcoded in rules.py + Starting Room: + door: Sun Painting + panels: + HOT CRUST: + id: Lingo Room/Panel_shortcut + colors: yellow + tag: midyellow + PILGRIMAGE: + id: Lingo Room/Panel_pilgrim + colors: blue + tag: midblue + MASTERY: + id: Master Room/Panel_mastery_mastery14 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + doors: + Sun Painting: + item_name: Pilgrim Room - Sun Painting + location_name: Pilgrim Room - HOT CRUST + painting_id: pilgrim_painting2 + panels: + - HOT CRUST + Exit: + event: True + panels: + - PILGRIMAGE + Pilgrim Room: + entrances: + The Seeker: + door: Shortcut to The Seeker + Pilgrim Antechamber: + room: Pilgrim Antechamber + door: Exit + panels: + THIS: + id: Lingo Room/Panel_lingo_9 + colors: gray + tag: forbid + TIME ROOM: + id: Lingo Room/Panel_lingo_1 + colors: purple + tag: toppurp + SCIENCE ROOM: + id: Lingo Room/Panel_lingo_2 + tag: botwhite + SHINY ROCK ROOM: + id: Lingo Room/Panel_lingo_3 + tag: botwhite + ANGRY POWER: + id: Lingo Room/Panel_lingo_4 + colors: + - purple + tag: forbid + MICRO LEGION: + id: Lingo Room/Panel_lingo_5 + colors: yellow + tag: midyellow + LOSERS RELAX: + id: Lingo Room/Panel_lingo_6 + colors: + - black + tag: forbid + "906234": + id: Lingo Room/Panel_lingo_7 + colors: + - orange + - blue + tag: forbid + MOOR EMORDNILAP: + id: Lingo Room/Panel_lingo_8 + colors: black + tag: midblack + HALL ROOMMATE: + id: Lingo Room/Panel_lingo_10 + colors: + - red + - blue + tag: forbid + ALL GREY: + id: Lingo Room/Panel_lingo_11 + colors: yellow + tag: midyellow + PLUNDER ISLAND: + id: Lingo Room/Panel_lingo_12 + colors: + - purple + - red + tag: forbid + FLOSS PATHS: + id: Lingo Room/Panel_lingo_13 + colors: + - purple + - brown + tag: forbid + doors: + Shortcut to The Seeker: + id: Master Room Doors/Door_pilgrim_shortcut + include_reduce: True + panels: + - THIS + Crossroads: + entrances: + Hub Room: True # The sunwarp means that we never need the ORDER door + Color Hallways: True + The Tenacious: + door: Tenacious Entrance + Orange Tower Fourth Floor: True # through IRK HORN + Amen Name Area: + room: Lost Area + door: Exit + Roof: True # through the sunwarp + panels: + DECAY: + id: Palindrome Room/Panel_decay_day + colors: red + tag: midred + NOPE: + id: Sun Room/Panel_nope_open + colors: yellow + tag: midyellow + EIGHT: + id: Backside Room/Panel_eight_eight_5 + tag: midwhite + required_door: + room: Number Hunt + door: Eights + WE ROT: + id: Shuffle Room/Panel_tower + colors: yellow + tag: midyellow + WORDS: + id: Shuffle Room/Panel_words_sword + colors: yellow + tag: midyellow + SWORD: + id: Shuffle Room/Panel_sword_words + colors: yellow + tag: midyellow + TURN: + id: Shuffle Room/Panel_turn_runt + colors: yellow + tag: midyellow + BEND HI: + id: Shuffle Room/Panel_behind + colors: yellow + tag: midyellow + THE EYES: + id: Shuffle Room/Panel_eyes_see_shuffle + colors: yellow + check: True + exclude_reduce: True + required_door: + door: Hollow Hallway + tag: midyellow + CORNER: + id: Shuffle Room/Panel_corner_corner + required_door: + door: Hollow Hallway + tag: midwhite + HOLLOW: + id: Shuffle Room/Panel_hollow_hollow + required_door: + door: Hollow Hallway + tag: midwhite + SWAP: + id: Shuffle Room/Panel_swap_wasp + colors: yellow + tag: midyellow + GEL: + id: Shuffle Room/Panel_gel + colors: yellow + tag: topyellow + required_door: + door: Tower Entrance + THOUGH: + id: Shuffle Room/Panel_though + colors: yellow + tag: topyellow + required_door: + door: Tower Entrance + CROSSROADS: + id: Shuffle Room/Panel_crossroads_crossroads + tag: midwhite + doors: + Tenacious Entrance: + id: Palindrome Room Area Doors/Door_decay_day + group: Entrances to The Tenacious + panels: + - DECAY + Discerning Entrance: + id: Shuffle Room Area Doors/Door_nope_open + item_name: The Discerning - Entrance + panels: + - NOPE + Tower Entrance: + id: + - Shuffle Room Area Doors/Door_tower + - Shuffle Room Area Doors/Door_tower2 + - Shuffle Room Area Doors/Door_tower3 + - Shuffle Room Area Doors/Door_tower4 + group: Crossroads - Tower Entrances + panels: + - WE ROT + Tower Back Entrance: + id: Shuffle Room Area Doors/Door_runt + location_name: Crossroads - TURN/RUNT + group: Crossroads - Tower Entrances + panels: + - TURN + - room: Orange Tower Fourth Floor + panel: RUNT + Words Sword Door: + id: + - Shuffle Room Area Doors/Door_words_shuffle_3 + - Shuffle Room Area Doors/Door_words_shuffle_4 + group: Crossroads Doors + panels: + - WORDS + - SWORD + Eye Wall: + id: Shuffle Room Area Doors/Door_behind + junk_item: True + group: Crossroads Doors + panels: + - BEND HI + Hollow Hallway: + id: Shuffle Room Area Doors/Door_crossroads6 + skip_location: True + group: Crossroads Doors + panels: + - BEND HI + Roof Access: + id: Tower Room Area Doors/Door_level_6_2 + skip_location: True + panels: + - room: Orange Tower First Floor + panel: DADS + ALE + - room: Outside The Undeterred + panel: ART + ART + - room: Orange Tower Third Floor + panel: DEER + WREN + - room: Orange Tower Fourth Floor + panel: LEARNS + UNSEW + - room: Orange Tower Fifth Floor + panel: DRAWL + RUNS + - room: Owl Hallway + panel: READS + RUST + paintings: + - id: eye_painting + disable: True + orientation: east + move: True + required_door: + door: Eye Wall + - id: smile_painting_4 + orientation: south + Lost Area: + entrances: + Outside The Agreeable: + door: Exit + Crossroads: + room: Crossroads + door: Words Sword Door + panels: + LOST (1): + id: Shuffle Room/Panel_lost_lots + colors: yellow + tag: midyellow + LOST (2): + id: Shuffle Room/Panel_lost_slot + colors: yellow + tag: midyellow + doors: + Exit: + id: + - Shuffle Room Area Doors/Door_lost_shuffle_1 + - Shuffle Room Area Doors/Door_lost_shuffle_2 + location_name: Crossroads - LOST Pair + panels: + - LOST (1) + - LOST (2) + Amen Name Area: + entrances: + Crossroads: + room: Lost Area + door: Exit + Suits Area: + door: Exit + panels: + AMEN: + id: Shuffle Room/Panel_amen_mean + colors: yellow + tag: double midyellow + subtag: left + link: ana MEAN + NAME: + id: Shuffle Room/Panel_name_mean + colors: yellow + tag: double midyellow + subtag: right + link: ana MEAN + NINE: + id: Backside Room/Panel_nine_nine_3 + tag: midwhite + required_door: + room: Number Hunt + door: Nines + doors: + Exit: + id: Shuffle Room Area Doors/Door_mean + panels: + - AMEN + - NAME + Suits Area: + entrances: + Amen Name Area: + room: Amen Name Area + door: Exit + Roof: True + panels: + SPADES: + id: Cross Room/Panel_spades_spades + tag: midwhite + CLUBS: + id: Cross Room/Panel_clubs_clubs + tag: midwhite + HEARTS: + id: Cross Room/Panel_hearts_hearts + tag: midwhite + paintings: + - id: west_afar + orientation: south + The Tenacious: + entrances: + Hub Room: + - room: Hub Room + door: Tenacious Entrance + - door: Shortcut to Hub Room + Crossroads: + room: Crossroads + door: Tenacious Entrance + Outside The Agreeable: + room: Outside The Agreeable + door: Tenacious Entrance + Dread Hallway: + room: Dread Hallway + door: Tenacious Entrance + panels: + LEVEL (Black): + id: Palindrome Room/Panel_level_level + colors: black + tag: midblack + RACECAR (Black): + id: Palindrome Room/Panel_racecar_racecar + colors: black + tag: palindrome + copy_to_sign: sign4 + SOLOS (Black): + id: Palindrome Room/Panel_solos_solos + colors: black + tag: palindrome + copy_to_sign: + - sign5 + - sign6 + LEVEL (White): + id: Palindrome Room/Panel_level_level_2 + tag: midwhite + RACECAR (White): + id: Palindrome Room/Panel_racecar_racecar_2 + tag: midwhite + copy_to_sign: sign3 + SOLOS (White): + id: Palindrome Room/Panel_solos_solos_2 + tag: midwhite + copy_to_sign: + - sign1 + - sign2 + Achievement: + id: Countdown Panels/Panel_tenacious_tenacious + check: True + tag: forbid + required_panel: + - panel: LEVEL (Black) + - panel: RACECAR (Black) + - panel: SOLOS (Black) + - panel: LEVEL (White) + - panel: RACECAR (White) + - panel: SOLOS (White) + - room: Hub Room + panel: SLAUGHTER + - room: Crossroads + panel: DECAY + - room: Outside The Agreeable + panel: MASSACRED + - room: Dread Hallway + panel: DREAD + achievement: The Tenacious + doors: + Shortcut to Hub Room: + id: + - Palindrome Room Area Doors/Door_level_level_1 + - Palindrome Room Area Doors/Door_racecar_racecar_1 + - Palindrome Room Area Doors/Door_solos_solos_1 + location_name: The Tenacious - Palindromes + group: Entrances to The Tenacious + panels: + - LEVEL (Black) + - RACECAR (Black) + - SOLOS (Black) + White Palindromes: + location_name: The Tenacious - White Palindromes + skip_item: True + panels: + - LEVEL (White) + - RACECAR (White) + - SOLOS (White) + Warts Straw Area: + entrances: + Hub Room: + room: Hub Room + door: Symmetry Door + Leaf Feel Area: + door: Door + panels: + WARTS: + id: Symmetry Room/Panel_warts_straw + colors: black + tag: midblack + STRAW: + id: Symmetry Room/Panel_straw_warts + colors: black + tag: midblack + doors: + Door: + id: + - Symmetry Room Area Doors/Door_warts_straw + - Symmetry Room Area Doors/Door_straw_warts + group: Symmetry Doors + panels: + - WARTS + - STRAW + Leaf Feel Area: + entrances: + Warts Straw Area: + room: Warts Straw Area + door: Door + Outside The Agreeable: + door: Door + panels: + LEAF: + id: Symmetry Room/Panel_leaf_feel + colors: black + tag: topblack + FEEL: + id: Symmetry Room/Panel_feel_leaf + colors: black + tag: topblack + doors: + Door: + id: + - Symmetry Room Area Doors/Door_leaf_feel + - Symmetry Room Area Doors/Door_feel_leaf + group: Symmetry Doors + panels: + - LEAF + - FEEL + Outside The Agreeable: + # Let's ignore the blue warp thing for now because the lookout is a dead + # end. Later on it could be filler checks. + entrances: + # We don't have to list Lost Area because of Crossroads. + Crossroads: True + The Tenacious: + door: Tenacious Entrance + The Agreeable: + door: Agreeable Entrance + Dread Hallway: + door: Black Door + Leaf Feel Area: + room: Leaf Feel Area + door: Door + Starting Room: + door: Painting Shortcut + painting: True + Hallway Room (2): True + Hallway Room (3): True + Hallway Room (4): True + Hedge Maze: True # through the door to the sectioned-off part of the hedge maze + panels: + MASSACRED: + id: Palindrome Room/Panel_massacred_sacred + colors: red + tag: midred + BLACK: + id: Symmetry Room/Panel_black_white + colors: black + tag: botblack + CLOSE: + id: Antonym Room/Panel_close_open + colors: black + tag: botblack + LEFT: + id: Symmetry Room/Panel_left_right + colors: black + tag: botblack + LEFT (2): + id: Symmetry Room/Panel_left_wrong + colors: black + tag: bot black black + RIGHT: + id: Symmetry Room/Panel_right_left + colors: black + tag: botblack + PURPLE: + id: Color Arrow Room/Panel_purple_afar + tag: midwhite + required_door: + door: Purple Barrier + FIVE (1): + id: Backside Room/Panel_five_five_5 + tag: midwhite + required_door: + room: Outside The Undeterred + door: Fives + FIVE (2): + id: Backside Room/Panel_five_five_4 + tag: midwhite + required_door: + room: Outside The Undeterred + door: Fives + OUT: + id: Hallway Room/Panel_out_out + check: True + exclude_reduce: True + tag: midwhite + HIDE: + id: Maze Room/Panel_hide_seek_4 + colors: black + tag: botblack + DAZE: + id: Maze Room/Panel_daze_maze + colors: purple + tag: midpurp + WALL: + id: Hallway Room/Panel_castle_1 + colors: blue + tag: quad bot blue + link: qbb CASTLE + KEEP: + id: Hallway Room/Panel_castle_2 + colors: blue + tag: quad bot blue + link: qbb CASTLE + BAILEY: + id: Hallway Room/Panel_castle_3 + colors: blue + tag: quad bot blue + link: qbb CASTLE + TOWER: + id: Hallway Room/Panel_castle_4 + colors: blue + tag: quad bot blue + link: qbb CASTLE + NORTH: + id: Cross Room/Panel_north_missing + colors: green + tag: forbid + required_room: Outside The Bold + DIAMONDS: + id: Cross Room/Panel_diamonds_missing + colors: green + tag: forbid + required_room: Suits Area + FIRE: + id: Cross Room/Panel_fire_missing + colors: green + tag: forbid + required_room: Elements Area + WINTER: + id: Cross Room/Panel_winter_missing + colors: green + tag: forbid + required_room: Orange Tower Fifth Floor + doors: + Tenacious Entrance: + id: Palindrome Room Area Doors/Door_massacred_sacred + group: Entrances to The Tenacious + panels: + - MASSACRED + Black Door: + id: Symmetry Room Area Doors/Door_black_white + group: Entrances to The Tenacious + panels: + - BLACK + Agreeable Entrance: + id: Symmetry Room Area Doors/Door_close_open + item_name: The Agreeable - Entrance + panels: + - CLOSE + Painting Shortcut: + item_name: Starting Room - Street Painting + painting_id: eyes_yellow_painting2 + panels: + - RIGHT + Purple Barrier: + id: Color Arrow Room Doors/Door_purple_3 + group: Color Hunt Barriers + skip_location: True + panels: + - room: Champion's Rest + panel: PURPLE + Hallway Door: + id: Red Blue Purple Room Area Doors/Door_room_2 + group: Hallway Room Doors + location_name: Hallway Room - First Room + panels: + - WALL + - KEEP + - BAILEY + - TOWER + paintings: + - id: panda_painting + orientation: south + - id: eyes_yellow_painting + orientation: east + progression: + Progressive Hallway Room: + - Hallway Door + - room: Hallway Room (2) + door: Exit + - room: Hallway Room (3) + door: Exit + - room: Hallway Room (4) + door: Exit + Dread Hallway: + entrances: + Outside The Agreeable: + room: Outside The Agreeable + door: Black Door + The Tenacious: + door: Tenacious Entrance + panels: + DREAD: + id: Palindrome Room/Panel_dread_dead + colors: red + tag: midred + doors: + Tenacious Entrance: + id: Palindrome Room Area Doors/Door_dread_dead + group: Entrances to The Tenacious + panels: + - DREAD + The Agreeable: + entrances: + Outside The Agreeable: + room: Outside The Agreeable + door: Agreeable Entrance + Hedge Maze: + door: Shortcut to Hedge Maze + panels: + Achievement: + id: Countdown Panels/Panel_disagreeable_agreeable + colors: black + tag: forbid + required_room: Outside The Agreeable + check: True + achievement: The Agreeable + BYE: + id: Antonym Room/Panel_bye_hi + colors: black + tag: botblack + RETOOL: + id: Antonym Room/Panel_retool_looter + colors: black + tag: midblack + DRAWER: + id: Antonym Room/Panel_drawer_reward + colors: black + tag: midblack + READ: + id: Antonym Room/Panel_read_write + colors: black + tag: botblack + DIFFERENT: + id: Antonym Room/Panel_different_same + colors: black + tag: botblack + LOW: + id: Antonym Room/Panel_low_high + colors: black + tag: botblack + ALIVE: + id: Antonym Room/Panel_alive_dead + colors: black + tag: botblack + THAT: + id: Antonym Room/Panel_that_this + colors: black + tag: botblack + STRESSED: + id: Antonym Room/Panel_stressed_desserts + colors: black + tag: midblack + STAR: + id: Antonym Room/Panel_star_rats + colors: black + tag: midblack + TAME: + id: Antonym Room/Panel_tame_mate + colors: black + tag: topblack + CAT: + id: Antonym Room/Panel_cat_tack + colors: black + tag: topblack + doors: + Shortcut to Hedge Maze: + id: Symmetry Room Area Doors/Door_bye_hi + group: Hedge Maze Doors + panels: + - BYE + Hedge Maze: + entrances: + Hub Room: + room: Hub Room + door: Shortcut to Hedge Maze + Color Hallways: True + The Agreeable: + room: The Agreeable + door: Shortcut to Hedge Maze + The Perceptive: True + The Observant: + door: Observant Entrance + Owl Hallway: + room: Owl Hallway + door: Shortcut to Hedge Maze + Roof: True + panels: + DOWN: + id: Maze Room/Panel_down_up + colors: black + tag: botblack + HIDE (1): + id: Maze Room/Panel_hide_seek + colors: black + tag: botblack + HIDE (2): + id: Maze Room/Panel_hide_seek_2 + colors: black + tag: botblack + HIDE (3): + id: Maze Room/Panel_hide_seek_3 + colors: black + tag: botblack + MASTERY (1): + id: Master Room/Panel_mastery_mastery5 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + MASTERY (2): + id: Master Room/Panel_mastery_mastery9 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + PATH (1): + id: Maze Room/Panel_path_lock + colors: green + tag: forbid + PATH (2): + id: Maze Room/Panel_path_knot + colors: green + tag: forbid + PATH (3): + id: Maze Room/Panel_path_lost + colors: green + tag: forbid + PATH (4): + id: Maze Room/Panel_path_open + colors: green + tag: forbid + PATH (5): + id: Maze Room/Panel_path_help + colors: green + tag: forbid + PATH (6): + id: Maze Room/Panel_path_hunt + colors: green + tag: forbid + PATH (7): + id: Maze Room/Panel_path_nest + colors: green + tag: forbid + PATH (8): + id: Maze Room/Panel_path_look + colors: green + tag: forbid + REFLOW: + id: Maze Room/Panel_reflow_flower + colors: yellow + tag: midyellow + LEAP: + id: Maze Room/Panel_leap_jump + tag: botwhite + doors: + Perceptive Entrance: + id: Maze Area Doors/Door_maze_maze + item_name: The Perceptive - Entrance + group: Hedge Maze Doors + panels: + - DOWN + Painting Shortcut: + painting_id: garden_painting_tower2 + item_name: Starting Room - Hedge Maze Painting + skip_location: True + panels: + - DOWN + Observant Entrance: + id: + - Maze Area Doors/Door_look_room_1 + - Maze Area Doors/Door_look_room_2 + - Maze Area Doors/Door_look_room_3 + skip_location: True + item_name: The Observant - Entrance + group: Observant Doors + panels: + - room: The Perceptive + panel: GAZE + Hide and Seek: + skip_item: True + location_name: Hedge Maze - Hide and Seek + include_reduce: True + panels: + - HIDE (1) + - HIDE (2) + - HIDE (3) + - room: Outside The Agreeable + panel: HIDE + The Perceptive: + entrances: + Starting Room: + room: Hedge Maze + door: Painting Shortcut + painting: True + Hedge Maze: + room: Hedge Maze + door: Perceptive Entrance + panels: + Achievement: + id: Countdown Panels/Panel_perceptive_perceptive + colors: green + tag: forbid + check: True + achievement: The Perceptive + GAZE: + id: Maze Room/Panel_look_look + check: True + exclude_reduce: True + tag: botwhite + paintings: + - id: garden_painting_tower + orientation: north + The Fearless (First Floor): + entrances: + The Perceptive: True + panels: + NAPS: + id: Naps Room/Panel_naps_span + colors: black + tag: midblack + TEAM: + id: Naps Room/Panel_team_meet + colors: black + tag: topblack + TEEM: + id: Naps Room/Panel_teem_meat + colors: black + tag: topblack + IMPATIENT: + id: Naps Room/Panel_impatient_doctor + colors: black + tag: bot black black + EAT: + id: Naps Room/Panel_eat_tea + colors: black + tag: topblack + doors: + Second Floor: + id: Naps Room Doors/Door_hider_5 + location_name: The Fearless - First Floor Puzzles + group: Fearless Doors + panels: + - NAPS + - TEAM + - TEEM + - IMPATIENT + - EAT + progression: + Progressive Fearless: + - Second Floor + - room: The Fearless (Second Floor) + door: Third Floor + The Fearless (Second Floor): + entrances: + The Fearless (First Floor): + room: The Fearless (First Floor) + door: Second Floor + panels: + NONE: + id: Naps Room/Panel_one_many + colors: black + tag: bot black top white + SUM: + id: Naps Room/Panel_one_none + colors: black + tag: top white bot black + FUNNY: + id: Naps Room/Panel_funny_enough + colors: black + tag: topblack + MIGHT: + id: Naps Room/Panel_might_time + colors: black + tag: topblack + SAFE: + id: Naps Room/Panel_safe_face + colors: black + tag: topblack + SAME: + id: Naps Room/Panel_same_mace + colors: black + tag: topblack + CAME: + id: Naps Room/Panel_came_make + colors: black + tag: topblack + doors: + Third Floor: + id: + - Naps Room Doors/Door_hider_1b2 + - Naps Room Doors/Door_hider_new1 + location_name: The Fearless - Second Floor Puzzles + group: Fearless Doors + panels: + - NONE + - SUM + - FUNNY + - MIGHT + - SAFE + - SAME + - CAME + The Fearless: + entrances: + The Fearless (First Floor): + room: The Fearless (Second Floor) + door: Third Floor + panels: + Achievement: + id: Countdown Panels/Panel_fearless_fearless + colors: black + tag: forbid + check: True + achievement: The Fearless + EASY: + id: Naps Room/Panel_easy_soft + colors: black + tag: bot black black + SOMETIMES: + id: Naps Room/Panel_sometimes_always + colors: black + tag: bot black black + DARK: + id: Naps Room/Panel_dark_extinguish + colors: black + tag: bot black black + EVEN: + id: Naps Room/Panel_even_ordinary + colors: black + tag: bot black black + The Observant: + entrances: + Hedge Maze: + room: Hedge Maze + door: Observant Entrance + The Incomparable: True + panels: + Achievement: + id: Countdown Panels/Panel_observant_observant + colors: green + check: True + tag: forbid + required_door: + door: Stairs + achievement: The Observant + BACK: + id: Look Room/Panel_four_back + colors: green + tag: forbid + SIDE: + id: Look Room/Panel_four_side + colors: green + tag: forbid + BACKSIDE: + id: Backside Room/Panel_backside_2 + tag: midwhite + required_door: + door: Backside Door + STAIRS: + id: Look Room/Panel_six_stairs + colors: green + tag: forbid + WAYS: + id: Look Room/Panel_four_ways + colors: green + tag: forbid + "ON": + id: Look Room/Panel_two_on + colors: green + tag: forbid + UP: + id: Look Room/Panel_two_up + colors: green + tag: forbid + SWIMS: + id: Look Room/Panel_five_swims + colors: green + tag: forbid + UPSTAIRS: + id: Look Room/Panel_eight_upstairs + colors: green + tag: forbid + required_door: + door: Stairs + TOIL: + id: Look Room/Panel_blue_toil + colors: green + tag: forbid + required_door: + door: Stairs + STOP: + id: Look Room/Panel_four_stop + colors: green + tag: forbid + required_door: + door: Stairs + TOP: + id: Look Room/Panel_aqua_top + colors: green + tag: forbid + required_door: + door: Stairs + HI: + id: Look Room/Panel_blue_hi + colors: green + tag: forbid + required_door: + door: Stairs + HI (2): + id: Look Room/Panel_blue_hi2 + colors: green + tag: forbid + required_door: + door: Stairs + "31": + id: Look Room/Panel_numbers_31 + colors: green + tag: forbid + required_door: + door: Stairs + "52": + id: Look Room/Panel_numbers_52 + colors: green + tag: forbid + required_door: + door: Stairs + OIL: + id: Look Room/Panel_aqua_oil + colors: green + tag: forbid + required_door: + door: Stairs + BACKSIDE (GREEN): + id: Look Room/Panel_eight_backside + colors: green + tag: forbid + required_door: + door: Stairs + SIDEWAYS: + id: Look Room/Panel_eight_sideways + colors: green + tag: forbid + required_door: + door: Stairs + doors: + Backside Door: + id: Maze Area Doors/Door_backside + group: Backside Doors + panels: + - BACK + - SIDE + Stairs: + id: Maze Area Doors/Door_stairs + group: Observant Doors + panels: + - STAIRS + The Incomparable: + entrances: + The Observant: True # Assuming that access to The Observant includes access to the right entrance + Eight Room: True + Eight Alcove: + door: Eight Painting + panels: + Achievement: + id: Countdown Panels/Panel_incomparable_incomparable + colors: blue + check: True + tag: forbid + required_room: + - Elements Area + - Courtyard + - Eight Room + achievement: The Incomparable + A (One): + id: Strand Room/Panel_blank_a + colors: blue + tag: forbid + A (Two): + id: Strand Room/Panel_a_an + colors: blue + tag: forbid + A (Three): + id: Strand Room/Panel_a_and + colors: blue + tag: forbid + A (Four): + id: Strand Room/Panel_a_sand + colors: blue + tag: forbid + A (Five): + id: Strand Room/Panel_a_stand + colors: blue + tag: forbid + A (Six): + id: Strand Room/Panel_a_strand + colors: blue + tag: forbid + I (One): + id: Strand Room/Panel_blank_i + colors: blue + tag: forbid + I (Two): + id: Strand Room/Panel_i_in + colors: blue + tag: forbid + I (Three): + id: Strand Room/Panel_i_sin + colors: blue + tag: forbid + I (Four): + id: Strand Room/Panel_i_sing + colors: blue + tag: forbid + I (Five): + id: Strand Room/Panel_i_sting + colors: blue + tag: forbid + I (Six): + id: Strand Room/Panel_i_string + colors: blue + tag: forbid + I (Seven): + id: Strand Room/Panel_i_strings + colors: blue + tag: forbid + doors: + Eight Painting: + id: Red Blue Purple Room Area Doors/Door_a_strands + location_name: Giant Sevens + group: Observant Doors + panels: + - I (Seven) + - room: Courtyard + panel: I + - room: Elements Area + panel: A + Eight Alcove: + entrances: + The Incomparable: + room: The Incomparable + door: Eight Painting + paintings: + - id: eight_painting2 + orientation: north + Eight Room: + entrances: + Eight Alcove: + painting: True + panels: + Eight Back: + id: Strand Room/Panel_i_starling + colors: blue + tag: forbid + Eight Front: + id: Strand Room/Panel_i_starting + colors: blue + tag: forbid + Nine: + id: Strand Room/Panel_i_startling + colors: blue + tag: forbid + paintings: + - id: eight_painting + orientation: south + exit_only: True + required: True + Orange Tower: + # This is a special, meta-ish room. + entrances: + Menu: True + doors: + Second Floor: + id: Tower Room Area Doors/Door_level_1 + skip_location: True + panels: + - room: Orange Tower First Floor + panel: DADS + ALE + Third Floor: + id: Tower Room Area Doors/Door_level_2 + skip_location: True + panels: + - room: Orange Tower First Floor + panel: DADS + ALE + - room: Outside The Undeterred + panel: ART + ART + Fourth Floor: + id: Tower Room Area Doors/Door_level_3 + skip_location: True + panels: + - room: Orange Tower First Floor + panel: DADS + ALE + - room: Outside The Undeterred + panel: ART + ART + - room: Orange Tower Third Floor + panel: DEER + WREN + Fifth Floor: + id: Tower Room Area Doors/Door_level_4 + skip_location: True + panels: + - room: Orange Tower First Floor + panel: DADS + ALE + - room: Outside The Undeterred + panel: ART + ART + - room: Orange Tower Third Floor + panel: DEER + WREN + - room: Orange Tower Fourth Floor + panel: LEARNS + UNSEW + Sixth Floor: + id: Tower Room Area Doors/Door_level_5 + skip_location: True + panels: + - room: Orange Tower First Floor + panel: DADS + ALE + - room: Outside The Undeterred + panel: ART + ART + - room: Orange Tower Third Floor + panel: DEER + WREN + - room: Orange Tower Fourth Floor + panel: LEARNS + UNSEW + - room: Orange Tower Fifth Floor + panel: DRAWL + RUNS + Seventh Floor: + id: Tower Room Area Doors/Door_level_6 + skip_location: True + panels: + - room: Orange Tower First Floor + panel: DADS + ALE + - room: Outside The Undeterred + panel: ART + ART + - room: Orange Tower Third Floor + panel: DEER + WREN + - room: Orange Tower Fourth Floor + panel: LEARNS + UNSEW + - room: Orange Tower Fifth Floor + panel: DRAWL + RUNS + - room: Owl Hallway + panel: READS + RUST + progression: + Progressive Orange Tower: + - Second Floor + - Third Floor + - Fourth Floor + - Fifth Floor + - Sixth Floor + - Seventh Floor + Orange Tower First Floor: + entrances: + Hub Room: + door: Shortcut to Hub Room + Outside The Wanderer: + room: Outside The Wanderer + door: Tower Entrance + Orange Tower Second Floor: + room: Orange Tower + door: Second Floor + Directional Gallery: + door: Salt Pepper Door + Roof: True # through the sunwarp + panels: + SECRET: + id: Shuffle Room/Panel_secret_secret + tag: midwhite + DADS + ALE: + id: Tower Room/Panel_dads_ale_dead_1 + colors: orange + check: True + tag: midorange + SALT: + id: Backside Room/Panel_salt_pepper + colors: black + tag: botblack + doors: + Shortcut to Hub Room: + id: Shuffle Room Area Doors/Door_secret_secret + group: Orange Tower First Floor - Shortcuts + panels: + - SECRET + Salt Pepper Door: + id: Count Up Room Area Doors/Door_salt_pepper + location_name: Orange Tower First Floor - Salt Pepper Door + group: Orange Tower First Floor - Shortcuts + panels: + - SALT + - room: Directional Gallery + panel: PEPPER + Orange Tower Second Floor: + entrances: + Orange Tower First Floor: + room: Orange Tower + door: Second Floor + Orange Tower Third Floor: + room: Orange Tower + door: Third Floor + Outside The Undeterred: True + Orange Tower Third Floor: + entrances: + Knight Night Exit: + room: Knight Night (Final) + door: Exit + Orange Tower Second Floor: + room: Orange Tower + door: Third Floor + Orange Tower Fourth Floor: + room: Orange Tower + door: Fourth Floor + Hot Crusts Area: True # sunwarp + Bearer Side Area: # This is complicated because of The Bearer's topology + room: Bearer Side Area + door: Shortcut to Tower + Rhyme Room (Smiley): + door: Rhyme Room Entrance + panels: + RED: + id: Color Arrow Room/Panel_red_afar + tag: midwhite + required_door: + door: Red Barrier + DEER + WREN: + id: Tower Room/Panel_deer_wren_rats_3 + colors: orange + check: True + tag: midorange + doors: + Red Barrier: + id: Color Arrow Room Doors/Door_red_6 + group: Color Hunt Barriers + skip_location: True + panels: + - room: Champion's Rest + panel: RED + Rhyme Room Entrance: + id: Double Room Area Doors/Door_room_entry_stairs2 + skip_location: True + group: Rhyme Room Doors + panels: + - room: The Tenacious + panel: LEVEL (Black) + - room: The Tenacious + panel: RACECAR (Black) + - room: The Tenacious + panel: SOLOS (Black) + Orange Barrier: # see note in Outside The Initiated + id: + - Color Arrow Room Doors/Door_orange_hider_1 + - Color Arrow Room Doors/Door_orange_hider_2 + - Color Arrow Room Doors/Door_orange_hider_3 + location_name: Color Hunt - RED and YELLOW + group: Champion's Rest - Color Barriers + item_name: Champion's Rest - Orange Barrier + panels: + - RED + - room: Directional Gallery + panel: YELLOW + paintings: + - id: arrows_painting_6 + orientation: east + - id: flower_painting_5 + orientation: south + Orange Tower Fourth Floor: + entrances: + Orange Tower Third Floor: + room: Orange Tower + door: Fourth Floor + Orange Tower Fifth Floor: + room: Orange Tower + door: Fifth Floor + Hot Crusts Area: + door: Hot Crusts Door + Crossroads: + - room: Crossroads + door: Tower Entrance + - room: Crossroads + door: Tower Back Entrance + Courtyard: True + Roof: True # through the sunwarp + panels: + RUNT: + id: Shuffle Room/Panel_turn_runt2 + colors: yellow + tag: midyellow + RUNT (2): + id: Shuffle Room/Panel_runt3 + colors: + - yellow + - blue + tag: mid yellow blue + LEARNS + UNSEW: + id: Tower Room/Panel_learns_unsew_unrest_4 + colors: orange + check: True + tag: midorange + HOT CRUSTS: + id: Shuffle Room/Panel_shortcuts + colors: yellow + tag: midyellow + IRK HORN: + id: Shuffle Room/Panel_corner + colors: yellow + check: True + exclude_reduce: True + tag: topyellow + doors: + Hot Crusts Door: + id: Shuffle Room Area Doors/Door_hotcrust_shortcuts + panels: + - HOT CRUSTS + Hot Crusts Area: + entrances: + Orange Tower Fourth Floor: + room: Orange Tower Fourth Floor + door: Hot Crusts Door + Roof: True # through the sunwarp + panels: + EIGHT: + id: Backside Room/Panel_eight_eight_3 + tag: midwhite + required_door: + room: Number Hunt + door: Eights + paintings: + - id: smile_painting_8 + orientation: north + Orange Tower Fifth Floor: + entrances: + Orange Tower Fourth Floor: + room: Orange Tower + door: Fifth Floor + Orange Tower Sixth Floor: + room: Orange Tower + door: Sixth Floor + Cellar: + room: Room Room + door: Shortcut to Fifth Floor + Welcome Back Area: + door: Welcome Back + Art Gallery: + room: Art Gallery + door: Exit + The Bearer: + room: Art Gallery + door: Exit + Outside The Initiated: + room: Art Gallery + door: Exit + panels: + SIZE (Small): + id: Entry Room/Panel_size_small + colors: gray + tag: forbid + SIZE (Big): + id: Entry Room/Panel_size_big + colors: gray + tag: forbid + DRAWL + RUNS: + id: Tower Room/Panel_drawl_runs_enter_5 + colors: orange + check: True + tag: midorange + NINE: + id: Backside Room/Panel_nine_nine_2 + tag: midwhite + required_door: + room: Number Hunt + door: Nines + SUMMER: + id: Entry Room/Panel_summer_summer + tag: midwhite + AUTUMN: + id: Entry Room/Panel_autumn_autumn + tag: midwhite + SPRING: + id: Entry Room/Panel_spring_spring + tag: midwhite + PAINTING (1): + id: Panel Room/Panel_painting_flower + colors: green + tag: forbid + required_room: Cellar + PAINTING (2): + id: Panel Room/Panel_painting_eye + colors: green + tag: forbid + required_room: Cellar + PAINTING (3): + id: Panel Room/Panel_painting_snowman + colors: green + tag: forbid + required_room: Cellar + PAINTING (4): + id: Panel Room/Panel_painting_owl + colors: green + tag: forbid + required_room: Cellar + PAINTING (5): + id: Panel Room/Panel_painting_panda + colors: green + tag: forbid + required_room: Cellar + ROOM: + id: Panel Room/Panel_room_stairs + colors: gray + tag: forbid + required_room: Cellar + doors: + Welcome Back: + id: Entry Room Area Doors/Door_sizes + group: Welcome Back Doors + panels: + - SIZE (Small) + - SIZE (Big) + paintings: + - id: hi_solved_painting3 + orientation: south + - id: hi_solved_painting2 + orientation: south + - id: east_afar + orientation: north + Orange Tower Sixth Floor: + entrances: + Orange Tower Fifth Floor: + room: Orange Tower + door: Sixth Floor + The Scientific: + painting: True + paintings: + - id: arrows_painting_10 + orientation: east + - id: owl_painting_3 + orientation: north + - id: clock_painting + orientation: west + - id: scenery_painting_5d_2 + orientation: south + - id: symmetry_painting_b_7 + orientation: north + - id: panda_painting_2 + orientation: south + - id: pencil_painting + orientation: north + - id: colors_painting2 + orientation: south + - id: cherry_painting2 + orientation: east + - id: hi_solved_painting + orientation: west + Orange Tower Seventh Floor: + entrances: + Orange Tower Sixth Floor: + room: Orange Tower + door: Seventh Floor + panels: + THE END: + id: EndPanel/Panel_end_end + check: True + tag: forbid + non_counting: True + THE MASTER: + # We will set up special rules for this in code. + id: Countdown Panels/Panel_master_master + check: True + tag: forbid + MASTERY: + # This is the MASTERY on the other side of THE FEARLESS. It can only be + # accessed by jumping from the top of the tower. + id: Master Room/Panel_mastery_mastery8 + tag: midwhite + required_door: + door: Mastery + doors: + Mastery: + id: + - Master Room Doors/Door_tower_down + - Master Room Doors/Door_master_master + - Master Room Doors/Door_master_master_2 + - Master Room Doors/Door_master_master_3 + - Master Room Doors/Door_master_master_4 + - Master Room Doors/Door_master_master_5 + - Master Room Doors/Door_master_master_6 + - Master Room Doors/Door_master_master_10 + - Master Room Doors/Door_master_master_11 + - Master Room Doors/Door_master_master_12 + - Master Room Doors/Door_master_master_13 + - Master Room Doors/Door_master_master_14 + - Master Room Doors/Door_master_master_15 + - Master Room Doors/Door_master_down + - Master Room Doors/Door_master_down2 + skip_location: True + panels: + - THE MASTER + Mastery Panels: + skip_item: True + location_name: Mastery Panels + panels: + - room: Room Room + panel: MASTERY + - room: The Steady (Topaz) + panel: MASTERY + - room: Orange Tower Basement + panel: MASTERY + - room: Arrow Garden + panel: MASTERY + - room: Hedge Maze + panel: MASTERY (1) + - room: Roof + panel: MASTERY (1) + - room: Roof + panel: MASTERY (2) + - MASTERY + - room: Hedge Maze + panel: MASTERY (2) + - room: Roof + panel: MASTERY (3) + - room: Roof + panel: MASTERY (4) + - room: Roof + panel: MASTERY (5) + - room: Elements Area + panel: MASTERY + - room: Pilgrim Antechamber + panel: MASTERY + - room: Roof + panel: MASTERY (6) + paintings: + - id: map_painting2 + orientation: north + enter_only: True # otherwise you might just skip the whole game! + req_blocked_when_no_doors: True # owl hallway in vanilla doors + Roof: + entrances: + Orange Tower Seventh Floor: True + Crossroads: + room: Crossroads + door: Roof Access + panels: + MASTERY (1): + id: Master Room/Panel_mastery_mastery6 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + MASTERY (2): + id: Master Room/Panel_mastery_mastery7 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + MASTERY (3): + id: Master Room/Panel_mastery_mastery10 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + MASTERY (4): + id: Master Room/Panel_mastery_mastery11 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + MASTERY (5): + id: Master Room/Panel_mastery_mastery12 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + MASTERY (6): + id: Master Room/Panel_mastery_mastery15 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + STAIRCASE: + id: Open Areas/Panel_staircase + tag: midwhite + Orange Tower Basement: + entrances: + Orange Tower Sixth Floor: + room: Orange Tower Seventh Floor + door: Mastery + panels: + MASTERY: + id: Master Room/Panel_mastery_mastery3 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + THE LIBRARY: + id: EndPanel/Panel_library + check: True + tag: forbid + non_counting: True + paintings: + - id: arrows_painting_11 + orientation: east + req_blocked_when_no_doors: True # owl hallway in vanilla doors + Courtyard: + entrances: + Roof: True + Orange Tower Fourth Floor: True + Arrow Garden: + painting: True + Starting Room: + door: Painting Shortcut + painting: True + Yellow Backside Area: + room: First Second Third Fourth + door: Backside Door + The Colorful (White): True + panels: + I: + id: Strand Room/Panel_i_staring + colors: blue + tag: forbid + GREEN: + id: Color Arrow Room/Panel_green_afar + tag: midwhite + required_door: + door: Green Barrier + PINECONE: + id: Shuffle Room/Panel_pinecone_pine + colors: brown + tag: botbrown + ACORN: + id: Shuffle Room/Panel_acorn_oak + colors: brown + tag: botbrown + doors: + Painting Shortcut: + painting_id: flower_painting_8 + item_name: Starting Room - Flower Painting + skip_location: True + panels: + - room: First Second Third Fourth + panel: FIRST + - room: First Second Third Fourth + panel: SECOND + - room: First Second Third Fourth + panel: THIRD + - room: First Second Third Fourth + panel: FOURTH + Green Barrier: + id: Color Arrow Room Doors/Door_green_5 + group: Color Hunt Barriers + skip_location: True + panels: + - room: Champion's Rest + panel: GREEN + paintings: + - id: flower_painting_7 + orientation: north + Yellow Backside Area: + entrances: + Courtyard: + room: First Second Third Fourth + door: Backside Door + Roof: True + panels: + BACKSIDE: + id: Backside Room/Panel_backside_3 + tag: midwhite + NINE: + id: Backside Room/Panel_nine_nine_8 + tag: midwhite + required_door: + room: Number Hunt + door: Nines + paintings: + - id: blueman_painting + orientation: east + First Second Third Fourth: + # We are separating this door + its panels into its own room because they + # are accessible from two distinct regions (Courtyard and Yellow Backside + # Area). We need to do this because painting shuffle makes it possible to + # have access to Yellow Backside Area without having access to Courtyard, + # and we want it to still be in logic to solve these panels. + entrances: + Courtyard: True + Yellow Backside Area: True + panels: + FIRST: + id: Backside Room/Panel_first_first + tag: midwhite + SECOND: + id: Backside Room/Panel_second_second + tag: midwhite + THIRD: + id: Backside Room/Panel_third_third + tag: midwhite + FOURTH: + id: Backside Room/Panel_fourth_fourth + tag: midwhite + doors: + Backside Door: + id: Count Up Room Area Doors/Door_yellow_backside + group: Backside Doors + location_name: Courtyard - FIRST, SECOND, THIRD, FOURTH + item_name: Courtyard - Backside Door + panels: + - FIRST + - SECOND + - THIRD + - FOURTH + The Colorful (White): + entrances: + Courtyard: True + The Colorful (Black): + door: Progress Door + panels: + BEGIN: + id: Doorways Room/Panel_begin_start + tag: botwhite + doors: + Progress Door: + id: Doorway Room Doors/Door_white + item_name: The Colorful - White Door + group: Colorful Doors + location_name: The Colorful - White + panels: + - BEGIN + The Colorful (Black): + entrances: + The Colorful (White): + room: The Colorful (White) + door: Progress Door + The Colorful (Red): + door: Progress Door + panels: + FOUND: + id: Doorways Room/Panel_found_lost + colors: black + tag: botblack + doors: + Progress Door: + id: Doorway Room Doors/Door_black + item_name: The Colorful - Black Door + location_name: The Colorful - Black + group: Colorful Doors + panels: + - FOUND + The Colorful (Red): + entrances: + The Colorful (Black): + room: The Colorful (Black) + door: Progress Door + The Colorful (Yellow): + door: Progress Door + panels: + LOAF: + id: Doorways Room/Panel_loaf_crust + colors: red + tag: botred + doors: + Progress Door: + id: Doorway Room Doors/Door_red + item_name: The Colorful - Red Door + location_name: The Colorful - Red + group: Colorful Doors + panels: + - LOAF + The Colorful (Yellow): + entrances: + The Colorful (Red): + room: The Colorful (Red) + door: Progress Door + The Colorful (Blue): + door: Progress Door + panels: + CREAM: + id: Doorways Room/Panel_eggs_breakfast + colors: yellow + tag: botyellow + doors: + Progress Door: + id: Doorway Room Doors/Door_yellow + item_name: The Colorful - Yellow Door + location_name: The Colorful - Yellow + group: Colorful Doors + panels: + - CREAM + The Colorful (Blue): + entrances: + The Colorful (Yellow): + room: The Colorful (Yellow) + door: Progress Door + The Colorful (Purple): + door: Progress Door + panels: + SUN: + id: Doorways Room/Panel_sun_sky + colors: blue + tag: botblue + doors: + Progress Door: + id: Doorway Room Doors/Door_blue + item_name: The Colorful - Blue Door + location_name: The Colorful - Blue + group: Colorful Doors + panels: + - SUN + The Colorful (Purple): + entrances: + The Colorful (Blue): + room: The Colorful (Blue) + door: Progress Door + The Colorful (Orange): + door: Progress Door + panels: + SPOON: + id: Doorways Room/Panel_teacher_substitute + colors: purple + tag: botpurple + doors: + Progress Door: + id: Doorway Room Doors/Door_purple + item_name: The Colorful - Purple Door + location_name: The Colorful - Purple + group: Colorful Doors + panels: + - SPOON + The Colorful (Orange): + entrances: + The Colorful (Purple): + room: The Colorful (Purple) + door: Progress Door + The Colorful (Green): + door: Progress Door + panels: + LETTERS: + id: Doorways Room/Panel_walnuts_orange + colors: orange + tag: botorange + doors: + Progress Door: + id: Doorway Room Doors/Door_orange + item_name: The Colorful - Orange Door + location_name: The Colorful - Orange + group: Colorful Doors + panels: + - LETTERS + The Colorful (Green): + entrances: + The Colorful (Orange): + room: The Colorful (Orange) + door: Progress Door + The Colorful (Brown): + door: Progress Door + panels: + WALLS: + id: Doorways Room/Panel_path_i + colors: green + tag: forbid + doors: + Progress Door: + id: Doorway Room Doors/Door_green + item_name: The Colorful - Green Door + location_name: The Colorful - Green + group: Colorful Doors + panels: + - WALLS + The Colorful (Brown): + entrances: + The Colorful (Green): + room: The Colorful (Green) + door: Progress Door + The Colorful (Gray): + door: Progress Door + panels: + IRON: + id: Doorways Room/Panel_iron_rust + colors: brown + tag: botbrown + doors: + Progress Door: + id: Doorway Room Doors/Door_brown + item_name: The Colorful - Brown Door + location_name: The Colorful - Brown + group: Colorful Doors + panels: + - IRON + The Colorful (Gray): + entrances: + The Colorful (Brown): + room: The Colorful (Brown) + door: Progress Door + The Colorful: + door: Progress Door + panels: + OBSTACLE: + id: Doorways Room/Panel_obstacle_door + colors: gray + tag: forbid + doors: + Progress Door: + id: + - Doorway Room Doors/Door_gray + - Doorway Room Doors/Door_gray2 # See comment below + item_name: The Colorful - Gray Door + location_name: The Colorful - Gray + group: Colorful Doors + panels: + - OBSTACLE + The Colorful: + # The set of required_doors in the achievement panel should prevent + # generation from asking you to solve The Colorful before opening all of the + # doors. Access from the roof is included so that the painting here could be + # an entrance. The client will have to be hardcoded to not open the door to + # the achievement until all of the doors are open, whether by solving the + # panels or through receiving items. + entrances: + The Colorful (Gray): + room: The Colorful (Gray) + door: Progress Door + Roof: True + panels: + Achievement: + id: Countdown Panels/Panel_colorful_colorful + check: True + tag: forbid + required_door: + - room: The Colorful (White) + door: Progress Door + - room: The Colorful (Black) + door: Progress Door + - room: The Colorful (Red) + door: Progress Door + - room: The Colorful (Yellow) + door: Progress Door + - room: The Colorful (Blue) + door: Progress Door + - room: The Colorful (Purple) + door: Progress Door + - room: The Colorful (Orange) + door: Progress Door + - room: The Colorful (Green) + door: Progress Door + - room: The Colorful (Brown) + door: Progress Door + - room: The Colorful (Gray) + door: Progress Door + achievement: The Colorful + paintings: + - id: arrows_painting_12 + orientation: north + Welcome Back Area: + entrances: + Starting Room: + door: Shortcut to Starting Room + Hub Room: True + Outside The Wondrous: True + Outside The Undeterred: True + Outside The Initiated: True + Outside The Agreeable: True + Outside The Wanderer: True + Eight Alcove: True + Orange Tower Fifth Floor: + room: Orange Tower Fifth Floor + door: Welcome Back + Challenge Room: + room: Challenge Room + door: Welcome Door + panels: + WELCOME BACK: + id: Entry Room/Panel_return_return + tag: midwhite + SECRET: + id: Entry Room/Panel_secret_secret + tag: midwhite + CLOCKWISE: + id: Shuffle Room/Panel_clockwise_counterclockwise + colors: black + check: True + exclude_reduce: True + tag: botblack + doors: + Shortcut to Starting Room: + id: Entry Room Area Doors/Door_return_return + group: Welcome Back Doors + include_reduce: True + panels: + - WELCOME BACK + Owl Hallway: + entrances: + Hidden Room: + painting: True + Hedge Maze: + door: Shortcut to Hedge Maze + Orange Tower Sixth Floor: + painting: True + panels: + STRAYS: + id: Maze Room/Panel_strays_maze + colors: purple + tag: toppurp + READS + RUST: + id: Tower Room/Panel_reads_rust_lawns_6 + colors: orange + check: True + tag: midorange + doors: + Shortcut to Hedge Maze: + id: Maze Area Doors/Door_strays_maze + group: Hedge Maze Doors + panels: + - STRAYS + paintings: + - id: arrows_painting_8 + orientation: south + - id: maze_painting_2 + orientation: north + - id: owl_painting_2 + orientation: south + required_when_no_doors: True + - id: clock_painting_4 + orientation: north + Outside The Initiated: + entrances: + Hub Room: + door: Shortcut to Hub Room + Knight Night Exit: + room: Knight Night (Final) + door: Exit + Orange Tower Third Floor: True # sunwarp + Orange Tower Fifth Floor: + room: Art Gallery + door: Exit + panels: + SEVEN (1): + id: Backside Room/Panel_seven_seven_5 + tag: midwhite + required_door: + room: Number Hunt + door: Sevens + SEVEN (2): + id: Backside Room/Panel_seven_seven_6 + tag: midwhite + required_door: + room: Number Hunt + door: Sevens + EIGHT: + id: Backside Room/Panel_eight_eight_7 + tag: midwhite + required_door: + room: Number Hunt + door: Eights + NINE: + id: Backside Room/Panel_nine_nine_4 + tag: midwhite + required_door: + room: Number Hunt + door: Nines + BLUE: + id: Color Arrow Room/Panel_blue_afar + tag: midwhite + required_door: + door: Blue Barrier + ORANGE: + id: Color Arrow Room/Panel_orange_afar + tag: midwhite + required_door: + door: Orange Barrier + UNCOVER: + id: Appendix Room/Panel_discover_recover + colors: purple + tag: midpurp + OXEN: + id: Rhyme Room/Panel_locked_knocked + colors: purple + tag: midpurp + BACKSIDE: + id: Backside Room/Panel_backside_1 + tag: midwhite + The Optimistic: + id: Countdown Panels/Panel_optimistic_optimistic + check: True + tag: forbid + required_door: + door: Backsides + achievement: The Optimistic + PAST: + id: Shuffle Room/Panel_past_present + colors: brown + tag: botbrown + FUTURE: + id: Shuffle Room/Panel_future_present + colors: + - brown + - black + tag: bot brown black + FUTURE (2): + id: Shuffle Room/Panel_future_past + colors: black + tag: botblack + PAST (2): + id: Shuffle Room/Panel_past_future + colors: black + tag: botblack + PRESENT: + id: Shuffle Room/Panel_past_past + colors: + - brown + - black + tag: bot brown black + SMILE: + id: Open Areas/Panel_smile_smile + tag: midwhite + ANGERED: + id: Open Areas/Panel_angered_enraged + colors: + - yellow + tag: syn anagram + copy_to_sign: sign18 + VOTE: + id: Open Areas/Panel_vote_veto + colors: + - yellow + - black + tag: ant anagram + copy_to_sign: sign17 + doors: + Shortcut to Hub Room: + id: Appendix Room Area Doors/Door_recover_discover + panels: + - UNCOVER + Blue Barrier: + id: Color Arrow Room Doors/Door_blue_3 + group: Color Hunt Barriers + skip_location: True + panels: + - room: Champion's Rest + panel: BLUE + Orange Barrier: + id: Color Arrow Room Doors/Door_orange_3 + group: Color Hunt Barriers + skip_location: True + panels: + - room: Champion's Rest + panel: ORANGE + Initiated Entrance: + id: Red Blue Purple Room Area Doors/Door_locked_knocked + item_name: The Initiated - Entrance + panels: + - OXEN + # These would be more appropriate in Champion's Rest, but as currently + # implemented, locations need to include at least one panel from the + # containing region. + Green Barrier: + id: Color Arrow Room Doors/Door_green_hider_1 + location_name: Color Hunt - BLUE and YELLOW + item_name: Champion's Rest - Green Barrier + group: Champion's Rest - Color Barriers + panels: + - BLUE + - room: Directional Gallery + panel: YELLOW + Purple Barrier: + id: + - Color Arrow Room Doors/Door_purple_hider_1 + - Color Arrow Room Doors/Door_purple_hider_2 + - Color Arrow Room Doors/Door_purple_hider_3 + location_name: Color Hunt - RED and BLUE + item_name: Champion's Rest - Purple Barrier + group: Champion's Rest - Color Barriers + panels: + - BLUE + - room: Orange Tower Third Floor + panel: RED + Entrance: + id: + - Color Arrow Room Doors/Door_all_hider_1 + - Color Arrow Room Doors/Door_all_hider_2 + - Color Arrow Room Doors/Door_all_hider_3 + location_name: Color Hunt - GREEN, ORANGE and PURPLE + item_name: Champion's Rest - Entrance + panels: + - ORANGE + - room: Courtyard + panel: GREEN + - room: Outside The Agreeable + panel: PURPLE + Backsides: + event: True + panels: + - room: The Observant + panel: BACKSIDE + - room: Yellow Backside Area + panel: BACKSIDE + - room: Directional Gallery + panel: BACKSIDE + - room: The Bearer + panel: BACKSIDE + paintings: + - id: clock_painting_5 + orientation: east + - id: smile_painting_1 + orientation: north + The Initiated: + entrances: + Outside The Initiated: + room: Outside The Initiated + door: Initiated Entrance + panels: + Achievement: + id: Countdown Panels/Panel_illuminated_initiated + colors: purple + tag: forbid + check: True + achievement: The Initiated + DAUGHTER: + id: Rhyme Room/Panel_daughter_laughter + colors: purple + tag: midpurp + START: + id: Rhyme Room/Panel_move_love + colors: purple + tag: double midpurp + subtag: left + link: change STARS + STARE: + id: Rhyme Room/Panel_stove_love + colors: purple + tag: double midpurp + subtag: right + link: change STARS + HYPE: + id: Rhyme Room/Panel_scope_type + colors: purple + tag: midpurp and rhyme + copy_to_sign: sign16 + ABYSS: + id: Rhyme Room/Panel_abyss_this + colors: purple + tag: toppurp + SWEAT: + id: Rhyme Room/Panel_sweat_great + colors: purple + tag: double midpurp + subtag: left + link: change GREAT + BEAT: + id: Rhyme Room/Panel_beat_great + colors: purple + tag: double midpurp + subtag: right + link: change GREAT + ALUMNI: + id: Rhyme Room/Panel_alumni_hi + colors: purple + tag: midpurp and rhyme + copy_to_sign: sign14 + PATS: + id: Rhyme Room/Panel_wrath_path + colors: purple + tag: midpurp and rhyme + copy_to_sign: sign15 + KNIGHT: + id: Rhyme Room/Panel_knight_write + colors: purple + tag: double toppurp + subtag: left + link: change WRITE + BYTE: + id: Rhyme Room/Panel_byte_write + colors: purple + tag: double toppurp + subtag: right + link: change WRITE + MAIM: + id: Rhyme Room/Panel_maim_same + colors: purple + tag: toppurp + MORGUE: + id: Rhyme Room/Panel_chair_bear + colors: purple + tag: purple rhyme change stack + subtag: top + link: prcs CYBORG + CHAIR: + id: Rhyme Room/Panel_bare_bear + colors: purple + tag: toppurp + HUMAN: + id: Rhyme Room/Panel_cost_most + colors: purple + tag: purple rhyme change stack + subtag: bot + link: prcs CYBORG + BED: + id: Rhyme Room/Panel_bed_dead + colors: purple + tag: toppurp + The Traveled: + entrances: + Hub Room: + room: Hub Room + door: Traveled Entrance + Color Hallways: + door: Color Hallways Entrance + panels: + Achievement: + id: Countdown Panels/Panel_traveled_traveled + required_room: Hub Room + tag: forbid + check: True + achievement: The Traveled + CLOSE: + id: Synonym Room/Panel_close_near + tag: botwhite + COMPOSE: + id: Synonym Room/Panel_compose_write + tag: double botwhite + subtag: left + link: syn WRITE + RECORD: + id: Synonym Room/Panel_record_write + tag: double botwhite + subtag: right + link: syn WRITE + CATEGORY: + id: Synonym Room/Panel_category_type + tag: botwhite + HELLO: + id: Synonym Room/Panel_hello_hi + tag: botwhite + DUPLICATE: + id: Synonym Room/Panel_duplicate_same + tag: double botwhite + subtag: left + link: syn SAME + IDENTICAL: + id: Synonym Room/Panel_identical_same + tag: double botwhite + subtag: right + link: syn SAME + DISTANT: + id: Synonym Room/Panel_distant_far + tag: botwhite + HAY: + id: Synonym Room/Panel_hay_straw + tag: botwhite + GIGGLE: + id: Synonym Room/Panel_giggle_laugh + tag: double botwhite + subtag: left + link: syn LAUGH + CHUCKLE: + id: Synonym Room/Panel_chuckle_laugh + tag: double botwhite + subtag: right + link: syn LAUGH + SNITCH: + id: Synonym Room/Panel_snitch_rat + tag: botwhite + CONCEALED: + id: Synonym Room/Panel_concealed_hidden + tag: botwhite + PLUNGE: + id: Synonym Room/Panel_plunge_fall + tag: double botwhite + subtag: left + link: syn FALL + AUTUMN: + id: Synonym Room/Panel_autumn_fall + tag: double botwhite + subtag: right + link: syn FALL + ROAD: + id: Synonym Room/Panel_growths_warts + tag: botwhite + FOUR: + id: Backside Room/Panel_four_four_4 + tag: midwhite + required_door: + room: Outside The Undeterred + door: Fours + doors: + Color Hallways Entrance: + id: Appendix Room Area Doors/Door_hello_hi + group: Entrance to The Traveled + panels: + - HELLO + Color Hallways: + entrances: + The Traveled: + room: The Traveled + door: Color Hallways Entrance + Outside The Bold: True + Outside The Undeterred: True + Crossroads: True + Hedge Maze: True + Outside The Initiated: True # backside + Directional Gallery: True # backside + Yellow Backside Area: True + The Bearer: + room: The Bearer + door: Backside Door + The Observant: + room: The Observant + door: Backside Door + Outside The Bold: + entrances: + Color Hallways: True + Champion's Rest: + room: Champion's Rest + door: Shortcut to The Steady + The Bearer: + room: The Bearer + door: Shortcut to The Bold + Directional Gallery: + # There is a painting warp here from the Directional Gallery, but it + # only appears when the sixes are revealed. It could be its own item if + # we wanted. + room: Number Hunt + door: Sixes + painting: True + Starting Room: + door: Painting Shortcut + painting: True + Room Room: True # trapdoor + panels: + UNOPEN: + id: Truncate Room/Panel_unopened_open + colors: red + tag: midred + BEGIN: + id: Rock Room/Panel_begin_begin + tag: midwhite + SIX: + id: Backside Room/Panel_six_six_4 + tag: midwhite + required_door: + room: Number Hunt + door: Sixes + NINE: + id: Backside Room/Panel_nine_nine_5 + tag: midwhite + required_door: + room: Number Hunt + door: Nines + LEFT: + id: Shuffle Room/Panel_left_left_2 + tag: midwhite + RIGHT: + id: Shuffle Room/Panel_right_right_2 + tag: midwhite + RISE (Horizon): + id: Open Areas/Panel_rise_horizon + colors: blue + tag: double topblue + subtag: left + link: expand HORIZON + RISE (Sunrise): + id: Open Areas/Panel_rise_sunrise + colors: blue + tag: double topblue + subtag: left + link: expand SUNRISE + ZEN: + id: Open Areas/Panel_son_horizon + colors: blue + tag: double topblue + subtag: right + link: expand HORIZON + SON: + id: Open Areas/Panel_son_sunrise + colors: blue + tag: double topblue + subtag: right + link: expand SUNRISE + STARGAZER: + id: Open Areas/Panel_stargazer_stargazer + tag: midwhite + required_door: + door: Stargazer Door + MOUTH: + id: Cross Room/Panel_mouth_south + colors: purple + tag: midpurp + YEAST: + id: Cross Room/Panel_yeast_east + colors: red + tag: midred + WET: + id: Cross Room/Panel_wet_west + colors: blue + tag: midblue + doors: + Bold Entrance: + id: Red Blue Purple Room Area Doors/Door_unopened_open + item_name: The Bold - Entrance + panels: + - UNOPEN + Painting Shortcut: + painting_id: pencil_painting6 + skip_location: True + item_name: Starting Room - Pencil Painting + panels: + - UNOPEN + Steady Entrance: + id: Rock Room Doors/Door_2 + item_name: The Steady - Entrance + panels: + - BEGIN + Lilac Entrance: + event: True + panels: + - room: The Steady (Rose) + panel: SOAR + Stargazer Door: + event: True + panels: + - RISE (Horizon) + - RISE (Sunrise) + - ZEN + - SON + paintings: + - id: pencil_painting2 + orientation: west + - id: north_missing2 + orientation: north + The Bold: + entrances: + Outside The Bold: + room: Outside The Bold + door: Bold Entrance + panels: + Achievement: + id: Countdown Panels/Panel_emboldened_bold + colors: red + tag: forbid + check: True + achievement: The Bold + FOOT: + id: Truncate Room/Panel_foot_toe + colors: red + tag: botred + NEEDLE: + id: Truncate Room/Panel_needle_eye + colors: red + tag: double botred + subtag: left + link: mero EYE + FACE: + id: Truncate Room/Panel_face_eye + colors: red + tag: double botred + subtag: right + link: mero EYE + SIGN: + id: Truncate Room/Panel_sign_sigh + colors: red + tag: topred + HEARTBREAK: + id: Truncate Room/Panel_heartbreak_brake + colors: red + tag: topred + UNDEAD: + id: Truncate Room/Panel_undead_dead + colors: red + tag: double midred + subtag: left + link: trunc DEAD + DEADLINE: + id: Truncate Room/Panel_deadline_dead + colors: red + tag: double midred + subtag: right + link: trunc DEAD + SUSHI: + id: Truncate Room/Panel_sushi_hi + colors: red + tag: midred + THISTLE: + id: Truncate Room/Panel_thistle_this + colors: red + tag: midred + LANDMASS: + id: Truncate Room/Panel_landmass_mass + colors: red + tag: double midred + subtag: left + link: trunc MASS + MASSACRED: + id: Truncate Room/Panel_massacred_mass + colors: red + tag: double midred + subtag: right + link: trunc MASS + AIRPLANE: + id: Truncate Room/Panel_airplane_plain + colors: red + tag: topred + NIGHTMARE: + id: Truncate Room/Panel_nightmare_knight + colors: red + tag: topred + MOUTH: + id: Truncate Room/Panel_mouth_teeth + colors: red + tag: double botred + subtag: left + link: mero TEETH + SAW: + id: Truncate Room/Panel_saw_teeth + colors: red + tag: double botred + subtag: right + link: mero TEETH + HAND: + id: Truncate Room/Panel_hand_finger + colors: red + tag: botred + Outside The Undeterred: + entrances: + Color Hallways: True + Orange Tower First Floor: True # sunwarp + Orange Tower Second Floor: True + The Artistic (Smiley): True + The Artistic (Panda): True + The Artistic (Apple): True + The Artistic (Lattice): True + Yellow Backside Area: + painting: True + Number Hunt: + door: Number Hunt + Directional Gallery: + room: Directional Gallery + door: Shortcut to The Undeterred + Starting Room: + door: Painting Shortcut + painting: True + panels: + HOLLOW: + id: Hallway Room/Panel_hollow_hollow + tag: midwhite + ART + ART: + id: Tower Room/Panel_art_art_eat_2 + colors: orange + check: True + tag: midorange + PEN: + id: Blue Room/Panel_pen_open + colors: blue + tag: midblue + HUSTLING: + id: Open Areas/Panel_hustling_sunlight + colors: yellow + tag: midyellow + SUNLIGHT: + id: Open Areas/Panel_sunlight_light + colors: red + tag: midred + required_panel: + panel: HUSTLING + LIGHT: + id: Open Areas/Panel_light_bright + colors: purple + tag: midpurp + required_panel: + panel: SUNLIGHT + BRIGHT: + id: Open Areas/Panel_bright_sunny + tag: botwhite + required_panel: + panel: LIGHT + SUNNY: + id: Open Areas/Panel_sunny_rainy + colors: black + tag: botblack + required_panel: + panel: BRIGHT + RAINY: + id: Open Areas/Panel_rainy_rainbow + colors: brown + tag: botbrown + required_panel: + panel: SUNNY + check: True + ZERO: + id: Backside Room/Panel_zero_zero + tag: midwhite + required_door: + room: Number Hunt + door: Zero Door + ONE: + id: Backside Room/Panel_one_one + tag: midwhite + TWO (1): + id: Backside Room/Panel_two_two + tag: midwhite + required_door: + door: Twos + TWO (2): + id: Backside Room/Panel_two_two_2 + tag: midwhite + required_door: + door: Twos + THREE (1): + id: Backside Room/Panel_three_three + tag: midwhite + required_door: + door: Threes + THREE (2): + id: Backside Room/Panel_three_three_2 + tag: midwhite + required_door: + door: Threes + THREE (3): + id: Backside Room/Panel_three_three_3 + tag: midwhite + required_door: + door: Threes + FOUR: + id: Backside Room/Panel_four_four + tag: midwhite + required_door: + door: Fours + doors: + Undeterred Entrance: + id: Red Blue Purple Room Area Doors/Door_pen_open + item_name: The Undeterred - Entrance + panels: + - PEN + Painting Shortcut: + painting_id: + - blueman_painting_3 + - arrows_painting3 + skip_location: True + item_name: Starting Room - Blue Painting + panels: + - PEN + Green Painting: + painting_id: maze_painting_3 + skip_location: True + panels: + - FOUR + Twos: + id: + - Count Up Room Area Doors/Door_two_hider + - Count Up Room Area Doors/Door_two_hider_2 + include_reduce: True + panels: + - ONE + Threes: + id: + - Count Up Room Area Doors/Door_three_hider + - Count Up Room Area Doors/Door_three_hider_2 + - Count Up Room Area Doors/Door_three_hider_3 + location_name: Twos + include_reduce: True + panels: + - TWO (1) + - TWO (2) + Number Hunt: + id: Count Up Room Area Doors/Door_three_unlocked + location_name: Threes + include_reduce: True + panels: + - THREE (1) + - THREE (2) + - THREE (3) + Fours: + id: + - Count Up Room Area Doors/Door_four_hider + - Count Up Room Area Doors/Door_four_hider_2 + - Count Up Room Area Doors/Door_four_hider_3 + - Count Up Room Area Doors/Door_four_hider_4 + skip_location: True + panels: + - THREE (1) + - THREE (2) + - THREE (3) + Fives: + id: + - Count Up Room Area Doors/Door_five_hider + - Count Up Room Area Doors/Door_five_hider_4 + - Count Up Room Area Doors/Door_five_hider_5 + location_name: Fours + item_name: Number Hunt - Fives + include_reduce: True + panels: + - FOUR + - room: Hub Room + panel: FOUR + - room: Dead End Area + panel: FOUR + - room: The Traveled + panel: FOUR + Challenge Entrance: + id: Count Up Room Area Doors/Door_zero_unlocked + item_name: Number Hunt - Challenge Entrance + panels: + - ZERO + paintings: + - id: maze_painting_3 + enter_only: True + orientation: north + move: True + required_door: + door: Green Painting + - id: blueman_painting_2 + orientation: east + The Undeterred: + entrances: + Outside The Undeterred: + room: Outside The Undeterred + door: Undeterred Entrance + panels: + Achievement: + id: Countdown Panels/Panel_deterred_undeterred + colors: blue + tag: forbid + check: True + achievement: The Undeterred + BONE: + id: Blue Room/Panel_bone_skeleton + colors: blue + tag: botblue + EYE: + id: Blue Room/Panel_mouth_face + colors: blue + tag: double botblue + subtag: left + link: holo FACE + MOUTH: + id: Blue Room/Panel_eye_face + colors: blue + tag: double botblue + subtag: right + link: holo FACE + IRIS: + id: Blue Room/Panel_toucan_bird + colors: blue + tag: botblue + EYE (2): + id: Blue Room/Panel_two_toucan + colors: blue + tag: topblue + ICE: + id: Blue Room/Panel_ice_eyesight + colors: blue + tag: double topblue + subtag: left + link: hex EYESIGHT + HEIGHT: + id: Blue Room/Panel_height_eyesight + colors: blue + tag: double topblue + subtag: right + link: hex EYESIGHT + EYE (3): + id: Blue Room/Panel_eye_hi + colors: blue + tag: topblue + NOT: + id: Blue Room/Panel_not_notice + colors: blue + tag: midblue + JUST: + id: Blue Room/Panel_just_readjust + colors: blue + tag: double midblue + subtag: left + link: exp READJUST + READ: + id: Blue Room/Panel_read_readjust + colors: blue + tag: double midblue + subtag: right + link: exp READJUST + FATHER: + id: Blue Room/Panel_ate_primate + colors: blue + tag: midblue + FEATHER: + id: Blue Room/Panel_primate_mammal + colors: blue + tag: botblue + CONTINENT: + id: Blue Room/Panel_continent_planet + colors: blue + tag: double botblue + subtag: left + link: holo PLANET + OCEAN: + id: Blue Room/Panel_ocean_planet + colors: blue + tag: double botblue + subtag: right + link: holo PLANET + WALL: + id: Blue Room/Panel_wall_room + colors: blue + tag: botblue + Number Hunt: + # This works a little differently than in the base game. The door to the + # initial number in each set opens at the same time as the rest of the doors + # in that set. + entrances: + Outside The Undeterred: + room: Outside The Undeterred + door: Number Hunt + Directional Gallery: + door: Door to Directional Gallery + Challenge Room: + room: Outside The Undeterred + door: Challenge Entrance + panels: + FIVE: + id: Backside Room/Panel_five_five + tag: midwhite + required_door: + room: Outside The Undeterred + door: Fives + SIX: + id: Backside Room/Panel_six_six + tag: midwhite + required_door: + door: Sixes + SEVEN: + id: Backside Room/Panel_seven_seven + tag: midwhite + required_door: + door: Sevens + EIGHT: + id: Backside Room/Panel_eight_eight + tag: midwhite + required_door: + door: Eights + NINE: + id: Backside Room/Panel_nine_nine + tag: midwhite + required_door: + door: Nines + doors: + Door to Directional Gallery: + id: Count Up Room Area Doors/Door_five_unlocked + group: Directional Gallery Doors + skip_location: True + panels: + - FIVE + Sixes: + id: + - Count Up Room Area Doors/Door_six_hider + - Count Up Room Area Doors/Door_six_hider_2 + - Count Up Room Area Doors/Door_six_hider_3 + - Count Up Room Area Doors/Door_six_hider_4 + - Count Up Room Area Doors/Door_six_hider_5 + - Count Up Room Area Doors/Door_six_hider_6 + painting_id: pencil_painting3 # See note in Outside The Bold + location_name: Fives + include_reduce: True + panels: + - FIVE + - room: Outside The Agreeable + panel: FIVE (1) + - room: Outside The Agreeable + panel: FIVE (2) + - room: Directional Gallery + panel: FIVE (1) + - room: Directional Gallery + panel: FIVE (2) + Sevens: + id: + - Count Up Room Area Doors/Door_seven_hider + - Count Up Room Area Doors/Door_seven_unlocked + - Count Up Room Area Doors/Door_seven_hider_2 + - Count Up Room Area Doors/Door_seven_hider_3 + - Count Up Room Area Doors/Door_seven_hider_4 + - Count Up Room Area Doors/Door_seven_hider_5 + - Count Up Room Area Doors/Door_seven_hider_6 + - Count Up Room Area Doors/Door_seven_hider_7 + location_name: Sixes + include_reduce: True + panels: + - SIX + - room: Outside The Bold + panel: SIX + - room: Directional Gallery + panel: SIX (1) + - room: Directional Gallery + panel: SIX (2) + - room: The Bearer (East) + panel: SIX + - room: The Bearer (South) + panel: SIX + Eights: + id: + - Count Up Room Area Doors/Door_eight_hider + - Count Up Room Area Doors/Door_eight_unlocked + - Count Up Room Area Doors/Door_eight_hider_2 + - Count Up Room Area Doors/Door_eight_hider_3 + - Count Up Room Area Doors/Door_eight_hider_4 + - Count Up Room Area Doors/Door_eight_hider_5 + - Count Up Room Area Doors/Door_eight_hider_6 + - Count Up Room Area Doors/Door_eight_hider_7 + - Count Up Room Area Doors/Door_eight_hider_8 + location_name: Sevens + include_reduce: True + panels: + - SEVEN + - room: Directional Gallery + panel: SEVEN + - room: Knight Night Exit + panel: SEVEN (1) + - room: Knight Night Exit + panel: SEVEN (2) + - room: Knight Night Exit + panel: SEVEN (3) + - room: Outside The Initiated + panel: SEVEN (1) + - room: Outside The Initiated + panel: SEVEN (2) + Nines: + id: + - Count Up Room Area Doors/Door_nine_hider + - Count Up Room Area Doors/Door_nine_hider_2 + - Count Up Room Area Doors/Door_nine_hider_3 + - Count Up Room Area Doors/Door_nine_hider_4 + - Count Up Room Area Doors/Door_nine_hider_5 + - Count Up Room Area Doors/Door_nine_hider_6 + - Count Up Room Area Doors/Door_nine_hider_7 + - Count Up Room Area Doors/Door_nine_hider_8 + - Count Up Room Area Doors/Door_nine_hider_9 + location_name: Eights + include_reduce: True + panels: + - EIGHT + - room: Directional Gallery + panel: EIGHT + - room: The Eyes They See + panel: EIGHT + - room: Dead End Area + panel: EIGHT + - room: Crossroads + panel: EIGHT + - room: Hot Crusts Area + panel: EIGHT + - room: Art Gallery + panel: EIGHT + - room: Outside The Initiated + panel: EIGHT + Zero Door: + # The black wall isn't a door, so we can't ever hide it. + id: Count Up Room Area Doors/Door_zero_hider_2 + location_name: Nines + item_name: Outside The Undeterred - Zero Door + include_reduce: True + panels: + - NINE + - room: Directional Gallery + panel: NINE + - room: Amen Name Area + panel: NINE + - room: Yellow Backside Area + panel: NINE + - room: Outside The Initiated + panel: NINE + - room: Outside The Bold + panel: NINE + - room: Rhyme Room (Cross) + panel: NINE + - room: Orange Tower Fifth Floor + panel: NINE + - room: Elements Area + panel: NINE + paintings: + - id: smile_painting_5 + enter_only: True + orientation: east + required_door: + door: Eights + Directional Gallery: + entrances: + Outside The Agreeable: True # sunwarp + Orange Tower First Floor: + room: Orange Tower First Floor + door: Salt Pepper Door + Outside The Undeterred: + door: Shortcut to The Undeterred + Number Hunt: + room: Number Hunt + door: Door to Directional Gallery + panels: + PEPPER: + id: Backside Room/Panel_pepper_salt + colors: black + tag: botblack + TURN: + id: Backside Room/Panel_turn_return + colors: blue + tag: midblue + LEARN: + id: Backside Room/Panel_learn_return + colors: purple + tag: midpurp + FIVE (1): + id: Backside Room/Panel_five_five_3 + tag: midwhite + required_panel: + panel: LIGHT + FIVE (2): + id: Backside Room/Panel_five_five_2 + tag: midwhite + required_panel: + panel: WARD + SIX (1): + id: Backside Room/Panel_six_six_3 + tag: midwhite + required_door: + room: Number Hunt + door: Sixes + SIX (2): + id: Backside Room/Panel_six_six_2 + tag: midwhite + required_door: + room: Number Hunt + door: Sixes + SEVEN: + id: Backside Room/Panel_seven_seven_2 + tag: midwhite + required_door: + room: Number Hunt + door: Sevens + EIGHT: + id: Backside Room/Panel_eight_eight_2 + tag: midwhite + required_door: + room: Number Hunt + door: Eights + NINE: + id: Backside Room/Panel_nine_nine_6 + tag: midwhite + required_door: + room: Number Hunt + door: Nines + BACKSIDE: + id: Backside Room/Panel_backside_4 + tag: midwhite + "834283054": + id: Tower Room/Panel_834283054_undaunted + colors: orange + check: True + exclude_reduce: True + tag: midorange + required_door: + room: Number Hunt + door: Sixes + PARANOID: + id: Backside Room/Panel_paranoid_paranoid + tag: midwhite + check: True + exclude_reduce: True + required_door: + room: Number Hunt + door: Sixes + YELLOW: + id: Color Arrow Room/Panel_yellow_afar + tag: midwhite + required_door: + door: Yellow Barrier + WADED + WEE: + id: Tower Room/Panel_waded_wee_warts_7 + colors: orange + check: True + exclude_reduce: True + tag: midorange + THE EYES: + id: Shuffle Room/Panel_theeyes_theeyes + tag: midwhite + LEFT: + id: Shuffle Room/Panel_left_left + tag: midwhite + RIGHT: + id: Shuffle Room/Panel_right_right + tag: midwhite + MIDDLE: + id: Shuffle Room/Panel_middle_middle + tag: midwhite + WARD: + id: Backside Room/Panel_ward_forward + colors: blue + tag: midblue + HIND: + id: Backside Room/Panel_hind_behind + colors: blue + tag: midblue + RIG: + id: Backside Room/Panel_rig_right + colors: blue + tag: midblue + WINDWARD: + id: Backside Room/Panel_windward_forward + colors: purple + tag: midpurp + LIGHT: + id: Backside Room/Panel_light_right + colors: purple + tag: midpurp + REWIND: + id: Backside Room/Panel_rewind_behind + colors: purple + tag: midpurp + doors: + Shortcut to The Undeterred: + id: Count Up Room Area Doors/Door_return_double + group: Directional Gallery Doors + panels: + - TURN + - LEARN + Yellow Barrier: + id: Color Arrow Room Doors/Door_yellow_4 + group: Color Hunt Barriers + skip_location: True + panels: + - room: Champion's Rest + panel: YELLOW + paintings: + - id: smile_painting_7 + orientation: south + - id: flower_painting_4 + orientation: south + - id: pencil_painting3 + enter_only: True + orientation: east + move: True + required_door: + room: Number Hunt + door: Sixes + - id: boxes_painting + orientation: south + - id: cherry_painting + orientation: east + Champion's Rest: + entrances: + Outside The Bold: + door: Shortcut to The Steady + Orange Tower Fourth Floor: True # sunwarp + Roof: True # through ceiling of sunwarp + panels: + EXIT: + id: Rock Room/Panel_red_red + tag: midwhite + HUES: + id: Color Arrow Room/Panel_hues_colors + tag: botwhite + RED: + id: Color Arrow Room/Panel_red_near + check: True + tag: midwhite + BLUE: + id: Color Arrow Room/Panel_blue_near + check: True + tag: midwhite + YELLOW: + id: Color Arrow Room/Panel_yellow_near + check: True + tag: midwhite + GREEN: + id: Color Arrow Room/Panel_green_near + check: True + tag: midwhite + required_door: + room: Outside The Initiated + door: Green Barrier + PURPLE: + id: Color Arrow Room/Panel_purple_near + check: True + tag: midwhite + required_door: + room: Outside The Initiated + door: Purple Barrier + ORANGE: + id: Color Arrow Room/Panel_orange_near + check: True + tag: midwhite + required_door: + room: Orange Tower Third Floor + door: Orange Barrier + YOU: + id: Color Arrow Room/Panel_you + required_door: + room: Outside The Initiated + door: Entrance + check: True + colors: gray + tag: forbid + ME: + id: Color Arrow Room/Panel_me + colors: gray + tag: forbid + required_door: + room: Outside The Initiated + door: Entrance + SECRET BLUE: + # Pretend this and the other two are white, because they are snipes. + # TODO: Extract them and randomize them? + id: Color Arrow Room/Panel_secret_blue + tag: forbid + required_door: + room: Outside The Initiated + door: Entrance + SECRET YELLOW: + id: Color Arrow Room/Panel_secret_yellow + tag: forbid + required_door: + room: Outside The Initiated + door: Entrance + SECRET RED: + id: Color Arrow Room/Panel_secret_red + tag: forbid + required_door: + room: Outside The Initiated + door: Entrance + doors: + Shortcut to The Steady: + id: Rock Room Doors/Door_hint + panels: + - EXIT + paintings: + - id: arrows_painting_7 + orientation: east + - id: fruitbowl_painting3 + orientation: west + enter_only: True + required_door: + room: Outside The Initiated + door: Entrance + - id: colors_painting + orientation: south + enter_only: True + required_door: + room: Outside The Initiated + door: Entrance + The Bearer: + entrances: + Outside The Bold: + door: Shortcut to The Bold + Orange Tower Fifth Floor: + room: Art Gallery + door: Exit + The Bearer (East): True + The Bearer (North): True + The Bearer (South): True + The Bearer (West): True + Roof: True + panels: + Achievement: + id: Countdown Panels/Panel_bearer_bearer + check: True + tag: forbid + required_panel: + - panel: PART + - panel: HEART + - room: Cross Tower (East) + panel: WINTER + - room: The Bearer (East) + panel: PEACE + - room: Cross Tower (North) + panel: NORTH + - room: The Bearer (North) + panel: SILENT (1) + - room: The Bearer (North) + panel: SILENT (2) + - room: The Bearer (North) + panel: SPACE + - room: The Bearer (North) + panel: WARTS + - room: Cross Tower (South) + panel: FIRE + - room: The Bearer (South) + panel: TENT + - room: The Bearer (South) + panel: BOWL + - room: Cross Tower (West) + panel: DIAMONDS + - room: The Bearer (West) + panel: SNOW + - room: The Bearer (West) + panel: SMILE + - room: Bearer Side Area + panel: SHORTCUT + - room: Bearer Side Area + panel: POTS + achievement: The Bearer + MIDDLE: + id: Shuffle Room/Panel_middle_middle_2 + tag: midwhite + FARTHER: + id: Backside Room/Panel_farther_far + colors: red + tag: midred + BACKSIDE: + id: Backside Room/Panel_backside_5 + tag: midwhite + required_door: + door: Backside Door + PART: + id: Cross Room/Panel_part_rap + colors: + - red + - yellow + tag: mid red yellow + required_panel: + room: The Bearer (East) + panel: PEACE + HEART: + id: Cross Room/Panel_heart_tar + colors: + - red + - yellow + tag: mid red yellow + doors: + Shortcut to The Bold: + id: Red Blue Purple Room Area Doors/Door_middle_middle + panels: + - MIDDLE + Backside Door: + id: Red Blue Purple Room Area Doors/Door_locked_knocked2 # yeah... + group: Backside Doors + panels: + - FARTHER + East Entrance: + event: True + panels: + - HEART + The Bearer (East): + entrances: + Cross Tower (East): True + Bearer Side Area: + door: Side Area Access + Roof: True + panels: + SIX: + id: Backside Room/Panel_six_six_5 + tag: midwhite + colors: + - red + - yellow + required_door: + room: Number Hunt + door: Sixes + PEACE: + id: Cross Room/Panel_peace_ape + colors: + - red + - yellow + tag: mid red yellow + doors: + North Entrance: + event: True + panels: + - room: The Bearer + panel: PART + Side Area Access: + event: True + panels: + - room: The Bearer (North) + panel: SPACE + The Bearer (North): + entrances: + Cross Tower (East): True + Roof: True + panels: + SILENT (1): + id: Cross Room/Panel_silent_list + colors: + - red + - yellow + tag: mid red yellow + required_panel: + room: The Bearer (West) + panel: SMILE + SILENT (2): + id: Cross Room/Panel_silent_list_2 + colors: + - red + - yellow + tag: mid yellow red + required_panel: + room: The Bearer (West) + panel: SMILE + SPACE: + id: Cross Room/Panel_space_cape + colors: + - red + - yellow + tag: mid red yellow + WARTS: + id: Cross Room/Panel_warts_star + colors: + - red + - yellow + tag: mid red yellow + required_panel: + room: The Bearer (West) + panel: SNOW + doors: + South Entrance: + event: True + panels: + - room: Bearer Side Area + panel: POTS + The Bearer (South): + entrances: + Cross Tower (North): True + Bearer Side Area: + door: Side Area Shortcut + Roof: True + panels: + SIX: + id: Backside Room/Panel_six_six_6 + tag: midwhite + colors: + - red + - yellow + required_door: + room: Number Hunt + door: Sixes + TENT: + id: Cross Room/Panel_tent_net + colors: + - red + - yellow + tag: mid red yellow + BOWL: + id: Cross Room/Panel_bowl_low + colors: + - red + - yellow + tag: mid red yellow + required_panel: + panel: TENT + doors: + Side Area Shortcut: + event: True + panels: + - room: The Bearer (North) + panel: SILENT (1) + The Bearer (West): + entrances: + Cross Tower (West): True + Bearer Side Area: + door: Side Area Shortcut + Roof: True + panels: + SNOW: + id: Cross Room/Panel_smile_lime + colors: + - red + - yellow + tag: mid yellow red + SMILE: + id: Cross Room/Panel_snow_won + colors: + - red + - yellow + tag: mid red yellow + required_panel: + room: The Bearer (North) + panel: WARTS + doors: + Side Area Shortcut: + event: True + panels: + - room: Cross Tower (East) + panel: WINTER + - room: Cross Tower (North) + panel: NORTH + - room: Cross Tower (South) + panel: FIRE + - room: Cross Tower (West) + panel: DIAMONDS + Bearer Side Area: + entrances: + The Bearer (East): + room: The Bearer (East) + door: Side Area Access + The Bearer (South): + room: The Bearer (South) + door: Side Area Shortcut + The Bearer (West): + room: The Bearer (West) + door: Side Area Shortcut + Orange Tower Third Floor: + door: Shortcut to Tower + Roof: True + panels: + SHORTCUT: + id: Cross Room/Panel_shortcut_shortcut + tag: midwhite + POTS: + id: Cross Room/Panel_pots_top + colors: + - red + - yellow + tag: mid yellow red + doors: + Shortcut to Tower: + id: Cross Room Doors/Door_shortcut + item_name: The Bearer - Shortcut to Tower + location_name: The Bearer - SHORTCUT + panels: + - SHORTCUT + West Entrance: + event: True + panels: + - room: The Bearer (South) + panel: BOWL + Cross Tower (East): + entrances: + The Bearer: + room: The Bearer + door: East Entrance + Roof: True + panels: + WINTER: + id: Cross Room/Panel_winter_winter + colors: blue + tag: forbid + required_panel: + room: The Bearer (North) + panel: SPACE + required_room: Orange Tower Fifth Floor + Cross Tower (North): + entrances: + The Bearer (East): + room: The Bearer (East) + door: North Entrance + Roof: True + panels: + NORTH: + id: Cross Room/Panel_north_north + colors: blue + tag: forbid + required_panel: + room: The Bearer (West) + panel: SMILE + required_room: Outside The Bold + Cross Tower (South): + entrances: # No roof access + The Bearer (North): + room: The Bearer (North) + door: South Entrance + panels: + FIRE: + id: Cross Room/Panel_fire_fire + colors: blue + tag: forbid + required_panel: + room: The Bearer (North) + panel: SILENT (1) + required_room: Elements Area + Cross Tower (West): + entrances: + Bearer Side Area: + room: Bearer Side Area + door: West Entrance + Roof: True + panels: + DIAMONDS: + id: Cross Room/Panel_diamonds_diamonds + colors: blue + tag: forbid + required_panel: + room: The Bearer (North) + panel: WARTS + required_room: Suits Area + The Steady (Rose): + entrances: + Outside The Bold: + room: Outside The Bold + door: Steady Entrance + The Steady (Lilac): + room: The Steady + door: Reveal + The Steady (Ruby): + door: Forward Exit + The Steady (Carnation): + door: Right Exit + panels: + SOAR: + id: Rock Room/Panel_soar_rose + colors: black + tag: topblack + doors: + Forward Exit: + event: True + panels: + - SOAR + Right Exit: + event: True + panels: + - room: The Steady (Lilac) + panel: LIE LACK + The Steady (Ruby): + entrances: + The Steady (Rose): + room: The Steady (Rose) + door: Forward Exit + The Steady (Amethyst): + room: The Steady + door: Reveal + The Steady (Cherry): + door: Forward Exit + The Steady (Amber): + door: Right Exit + panels: + BURY: + id: Rock Room/Panel_bury_ruby + colors: yellow + tag: midyellow + doors: + Forward Exit: + event: True + panels: + - room: The Steady (Lime) + panel: LIMELIGHT + Right Exit: + event: True + panels: + - room: The Steady (Carnation) + panel: INCARNATION + The Steady (Carnation): + entrances: + The Steady (Rose): + room: The Steady (Rose) + door: Right Exit + Outside The Bold: + room: The Steady + door: Reveal + The Steady (Amber): + room: The Steady + door: Reveal + The Steady (Sunflower): + door: Right Exit + panels: + INCARNATION: + id: Rock Room/Panel_incarnation_carnation + colors: red + tag: midred + doors: + Right Exit: + event: True + panels: + - room: The Steady (Amethyst) + panel: PACIFIST + The Steady (Sunflower): + entrances: + The Steady (Carnation): + room: The Steady (Carnation) + door: Right Exit + The Steady (Topaz): + room: The Steady (Topaz) + door: Back Exit + panels: + SUN: + id: Rock Room/Panel_sun_sunflower + colors: blue + tag: midblue + doors: + Back Exit: + event: True + panels: + - SUN + The Steady (Plum): + entrances: + The Steady (Amethyst): + room: The Steady + door: Reveal + The Steady (Blueberry): + room: The Steady + door: Reveal + The Steady (Cherry): + room: The Steady (Cherry) + door: Left Exit + panels: + LUMP: + id: Rock Room/Panel_lump_plum + colors: yellow + tag: midyellow + The Steady (Lime): + entrances: + The Steady (Sunflower): True + The Steady (Emerald): + room: The Steady + door: Reveal + The Steady (Blueberry): + door: Right Exit + panels: + LIMELIGHT: + id: Rock Room/Panel_limelight_lime + colors: red + tag: midred + doors: + Right Exit: + event: True + panels: + - room: The Steady (Amber) + panel: ANTECHAMBER + paintings: + - id: pencil_painting5 + orientation: south + The Steady (Lemon): + entrances: + The Steady (Emerald): True + The Steady (Orange): + room: The Steady + door: Reveal + The Steady (Topaz): + door: Back Exit + panels: + MELON: + id: Rock Room/Panel_melon_lemon + colors: yellow + tag: midyellow + doors: + Back Exit: + event: True + panels: + - MELON + paintings: + - id: pencil_painting4 + orientation: south + The Steady (Topaz): + entrances: + The Steady (Lemon): + room: The Steady (Lemon) + door: Back Exit + The Steady (Amber): + room: The Steady + door: Reveal + The Steady (Sunflower): + door: Back Exit + panels: + TOP: + id: Rock Room/Panel_top_topaz + colors: blue + tag: midblue + MASTERY: + id: Master Room/Panel_mastery_mastery2 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + doors: + Back Exit: + event: True + panels: + - TOP + The Steady (Orange): + entrances: + The Steady (Cherry): + room: The Steady + door: Reveal + The Steady (Lemon): + room: The Steady + door: Reveal + The Steady (Amber): + room: The Steady (Amber) + door: Forward Exit + panels: + BLUE: + id: Rock Room/Panel_blue_orange + colors: black + tag: botblack + The Steady (Sapphire): + entrances: + The Steady (Emerald): + door: Left Exit + The Steady (Blueberry): + room: The Steady + door: Reveal + The Steady (Amethyst): + room: The Steady (Amethyst) + door: Left Exit + panels: + SAP: + id: Rock Room/Panel_sap_sapphire + colors: blue + tag: midblue + doors: + Left Exit: + event: True + panels: + - room: The Steady (Plum) + panel: LUMP + - room: The Steady (Orange) + panel: BLUE + The Steady (Blueberry): + entrances: + The Steady (Lime): + room: The Steady (Lime) + door: Right Exit + The Steady (Sapphire): + room: The Steady + door: Reveal + The Steady (Plum): + room: The Steady + door: Reveal + panels: + BLUE: + id: Rock Room/Panel_blue_blueberry + colors: blue + tag: midblue + The Steady (Amber): + entrances: + The Steady (Ruby): + room: The Steady (Ruby) + door: Right Exit + The Steady (Carnation): + room: The Steady + door: Reveal + The Steady (Orange): + door: Forward Exit + The Steady (Topaz): + room: The Steady + door: Reveal + panels: + ANTECHAMBER: + id: Rock Room/Panel_antechamber_amber + colors: red + tag: midred + doors: + Forward Exit: + event: True + panels: + - room: The Steady (Blueberry) + panel: BLUE + The Steady (Emerald): + entrances: + The Steady (Sapphire): + room: The Steady (Sapphire) + door: Left Exit + The Steady (Lime): + room: The Steady + door: Reveal + panels: + HERALD: + id: Rock Room/Panel_herald_emerald + colors: purple + tag: midpurp + The Steady (Amethyst): + entrances: + The Steady (Lilac): + room: The Steady (Lilac) + door: Forward Exit + The Steady (Sapphire): + door: Left Exit + The Steady (Plum): + room: The Steady + door: Reveal + The Steady (Ruby): + room: The Steady + door: Reveal + panels: + PACIFIST: + id: Rock Room/Panel_thistle_amethyst + colors: purple + tag: toppurp + doors: + Left Exit: + event: True + panels: + - room: The Steady (Sunflower) + panel: SUN + The Steady (Lilac): + entrances: + Outside The Bold: + room: Outside The Bold + door: Lilac Entrance + The Steady (Amethyst): + door: Forward Exit + The Steady (Rose): + room: The Steady + door: Reveal + panels: + LIE LACK: + id: Rock Room/Panel_lielack_lilac + tag: topwhite + doors: + Forward Exit: + event: True + panels: + - room: The Steady (Ruby) + panel: BURY + The Steady (Cherry): + entrances: + The Steady (Plum): + door: Left Exit + The Steady (Orange): + room: The Steady + door: Reveal + The Steady (Ruby): + room: The Steady (Ruby) + door: Forward Exit + panels: + HAIRY: + id: Rock Room/Panel_hairy_cherry + colors: blue + tag: topblue + doors: + Left Exit: + event: True + panels: + - room: The Steady (Sapphire) + panel: SAP + The Steady: + entrances: + The Steady (Sunflower): + room: The Steady (Sunflower) + door: Back Exit + panels: + Achievement: + id: Countdown Panels/Panel_steady_steady + required_panel: + - room: The Steady (Rose) + panel: SOAR + - room: The Steady (Carnation) + panel: INCARNATION + - room: The Steady (Sunflower) + panel: SUN + - room: The Steady (Ruby) + panel: BURY + - room: The Steady (Plum) + panel: LUMP + - room: The Steady (Lime) + panel: LIMELIGHT + - room: The Steady (Lemon) + panel: MELON + - room: The Steady (Topaz) + panel: TOP + - room: The Steady (Orange) + panel: BLUE + - room: The Steady (Sapphire) + panel: SAP + - room: The Steady (Blueberry) + panel: BLUE + - room: The Steady (Amber) + panel: ANTECHAMBER + - room: The Steady (Emerald) + panel: HERALD + - room: The Steady (Amethyst) + panel: PACIFIST + - room: The Steady (Lilac) + panel: LIE LACK + - room: The Steady (Cherry) + panel: HAIRY + tag: forbid + check: True + achievement: The Steady + doors: + Reveal: + event: True + panels: + - Achievement + Knight Night (Outer Ring): + entrances: + Hidden Room: + room: Hidden Room + door: Knight Night Entrance + Knight Night Exit: True + panels: + NIGHT: + id: Appendix Room/Panel_night_knight + colors: blue + tag: homophone midblue + copy_to_sign: sign7 + KNIGHT: + id: Appendix Room/Panel_knight_night + colors: red + tag: homophone midred + copy_to_sign: sign8 + BEE: + id: Appendix Room/Panel_bee_be + colors: red + tag: homophone midred + copy_to_sign: sign9 + NEW: + id: Appendix Room/Panel_new_knew + colors: blue + tag: homophone midblue + copy_to_sign: sign11 + FORE: + id: Appendix Room/Panel_fore_for + colors: red + tag: homophone midred + copy_to_sign: sign10 + TRUSTED (1): + id: Appendix Room/Panel_trusted_trust + colors: red + tag: midred + required_panel: + room: Knight Night (Right Lower Segment) + panel: BEFORE + TRUSTED (2): + id: Appendix Room/Panel_trusted_rusted + colors: red + tag: midred + required_panel: + room: Knight Night (Right Lower Segment) + panel: BEFORE + ENCRUSTED: + id: Appendix Room/Panel_encrusted_rust + colors: red + tag: midred + required_panel: + - panel: TRUSTED (1) + - panel: TRUSTED (2) + ADJUST (1): + id: Appendix Room/Panel_adjust_readjust + colors: blue + tag: midblue and phone + required_panel: + room: Knight Night (Right Lower Segment) + panel: BE + ADJUST (2): + id: Appendix Room/Panel_adjust_adjusted + colors: blue + tag: midblue and phone + required_panel: + room: Knight Night (Right Lower Segment) + panel: BE + RIGHT: + id: Appendix Room/Panel_right_right + tag: midwhite + required_panel: + room: Knight Night (Right Lower Segment) + panel: ADJUST + TRUST: + id: Appendix Room/Panel_trust_crust + colors: + - red + - blue + tag: mid red blue + required_panel: + - room: Knight Night (Right Lower Segment) + panel: ADJUST + - room: Knight Night (Right Lower Segment) + panel: LEFT + doors: + Fore Door: + event: True + panels: + - FORE + New Door: + event: True + panels: + - NEW + To End: + event: True + panels: + - RIGHT + - room: Knight Night (Right Lower Segment) + panel: LEFT + Knight Night (Right Upper Segment): + entrances: + Knight Night Exit: True + Knight Night (Outer Ring): + room: Knight Night (Outer Ring) + door: Fore Door + Knight Night (Right Lower Segment): + door: Segment Door + panels: + RUST (1): + id: Appendix Room/Panel_rust_trust + colors: blue + tag: midblue + required_panel: + room: Knight Night (Outer Ring) + panel: BEE + RUST (2): + id: Appendix Room/Panel_rust_crust + colors: blue + tag: midblue + required_panel: + room: Knight Night (Outer Ring) + panel: BEE + doors: + Segment Door: + event: True + panels: + - RUST (2) + - room: Knight Night (Right Lower Segment) + panel: BEFORE + Knight Night (Right Lower Segment): + entrances: + Knight Night Exit: True + Knight Night (Right Upper Segment): + room: Knight Night (Right Upper Segment) + door: Segment Door + Knight Night (Outer Ring): + room: Knight Night (Outer Ring) + door: New Door + panels: + ADJUST: + id: Appendix Room/Panel_adjust_readjusted + colors: blue + tag: midblue + required_panel: + - room: Knight Night (Outer Ring) + panel: ADJUST (1) + - room: Knight Night (Outer Ring) + panel: ADJUST (2) + BEFORE: + id: Appendix Room/Panel_before_fore + colors: red + tag: midred and phone + required_panel: + room: Knight Night (Right Upper Segment) + panel: RUST (1) + BE: + id: Appendix Room/Panel_be_before + colors: blue + tag: midblue and phone + required_panel: + room: Knight Night (Right Upper Segment) + panel: RUST (1) + LEFT: + id: Appendix Room/Panel_left_left + tag: midwhite + required_panel: + room: Knight Night (Outer Ring) + panel: ENCRUSTED + TRUST: + id: Appendix Room/Panel_trust_crust_2 + colors: purple + tag: midpurp + required_panel: + - room: Knight Night (Outer Ring) + panel: ENCRUSTED + - room: Knight Night (Outer Ring) + panel: RIGHT + Knight Night (Final): + entrances: + Knight Night Exit: True + Knight Night (Outer Ring): + room: Knight Night (Outer Ring) + door: To End + Knight Night (Right Upper Segment): + room: Knight Night (Outer Ring) + door: To End + panels: + TRUSTED: + id: Appendix Room/Panel_trusted_readjusted + colors: purple + tag: midpurp + doors: + Exit: + id: + - Appendix Room Area Doors/Door_trusted_readjusted + - Appendix Room Area Doors/Door_trusted_readjusted2 + - Appendix Room Area Doors/Door_trusted_readjusted3 + - Appendix Room Area Doors/Door_trusted_readjusted4 + - Appendix Room Area Doors/Door_trusted_readjusted5 + - Appendix Room Area Doors/Door_trusted_readjusted6 + - Appendix Room Area Doors/Door_trusted_readjusted7 + - Appendix Room Area Doors/Door_trusted_readjusted8 + - Appendix Room Area Doors/Door_trusted_readjusted9 + - Appendix Room Area Doors/Door_trusted_readjusted10 + - Appendix Room Area Doors/Door_trusted_readjusted11 + - Appendix Room Area Doors/Door_trusted_readjusted12 + - Appendix Room Area Doors/Door_trusted_readjusted13 + include_reduce: True + location_name: Knight Night Room - TRUSTED + item_name: Knight Night Room - Exit + panels: + - TRUSTED + Knight Night Exit: + entrances: + Knight Night (Outer Ring): + room: Knight Night (Final) + door: Exit + Orange Tower Third Floor: + room: Knight Night (Final) + door: Exit + Outside The Initiated: + room: Knight Night (Final) + door: Exit + panels: + SEVEN (1): + id: Backside Room/Panel_seven_seven_7 + tag: midwhite + required_door: + - room: Number Hunt + door: Sevens + SEVEN (2): + id: Backside Room/Panel_seven_seven_3 + tag: midwhite + required_door: + - room: Number Hunt + door: Sevens + SEVEN (3): + id: Backside Room/Panel_seven_seven_4 + tag: midwhite + required_door: + - room: Number Hunt + door: Sevens + DEAD END: + id: Appendix Room/Panel_deadend_deadend + tag: midwhite + WARNER: + id: Appendix Room/Panel_warner_corner + colors: purple + tag: toppurp + The Artistic (Smiley): + entrances: + Dead End Area: + painting: True + Crossroads: + painting: True + Hot Crusts Area: + painting: True + Outside The Initiated: + painting: True + Directional Gallery: + painting: True + Number Hunt: + room: Number Hunt + door: Eights + painting: True + Art Gallery: + painting: True + The Eyes They See: + painting: True + The Artistic (Panda): + door: Door to Panda + The Artistic (Apple): + room: The Artistic (Apple) + door: Door to Smiley + Elements Area: + room: Hallway Room (4) + door: Exit + panels: + Achievement: + id: Countdown Panels/Panel_artistic_artistic + colors: + - red + - black + - yellow + - blue + tag: forbid + required_room: + - The Artistic (Panda) + - The Artistic (Apple) + - The Artistic (Lattice) + check: True + achievement: The Artistic + FINE: + id: Ceiling Room/Panel_yellow_top_5 + colors: + - yellow + - blue + tag: yellow top blue bot + subtag: top + link: yxu KNIFE + BLADE: + id: Ceiling Room/Panel_blue_bot_5 + colors: + - blue + - yellow + tag: yellow top blue bot + subtag: bot + link: yxu KNIFE + RED: + id: Ceiling Room/Panel_blue_top_6 + colors: + - blue + - yellow + tag: blue top yellow mid + subtag: top + link: uyx BREAD + BEARD: + id: Ceiling Room/Panel_yellow_mid_6 + colors: + - yellow + - blue + tag: blue top yellow mid + subtag: mid + link: uyx BREAD + ICE: + id: Ceiling Room/Panel_blue_mid_7 + colors: + - blue + - yellow + tag: blue mid yellow bot + subtag: mid + link: xuy SPICE + ROOT: + id: Ceiling Room/Panel_yellow_bot_7 + colors: + - yellow + - blue + tag: blue mid yellow bot + subtag: bot + link: xuy SPICE + doors: + Door to Panda: + id: + - Ceiling Room Doors/Door_blue + - Ceiling Room Doors/Door_blue2 + location_name: The Artistic - Smiley and Panda + group: Artistic Doors + panels: + - FINE + - BLADE + - RED + - BEARD + - ICE + - ROOT + - room: The Artistic (Panda) + panel: EYE (Top) + - room: The Artistic (Panda) + panel: EYE (Bottom) + - room: The Artistic (Panda) + panel: LADYLIKE + - room: The Artistic (Panda) + panel: WATER + - room: The Artistic (Panda) + panel: OURS + - room: The Artistic (Panda) + panel: DAYS + - room: The Artistic (Panda) + panel: NIGHTTIME + - room: The Artistic (Panda) + panel: NIGHT + paintings: + - id: smile_painting_9 + orientation: north + exit_only: True + The Artistic (Panda): + entrances: + Orange Tower Sixth Floor: + painting: True + Outside The Agreeable: + painting: True + The Artistic (Smiley): + room: The Artistic (Smiley) + door: Door to Panda + The Artistic (Lattice): + door: Door to Lattice + panels: + EYE (Top): + id: Ceiling Room/Panel_blue_top_1 + colors: + - blue + - red + tag: blue top red bot + subtag: top + link: uxr IRIS + EYE (Bottom): + id: Ceiling Room/Panel_red_bot_1 + colors: + - red + - blue + tag: blue top red bot + subtag: bot + link: uxr IRIS + LADYLIKE: + id: Ceiling Room/Panel_red_mid_2 + colors: + - red + - blue + tag: red mid blue bot + subtag: mid + link: xru LAKE + WATER: + id: Ceiling Room/Panel_blue_bot_2 + colors: + - blue + - red + tag: red mid blue bot + subtag: bot + link: xru LAKE + OURS: + id: Ceiling Room/Panel_blue_mid_3 + colors: + - blue + - red + tag: blue mid red bot + subtag: mid + link: xur HOURS + DAYS: + id: Ceiling Room/Panel_red_bot_3 + colors: + - red + - blue + tag: blue mid red bot + subtag: bot + link: xur HOURS + NIGHTTIME: + id: Ceiling Room/Panel_red_top_4 + colors: + - red + - blue + tag: red top mid blue + subtag: top + link: rux KNIGHT + NIGHT: + id: Ceiling Room/Panel_blue_mid_4 + colors: + - blue + - red + tag: red top mid blue + subtag: mid + link: rux KNIGHT + doors: + Door to Lattice: + id: + - Ceiling Room Doors/Door_red + - Ceiling Room Doors/Door_red2 + location_name: The Artistic - Panda and Lattice + group: Artistic Doors + panels: + - EYE (Top) + - EYE (Bottom) + - LADYLIKE + - WATER + - OURS + - DAYS + - NIGHTTIME + - NIGHT + - room: The Artistic (Lattice) + panel: POSH + - room: The Artistic (Lattice) + panel: MALL + - room: The Artistic (Lattice) + panel: DEICIDE + - room: The Artistic (Lattice) + panel: WAVER + - room: The Artistic (Lattice) + panel: REPAID + - room: The Artistic (Lattice) + panel: BABY + - room: The Artistic (Lattice) + panel: LOBE + - room: The Artistic (Lattice) + panel: BOWELS + paintings: + - id: panda_painting_3 + exit_only: True + orientation: south + required_when_no_doors: True + The Artistic (Lattice): + entrances: + Directional Gallery: + painting: True + The Artistic (Panda): + room: The Artistic (Panda) + door: Door to Lattice + The Artistic (Apple): + door: Door to Apple + panels: + POSH: + id: Ceiling Room/Panel_black_top_12 + colors: + - black + - red + tag: black top red bot + subtag: top + link: bxr SHOP + MALL: + id: Ceiling Room/Panel_red_bot_12 + colors: + - red + - black + tag: black top red bot + subtag: bot + link: bxr SHOP + DEICIDE: + id: Ceiling Room/Panel_red_top_13 + colors: + - red + - black + tag: red top black bot + subtag: top + link: rxb DECIDE + WAVER: + id: Ceiling Room/Panel_black_bot_13 + colors: + - black + - red + tag: red top black bot + subtag: bot + link: rxb DECIDE + REPAID: + id: Ceiling Room/Panel_black_mid_14 + colors: + - black + - red + tag: black mid red bot + subtag: mid + link: xbr DIAPER + BABY: + id: Ceiling Room/Panel_red_bot_14 + colors: + - red + - black + tag: black mid red bot + subtag: bot + link: xbr DIAPER + LOBE: + id: Ceiling Room/Panel_black_top_15 + colors: + - black + - red + tag: black top red mid + subtag: top + link: brx BOWL + BOWELS: + id: Ceiling Room/Panel_red_mid_15 + colors: + - red + - black + tag: black top red mid + subtag: mid + link: brx BOWL + doors: + Door to Apple: + id: + - Ceiling Room Doors/Door_black + - Ceiling Room Doors/Door_black2 + location_name: The Artistic - Lattice and Apple + group: Artistic Doors + panels: + - POSH + - MALL + - DEICIDE + - WAVER + - REPAID + - BABY + - LOBE + - BOWELS + - room: The Artistic (Apple) + panel: SPRIG + - room: The Artistic (Apple) + panel: RELEASES + - room: The Artistic (Apple) + panel: MUCH + - room: The Artistic (Apple) + panel: FISH + - room: The Artistic (Apple) + panel: MASK + - room: The Artistic (Apple) + panel: HILL + - room: The Artistic (Apple) + panel: TINE + - room: The Artistic (Apple) + panel: THING + paintings: + - id: boxes_painting2 + orientation: south + exit_only: True + required_when_no_doors: True + The Artistic (Apple): + entrances: + Orange Tower Sixth Floor: + painting: True + Directional Gallery: + painting: True + The Artistic (Lattice): + room: The Artistic (Lattice) + door: Door to Apple + The Artistic (Smiley): + door: Door to Smiley + panels: + SPRIG: + id: Ceiling Room/Panel_yellow_mid_8 + colors: + - yellow + - black + tag: yellow mid black bot + subtag: mid + link: xyb GRIPS + RELEASES: + id: Ceiling Room/Panel_black_bot_8 + colors: + - black + - yellow + tag: yellow mid black bot + subtag: bot + link: xyb GRIPS + MUCH: + id: Ceiling Room/Panel_black_top_9 + colors: + - black + - yellow + tag: black top yellow bot + subtag: top + link: bxy CHUM + FISH: + id: Ceiling Room/Panel_yellow_bot_9 + colors: + - yellow + - black + tag: black top yellow bot + subtag: bot + link: bxy CHUM + MASK: + id: Ceiling Room/Panel_yellow_top_10 + colors: + - yellow + - black + tag: yellow top black bot + subtag: top + link: yxb CHASM + HILL: + id: Ceiling Room/Panel_black_bot_10 + colors: + - black + - yellow + tag: yellow top black bot + subtag: bot + link: yxb CHASM + TINE: + id: Ceiling Room/Panel_black_top_11 + colors: + - black + - yellow + tag: black top yellow mid + subtag: top + link: byx NIGHT + THING: + id: Ceiling Room/Panel_yellow_mid_11 + colors: + - yellow + - black + tag: black top yellow mid + subtag: mid + link: byx NIGHT + doors: + Door to Smiley: + id: + - Ceiling Room Doors/Door_yellow + - Ceiling Room Doors/Door_yellow2 + location_name: The Artistic - Apple and Smiley + group: Artistic Doors + panels: + - SPRIG + - RELEASES + - MUCH + - FISH + - MASK + - HILL + - TINE + - THING + - room: The Artistic (Smiley) + panel: FINE + - room: The Artistic (Smiley) + panel: BLADE + - room: The Artistic (Smiley) + panel: RED + - room: The Artistic (Smiley) + panel: BEARD + - room: The Artistic (Smiley) + panel: ICE + - room: The Artistic (Smiley) + panel: ROOT + paintings: + - id: cherry_painting3 + orientation: north + exit_only: True + required_when_no_doors: True + The Artistic (Hint Room): + entrances: + The Artistic (Lattice): + room: The Artistic (Lattice) + door: Door to Apple + panels: + THEME: + id: Ceiling Room/Panel_answer_1 + colors: red + tag: midred + PAINTS: + id: Ceiling Room/Panel_answer_2 + colors: yellow + tag: botyellow + I: + id: Ceiling Room/Panel_answer_3 + colors: blue + tag: midblue + KIT: + id: Ceiling Room/Panel_answer_4 + colors: black + tag: topblack + The Discerning: + entrances: + Crossroads: + room: Crossroads + door: Discerning Entrance + panels: + Achievement: + id: Countdown Panels/Panel_discerning_scramble + colors: yellow + tag: forbid + check: True + achievement: The Discerning + HITS: + id: Sun Room/Panel_hits_this + colors: yellow + tag: midyellow + WARRED: + id: Sun Room/Panel_warred_drawer + colors: yellow + tag: double midyellow + subtag: left + link: ana DRAWER + REDRAW: + id: Sun Room/Panel_redraw_drawer + colors: yellow + tag: double midyellow + subtag: right + link: ana DRAWER + ADDER: + id: Sun Room/Panel_adder_dread + colors: yellow + tag: midyellow + LAUGHTERS: + id: Sun Room/Panel_laughters_slaughter + colors: yellow + tag: midyellow + STONE: + id: Sun Room/Panel_stone_notes + colors: yellow + tag: double midyellow + subtag: left + link: ana NOTES + ONSET: + id: Sun Room/Panel_onset_notes + colors: yellow + tag: double midyellow + subtag: right + link: ana NOTES + RAT: + id: Sun Room/Panel_rat_art + colors: yellow + tag: midyellow + DUSTY: + id: Sun Room/Panel_dusty_study + colors: yellow + tag: midyellow + ARTS: + id: Sun Room/Panel_arts_star + colors: yellow + tag: double midyellow + subtag: left + link: ana STAR + TSAR: + id: Sun Room/Panel_tsar_star + colors: yellow + tag: double midyellow + subtag: right + link: ana STAR + STATE: + id: Sun Room/Panel_state_taste + colors: yellow + tag: midyellow + REACT: + id: Sun Room/Panel_react_trace + colors: yellow + tag: midyellow + DEAR: + id: Sun Room/Panel_dear_read + colors: yellow + tag: double midyellow + subtag: left + link: ana READ + DARE: + id: Sun Room/Panel_dare_read + colors: yellow + tag: double midyellow + subtag: right + link: ana READ + SEAM: + id: Sun Room/Panel_seam_same + colors: yellow + tag: midyellow + The Eyes They See: + entrances: + Crossroads: + room: Crossroads + door: Eye Wall + painting: True + Wondrous Lobby: + door: Exit + Directional Gallery: True + panels: + NEAR: + id: Shuffle Room/Panel_near_near + tag: midwhite + EIGHT: + id: Backside Room/Panel_eight_eight_4 + tag: midwhite + required_door: + room: Number Hunt + door: Eights + doors: + Exit: + id: Count Up Room Area Doors/Door_near_near + group: Crossroads Doors + panels: + - NEAR + paintings: + - id: eye_painting_2 + orientation: west + - id: smile_painting_2 + orientation: north + Far Window: + entrances: + Crossroads: + room: Crossroads + door: Eye Wall + The Eyes They See: True + panels: + FAR: + id: Shuffle Room/Panel_far_far + tag: midwhite + Wondrous Lobby: + entrances: + Directional Gallery: True + The Eyes They See: + room: The Eyes They See + door: Exit + paintings: + - id: arrows_painting_5 + orientation: east + Outside The Wondrous: + entrances: + Wondrous Lobby: True + The Wondrous (Doorknob): + door: Wondrous Entrance + The Wondrous (Window): True + panels: + SHRINK: + id: Wonderland Room/Panel_shrink_shrink + tag: midwhite + doors: + Wondrous Entrance: + id: Red Blue Purple Room Area Doors/Door_wonderland + item_name: The Wondrous - Entrance + panels: + - SHRINK + The Wondrous (Doorknob): + entrances: + Outside The Wondrous: + room: Outside The Wondrous + door: Wondrous Entrance + Starting Room: + door: Painting Shortcut + painting: True + The Wondrous (Chandelier): + painting: True + The Wondrous (Table): True # There is a way that doesn't use the painting + doors: + Painting Shortcut: + painting_id: + - symmetry_painting_a_starter + - arrows_painting2 + skip_location: True + item_name: Starting Room - Symmetry Painting + panels: + - room: Outside The Wondrous + panel: SHRINK + paintings: + - id: symmetry_painting_a_1 + orientation: east + exit_only: True + - id: symmetry_painting_b_1 + orientation: south + The Wondrous (Bookcase): + entrances: + The Wondrous (Doorknob): True + panels: + CASE: + id: Wonderland Room/Panel_case_bookcase + colors: blue + tag: midblue + paintings: + - id: symmetry_painting_a_3 + orientation: west + exit_only: True + - id: symmetry_painting_b_3 + disable: True + The Wondrous (Chandelier): + entrances: + The Wondrous (Bookcase): True + panels: + CANDLE HEIR: + id: Wonderland Room/Panel_candleheir_chandelier + colors: yellow + tag: midyellow + paintings: + - id: symmetry_painting_a_5 + orientation: east + - id: symmetry_painting_a_5 + disable: True + The Wondrous (Window): + entrances: + The Wondrous (Bookcase): True + panels: + GLASS: + id: Wonderland Room/Panel_glass_window + colors: brown + tag: botbrown + paintings: + - id: symmetry_painting_b_4 + orientation: north + exit_only: True + - id: symmetry_painting_a_4 + disable: True + The Wondrous (Table): + entrances: + The Wondrous (Doorknob): + painting: True + The Wondrous: + painting: True + panels: + WOOD: + id: Wonderland Room/Panel_wood_table + colors: brown + tag: botbrown + BROOK NOD: + # This panel, while physically being in the first room, is facing upward + # and is only really solvable while standing on the windowsill, which is + # a location you can only get to from Table. + id: Wonderland Room/Panel_brooknod_doorknob + colors: yellow + tag: midyellow + paintings: + - id: symmetry_painting_a_2 + orientation: west + - id: symmetry_painting_b_2 + orientation: south + exit_only: True + required: True + The Wondrous: + entrances: + The Wondrous (Table): True + Arrow Garden: + door: Exit + panels: + FIREPLACE: + id: Wonderland Room/Panel_fireplace_fire + colors: red + tag: midred + Achievement: + id: Countdown Panels/Panel_wondrous_wondrous + required_panel: + - panel: FIREPLACE + - room: The Wondrous (Table) + panel: BROOK NOD + - room: The Wondrous (Bookcase) + panel: CASE + - room: The Wondrous (Chandelier) + panel: CANDLE HEIR + - room: The Wondrous (Window) + panel: GLASS + - room: The Wondrous (Table) + panel: WOOD + tag: forbid + achievement: The Wondrous + doors: + Exit: + id: Red Blue Purple Room Area Doors/Door_wonderland_exit + painting_id: arrows_painting_9 + include_reduce: True + panels: + - Achievement + paintings: + - id: arrows_painting_9 + enter_only: True + orientation: south + move: True + required_door: + door: Exit + req_blocked_when_no_doors: True # the wondrous (table) in vanilla doors + - id: symmetry_painting_a_6 + orientation: west + exit_only: True + - id: symmetry_painting_b_6 + orientation: north + req_blocked_when_no_doors: True # the wondrous (table) in vanilla doors + Arrow Garden: + entrances: + The Wondrous: + room: The Wondrous + door: Exit + Roof: True + panels: + MASTERY: + id: Master Room/Panel_mastery_mastery4 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + SHARP: + id: Open Areas/Panel_rainy_rainbow2 + tag: midwhite + paintings: + - id: flower_painting_6 + orientation: south + Hallway Room (2): + entrances: + Outside The Agreeable: + room: Outside The Agreeable + door: Hallway Door + Elements Area: True + panels: + WISE: + id: Hallway Room/Panel_counterclockwise_1 + colors: blue + tag: quad mid blue + link: qmb COUNTERCLOCKWISE + CLOCK: + id: Hallway Room/Panel_counterclockwise_2 + colors: blue + tag: quad mid blue + link: qmb COUNTERCLOCKWISE + ER: + id: Hallway Room/Panel_counterclockwise_3 + colors: blue + tag: quad mid blue + link: qmb COUNTERCLOCKWISE + COUNT: + id: Hallway Room/Panel_counterclockwise_4 + colors: blue + tag: quad mid blue + link: qmb COUNTERCLOCKWISE + doors: + Exit: + id: Red Blue Purple Room Area Doors/Door_room_3 + location_name: Hallway Room - Second Room + group: Hallway Room Doors + panels: + - WISE + - CLOCK + - ER + - COUNT + Hallway Room (3): + entrances: + Hallway Room (2): + room: Hallway Room (2) + door: Exit + # No entrance from Elements Area. The winding hallway does not connect. + panels: + TRANCE: + id: Hallway Room/Panel_transformation_1 + colors: blue + tag: quad top blue + link: qtb TRANSFORMATION + FORM: + id: Hallway Room/Panel_transformation_2 + colors: blue + tag: quad top blue + link: qtb TRANSFORMATION + A: + id: Hallway Room/Panel_transformation_3 + colors: blue + tag: quad top blue + link: qtb TRANSFORMATION + SHUN: + id: Hallway Room/Panel_transformation_4 + colors: blue + tag: quad top blue + link: qtb TRANSFORMATION + doors: + Exit: + id: Red Blue Purple Room Area Doors/Door_room_4 + location_name: Hallway Room - Third Room + group: Hallway Room Doors + panels: + - TRANCE + - FORM + - A + - SHUN + Hallway Room (4): + entrances: + Hallway Room (3): + room: Hallway Room (3) + door: Exit + Elements Area: True + panels: + WHEEL: + id: Hallway Room/Panel_room_5 + colors: blue + tag: full stack blue + doors: + Exit: + id: + - Red Blue Purple Room Area Doors/Door_room_5 + - Red Blue Purple Room Area Doors/Door_room_6 # this is the connection to The Artistic + group: Hallway Room Doors + location_name: Hallway Room - Fourth Room + panels: + - WHEEL + include_reduce: True + Elements Area: + entrances: + Roof: True + Hallway Room (4): + room: Hallway Room (4) + door: Exit + The Artistic (Smiley): + room: Hallway Room (4) + door: Exit + panels: + A: + id: Strand Room/Panel_a_strands + colors: blue + tag: forbid + NINE: + id: Backside Room/Panel_nine_nine_7 + tag: midwhite + required_door: + room: Number Hunt + door: Nines + UNDISTRACTED: + id: Open Areas/Panel_undistracted + check: True + exclude_reduce: True + tag: midwhite + MASTERY: + id: Master Room/Panel_mastery_mastery13 + tag: midwhite + required_door: + room: Orange Tower Seventh Floor + door: Mastery + EARTH: + id: Cross Room/Panel_earth_earth + tag: midwhite + WATER: + id: Cross Room/Panel_water_water + tag: midwhite + AIR: + id: Cross Room/Panel_air_air + tag: midwhite + paintings: + - id: south_afar + orientation: south + Outside The Wanderer: + entrances: + Orange Tower First Floor: + door: Tower Entrance + Rhyme Room (Cross): + room: Rhyme Room (Cross) + door: Exit + Roof: True + panels: + WANDERLUST: + id: Tower Room/Panel_wanderlust_1234567890 + colors: orange + tag: midorange + doors: + Wanderer Entrance: + id: Tower Room Area Doors/Door_wanderer_entrance + item_name: The Wanderer - Entrance + panels: + - WANDERLUST + Tower Entrance: + id: Tower Room Area Doors/Door_wanderlust_start + skip_location: True + panels: + - room: The Wanderer + panel: Achievement + The Wanderer: + entrances: + Outside The Wanderer: + room: Outside The Wanderer + door: Wanderer Entrance + panels: + Achievement: + id: Countdown Panels/Panel_1234567890_wanderlust + colors: orange + check: True + tag: forbid + achievement: The Wanderer + "7890": + id: Orange Room/Panel_lust + colors: orange + tag: midorange + "6524": + id: Orange Room/Panel_read + colors: orange + tag: midorange + "951": + id: Orange Room/Panel_sew + colors: orange + tag: midorange + "4524": + id: Orange Room/Panel_dead + colors: orange + tag: midorange + LEARN: + id: Orange Room/Panel_learn + colors: orange + tag: midorange + DUST: + id: Orange Room/Panel_dust + colors: orange + tag: midorange + STAR: + id: Orange Room/Panel_star + colors: orange + tag: midorange + WANDER: + id: Orange Room/Panel_wander + colors: orange + tag: midorange + Art Gallery: + entrances: + Orange Tower Third Floor: True + Art Gallery (Second Floor): True + Art Gallery (Third Floor): True + Art Gallery (Fourth Floor): True + Orange Tower Fifth Floor: + door: Exit + panels: + EIGHT: + id: Backside Room/Panel_eight_eight_6 + tag: midwhite + required_door: + room: Number Hunt + door: Eights + EON: + id: Painting Room/Panel_eon_one + colors: yellow + tag: midyellow + TRUSTWORTHY: + id: Painting Room/Panel_to_two + colors: red + tag: midred + FREE: + id: Painting Room/Panel_free_three + colors: purple + tag: midpurp + OUR: + id: Painting Room/Panel_our_four + colors: blue + tag: midblue + ONE ROAD MANY TURNS: + id: Painting Room/Panel_order_onepathmanyturns + tag: forbid + colors: + - yellow + - blue + - gray + - brown + - orange + required_door: + door: Fifth Floor + doors: + Second Floor: + painting_id: + - scenery_painting_2b + - scenery_painting_2c + skip_location: True + panels: + - EON + First Floor Puzzles: + skip_item: True + location_name: Art Gallery - First Floor Puzzles + panels: + - EON + - TRUSTWORTHY + - FREE + - OUR + Third Floor: + painting_id: + - scenery_painting_3b + - scenery_painting_3c + skip_location: True + panels: + - room: Art Gallery (Second Floor) + panel: PATH + Fourth Floor: + painting_id: + - scenery_painting_4b + - scenery_painting_4c + skip_location: True + panels: + - room: Art Gallery (Third Floor) + panel: ANY + Fifth Floor: + id: Tower Room Area Doors/Door_painting_backroom + painting_id: + - scenery_painting_5b + - scenery_painting_5c + skip_location: True + panels: + - room: Art Gallery (Fourth Floor) + panel: SEND - USE + Exit: + id: Tower Room Area Doors/Door_painting_exit + include_reduce: True + panels: + - ONE ROAD MANY TURNS + paintings: + - id: smile_painting_3 + orientation: west + - id: flower_painting_2 + orientation: east + - id: scenery_painting_0a + orientation: north + - id: map_painting + orientation: east + - id: fruitbowl_painting4 + orientation: south + progression: + Progressive Art Gallery: + - Second Floor + - Third Floor + - Fourth Floor + - Fifth Floor + - Exit + Art Gallery (Second Floor): + entrances: + Art Gallery: + room: Art Gallery + door: Second Floor + panels: + HOUSE: + id: Painting Room/Panel_house_neighborhood + colors: blue + tag: botblue + PATH: + id: Painting Room/Panel_path_road + colors: brown + tag: botbrown + PARK: + id: Painting Room/Panel_park_drive + colors: black + tag: botblack + CARRIAGE: + id: Painting Room/Panel_carriage_horse + colors: red + tag: botred + doors: + Puzzles: + skip_item: True + location_name: Art Gallery - Second Floor Puzzles + panels: + - HOUSE + - PATH + - PARK + - CARRIAGE + Art Gallery (Third Floor): + entrances: + Art Gallery: + room: Art Gallery + door: Third Floor + panels: + AN: + id: Painting Room/Panel_an_many + colors: blue + tag: midblue + MAY: + id: Painting Room/Panel_may_many + colors: blue + tag: midblue + ANY: + id: Painting Room/Panel_any_many + colors: blue + tag: midblue + MAN: + id: Painting Room/Panel_man_many + colors: blue + tag: midblue + doors: + Puzzles: + skip_item: True + location_name: Art Gallery - Third Floor Puzzles + panels: + - AN + - MAY + - ANY + - MAN + Art Gallery (Fourth Floor): + entrances: + Art Gallery: + room: Art Gallery + door: Fourth Floor + panels: + URNS: + id: Painting Room/Panel_urns_turns + colors: blue + tag: midblue + LEARNS: + id: Painting Room/Panel_learns_turns + colors: purple + tag: midpurp + RUNTS: + id: Painting Room/Panel_runts_turns + colors: yellow + tag: midyellow + SEND - USE: + id: Painting Room/Panel_send_use_turns + colors: orange + tag: midorange + TRUST: + id: Painting Room/Panel_trust_06890 + colors: orange + tag: midorange + "062459": + id: Painting Room/Panel_06890_trust + colors: orange + tag: midorange + doors: + Puzzles: + skip_item: True + location_name: Art Gallery - Fourth Floor Puzzles + panels: + - URNS + - LEARNS + - RUNTS + - SEND - USE + - TRUST + - "062459" + Rhyme Room (Smiley): + entrances: + Orange Tower Third Floor: + room: Orange Tower Third Floor + door: Rhyme Room Entrance + Rhyme Room (Circle): + room: Rhyme Room (Circle) + door: Door to Smiley + Rhyme Room (Cross): True # one-way + panels: + LOANS: + id: Double Room/Panel_bones_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme BONES + SKELETON: + id: Double Room/Panel_bones_syn + tag: syn rhyme + subtag: bot + link: rhyme BONES + REPENTANCE: + id: Double Room/Panel_sentence_rhyme + colors: purple + tag: whole rhyme + subtag: top + link: rhyme SENTENCE + WORD: + id: Double Room/Panel_sentence_whole + colors: blue + tag: whole rhyme + subtag: bot + link: rhyme SENTENCE + SCHEME: + id: Double Room/Panel_dream_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme DREAM + FANTASY: + id: Double Room/Panel_dream_syn + tag: syn rhyme + subtag: bot + link: rhyme DREAM + HISTORY: + id: Double Room/Panel_mystery_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme MYSTERY + SECRET: + id: Double Room/Panel_mystery_syn + tag: syn rhyme + subtag: bot + link: rhyme MYSTERY + doors: + # This is complicated. I want the location in here to just be the four + # panels against the wall toward Target. But in vanilla, you also need to + # solve the panels in Circle that are against the Smiley wall. Logic needs + # to know this so that it can handle no door shuffle properly. So we split + # the item and location up. + Door to Target: + id: + - Double Room Area Doors/Door_room_3a + - Double Room Area Doors/Door_room_3bc + skip_location: True + group: Rhyme Room Doors + panels: + - SCHEME + - FANTASY + - HISTORY + - SECRET + - room: Rhyme Room (Circle) + panel: BIRD + - room: Rhyme Room (Circle) + panel: LETTER + - room: Rhyme Room (Circle) + panel: VIOLENT + - room: Rhyme Room (Circle) + panel: MUTE + Door to Target (Location): + location_name: Rhyme Room (Smiley) - Puzzles Toward Target + skip_item: True + panels: + - SCHEME + - FANTASY + - HISTORY + - SECRET + Rhyme Room (Cross): + entrances: + Rhyme Room (Target): # one-way + room: Rhyme Room (Target) + door: Door to Cross + Rhyme Room (Looped Square): + room: Rhyme Room (Looped Square) + door: Door to Cross + panels: + NINE: + id: Backside Room/Panel_nine_nine_9 + tag: midwhite + required_door: + room: Number Hunt + door: Nines + FERN: + id: Double Room/Panel_return_rhyme + colors: purple + tag: ant rhyme + subtag: top + link: rhyme RETURN + STAY: + id: Double Room/Panel_return_ant + colors: black + tag: ant rhyme + subtag: bot + link: rhyme RETURN + FRIEND: + id: Double Room/Panel_descend_rhyme + colors: purple + tag: ant rhyme + subtag: top + link: rhyme DESCEND + RISE: + id: Double Room/Panel_descend_ant + colors: black + tag: ant rhyme + subtag: bot + link: rhyme DESCEND + PLUMP: + id: Double Room/Panel_jump_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme JUMP + BOUNCE: + id: Double Room/Panel_jump_syn + tag: syn rhyme + subtag: bot + link: rhyme JUMP + SCRAWL: + id: Double Room/Panel_fall_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme FALL + PLUNGE: + id: Double Room/Panel_fall_syn + tag: syn rhyme + subtag: bot + link: rhyme FALL + LEAP: + id: Double Room/Panel_leap_leap + tag: midwhite + doors: + Exit: + id: Double Room Area Doors/Door_room_exit + location_name: Rhyme Room (Cross) - Exit Puzzles + group: Rhyme Room Doors + panels: + - PLUMP + - BOUNCE + - SCRAWL + - PLUNGE + Rhyme Room (Circle): + entrances: + Rhyme Room (Looped Square): + room: Rhyme Room (Looped Square) + door: Door to Circle + Hidden Room: + room: Hidden Room + door: Rhyme Room Entrance + Rhyme Room (Smiley): + door: Door to Smiley + panels: + BIRD: + id: Double Room/Panel_word_rhyme + colors: purple + tag: whole rhyme + subtag: top + link: rhyme WORD + LETTER: + id: Double Room/Panel_word_whole + colors: blue + tag: whole rhyme + subtag: bot + link: rhyme WORD + FORBIDDEN: + id: Double Room/Panel_hidden_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme HIDDEN + CONCEALED: + id: Double Room/Panel_hidden_syn + tag: syn rhyme + subtag: bot + link: rhyme HIDDEN + VIOLENT: + id: Double Room/Panel_silent_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme SILENT + MUTE: + id: Double Room/Panel_silent_syn + tag: syn rhyme + subtag: bot + link: rhyme SILENT + doors: + Door to Smiley: + id: + - Double Room Area Doors/Door_room_2b + - Double Room Area Doors/Door_room_3b + location_name: Rhyme Room - Circle/Smiley Wall + group: Rhyme Room Doors + panels: + - BIRD + - LETTER + - VIOLENT + - MUTE + - room: Rhyme Room (Smiley) + panel: LOANS + - room: Rhyme Room (Smiley) + panel: SKELETON + - room: Rhyme Room (Smiley) + panel: REPENTANCE + - room: Rhyme Room (Smiley) + panel: WORD + paintings: + - id: arrows_painting_3 + orientation: north + Rhyme Room (Looped Square): + entrances: + Starting Room: + room: Starting Room + door: Rhyme Room Entrance + Rhyme Room (Circle): + door: Door to Circle + Rhyme Room (Cross): + door: Door to Cross + Rhyme Room (Target): + door: Door to Target + panels: + WALKED: + id: Double Room/Panel_blocked_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme BLOCKED + OBSTRUCTED: + id: Double Room/Panel_blocked_syn + tag: syn rhyme + subtag: bot + link: rhyme BLOCKED + SKIES: + id: Double Room/Panel_rise_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme RISE + SWELL: + id: Double Room/Panel_rise_syn + tag: syn rhyme + subtag: bot + link: rhyme RISE + PENNED: + id: Double Room/Panel_ascend_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme ASCEND + CLIMB: + id: Double Room/Panel_ascend_syn + tag: syn rhyme + subtag: bot + link: rhyme ASCEND + TROUBLE: + id: Double Room/Panel_double_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme DOUBLE + DUPLICATE: + id: Double Room/Panel_double_syn + tag: syn rhyme + subtag: bot + link: rhyme DOUBLE + doors: + Door to Circle: + id: + - Double Room Area Doors/Door_room_2a + - Double Room Area Doors/Door_room_1c + location_name: Rhyme Room - Circle/Looped Square Wall + group: Rhyme Room Doors + panels: + - WALKED + - OBSTRUCTED + - SKIES + - SWELL + - room: Rhyme Room (Circle) + panel: BIRD + - room: Rhyme Room (Circle) + panel: LETTER + - room: Rhyme Room (Circle) + panel: FORBIDDEN + - room: Rhyme Room (Circle) + panel: CONCEALED + Door to Cross: + id: + - Double Room Area Doors/Door_room_1a + - Double Room Area Doors/Door_room_5a + location_name: Rhyme Room - Cross/Looped Square Wall + group: Rhyme Room Doors + panels: + - SKIES + - SWELL + - PENNED + - CLIMB + - room: Rhyme Room (Cross) + panel: FERN + - room: Rhyme Room (Cross) + panel: STAY + - room: Rhyme Room (Cross) + panel: FRIEND + - room: Rhyme Room (Cross) + panel: RISE + Door to Target: + id: + - Double Room Area Doors/Door_room_1b + - Double Room Area Doors/Door_room_4b + location_name: Rhyme Room - Target/Looped Square Wall + group: Rhyme Room Doors + panels: + - PENNED + - CLIMB + - TROUBLE + - DUPLICATE + - room: Rhyme Room (Target) + panel: WILD + - room: Rhyme Room (Target) + panel: KID + - room: Rhyme Room (Target) + panel: PISTOL + - room: Rhyme Room (Target) + panel: QUARTZ + Rhyme Room (Target): + entrances: + Rhyme Room (Smiley): # one-way + room: Rhyme Room (Smiley) + door: Door to Target + Rhyme Room (Looped Square): + room: Rhyme Room (Looped Square) + door: Door to Target + panels: + WILD: + id: Double Room/Panel_child_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme CHILD + KID: + id: Double Room/Panel_child_syn + tag: syn rhyme + subtag: bot + link: rhyme CHILD + PISTOL: + id: Double Room/Panel_crystal_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme CRYSTAL + QUARTZ: + id: Double Room/Panel_crystal_syn + tag: syn rhyme + subtag: bot + link: rhyme CRYSTAL + INNOVATIVE (Top): + id: Double Room/Panel_creative_rhyme + colors: purple + tag: syn rhyme + subtag: top + link: rhyme CREATIVE + INNOVATIVE (Bottom): + id: Double Room/Panel_creative_syn + tag: syn rhyme + subtag: bot + link: rhyme CREATIVE + doors: + Door to Cross: + id: Double Room Area Doors/Door_room_4a + location_name: Rhyme Room (Target) - Puzzles Toward Cross + group: Rhyme Room Doors + panels: + - PISTOL + - QUARTZ + - INNOVATIVE (Top) + - INNOVATIVE (Bottom) + paintings: + - id: arrows_painting_4 + orientation: north + Room Room: + # This is a bit of a weird room. You can't really get to it from the roof. + # And even if you were to go through the shortcut on the fifth floor into + # the basement and up the stairs, you'd be blocked by the backsides of the + # ROOM panels, which isn't ideal. So we will, at least for now, say that + # this room is vanilla. + # + # For pretty much the same reason, I don't want to shuffle the paintings in + # here. + entrances: + Orange Tower Fourth Floor: True + panels: + DOOR (1): + id: Panel Room/Panel_room_door_1 + colors: gray + tag: forbid + DOOR (2): + id: Panel Room/Panel_room_door_2 + colors: gray + tag: forbid + WINDOW: + id: Panel Room/Panel_room_window_1 + colors: gray + tag: forbid + STAIRS: + id: Panel Room/Panel_room_stairs_1 + colors: gray + tag: forbid + PAINTING: + id: Panel Room/Panel_room_painting_1 + colors: gray + tag: forbid + FLOOR (1): + id: Panel Room/Panel_room_floor_1 + colors: gray + tag: forbid + FLOOR (2): + id: Panel Room/Panel_room_floor_2 + colors: gray + tag: forbid + FLOOR (3): + id: Panel Room/Panel_room_floor_3 + colors: gray + tag: forbid + FLOOR (4): + id: Panel Room/Panel_room_floor_4 + colors: gray + tag: forbid + FLOOR (5): + id: Panel Room/Panel_room_floor_5 + colors: gray + tag: forbid + FLOOR (7): + id: Panel Room/Panel_room_floor_7 + colors: gray + tag: forbid + FLOOR (8): + id: Panel Room/Panel_room_floor_8 + colors: gray + tag: forbid + FLOOR (9): + id: Panel Room/Panel_room_floor_9 + colors: gray + tag: forbid + FLOOR (10): + id: Panel Room/Panel_room_floor_10 + colors: gray + tag: forbid + CEILING (1): + id: Panel Room/Panel_room_ceiling_1 + colors: gray + tag: forbid + CEILING (2): + id: Panel Room/Panel_room_ceiling_2 + colors: gray + tag: forbid + CEILING (3): + id: Panel Room/Panel_room_ceiling_3 + colors: gray + tag: forbid + CEILING (4): + id: Panel Room/Panel_room_ceiling_4 + colors: gray + tag: forbid + CEILING (5): + id: Panel Room/Panel_room_ceiling_5 + colors: gray + tag: forbid + WALL (1): + id: Panel Room/Panel_room_wall_1 + colors: gray + tag: forbid + WALL (2): + id: Panel Room/Panel_room_wall_2 + colors: gray + tag: forbid + WALL (3): + id: Panel Room/Panel_room_wall_3 + colors: gray + tag: forbid + WALL (4): + id: Panel Room/Panel_room_wall_4 + colors: gray + tag: forbid + WALL (5): + id: Panel Room/Panel_room_wall_5 + colors: gray + tag: forbid + WALL (6): + id: Panel Room/Panel_room_wall_6 + colors: gray + tag: forbid + WALL (7): + id: Panel Room/Panel_room_wall_7 + colors: gray + tag: forbid + WALL (8): + id: Panel Room/Panel_room_wall_8 + colors: gray + tag: forbid + WALL (9): + id: Panel Room/Panel_room_wall_9 + colors: gray + tag: forbid + WALL (10): + id: Panel Room/Panel_room_wall_10 + colors: gray + tag: forbid + WALL (11): + id: Panel Room/Panel_room_wall_11 + colors: gray + tag: forbid + WALL (12): + id: Panel Room/Panel_room_wall_12 + colors: gray + tag: forbid + WALL (13): + id: Panel Room/Panel_room_wall_13 + colors: gray + tag: forbid + WALL (14): + id: Panel Room/Panel_room_wall_14 + colors: gray + tag: forbid + WALL (15): + id: Panel Room/Panel_room_wall_15 + colors: gray + tag: forbid + WALL (16): + id: Panel Room/Panel_room_wall_16 + colors: gray + tag: forbid + WALL (17): + id: Panel Room/Panel_room_wall_17 + colors: gray + tag: forbid + WALL (18): + id: Panel Room/Panel_room_wall_18 + colors: gray + tag: forbid + WALL (19): + id: Panel Room/Panel_room_wall_19 + colors: gray + tag: forbid + WALL (20): + id: Panel Room/Panel_room_wall_20 + colors: gray + tag: forbid + WALL (21): + id: Panel Room/Panel_room_wall_21 + colors: gray + tag: forbid + BROOMED: + id: Panel Room/Panel_broomed_bedroom + colors: yellow + tag: midyellow + required_door: + door: Excavation + LAYS: + id: Panel Room/Panel_lays_maze + colors: purple + tag: toppurp + required_panel: + panel: BROOMED + BASE: + id: Panel Room/Panel_base_basement + colors: blue + tag: midblue + required_panel: + panel: LAYS + MASTERY: + id: Master Room/Panel_mastery_mastery + tag: midwhite + colors: gray + required_door: + room: Orange Tower Seventh Floor + door: Mastery + doors: + Excavation: + event: True + panels: + - WALL (1) + Shortcut to Fifth Floor: + id: + - Tower Room Area Doors/Door_panel_basement + - Tower Room Area Doors/Door_panel_basement2 + panels: + - BASE + Cellar: + entrances: + Room Room: + room: Room Room + door: Excavation + Orange Tower Fifth Floor: + room: Room Room + door: Shortcut to Fifth Floor + Outside The Wise: + entrances: + Orange Tower Sixth Floor: + painting: True + Outside The Initiated: + painting: True + panels: + KITTEN: + id: Clock Room/Panel_kitten_cat + colors: brown + tag: botbrown + CAT: + id: Clock Room/Panel_cat_kitten + tag: bot brown black + colors: + - brown + - black + doors: + Wise Entrance: + id: Clock Room Area Doors/Door_time_start + item_name: The Wise - Entrance + panels: + - KITTEN + - CAT + paintings: + - id: arrows_painting_2 + orientation: east + - id: clock_painting_2 + orientation: east + exit_only: True + required: True + The Wise: + entrances: + Outside The Wise: + room: Outside The Wise + door: Wise Entrance + panels: + Achievement: + id: Countdown Panels/Panel_intelligent_wise + colors: + - brown + - black + tag: forbid + check: True + achievement: The Wise + PUPPY: + id: Clock Room/Panel_puppy_dog + colors: brown + tag: botbrown + ADULT: + id: Clock Room/Panel_adult_child + colors: + - brown + - black + tag: bot brown black + BREAD: + id: Clock Room/Panel_bread_mold + colors: brown + tag: botbrown + DINOSAUR: + id: Clock Room/Panel_dinosaur_fossil + colors: brown + tag: botbrown + OAK: + id: Clock Room/Panel_oak_acorn + colors: + - brown + - black + tag: bot brown black + CORPSE: + id: Clock Room/Panel_corpse_skeleton + colors: brown + tag: botbrown + BEFORE: + id: Clock Room/Panel_before_ere + colors: + - brown + - black + tag: mid brown black + YOUR: + id: Clock Room/Panel_your_thy + colors: + - brown + - black + tag: mid brown black + BETWIXT: + id: Clock Room/Panel_betwixt_between + colors: brown + tag: midbrown + NIGH: + id: Clock Room/Panel_nigh_near + colors: brown + tag: midbrown + CONNEXION: + id: Clock Room/Panel_connexion_connection + colors: brown + tag: midbrown + THOU: + id: Clock Room/Panel_thou_you + colors: brown + tag: midbrown + paintings: + - id: clock_painting_3 + orientation: east + req_blocked: True # outside the wise (with or without door shuffle) + The Red: + entrances: + Roof: True + panels: + Achievement: + id: Countdown Panels/Panel_grandfathered_red + colors: red + tag: forbid + check: True + achievement: The Red + PANDEMIC (1): + id: Hangry Room/Panel_red_top_1 + colors: red + tag: topred + TRINITY: + id: Hangry Room/Panel_red_top_2 + colors: red + tag: topred + CHEMISTRY: + id: Hangry Room/Panel_red_top_3 + colors: red + tag: topred + FLUMMOXED: + id: Hangry Room/Panel_red_top_4 + colors: red + tag: topred + PANDEMIC (2): + id: Hangry Room/Panel_red_mid_1 + colors: red + tag: midred + COUNTERCLOCKWISE: + id: Hangry Room/Panel_red_mid_2 + colors: red + tag: red top red mid black bot + FEARLESS: + id: Hangry Room/Panel_red_mid_3 + colors: red + tag: midred + DEFORESTATION: + id: Hangry Room/Panel_red_mid_4 + colors: red + tag: red mid bot + subtag: mid + link: rmb FORE + CRAFTSMANSHIP: + id: Hangry Room/Panel_red_mid_5 + colors: red + tag: red mid bot + subtag: mid + link: rmb AFT + CAMEL: + id: Hangry Room/Panel_red_bot_1 + colors: red + tag: botred + LION: + id: Hangry Room/Panel_red_bot_2 + colors: red + tag: botred + TIGER: + id: Hangry Room/Panel_red_bot_3 + colors: red + tag: botred + SHIP (1): + id: Hangry Room/Panel_red_bot_4 + colors: red + tag: red mid bot + subtag: bot + link: rmb FORE + SHIP (2): + id: Hangry Room/Panel_red_bot_5 + colors: red + tag: red mid bot + subtag: bot + link: rmb AFT + GIRAFFE: + id: Hangry Room/Panel_red_bot_6 + colors: red + tag: botred + The Ecstatic: + entrances: + Roof: True + panels: + Achievement: + id: Countdown Panels/Panel_ecstatic_ecstatic + colors: yellow + tag: forbid + check: True + achievement: The Ecstatic + FORM (1): + id: Smiley Room/Panel_soundgram_1 + colors: yellow + tag: yellow top bot + subtag: bottom + link: ytb FORM + WIND: + id: Smiley Room/Panel_soundgram_2 + colors: yellow + tag: botyellow + EGGS: + id: Smiley Room/Panel_scrambled_1 + colors: yellow + tag: botyellow + VEGETABLES: + id: Smiley Room/Panel_scrambled_2 + colors: yellow + tag: botyellow + WATER: + id: Smiley Room/Panel_anagram_6_1 + colors: yellow + tag: botyellow + FRUITS: + id: Smiley Room/Panel_anagram_6_2 + colors: yellow + tag: botyellow + LEAVES: + id: Smiley Room/Panel_anagram_7_1 + colors: yellow + tag: topyellow + VINES: + id: Smiley Room/Panel_anagram_7_2 + colors: yellow + tag: topyellow + ICE: + id: Smiley Room/Panel_anagram_7_3 + colors: yellow + tag: topyellow + STYLE: + id: Smiley Room/Panel_anagram_7_4 + colors: yellow + tag: topyellow + FIR: + id: Smiley Room/Panel_anagram_8_1 + colors: yellow + tag: topyellow + REEF: + id: Smiley Room/Panel_anagram_8_2 + colors: yellow + tag: topyellow + ROTS: + id: Smiley Room/Panel_anagram_8_3 + colors: yellow + tag: topyellow + FORM (2): + id: Smiley Room/Panel_anagram_9_1 + colors: yellow + tag: yellow top bot + subtag: top + link: ytb FORM + Outside The Scientific: + entrances: + Roof: True + The Scientific: + door: Scientific Entrance + panels: + OPEN: + id: Chemistry Room/Panel_open + tag: midwhite + CLOSE: + id: Chemistry Room/Panel_close + colors: black + tag: botblack + AHEAD: + id: Chemistry Room/Panel_ahead + colors: black + tag: botblack + doors: + Scientific Entrance: + id: Red Blue Purple Room Area Doors/Door_chemistry_lab + item_name: The Scientific - Entrance + panels: + - OPEN + The Scientific: + entrances: + Outside The Scientific: + room: Outside The Scientific + door: Scientific Entrance + panels: + Achievement: + id: Countdown Panels/Panel_scientific_scientific + colors: + - yellow + - red + - blue + - brown + - black + - purple + tag: forbid + check: True + achievement: The Scientific + HYDROGEN (1): + id: Chemistry Room/Panel_blue_bot_3 + colors: blue + tag: tri botblue + link: tbb WATER + OXYGEN: + id: Chemistry Room/Panel_blue_bot_2 + colors: blue + tag: tri botblue + link: tbb WATER + HYDROGEN (2): + id: Chemistry Room/Panel_blue_bot_4 + colors: blue + tag: tri botblue + link: tbb WATER + SUGAR (1): + id: Chemistry Room/Panel_sugar_1 + colors: red + tag: botred + SUGAR (2): + id: Chemistry Room/Panel_sugar_2 + colors: red + tag: botred + SUGAR (3): + id: Chemistry Room/Panel_sugar_3 + colors: red + tag: botred + CHLORINE: + id: Chemistry Room/Panel_blue_bot_5 + colors: blue + tag: double botblue + subtag: left + link: holo SALT + SODIUM: + id: Chemistry Room/Panel_blue_bot_6 + colors: blue + tag: double botblue + subtag: right + link: holo SALT + FOREST: + id: Chemistry Room/Panel_long_bot_1 + colors: + - red + - blue + tag: chain red bot blue top + POUND: + id: Chemistry Room/Panel_long_top_1 + colors: + - red + - blue + tag: chain blue mid red bot + ICE: + id: Chemistry Room/Panel_brown_bot_1 + colors: brown + tag: botbrown + FISSION: + id: Chemistry Room/Panel_black_bot_1 + colors: black + tag: botblack + FUSION: + id: Chemistry Room/Panel_black_bot_2 + colors: black + tag: botblack + MISS: + id: Chemistry Room/Panel_blue_top_1 + colors: blue + tag: double topblue + subtag: left + link: exp CHEMISTRY + TREE (1): + id: Chemistry Room/Panel_blue_top_2 + colors: blue + tag: double topblue + subtag: right + link: exp CHEMISTRY + BIOGRAPHY: + id: Chemistry Room/Panel_biology_9 + colors: purple + tag: midpurp + CACTUS: + id: Chemistry Room/Panel_biology_4 + colors: red + tag: double botred + subtag: right + link: mero SPINE + VERTEBRATE: + id: Chemistry Room/Panel_biology_8 + colors: red + tag: double botred + subtag: left + link: mero SPINE + ROSE: + id: Chemistry Room/Panel_biology_2 + colors: red + tag: botred + TREE (2): + id: Chemistry Room/Panel_biology_3 + colors: red + tag: botred + FRUIT: + id: Chemistry Room/Panel_biology_1 + colors: red + tag: botred + MAMMAL: + id: Chemistry Room/Panel_biology_5 + colors: red + tag: botred + BIRD: + id: Chemistry Room/Panel_biology_6 + colors: red + tag: botred + FISH: + id: Chemistry Room/Panel_biology_7 + colors: red + tag: botred + GRAVELY: + id: Chemistry Room/Panel_physics_9 + colors: purple + tag: double midpurp + subtag: left + link: change GRAVITY + BREVITY: + id: Chemistry Room/Panel_biology_10 + colors: purple + tag: double midpurp + subtag: right + link: change GRAVITY + PART: + id: Chemistry Room/Panel_physics_2 + colors: blue + tag: blue mid red bot + subtag: mid + link: xur PARTICLE + MATTER: + id: Chemistry Room/Panel_physics_1 + colors: red + tag: blue mid red bot + subtag: bot + link: xur PARTICLE + ELECTRIC: + id: Chemistry Room/Panel_physics_6 + colors: purple + tag: purple mid red bot + subtag: mid + link: xpr ELECTRON + ATOM (1): + id: Chemistry Room/Panel_physics_3 + colors: red + tag: purple mid red bot + subtag: bot + link: xpr ELECTRON + NEUTRAL: + id: Chemistry Room/Panel_physics_7 + colors: purple + tag: purple mid red bot + subtag: mid + link: xpr NEUTRON + ATOM (2): + id: Chemistry Room/Panel_physics_4 + colors: red + tag: purple mid red bot + subtag: bot + link: xpr NEUTRON + PROPEL: + id: Chemistry Room/Panel_physics_8 + colors: purple + tag: purple mid red bot + subtag: mid + link: xpr PROTON + ATOM (3): + id: Chemistry Room/Panel_physics_5 + colors: red + tag: purple mid red bot + subtag: bot + link: xpr PROTON + ORDER: + id: Chemistry Room/Panel_physics_11 + colors: brown + tag: botbrown + OPTICS: + id: Chemistry Room/Panel_physics_10 + colors: yellow + tag: midyellow + GRAPHITE: + id: Chemistry Room/Panel_yellow_bot_1 + colors: yellow + tag: botyellow + HOT RYE: + id: Chemistry Room/Panel_anagram_1 + colors: yellow + tag: midyellow + SIT SHY HOPE: + id: Chemistry Room/Panel_anagram_2 + colors: yellow + tag: midyellow + ME NEXT PIER: + id: Chemistry Room/Panel_anagram_3 + colors: yellow + tag: midyellow + RUT LESS: + id: Chemistry Room/Panel_anagram_4 + colors: yellow + tag: midyellow + SON COUNCIL: + id: Chemistry Room/Panel_anagram_5 + colors: yellow + tag: midyellow + doors: + Chemistry Puzzles: + skip_item: True + location_name: The Scientific - Chemistry Puzzles + panels: + - HYDROGEN (1) + - OXYGEN + - HYDROGEN (2) + - SUGAR (1) + - SUGAR (2) + - SUGAR (3) + - CHLORINE + - SODIUM + - FOREST + - POUND + - ICE + - FISSION + - FUSION + - MISS + - TREE (1) + Biology Puzzles: + skip_item: True + location_name: The Scientific - Biology Puzzles + panels: + - BIOGRAPHY + - CACTUS + - VERTEBRATE + - ROSE + - TREE (2) + - FRUIT + - MAMMAL + - BIRD + - FISH + Physics Puzzles: + skip_item: True + location_name: The Scientific - Physics Puzzles + panels: + - GRAVELY + - BREVITY + - PART + - MATTER + - ELECTRIC + - ATOM (1) + - NEUTRAL + - ATOM (2) + - PROPEL + - ATOM (3) + - ORDER + - OPTICS + paintings: + - id: hi_solved_painting4 + orientation: south + req_blocked_when_no_doors: True # owl hallway in vanilla doors + Challenge Room: + entrances: + Welcome Back Area: + door: Welcome Door + Number Hunt: + room: Outside The Undeterred + door: Challenge Entrance + panels: + WELCOME: + id: Challenge Room/Panel_welcome_welcome + tag: midwhite + CHALLENGE: + id: Challenge Room/Panel_challenge_challenge + tag: midwhite + Achievement: + id: Countdown Panels/Panel_challenged_unchallenged + check: True + colors: + - black + - gray + - red + - blue + - yellow + - purple + - brown + - orange + tag: forbid + achievement: The Unchallenged + OPEN: + id: Challenge Room/Panel_open_nepotism + colors: + - black + - blue + tag: chain mid black !!! blue + SINGED: + id: Challenge Room/Panel_singed_singsong + colors: + - red + - blue + tag: chain mid red blue + NEVER TRUSTED: + id: Challenge Room/Panel_nevertrusted_maladjusted + colors: purple + tag: midpurp + CORNER: + id: Challenge Room/Panel_corner_corn + colors: red + tag: midred + STRAWBERRIES: + id: Challenge Room/Panel_strawberries_mold + colors: brown + tag: double botbrown + subtag: left + link: time MOLD + GRUB: + id: Challenge Room/Panel_grub_burger + colors: + - black + - blue + tag: chain mid black blue + BREAD: + id: Challenge Room/Panel_bread_mold + colors: brown + tag: double botbrown + subtag: right + link: time MOLD + COLOR: + id: Challenge Room/Panel_color_gray + colors: gray + tag: forbid + WRITER: + id: Challenge Room/Panel_writer_songwriter + colors: blue + tag: midblue + "02759": + id: Challenge Room/Panel_tales_stale + colors: + - orange + - yellow + tag: chain mid orange yellow + REAL EYES: + id: Challenge Room/Panel_realeyes_realize + tag: topwhite + LOBS: + id: Challenge Room/Panel_lobs_lobster + colors: blue + tag: midblue + PEST ALLY: + id: Challenge Room/Panel_double_anagram_1 + colors: yellow + tag: midyellow + GENIAL HALO: + id: Challenge Room/Panel_double_anagram_2 + colors: yellow + tag: midyellow + DUCK LOGO: + id: Challenge Room/Panel_double_anagram_3 + colors: yellow + tag: midyellow + AVIAN GREEN: + id: Challenge Room/Panel_double_anagram_4 + colors: yellow + tag: midyellow + FEVER TEAR: + id: Challenge Room/Panel_double_anagram_5 + colors: yellow + tag: midyellow + FACTS: + id: Challenge Room/Panel_facts + colors: + - red + - blue + tag: forbid + FACTS (1): + id: Challenge Room/Panel_facts2 + colors: red + tag: forbid + FACTS (3): + id: Challenge Room/Panel_facts3 + tag: forbid + FACTS (4): + id: Challenge Room/Panel_facts4 + colors: blue + tag: forbid + FACTS (5): + id: Challenge Room/Panel_facts5 + colors: blue + tag: forbid + FACTS (6): + id: Challenge Room/Panel_facts6 + colors: blue + tag: forbid + LAPEL SHEEP: + id: Challenge Room/Panel_double_anagram_6 + colors: yellow + tag: midyellow + doors: + Welcome Door: + id: Entry Room Area Doors/Door_challenge_challenge + panels: + - WELCOME diff --git a/worlds/lingo/__init__.py b/worlds/lingo/__init__.py new file mode 100644 index 000000000000..1f426c92f24a --- /dev/null +++ b/worlds/lingo/__init__.py @@ -0,0 +1,112 @@ +""" +Archipelago init file for Lingo +""" +from BaseClasses import Item, Tutorial +from worlds.AutoWorld import WebWorld, World +from .items import ALL_ITEM_TABLE, LingoItem +from .locations import ALL_LOCATION_TABLE +from .options import LingoOptions +from .player_logic import LingoPlayerLogic +from .regions import create_regions +from .static_logic import Room, RoomEntrance +from .testing import LingoTestOptions + + +class LingoWebWorld(WebWorld): + theme = "grass" + tutorials = [Tutorial( + "Multiworld Setup Guide", + "A guide to playing Lingo with Archipelago.", + "English", + "setup_en.md", + "setup/en", + ["hatkirby"] + )] + + +class LingoWorld(World): + """ + Lingo is a first person indie puzzle game in the vein of The Witness. You find yourself in a mazelike, non-Euclidean + world filled with 800 word puzzles that use a variety of different mechanics. + """ + game = "Lingo" + web = LingoWebWorld() + + base_id = 444400 + topology_present = True + data_version = 1 + + options_dataclass = LingoOptions + options: LingoOptions + + item_name_to_id = { + name: data.code for name, data in ALL_ITEM_TABLE.items() + } + location_name_to_id = { + name: data.code for name, data in ALL_LOCATION_TABLE.items() + } + + player_logic: LingoPlayerLogic + + def generate_early(self): + self.player_logic = LingoPlayerLogic(self) + + def create_regions(self): + create_regions(self, self.player_logic) + + def create_items(self): + pool = [self.create_item(name) for name in self.player_logic.REAL_ITEMS] + + if self.player_logic.FORCED_GOOD_ITEM != "": + new_item = self.create_item(self.player_logic.FORCED_GOOD_ITEM) + location_obj = self.multiworld.get_location("Second Room - Good Luck", self.player) + location_obj.place_locked_item(new_item) + + item_difference = len(self.player_logic.REAL_LOCATIONS) - len(pool) + if item_difference: + trap_percentage = self.options.trap_percentage + traps = int(item_difference * trap_percentage / 100.0) + non_traps = item_difference - traps + + if non_traps: + skip_percentage = self.options.puzzle_skip_percentage + skips = int(non_traps * skip_percentage / 100.0) + non_skips = non_traps - skips + + filler_list = [":)", "The Feeling of Being Lost", "Wanderlust", "Empty White Hallways"] + for i in range(0, non_skips): + pool.append(self.create_item(filler_list[i % len(filler_list)])) + + for i in range(0, skips): + pool.append(self.create_item("Puzzle Skip")) + + if traps: + traps_list = ["Slowness Trap", "Iceland Trap", "Atbash Trap"] + + for i in range(0, traps): + pool.append(self.create_item(traps_list[i % len(traps_list)])) + + self.multiworld.itempool += pool + + def create_item(self, name: str) -> Item: + item = ALL_ITEM_TABLE[name] + return LingoItem(name, item.classification, item.code, self.player) + + def set_rules(self): + self.multiworld.completion_condition[self.player] = lambda state: state.has("Victory", self.player) + + def fill_slot_data(self): + slot_options = [ + "death_link", "victory_condition", "shuffle_colors", "shuffle_doors", "shuffle_paintings", "shuffle_panels", + "mastery_achievements", "level_2_requirement", "location_checks", "early_color_hallways" + ] + + slot_data = { + "seed": self.random.randint(0, 1000000), + **self.options.as_dict(*slot_options), + } + + if self.options.shuffle_paintings: + slot_data["painting_entrance_to_exit"] = self.player_logic.PAINTING_MAPPING + + return slot_data diff --git a/worlds/lingo/docs/en_Lingo.md b/worlds/lingo/docs/en_Lingo.md new file mode 100644 index 000000000000..cff0581d9b2f --- /dev/null +++ b/worlds/lingo/docs/en_Lingo.md @@ -0,0 +1,42 @@ +# Lingo + +## Where is the settings page? + +The [player settings page for this game](../player-settings) contains all the options you need to configure and export a +config file. + +## What does randomization do to this game? + +There are a couple of modes of randomization currently available, and you can pick and choose which ones you would like +to use. + +* **Door shuffle**: There are many doors in the game, which are opened by completing a set of panels. With door shuffle + on, the doors become items and only open up once you receive the corresponding item. The panel sets that would + ordinarily open the doors become locations. + +* **Color shuffle**: There are ten different colors of puzzle in the game, each representing a different mechanic. With + color shuffle on, you would start with only access to white puzzles. Puzzles of other colors will require you to + receive an item in order to solve them (e.g. you can't solve any red puzzles until you receive the "Red" item). + +* **Panel shuffle**: Panel shuffling replaces the puzzles on each panel with different ones. So far, the only mode of + panel shuffling is "rearrange" mode, which simply shuffles the already-existing puzzles from the base game onto + different panels. + +* **Painting shuffle**: This randomizes the appearance of the paintings in the game, as well as which of them are warps, + and the locations that they warp you to. It is the equivalent of an entrance randomizer in another game. + +## What is a "check" in this game? + +Most panels / panel sets that open a door are now location checks, even if door shuffle is not enabled. Various other +puzzles are also location checks, including the achievement panels for each area. + +## What about wall snipes? + +"Wall sniping" refers to the fact that you are able to solve puzzles on the other side of opaque walls. This randomizer +does not change how wall snipes work, but it will never require the use of them. There are three puzzles from the base +game that you would ordinarily be expected to wall snipe. The randomizer moves these panels out of the wall or otherwise +reveals them so that a snipe is not necessary. + +Because of this, all wall snipes are considered out of logic. This includes sniping The Bearer's MIDDLE while standing +outside The Bold, sniping The Colorful without opening all of the color doors, and sniping WELCOME from next to WELCOME +BACK. diff --git a/worlds/lingo/docs/setup_en.md b/worlds/lingo/docs/setup_en.md new file mode 100644 index 000000000000..97f3ce594063 --- /dev/null +++ b/worlds/lingo/docs/setup_en.md @@ -0,0 +1,45 @@ +# Lingo Randomizer Setup + +## Required Software + +- [Lingo](https://store.steampowered.com/app/1814170/Lingo/) +- [Lingo Archipelago Randomizer](https://code.fourisland.com/lingo-archipelago/about/CHANGELOG.md) + +## Optional Software + +- [Archipelago Text Client](https://github.com/ArchipelagoMW/Archipelago/releases) +- [Lingo AP Tracker](https://code.fourisland.com/lingo-ap-tracker/about/CHANGELOG.md) + +## Installation + +1. Download the Lingo Archipelago Randomizer from the above link. +2. Open up Lingo, go to settings, and click View Game Data. This should open up + a folder in Windows Explorer. +3. Unzip the contents of the randomizer into the "maps" folder. You may need to + create the "maps" folder if you have not played a custom Lingo map before. +4. Installation complete! You may have to click Return to go back to the main + menu and then click Settings again in order to get the randomizer to show up + in the level selection list. + +## Joining a Multiworld game + +1. Launch Lingo +2. Click on Settings, and then Level. Choose Archipelago from the list. +3. Start a new game. Leave the name field blank (anything you type in will be + ignored). +4. Enter the Archipelago address, slot name, and password into the fields. +5. Press Connect. +6. Enjoy! + +To continue an earlier game, you can perform the exact same steps as above. You +do not have to re-select Archipelago in the level selection screen if you were +using Archipelago the last time you launched the game. + +In order to play the base game again, simply return to the level selection +screen and choose Level 1 (or whatever else you want to play). The randomizer +will not affect gameplay unless you launch it by starting a new game while it is +selected in the level selection screen, so it is safe to play the game normally +while the client is installed. + +**Note**: Running the randomizer modifies the game's memory. If you want to play +the base game after playing the randomizer, you need to restart Lingo first. diff --git a/worlds/lingo/ids.yaml b/worlds/lingo/ids.yaml new file mode 100644 index 000000000000..f48858a285f0 --- /dev/null +++ b/worlds/lingo/ids.yaml @@ -0,0 +1,1449 @@ +--- +special_items: + Black: 444400 + Red: 444401 + Blue: 444402 + Yellow: 444403 + Green: 444404 + Orange: 444405 + Gray: 444406 + Brown: 444407 + Purple: 444408 + ":)": 444409 + The Feeling of Being Lost: 444575 + Wanderlust: 444576 + Empty White Hallways: 444577 + Slowness Trap: 444410 + Iceland Trap: 444411 + Atbash Trap: 444412 + Puzzle Skip: 444413 +panels: + Starting Room: + HI: 444400 + HIDDEN: 444401 + TYPE: 444402 + THIS: 444403 + WRITE: 444404 + SAME: 444405 + Hidden Room: + DEAD END: 444406 + OPEN: 444407 + LIES: 444408 + The Seeker: + Achievement: 444409 + BEAR: 444410 + MINE: 444411 + MINE (2): 444412 + BOW: 444413 + DOES: 444414 + MOBILE: 444415 + MOBILE (2): 444416 + DESERT: 444417 + DESSERT: 444418 + SOW: 444419 + SEW: 444420 + TO: 444421 + TOO: 444422 + WRITE: 444423 + EWE: 444424 + KNOT: 444425 + NAUGHT: 444426 + BEAR (2): 444427 + Second Room: + HI: 444428 + LOW: 444429 + ANOTHER TRY: 444430 + LEVEL 2: 444431 + Hub Room: + ORDER: 444432 + SLAUGHTER: 444433 + NEAR: 444434 + FAR: 444435 + TRACE: 444436 + RAT: 444437 + OPEN: 444438 + FOUR: 444439 + LOST: 444440 + FORWARD: 444441 + BETWEEN: 444442 + BACKWARD: 444443 + Dead End Area: + FOUR: 444444 + EIGHT: 444445 + Pilgrim Antechamber: + HOT CRUST: 444446 + PILGRIMAGE: 444447 + MASTERY: 444448 + Pilgrim Room: + THIS: 444449 + TIME ROOM: 444450 + SCIENCE ROOM: 444451 + SHINY ROCK ROOM: 444452 + ANGRY POWER: 444453 + MICRO LEGION: 444454 + LOSERS RELAX: 444455 + '906234': 444456 + MOOR EMORDNILAP: 444457 + HALL ROOMMATE: 444458 + ALL GREY: 444459 + PLUNDER ISLAND: 444460 + FLOSS PATHS: 444461 + Crossroads: + DECAY: 444462 + NOPE: 444463 + EIGHT: 444464 + WE ROT: 444465 + WORDS: 444466 + SWORD: 444467 + TURN: 444468 + BEND HI: 444469 + THE EYES: 444470 + CORNER: 444471 + HOLLOW: 444472 + SWAP: 444473 + GEL: 444474 + THOUGH: 444475 + CROSSROADS: 444476 + Lost Area: + LOST (1): 444477 + LOST (2): 444478 + Amen Name Area: + AMEN: 444479 + NAME: 444480 + NINE: 444481 + Suits Area: + SPADES: 444482 + CLUBS: 444483 + HEARTS: 444484 + The Tenacious: + LEVEL (Black): 444485 + RACECAR (Black): 444486 + SOLOS (Black): 444487 + LEVEL (White): 444488 + RACECAR (White): 444489 + SOLOS (White): 444490 + Achievement: 444491 + Warts Straw Area: + WARTS: 444492 + STRAW: 444493 + Leaf Feel Area: + LEAF: 444494 + FEEL: 444495 + Outside The Agreeable: + MASSACRED: 444496 + BLACK: 444497 + CLOSE: 444498 + LEFT: 444499 + LEFT (2): 444500 + RIGHT: 444501 + PURPLE: 444502 + FIVE (1): 444503 + FIVE (2): 444504 + OUT: 444505 + HIDE: 444506 + DAZE: 444507 + WALL: 444508 + KEEP: 444509 + BAILEY: 444510 + TOWER: 444511 + NORTH: 444512 + DIAMONDS: 444513 + FIRE: 444514 + WINTER: 444515 + Dread Hallway: + DREAD: 444516 + The Agreeable: + Achievement: 444517 + BYE: 444518 + RETOOL: 444519 + DRAWER: 444520 + READ: 444521 + DIFFERENT: 444522 + LOW: 444523 + ALIVE: 444524 + THAT: 444525 + STRESSED: 444526 + STAR: 444527 + TAME: 444528 + CAT: 444529 + Hedge Maze: + DOWN: 444530 + HIDE (1): 444531 + HIDE (2): 444532 + HIDE (3): 444533 + MASTERY (1): 444534 + MASTERY (2): 444535 + PATH (1): 444536 + PATH (2): 444537 + PATH (3): 444538 + PATH (4): 444539 + PATH (5): 444540 + PATH (6): 444541 + PATH (7): 444542 + PATH (8): 444543 + REFLOW: 444544 + LEAP: 444545 + The Perceptive: + Achievement: 444546 + GAZE: 444547 + The Fearless (First Floor): + NAPS: 444548 + TEAM: 444549 + TEEM: 444550 + IMPATIENT: 444551 + EAT: 444552 + The Fearless (Second Floor): + NONE: 444553 + SUM: 444554 + FUNNY: 444555 + MIGHT: 444556 + SAFE: 444557 + SAME: 444558 + CAME: 444559 + The Fearless: + Achievement: 444560 + EASY: 444561 + SOMETIMES: 444562 + DARK: 444563 + EVEN: 444564 + The Observant: + Achievement: 444565 + BACK: 444566 + SIDE: 444567 + BACKSIDE: 444568 + STAIRS: 444569 + WAYS: 444570 + 'ON': 444571 + UP: 444572 + SWIMS: 444573 + UPSTAIRS: 444574 + TOIL: 444575 + STOP: 444576 + TOP: 444577 + HI: 444578 + HI (2): 444579 + '31': 444580 + '52': 444581 + OIL: 444582 + BACKSIDE (GREEN): 444583 + SIDEWAYS: 444584 + The Incomparable: + Achievement: 444585 + A (One): 444586 + A (Two): 444587 + A (Three): 444588 + A (Four): 444589 + A (Five): 444590 + A (Six): 444591 + I (One): 444592 + I (Two): 444593 + I (Three): 444594 + I (Four): 444595 + I (Five): 444596 + I (Six): 444597 + I (Seven): 444598 + Eight Room: + Eight Back: 444599 + Eight Front: 444600 + Nine: 444601 + Orange Tower First Floor: + SECRET: 444602 + DADS + ALE: 444603 + SALT: 444604 + Orange Tower Third Floor: + RED: 444605 + DEER + WREN: 444606 + Orange Tower Fourth Floor: + RUNT: 444607 + RUNT (2): 444608 + LEARNS + UNSEW: 444609 + HOT CRUSTS: 444610 + IRK HORN: 444611 + Hot Crusts Area: + EIGHT: 444612 + Orange Tower Fifth Floor: + SIZE (Small): 444613 + SIZE (Big): 444614 + DRAWL + RUNS: 444615 + NINE: 444616 + SUMMER: 444617 + AUTUMN: 444618 + SPRING: 444619 + PAINTING (1): 445078 + PAINTING (2): 445079 + PAINTING (3): 445080 + PAINTING (4): 445081 + PAINTING (5): 445082 + ROOM: 445083 + Orange Tower Seventh Floor: + THE END: 444620 + THE MASTER: 444621 + MASTERY: 444622 + Roof: + MASTERY (1): 444623 + MASTERY (2): 444624 + MASTERY (3): 444625 + MASTERY (4): 444626 + MASTERY (5): 444627 + MASTERY (6): 444628 + STAIRCASE: 444629 + Orange Tower Basement: + MASTERY: 444630 + THE LIBRARY: 444631 + Courtyard: + I: 444632 + GREEN: 444633 + PINECONE: 444634 + ACORN: 444635 + Yellow Backside Area: + BACKSIDE: 444636 + NINE: 444637 + First Second Third Fourth: + FIRST: 444638 + SECOND: 444639 + THIRD: 444640 + FOURTH: 444641 + The Colorful (White): + BEGIN: 444642 + The Colorful (Black): + FOUND: 444643 + The Colorful (Red): + LOAF: 444644 + The Colorful (Yellow): + CREAM: 444645 + The Colorful (Blue): + SUN: 444646 + The Colorful (Purple): + SPOON: 444647 + The Colorful (Orange): + LETTERS: 444648 + The Colorful (Green): + WALLS: 444649 + The Colorful (Brown): + IRON: 444650 + The Colorful (Gray): + OBSTACLE: 444651 + The Colorful: + Achievement: 444652 + Welcome Back Area: + WELCOME BACK: 444653 + SECRET: 444654 + CLOCKWISE: 444655 + Owl Hallway: + STRAYS: 444656 + READS + RUST: 444657 + Outside The Initiated: + SEVEN (1): 444658 + SEVEN (2): 444659 + EIGHT: 444660 + NINE: 444661 + BLUE: 444662 + ORANGE: 444663 + UNCOVER: 444664 + OXEN: 444665 + BACKSIDE: 444666 + The Optimistic: 444667 + PAST: 444668 + FUTURE: 444669 + FUTURE (2): 444670 + PAST (2): 444671 + PRESENT: 444672 + SMILE: 444673 + ANGERED: 444674 + VOTE: 444675 + The Initiated: + Achievement: 444676 + DAUGHTER: 444677 + START: 444678 + STARE: 444679 + HYPE: 444680 + ABYSS: 444681 + SWEAT: 444682 + BEAT: 444683 + ALUMNI: 444684 + PATS: 444685 + KNIGHT: 444686 + BYTE: 444687 + MAIM: 444688 + MORGUE: 444689 + CHAIR: 444690 + HUMAN: 444691 + BED: 444692 + The Traveled: + Achievement: 444693 + CLOSE: 444694 + COMPOSE: 444695 + RECORD: 444696 + CATEGORY: 444697 + HELLO: 444698 + DUPLICATE: 444699 + IDENTICAL: 444700 + DISTANT: 444701 + HAY: 444702 + GIGGLE: 444703 + CHUCKLE: 444704 + SNITCH: 444705 + CONCEALED: 444706 + PLUNGE: 444707 + AUTUMN: 444708 + ROAD: 444709 + FOUR: 444710 + Outside The Bold: + UNOPEN: 444711 + BEGIN: 444712 + SIX: 444713 + NINE: 444714 + LEFT: 444715 + RIGHT: 444716 + RISE (Horizon): 444717 + RISE (Sunrise): 444718 + ZEN: 444719 + SON: 444720 + STARGAZER: 444721 + MOUTH: 444722 + YEAST: 444723 + WET: 444724 + The Bold: + Achievement: 444725 + FOOT: 444726 + NEEDLE: 444727 + FACE: 444728 + SIGN: 444729 + HEARTBREAK: 444730 + UNDEAD: 444731 + DEADLINE: 444732 + SUSHI: 444733 + THISTLE: 444734 + LANDMASS: 444735 + MASSACRED: 444736 + AIRPLANE: 444737 + NIGHTMARE: 444738 + MOUTH: 444739 + SAW: 444740 + HAND: 444741 + Outside The Undeterred: + HOLLOW: 444742 + ART + ART: 444743 + PEN: 444744 + HUSTLING: 444745 + SUNLIGHT: 444746 + LIGHT: 444747 + BRIGHT: 444748 + SUNNY: 444749 + RAINY: 444750 + ZERO: 444751 + ONE: 444752 + TWO (1): 444753 + TWO (2): 444754 + THREE (1): 444755 + THREE (2): 444756 + THREE (3): 444757 + FOUR: 444758 + The Undeterred: + Achievement: 444759 + BONE: 444760 + EYE: 444761 + MOUTH: 444762 + IRIS: 444763 + EYE (2): 444764 + ICE: 444765 + HEIGHT: 444766 + EYE (3): 444767 + NOT: 444768 + JUST: 444769 + READ: 444770 + FATHER: 444771 + FEATHER: 444772 + CONTINENT: 444773 + OCEAN: 444774 + WALL: 444775 + Number Hunt: + FIVE: 444776 + SIX: 444777 + SEVEN: 444778 + EIGHT: 444779 + NINE: 444780 + Directional Gallery: + PEPPER: 444781 + TURN: 444782 + LEARN: 444783 + FIVE (1): 444784 + FIVE (2): 444785 + SIX (1): 444786 + SIX (2): 444787 + SEVEN: 444788 + EIGHT: 444789 + NINE: 444790 + BACKSIDE: 444791 + '834283054': 444792 + PARANOID: 444793 + YELLOW: 444794 + WADED + WEE: 444795 + THE EYES: 444796 + LEFT: 444797 + RIGHT: 444798 + MIDDLE: 444799 + WARD: 444800 + HIND: 444801 + RIG: 444802 + WINDWARD: 444803 + LIGHT: 444804 + REWIND: 444805 + Champion's Rest: + EXIT: 444806 + HUES: 444807 + RED: 444808 + BLUE: 444809 + YELLOW: 444810 + GREEN: 444811 + PURPLE: 444812 + ORANGE: 444813 + YOU: 444814 + ME: 444815 + SECRET BLUE: 444816 + SECRET YELLOW: 444817 + SECRET RED: 444818 + The Bearer: + Achievement: 444819 + MIDDLE: 444820 + FARTHER: 444821 + BACKSIDE: 444822 + PART: 444823 + HEART: 444824 + The Bearer (East): + SIX: 444825 + PEACE: 444826 + The Bearer (North): + SILENT (1): 444827 + SILENT (2): 444828 + SPACE: 444829 + WARTS: 444830 + The Bearer (South): + SIX: 444831 + TENT: 444832 + BOWL: 444833 + The Bearer (West): + SNOW: 444834 + SMILE: 444835 + Bearer Side Area: + SHORTCUT: 444836 + POTS: 444837 + Cross Tower (East): + WINTER: 444838 + Cross Tower (North): + NORTH: 444839 + Cross Tower (South): + FIRE: 444840 + Cross Tower (West): + DIAMONDS: 444841 + The Steady (Rose): + SOAR: 444842 + The Steady (Ruby): + BURY: 444843 + The Steady (Carnation): + INCARNATION: 444844 + The Steady (Sunflower): + SUN: 444845 + The Steady (Plum): + LUMP: 444846 + The Steady (Lime): + LIMELIGHT: 444847 + The Steady (Lemon): + MELON: 444848 + The Steady (Topaz): + TOP: 444849 + MASTERY: 444850 + The Steady (Orange): + BLUE: 444851 + The Steady (Sapphire): + SAP: 444852 + The Steady (Blueberry): + BLUE: 444853 + The Steady (Amber): + ANTECHAMBER: 444854 + The Steady (Emerald): + HERALD: 444855 + The Steady (Amethyst): + PACIFIST: 444856 + The Steady (Lilac): + LIE LACK: 444857 + The Steady (Cherry): + HAIRY: 444858 + The Steady: + Achievement: 444859 + Knight Night (Outer Ring): + NIGHT: 444860 + KNIGHT: 444861 + BEE: 444862 + NEW: 444863 + FORE: 444864 + TRUSTED (1): 444865 + TRUSTED (2): 444866 + ENCRUSTED: 444867 + ADJUST (1): 444868 + ADJUST (2): 444869 + RIGHT: 444870 + TRUST: 444871 + Knight Night (Right Upper Segment): + RUST (1): 444872 + RUST (2): 444873 + Knight Night (Right Lower Segment): + ADJUST: 444874 + BEFORE: 444875 + BE: 444876 + LEFT: 444877 + TRUST: 444878 + Knight Night (Final): + TRUSTED: 444879 + Knight Night Exit: + SEVEN (1): 444880 + SEVEN (2): 444881 + SEVEN (3): 444882 + DEAD END: 444883 + WARNER: 444884 + The Artistic (Smiley): + Achievement: 444885 + FINE: 444886 + BLADE: 444887 + RED: 444888 + BEARD: 444889 + ICE: 444890 + ROOT: 444891 + The Artistic (Panda): + EYE (Top): 444892 + EYE (Bottom): 444893 + LADYLIKE: 444894 + WATER: 444895 + OURS: 444896 + DAYS: 444897 + NIGHTTIME: 444898 + NIGHT: 444899 + The Artistic (Lattice): + POSH: 444900 + MALL: 444901 + DEICIDE: 444902 + WAVER: 444903 + REPAID: 444904 + BABY: 444905 + LOBE: 444906 + BOWELS: 444907 + The Artistic (Apple): + SPRIG: 444908 + RELEASES: 444909 + MUCH: 444910 + FISH: 444911 + MASK: 444912 + HILL: 444913 + TINE: 444914 + THING: 444915 + The Artistic (Hint Room): + THEME: 444916 + PAINTS: 444917 + I: 444918 + KIT: 444919 + The Discerning: + Achievement: 444920 + HITS: 444921 + WARRED: 444922 + REDRAW: 444923 + ADDER: 444924 + LAUGHTERS: 444925 + STONE: 444926 + ONSET: 444927 + RAT: 444928 + DUSTY: 444929 + ARTS: 444930 + TSAR: 444931 + STATE: 444932 + REACT: 444933 + DEAR: 444934 + DARE: 444935 + SEAM: 444936 + The Eyes They See: + NEAR: 444937 + EIGHT: 444938 + Far Window: + FAR: 444939 + Outside The Wondrous: + SHRINK: 444940 + The Wondrous (Bookcase): + CASE: 444941 + The Wondrous (Chandelier): + CANDLE HEIR: 444942 + The Wondrous (Window): + GLASS: 444943 + The Wondrous (Table): + WOOD: 444944 + BROOK NOD: 444945 + The Wondrous: + FIREPLACE: 444946 + Achievement: 444947 + Arrow Garden: + MASTERY: 444948 + SHARP: 444949 + Hallway Room (2): + WISE: 444950 + CLOCK: 444951 + ER: 444952 + COUNT: 444953 + Hallway Room (3): + TRANCE: 444954 + FORM: 444955 + A: 444956 + SHUN: 444957 + Hallway Room (4): + WHEEL: 444958 + Elements Area: + A: 444959 + NINE: 444960 + UNDISTRACTED: 444961 + MASTERY: 444962 + EARTH: 444963 + WATER: 444964 + AIR: 444965 + Outside The Wanderer: + WANDERLUST: 444966 + The Wanderer: + Achievement: 444967 + '7890': 444968 + '6524': 444969 + '951': 444970 + '4524': 444971 + LEARN: 444972 + DUST: 444973 + STAR: 444974 + WANDER: 444975 + Art Gallery: + EIGHT: 444976 + EON: 444977 + TRUSTWORTHY: 444978 + FREE: 444979 + OUR: 444980 + ONE ROAD MANY TURNS: 444981 + Art Gallery (Second Floor): + HOUSE: 444982 + PATH: 444983 + PARK: 444984 + CARRIAGE: 444985 + Art Gallery (Third Floor): + AN: 444986 + MAY: 444987 + ANY: 444988 + MAN: 444989 + Art Gallery (Fourth Floor): + URNS: 444990 + LEARNS: 444991 + RUNTS: 444992 + SEND - USE: 444993 + TRUST: 444994 + '062459': 444995 + Rhyme Room (Smiley): + LOANS: 444996 + SKELETON: 444997 + REPENTANCE: 444998 + WORD: 444999 + SCHEME: 445000 + FANTASY: 445001 + HISTORY: 445002 + SECRET: 445003 + Rhyme Room (Cross): + NINE: 445004 + FERN: 445005 + STAY: 445006 + FRIEND: 445007 + RISE: 445008 + PLUMP: 445009 + BOUNCE: 445010 + SCRAWL: 445011 + PLUNGE: 445012 + LEAP: 445013 + Rhyme Room (Circle): + BIRD: 445014 + LETTER: 445015 + FORBIDDEN: 445016 + CONCEALED: 445017 + VIOLENT: 445018 + MUTE: 445019 + Rhyme Room (Looped Square): + WALKED: 445020 + OBSTRUCTED: 445021 + SKIES: 445022 + SWELL: 445023 + PENNED: 445024 + CLIMB: 445025 + TROUBLE: 445026 + DUPLICATE: 445027 + Rhyme Room (Target): + WILD: 445028 + KID: 445029 + PISTOL: 445030 + QUARTZ: 445031 + INNOVATIVE (Top): 445032 + INNOVATIVE (Bottom): 445033 + Room Room: + DOOR (1): 445034 + DOOR (2): 445035 + WINDOW: 445036 + STAIRS: 445037 + PAINTING: 445038 + FLOOR (1): 445039 + FLOOR (2): 445040 + FLOOR (3): 445041 + FLOOR (4): 445042 + FLOOR (5): 445043 + FLOOR (7): 445044 + FLOOR (8): 445045 + FLOOR (9): 445046 + FLOOR (10): 445047 + CEILING (1): 445048 + CEILING (2): 445049 + CEILING (3): 445050 + CEILING (4): 445051 + CEILING (5): 445052 + WALL (1): 445053 + WALL (2): 445054 + WALL (3): 445055 + WALL (4): 445056 + WALL (5): 445057 + WALL (6): 445058 + WALL (7): 445059 + WALL (8): 445060 + WALL (9): 445061 + WALL (10): 445062 + WALL (11): 445063 + WALL (12): 445064 + WALL (13): 445065 + WALL (14): 445066 + WALL (15): 445067 + WALL (16): 445068 + WALL (17): 445069 + WALL (18): 445070 + WALL (19): 445071 + WALL (20): 445072 + WALL (21): 445073 + BROOMED: 445074 + LAYS: 445075 + BASE: 445076 + MASTERY: 445077 + Outside The Wise: + KITTEN: 445084 + CAT: 445085 + The Wise: + Achievement: 445086 + PUPPY: 445087 + ADULT: 445088 + BREAD: 445089 + DINOSAUR: 445090 + OAK: 445091 + CORPSE: 445092 + BEFORE: 445093 + YOUR: 445094 + BETWIXT: 445095 + NIGH: 445096 + CONNEXION: 445097 + THOU: 445098 + The Red: + Achievement: 445099 + PANDEMIC (1): 445100 + TRINITY: 445101 + CHEMISTRY: 445102 + FLUMMOXED: 445103 + PANDEMIC (2): 445104 + COUNTERCLOCKWISE: 445105 + FEARLESS: 445106 + DEFORESTATION: 445107 + CRAFTSMANSHIP: 445108 + CAMEL: 445109 + LION: 445110 + TIGER: 445111 + SHIP (1): 445112 + SHIP (2): 445113 + GIRAFFE: 445114 + The Ecstatic: + Achievement: 445115 + FORM (1): 445116 + WIND: 445117 + EGGS: 445118 + VEGETABLES: 445119 + WATER: 445120 + FRUITS: 445121 + LEAVES: 445122 + VINES: 445123 + ICE: 445124 + STYLE: 445125 + FIR: 445126 + REEF: 445127 + ROTS: 445128 + FORM (2): 445129 + Outside The Scientific: + OPEN: 445130 + CLOSE: 445131 + AHEAD: 445132 + The Scientific: + Achievement: 445133 + HYDROGEN (1): 445134 + OXYGEN: 445135 + HYDROGEN (2): 445136 + SUGAR (1): 445137 + SUGAR (2): 445138 + SUGAR (3): 445139 + CHLORINE: 445140 + SODIUM: 445141 + FOREST: 445142 + POUND: 445143 + ICE: 445144 + FISSION: 445145 + FUSION: 445146 + MISS: 445147 + TREE (1): 445148 + BIOGRAPHY: 445149 + CACTUS: 445150 + VERTEBRATE: 445151 + ROSE: 445152 + TREE (2): 445153 + FRUIT: 445154 + MAMMAL: 445155 + BIRD: 445156 + FISH: 445157 + GRAVELY: 445158 + BREVITY: 445159 + PART: 445160 + MATTER: 445161 + ELECTRIC: 445162 + ATOM (1): 445163 + NEUTRAL: 445164 + ATOM (2): 445165 + PROPEL: 445166 + ATOM (3): 445167 + ORDER: 445168 + OPTICS: 445169 + GRAPHITE: 445170 + HOT RYE: 445171 + SIT SHY HOPE: 445172 + ME NEXT PIER: 445173 + RUT LESS: 445174 + SON COUNCIL: 445175 + Challenge Room: + WELCOME: 445176 + CHALLENGE: 445177 + Achievement: 445178 + OPEN: 445179 + SINGED: 445180 + NEVER TRUSTED: 445181 + CORNER: 445182 + STRAWBERRIES: 445183 + GRUB: 445184 + BREAD: 445185 + COLOR: 445186 + WRITER: 445187 + '02759': 445188 + REAL EYES: 445189 + LOBS: 445190 + PEST ALLY: 445191 + GENIAL HALO: 445192 + DUCK LOGO: 445193 + AVIAN GREEN: 445194 + FEVER TEAR: 445195 + FACTS: 445196 + FACTS (1): 445197 + FACTS (3): 445198 + FACTS (4): 445199 + FACTS (5): 445200 + FACTS (6): 445201 + LAPEL SHEEP: 445202 +doors: + Starting Room: + Back Right Door: + item: 444416 + location: 444401 + Rhyme Room Entrance: + item: 444417 + Hidden Room: + Dead End Door: + item: 444419 + Knight Night Entrance: + item: 444421 + Seeker Entrance: + item: 444422 + location: 444407 + Rhyme Room Entrance: + item: 444423 + Second Room: + Exit Door: + item: 444424 + location: 445203 + Hub Room: + Crossroads Entrance: + item: 444425 + location: 444432 + Tenacious Entrance: + item: 444426 + location: 444433 + Symmetry Door: + item: 444428 + location: 445204 + Shortcut to Hedge Maze: + item: 444430 + location: 444436 + Near RAT Door: + item: 444432 + Traveled Entrance: + item: 444433 + location: 444438 + Lost Door: + item: 444435 + location: 444440 + Pilgrim Antechamber: + Sun Painting: + item: 444436 + location: 445205 + Pilgrim Room: + Shortcut to The Seeker: + item: 444437 + location: 444449 + Crossroads: + Tenacious Entrance: + item: 444438 + location: 444462 + Discerning Entrance: + item: 444439 + location: 444463 + Tower Entrance: + item: 444440 + location: 444465 + Tower Back Entrance: + item: 444442 + location: 445206 + Words Sword Door: + item: 444443 + location: 445207 + Eye Wall: + item: 444445 + location: 444469 + Hollow Hallway: + item: 444446 + Roof Access: + item: 444447 + Lost Area: + Exit: + item: 444448 + location: 445208 + Amen Name Area: + Exit: + item: 444449 + location: 445209 + The Tenacious: + Shortcut to Hub Room: + item: 444450 + location: 445210 + White Palindromes: + location: 445211 + Warts Straw Area: + Door: + item: 444451 + location: 445212 + Leaf Feel Area: + Door: + item: 444452 + location: 445213 + Outside The Agreeable: + Tenacious Entrance: + item: 444453 + location: 444496 + Black Door: + item: 444454 + location: 444497 + Agreeable Entrance: + item: 444455 + location: 444498 + Painting Shortcut: + item: 444456 + location: 444501 + Purple Barrier: + item: 444457 + Hallway Door: + item: 444459 + location: 445214 + Dread Hallway: + Tenacious Entrance: + item: 444462 + location: 444516 + The Agreeable: + Shortcut to Hedge Maze: + item: 444463 + location: 444518 + Hedge Maze: + Perceptive Entrance: + item: 444464 + location: 444530 + Painting Shortcut: + item: 444465 + Observant Entrance: + item: 444466 + Hide and Seek: + location: 445215 + The Fearless (First Floor): + Second Floor: + item: 444468 + location: 445216 + The Fearless (Second Floor): + Third Floor: + item: 444471 + location: 445217 + The Observant: + Backside Door: + item: 444472 + location: 445218 + Stairs: + item: 444474 + location: 444569 + The Incomparable: + Eight Painting: + item: 444475 + location: 445219 + Orange Tower: + Second Floor: + item: 444476 + Third Floor: + item: 444477 + Fourth Floor: + item: 444478 + Fifth Floor: + item: 444479 + Sixth Floor: + item: 444480 + Seventh Floor: + item: 444481 + Orange Tower First Floor: + Shortcut to Hub Room: + item: 444483 + location: 444602 + Salt Pepper Door: + item: 444485 + location: 445220 + Orange Tower Third Floor: + Red Barrier: + item: 444486 + Rhyme Room Entrance: + item: 444487 + Orange Barrier: + item: 444488 + location: 445221 + Orange Tower Fourth Floor: + Hot Crusts Door: + item: 444490 + location: 444610 + Orange Tower Fifth Floor: + Welcome Back: + item: 444491 + location: 445222 + Orange Tower Seventh Floor: + Mastery: + item: 444493 + Mastery Panels: + location: 445223 + Courtyard: + Painting Shortcut: + item: 444494 + Green Barrier: + item: 444495 + First Second Third Fourth: + Backside Door: + item: 444496 + location: 445224 + The Colorful (White): + Progress Door: + item: 444497 + location: 445225 + The Colorful (Black): + Progress Door: + item: 444499 + location: 445226 + The Colorful (Red): + Progress Door: + item: 444500 + location: 445227 + The Colorful (Yellow): + Progress Door: + item: 444501 + location: 445228 + The Colorful (Blue): + Progress Door: + item: 444502 + location: 445229 + The Colorful (Purple): + Progress Door: + item: 444503 + location: 445230 + The Colorful (Orange): + Progress Door: + item: 444504 + location: 445231 + The Colorful (Green): + Progress Door: + item: 444505 + location: 445232 + The Colorful (Brown): + Progress Door: + item: 444506 + location: 445233 + The Colorful (Gray): + Progress Door: + item: 444507 + location: 445234 + Welcome Back Area: + Shortcut to Starting Room: + item: 444508 + location: 444653 + Owl Hallway: + Shortcut to Hedge Maze: + item: 444509 + location: 444656 + Outside The Initiated: + Shortcut to Hub Room: + item: 444510 + location: 444664 + Blue Barrier: + item: 444511 + Orange Barrier: + item: 444512 + Initiated Entrance: + item: 444513 + location: 444665 + Green Barrier: + item: 444514 + location: 445235 + Purple Barrier: + item: 444515 + location: 445236 + Entrance: + item: 444516 + location: 445237 + The Traveled: + Color Hallways Entrance: + item: 444517 + location: 444698 + Outside The Bold: + Bold Entrance: + item: 444518 + location: 444711 + Painting Shortcut: + item: 444519 + Steady Entrance: + item: 444520 + location: 444712 + Outside The Undeterred: + Undeterred Entrance: + item: 444521 + location: 444744 + Painting Shortcut: + item: 444522 + Green Painting: + item: 444523 + Twos: + item: 444524 + location: 444752 + Threes: + item: 444525 + location: 445238 + Number Hunt: + item: 444526 + location: 445239 + Fours: + item: 444527 + Fives: + item: 444528 + location: 445240 + Challenge Entrance: + item: 444529 + location: 444751 + Number Hunt: + Door to Directional Gallery: + item: 444530 + Sixes: + item: 444532 + location: 445241 + Sevens: + item: 444533 + location: 445242 + Eights: + item: 444534 + location: 445243 + Nines: + item: 444535 + location: 445244 + Zero Door: + item: 444536 + location: 445245 + Directional Gallery: + Shortcut to The Undeterred: + item: 444537 + location: 445246 + Yellow Barrier: + item: 444538 + Champion's Rest: + Shortcut to The Steady: + item: 444539 + location: 444806 + The Bearer: + Shortcut to The Bold: + item: 444540 + location: 444820 + Backside Door: + item: 444541 + location: 444821 + Bearer Side Area: + Shortcut to Tower: + item: 444542 + location: 445247 + Knight Night (Final): + Exit: + item: 444543 + location: 445248 + The Artistic (Smiley): + Door to Panda: + item: 444544 + location: 445249 + The Artistic (Panda): + Door to Lattice: + item: 444546 + location: 445250 + The Artistic (Lattice): + Door to Apple: + item: 444547 + location: 445251 + The Artistic (Apple): + Door to Smiley: + item: 444548 + location: 445252 + The Eyes They See: + Exit: + item: 444549 + location: 444937 + Outside The Wondrous: + Wondrous Entrance: + item: 444550 + location: 444940 + The Wondrous (Doorknob): + Painting Shortcut: + item: 444551 + The Wondrous: + Exit: + item: 444552 + location: 444947 + Hallway Room (2): + Exit: + item: 444553 + location: 445253 + Hallway Room (3): + Exit: + item: 444554 + location: 445254 + Hallway Room (4): + Exit: + item: 444555 + location: 445255 + Outside The Wanderer: + Wanderer Entrance: + item: 444556 + location: 444966 + Tower Entrance: + item: 444557 + Art Gallery: + Second Floor: + item: 444558 + First Floor Puzzles: + location: 445256 + Third Floor: + item: 444559 + Fourth Floor: + item: 444560 + Fifth Floor: + item: 444561 + Exit: + item: 444562 + location: 444981 + Art Gallery (Second Floor): + Puzzles: + location: 445257 + Art Gallery (Third Floor): + Puzzles: + location: 445258 + Art Gallery (Fourth Floor): + Puzzles: + location: 445259 + Rhyme Room (Smiley): + Door to Target: + item: 444564 + Door to Target (Location): + location: 445260 + Rhyme Room (Cross): + Exit: + item: 444565 + location: 445261 + Rhyme Room (Circle): + Door to Smiley: + item: 444566 + location: 445262 + Rhyme Room (Looped Square): + Door to Circle: + item: 444567 + location: 445263 + Door to Cross: + item: 444568 + location: 445264 + Door to Target: + item: 444569 + location: 445265 + Rhyme Room (Target): + Door to Cross: + item: 444570 + location: 445266 + Room Room: + Shortcut to Fifth Floor: + item: 444571 + location: 445076 + Outside The Wise: + Wise Entrance: + item: 444572 + location: 445267 + Outside The Scientific: + Scientific Entrance: + item: 444573 + location: 445130 + The Scientific: + Chemistry Puzzles: + location: 445268 + Biology Puzzles: + location: 445269 + Physics Puzzles: + location: 445270 + Challenge Room: + Welcome Door: + item: 444574 + location: 445176 +door_groups: + Rhyme Room Doors: 444418 + Dead End Area Access: 444420 + Entrances to The Tenacious: 444427 + Symmetry Doors: 444429 + Hedge Maze Doors: 444431 + Entrance to The Traveled: 444434 + Crossroads - Tower Entrances: 444441 + Crossroads Doors: 444444 + Color Hunt Barriers: 444458 + Hallway Room Doors: 444460 + Observant Doors: 444467 + Fearless Doors: 444469 + Backside Doors: 444473 + Orange Tower First Floor - Shortcuts: 444484 + Champion's Rest - Color Barriers: 444489 + Welcome Back Doors: 444492 + Colorful Doors: 444498 + Directional Gallery Doors: 444531 + Artistic Doors: 444545 +progression: + Progressive Hallway Room: 444461 + Progressive Fearless: 444470 + Progressive Orange Tower: 444482 + Progressive Art Gallery: 444563 diff --git a/worlds/lingo/items.py b/worlds/lingo/items.py new file mode 100644 index 000000000000..af24570f278e --- /dev/null +++ b/worlds/lingo/items.py @@ -0,0 +1,106 @@ +from typing import Dict, List, NamedTuple, Optional, TYPE_CHECKING + +from BaseClasses import Item, ItemClassification +from .options import ShuffleDoors +from .static_logic import DOORS_BY_ROOM, PROGRESSION_BY_ROOM, PROGRESSIVE_ITEMS, get_door_group_item_id, \ + get_door_item_id, get_progressive_item_id, get_special_item_id + +if TYPE_CHECKING: + from . import LingoWorld + + +class ItemData(NamedTuple): + """ + ItemData for an item in Lingo + """ + code: int + classification: ItemClassification + mode: Optional[str] + door_ids: List[str] + painting_ids: List[str] + + def should_include(self, world: "LingoWorld") -> bool: + if self.mode == "colors": + return world.options.shuffle_colors > 0 + elif self.mode == "doors": + return world.options.shuffle_doors != ShuffleDoors.option_none + elif self.mode == "orange tower": + # door shuffle is on and tower isn't progressive + return world.options.shuffle_doors != ShuffleDoors.option_none \ + and not world.options.progressive_orange_tower + elif self.mode == "complex door": + return world.options.shuffle_doors == ShuffleDoors.option_complex + elif self.mode == "door group": + return world.options.shuffle_doors == ShuffleDoors.option_simple + elif self.mode == "special": + return False + else: + return True + + +class LingoItem(Item): + """ + Item from the game Lingo + """ + game: str = "Lingo" + + +ALL_ITEM_TABLE: Dict[str, ItemData] = {} + + +def load_item_data(): + global ALL_ITEM_TABLE + + for color in ["Black", "Red", "Blue", "Yellow", "Green", "Orange", "Gray", "Brown", "Purple"]: + ALL_ITEM_TABLE[color] = ItemData(get_special_item_id(color), ItemClassification.progression, + "colors", [], []) + + door_groups: Dict[str, List[str]] = {} + for room_name, doors in DOORS_BY_ROOM.items(): + for door_name, door in doors.items(): + if door.skip_item is True or door.event is True: + continue + + if door.group is None: + door_mode = "doors" + else: + door_mode = "complex door" + door_groups.setdefault(door.group, []).extend(door.door_ids) + + if room_name in PROGRESSION_BY_ROOM and door_name in PROGRESSION_BY_ROOM[room_name]: + if room_name == "Orange Tower": + door_mode = "orange tower" + else: + door_mode = "special" + + ALL_ITEM_TABLE[door.item_name] = \ + ItemData(get_door_item_id(room_name, door_name), + ItemClassification.filler if door.junk_item else ItemClassification.progression, door_mode, + door.door_ids, door.painting_ids) + + for group, group_door_ids in door_groups.items(): + ALL_ITEM_TABLE[group] = ItemData(get_door_group_item_id(group), + ItemClassification.progression, "door group", group_door_ids, []) + + special_items: Dict[str, ItemClassification] = { + ":)": ItemClassification.filler, + "The Feeling of Being Lost": ItemClassification.filler, + "Wanderlust": ItemClassification.filler, + "Empty White Hallways": ItemClassification.filler, + "Slowness Trap": ItemClassification.trap, + "Iceland Trap": ItemClassification.trap, + "Atbash Trap": ItemClassification.trap, + "Puzzle Skip": ItemClassification.useful, + } + + for item_name, classification in special_items.items(): + ALL_ITEM_TABLE[item_name] = ItemData(get_special_item_id(item_name), classification, + "special", [], []) + + for item_name in PROGRESSIVE_ITEMS: + ALL_ITEM_TABLE[item_name] = ItemData(get_progressive_item_id(item_name), + ItemClassification.progression, "special", [], []) + + +# Initialize the item data at module scope. +load_item_data() diff --git a/worlds/lingo/locations.py b/worlds/lingo/locations.py new file mode 100644 index 000000000000..5903d603ec4f --- /dev/null +++ b/worlds/lingo/locations.py @@ -0,0 +1,80 @@ +from enum import Flag, auto +from typing import Dict, List, NamedTuple + +from BaseClasses import Location +from .static_logic import DOORS_BY_ROOM, PANELS_BY_ROOM, RoomAndPanel, get_door_location_id, get_panel_location_id + + +class LocationClassification(Flag): + normal = auto() + reduced = auto() + insanity = auto() + + +class LocationData(NamedTuple): + """ + LocationData for a location in Lingo + """ + code: int + room: str + panels: List[RoomAndPanel] + classification: LocationClassification + + def panel_ids(self): + ids = set() + for panel in self.panels: + effective_room = self.room if panel.room is None else panel.room + panel_data = PANELS_BY_ROOM[effective_room][panel.panel] + ids = ids | set(panel_data.internal_ids) + return ids + + +class LingoLocation(Location): + """ + Location from the game Lingo + """ + game: str = "Lingo" + + +ALL_LOCATION_TABLE: Dict[str, LocationData] = {} + + +def load_location_data(): + global ALL_LOCATION_TABLE + + for room_name, panels in PANELS_BY_ROOM.items(): + for panel_name, panel in panels.items(): + location_name = f"{room_name} - {panel_name}" + + classification = LocationClassification.insanity + if panel.check: + classification |= LocationClassification.normal + + if not panel.exclude_reduce: + classification |= LocationClassification.reduced + + ALL_LOCATION_TABLE[location_name] = \ + LocationData(get_panel_location_id(room_name, panel_name), room_name, + [RoomAndPanel(None, panel_name)], classification) + + for room_name, doors in DOORS_BY_ROOM.items(): + for door_name, door in doors.items(): + if door.skip_location or door.event or door.panels is None: + continue + + location_name = door.location_name + classification = LocationClassification.normal + if door.include_reduce: + classification |= LocationClassification.reduced + + if location_name in ALL_LOCATION_TABLE: + new_id = ALL_LOCATION_TABLE[location_name].code + classification |= ALL_LOCATION_TABLE[location_name].classification + else: + new_id = get_door_location_id(room_name, door_name) + + ALL_LOCATION_TABLE[location_name] = LocationData(new_id, room_name, door.panels, classification) + + +# Initialize location data on the module scope. +load_location_data() diff --git a/worlds/lingo/options.py b/worlds/lingo/options.py new file mode 100644 index 000000000000..7dc6a1389c0c --- /dev/null +++ b/worlds/lingo/options.py @@ -0,0 +1,126 @@ +from dataclasses import dataclass + +from Options import Toggle, Choice, DefaultOnToggle, Range, PerGameCommonOptions + + +class ShuffleDoors(Choice): + """If on, opening doors will require their respective "keys". + In "simple", doors are sorted into logical groups, which are all opened by receiving an item. + In "complex", the items are much more granular, and will usually only open a single door each.""" + display_name = "Shuffle Doors" + option_none = 0 + option_simple = 1 + option_complex = 2 + + +class ProgressiveOrangeTower(DefaultOnToggle): + """When "Shuffle Doors" is on, this setting governs the manner in which the Orange Tower floors open up. + If off, there is an item for each floor of the tower, and each floor's item is the only one needed to access that floor. + If on, there are six progressive items, which open up the tower from the bottom floor upward. + """ + display_name = "Progressive Orange Tower" + + +class LocationChecks(Choice): + """On "normal", there will be a location check for each panel set that would ordinarily open a door, as well as for + achievement panels and a small handful of other panels. + On "reduced", many of the locations that are associated with opening doors are removed. + On "insanity", every individual panel in the game is a location check.""" + display_name = "Location Checks" + option_normal = 0 + option_reduced = 1 + option_insanity = 2 + + +class ShuffleColors(Toggle): + """If on, an item is added to the pool for every puzzle color (besides White). + You will need to unlock the requisite colors in order to be able to solve puzzles of that color.""" + display_name = "Shuffle Colors" + + +class ShufflePanels(Choice): + """If on, the puzzles on each panel are randomized. + On "rearrange", the puzzles are the same as the ones in the base game, but are placed in different areas.""" + display_name = "Shuffle Panels" + option_none = 0 + option_rearrange = 1 + + +class ShufflePaintings(Toggle): + """If on, the destination, location, and appearance of the painting warps in the game will be randomized.""" + display_name = "Shuffle Paintings" + + +class VictoryCondition(Choice): + """Change the victory condition.""" + display_name = "Victory Condition" + option_the_end = 0 + option_the_master = 1 + option_level_2 = 2 + + +class MasteryAchievements(Range): + """The number of achievements required to unlock THE MASTER. + In the base game, 21 achievements are needed. + If you include The Scientific and The Unchallenged, which are in the base game but are not counted for mastery, 23 would be required. + If you include the custom achievement (The Wanderer), 24 would be required. + """ + display_name = "Mastery Achievements" + range_start = 1 + range_end = 24 + default = 21 + + +class Level2Requirement(Range): + """The number of panel solves required to unlock LEVEL 2. + In the base game, 223 are needed. + Note that this count includes ANOTHER TRY. + """ + display_name = "Level 2 Requirement" + range_start = 2 + range_end = 800 + default = 223 + + +class EarlyColorHallways(Toggle): + """When on, a painting warp to the color hallways area will appear in the starting room. + This lets you avoid being trapped in the starting room for long periods of time when door shuffle is on.""" + display_name = "Early Color Hallways" + + +class TrapPercentage(Range): + """Replaces junk items with traps, at the specified rate.""" + display_name = "Trap Percentage" + range_start = 0 + range_end = 100 + default = 20 + + +class PuzzleSkipPercentage(Range): + """Replaces junk items with puzzle skips, at the specified rate.""" + display_name = "Puzzle Skip Percentage" + range_start = 0 + range_end = 100 + default = 20 + + +class DeathLink(Toggle): + """If on: Whenever another player on death link dies, you will be returned to the starting room.""" + display_name = "Death Link" + + +@dataclass +class LingoOptions(PerGameCommonOptions): + shuffle_doors: ShuffleDoors + progressive_orange_tower: ProgressiveOrangeTower + location_checks: LocationChecks + shuffle_colors: ShuffleColors + shuffle_panels: ShufflePanels + shuffle_paintings: ShufflePaintings + victory_condition: VictoryCondition + mastery_achievements: MasteryAchievements + level_2_requirement: Level2Requirement + early_color_hallways: EarlyColorHallways + trap_percentage: TrapPercentage + puzzle_skip_percentage: PuzzleSkipPercentage + death_link: DeathLink diff --git a/worlds/lingo/player_logic.py b/worlds/lingo/player_logic.py new file mode 100644 index 000000000000..abb975e020ae --- /dev/null +++ b/worlds/lingo/player_logic.py @@ -0,0 +1,296 @@ +from typing import Dict, List, NamedTuple, Optional, TYPE_CHECKING + +from .items import ALL_ITEM_TABLE +from .locations import ALL_LOCATION_TABLE, LocationClassification +from .options import LocationChecks, ShuffleDoors, VictoryCondition +from .static_logic import DOORS_BY_ROOM, Door, PAINTINGS, PAINTINGS_BY_ROOM, PAINTING_ENTRANCES, PAINTING_EXITS, \ + PANELS_BY_ROOM, PROGRESSION_BY_ROOM, REQUIRED_PAINTING_ROOMS, REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS, ROOMS, \ + RoomAndPanel +from .testing import LingoTestOptions + +if TYPE_CHECKING: + from . import LingoWorld + + +class PlayerLocation(NamedTuple): + name: str + code: Optional[int] = None + panels: List[RoomAndPanel] = [] + + +class LingoPlayerLogic: + """ + Defines logic after a player's options have been applied + """ + + ITEM_BY_DOOR: Dict[str, Dict[str, str]] + + LOCATIONS_BY_ROOM: Dict[str, List[PlayerLocation]] + REAL_LOCATIONS: List[str] + + EVENT_LOC_TO_ITEM: Dict[str, str] + REAL_ITEMS: List[str] + + VICTORY_CONDITION: str + MASTERY_LOCATION: str + LEVEL_2_LOCATION: str + + PAINTING_MAPPING: Dict[str, str] + + FORCED_GOOD_ITEM: str + + def add_location(self, room: str, loc: PlayerLocation): + self.LOCATIONS_BY_ROOM.setdefault(room, []).append(loc) + + def set_door_item(self, room: str, door: str, item: str): + self.ITEM_BY_DOOR.setdefault(room, {})[door] = item + + def handle_non_grouped_door(self, room_name: str, door_data: Door, world: "LingoWorld"): + if room_name in PROGRESSION_BY_ROOM and door_data.name in PROGRESSION_BY_ROOM[room_name]: + if room_name == "Orange Tower" and not world.options.progressive_orange_tower: + self.set_door_item(room_name, door_data.name, door_data.item_name) + else: + progressive_item_name = PROGRESSION_BY_ROOM[room_name][door_data.name].item_name + self.set_door_item(room_name, door_data.name, progressive_item_name) + self.REAL_ITEMS.append(progressive_item_name) + else: + self.set_door_item(room_name, door_data.name, door_data.item_name) + + def __init__(self, world: "LingoWorld"): + self.ITEM_BY_DOOR = {} + self.LOCATIONS_BY_ROOM = {} + self.REAL_LOCATIONS = [] + self.EVENT_LOC_TO_ITEM = {} + self.REAL_ITEMS = [] + self.VICTORY_CONDITION = "" + self.MASTERY_LOCATION = "" + self.LEVEL_2_LOCATION = "" + self.PAINTING_MAPPING = {} + self.FORCED_GOOD_ITEM = "" + + door_shuffle = world.options.shuffle_doors + color_shuffle = world.options.shuffle_colors + painting_shuffle = world.options.shuffle_paintings + location_checks = world.options.location_checks + victory_condition = world.options.victory_condition + early_color_hallways = world.options.early_color_hallways + + if location_checks == LocationChecks.option_reduced and door_shuffle != ShuffleDoors.option_none: + raise Exception("You cannot have reduced location checks when door shuffle is on, because there would not " + "be enough locations for all of the door items.") + + # Create an event for every door, representing whether that door has been opened. Also create event items for + # doors that are event-only. + for room_name, room_data in DOORS_BY_ROOM.items(): + for door_name, door_data in room_data.items(): + if door_shuffle == ShuffleDoors.option_none: + itemloc_name = f"{room_name} - {door_name} (Opened)" + self.add_location(room_name, PlayerLocation(itemloc_name, None, door_data.panels)) + self.EVENT_LOC_TO_ITEM[itemloc_name] = itemloc_name + self.set_door_item(room_name, door_name, itemloc_name) + else: + # This line is duplicated from StaticLingoItems + if door_data.skip_item is False and door_data.event is False: + if door_data.group is not None and door_shuffle == ShuffleDoors.option_simple: + # Grouped doors are handled differently if shuffle doors is on simple. + self.set_door_item(room_name, door_name, door_data.group) + else: + self.handle_non_grouped_door(room_name, door_data, world) + + if door_data.event: + self.add_location(room_name, PlayerLocation(door_data.item_name, None, door_data.panels)) + self.EVENT_LOC_TO_ITEM[door_data.item_name] = door_data.item_name + " (Opened)" + self.set_door_item(room_name, door_name, door_data.item_name + " (Opened)") + + # Create events for each achievement panel, so that we can determine when THE MASTER is accessible. We also + # create events for each counting panel, so that we can determine when LEVEL 2 is accessible. + for room_name, room_data in PANELS_BY_ROOM.items(): + for panel_name, panel_data in room_data.items(): + if panel_data.achievement: + event_name = room_name + " - " + panel_name + " (Achieved)" + self.add_location(room_name, PlayerLocation(event_name, None, + [RoomAndPanel(room_name, panel_name)])) + self.EVENT_LOC_TO_ITEM[event_name] = "Mastery Achievement" + + if not panel_data.non_counting and victory_condition == VictoryCondition.option_level_2: + event_name = room_name + " - " + panel_name + " (Counted)" + self.add_location(room_name, PlayerLocation(event_name, None, + [RoomAndPanel(room_name, panel_name)])) + self.EVENT_LOC_TO_ITEM[event_name] = "Counting Panel Solved" + + # Handle the victory condition. Victory conditions other than the chosen one become regular checks, so we need + # to prevent the actual victory condition from becoming a check. + self.MASTERY_LOCATION = "Orange Tower Seventh Floor - THE MASTER" + self.LEVEL_2_LOCATION = "N/A" + + if victory_condition == VictoryCondition.option_the_end: + self.VICTORY_CONDITION = "Orange Tower Seventh Floor - THE END" + self.add_location("Orange Tower Seventh Floor", PlayerLocation("The End (Solved)")) + self.EVENT_LOC_TO_ITEM["The End (Solved)"] = "Victory" + elif victory_condition == VictoryCondition.option_the_master: + self.VICTORY_CONDITION = "Orange Tower Seventh Floor - THE MASTER" + self.MASTERY_LOCATION = "Orange Tower Seventh Floor - Mastery Achievements" + + self.add_location("Orange Tower Seventh Floor", PlayerLocation(self.MASTERY_LOCATION, None, [])) + self.EVENT_LOC_TO_ITEM[self.MASTERY_LOCATION] = "Victory" + elif victory_condition == VictoryCondition.option_level_2: + self.VICTORY_CONDITION = "Second Room - LEVEL 2" + self.LEVEL_2_LOCATION = "Second Room - Unlock Level 2" + + self.add_location("Second Room", PlayerLocation(self.LEVEL_2_LOCATION, None, + [RoomAndPanel("Second Room", "LEVEL 2")])) + self.EVENT_LOC_TO_ITEM[self.LEVEL_2_LOCATION] = "Victory" + + # Instantiate all real locations. + location_classification = LocationClassification.normal + if location_checks == LocationChecks.option_reduced: + location_classification = LocationClassification.reduced + elif location_checks == LocationChecks.option_insanity: + location_classification = LocationClassification.insanity + + for location_name, location_data in ALL_LOCATION_TABLE.items(): + if location_name != self.VICTORY_CONDITION: + if location_classification not in location_data.classification: + continue + + self.add_location(location_data.room, PlayerLocation(location_name, location_data.code, + location_data.panels)) + self.REAL_LOCATIONS.append(location_name) + + # Instantiate all real items. + for name, item in ALL_ITEM_TABLE.items(): + if item.should_include(world): + self.REAL_ITEMS.append(name) + + # Create the paintings mapping, if painting shuffle is on. + if painting_shuffle: + # Shuffle paintings until we get something workable. + workable_paintings = False + for i in range(0, 20): + workable_paintings = self.randomize_paintings(world) + if workable_paintings: + break + + if not workable_paintings: + raise Exception("This Lingo world was unable to generate a workable painting mapping after 20 " + "iterations. This is very unlikely to happen on its own, and probably indicates some " + "kind of logic error.") + + if door_shuffle != ShuffleDoors.option_none and location_classification != LocationClassification.insanity \ + and not early_color_hallways and LingoTestOptions.disable_forced_good_item is False: + # If shuffle doors is on, force a useful item onto the HI panel. This may not necessarily get you out of BK, + # but the goal is to allow you to reach at least one more check. The non-painting ones are hardcoded right + # now. We only allow the entrance to the Pilgrim Room if color shuffle is off, because otherwise there are + # no extra checks in there. We only include the entrance to the Rhyme Room when color shuffle is off and + # door shuffle is on simple, because otherwise there are no extra checks in there. + good_item_options: List[str] = ["Starting Room - Back Right Door", "Second Room - Exit Door"] + + if not color_shuffle: + good_item_options.append("Pilgrim Room - Sun Painting") + + if door_shuffle == ShuffleDoors.option_simple: + good_item_options += ["Welcome Back Doors"] + + if not color_shuffle: + good_item_options.append("Rhyme Room Doors") + else: + good_item_options += ["Welcome Back Area - Shortcut to Starting Room"] + + for painting_obj in PAINTINGS_BY_ROOM["Starting Room"]: + if not painting_obj.enter_only or painting_obj.required_door is None: + continue + + # If painting shuffle is on, we only want to consider paintings that actually go somewhere. + if painting_shuffle and painting_obj.id not in self.PAINTING_MAPPING.keys(): + continue + + pdoor = DOORS_BY_ROOM[painting_obj.required_door.room][painting_obj.required_door.door] + good_item_options.append(pdoor.item_name) + + # Copied from The Witness -- remove any plandoed items from the possible good items set. + for v in world.multiworld.plando_items[world.player]: + if v.get("from_pool", True): + for item_key in {"item", "items"}: + if item_key in v: + if type(v[item_key]) is str: + if v[item_key] in good_item_options: + good_item_options.remove(v[item_key]) + elif type(v[item_key]) is dict: + for item, weight in v[item_key].items(): + if weight and item in good_item_options: + good_item_options.remove(item) + else: + # Other type of iterable + for item in v[item_key]: + if item in good_item_options: + good_item_options.remove(item) + + if len(good_item_options) > 0: + self.FORCED_GOOD_ITEM = world.random.choice(good_item_options) + self.REAL_ITEMS.remove(self.FORCED_GOOD_ITEM) + self.REAL_LOCATIONS.remove("Second Room - Good Luck") + + def randomize_paintings(self, world: "LingoWorld") -> bool: + self.PAINTING_MAPPING.clear() + + door_shuffle = world.options.shuffle_doors + + # First, assign mappings to the required-exit paintings. We ensure that req-blocked paintings do not lead to + # required paintings. + req_exits = [] + required_painting_rooms = REQUIRED_PAINTING_ROOMS + if door_shuffle == ShuffleDoors.option_none: + required_painting_rooms += REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS + req_exits = [painting_id for painting_id, painting in PAINTINGS.items() if painting.required_when_no_doors] + req_enterable = [painting_id for painting_id, painting in PAINTINGS.items() + if not painting.exit_only and not painting.disable and not painting.req_blocked and + not painting.req_blocked_when_no_doors and painting.room not in required_painting_rooms] + else: + req_enterable = [painting_id for painting_id, painting in PAINTINGS.items() + if not painting.exit_only and not painting.disable and not painting.req_blocked and + painting.room not in required_painting_rooms] + req_exits += [painting_id for painting_id, painting in PAINTINGS.items() + if painting.exit_only and painting.required] + req_entrances = world.random.sample(req_enterable, len(req_exits)) + + self.PAINTING_MAPPING = dict(zip(req_entrances, req_exits)) + + # Next, determine the rest of the exit paintings. + exitable = [painting_id for painting_id, painting in PAINTINGS.items() + if not painting.enter_only and not painting.disable and painting_id not in req_exits and + painting_id not in req_entrances] + nonreq_exits = world.random.sample(exitable, PAINTING_EXITS - len(req_exits)) + chosen_exits = req_exits + nonreq_exits + + # Determine the rest of the entrance paintings. + enterable = [painting_id for painting_id, painting in PAINTINGS.items() + if not painting.exit_only and not painting.disable and painting_id not in chosen_exits and + painting_id not in req_entrances] + chosen_entrances = world.random.sample(enterable, PAINTING_ENTRANCES - len(req_entrances)) + + # Assign one entrance to each non-required exit, to ensure that the total number of exits is achieved. + for warp_exit in nonreq_exits: + warp_enter = world.random.choice(chosen_entrances) + chosen_entrances.remove(warp_enter) + self.PAINTING_MAPPING[warp_enter] = warp_exit + + # Assign each of the remaining entrances to any required or non-required exit. + for warp_enter in chosen_entrances: + warp_exit = world.random.choice(chosen_exits) + self.PAINTING_MAPPING[warp_enter] = warp_exit + + # The Eye Wall painting is unique in that it is both double-sided and also enter only (because it moves). + # There is only one eligible double-sided exit painting, which is the vanilla exit for this warp. If the + # exit painting is an entrance in the shuffle, we will disable the Eye Wall painting. Otherwise, Eye Wall + # is forced to point to the vanilla exit. + if "eye_painting_2" not in self.PAINTING_MAPPING.keys(): + self.PAINTING_MAPPING["eye_painting"] = "eye_painting_2" + + # Just for sanity's sake, ensure that all required painting rooms are accessed. + for painting_id, painting in PAINTINGS.items(): + if painting_id not in self.PAINTING_MAPPING.values() \ + and (painting.required or (painting.required_when_no_doors and + door_shuffle == ShuffleDoors.option_none)): + return False + + return True diff --git a/worlds/lingo/regions.py b/worlds/lingo/regions.py new file mode 100644 index 000000000000..e5f947de05e4 --- /dev/null +++ b/worlds/lingo/regions.py @@ -0,0 +1,91 @@ +from typing import Dict, TYPE_CHECKING + +from BaseClasses import ItemClassification, Region +from .items import LingoItem +from .locations import LingoLocation +from .player_logic import LingoPlayerLogic +from .rules import lingo_can_use_entrance, lingo_can_use_pilgrimage, make_location_lambda +from .static_logic import ALL_ROOMS, PAINTINGS, Room + +if TYPE_CHECKING: + from . import LingoWorld + + +def create_region(room: Room, world: "LingoWorld", player_logic: LingoPlayerLogic) -> Region: + new_region = Region(room.name, world.player, world.multiworld) + for location in player_logic.LOCATIONS_BY_ROOM.get(room.name, {}): + new_location = LingoLocation(world.player, location.name, location.code, new_region) + new_location.access_rule = make_location_lambda(location, room.name, world, player_logic) + new_region.locations.append(new_location) + if location.name in player_logic.EVENT_LOC_TO_ITEM: + event_name = player_logic.EVENT_LOC_TO_ITEM[location.name] + event_item = LingoItem(event_name, ItemClassification.progression, None, world.player) + new_location.place_locked_item(event_item) + + return new_region + + +def handle_pilgrim_room(regions: Dict[str, Region], world: "LingoWorld", player_logic: LingoPlayerLogic) -> None: + target_region = regions["Pilgrim Antechamber"] + source_region = regions["Outside The Agreeable"] + source_region.connect( + target_region, + "Pilgrimage", + lambda state: lingo_can_use_pilgrimage(state, world.player, player_logic)) + + +def connect_painting(regions: Dict[str, Region], warp_enter: str, warp_exit: str, world: "LingoWorld", + player_logic: LingoPlayerLogic) -> None: + source_painting = PAINTINGS[warp_enter] + target_painting = PAINTINGS[warp_exit] + + target_region = regions[target_painting.room] + source_region = regions[source_painting.room] + source_region.connect( + target_region, + f"{source_painting.room} to {target_painting.room} ({source_painting.id} Painting)", + lambda state: lingo_can_use_entrance(state, target_painting.room, source_painting.required_door, world.player, + player_logic)) + + +def create_regions(world: "LingoWorld", player_logic: LingoPlayerLogic) -> None: + regions = { + "Menu": Region("Menu", world.player, world.multiworld) + } + + painting_shuffle = world.options.shuffle_paintings + early_color_hallways = world.options.early_color_hallways + + # Instantiate all rooms as regions with their locations first. + for room in ALL_ROOMS: + regions[room.name] = create_region(room, world, player_logic) + + # Connect all created regions now that they exist. + for room in ALL_ROOMS: + for entrance in room.entrances: + # Don't use the vanilla painting connections if we are shuffling paintings. + if entrance.painting and painting_shuffle: + continue + + entrance_name = f"{entrance.room} to {room.name}" + if entrance.door is not None: + if entrance.door.room is not None: + entrance_name += f" (through {entrance.door.room} - {entrance.door.door})" + else: + entrance_name += f" (through {room.name} - {entrance.door.door})" + + regions[entrance.room].connect( + regions[room.name], entrance_name, + lambda state, r=room, e=entrance: lingo_can_use_entrance(state, r.name, e.door, world.player, + player_logic)) + + handle_pilgrim_room(regions, world, player_logic) + + if early_color_hallways: + regions["Starting Room"].connect(regions["Outside The Undeterred"], "Early Color Hallways") + + if painting_shuffle: + for warp_enter, warp_exit in player_logic.PAINTING_MAPPING.items(): + connect_painting(regions, warp_enter, warp_exit, world, player_logic) + + world.multiworld.regions += regions.values() diff --git a/worlds/lingo/rules.py b/worlds/lingo/rules.py new file mode 100644 index 000000000000..d59b8a1ef78a --- /dev/null +++ b/worlds/lingo/rules.py @@ -0,0 +1,104 @@ +from typing import TYPE_CHECKING + +from BaseClasses import CollectionState +from .options import VictoryCondition +from .player_logic import LingoPlayerLogic, PlayerLocation +from .static_logic import PANELS_BY_ROOM, PROGRESSION_BY_ROOM, PROGRESSIVE_ITEMS, RoomAndDoor + +if TYPE_CHECKING: + from . import LingoWorld + + +def lingo_can_use_entrance(state: CollectionState, room: str, door: RoomAndDoor, player: int, + player_logic: LingoPlayerLogic): + if door is None: + return True + + return _lingo_can_open_door(state, room, room if door.room is None else door.room, door.door, player, player_logic) + + +def lingo_can_use_pilgrimage(state: CollectionState, player: int, player_logic: LingoPlayerLogic): + fake_pilgrimage = [ + ["Second Room", "Exit Door"], ["Crossroads", "Tower Entrance"], + ["Orange Tower Fourth Floor", "Hot Crusts Door"], ["Outside The Initiated", "Shortcut to Hub Room"], + ["Orange Tower First Floor", "Shortcut to Hub Room"], ["Directional Gallery", "Shortcut to The Undeterred"], + ["Orange Tower First Floor", "Salt Pepper Door"], ["Hub Room", "Crossroads Entrance"], + ["Champion's Rest", "Shortcut to The Steady"], ["The Bearer", "Shortcut to The Bold"], + ["Art Gallery", "Exit"], ["The Tenacious", "Shortcut to Hub Room"], + ["Outside The Agreeable", "Tenacious Entrance"] + ] + for entrance in fake_pilgrimage: + if not state.has(player_logic.ITEM_BY_DOOR[entrance[0]][entrance[1]], player): + return False + + return True + + +def lingo_can_use_location(state: CollectionState, location: PlayerLocation, room_name: str, world: "LingoWorld", + player_logic: LingoPlayerLogic): + for panel in location.panels: + panel_room = room_name if panel.room is None else panel.room + if not _lingo_can_solve_panel(state, room_name, panel_room, panel.panel, world, player_logic): + return False + + return True + + +def lingo_can_use_mastery_location(state: CollectionState, world: "LingoWorld"): + return state.has("Mastery Achievement", world.player, world.options.mastery_achievements.value) + + +def _lingo_can_open_door(state: CollectionState, start_room: str, room: str, door: str, player: int, + player_logic: LingoPlayerLogic): + """ + Determines whether a door can be opened + """ + item_name = player_logic.ITEM_BY_DOOR[room][door] + if item_name in PROGRESSIVE_ITEMS: + progression = PROGRESSION_BY_ROOM[room][door] + return state.has(item_name, player, progression.index) + + return state.has(item_name, player) + + +def _lingo_can_solve_panel(state: CollectionState, start_room: str, room: str, panel: str, world: "LingoWorld", + player_logic: LingoPlayerLogic): + """ + Determines whether a panel can be solved + """ + if start_room != room and not state.can_reach(room, "Region", world.player): + return False + + if room == "Second Room" and panel == "ANOTHER TRY" \ + and world.options.victory_condition == VictoryCondition.option_level_2 \ + and not state.has("Counting Panel Solved", world.player, world.options.level_2_requirement.value - 1): + return False + + panel_object = PANELS_BY_ROOM[room][panel] + for req_room in panel_object.required_rooms: + if not state.can_reach(req_room, "Region", world.player): + return False + + for req_door in panel_object.required_doors: + if not _lingo_can_open_door(state, start_room, room if req_door.room is None else req_door.room, + req_door.door, world.player, player_logic): + return False + + for req_panel in panel_object.required_panels: + if not _lingo_can_solve_panel(state, start_room, room if req_panel.room is None else req_panel.room, + req_panel.panel, world, player_logic): + return False + + if len(panel_object.colors) > 0 and world.options.shuffle_colors: + for color in panel_object.colors: + if not state.has(color.capitalize(), world.player): + return False + + return True + + +def make_location_lambda(location: PlayerLocation, room_name: str, world: "LingoWorld", player_logic: LingoPlayerLogic): + if location.name == player_logic.MASTERY_LOCATION: + return lambda state: lingo_can_use_mastery_location(state, world) + + return lambda state: lingo_can_use_location(state, location, room_name, world, player_logic) diff --git a/worlds/lingo/static_logic.py b/worlds/lingo/static_logic.py new file mode 100644 index 000000000000..f6690f93a439 --- /dev/null +++ b/worlds/lingo/static_logic.py @@ -0,0 +1,557 @@ +from typing import Dict, List, NamedTuple, Optional, Set + +import yaml + + +class RoomAndDoor(NamedTuple): + room: Optional[str] + door: str + + +class RoomAndPanel(NamedTuple): + room: Optional[str] + panel: str + + +class RoomEntrance(NamedTuple): + room: str # source room + door: Optional[RoomAndDoor] + painting: bool + + +class Room(NamedTuple): + name: str + entrances: List[RoomEntrance] + + +class Door(NamedTuple): + name: str + item_name: str + location_name: Optional[str] + panels: Optional[List[RoomAndPanel]] + skip_location: bool + skip_item: bool + door_ids: List[str] + painting_ids: List[str] + event: bool + group: Optional[str] + include_reduce: bool + junk_item: bool + + +class Panel(NamedTuple): + required_rooms: List[str] + required_doors: List[RoomAndDoor] + required_panels: List[RoomAndPanel] + colors: List[str] + check: bool + event: bool + internal_ids: List[str] + exclude_reduce: bool + achievement: bool + non_counting: bool + + +class Painting(NamedTuple): + id: str + room: str + enter_only: bool + exit_only: bool + orientation: str + required: bool + required_when_no_doors: bool + required_door: Optional[RoomAndDoor] + disable: bool + move: bool + req_blocked: bool + req_blocked_when_no_doors: bool + + +class Progression(NamedTuple): + item_name: str + index: int + + +ROOMS: Dict[str, Room] = {} +PANELS: Dict[str, Panel] = {} +DOORS: Dict[str, Door] = {} +PAINTINGS: Dict[str, Painting] = {} + +ALL_ROOMS: List[Room] = [] +DOORS_BY_ROOM: Dict[str, Dict[str, Door]] = {} +PANELS_BY_ROOM: Dict[str, Dict[str, Panel]] = {} +PAINTINGS_BY_ROOM: Dict[str, List[Painting]] = {} + +PROGRESSIVE_ITEMS: List[str] = [] +PROGRESSION_BY_ROOM: Dict[str, Dict[str, Progression]] = {} + +PAINTING_ENTRANCES: int = 0 +PAINTING_EXIT_ROOMS: Set[str] = set() +PAINTING_EXITS: int = 0 +REQUIRED_PAINTING_ROOMS: List[str] = [] +REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS: List[str] = [] + +SPECIAL_ITEM_IDS: Dict[str, int] = {} +PANEL_LOCATION_IDS: Dict[str, Dict[str, int]] = {} +DOOR_LOCATION_IDS: Dict[str, Dict[str, int]] = {} +DOOR_ITEM_IDS: Dict[str, Dict[str, int]] = {} +DOOR_GROUP_ITEM_IDS: Dict[str, int] = {} +PROGRESSIVE_ITEM_IDS: Dict[str, int] = {} + + +def load_static_data(): + global PAINTING_EXITS, SPECIAL_ITEM_IDS, PANEL_LOCATION_IDS, DOOR_LOCATION_IDS, DOOR_ITEM_IDS, \ + DOOR_GROUP_ITEM_IDS, PROGRESSIVE_ITEM_IDS + + try: + from importlib.resources import files + except ImportError: + from importlib_resources import files + + # Load in all item and location IDs. These are broken up into groups based on the type of item/location. + with files("worlds.lingo").joinpath("ids.yaml").open() as file: + config = yaml.load(file, Loader=yaml.Loader) + + if "special_items" in config: + for item_name, item_id in config["special_items"].items(): + SPECIAL_ITEM_IDS[item_name] = item_id + + if "panels" in config: + for room_name in config["panels"].keys(): + PANEL_LOCATION_IDS[room_name] = {} + + for panel_name, location_id in config["panels"][room_name].items(): + PANEL_LOCATION_IDS[room_name][panel_name] = location_id + + if "doors" in config: + for room_name in config["doors"].keys(): + DOOR_LOCATION_IDS[room_name] = {} + DOOR_ITEM_IDS[room_name] = {} + + for door_name, door_data in config["doors"][room_name].items(): + if "location" in door_data: + DOOR_LOCATION_IDS[room_name][door_name] = door_data["location"] + + if "item" in door_data: + DOOR_ITEM_IDS[room_name][door_name] = door_data["item"] + + if "door_groups" in config: + for item_name, item_id in config["door_groups"].items(): + DOOR_GROUP_ITEM_IDS[item_name] = item_id + + if "progression" in config: + for item_name, item_id in config["progression"].items(): + PROGRESSIVE_ITEM_IDS[item_name] = item_id + + # Process the main world file. + with files("worlds.lingo").joinpath("LL1.yaml").open() as file: + config = yaml.load(file, Loader=yaml.Loader) + + for room_name, room_data in config.items(): + process_room(room_name, room_data) + + PAINTING_EXITS = len(PAINTING_EXIT_ROOMS) + + +def get_special_item_id(name: str): + if name not in SPECIAL_ITEM_IDS: + raise Exception(f"Item ID for special item {name} not found in ids.yaml.") + + return SPECIAL_ITEM_IDS[name] + + +def get_panel_location_id(room: str, name: str): + if room not in PANEL_LOCATION_IDS or name not in PANEL_LOCATION_IDS[room]: + raise Exception(f"Location ID for panel {room} - {name} not found in ids.yaml.") + + return PANEL_LOCATION_IDS[room][name] + + +def get_door_location_id(room: str, name: str): + if room not in DOOR_LOCATION_IDS or name not in DOOR_LOCATION_IDS[room]: + raise Exception(f"Location ID for door {room} - {name} not found in ids.yaml.") + + return DOOR_LOCATION_IDS[room][name] + + +def get_door_item_id(room: str, name: str): + if room not in DOOR_ITEM_IDS or name not in DOOR_ITEM_IDS[room]: + raise Exception(f"Item ID for door {room} - {name} not found in ids.yaml.") + + return DOOR_ITEM_IDS[room][name] + + +def get_door_group_item_id(name: str): + if name not in DOOR_GROUP_ITEM_IDS: + raise Exception(f"Item ID for door group {name} not found in ids.yaml.") + + return DOOR_GROUP_ITEM_IDS[name] + + +def get_progressive_item_id(name: str): + if name not in PROGRESSIVE_ITEM_IDS: + raise Exception(f"Item ID for progressive item {name} not found in ids.yaml.") + + return PROGRESSIVE_ITEM_IDS[name] + + +def process_entrance(source_room, doors, room_obj): + global PAINTING_ENTRANCES, PAINTING_EXIT_ROOMS + + # If the value of an entrance is just True, that means that the entrance is always accessible. + if doors is True: + room_obj.entrances.append(RoomEntrance(source_room, None, False)) + elif isinstance(doors, dict): + # If the value of an entrance is a dictionary, that means the entrance requires a door to be accessible, is a + # painting-based entrance, or both. + if "painting" in doors and "door" not in doors: + PAINTING_EXIT_ROOMS.add(room_obj.name) + PAINTING_ENTRANCES += 1 + + room_obj.entrances.append(RoomEntrance(source_room, None, True)) + else: + if "painting" in doors and doors["painting"]: + PAINTING_EXIT_ROOMS.add(room_obj.name) + PAINTING_ENTRANCES += 1 + + room_obj.entrances.append(RoomEntrance(source_room, RoomAndDoor( + doors["room"] if "room" in doors else None, + doors["door"] + ), doors["painting"] if "painting" in doors else False)) + else: + # If the value of an entrance is a list, then there are multiple possible doors that can give access to the + # entrance. + for door in doors: + if "painting" in door and door["painting"]: + PAINTING_EXIT_ROOMS.add(room_obj.name) + PAINTING_ENTRANCES += 1 + + room_obj.entrances.append(RoomEntrance(source_room, RoomAndDoor( + door["room"] if "room" in door else None, + door["door"] + ), door["painting"] if "painting" in door else False)) + + +def process_panel(room_name, panel_name, panel_data): + global PANELS, PANELS_BY_ROOM + + full_name = f"{room_name} - {panel_name}" + + # required_room can either be a single room or a list of rooms. + if "required_room" in panel_data: + if isinstance(panel_data["required_room"], list): + required_rooms = panel_data["required_room"] + else: + required_rooms = [panel_data["required_room"]] + else: + required_rooms = [] + + # required_door can either be a single door or a list of doors. For convenience, the room key for each door does not + # need to be specified if the door is in this room. + required_doors = list() + if "required_door" in panel_data: + if isinstance(panel_data["required_door"], dict): + door = panel_data["required_door"] + required_doors.append(RoomAndDoor( + door["room"] if "room" in door else None, + door["door"] + )) + else: + for door in panel_data["required_door"]: + required_doors.append(RoomAndDoor( + door["room"] if "room" in door else None, + door["door"] + )) + + # required_panel can either be a single panel or a list of panels. For convenience, the room key for each panel does + # not need to be specified if the panel is in this room. + required_panels = list() + if "required_panel" in panel_data: + if isinstance(panel_data["required_panel"], dict): + other_panel = panel_data["required_panel"] + required_panels.append(RoomAndPanel( + other_panel["room"] if "room" in other_panel else None, + other_panel["panel"] + )) + else: + for other_panel in panel_data["required_panel"]: + required_panels.append(RoomAndPanel( + other_panel["room"] if "room" in other_panel else None, + other_panel["panel"] + )) + + # colors can either be a single color or a list of colors. + if "colors" in panel_data: + if isinstance(panel_data["colors"], list): + colors = panel_data["colors"] + else: + colors = [panel_data["colors"]] + else: + colors = [] + + if "check" in panel_data: + check = panel_data["check"] + else: + check = False + + if "event" in panel_data: + event = panel_data["event"] + else: + event = False + + if "achievement" in panel_data: + achievement = True + else: + achievement = False + + if "exclude_reduce" in panel_data: + exclude_reduce = panel_data["exclude_reduce"] + else: + exclude_reduce = False + + if "non_counting" in panel_data: + non_counting = panel_data["non_counting"] + else: + non_counting = False + + if "id" in panel_data: + if isinstance(panel_data["id"], list): + internal_ids = panel_data["id"] + else: + internal_ids = [panel_data["id"]] + else: + internal_ids = [] + + panel_obj = Panel(required_rooms, required_doors, required_panels, colors, check, event, internal_ids, + exclude_reduce, achievement, non_counting) + PANELS[full_name] = panel_obj + PANELS_BY_ROOM[room_name][panel_name] = panel_obj + + +def process_door(room_name, door_name, door_data): + global DOORS, DOORS_BY_ROOM + + # The item name associated with a door can be explicitly specified in the configuration. If it is not, it is + # generated from the room and door name. + if "item_name" in door_data: + item_name = door_data["item_name"] + else: + item_name = f"{room_name} - {door_name}" + + if "skip_location" in door_data: + skip_location = door_data["skip_location"] + else: + skip_location = False + + if "skip_item" in door_data: + skip_item = door_data["skip_item"] + else: + skip_item = False + + if "event" in door_data: + event = door_data["event"] + else: + event = False + + if "include_reduce" in door_data: + include_reduce = door_data["include_reduce"] + else: + include_reduce = False + + if "junk_item" in door_data: + junk_item = door_data["junk_item"] + else: + junk_item = False + + if "group" in door_data: + group = door_data["group"] + else: + group = None + + # panels is a list of panels. Each panel can either be a simple string (the name of a panel in the current room) or + # a dictionary specifying a panel in a different room. + if "panels" in door_data: + panels = list() + for panel in door_data["panels"]: + if isinstance(panel, dict): + panels.append(RoomAndPanel(panel["room"], panel["panel"])) + else: + panels.append(RoomAndPanel(None, panel)) + else: + skip_location = True + panels = None + + # The location name associated with a door can be explicitly specified in the configuration. If it is not, then the + # name is generated using a combination of all of the panels that would ordinarily open the door. This can get quite + # messy if there are a lot of panels, especially if panels from multiple rooms are involved, so in these cases it + # would be better to specify a name. + if "location_name" in door_data: + location_name = door_data["location_name"] + elif skip_location is False: + panel_per_room = dict() + for panel in panels: + panel_room_name = room_name if panel.room is None else panel.room + panel_per_room.setdefault(panel_room_name, []).append(panel.panel) + + room_strs = list() + for door_room_str, door_panels_str in panel_per_room.items(): + room_strs.append(door_room_str + " - " + ", ".join(door_panels_str)) + + location_name = " and ".join(room_strs) + else: + location_name = None + + # The id field can be a single item, or a list of door IDs, in the event that the item for this logical door should + # open more than one actual in-game door. + if "id" in door_data: + if isinstance(door_data["id"], list): + door_ids = door_data["id"] + else: + door_ids = [door_data["id"]] + else: + door_ids = [] + + # The painting_id field can be a single item, or a list of painting IDs, in the event that the item for this logical + # door should move more than one actual in-game painting. + if "painting_id" in door_data: + if isinstance(door_data["painting_id"], list): + painting_ids = door_data["painting_id"] + else: + painting_ids = [door_data["painting_id"]] + else: + painting_ids = [] + + door_obj = Door(door_name, item_name, location_name, panels, skip_location, skip_item, door_ids, + painting_ids, event, group, include_reduce, junk_item) + + DOORS[door_obj.item_name] = door_obj + DOORS_BY_ROOM[room_name][door_name] = door_obj + + +def process_painting(room_name, painting_data): + global PAINTINGS, PAINTINGS_BY_ROOM, REQUIRED_PAINTING_ROOMS, REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS + + # Read in information about this painting and store it in an object. + painting_id = painting_data["id"] + + if "orientation" in painting_data: + orientation = painting_data["orientation"] + else: + orientation = "" + + if "disable" in painting_data: + disable_painting = painting_data["disable"] + else: + disable_painting = False + + if "required" in painting_data: + required_painting = painting_data["required"] + if required_painting: + REQUIRED_PAINTING_ROOMS.append(room_name) + else: + required_painting = False + + if "move" in painting_data: + move_painting = painting_data["move"] + else: + move_painting = False + + if "required_when_no_doors" in painting_data: + rwnd = painting_data["required_when_no_doors"] + if rwnd: + REQUIRED_PAINTING_WHEN_NO_DOORS_ROOMS.append(room_name) + else: + rwnd = False + + if "exit_only" in painting_data: + exit_only = painting_data["exit_only"] + else: + exit_only = False + + if "enter_only" in painting_data: + enter_only = painting_data["enter_only"] + else: + enter_only = False + + if "req_blocked" in painting_data: + req_blocked = painting_data["req_blocked"] + else: + req_blocked = False + + if "req_blocked_when_no_doors" in painting_data: + req_blocked_when_no_doors = painting_data["req_blocked_when_no_doors"] + else: + req_blocked_when_no_doors = False + + required_door = None + if "required_door" in painting_data: + door = painting_data["required_door"] + required_door = RoomAndDoor( + door["room"] if "room" in door else room_name, + door["door"] + ) + + painting_obj = Painting(painting_id, room_name, enter_only, exit_only, orientation, + required_painting, rwnd, required_door, disable_painting, move_painting, req_blocked, + req_blocked_when_no_doors) + PAINTINGS[painting_id] = painting_obj + PAINTINGS_BY_ROOM[room_name].append(painting_obj) + + +def process_progression(room_name, progression_name, progression_doors): + global PROGRESSIVE_ITEMS, PROGRESSION_BY_ROOM + + # Progressive items are configured as a list of doors. + PROGRESSIVE_ITEMS.append(progression_name) + + progression_index = 1 + for door in progression_doors: + if isinstance(door, Dict): + door_room = door["room"] + door_door = door["door"] + else: + door_room = room_name + door_door = door + + room_progressions = PROGRESSION_BY_ROOM.setdefault(door_room, {}) + room_progressions[door_door] = Progression(progression_name, progression_index) + progression_index += 1 + + +def process_room(room_name, room_data): + global ROOMS, ALL_ROOMS + + room_obj = Room(room_name, []) + + if "entrances" in room_data: + for source_room, doors in room_data["entrances"].items(): + process_entrance(source_room, doors, room_obj) + + if "panels" in room_data: + PANELS_BY_ROOM[room_name] = dict() + + for panel_name, panel_data in room_data["panels"].items(): + process_panel(room_name, panel_name, panel_data) + + if "doors" in room_data: + DOORS_BY_ROOM[room_name] = dict() + + for door_name, door_data in room_data["doors"].items(): + process_door(room_name, door_name, door_data) + + if "paintings" in room_data: + PAINTINGS_BY_ROOM[room_name] = [] + + for painting_data in room_data["paintings"]: + process_painting(room_name, painting_data) + + if "progression" in room_data: + for progression_name, progression_doors in room_data["progression"].items(): + process_progression(room_name, progression_name, progression_doors) + + ROOMS[room_name] = room_obj + ALL_ROOMS.append(room_obj) + + +# Initialize the static data at module scope. +load_static_data() diff --git a/worlds/lingo/test/TestDoors.py b/worlds/lingo/test/TestDoors.py new file mode 100644 index 000000000000..5dc989af5989 --- /dev/null +++ b/worlds/lingo/test/TestDoors.py @@ -0,0 +1,89 @@ +from . import LingoTestBase + + +class TestRequiredRoomLogic(LingoTestBase): + options = { + "shuffle_doors": "complex" + } + + def test_pilgrim_first(self) -> None: + self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Pilgrim Antechamber", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) + self.assertFalse(self.can_reach_location("The Seeker - Achievement")) + + self.collect_by_name("Pilgrim Room - Sun Painting") + self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Pilgrim Antechamber", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) + self.assertFalse(self.can_reach_location("The Seeker - Achievement")) + + self.collect_by_name("Pilgrim Room - Shortcut to The Seeker") + self.assertTrue(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) + self.assertFalse(self.can_reach_location("The Seeker - Achievement")) + + self.collect_by_name("Starting Room - Back Right Door") + self.assertTrue(self.can_reach_location("The Seeker - Achievement")) + + def test_hidden_first(self) -> None: + self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) + self.assertFalse(self.can_reach_location("The Seeker - Achievement")) + + self.collect_by_name("Starting Room - Back Right Door") + self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) + self.assertFalse(self.can_reach_location("The Seeker - Achievement")) + + self.collect_by_name("Pilgrim Room - Shortcut to The Seeker") + self.assertFalse(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) + self.assertFalse(self.can_reach_location("The Seeker - Achievement")) + + self.collect_by_name("Pilgrim Room - Sun Painting") + self.assertTrue(self.multiworld.state.can_reach("The Seeker", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Pilgrim Room", "Region", self.player)) + self.assertTrue(self.can_reach_location("The Seeker - Achievement")) + + +class TestRequiredDoorLogic(LingoTestBase): + options = { + "shuffle_doors": "complex" + } + + def test_through_rhyme(self) -> None: + self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) + + self.collect_by_name("Starting Room - Rhyme Room Entrance") + self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) + + self.collect_by_name("Rhyme Room (Looped Square) - Door to Circle") + self.assertTrue(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) + + def test_through_hidden(self) -> None: + self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) + + self.collect_by_name("Starting Room - Rhyme Room Entrance") + self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) + + self.collect_by_name("Starting Room - Back Right Door") + self.assertFalse(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) + + self.collect_by_name("Hidden Room - Rhyme Room Entrance") + self.assertTrue(self.can_reach_location("Rhyme Room - Circle/Looped Square Wall")) + + +class TestSimpleDoors(LingoTestBase): + options = { + "shuffle_doors": "simple" + } + + def test_requirement(self): + self.assertFalse(self.multiworld.state.can_reach("Outside The Wanderer", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + + self.collect_by_name("Rhyme Room Doors") + self.assertTrue(self.multiworld.state.can_reach("Outside The Wanderer", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + diff --git a/worlds/lingo/test/TestMastery.py b/worlds/lingo/test/TestMastery.py new file mode 100644 index 000000000000..3fb3c95a0208 --- /dev/null +++ b/worlds/lingo/test/TestMastery.py @@ -0,0 +1,39 @@ +from . import LingoTestBase + + +class TestMasteryWhenVictoryIsTheEnd(LingoTestBase): + options = { + "mastery_achievements": "22", + "victory_condition": "the_end", + "shuffle_colors": "true" + } + + def test_requirement(self): + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect_by_name(["Red", "Blue", "Black", "Purple", "Orange"]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + self.assertTrue(self.can_reach_location("The End (Solved)")) + self.assertFalse(self.can_reach_location("Orange Tower Seventh Floor - THE MASTER")) + + self.collect_by_name(["Green", "Brown", "Yellow"]) + self.assertTrue(self.can_reach_location("Orange Tower Seventh Floor - THE MASTER")) + + +class TestMasteryWhenVictoryIsTheMaster(LingoTestBase): + options = { + "mastery_achievements": "24", + "victory_condition": "the_master", + "shuffle_colors": "true" + } + + def test_requirement(self): + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect_by_name(["Red", "Blue", "Black", "Purple", "Orange"]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + self.assertTrue(self.can_reach_location("Orange Tower Seventh Floor - THE END")) + self.assertFalse(self.can_reach_location("Orange Tower Seventh Floor - Mastery Achievements")) + + self.collect_by_name(["Green", "Gray", "Brown", "Yellow"]) + self.assertTrue(self.can_reach_location("Orange Tower Seventh Floor - Mastery Achievements")) \ No newline at end of file diff --git a/worlds/lingo/test/TestOptions.py b/worlds/lingo/test/TestOptions.py new file mode 100644 index 000000000000..176967786243 --- /dev/null +++ b/worlds/lingo/test/TestOptions.py @@ -0,0 +1,31 @@ +from . import LingoTestBase + + +class TestMultiShuffleOptions(LingoTestBase): + options = { + "shuffle_doors": "complex", + "progressive_orange_tower": "true", + "shuffle_colors": "true", + "shuffle_paintings": "true", + "early_color_hallways": "true" + } + + +class TestPanelsanity(LingoTestBase): + options = { + "shuffle_doors": "complex", + "progressive_orange_tower": "true", + "location_checks": "insanity", + "shuffle_colors": "true" + } + + +class TestAllPanelHunt(LingoTestBase): + options = { + "shuffle_doors": "complex", + "progressive_orange_tower": "true", + "shuffle_colors": "true", + "victory_condition": "level_2", + "level_2_requirement": "800", + "early_color_hallways": "true" + } diff --git a/worlds/lingo/test/TestOrangeTower.py b/worlds/lingo/test/TestOrangeTower.py new file mode 100644 index 000000000000..7b0c3bb52518 --- /dev/null +++ b/worlds/lingo/test/TestOrangeTower.py @@ -0,0 +1,175 @@ +from . import LingoTestBase + + +class TestProgressiveOrangeTower(LingoTestBase): + options = { + "shuffle_doors": "complex", + "progressive_orange_tower": "true" + } + + def test_from_welcome_back(self) -> None: + self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect_by_name("Welcome Back Area - Shortcut to Starting Room") + self.collect_by_name("Orange Tower Fifth Floor - Welcome Back") + self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + progressive_tower = self.get_items_by_name("Progressive Orange Tower") + + self.collect(progressive_tower[0]) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[1]) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[2]) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[3]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[4]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[5]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + def test_from_hub_room(self) -> None: + self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect_by_name("Second Room - Exit Door") + self.assertFalse(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect_by_name("Orange Tower First Floor - Shortcut to Hub Room") + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + progressive_tower = self.get_items_by_name("Progressive Orange Tower") + + self.collect(progressive_tower[0]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.remove(self.get_item_by_name("Orange Tower First Floor - Shortcut to Hub Room")) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[1]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[2]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[3]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[4]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) + + self.collect(progressive_tower[5]) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower First Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Second Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Third Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fourth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Sixth Floor", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Seventh Floor", "Region", self.player)) diff --git a/worlds/lingo/test/TestProgressive.py b/worlds/lingo/test/TestProgressive.py new file mode 100644 index 000000000000..026971c45d65 --- /dev/null +++ b/worlds/lingo/test/TestProgressive.py @@ -0,0 +1,191 @@ +from . import LingoTestBase + + +class TestComplexProgressiveHallwayRoom(LingoTestBase): + options = { + "shuffle_doors": "complex" + } + + def test_item(self): + self.assertFalse(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) + + self.collect_by_name(["Second Room - Exit Door", "The Tenacious - Shortcut to Hub Room", + "Outside The Agreeable - Tenacious Entrance"]) + self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) + + progressive_hallway_room = self.get_items_by_name("Progressive Hallway Room") + + self.collect(progressive_hallway_room[0]) + self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) + + self.collect(progressive_hallway_room[1]) + self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) + + self.collect(progressive_hallway_room[2]) + self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) + + self.collect(progressive_hallway_room[3]) + self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) + + +class TestSimpleHallwayRoom(LingoTestBase): + options = { + "shuffle_doors": "simple" + } + + def test_item(self): + self.assertFalse(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) + + self.collect_by_name(["Second Room - Exit Door", "Entrances to The Tenacious"]) + self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) + + self.collect_by_name("Hallway Room Doors") + self.assertTrue(self.multiworld.state.can_reach("Outside The Agreeable", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (2)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (3)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Hallway Room (4)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Elements Area", "Region", self.player)) + + +class TestProgressiveArtGallery(LingoTestBase): + options = { + "shuffle_doors": "complex" + } + + def test_item(self): + self.assertFalse(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + self.collect_by_name(["Second Room - Exit Door", "Crossroads - Tower Entrance", + "Orange Tower Fourth Floor - Hot Crusts Door"]) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + progressive_gallery_room = self.get_items_by_name("Progressive Art Gallery") + + self.collect(progressive_gallery_room[0]) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + self.collect(progressive_gallery_room[1]) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + self.collect(progressive_gallery_room[2]) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + self.collect(progressive_gallery_room[3]) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertTrue(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + self.collect(progressive_gallery_room[4]) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertTrue(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + +class TestNoDoorsArtGallery(LingoTestBase): + options = { + "shuffle_doors": "none", + "shuffle_colors": "true" + } + + def test_item(self): + self.assertFalse(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + self.collect_by_name("Yellow") + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + self.collect_by_name("Brown") + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertFalse(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + self.collect_by_name("Blue") + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertFalse(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertFalse(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) + + self.collect_by_name(["Orange", "Gray"]) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Second Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Third Floor)", "Region", self.player)) + self.assertTrue(self.multiworld.state.can_reach("Art Gallery (Fourth Floor)", "Region", self.player)) + self.assertTrue(self.can_reach_location("Art Gallery - ONE ROAD MANY TURNS")) + self.assertTrue(self.multiworld.state.can_reach("Orange Tower Fifth Floor", "Region", self.player)) diff --git a/worlds/lingo/test/__init__.py b/worlds/lingo/test/__init__.py new file mode 100644 index 000000000000..ffbf9032b64a --- /dev/null +++ b/worlds/lingo/test/__init__.py @@ -0,0 +1,13 @@ +from typing import ClassVar + +from test.bases import WorldTestBase +from .. import LingoTestOptions + + +class LingoTestBase(WorldTestBase): + game = "Lingo" + player: ClassVar[int] = 1 + + def world_setup(self, *args, **kwargs): + LingoTestOptions.disable_forced_good_item = True + super().world_setup(*args, **kwargs) diff --git a/worlds/lingo/testing.py b/worlds/lingo/testing.py new file mode 100644 index 000000000000..22fafea0fc6a --- /dev/null +++ b/worlds/lingo/testing.py @@ -0,0 +1,2 @@ +class LingoTestOptions: + disable_forced_good_item: bool = False diff --git a/worlds/lingo/utils/assign_ids.rb b/worlds/lingo/utils/assign_ids.rb new file mode 100644 index 000000000000..9e1ce67bd2db --- /dev/null +++ b/worlds/lingo/utils/assign_ids.rb @@ -0,0 +1,178 @@ +# This utility goes through the provided Lingo config and assigns item and +# location IDs to entities that require them (such as doors and panels). These +# IDs are output in a separate yaml file. If the output file already exists, +# then it will be updated with any newly assigned IDs rather than overwritten. +# In this event, all new IDs will be greater than any already existing IDs, +# even if there are gaps in the ID space; this is to prevent collision when IDs +# are retired. +# +# This utility should be run whenever logically new items or locations are +# required. If an item or location is created that is logically equivalent to +# one that used to exist, this utility should not be used, and instead the ID +# file should be manually edited so that the old ID can be reused. + +require 'set' +require 'yaml' + +configpath = ARGV[0] +outputpath = ARGV[1] + +next_item_id = 444400 +next_location_id = 444400 + +location_id_by_name = {} + +old_generated = YAML.load_file(outputpath) +File.write(outputpath + ".old", old_generated.to_yaml) + +if old_generated.include? "special_items" then + old_generated["special_items"].each do |name, id| + if id >= next_item_id then + next_item_id = id + 1 + end + end +end +if old_generated.include? "special_locations" then + old_generated["special_locations"].each do |name, id| + if id >= next_location_id then + next_location_id = id + 1 + end + end +end +if old_generated.include? "panels" then + old_generated["panels"].each do |room, panels| + panels.each do |name, id| + if id >= next_location_id then + next_location_id = id + 1 + end + location_name = "#{room} - #{name}" + location_id_by_name[location_name] = id + end + end +end +if old_generated.include? "doors" then + old_generated["doors"].each do |room, doors| + doors.each do |name, ids| + if ids.include? "location" then + if ids["location"] >= next_location_id then + next_location_id = ids["location"] + 1 + end + end + if ids.include? "item" then + if ids["item"] >= next_item_id then + next_item_id = ids["item"] + 1 + end + end + end + end +end +if old_generated.include? "door_groups" then + old_generated["door_groups"].each do |name, id| + if id >= next_item_id then + next_item_id = id + 1 + end + end +end +if old_generated.include? "progression" then + old_generated["progression"].each do |name, id| + if id >= next_item_id then + next_item_id = id + 1 + end + end +end + +door_groups = Set[] + +config = YAML.load_file(configpath) +config.each do |room_name, room_data| + if room_data.include? "panels" + room_data["panels"].each do |panel_name, panel| + unless old_generated.include? "panels" and old_generated["panels"].include? room_name and old_generated["panels"][room_name].include? panel_name then + old_generated["panels"] ||= {} + old_generated["panels"][room_name] ||= {} + old_generated["panels"][room_name][panel_name] = next_location_id + + location_name = "#{room_name} - #{panel_name}" + location_id_by_name[location_name] = next_location_id + + next_location_id += 1 + end + end + end +end + +config.each do |room_name, room_data| + if room_data.include? "doors" + room_data["doors"].each do |door_name, door| + if door.include? "event" and door["event"] then + next + end + + unless door.include? "skip_item" and door["skip_item"] then + unless old_generated.include? "doors" and old_generated["doors"].include? room_name and old_generated["doors"][room_name].include? door_name and old_generated["doors"][room_name][door_name].include? "item" then + old_generated["doors"] ||= {} + old_generated["doors"][room_name] ||= {} + old_generated["doors"][room_name][door_name] ||= {} + old_generated["doors"][room_name][door_name]["item"] = next_item_id + + next_item_id += 1 + end + + if door.include? "group" and not door_groups.include? door["group"] then + door_groups.add(door["group"]) + + unless old_generated.include? "door_groups" and old_generated["door_groups"].include? door["group"] then + old_generated["door_groups"] ||= {} + old_generated["door_groups"][door["group"]] = next_item_id + + next_item_id += 1 + end + end + end + + unless door.include? "skip_location" and door["skip_location"] then + location_name = "" + if door.include? "location_name" then + location_name = door["location_name"] + elsif door.include? "panels" then + location_name = door["panels"].map do |panel| + if panel.kind_of? Hash then + panel + else + {"room" => room_name, "panel" => panel} + end + end.sort_by {|panel| panel["room"]}.chunk {|panel| panel["room"]}.map do |room_panels| + room_panels[0] + " - " + room_panels[1].map{|panel| panel["panel"]}.join(", ") + end.join(" and ") + end + + if location_id_by_name.has_key? location_name then + old_generated["doors"] ||= {} + old_generated["doors"][room_name] ||= {} + old_generated["doors"][room_name][door_name] ||= {} + old_generated["doors"][room_name][door_name]["location"] = location_id_by_name[location_name] + elsif not (old_generated.include? "doors" and old_generated["doors"].include? room_name and old_generated["doors"][room_name].include? door_name and old_generated["doors"][room_name][door_name].include? "location") then + old_generated["doors"] ||= {} + old_generated["doors"][room_name] ||= {} + old_generated["doors"][room_name][door_name] ||= {} + old_generated["doors"][room_name][door_name]["location"] = next_location_id + + next_location_id += 1 + end + end + end + end + + if room_data.include? "progression" + room_data["progression"].each do |progression_name, pdata| + unless old_generated.include? "progression" and old_generated["progression"].include? progression_name then + old_generated["progression"] ||= {} + old_generated["progression"][progression_name] = next_item_id + + next_item_id += 1 + end + end + end +end + +File.write(outputpath, old_generated.to_yaml) diff --git a/worlds/lingo/utils/validate_config.rb b/worlds/lingo/utils/validate_config.rb new file mode 100644 index 000000000000..ed2e9058f9ad --- /dev/null +++ b/worlds/lingo/utils/validate_config.rb @@ -0,0 +1,329 @@ +# Script to validate a level config file. This checks that the names used within +# the file are consistent. It also checks that the panel and door IDs mentioned +# all exist in the map file. +# +# Usage: validate_config.rb [config file] [map file] + +require 'set' +require 'yaml' + +configpath = ARGV[0] +mappath = ARGV[1] + +panels = Set["Countdown Panels/Panel_1234567890_wanderlust"] +doors = Set["Naps Room Doors/Door_hider_new1", "Tower Room Area Doors/Door_wanderer_entrance"] +paintings = Set[] + +File.readlines(mappath).each do |line| + line.match(/node name=\"(.*)\" parent=\"Panels\/(.*)\" instance/) do |m| + panels.add(m[2] + "/" + m[1]) + end + line.match(/node name=\"(.*)\" parent=\"Doors\/(.*)\" instance/) do |m| + doors.add(m[2] + "/" + m[1]) + end + line.match(/node name=\"(.*)\" parent=\"Decorations\/Paintings\" instance/) do |m| + paintings.add(m[1]) + end + line.match(/node name=\"(.*)\" parent=\"Decorations\/EndPanel\" instance/) do |m| + panels.add("EndPanel/" + m[1]) + end +end + +configured_rooms = Set["Menu"] +configured_doors = Set[] +configured_panels = Set[] + +mentioned_rooms = Set[] +mentioned_doors = Set[] +mentioned_panels = Set[] + +door_groups = {} + +directives = Set["entrances", "panels", "doors", "paintings", "progression"] +panel_directives = Set["id", "required_room", "required_door", "required_panel", "colors", "check", "exclude_reduce", "tag", "link", "subtag", "achievement", "copy_to_sign", "non_counting"] +door_directives = Set["id", "painting_id", "panels", "item_name", "location_name", "skip_location", "skip_item", "group", "include_reduce", "junk_item", "event"] +painting_directives = Set["id", "enter_only", "exit_only", "orientation", "required_door", "required", "required_when_no_doors", "move"] + +non_counting = 0 + +config = YAML.load_file(configpath) +config.each do |room_name, room| + configured_rooms.add(room_name) + + used_directives = Set[] + room.each_key do |key| + used_directives.add(key) + end + diff_directives = used_directives - directives + unless diff_directives.empty? then + puts("#{room_name} has the following invalid top-level directives: #{diff_directives.to_s}") + end + + (room["entrances"] || {}).each do |source_room, entrance| + mentioned_rooms.add(source_room) + + entrances = [] + if entrance.kind_of? Hash + if entrance.keys() != ["painting"] then + entrances = [entrance] + end + elsif entrance.kind_of? Array + entrances = entrance + end + + entrances.each do |e| + entrance_room = e.include?("room") ? e["room"] : room_name + mentioned_rooms.add(entrance_room) + mentioned_doors.add(entrance_room + " - " + e["door"]) + end + end + + (room["panels"] || {}).each do |panel_name, panel| + unless panel_name.kind_of? String then + puts "#{room_name} has an invalid panel name" + end + + configured_panels.add(room_name + " - " + panel_name) + + if panel.include?("id") + panel_ids = [] + if panel["id"].kind_of? Array + panel_ids = panel["id"] + else + panel_ids = [panel["id"]] + end + + panel_ids.each do |panel_id| + unless panels.include? panel_id then + puts "#{room_name} - #{panel_name} :::: Invalid Panel ID #{panel_id}" + end + end + else + puts "#{room_name} - #{panel_name} :::: Panel is missing an ID" + end + + if panel.include?("required_room") + required_rooms = [] + if panel["required_room"].kind_of? Array + required_rooms = panel["required_room"] + else + required_rooms = [panel["required_room"]] + end + + required_rooms.each do |required_room| + mentioned_rooms.add(required_room) + end + end + + if panel.include?("required_door") + required_doors = [] + if panel["required_door"].kind_of? Array + required_doors = panel["required_door"] + else + required_doors = [panel["required_door"]] + end + + required_doors.each do |required_door| + other_room = required_door.include?("room") ? required_door["room"] : room_name + mentioned_rooms.add(other_room) + mentioned_doors.add("#{other_room} - #{required_door["door"]}") + end + end + + if panel.include?("required_panel") + required_panels = [] + if panel["required_panel"].kind_of? Array + required_panels = panel["required_panel"] + else + required_panels = [panel["required_panel"]] + end + + required_panels.each do |required_panel| + other_room = required_panel.include?("room") ? required_panel["room"] : room_name + mentioned_rooms.add(other_room) + mentioned_panels.add("#{other_room} - #{required_panel["panel"]}") + end + end + + unless panel.include?("tag") then + puts "#{room_name} - #{panel_name} :::: Panel is missing a tag" + end + + if panel.include?("non_counting") then + non_counting += 1 + end + + bad_subdirectives = [] + panel.keys.each do |key| + unless panel_directives.include?(key) then + bad_subdirectives << key + end + end + unless bad_subdirectives.empty? then + puts "#{room_name} - #{panel_name} :::: Panel has the following invalid subdirectives: #{bad_subdirectives.join(", ")}" + end + end + + (room["doors"] || {}).each do |door_name, door| + configured_doors.add("#{room_name} - #{door_name}") + + if door.include?("id") + door_ids = [] + if door["id"].kind_of? Array + door_ids = door["id"] + else + door_ids = [door["id"]] + end + + door_ids.each do |door_id| + unless doors.include? door_id then + puts "#{room_name} - #{door_name} :::: Invalid Door ID #{door_id}" + end + end + end + + if door.include?("painting_id") + painting_ids = [] + if door["painting_id"].kind_of? Array + painting_ids = door["painting_id"] + else + painting_ids = [door["painting_id"]] + end + + painting_ids.each do |painting_id| + unless paintings.include? painting_id then + puts "#{room_name} - #{door_name} :::: Invalid Painting ID #{painting_id}" + end + end + end + + if not door.include?("id") and not door.include?("painting_id") and not door["skip_item"] and not door["event"] then + puts "#{room_name} - #{door_name} :::: Should be marked skip_item or event if there are no doors or paintings" + end + + if door.include?("panels") + door["panels"].each do |panel| + if panel.kind_of? Hash then + other_room = panel.include?("room") ? panel["room"] : room_name + mentioned_panels.add("#{other_room} - #{panel["panel"]}") + else + other_room = panel.include?("room") ? panel["room"] : room_name + mentioned_panels.add("#{room_name} - #{panel}") + end + end + elsif not door["skip_location"] + puts "#{room_name} - #{door_name} :::: Should be marked skip_location if there are no panels" + end + + if door.include?("group") + door_groups[door["group"]] ||= 0 + door_groups[door["group"]] += 1 + end + + bad_subdirectives = [] + door.keys.each do |key| + unless door_directives.include?(key) then + bad_subdirectives << key + end + end + unless bad_subdirectives.empty? then + puts "#{room_name} - #{door_name} :::: Door has the following invalid subdirectives: #{bad_subdirectives.join(", ")}" + end + end + + (room["paintings"] || []).each do |painting| + if painting.include?("id") and painting["id"].kind_of? String then + unless paintings.include? painting["id"] then + puts "#{room_name} :::: Invalid Painting ID #{painting["id"]}" + end + else + puts "#{room_name} :::: Painting is missing an ID" + end + + if painting["disable"] then + # We're good. + next + end + + if painting.include?("orientation") then + unless ["north", "south", "east", "west"].include? painting["orientation"] then + puts "#{room_name} - #{painting["id"] || "painting"} :::: Invalid orientation #{painting["orientation"]}" + end + else + puts "#{room_name} :::: Painting is missing an orientation" + end + + if painting.include?("required_door") + other_room = painting["required_door"].include?("room") ? painting["required_door"]["room"] : room_name + mentioned_doors.add("#{other_room} - #{painting["required_door"]["door"]}") + + unless painting["enter_only"] then + puts "#{room_name} - #{painting["id"] || "painting"} :::: Should be marked enter_only if there is a required_door" + end + end + + bad_subdirectives = [] + painting.keys.each do |key| + unless painting_directives.include?(key) then + bad_subdirectives << key + end + end + unless bad_subdirectives.empty? then + puts "#{room_name} - #{painting["id"] || "painting"} :::: Painting has the following invalid subdirectives: #{bad_subdirectives.join(", ")}" + end + end + + (room["progression"] || {}).each do |progression_name, door_list| + door_list.each do |door| + if door.kind_of? Hash then + mentioned_doors.add("#{door["room"]} - #{door["door"]}") + else + mentioned_doors.add("#{room_name} - #{door}") + end + end + end +end + +errored_rooms = mentioned_rooms - configured_rooms +unless errored_rooms.empty? then + puts "The folloring rooms are mentioned but do not exist: " + errored_rooms.to_s +end + +errored_panels = mentioned_panels - configured_panels +unless errored_panels.empty? then + puts "The folloring panels are mentioned but do not exist: " + errored_panels.to_s +end + +errored_doors = mentioned_doors - configured_doors +unless errored_doors.empty? then + puts "The folloring doors are mentioned but do not exist: " + errored_doors.to_s +end + +door_groups.each do |group,num| + if num == 1 then + puts "Door group \"#{group}\" only has one door in it" + end +end + +slashed_rooms = configured_rooms.select do |room| + room.include? "/" +end +unless slashed_rooms.empty? then + puts "The following rooms have slashes in their names: " + slashed_rooms.to_s +end + +slashed_panels = configured_panels.select do |panel| + panel.include? "/" +end +unless slashed_panels.empty? then + puts "The following panels have slashes in their names: " + slashed_panels.to_s +end + +slashed_doors = configured_doors.select do |door| + door.include? "/" +end +unless slashed_doors.empty? then + puts "The following doors have slashes in their names: " + slashed_doors.to_s +end + +puts "#{configured_panels.size} panels (#{non_counting} non counting)" diff --git a/worlds/messenger/__init__.py b/worlds/messenger/__init__.py index 3fe13a3cb421..304b43cf5316 100644 --- a/worlds/messenger/__init__.py +++ b/worlds/messenger/__init__.py @@ -82,7 +82,10 @@ def generate_early(self) -> None: self.shop_prices, self.figurine_prices = shuffle_shop_prices(self) def create_regions(self) -> None: - self.multiworld.regions += [MessengerRegion(reg_name, self) for reg_name in REGIONS] + # MessengerRegion adds itself to the multiworld + for region in [MessengerRegion(reg_name, self) for reg_name in REGIONS]: + if region.name in REGION_CONNECTIONS: + region.add_exits(REGION_CONNECTIONS[region.name]) def create_items(self) -> None: # create items that are always in the item pool @@ -136,8 +139,6 @@ def create_items(self) -> None: self.multiworld.itempool += itempool def set_rules(self) -> None: - for reg_name, connections in REGION_CONNECTIONS.items(): - self.multiworld.get_region(reg_name, self.player).add_exits(connections) logic = self.options.logic_level if logic == Logic.option_normal: MessengerRules(self).set_messenger_rules() diff --git a/worlds/messenger/regions.py b/worlds/messenger/regions.py index 28750b949ede..3a6c95bff5a2 100644 --- a/worlds/messenger/regions.py +++ b/worlds/messenger/regions.py @@ -68,7 +68,6 @@ "Quillshroom Marsh": ["Quillshroom Marsh Mega Shard"], "Searing Crags Upper": ["Searing Crags Mega Shard"], "Glacial Peak": ["Glacial Peak Mega Shard"], - "Tower of Time": [], "Cloud Ruins": ["Cloud Entrance Mega Shard", "Time Warp Mega Shard"], "Cloud Ruins Right": ["Money Farm Room Mega Shard 1", "Money Farm Room Mega Shard 2"], "Underworld": ["Under Entrance Mega Shard", "Hot Tub Mega Shard", "Projectile Pit Mega Shard"], @@ -84,8 +83,6 @@ "Menu": {"Tower HQ"}, "Tower HQ": {"Autumn Hills", "Howling Grotto", "Searing Crags", "Glacial Peak", "Tower of Time", "Riviere Turquoise Entrance", "Sunken Shrine", "Corrupted Future", "The Shop", "Music Box"}, - "Tower of Time": set(), - "Ninja Village": set(), "Autumn Hills": {"Ninja Village", "Forlorn Temple", "Catacombs"}, "Forlorn Temple": {"Catacombs", "Bamboo Creek"}, "Catacombs": {"Autumn Hills", "Bamboo Creek", "Dark Cave"}, @@ -97,11 +94,8 @@ "Glacial Peak": {"Searing Crags Upper", "Tower HQ", "Cloud Ruins", "Elemental Skylands"}, "Cloud Ruins": {"Cloud Ruins Right"}, "Cloud Ruins Right": {"Underworld"}, - "Underworld": set(), "Dark Cave": {"Catacombs", "Riviere Turquoise Entrance"}, "Riviere Turquoise Entrance": {"Riviere Turquoise"}, - "Riviere Turquoise": set(), "Sunken Shrine": {"Howling Grotto"}, - "Elemental Skylands": set(), } """Vanilla layout mapping with all Tower HQ portals open. from -> to""" diff --git a/worlds/messenger/rules.py b/worlds/messenger/rules.py index c9bd9b86253d..876acd42c108 100644 --- a/worlds/messenger/rules.py +++ b/worlds/messenger/rules.py @@ -1,10 +1,9 @@ from typing import Callable, Dict, TYPE_CHECKING from BaseClasses import CollectionState -from worlds.generic.Rules import add_rule, allow_self_locking_items, set_rule +from worlds.generic.Rules import add_rule, allow_self_locking_items from .constants import NOTES, PHOBEKINS -from .options import Goal, MessengerAccessibility -from .subclasses import MessengerShopLocation +from .options import MessengerAccessibility if TYPE_CHECKING: from . import MessengerWorld @@ -37,7 +36,9 @@ def __init__(self, world: MessengerWorld) -> None: "Forlorn Temple": lambda state: state.has_all({"Wingsuit", *PHOBEKINS}, self.player) and self.can_dboost(state), "Glacial Peak": self.has_vertical, "Elemental Skylands": lambda state: state.has("Magic Firefly", self.player) and self.has_wingsuit(state), - "Music Box": lambda state: state.has_all(set(NOTES), self.player) and self.has_dart(state), + "Music Box": lambda state: (state.has_all(set(NOTES), self.player) + or state.has("Power Seal", self.player, max(1, self.world.required_seals))) + and self.has_dart(state), } self.location_rules = { @@ -92,8 +93,6 @@ def __init__(self, world: MessengerWorld) -> None: # corrupted future "Corrupted Future - Key of Courage": lambda state: state.has_all({"Demon King Crown", "Magic Firefly"}, self.player), - # the shop - "Shop Chest": self.has_enough_seals, # tower hq "Money Wrench": self.can_shop, } @@ -143,14 +142,11 @@ def set_messenger_rules(self) -> None: if loc.name in self.location_rules: loc.access_rule = self.location_rules[loc.name] if region.name == "The Shop": - for loc in [location for location in region.locations if isinstance(location, MessengerShopLocation)]: + for loc in region.locations: loc.access_rule = loc.can_afford - if self.world.options.goal == Goal.option_power_seal_hunt: - set_rule(multiworld.get_entrance("Tower HQ -> Music Box", self.player), - lambda state: state.has("Shop Chest", self.player)) multiworld.completion_condition[self.player] = lambda state: state.has("Rescue Phantom", self.player) - if multiworld.accessibility[self.player] > MessengerAccessibility.option_locations: + if multiworld.accessibility[self.player]: # not locations accessibility set_self_locking_items(self.world, self.player) @@ -201,8 +197,7 @@ def __init__(self, world: MessengerWorld) -> None: self.extra_rules = { "Searing Crags - Key of Strength": lambda state: self.has_dart(state) or self.has_windmill(state), "Elemental Skylands - Key of Symbiosis": lambda state: self.has_windmill(state) or self.can_dboost(state), - "Autumn Hills Seal - Spike Ball Darts": lambda state: (self.has_dart(state) and self.has_windmill(state)) - or self.has_wingsuit(state), + "Autumn Hills Seal - Spike Ball Darts": lambda state: self.has_dart(state) or self.has_windmill(state), "Underworld Seal - Fireball Wave": self.has_windmill, } diff --git a/worlds/messenger/subclasses.py b/worlds/messenger/subclasses.py index ce31d43d60b0..0c04bc015c35 100644 --- a/worlds/messenger/subclasses.py +++ b/worlds/messenger/subclasses.py @@ -17,8 +17,6 @@ def __init__(self, name: str, world: "MessengerWorld") -> None: super().__init__(name, world.player, world.multiworld) locations = [loc for loc in REGIONS[self.name]] if self.name == "The Shop": - if world.options.goal > Goal.option_open_music_box: - locations.append("Shop Chest") shop_locations = {f"The Shop - {shop_loc}": world.location_name_to_id[f"The Shop - {shop_loc}"] for shop_loc in SHOP_ITEMS} shop_locations.update(**{figurine: world.location_name_to_id[figurine] for figurine in FIGURINES}) @@ -29,9 +27,9 @@ def __init__(self, name: str, world: "MessengerWorld") -> None: locations += [seal_loc for seal_loc in SEALS[self.name]] if world.options.shuffle_shards and self.name in MEGA_SHARDS: locations += [shard for shard in MEGA_SHARDS[self.name]] - loc_dict = {loc: world.location_name_to_id[loc] if loc in world.location_name_to_id else None - for loc in locations} + loc_dict = {loc: world.location_name_to_id.get(loc, None) for loc in locations} self.add_locations(loc_dict, MessengerLocation) + world.multiworld.regions.append(self) class MessengerLocation(Location): diff --git a/worlds/messenger/test/test_shop_chest.py b/worlds/messenger/test/test_shop_chest.py index 058a2004478e..a34fa0fb96c0 100644 --- a/worlds/messenger/test/test_shop_chest.py +++ b/worlds/messenger/test/test_shop_chest.py @@ -17,18 +17,18 @@ def test_chest_access(self) -> None: with self.subTest("Access Dependency"): self.assertEqual(len([seal for seal in self.multiworld.itempool if seal.name == "Power Seal"]), self.multiworld.total_seals[self.player]) - locations = ["Shop Chest"] + locations = ["Rescue Phantom"] items = [["Power Seal"]] self.assertAccessDependency(locations, items) self.multiworld.state = CollectionState(self.multiworld) - self.assertEqual(self.can_reach_location("Shop Chest"), False) + self.assertEqual(self.can_reach_location("Rescue Phantom"), False) self.assertBeatable(False) - self.collect_all_but(["Power Seal", "Shop Chest", "Rescue Phantom"]) - self.assertEqual(self.can_reach_location("Shop Chest"), False) + self.collect_all_but(["Power Seal", "Rescue Phantom"]) + self.assertEqual(self.can_reach_location("Rescue Phantom"), False) self.assertBeatable(False) self.collect_by_name("Power Seal") - self.assertEqual(self.can_reach_location("Shop Chest"), True) + self.assertEqual(self.can_reach_location("Rescue Phantom"), True) self.assertBeatable(True) diff --git a/worlds/oot/Rules.py b/worlds/oot/Rules.py index 3da3728c5942..529411f6fc2c 100644 --- a/worlds/oot/Rules.py +++ b/worlds/oot/Rules.py @@ -227,7 +227,8 @@ def set_shop_rules(ootworld): # The goal is to automatically set item rules based on age requirements in case entrances were shuffled def set_entrances_based_rules(ootworld): - all_state = ootworld.multiworld.get_all_state(False) + all_state = ootworld.get_state_with_complete_itempool() + all_state.sweep_for_events(locations=ootworld.get_locations()) for location in filter(lambda location: location.type == 'Shop', ootworld.get_locations()): # If a shop is not reachable as adult, it can't have Goron Tunic or Zora Tunic as child can't buy these diff --git a/worlds/oot/__init__.py b/worlds/oot/__init__.py index 9466e7c09872..e9c889d6f653 100644 --- a/worlds/oot/__init__.py +++ b/worlds/oot/__init__.py @@ -829,8 +829,8 @@ def generate_basic(self): # mostly killing locations that shouldn't exist by se # Kill unreachable events that can't be gotten even with all items # Make sure to only kill actual internal events, not in-game "events" all_state = self.get_state_with_complete_itempool() - all_state.sweep_for_events() all_locations = self.get_locations() + all_state.sweep_for_events(locations=all_locations) reachable = self.multiworld.get_reachable_locations(all_state, self.player) unreachable = [loc for loc in all_locations if (loc.internal or loc.type == 'Drop') and loc.event and loc.locked and loc not in reachable] @@ -858,7 +858,7 @@ def prefill_state(base_state): state = base_state.copy() for item in self.get_pre_fill_items(): self.collect(state, item) - state.sweep_for_events(self.get_locations()) + state.sweep_for_events(locations=self.get_locations()) return state # Prefill shops, songs, and dungeon items @@ -870,7 +870,7 @@ def prefill_state(base_state): state = CollectionState(self.multiworld) for item in self.itempool: self.collect(state, item) - state.sweep_for_events(self.get_locations()) + state.sweep_for_events(locations=self.get_locations()) # Place dungeon items special_fill_types = ['GanonBossKey', 'BossKey', 'SmallKey', 'HideoutSmallKey', 'Map', 'Compass'] diff --git a/worlds/pokemon_emerald/LICENSE b/worlds/pokemon_emerald/LICENSE new file mode 100644 index 000000000000..30b4f413fe4c --- /dev/null +++ b/worlds/pokemon_emerald/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2023 Zunawe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/worlds/pokemon_emerald/README.md b/worlds/pokemon_emerald/README.md new file mode 100644 index 000000000000..61aee774525f --- /dev/null +++ b/worlds/pokemon_emerald/README.md @@ -0,0 +1,58 @@ +# Pokemon Emerald + +Version 1.2.0 + +This README contains general info useful for understanding the world. Pretty much all the long lists of locations, +regions, and items are stored in `data/` and (mostly) loaded in by `data.py`. Access rules are in `rules.py`. Check +[data/README.md](data/README.md) for more detailed information on the JSON files holding most of the data. + +## Warps + +Quick note to start, you should not be defining or modifying encoded warps from this repository. They're encoded in the +source code repository for the mod, and then assigned to regions in `data/regions/`. All warps in the game already exist +within `extracted_data.json`, and all relevant warps are already placed in `data/regions/` (unless they were deleted +accidentally). + +Many warps are actually two or three events acting as one logical warp. Doorways, for example, are often 2 tiles wide +indoors but only 1 tile wide outdoors. Both indoor warps point to the outdoor warp, and the outdoor warp points to only +one of the indoor warps. We want to describe warps logically in a way that retains information about individual warp +events. That way a 2-tile-wide doorway doesnt look like a one-way warp next to an unrelated two-way warp, but if we want +to randomize the destinations of those warps, we can still get back each individual id of the multi-tile warp. + +This is how warps are encoded: + +`{source_map}:{source_warp_ids}/{dest_map}:{dest_warp_ids}[!]` + +- `source_map`: The map the warp events are located in +- `source_warp_ids`: The ids of all adjacent warp events in source_map which lead to the same destination (these must be +in ascending order) +- `dest_map`: The map of the warp event to which this one is connected +- `dest_warp_ids`: The ids of the warp events in dest_map +- `[!]`: If the warp expects to lead to a destination which doesnot lead back to it, add a ! to the end + +Example: `MAP_LAVARIDGE_TOWN_HOUSE:0,1/MAP_LAVARIDGE_TOWN:4` + +Example 2: `MAP_AQUA_HIDEOUT_B1F:14/MAP_AQUA_HIDEOUT_B1F:12!` + +Note: A warp must have its destination set to another warp event. However, that does not guarantee that the destination +warp event will warp back to the source. + +Note 2: Some warps _only_ act as destinations and cannot actually be interacted with by the player as sources. These are +usually places you fall from a hole above. At the time of writing, these are actually not accounted for, but there are +no instances where it changes logical access. + +Note 3: Some warp destinations go to the map `MAP_DYNAMIC` and have a special warp id. These edge cases are: + +- The Moving Truck +- Terra Cave +- Marine Cave +- The Department Store Elevator +- Secret Bases +- The Trade Center +- The Union Room +- The Record Corner +- 2P/4P Battle Colosseum + +Note 4: The trick house on Route 110 changes the warp destinations of its entrance and ending room as you progress +through the puzzles, but the source code only sets the trick house up for the first puzzle, and I assume the destination +gets overwritten at run time when certain flags are set. diff --git a/worlds/pokemon_emerald/__init__.py b/worlds/pokemon_emerald/__init__.py new file mode 100644 index 000000000000..d3ced5f3ca62 --- /dev/null +++ b/worlds/pokemon_emerald/__init__.py @@ -0,0 +1,882 @@ +""" +Archipelago World definition for Pokemon Emerald Version +""" +from collections import Counter +import copy +import logging +import os +from typing import Any, Set, List, Dict, Optional, Tuple, ClassVar + +from BaseClasses import ItemClassification, MultiWorld, Tutorial +from Fill import FillError, fill_restrictive +from Options import Toggle +import settings +from worlds.AutoWorld import WebWorld, World + +from .client import PokemonEmeraldClient # Unused, but required to register with BizHawkClient +from .data import (SpeciesData, MapData, EncounterTableData, LearnsetMove, TrainerPokemonData, StaticEncounterData, + TrainerData, data as emerald_data) +from .items import (ITEM_GROUPS, PokemonEmeraldItem, create_item_label_to_code_map, get_item_classification, + offset_item_value) +from .locations import (LOCATION_GROUPS, PokemonEmeraldLocation, create_location_label_to_id_map, + create_locations_with_tags) +from .options import (ItemPoolType, RandomizeWildPokemon, RandomizeBadges, RandomizeTrainerParties, RandomizeHms, + RandomizeStarters, LevelUpMoves, RandomizeAbilities, RandomizeTypes, TmCompatibility, + HmCompatibility, RandomizeStaticEncounters, NormanRequirement, PokemonEmeraldOptions) +from .pokemon import get_random_species, get_random_move, get_random_damaging_move, get_random_type +from .regions import create_regions +from .rom import PokemonEmeraldDeltaPatch, generate_output, location_visited_event_to_id_map +from .rules import set_rules +from .sanity_check import validate_regions +from .util import int_to_bool_array, bool_array_to_int + + +class PokemonEmeraldWebWorld(WebWorld): + """ + Webhost info for Pokemon Emerald + """ + theme = "ocean" + setup_en = Tutorial( + "Multiworld Setup Guide", + "A guide to playing Pokémon Emerald with Archipelago.", + "English", + "setup_en.md", + "setup/en", + ["Zunawe"] + ) + + tutorials = [setup_en] + + +class PokemonEmeraldSettings(settings.Group): + class PokemonEmeraldRomFile(settings.UserFilePath): + """File name of your English Pokemon Emerald ROM""" + description = "Pokemon Emerald ROM File" + copy_to = "Pokemon - Emerald Version (USA, Europe).gba" + md5s = [PokemonEmeraldDeltaPatch.hash] + + rom_file: PokemonEmeraldRomFile = PokemonEmeraldRomFile(PokemonEmeraldRomFile.copy_to) + + +class PokemonEmeraldWorld(World): + """ + Pokémon Emerald is the definitive Gen III Pokémon game and one of the most beloved in the franchise. + Catch, train, and battle Pokémon, explore the Hoenn region, thwart the plots + of Team Magma and Team Aqua, challenge gyms, and become the Pokémon champion! + """ + game = "Pokemon Emerald" + web = PokemonEmeraldWebWorld() + topology_present = True + + settings_key = "pokemon_emerald_settings" + settings: ClassVar[PokemonEmeraldSettings] + + options_dataclass = PokemonEmeraldOptions + options: PokemonEmeraldOptions + + item_name_to_id = create_item_label_to_code_map() + location_name_to_id = create_location_label_to_id_map() + item_name_groups = ITEM_GROUPS + location_name_groups = LOCATION_GROUPS + + data_version = 1 + required_client_version = (0, 4, 3) + + badge_shuffle_info: Optional[List[Tuple[PokemonEmeraldLocation, PokemonEmeraldItem]]] = None + hm_shuffle_info: Optional[List[Tuple[PokemonEmeraldLocation, PokemonEmeraldItem]]] = None + free_fly_location_id: int = 0 + + modified_species: List[Optional[SpeciesData]] + modified_maps: List[MapData] + modified_tmhm_moves: List[int] + modified_static_encounters: List[int] + modified_starters: Tuple[int, int, int] + modified_trainers: List[TrainerData] + + @classmethod + def stage_assert_generate(cls, multiworld: MultiWorld) -> None: + if not os.path.exists(cls.settings.rom_file): + raise FileNotFoundError(cls.settings.rom_file) + + assert validate_regions() + + def get_filler_item_name(self) -> str: + return "Great Ball" + + def generate_early(self) -> None: + # If badges or HMs are vanilla, Norman locks you from using Surf, which means you're not guaranteed to be + # able to reach Fortree Gym, Mossdeep Gym, or Sootopolis Gym. So we can't require reaching those gyms to + # challenge Norman or it creates a circular dependency. + # This is never a problem for completely random badges/hms because the algo will not place Surf/Balance Badge + # on Norman on its own. It's never a problem for shuffled badges/hms because there is no scenario where Cut or + # the Stone Badge can be a lynchpin for access to any gyms, so they can always be put on Norman in a worst case + # scenario. + # This will also be a problem in warp rando if direct access to Norman's room requires Surf or if access + # any gym leader in general requires Surf. We will probably have to force this to 0 in that case. + max_norman_count = 7 + + if self.options.badges == RandomizeBadges.option_vanilla: + max_norman_count = 4 + + if self.options.hms == RandomizeHms.option_vanilla: + if self.options.norman_requirement == NormanRequirement.option_badges: + if self.options.badges != RandomizeBadges.option_completely_random: + max_norman_count = 4 + if self.options.norman_requirement == NormanRequirement.option_gyms: + max_norman_count = 4 + + if self.options.norman_count.value > max_norman_count: + logging.warning("Pokemon Emerald: Norman requirements for Player %s (%s) are unsafe in combination with " + "other settings. Reducing to 4.", self.player, self.multiworld.get_player_name(self.player)) + self.options.norman_count.value = max_norman_count + + def create_regions(self) -> None: + regions = create_regions(self) + + tags = {"Badge", "HM", "KeyItem", "Rod", "Bike"} + if self.options.overworld_items: + tags.add("OverworldItem") + if self.options.hidden_items: + tags.add("HiddenItem") + if self.options.npc_gifts: + tags.add("NpcGift") + if self.options.enable_ferry: + tags.add("Ferry") + create_locations_with_tags(self, regions, tags) + + self.multiworld.regions.extend(regions.values()) + + def create_items(self) -> None: + item_locations: List[PokemonEmeraldLocation] = [ + location + for location in self.multiworld.get_locations(self.player) + if location.address is not None + ] + + # Filter progression items which shouldn't be shuffled into the itempool. Their locations + # still exist, but event items will be placed and locked at their vanilla locations instead. + filter_tags = set() + + if not self.options.key_items: + filter_tags.add("KeyItem") + if not self.options.rods: + filter_tags.add("Rod") + if not self.options.bikes: + filter_tags.add("Bike") + + if self.options.badges in {RandomizeBadges.option_vanilla, RandomizeBadges.option_shuffle}: + filter_tags.add("Badge") + if self.options.hms in {RandomizeHms.option_vanilla, RandomizeHms.option_shuffle}: + filter_tags.add("HM") + + if self.options.badges == RandomizeBadges.option_shuffle: + self.badge_shuffle_info = [ + (location, self.create_item_by_code(location.default_item_code)) + for location in [l for l in item_locations if "Badge" in l.tags] + ] + if self.options.hms == RandomizeHms.option_shuffle: + self.hm_shuffle_info = [ + (location, self.create_item_by_code(location.default_item_code)) + for location in [l for l in item_locations if "HM" in l.tags] + ] + + item_locations = [location for location in item_locations if len(filter_tags & location.tags) == 0] + default_itempool = [self.create_item_by_code(location.default_item_code) for location in item_locations] + + if self.options.item_pool_type == ItemPoolType.option_shuffled: + self.multiworld.itempool += default_itempool + + elif self.options.item_pool_type in {ItemPoolType.option_diverse, ItemPoolType.option_diverse_balanced}: + item_categories = ["Ball", "Heal", "Vitamin", "EvoStone", "Money", "TM", "Held", "Misc"] + + # Count occurrences of types of vanilla items in pool + item_category_counter = Counter() + for item in default_itempool: + if not item.advancement: + item_category_counter.update([tag for tag in item.tags if tag in item_categories]) + + item_category_weights = [item_category_counter.get(category) for category in item_categories] + item_category_weights = [weight if weight is not None else 0 for weight in item_category_weights] + + # Create lists of item codes that can be used to fill + fill_item_candidates = emerald_data.items.values() + + fill_item_candidates = [item for item in fill_item_candidates if "Unique" not in item.tags] + + fill_item_candidates_by_category = {category: [] for category in item_categories} + for item_data in fill_item_candidates: + for category in item_categories: + if category in item_data.tags: + fill_item_candidates_by_category[category].append(offset_item_value(item_data.item_id)) + + for category in fill_item_candidates_by_category: + fill_item_candidates_by_category[category].sort() + + # Ignore vanilla occurrences and pick completely randomly + if self.options.item_pool_type == ItemPoolType.option_diverse: + item_category_weights = [ + len(category_list) + for category_list in fill_item_candidates_by_category.values() + ] + + # TMs should not have duplicates until every TM has been used already + all_tm_choices = fill_item_candidates_by_category["TM"].copy() + + def refresh_tm_choices() -> None: + fill_item_candidates_by_category["TM"] = all_tm_choices.copy() + self.random.shuffle(fill_item_candidates_by_category["TM"]) + + # Create items + for item in default_itempool: + if not item.advancement and "Unique" not in item.tags: + category = self.random.choices(item_categories, item_category_weights)[0] + if category == "TM": + if len(fill_item_candidates_by_category["TM"]) == 0: + refresh_tm_choices() + item_code = fill_item_candidates_by_category["TM"].pop() + else: + item_code = self.random.choice(fill_item_candidates_by_category[category]) + item = self.create_item_by_code(item_code) + + self.multiworld.itempool.append(item) + + def set_rules(self) -> None: + set_rules(self) + + def generate_basic(self) -> None: + locations: List[PokemonEmeraldLocation] = self.multiworld.get_locations(self.player) + + # Set our free fly location + # If not enabled, set it to Littleroot Town by default + fly_location_name = "EVENT_VISITED_LITTLEROOT_TOWN" + if self.options.free_fly_location: + fly_location_name = self.random.choice([ + "EVENT_VISITED_SLATEPORT_CITY", + "EVENT_VISITED_MAUVILLE_CITY", + "EVENT_VISITED_VERDANTURF_TOWN", + "EVENT_VISITED_FALLARBOR_TOWN", + "EVENT_VISITED_LAVARIDGE_TOWN", + "EVENT_VISITED_FORTREE_CITY", + "EVENT_VISITED_LILYCOVE_CITY", + "EVENT_VISITED_MOSSDEEP_CITY", + "EVENT_VISITED_SOOTOPOLIS_CITY", + "EVENT_VISITED_EVER_GRANDE_CITY" + ]) + + self.free_fly_location_id = location_visited_event_to_id_map[fly_location_name] + + free_fly_location_location = self.multiworld.get_location("FREE_FLY_LOCATION", self.player) + free_fly_location_location.item = None + free_fly_location_location.place_locked_item(self.create_event(fly_location_name)) + + # Key items which are considered in access rules but not randomized are converted to events and placed + # in their vanilla locations so that the player can have them in their inventory for logic. + def convert_unrandomized_items_to_events(tag: str) -> None: + for location in locations: + if location.tags is not None and tag in location.tags: + location.place_locked_item(self.create_event(self.item_id_to_name[location.default_item_code])) + location.address = None + + if self.options.badges == RandomizeBadges.option_vanilla: + convert_unrandomized_items_to_events("Badge") + if self.options.hms == RandomizeHms.option_vanilla: + convert_unrandomized_items_to_events("HM") + if not self.options.rods: + convert_unrandomized_items_to_events("Rod") + if not self.options.bikes: + convert_unrandomized_items_to_events("Bike") + if not self.options.key_items: + convert_unrandomized_items_to_events("KeyItem") + + def pre_fill(self) -> None: + # Items which are shuffled between their own locations + if self.options.badges == RandomizeBadges.option_shuffle: + badge_locations: List[PokemonEmeraldLocation] + badge_items: List[PokemonEmeraldItem] + + # Sort order makes `fill_restrictive` try to place important badges later, which + # makes it less likely to have to swap at all, and more likely for swaps to work. + # In the case of vanilla HMs, navigating Granite Cave is required to access more than 2 gyms, + # so Knuckle Badge deserves highest priority if Flash is logically required. + badge_locations, badge_items = [list(l) for l in zip(*self.badge_shuffle_info)] + badge_priority = { + "Knuckle Badge": 0 if (self.options.hms == RandomizeHms.option_vanilla and self.options.require_flash) else 3, + "Balance Badge": 1, + "Dynamo Badge": 1, + "Mind Badge": 2, + "Heat Badge": 2, + "Rain Badge": 3, + "Stone Badge": 4, + "Feather Badge": 5 + } + badge_items.sort(key=lambda item: badge_priority.get(item.name, 0)) + + collection_state = self.multiworld.get_all_state(False) + if self.hm_shuffle_info is not None: + for _, item in self.hm_shuffle_info: + collection_state.collect(item) + + # In specific very constrained conditions, fill_restrictive may run + # out of swaps before it finds a valid solution if it gets unlucky. + # This is a band-aid until fill/swap can reliably find those solutions. + attempts_remaining = 2 + while attempts_remaining > 0: + attempts_remaining -= 1 + self.random.shuffle(badge_locations) + try: + fill_restrictive(self.multiworld, collection_state, badge_locations, badge_items, + single_player_placement=True, lock=True, allow_excluded=True) + break + except FillError as exc: + if attempts_remaining == 0: + raise exc + + logging.debug(f"Failed to shuffle badges for player {self.player}. Retrying.") + continue + + if self.options.hms == RandomizeHms.option_shuffle: + hm_locations: List[PokemonEmeraldLocation] + hm_items: List[PokemonEmeraldItem] + + # Sort order makes `fill_restrictive` try to place important HMs later, which + # makes it less likely to have to swap at all, and more likely for swaps to work. + # In the case of vanilla badges, navigating Granite Cave is required to access more than 2 gyms, + # so Flash deserves highest priority if it's logically required. + hm_locations, hm_items = [list(l) for l in zip(*self.hm_shuffle_info)] + hm_priority = { + "HM05 Flash": 0 if (self.options.badges == RandomizeBadges.option_vanilla and self.options.require_flash) else 3, + "HM03 Surf": 1, + "HM06 Rock Smash": 1, + "HM08 Dive": 2, + "HM04 Strength": 2, + "HM07 Waterfall": 3, + "HM01 Cut": 4, + "HM02 Fly": 5 + } + hm_items.sort(key=lambda item: hm_priority.get(item.name, 0)) + + collection_state = self.multiworld.get_all_state(False) + + # In specific very constrained conditions, fill_restrictive may run + # out of swaps before it finds a valid solution if it gets unlucky. + # This is a band-aid until fill/swap can reliably find those solutions. + attempts_remaining = 2 + while attempts_remaining > 0: + attempts_remaining -= 1 + self.random.shuffle(hm_locations) + try: + fill_restrictive(self.multiworld, collection_state, hm_locations, hm_items, + single_player_placement=True, lock=True, allow_excluded=True) + break + except FillError as exc: + if attempts_remaining == 0: + raise exc + + logging.debug(f"Failed to shuffle HMs for player {self.player}. Retrying.") + continue + + def generate_output(self, output_directory: str) -> None: + def randomize_abilities() -> None: + # Creating list of potential abilities + ability_label_to_value = {ability.label.lower(): ability.ability_id for ability in emerald_data.abilities} + + ability_blacklist_labels = {"cacophony"} + option_ability_blacklist = self.options.ability_blacklist.value + if option_ability_blacklist is not None: + ability_blacklist_labels |= {ability_label.lower() for ability_label in option_ability_blacklist} + + ability_blacklist = {ability_label_to_value[label] for label in ability_blacklist_labels} + ability_whitelist = [a.ability_id for a in emerald_data.abilities if a.ability_id not in ability_blacklist] + + if self.options.abilities == RandomizeAbilities.option_follow_evolutions: + already_modified: Set[int] = set() + + # Loops through species and only tries to modify abilities if the pokemon has no pre-evolution + # or if the pre-evolution has already been modified. Then tries to modify all species that evolve + # from this one which have the same abilities. + # The outer while loop only runs three times for vanilla ordering: Once for a first pass, once for + # Hitmonlee/Hitmonchan, and once to verify that there's nothing left to do. + while True: + had_clean_pass = True + for species in self.modified_species: + if species is None: + continue + if species.species_id in already_modified: + continue + if species.pre_evolution is not None and species.pre_evolution not in already_modified: + continue + + had_clean_pass = False + + old_abilities = species.abilities + new_abilities = ( + 0 if old_abilities[0] == 0 else self.random.choice(ability_whitelist), + 0 if old_abilities[1] == 0 else self.random.choice(ability_whitelist) + ) + + evolutions = [species] + while len(evolutions) > 0: + evolution = evolutions.pop() + if evolution.abilities == old_abilities: + evolution.abilities = new_abilities + already_modified.add(evolution.species_id) + evolutions += [ + self.modified_species[evolution.species_id] + for evolution in evolution.evolutions + if evolution.species_id not in already_modified + ] + + if had_clean_pass: + break + else: # Not following evolutions + for species in self.modified_species: + if species is None: + continue + + old_abilities = species.abilities + new_abilities = ( + 0 if old_abilities[0] == 0 else self.random.choice(ability_whitelist), + 0 if old_abilities[1] == 0 else self.random.choice(ability_whitelist) + ) + + species.abilities = new_abilities + + def randomize_types() -> None: + if self.options.types == RandomizeTypes.option_shuffle: + type_map = list(range(18)) + self.random.shuffle(type_map) + + # We never want to map to the ??? type, so swap whatever index maps to ??? with ??? + # So ??? will always map to itself, and there are no pokemon which have the ??? type + mystery_type_index = type_map.index(9) + type_map[mystery_type_index], type_map[9] = type_map[9], type_map[mystery_type_index] + + for species in self.modified_species: + if species is not None: + species.types = (type_map[species.types[0]], type_map[species.types[1]]) + elif self.options.types == RandomizeTypes.option_completely_random: + for species in self.modified_species: + if species is not None: + new_type_1 = get_random_type(self.random) + new_type_2 = new_type_1 + if species.types[0] != species.types[1]: + while new_type_1 == new_type_2: + new_type_2 = get_random_type(self.random) + + species.types = (new_type_1, new_type_2) + elif self.options.types == RandomizeTypes.option_follow_evolutions: + already_modified: Set[int] = set() + + # Similar to follow evolutions for abilities, but only needs to loop through once. + # For every pokemon without a pre-evolution, generates a random mapping from old types to new types + # and then walks through the evolution tree applying that map. This means that evolutions that share + # types will have those types mapped to the same new types, and evolutions with new or diverging types + # will still have new or diverging types. + # Consider: + # - Charmeleon (Fire/Fire) -> Charizard (Fire/Flying) + # - Onyx (Rock/Ground) -> Steelix (Steel/Ground) + # - Nincada (Bug/Ground) -> Ninjask (Bug/Flying) && Shedinja (Bug/Ghost) + # - Azurill (Normal/Normal) -> Marill (Water/Water) + for species in self.modified_species: + if species is None: + continue + if species.species_id in already_modified: + continue + if species.pre_evolution is not None and species.pre_evolution not in already_modified: + continue + + type_map = list(range(18)) + self.random.shuffle(type_map) + + # We never want to map to the ??? type, so swap whatever index maps to ??? with ??? + # So ??? will always map to itself, and there are no pokemon which have the ??? type + mystery_type_index = type_map.index(9) + type_map[mystery_type_index], type_map[9] = type_map[9], type_map[mystery_type_index] + + evolutions = [species] + while len(evolutions) > 0: + evolution = evolutions.pop() + evolution.types = (type_map[evolution.types[0]], type_map[evolution.types[1]]) + already_modified.add(evolution.species_id) + evolutions += [self.modified_species[evo.species_id] for evo in evolution.evolutions] + + def randomize_learnsets() -> None: + type_bias = self.options.move_match_type_bias.value + normal_bias = self.options.move_normal_type_bias.value + + for species in self.modified_species: + if species is None: + continue + + old_learnset = species.learnset + new_learnset: List[LearnsetMove] = [] + + i = 0 + # Replace filler MOVE_NONEs at start of list + while old_learnset[i].move_id == 0: + if self.options.level_up_moves == LevelUpMoves.option_start_with_four_moves: + new_move = get_random_move(self.random, {move.move_id for move in new_learnset}, type_bias, + normal_bias, species.types) + else: + new_move = 0 + new_learnset.append(LearnsetMove(old_learnset[i].level, new_move)) + i += 1 + + while i < len(old_learnset): + # Guarantees the starter has a good damaging move + if i == 3: + new_move = get_random_damaging_move(self.random, {move.move_id for move in new_learnset}) + else: + new_move = get_random_move(self.random, {move.move_id for move in new_learnset}, type_bias, + normal_bias, species.types) + new_learnset.append(LearnsetMove(old_learnset[i].level, new_move)) + i += 1 + + species.learnset = new_learnset + + def randomize_tm_hm_compatibility() -> None: + for species in self.modified_species: + if species is None: + continue + + combatibility_array = int_to_bool_array(species.tm_hm_compatibility) + + # TMs + for i in range(0, 50): + if self.options.tm_compatibility == TmCompatibility.option_fully_compatible: + combatibility_array[i] = True + elif self.options.tm_compatibility == TmCompatibility.option_completely_random: + combatibility_array[i] = self.random.choice([True, False]) + + # HMs + for i in range(50, 58): + if self.options.hm_compatibility == HmCompatibility.option_fully_compatible: + combatibility_array[i] = True + elif self.options.hm_compatibility == HmCompatibility.option_completely_random: + combatibility_array[i] = self.random.choice([True, False]) + + species.tm_hm_compatibility = bool_array_to_int(combatibility_array) + + def randomize_tm_moves() -> None: + new_moves: Set[int] = set() + + for i in range(50): + new_move = get_random_move(self.random, new_moves) + new_moves.add(new_move) + self.modified_tmhm_moves[i] = new_move + + def randomize_wild_encounters() -> None: + should_match_bst = self.options.wild_pokemon in { + RandomizeWildPokemon.option_match_base_stats, + RandomizeWildPokemon.option_match_base_stats_and_type + } + should_match_type = self.options.wild_pokemon in { + RandomizeWildPokemon.option_match_type, + RandomizeWildPokemon.option_match_base_stats_and_type + } + should_allow_legendaries = self.options.allow_wild_legendaries == Toggle.option_true + + for map_data in self.modified_maps: + new_encounters: List[Optional[EncounterTableData]] = [None, None, None] + old_encounters = [map_data.land_encounters, map_data.water_encounters, map_data.fishing_encounters] + + for i, table in enumerate(old_encounters): + if table is not None: + species_old_to_new_map: Dict[int, int] = {} + for species_id in table.slots: + if species_id not in species_old_to_new_map: + original_species = emerald_data.species[species_id] + target_bst = sum(original_species.base_stats) if should_match_bst else None + target_type = self.random.choice(original_species.types) if should_match_type else None + + species_old_to_new_map[species_id] = get_random_species( + self.random, + self.modified_species, + target_bst, + target_type, + should_allow_legendaries + ).species_id + + new_slots: List[int] = [] + for species_id in table.slots: + new_slots.append(species_old_to_new_map[species_id]) + + new_encounters[i] = EncounterTableData(new_slots, table.rom_address) + + map_data.land_encounters = new_encounters[0] + map_data.water_encounters = new_encounters[1] + map_data.fishing_encounters = new_encounters[2] + + def randomize_static_encounters() -> None: + if self.options.static_encounters == RandomizeStaticEncounters.option_shuffle: + shuffled_species = [encounter.species_id for encounter in emerald_data.static_encounters] + self.random.shuffle(shuffled_species) + + self.modified_static_encounters = [] + for i, encounter in enumerate(emerald_data.static_encounters): + self.modified_static_encounters.append(StaticEncounterData( + shuffled_species[i], + encounter.rom_address + )) + else: + should_match_bst = self.options.static_encounters in { + RandomizeStaticEncounters.option_match_base_stats, + RandomizeStaticEncounters.option_match_base_stats_and_type + } + should_match_type = self.options.static_encounters in { + RandomizeStaticEncounters.option_match_type, + RandomizeStaticEncounters.option_match_base_stats_and_type + } + + for encounter in emerald_data.static_encounters: + original_species = self.modified_species[encounter.species_id] + target_bst = sum(original_species.base_stats) if should_match_bst else None + target_type = self.random.choice(original_species.types) if should_match_type else None + + self.modified_static_encounters.append(StaticEncounterData( + get_random_species(self.random, self.modified_species, target_bst, target_type).species_id, + encounter.rom_address + )) + + def randomize_opponent_parties() -> None: + should_match_bst = self.options.trainer_parties in { + RandomizeTrainerParties.option_match_base_stats, + RandomizeTrainerParties.option_match_base_stats_and_type + } + should_match_type = self.options.trainer_parties in { + RandomizeTrainerParties.option_match_type, + RandomizeTrainerParties.option_match_base_stats_and_type + } + allow_legendaries = self.options.allow_trainer_legendaries == Toggle.option_true + + per_species_tmhm_moves: Dict[int, List[int]] = {} + + for trainer in self.modified_trainers: + new_party = [] + for pokemon in trainer.party.pokemon: + original_species = emerald_data.species[pokemon.species_id] + target_bst = sum(original_species.base_stats) if should_match_bst else None + target_type = self.random.choice(original_species.types) if should_match_type else None + + new_species = get_random_species( + self.random, + self.modified_species, + target_bst, + target_type, + allow_legendaries + ) + + if new_species.species_id not in per_species_tmhm_moves: + per_species_tmhm_moves[new_species.species_id] = list({ + self.modified_tmhm_moves[i] + for i, is_compatible in enumerate(int_to_bool_array(new_species.tm_hm_compatibility)) + if is_compatible + }) + + tm_hm_movepool = per_species_tmhm_moves[new_species.species_id] + level_up_movepool = list({ + move.move_id + for move in new_species.learnset + if move.level <= pokemon.level + }) + + new_moves = ( + self.random.choice(tm_hm_movepool if self.random.random() < 0.25 and len(tm_hm_movepool) > 0 else level_up_movepool), + self.random.choice(tm_hm_movepool if self.random.random() < 0.25 and len(tm_hm_movepool) > 0 else level_up_movepool), + self.random.choice(tm_hm_movepool if self.random.random() < 0.25 and len(tm_hm_movepool) > 0 else level_up_movepool), + self.random.choice(tm_hm_movepool if self.random.random() < 0.25 and len(tm_hm_movepool) > 0 else level_up_movepool) + ) + + new_party.append(TrainerPokemonData(new_species.species_id, pokemon.level, new_moves)) + + trainer.party.pokemon = new_party + + def randomize_starters() -> None: + match_bst = self.options.starters in { + RandomizeStarters.option_match_base_stats, + RandomizeStarters.option_match_base_stats_and_type + } + match_type = self.options.starters in { + RandomizeStarters.option_match_type, + RandomizeStarters.option_match_base_stats_and_type + } + allow_legendaries = self.options.allow_starter_legendaries == Toggle.option_true + + starter_bsts = ( + sum(emerald_data.species[emerald_data.starters[0]].base_stats) if match_bst else None, + sum(emerald_data.species[emerald_data.starters[1]].base_stats) if match_bst else None, + sum(emerald_data.species[emerald_data.starters[2]].base_stats) if match_bst else None + ) + + starter_types = ( + self.random.choice(emerald_data.species[emerald_data.starters[0]].types) if match_type else None, + self.random.choice(emerald_data.species[emerald_data.starters[1]].types) if match_type else None, + self.random.choice(emerald_data.species[emerald_data.starters[2]].types) if match_type else None + ) + + new_starters = ( + get_random_species(self.random, self.modified_species, + starter_bsts[0], starter_types[0], allow_legendaries), + get_random_species(self.random, self.modified_species, + starter_bsts[1], starter_types[1], allow_legendaries), + get_random_species(self.random, self.modified_species, + starter_bsts[2], starter_types[2], allow_legendaries) + ) + + egg_code = self.options.easter_egg.value + egg_check_1 = 0 + egg_check_2 = 0 + + for i in egg_code: + egg_check_1 += ord(i) + egg_check_2 += egg_check_1 * egg_check_1 + + egg = 96 + egg_check_2 - (egg_check_1 * 0x077C) + if egg_check_2 == 0x14E03A and egg < 411 and egg > 0 and egg not in range(252, 277): + self.modified_starters = (egg, egg, egg) + else: + self.modified_starters = ( + new_starters[0].species_id, + new_starters[1].species_id, + new_starters[2].species_id + ) + + # Putting the unchosen starter onto the rival's team + rival_teams: List[List[Tuple[str, int, bool]]] = [ + [ + ("TRAINER_BRENDAN_ROUTE_103_TREECKO", 0, False), + ("TRAINER_BRENDAN_RUSTBORO_TREECKO", 1, False), + ("TRAINER_BRENDAN_ROUTE_110_TREECKO", 2, True ), + ("TRAINER_BRENDAN_ROUTE_119_TREECKO", 2, True ), + ("TRAINER_BRENDAN_LILYCOVE_TREECKO", 3, True ), + ("TRAINER_MAY_ROUTE_103_TREECKO", 0, False), + ("TRAINER_MAY_RUSTBORO_TREECKO", 1, False), + ("TRAINER_MAY_ROUTE_110_TREECKO", 2, True ), + ("TRAINER_MAY_ROUTE_119_TREECKO", 2, True ), + ("TRAINER_MAY_LILYCOVE_TREECKO", 3, True ) + ], + [ + ("TRAINER_BRENDAN_ROUTE_103_TORCHIC", 0, False), + ("TRAINER_BRENDAN_RUSTBORO_TORCHIC", 1, False), + ("TRAINER_BRENDAN_ROUTE_110_TORCHIC", 2, True ), + ("TRAINER_BRENDAN_ROUTE_119_TORCHIC", 2, True ), + ("TRAINER_BRENDAN_LILYCOVE_TORCHIC", 3, True ), + ("TRAINER_MAY_ROUTE_103_TORCHIC", 0, False), + ("TRAINER_MAY_RUSTBORO_TORCHIC", 1, False), + ("TRAINER_MAY_ROUTE_110_TORCHIC", 2, True ), + ("TRAINER_MAY_ROUTE_119_TORCHIC", 2, True ), + ("TRAINER_MAY_LILYCOVE_TORCHIC", 3, True ) + ], + [ + ("TRAINER_BRENDAN_ROUTE_103_MUDKIP", 0, False), + ("TRAINER_BRENDAN_RUSTBORO_MUDKIP", 1, False), + ("TRAINER_BRENDAN_ROUTE_110_MUDKIP", 2, True ), + ("TRAINER_BRENDAN_ROUTE_119_MUDKIP", 2, True ), + ("TRAINER_BRENDAN_LILYCOVE_MUDKIP", 3, True ), + ("TRAINER_MAY_ROUTE_103_MUDKIP", 0, False), + ("TRAINER_MAY_RUSTBORO_MUDKIP", 1, False), + ("TRAINER_MAY_ROUTE_110_MUDKIP", 2, True ), + ("TRAINER_MAY_ROUTE_119_MUDKIP", 2, True ), + ("TRAINER_MAY_LILYCOVE_MUDKIP", 3, True ) + ] + ] + + for i, starter in enumerate([new_starters[1], new_starters[2], new_starters[0]]): + potential_evolutions = [evolution.species_id for evolution in starter.evolutions] + picked_evolution = starter.species_id + if len(potential_evolutions) > 0: + picked_evolution = self.random.choice(potential_evolutions) + + for trainer_name, starter_position, is_evolved in rival_teams[i]: + trainer_data = self.modified_trainers[emerald_data.constants[trainer_name]] + trainer_data.party.pokemon[starter_position].species_id = picked_evolution if is_evolved else starter.species_id + + self.modified_species = copy.deepcopy(emerald_data.species) + self.modified_trainers = copy.deepcopy(emerald_data.trainers) + self.modified_maps = copy.deepcopy(emerald_data.maps) + self.modified_tmhm_moves = copy.deepcopy(emerald_data.tmhm_moves) + self.modified_static_encounters = copy.deepcopy(emerald_data.static_encounters) + self.modified_starters = copy.deepcopy(emerald_data.starters) + + # Randomize species data + if self.options.abilities != RandomizeAbilities.option_vanilla: + randomize_abilities() + + if self.options.types != RandomizeTypes.option_vanilla: + randomize_types() + + if self.options.level_up_moves != LevelUpMoves.option_vanilla: + randomize_learnsets() + + randomize_tm_hm_compatibility() # Options are checked within this function + + min_catch_rate = min(self.options.min_catch_rate.value, 255) + for species in self.modified_species: + if species is not None: + species.catch_rate = max(species.catch_rate, min_catch_rate) + + if self.options.tm_moves: + randomize_tm_moves() + + # Randomize wild encounters + if self.options.wild_pokemon != RandomizeWildPokemon.option_vanilla: + randomize_wild_encounters() + + # Randomize static encounters + if self.options.static_encounters != RandomizeStaticEncounters.option_vanilla: + randomize_static_encounters() + + # Randomize opponents + if self.options.trainer_parties != RandomizeTrainerParties.option_vanilla: + randomize_opponent_parties() + + # Randomize starters + if self.options.starters != RandomizeStarters.option_vanilla: + randomize_starters() + + generate_output(self, output_directory) + + def fill_slot_data(self) -> Dict[str, Any]: + slot_data = self.options.as_dict( + "goal", + "badges", + "hms", + "key_items", + "bikes", + "rods", + "overworld_items", + "hidden_items", + "npc_gifts", + "require_itemfinder", + "require_flash", + "enable_ferry", + "elite_four_requirement", + "elite_four_count", + "norman_requirement", + "norman_count", + "extra_boulders", + "remove_roadblocks", + "free_fly_location", + "fly_without_badge", + ) + slot_data["free_fly_location_id"] = self.free_fly_location_id + return slot_data + + def create_item(self, name: str) -> PokemonEmeraldItem: + return self.create_item_by_code(self.item_name_to_id[name]) + + def create_item_by_code(self, item_code: int) -> PokemonEmeraldItem: + return PokemonEmeraldItem( + self.item_id_to_name[item_code], + get_item_classification(item_code), + item_code, + self.player + ) + + def create_event(self, name: str) -> PokemonEmeraldItem: + return PokemonEmeraldItem( + name, + ItemClassification.progression, + None, + self.player + ) diff --git a/worlds/pokemon_emerald/client.py b/worlds/pokemon_emerald/client.py new file mode 100644 index 000000000000..5420b15fbe95 --- /dev/null +++ b/worlds/pokemon_emerald/client.py @@ -0,0 +1,277 @@ +from typing import TYPE_CHECKING, Dict, Set + +from NetUtils import ClientStatus +import worlds._bizhawk as bizhawk +from worlds._bizhawk.client import BizHawkClient + +from .data import BASE_OFFSET, data +from .options import Goal + +if TYPE_CHECKING: + from worlds._bizhawk.context import BizHawkClientContext + + +EXPECTED_ROM_NAME = "pokemon emerald version / AP 2" + +IS_CHAMPION_FLAG = data.constants["FLAG_IS_CHAMPION"] +DEFEATED_STEVEN_FLAG = data.constants["TRAINER_FLAGS_START"] + data.constants["TRAINER_STEVEN"] +DEFEATED_NORMAN_FLAG = data.constants["TRAINER_FLAGS_START"] + data.constants["TRAINER_NORMAN_1"] + +# These flags are communicated to the tracker as a bitfield using this order. +# Modifying the order will cause undetectable autotracking issues. +TRACKER_EVENT_FLAGS = [ + "FLAG_DEFEATED_RUSTBORO_GYM", + "FLAG_DEFEATED_DEWFORD_GYM", + "FLAG_DEFEATED_MAUVILLE_GYM", + "FLAG_DEFEATED_LAVARIDGE_GYM", + "FLAG_DEFEATED_PETALBURG_GYM", + "FLAG_DEFEATED_FORTREE_GYM", + "FLAG_DEFEATED_MOSSDEEP_GYM", + "FLAG_DEFEATED_SOOTOPOLIS_GYM", + "FLAG_RECEIVED_POKENAV", # Talk to Mr. Stone + "FLAG_DELIVERED_STEVEN_LETTER", + "FLAG_DELIVERED_DEVON_GOODS", + "FLAG_HIDE_ROUTE_119_TEAM_AQUA", # Clear Weather Institute + "FLAG_MET_ARCHIE_METEOR_FALLS", # Magma steals meteorite + "FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT", # Clear Magma Hideout + "FLAG_MET_TEAM_AQUA_HARBOR", # Aqua steals submarine + "FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE", # Clear Aqua Hideout + "FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_MAGMA_NOTE", # Clear Space Center + "FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN", + "FLAG_HIDE_SKY_PILLAR_TOP_RAYQUAZA", # Rayquaza departs for Sootopolis + "FLAG_OMIT_DIVE_FROM_STEVEN_LETTER", # Steven gives Dive HM (clears seafloor cavern grunt) + "FLAG_IS_CHAMPION", + "FLAG_PURCHASED_HARBOR_MAIL" +] +EVENT_FLAG_MAP = {data.constants[flag_name]: flag_name for flag_name in TRACKER_EVENT_FLAGS} + +KEY_LOCATION_FLAGS = [ + "NPC_GIFT_RECEIVED_HM01", + "NPC_GIFT_RECEIVED_HM02", + "NPC_GIFT_RECEIVED_HM03", + "NPC_GIFT_RECEIVED_HM04", + "NPC_GIFT_RECEIVED_HM05", + "NPC_GIFT_RECEIVED_HM06", + "NPC_GIFT_RECEIVED_HM07", + "NPC_GIFT_RECEIVED_HM08", + "NPC_GIFT_RECEIVED_ACRO_BIKE", + "NPC_GIFT_RECEIVED_WAILMER_PAIL", + "NPC_GIFT_RECEIVED_DEVON_GOODS_RUSTURF_TUNNEL", + "NPC_GIFT_RECEIVED_LETTER", + "NPC_GIFT_RECEIVED_METEORITE", + "NPC_GIFT_RECEIVED_GO_GOGGLES", + "NPC_GIFT_GOT_BASEMENT_KEY_FROM_WATTSON", + "NPC_GIFT_RECEIVED_ITEMFINDER", + "NPC_GIFT_RECEIVED_DEVON_SCOPE", + "NPC_GIFT_RECEIVED_MAGMA_EMBLEM", + "NPC_GIFT_RECEIVED_POKEBLOCK_CASE", + "NPC_GIFT_RECEIVED_SS_TICKET", + "HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY", + "HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY", + "HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY", + "HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY", + "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER", + "ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY", + "NPC_GIFT_RECEIVED_OLD_ROD", + "NPC_GIFT_RECEIVED_GOOD_ROD", + "NPC_GIFT_RECEIVED_SUPER_ROD", +] +KEY_LOCATION_FLAG_MAP = {data.locations[location_name].flag: location_name for location_name in KEY_LOCATION_FLAGS} + + +class PokemonEmeraldClient(BizHawkClient): + game = "Pokemon Emerald" + system = "GBA" + patch_suffix = ".apemerald" + local_checked_locations: Set[int] + local_set_events: Dict[str, bool] + local_found_key_items: Dict[str, bool] + goal_flag: int + + def __init__(self) -> None: + super().__init__() + self.local_checked_locations = set() + self.local_set_events = {} + self.local_found_key_items = {} + self.goal_flag = IS_CHAMPION_FLAG + + async def validate_rom(self, ctx: "BizHawkClientContext") -> bool: + from CommonClient import logger + + try: + # Check ROM name/patch version + rom_name_bytes = ((await bizhawk.read(ctx.bizhawk_ctx, [(0x108, 32, "ROM")]))[0]) + rom_name = bytes([byte for byte in rom_name_bytes if byte != 0]).decode("ascii") + if not rom_name.startswith("pokemon emerald version"): + return False + if rom_name == "pokemon emerald version": + logger.info("ERROR: You appear to be running an unpatched version of Pokemon Emerald. " + "You need to generate a patch file and use it to create a patched ROM.") + return False + if rom_name != EXPECTED_ROM_NAME: + logger.info("ERROR: The patch file used to create this ROM is not compatible with " + "this client. Double check your client version against the version being " + "used by the generator.") + return False + except UnicodeDecodeError: + return False + except bizhawk.RequestFailedError: + return False # Should verify on the next pass + + ctx.game = self.game + ctx.items_handling = 0b001 + ctx.want_slot_data = True + ctx.watcher_timeout = 0.125 + + return True + + async def set_auth(self, ctx: "BizHawkClientContext") -> None: + slot_name_bytes = (await bizhawk.read(ctx.bizhawk_ctx, [(data.rom_addresses["gArchipelagoInfo"], 64, "ROM")]))[0] + ctx.auth = bytes([byte for byte in slot_name_bytes if byte != 0]).decode("utf-8") + + async def game_watcher(self, ctx: "BizHawkClientContext") -> None: + if ctx.slot_data is not None: + if ctx.slot_data["goal"] == Goal.option_champion: + self.goal_flag = IS_CHAMPION_FLAG + elif ctx.slot_data["goal"] == Goal.option_steven: + self.goal_flag = DEFEATED_STEVEN_FLAG + elif ctx.slot_data["goal"] == Goal.option_norman: + self.goal_flag = DEFEATED_NORMAN_FLAG + + try: + # Checks that the player is in the overworld + overworld_guard = (data.ram_addresses["gMain"] + 4, (data.ram_addresses["CB2_Overworld"] + 1).to_bytes(4, "little"), "System Bus") + + # Read save block address + read_result = await bizhawk.guarded_read( + ctx.bizhawk_ctx, + [(data.ram_addresses["gSaveBlock1Ptr"], 4, "System Bus")], + [overworld_guard] + ) + if read_result is None: # Not in overworld + return + + # Checks that the save block hasn't moved + save_block_address_guard = (data.ram_addresses["gSaveBlock1Ptr"], read_result[0], "System Bus") + + save_block_address = int.from_bytes(read_result[0], "little") + + # Handle giving the player items + read_result = await bizhawk.guarded_read( + ctx.bizhawk_ctx, + [ + (save_block_address + 0x3778, 2, "System Bus"), # Number of received items + (data.ram_addresses["gArchipelagoReceivedItem"] + 4, 1, "System Bus") # Received item struct full? + ], + [overworld_guard, save_block_address_guard] + ) + if read_result is None: # Not in overworld, or save block moved + return + + num_received_items = int.from_bytes(read_result[0], "little") + received_item_is_empty = read_result[1][0] == 0 + + # If the game hasn't received all items yet and the received item struct doesn't contain an item, then + # fill it with the next item + if num_received_items < len(ctx.items_received) and received_item_is_empty: + next_item = ctx.items_received[num_received_items] + await bizhawk.write(ctx.bizhawk_ctx, [ + (data.ram_addresses["gArchipelagoReceivedItem"] + 0, (next_item.item - BASE_OFFSET).to_bytes(2, "little"), "System Bus"), + (data.ram_addresses["gArchipelagoReceivedItem"] + 2, (num_received_items + 1).to_bytes(2, "little"), "System Bus"), + (data.ram_addresses["gArchipelagoReceivedItem"] + 4, [1], "System Bus"), # Mark struct full + (data.ram_addresses["gArchipelagoReceivedItem"] + 5, [next_item.flags & 1], "System Bus"), + ]) + + # Read flags in 2 chunks + read_result = await bizhawk.guarded_read( + ctx.bizhawk_ctx, + [(save_block_address + 0x1450, 0x96, "System Bus")], # Flags + [overworld_guard, save_block_address_guard] + ) + if read_result is None: # Not in overworld, or save block moved + return + + flag_bytes = read_result[0] + + read_result = await bizhawk.guarded_read( + ctx.bizhawk_ctx, + [(save_block_address + 0x14E6, 0x96, "System Bus")], # Flags + [overworld_guard, save_block_address_guard] + ) + if read_result is not None: + flag_bytes += read_result[0] + + game_clear = False + local_checked_locations = set() + local_set_events = {flag_name: False for flag_name in TRACKER_EVENT_FLAGS} + local_found_key_items = {location_name: False for location_name in KEY_LOCATION_FLAGS} + + # Check set flags + for byte_i, byte in enumerate(flag_bytes): + for i in range(8): + if byte & (1 << i) != 0: + flag_id = byte_i * 8 + i + + location_id = flag_id + BASE_OFFSET + if location_id in ctx.server_locations: + local_checked_locations.add(location_id) + + if flag_id == self.goal_flag: + game_clear = True + + if flag_id in EVENT_FLAG_MAP: + local_set_events[EVENT_FLAG_MAP[flag_id]] = True + + if flag_id in KEY_LOCATION_FLAG_MAP: + local_found_key_items[KEY_LOCATION_FLAG_MAP[flag_id]] = True + + # Send locations + if local_checked_locations != self.local_checked_locations: + self.local_checked_locations = local_checked_locations + + if local_checked_locations is not None: + await ctx.send_msgs([{ + "cmd": "LocationChecks", + "locations": list(local_checked_locations) + }]) + + # Send game clear + if not ctx.finished_game and game_clear: + await ctx.send_msgs([{ + "cmd": "StatusUpdate", + "status": ClientStatus.CLIENT_GOAL + }]) + + # Send tracker event flags + if local_set_events != self.local_set_events and ctx.slot is not None: + event_bitfield = 0 + for i, flag_name in enumerate(TRACKER_EVENT_FLAGS): + if local_set_events[flag_name]: + event_bitfield |= 1 << i + + await ctx.send_msgs([{ + "cmd": "Set", + "key": f"pokemon_emerald_events_{ctx.team}_{ctx.slot}", + "default": 0, + "want_reply": False, + "operations": [{"operation": "replace", "value": event_bitfield}] + }]) + self.local_set_events = local_set_events + + if local_found_key_items != self.local_found_key_items: + key_bitfield = 0 + for i, location_name in enumerate(KEY_LOCATION_FLAGS): + if local_found_key_items[location_name]: + key_bitfield |= 1 << i + + await ctx.send_msgs([{ + "cmd": "Set", + "key": f"pokemon_emerald_keys_{ctx.team}_{ctx.slot}", + "default": 0, + "want_reply": False, + "operations": [{"operation": "replace", "value": key_bitfield}] + }]) + self.local_found_key_items = local_found_key_items + except bizhawk.RequestFailedError: + # Exit handler and return to main loop to reconnect + pass diff --git a/worlds/pokemon_emerald/data.py b/worlds/pokemon_emerald/data.py new file mode 100644 index 000000000000..bc51d84963c5 --- /dev/null +++ b/worlds/pokemon_emerald/data.py @@ -0,0 +1,995 @@ +""" +Pulls data from JSON files in worlds/pokemon_emerald/data/ into classes. +This also includes marrying automatically extracted data with manually +defined data (like location labels or usable pokemon species), some cleanup +and sorting, and Warp methods. +""" +from dataclasses import dataclass +import copy +from enum import IntEnum +import orjson +from typing import Dict, List, NamedTuple, Optional, Set, FrozenSet, Tuple, Any, Union +import pkgutil +import pkg_resources + +from BaseClasses import ItemClassification + + +BASE_OFFSET = 3860000 + + +class Warp: + """ + Represents warp events in the game like doorways or warp pads + """ + is_one_way: bool + source_map: str + source_ids: List[int] + dest_map: str + dest_ids: List[int] + parent_region: Optional[str] + + def __init__(self, encoded_string: Optional[str] = None, parent_region: Optional[str] = None) -> None: + if encoded_string is not None: + decoded_warp = Warp.decode(encoded_string) + self.is_one_way = decoded_warp.is_one_way + self.source_map = decoded_warp.source_map + self.source_ids = decoded_warp.source_ids + self.dest_map = decoded_warp.dest_map + self.dest_ids = decoded_warp.dest_ids + self.parent_region = parent_region + + def encode(self) -> str: + """ + Returns a string encoding of this warp + """ + source_ids_string = "" + for source_id in self.source_ids: + source_ids_string += str(source_id) + "," + source_ids_string = source_ids_string[:-1] # Remove last "," + + dest_ids_string = "" + for dest_id in self.dest_ids: + dest_ids_string += str(dest_id) + "," + dest_ids_string = dest_ids_string[:-1] # Remove last "," + + return f"{self.source_map}:{source_ids_string}/{self.dest_map}:{dest_ids_string}{'!' if self.is_one_way else ''}" + + def connects_to(self, other: 'Warp') -> bool: + """ + Returns true if this warp sends the player to `other` + """ + return self.dest_map == other.source_map and set(self.dest_ids) <= set(other.source_ids) + + @staticmethod + def decode(encoded_string: str) -> 'Warp': + """ + Create a Warp object from an encoded string + """ + warp = Warp() + warp.is_one_way = encoded_string.endswith("!") + if warp.is_one_way: + encoded_string = encoded_string[:-1] + + warp_source, warp_dest = encoded_string.split("/") + warp_source_map, warp_source_indices = warp_source.split(":") + warp_dest_map, warp_dest_indices = warp_dest.split(":") + + warp.source_map = warp_source_map + warp.dest_map = warp_dest_map + + warp.source_ids = [int(index) for index in warp_source_indices.split(",")] + warp.dest_ids = [int(index) for index in warp_dest_indices.split(",")] + + return warp + + +class ItemData(NamedTuple): + label: str + item_id: int + classification: ItemClassification + tags: FrozenSet[str] + + +class LocationData(NamedTuple): + name: str + label: str + parent_region: str + default_item: int + rom_address: int + flag: int + tags: FrozenSet[str] + + +class EventData(NamedTuple): + name: str + parent_region: str + + +class RegionData: + name: str + exits: List[str] + warps: List[str] + locations: List[str] + events: List[EventData] + + def __init__(self, name: str): + self.name = name + self.exits = [] + self.warps = [] + self.locations = [] + self.events = [] + + +class BaseStats(NamedTuple): + hp: int + attack: int + defense: int + speed: int + special_attack: int + special_defense: int + + +class LearnsetMove(NamedTuple): + level: int + move_id: int + + +class EvolutionMethodEnum(IntEnum): + LEVEL = 0 + LEVEL_ATK_LT_DEF = 1 + LEVEL_ATK_EQ_DEF = 2 + LEVEL_ATK_GT_DEF = 3 + LEVEL_SILCOON = 4 + LEVEL_CASCOON = 5 + LEVEL_NINJASK = 6 + LEVEL_SHEDINJA = 7 + ITEM = 8 + FRIENDSHIP = 9 + FRIENDSHIP_DAY = 10 + FRIENDSHIP_NIGHT = 11 + + +def _str_to_evolution_method(string: str) -> EvolutionMethodEnum: + if string == "LEVEL": + return EvolutionMethodEnum.LEVEL + if string == "LEVEL_ATK_LT_DEF": + return EvolutionMethodEnum.LEVEL_ATK_LT_DEF + if string == "LEVEL_ATK_EQ_DEF": + return EvolutionMethodEnum.LEVEL_ATK_EQ_DEF + if string == "LEVEL_ATK_GT_DEF": + return EvolutionMethodEnum.LEVEL_ATK_GT_DEF + if string == "LEVEL_SILCOON": + return EvolutionMethodEnum.LEVEL_SILCOON + if string == "LEVEL_CASCOON": + return EvolutionMethodEnum.LEVEL_CASCOON + if string == "LEVEL_NINJASK": + return EvolutionMethodEnum.LEVEL_NINJASK + if string == "LEVEL_SHEDINJA": + return EvolutionMethodEnum.LEVEL_SHEDINJA + if string == "FRIENDSHIP": + return EvolutionMethodEnum.FRIENDSHIP + if string == "FRIENDSHIP_DAY": + return EvolutionMethodEnum.FRIENDSHIP_DAY + if string == "FRIENDSHIP_NIGHT": + return EvolutionMethodEnum.FRIENDSHIP_NIGHT + + +class EvolutionData(NamedTuple): + method: EvolutionMethodEnum + param: int + species_id: int + + +class StaticEncounterData(NamedTuple): + species_id: int + rom_address: int + + +@dataclass +class SpeciesData: + name: str + label: str + species_id: int + base_stats: BaseStats + types: Tuple[int, int] + abilities: Tuple[int, int] + evolutions: List[EvolutionData] + pre_evolution: Optional[int] + catch_rate: int + learnset: List[LearnsetMove] + tm_hm_compatibility: int + learnset_rom_address: int + rom_address: int + + +class AbilityData(NamedTuple): + ability_id: int + label: str + + +class EncounterTableData(NamedTuple): + slots: List[int] + rom_address: int + + +@dataclass +class MapData: + name: str + land_encounters: Optional[EncounterTableData] + water_encounters: Optional[EncounterTableData] + fishing_encounters: Optional[EncounterTableData] + + +class TrainerPokemonDataTypeEnum(IntEnum): + NO_ITEM_DEFAULT_MOVES = 0 + ITEM_DEFAULT_MOVES = 1 + NO_ITEM_CUSTOM_MOVES = 2 + ITEM_CUSTOM_MOVES = 3 + + +def _str_to_pokemon_data_type(string: str) -> TrainerPokemonDataTypeEnum: + if string == "NO_ITEM_DEFAULT_MOVES": + return TrainerPokemonDataTypeEnum.NO_ITEM_DEFAULT_MOVES + if string == "ITEM_DEFAULT_MOVES": + return TrainerPokemonDataTypeEnum.ITEM_DEFAULT_MOVES + if string == "NO_ITEM_CUSTOM_MOVES": + return TrainerPokemonDataTypeEnum.NO_ITEM_CUSTOM_MOVES + if string == "ITEM_CUSTOM_MOVES": + return TrainerPokemonDataTypeEnum.ITEM_CUSTOM_MOVES + + +@dataclass +class TrainerPokemonData: + species_id: int + level: int + moves: Optional[Tuple[int, int, int, int]] + + +@dataclass +class TrainerPartyData: + pokemon: List[TrainerPokemonData] + pokemon_data_type: TrainerPokemonDataTypeEnum + rom_address: int + + +@dataclass +class TrainerData: + trainer_id: int + party: TrainerPartyData + rom_address: int + battle_script_rom_address: int + + +class PokemonEmeraldData: + starters: Tuple[int, int, int] + constants: Dict[str, int] + ram_addresses: Dict[str, int] + rom_addresses: Dict[str, int] + regions: Dict[str, RegionData] + locations: Dict[str, LocationData] + items: Dict[int, ItemData] + species: List[Optional[SpeciesData]] + static_encounters: List[StaticEncounterData] + tmhm_moves: List[int] + abilities: List[AbilityData] + maps: List[MapData] + warps: Dict[str, Warp] + warp_map: Dict[str, Optional[str]] + trainers: List[TrainerData] + + def __init__(self) -> None: + self.starters = (277, 280, 283) + self.constants = {} + self.ram_addresses = {} + self.rom_addresses = {} + self.regions = {} + self.locations = {} + self.items = {} + self.species = [] + self.static_encounters = [] + self.tmhm_moves = [] + self.abilities = [] + self.maps = [] + self.warps = {} + self.warp_map = {} + self.trainers = [] + + +def load_json_data(data_name: str) -> Union[List[Any], Dict[str, Any]]: + return orjson.loads(pkgutil.get_data(__name__, "data/" + data_name).decode('utf-8-sig')) + + +data = PokemonEmeraldData() + +def create_data_copy() -> PokemonEmeraldData: + new_copy = PokemonEmeraldData() + new_copy.species = copy.deepcopy(data.species) + new_copy.tmhm_moves = copy.deepcopy(data.tmhm_moves) + new_copy.maps = copy.deepcopy(data.maps) + new_copy.static_encounters = copy.deepcopy(data.static_encounters) + new_copy.trainers = copy.deepcopy(data.trainers) + + +def _init() -> None: + extracted_data: Dict[str, Any] = load_json_data("extracted_data.json") + data.constants = extracted_data["constants"] + data.ram_addresses = extracted_data["misc_ram_addresses"] + data.rom_addresses = extracted_data["misc_rom_addresses"] + + location_attributes_json = load_json_data("locations.json") + + # Load/merge region json files + region_json_list = [] + for file in pkg_resources.resource_listdir(__name__, "data/regions"): + if not pkg_resources.resource_isdir(__name__, "data/regions/" + file): + region_json_list.append(load_json_data("regions/" + file)) + + regions_json = {} + for region_subset in region_json_list: + for region_name, region_json in region_subset.items(): + if region_name in regions_json: + raise AssertionError("Region [{region_name}] was defined multiple times") + regions_json[region_name] = region_json + + # Create region data + claimed_locations: Set[str] = set() + claimed_warps: Set[str] = set() + + data.regions = {} + for region_name, region_json in regions_json.items(): + new_region = RegionData(region_name) + + # Locations + for location_name in region_json["locations"]: + if location_name in claimed_locations: + raise AssertionError(f"Location [{location_name}] was claimed by multiple regions") + + location_json = extracted_data["locations"][location_name] + new_location = LocationData( + location_name, + location_attributes_json[location_name]["label"], + region_name, + location_json["default_item"], + location_json["rom_address"], + location_json["flag"], + frozenset(location_attributes_json[location_name]["tags"]) + ) + new_region.locations.append(location_name) + data.locations[location_name] = new_location + claimed_locations.add(location_name) + + new_region.locations.sort() + + # Events + for event in region_json["events"]: + new_region.events.append(EventData(event, region_name)) + + # Exits + for region_exit in region_json["exits"]: + new_region.exits.append(region_exit) + + # Warps + for encoded_warp in region_json["warps"]: + if encoded_warp in claimed_warps: + raise AssertionError(f"Warp [{encoded_warp}] was claimed by multiple regions") + new_region.warps.append(encoded_warp) + data.warps[encoded_warp] = Warp(encoded_warp, region_name) + claimed_warps.add(encoded_warp) + + new_region.warps.sort() + + data.regions[region_name] = new_region + + # Create item data + items_json = load_json_data("items.json") + + data.items = {} + for item_constant_name, attributes in items_json.items(): + item_classification = None + if attributes["classification"] == "PROGRESSION": + item_classification = ItemClassification.progression + elif attributes["classification"] == "USEFUL": + item_classification = ItemClassification.useful + elif attributes["classification"] == "FILLER": + item_classification = ItemClassification.filler + elif attributes["classification"] == "TRAP": + item_classification = ItemClassification.trap + else: + raise ValueError(f"Unknown classification {attributes['classification']} for item {item_constant_name}") + + data.items[data.constants[item_constant_name]] = ItemData( + attributes["label"], + data.constants[item_constant_name], + item_classification, + frozenset(attributes["tags"]) + ) + + # Create species data + + # Excludes extras like copies of Unown and special species values like SPECIES_EGG. + all_species: List[Tuple[str, str]] = [ + ("SPECIES_BULBASAUR", "Bulbasaur"), + ("SPECIES_IVYSAUR", "Ivysaur"), + ("SPECIES_VENUSAUR", "Venusaur"), + ("SPECIES_CHARMANDER", "Charmander"), + ("SPECIES_CHARMELEON", "Charmeleon"), + ("SPECIES_CHARIZARD", "Charizard"), + ("SPECIES_SQUIRTLE", "Squirtle"), + ("SPECIES_WARTORTLE", "Wartortle"), + ("SPECIES_BLASTOISE", "Blastoise"), + ("SPECIES_CATERPIE", "Caterpie"), + ("SPECIES_METAPOD", "Metapod"), + ("SPECIES_BUTTERFREE", "Butterfree"), + ("SPECIES_WEEDLE", "Weedle"), + ("SPECIES_KAKUNA", "Kakuna"), + ("SPECIES_BEEDRILL", "Beedrill"), + ("SPECIES_PIDGEY", "Pidgey"), + ("SPECIES_PIDGEOTTO", "Pidgeotto"), + ("SPECIES_PIDGEOT", "Pidgeot"), + ("SPECIES_RATTATA", "Rattata"), + ("SPECIES_RATICATE", "Raticate"), + ("SPECIES_SPEAROW", "Spearow"), + ("SPECIES_FEAROW", "Fearow"), + ("SPECIES_EKANS", "Ekans"), + ("SPECIES_ARBOK", "Arbok"), + ("SPECIES_PIKACHU", "Pikachu"), + ("SPECIES_RAICHU", "Raichu"), + ("SPECIES_SANDSHREW", "Sandshrew"), + ("SPECIES_SANDSLASH", "Sandslash"), + ("SPECIES_NIDORAN_F", "Nidoran Female"), + ("SPECIES_NIDORINA", "Nidorina"), + ("SPECIES_NIDOQUEEN", "Nidoqueen"), + ("SPECIES_NIDORAN_M", "Nidoran Male"), + ("SPECIES_NIDORINO", "Nidorino"), + ("SPECIES_NIDOKING", "Nidoking"), + ("SPECIES_CLEFAIRY", "Clefairy"), + ("SPECIES_CLEFABLE", "Clefable"), + ("SPECIES_VULPIX", "Vulpix"), + ("SPECIES_NINETALES", "Ninetales"), + ("SPECIES_JIGGLYPUFF", "Jigglypuff"), + ("SPECIES_WIGGLYTUFF", "Wigglytuff"), + ("SPECIES_ZUBAT", "Zubat"), + ("SPECIES_GOLBAT", "Golbat"), + ("SPECIES_ODDISH", "Oddish"), + ("SPECIES_GLOOM", "Gloom"), + ("SPECIES_VILEPLUME", "Vileplume"), + ("SPECIES_PARAS", "Paras"), + ("SPECIES_PARASECT", "Parasect"), + ("SPECIES_VENONAT", "Venonat"), + ("SPECIES_VENOMOTH", "Venomoth"), + ("SPECIES_DIGLETT", "Diglett"), + ("SPECIES_DUGTRIO", "Dugtrio"), + ("SPECIES_MEOWTH", "Meowth"), + ("SPECIES_PERSIAN", "Persian"), + ("SPECIES_PSYDUCK", "Psyduck"), + ("SPECIES_GOLDUCK", "Golduck"), + ("SPECIES_MANKEY", "Mankey"), + ("SPECIES_PRIMEAPE", "Primeape"), + ("SPECIES_GROWLITHE", "Growlithe"), + ("SPECIES_ARCANINE", "Arcanine"), + ("SPECIES_POLIWAG", "Poliwag"), + ("SPECIES_POLIWHIRL", "Poliwhirl"), + ("SPECIES_POLIWRATH", "Poliwrath"), + ("SPECIES_ABRA", "Abra"), + ("SPECIES_KADABRA", "Kadabra"), + ("SPECIES_ALAKAZAM", "Alakazam"), + ("SPECIES_MACHOP", "Machop"), + ("SPECIES_MACHOKE", "Machoke"), + ("SPECIES_MACHAMP", "Machamp"), + ("SPECIES_BELLSPROUT", "Bellsprout"), + ("SPECIES_WEEPINBELL", "Weepinbell"), + ("SPECIES_VICTREEBEL", "Victreebel"), + ("SPECIES_TENTACOOL", "Tentacool"), + ("SPECIES_TENTACRUEL", "Tentacruel"), + ("SPECIES_GEODUDE", "Geodude"), + ("SPECIES_GRAVELER", "Graveler"), + ("SPECIES_GOLEM", "Golem"), + ("SPECIES_PONYTA", "Ponyta"), + ("SPECIES_RAPIDASH", "Rapidash"), + ("SPECIES_SLOWPOKE", "Slowpoke"), + ("SPECIES_SLOWBRO", "Slowbro"), + ("SPECIES_MAGNEMITE", "Magnemite"), + ("SPECIES_MAGNETON", "Magneton"), + ("SPECIES_FARFETCHD", "Farfetch'd"), + ("SPECIES_DODUO", "Doduo"), + ("SPECIES_DODRIO", "Dodrio"), + ("SPECIES_SEEL", "Seel"), + ("SPECIES_DEWGONG", "Dewgong"), + ("SPECIES_GRIMER", "Grimer"), + ("SPECIES_MUK", "Muk"), + ("SPECIES_SHELLDER", "Shellder"), + ("SPECIES_CLOYSTER", "Cloyster"), + ("SPECIES_GASTLY", "Gastly"), + ("SPECIES_HAUNTER", "Haunter"), + ("SPECIES_GENGAR", "Gengar"), + ("SPECIES_ONIX", "Onix"), + ("SPECIES_DROWZEE", "Drowzee"), + ("SPECIES_HYPNO", "Hypno"), + ("SPECIES_KRABBY", "Krabby"), + ("SPECIES_KINGLER", "Kingler"), + ("SPECIES_VOLTORB", "Voltorb"), + ("SPECIES_ELECTRODE", "Electrode"), + ("SPECIES_EXEGGCUTE", "Exeggcute"), + ("SPECIES_EXEGGUTOR", "Exeggutor"), + ("SPECIES_CUBONE", "Cubone"), + ("SPECIES_MAROWAK", "Marowak"), + ("SPECIES_HITMONLEE", "Hitmonlee"), + ("SPECIES_HITMONCHAN", "Hitmonchan"), + ("SPECIES_LICKITUNG", "Lickitung"), + ("SPECIES_KOFFING", "Koffing"), + ("SPECIES_WEEZING", "Weezing"), + ("SPECIES_RHYHORN", "Rhyhorn"), + ("SPECIES_RHYDON", "Rhydon"), + ("SPECIES_CHANSEY", "Chansey"), + ("SPECIES_TANGELA", "Tangela"), + ("SPECIES_KANGASKHAN", "Kangaskhan"), + ("SPECIES_HORSEA", "Horsea"), + ("SPECIES_SEADRA", "Seadra"), + ("SPECIES_GOLDEEN", "Goldeen"), + ("SPECIES_SEAKING", "Seaking"), + ("SPECIES_STARYU", "Staryu"), + ("SPECIES_STARMIE", "Starmie"), + ("SPECIES_MR_MIME", "Mr. Mime"), + ("SPECIES_SCYTHER", "Scyther"), + ("SPECIES_JYNX", "Jynx"), + ("SPECIES_ELECTABUZZ", "Electabuzz"), + ("SPECIES_MAGMAR", "Magmar"), + ("SPECIES_PINSIR", "Pinsir"), + ("SPECIES_TAUROS", "Tauros"), + ("SPECIES_MAGIKARP", "Magikarp"), + ("SPECIES_GYARADOS", "Gyarados"), + ("SPECIES_LAPRAS", "Lapras"), + ("SPECIES_DITTO", "Ditto"), + ("SPECIES_EEVEE", "Eevee"), + ("SPECIES_VAPOREON", "Vaporeon"), + ("SPECIES_JOLTEON", "Jolteon"), + ("SPECIES_FLAREON", "Flareon"), + ("SPECIES_PORYGON", "Porygon"), + ("SPECIES_OMANYTE", "Omanyte"), + ("SPECIES_OMASTAR", "Omastar"), + ("SPECIES_KABUTO", "Kabuto"), + ("SPECIES_KABUTOPS", "Kabutops"), + ("SPECIES_AERODACTYL", "Aerodactyl"), + ("SPECIES_SNORLAX", "Snorlax"), + ("SPECIES_ARTICUNO", "Articuno"), + ("SPECIES_ZAPDOS", "Zapdos"), + ("SPECIES_MOLTRES", "Moltres"), + ("SPECIES_DRATINI", "Dratini"), + ("SPECIES_DRAGONAIR", "Dragonair"), + ("SPECIES_DRAGONITE", "Dragonite"), + ("SPECIES_MEWTWO", "Mewtwo"), + ("SPECIES_MEW", "Mew"), + ("SPECIES_CHIKORITA", "Chikorita"), + ("SPECIES_BAYLEEF", "Bayleaf"), + ("SPECIES_MEGANIUM", "Meganium"), + ("SPECIES_CYNDAQUIL", "Cindaquil"), + ("SPECIES_QUILAVA", "Quilava"), + ("SPECIES_TYPHLOSION", "Typhlosion"), + ("SPECIES_TOTODILE", "Totodile"), + ("SPECIES_CROCONAW", "Croconaw"), + ("SPECIES_FERALIGATR", "Feraligatr"), + ("SPECIES_SENTRET", "Sentret"), + ("SPECIES_FURRET", "Furret"), + ("SPECIES_HOOTHOOT", "Hoothoot"), + ("SPECIES_NOCTOWL", "Noctowl"), + ("SPECIES_LEDYBA", "Ledyba"), + ("SPECIES_LEDIAN", "Ledian"), + ("SPECIES_SPINARAK", "Spinarak"), + ("SPECIES_ARIADOS", "Ariados"), + ("SPECIES_CROBAT", "Crobat"), + ("SPECIES_CHINCHOU", "Chinchou"), + ("SPECIES_LANTURN", "Lanturn"), + ("SPECIES_PICHU", "Pichu"), + ("SPECIES_CLEFFA", "Cleffa"), + ("SPECIES_IGGLYBUFF", "Igglybuff"), + ("SPECIES_TOGEPI", "Togepi"), + ("SPECIES_TOGETIC", "Togetic"), + ("SPECIES_NATU", "Natu"), + ("SPECIES_XATU", "Xatu"), + ("SPECIES_MAREEP", "Mareep"), + ("SPECIES_FLAAFFY", "Flaafy"), + ("SPECIES_AMPHAROS", "Ampharos"), + ("SPECIES_BELLOSSOM", "Bellossom"), + ("SPECIES_MARILL", "Marill"), + ("SPECIES_AZUMARILL", "Azumarill"), + ("SPECIES_SUDOWOODO", "Sudowoodo"), + ("SPECIES_POLITOED", "Politoed"), + ("SPECIES_HOPPIP", "Hoppip"), + ("SPECIES_SKIPLOOM", "Skiploom"), + ("SPECIES_JUMPLUFF", "Jumpluff"), + ("SPECIES_AIPOM", "Aipom"), + ("SPECIES_SUNKERN", "Sunkern"), + ("SPECIES_SUNFLORA", "Sunflora"), + ("SPECIES_YANMA", "Yanma"), + ("SPECIES_WOOPER", "Wooper"), + ("SPECIES_QUAGSIRE", "Quagsire"), + ("SPECIES_ESPEON", "Espeon"), + ("SPECIES_UMBREON", "Umbreon"), + ("SPECIES_MURKROW", "Murkrow"), + ("SPECIES_SLOWKING", "Slowking"), + ("SPECIES_MISDREAVUS", "Misdreavus"), + ("SPECIES_UNOWN", "Unown"), + ("SPECIES_WOBBUFFET", "Wobbuffet"), + ("SPECIES_GIRAFARIG", "Girafarig"), + ("SPECIES_PINECO", "Pineco"), + ("SPECIES_FORRETRESS", "Forretress"), + ("SPECIES_DUNSPARCE", "Dunsparce"), + ("SPECIES_GLIGAR", "Gligar"), + ("SPECIES_STEELIX", "Steelix"), + ("SPECIES_SNUBBULL", "Snubbull"), + ("SPECIES_GRANBULL", "Granbull"), + ("SPECIES_QWILFISH", "Qwilfish"), + ("SPECIES_SCIZOR", "Scizor"), + ("SPECIES_SHUCKLE", "Shuckle"), + ("SPECIES_HERACROSS", "Heracross"), + ("SPECIES_SNEASEL", "Sneasel"), + ("SPECIES_TEDDIURSA", "Teddiursa"), + ("SPECIES_URSARING", "Ursaring"), + ("SPECIES_SLUGMA", "Slugma"), + ("SPECIES_MAGCARGO", "Magcargo"), + ("SPECIES_SWINUB", "Swinub"), + ("SPECIES_PILOSWINE", "Piloswine"), + ("SPECIES_CORSOLA", "Corsola"), + ("SPECIES_REMORAID", "Remoraid"), + ("SPECIES_OCTILLERY", "Octillery"), + ("SPECIES_DELIBIRD", "Delibird"), + ("SPECIES_MANTINE", "Mantine"), + ("SPECIES_SKARMORY", "Skarmory"), + ("SPECIES_HOUNDOUR", "Houndour"), + ("SPECIES_HOUNDOOM", "Houndoom"), + ("SPECIES_KINGDRA", "Kingdra"), + ("SPECIES_PHANPY", "Phanpy"), + ("SPECIES_DONPHAN", "Donphan"), + ("SPECIES_PORYGON2", "Porygon2"), + ("SPECIES_STANTLER", "Stantler"), + ("SPECIES_SMEARGLE", "Smeargle"), + ("SPECIES_TYROGUE", "Tyrogue"), + ("SPECIES_HITMONTOP", "Hitmontop"), + ("SPECIES_SMOOCHUM", "Smoochum"), + ("SPECIES_ELEKID", "Elekid"), + ("SPECIES_MAGBY", "Magby"), + ("SPECIES_MILTANK", "Miltank"), + ("SPECIES_BLISSEY", "Blissey"), + ("SPECIES_RAIKOU", "Raikou"), + ("SPECIES_ENTEI", "Entei"), + ("SPECIES_SUICUNE", "Suicune"), + ("SPECIES_LARVITAR", "Larvitar"), + ("SPECIES_PUPITAR", "Pupitar"), + ("SPECIES_TYRANITAR", "Tyranitar"), + ("SPECIES_LUGIA", "Lugia"), + ("SPECIES_HO_OH", "Ho-oh"), + ("SPECIES_CELEBI", "Celebi"), + ("SPECIES_TREECKO", "Treecko"), + ("SPECIES_GROVYLE", "Grovyle"), + ("SPECIES_SCEPTILE", "Sceptile"), + ("SPECIES_TORCHIC", "Torchic"), + ("SPECIES_COMBUSKEN", "Combusken"), + ("SPECIES_BLAZIKEN", "Blaziken"), + ("SPECIES_MUDKIP", "Mudkip"), + ("SPECIES_MARSHTOMP", "Marshtomp"), + ("SPECIES_SWAMPERT", "Swampert"), + ("SPECIES_POOCHYENA", "Poochyena"), + ("SPECIES_MIGHTYENA", "Mightyena"), + ("SPECIES_ZIGZAGOON", "Zigzagoon"), + ("SPECIES_LINOONE", "Linoon"), + ("SPECIES_WURMPLE", "Wurmple"), + ("SPECIES_SILCOON", "Silcoon"), + ("SPECIES_BEAUTIFLY", "Beautifly"), + ("SPECIES_CASCOON", "Cascoon"), + ("SPECIES_DUSTOX", "Dustox"), + ("SPECIES_LOTAD", "Lotad"), + ("SPECIES_LOMBRE", "Lombre"), + ("SPECIES_LUDICOLO", "Ludicolo"), + ("SPECIES_SEEDOT", "Seedot"), + ("SPECIES_NUZLEAF", "Nuzleaf"), + ("SPECIES_SHIFTRY", "Shiftry"), + ("SPECIES_NINCADA", "Nincada"), + ("SPECIES_NINJASK", "Ninjask"), + ("SPECIES_SHEDINJA", "Shedinja"), + ("SPECIES_TAILLOW", "Taillow"), + ("SPECIES_SWELLOW", "Swellow"), + ("SPECIES_SHROOMISH", "Shroomish"), + ("SPECIES_BRELOOM", "Breloom"), + ("SPECIES_SPINDA", "Spinda"), + ("SPECIES_WINGULL", "Wingull"), + ("SPECIES_PELIPPER", "Pelipper"), + ("SPECIES_SURSKIT", "Surskit"), + ("SPECIES_MASQUERAIN", "Masquerain"), + ("SPECIES_WAILMER", "Wailmer"), + ("SPECIES_WAILORD", "Wailord"), + ("SPECIES_SKITTY", "Skitty"), + ("SPECIES_DELCATTY", "Delcatty"), + ("SPECIES_KECLEON", "Kecleon"), + ("SPECIES_BALTOY", "Baltoy"), + ("SPECIES_CLAYDOL", "Claydol"), + ("SPECIES_NOSEPASS", "Nosepass"), + ("SPECIES_TORKOAL", "Torkoal"), + ("SPECIES_SABLEYE", "Sableye"), + ("SPECIES_BARBOACH", "Barboach"), + ("SPECIES_WHISCASH", "Whiscash"), + ("SPECIES_LUVDISC", "Luvdisc"), + ("SPECIES_CORPHISH", "Corphish"), + ("SPECIES_CRAWDAUNT", "Crawdaunt"), + ("SPECIES_FEEBAS", "Feebas"), + ("SPECIES_MILOTIC", "Milotic"), + ("SPECIES_CARVANHA", "Carvanha"), + ("SPECIES_SHARPEDO", "Sharpedo"), + ("SPECIES_TRAPINCH", "Trapinch"), + ("SPECIES_VIBRAVA", "Vibrava"), + ("SPECIES_FLYGON", "Flygon"), + ("SPECIES_MAKUHITA", "Makuhita"), + ("SPECIES_HARIYAMA", "Hariyama"), + ("SPECIES_ELECTRIKE", "Electrike"), + ("SPECIES_MANECTRIC", "Manectric"), + ("SPECIES_NUMEL", "Numel"), + ("SPECIES_CAMERUPT", "Camerupt"), + ("SPECIES_SPHEAL", "Spheal"), + ("SPECIES_SEALEO", "Sealeo"), + ("SPECIES_WALREIN", "Walrein"), + ("SPECIES_CACNEA", "Cacnea"), + ("SPECIES_CACTURNE", "Cacturne"), + ("SPECIES_SNORUNT", "Snorunt"), + ("SPECIES_GLALIE", "Glalie"), + ("SPECIES_LUNATONE", "Lunatone"), + ("SPECIES_SOLROCK", "Solrock"), + ("SPECIES_AZURILL", "Azurill"), + ("SPECIES_SPOINK", "Spoink"), + ("SPECIES_GRUMPIG", "Grumpig"), + ("SPECIES_PLUSLE", "Plusle"), + ("SPECIES_MINUN", "Minun"), + ("SPECIES_MAWILE", "Mawile"), + ("SPECIES_MEDITITE", "Meditite"), + ("SPECIES_MEDICHAM", "Medicham"), + ("SPECIES_SWABLU", "Swablu"), + ("SPECIES_ALTARIA", "Altaria"), + ("SPECIES_WYNAUT", "Wynaut"), + ("SPECIES_DUSKULL", "Duskull"), + ("SPECIES_DUSCLOPS", "Dusclops"), + ("SPECIES_ROSELIA", "Roselia"), + ("SPECIES_SLAKOTH", "Slakoth"), + ("SPECIES_VIGOROTH", "Vigoroth"), + ("SPECIES_SLAKING", "Slaking"), + ("SPECIES_GULPIN", "Gulpin"), + ("SPECIES_SWALOT", "Swalot"), + ("SPECIES_TROPIUS", "Tropius"), + ("SPECIES_WHISMUR", "Whismur"), + ("SPECIES_LOUDRED", "Loudred"), + ("SPECIES_EXPLOUD", "Exploud"), + ("SPECIES_CLAMPERL", "Clamperl"), + ("SPECIES_HUNTAIL", "Huntail"), + ("SPECIES_GOREBYSS", "Gorebyss"), + ("SPECIES_ABSOL", "Absol"), + ("SPECIES_SHUPPET", "Shuppet"), + ("SPECIES_BANETTE", "Banette"), + ("SPECIES_SEVIPER", "Seviper"), + ("SPECIES_ZANGOOSE", "Zangoose"), + ("SPECIES_RELICANTH", "Relicanth"), + ("SPECIES_ARON", "Aron"), + ("SPECIES_LAIRON", "Lairon"), + ("SPECIES_AGGRON", "Aggron"), + ("SPECIES_CASTFORM", "Castform"), + ("SPECIES_VOLBEAT", "Volbeat"), + ("SPECIES_ILLUMISE", "Illumise"), + ("SPECIES_LILEEP", "Lileep"), + ("SPECIES_CRADILY", "Cradily"), + ("SPECIES_ANORITH", "Anorith"), + ("SPECIES_ARMALDO", "Armaldo"), + ("SPECIES_RALTS", "Ralts"), + ("SPECIES_KIRLIA", "Kirlia"), + ("SPECIES_GARDEVOIR", "Gardevoir"), + ("SPECIES_BAGON", "Bagon"), + ("SPECIES_SHELGON", "Shelgon"), + ("SPECIES_SALAMENCE", "Salamence"), + ("SPECIES_BELDUM", "Beldum"), + ("SPECIES_METANG", "Metang"), + ("SPECIES_METAGROSS", "Metagross"), + ("SPECIES_REGIROCK", "Regirock"), + ("SPECIES_REGICE", "Regice"), + ("SPECIES_REGISTEEL", "Registeel"), + ("SPECIES_KYOGRE", "Kyogre"), + ("SPECIES_GROUDON", "Groudon"), + ("SPECIES_RAYQUAZA", "Rayquaza"), + ("SPECIES_LATIAS", "Latias"), + ("SPECIES_LATIOS", "Latios"), + ("SPECIES_JIRACHI", "Jirachi"), + ("SPECIES_DEOXYS", "Deoxys"), + ("SPECIES_CHIMECHO", "Chimecho") + ] + + species_list: List[SpeciesData] = [] + max_species_id = 0 + for species_name, species_label in all_species: + species_id = data.constants[species_name] + max_species_id = max(species_id, max_species_id) + species_data = extracted_data["species"][species_id] + + learnset = [LearnsetMove(item["level"], item["move_id"]) for item in species_data["learnset"]["moves"]] + + species_list.append(SpeciesData( + species_name, + species_label, + species_id, + BaseStats( + species_data["base_stats"][0], + species_data["base_stats"][1], + species_data["base_stats"][2], + species_data["base_stats"][3], + species_data["base_stats"][4], + species_data["base_stats"][5] + ), + (species_data["types"][0], species_data["types"][1]), + (species_data["abilities"][0], species_data["abilities"][1]), + [EvolutionData( + _str_to_evolution_method(evolution_json["method"]), + evolution_json["param"], + evolution_json["species"], + ) for evolution_json in species_data["evolutions"]], + None, + species_data["catch_rate"], + learnset, + int(species_data["tmhm_learnset"], 16), + species_data["learnset"]["rom_address"], + species_data["rom_address"] + )) + + data.species = [None for i in range(max_species_id + 1)] + + for species_data in species_list: + data.species[species_data.species_id] = species_data + + for species in data.species: + if species is not None: + for evolution in species.evolutions: + data.species[evolution.species_id].pre_evolution = species.species_id + + # Create static encounter data + for static_encounter_json in extracted_data["static_encounters"]: + data.static_encounters.append(StaticEncounterData( + static_encounter_json["species"], + static_encounter_json["rom_address"] + )) + + # TM moves + data.tmhm_moves = extracted_data["tmhm_moves"] + + # Create ability data + data.abilities = [AbilityData(data.constants[ability_data[0]], ability_data[1]) for ability_data in [ + ("ABILITY_STENCH", "Stench"), + ("ABILITY_DRIZZLE", "Drizzle"), + ("ABILITY_SPEED_BOOST", "Speed Boost"), + ("ABILITY_BATTLE_ARMOR", "Battle Armor"), + ("ABILITY_STURDY", "Sturdy"), + ("ABILITY_DAMP", "Damp"), + ("ABILITY_LIMBER", "Limber"), + ("ABILITY_SAND_VEIL", "Sand Veil"), + ("ABILITY_STATIC", "Static"), + ("ABILITY_VOLT_ABSORB", "Volt Absorb"), + ("ABILITY_WATER_ABSORB", "Water Absorb"), + ("ABILITY_OBLIVIOUS", "Oblivious"), + ("ABILITY_CLOUD_NINE", "Cloud Nine"), + ("ABILITY_COMPOUND_EYES", "Compound Eyes"), + ("ABILITY_INSOMNIA", "Insomnia"), + ("ABILITY_COLOR_CHANGE", "Color Change"), + ("ABILITY_IMMUNITY", "Immunity"), + ("ABILITY_FLASH_FIRE", "Flash Fire"), + ("ABILITY_SHIELD_DUST", "Shield Dust"), + ("ABILITY_OWN_TEMPO", "Own Tempo"), + ("ABILITY_SUCTION_CUPS", "Suction Cups"), + ("ABILITY_INTIMIDATE", "Intimidate"), + ("ABILITY_SHADOW_TAG", "Shadow Tag"), + ("ABILITY_ROUGH_SKIN", "Rough Skin"), + ("ABILITY_WONDER_GUARD", "Wonder Guard"), + ("ABILITY_LEVITATE", "Levitate"), + ("ABILITY_EFFECT_SPORE", "Effect Spore"), + ("ABILITY_SYNCHRONIZE", "Synchronize"), + ("ABILITY_CLEAR_BODY", "Clear Body"), + ("ABILITY_NATURAL_CURE", "Natural Cure"), + ("ABILITY_LIGHTNING_ROD", "Lightning Rod"), + ("ABILITY_SERENE_GRACE", "Serene Grace"), + ("ABILITY_SWIFT_SWIM", "Swift Swim"), + ("ABILITY_CHLOROPHYLL", "Chlorophyll"), + ("ABILITY_ILLUMINATE", "Illuminate"), + ("ABILITY_TRACE", "Trace"), + ("ABILITY_HUGE_POWER", "Huge Power"), + ("ABILITY_POISON_POINT", "Poison Point"), + ("ABILITY_INNER_FOCUS", "Inner Focus"), + ("ABILITY_MAGMA_ARMOR", "Magma Armor"), + ("ABILITY_WATER_VEIL", "Water Veil"), + ("ABILITY_MAGNET_PULL", "Magnet Pull"), + ("ABILITY_SOUNDPROOF", "Soundproof"), + ("ABILITY_RAIN_DISH", "Rain Dish"), + ("ABILITY_SAND_STREAM", "Sand Stream"), + ("ABILITY_PRESSURE", "Pressure"), + ("ABILITY_THICK_FAT", "Thick Fat"), + ("ABILITY_EARLY_BIRD", "Early Bird"), + ("ABILITY_FLAME_BODY", "Flame Body"), + ("ABILITY_RUN_AWAY", "Run Away"), + ("ABILITY_KEEN_EYE", "Keen Eye"), + ("ABILITY_HYPER_CUTTER", "Hyper Cutter"), + ("ABILITY_PICKUP", "Pickup"), + ("ABILITY_TRUANT", "Truant"), + ("ABILITY_HUSTLE", "Hustle"), + ("ABILITY_CUTE_CHARM", "Cute Charm"), + ("ABILITY_PLUS", "Plus"), + ("ABILITY_MINUS", "Minus"), + ("ABILITY_FORECAST", "Forecast"), + ("ABILITY_STICKY_HOLD", "Sticky Hold"), + ("ABILITY_SHED_SKIN", "Shed Skin"), + ("ABILITY_GUTS", "Guts"), + ("ABILITY_MARVEL_SCALE", "Marvel Scale"), + ("ABILITY_LIQUID_OOZE", "Liquid Ooze"), + ("ABILITY_OVERGROW", "Overgrow"), + ("ABILITY_BLAZE", "Blaze"), + ("ABILITY_TORRENT", "Torrent"), + ("ABILITY_SWARM", "Swarm"), + ("ABILITY_ROCK_HEAD", "Rock Head"), + ("ABILITY_DROUGHT", "Drought"), + ("ABILITY_ARENA_TRAP", "Arena Trap"), + ("ABILITY_VITAL_SPIRIT", "Vital Spirit"), + ("ABILITY_WHITE_SMOKE", "White Smoke"), + ("ABILITY_PURE_POWER", "Pure Power"), + ("ABILITY_SHELL_ARMOR", "Shell Armor"), + ("ABILITY_CACOPHONY", "Cacophony"), + ("ABILITY_AIR_LOCK", "Air Lock") + ]] + + # Create map data + for map_name, map_json in extracted_data["maps"].items(): + land_encounters = None + water_encounters = None + fishing_encounters = None + + if map_json["land_encounters"] is not None: + land_encounters = EncounterTableData( + map_json["land_encounters"]["encounter_slots"], + map_json["land_encounters"]["rom_address"] + ) + if map_json["water_encounters"] is not None: + water_encounters = EncounterTableData( + map_json["water_encounters"]["encounter_slots"], + map_json["water_encounters"]["rom_address"] + ) + if map_json["fishing_encounters"] is not None: + fishing_encounters = EncounterTableData( + map_json["fishing_encounters"]["encounter_slots"], + map_json["fishing_encounters"]["rom_address"] + ) + + data.maps.append(MapData( + map_name, + land_encounters, + water_encounters, + fishing_encounters + )) + + data.maps.sort(key=lambda map: map.name) + + # Create warp map + for warp, destination in extracted_data["warps"].items(): + data.warp_map[warp] = None if destination == "" else destination + + if encoded_warp not in data.warp_map: + data.warp_map[encoded_warp] = None + + # Create trainer data + for i, trainer_json in enumerate(extracted_data["trainers"]): + party_json = trainer_json["party"] + pokemon_data_type = _str_to_pokemon_data_type(trainer_json["pokemon_data_type"]) + data.trainers.append(TrainerData( + i, + TrainerPartyData( + [TrainerPokemonData( + p["species"], + p["level"], + (p["moves"][0], p["moves"][1], p["moves"][2], p["moves"][3]) + ) for p in party_json], + pokemon_data_type, + trainer_json["party_rom_address"] + ), + trainer_json["rom_address"], + trainer_json["battle_script_rom_address"] + )) + + +_init() diff --git a/worlds/pokemon_emerald/data/README.md b/worlds/pokemon_emerald/data/README.md new file mode 100644 index 000000000000..a7c5d3f2932d --- /dev/null +++ b/worlds/pokemon_emerald/data/README.md @@ -0,0 +1,99 @@ +## `regions/` + +These define regions, connections, and where locations are. If you know what you're doing, it should be pretty clear how +this works by taking a quick look through the files. The rest of this section is pretty verbose to cover everything. Not +to say you shouldn't read it, but the tl;dr is: + +- Every map, even trivial ones, gets a region definition, and they cannot be coalesced (because of warp rando) +- Stick to the naming convention for regions and events (look at Route 103 and Petalburg City for guidance) +- Locations and warps can only be claimed by one region +- Events are declared here + +A `Map`, which you will see referenced in `parent_map` attribute in the region JSON, is an id from the source code. +`Map`s are sets of tiles, encounters, warps, events, and so on. Route 103, Littleroot Town, the Oldale Town Mart, the +second floor of Devon Corp, and each level of Victory Road are all examples of `Map`s. You transition between `Map`s by +stepping on a warp (warp pads, doorways, etc...) or walking over a border between `Map`s in the overworld. Some warps +don't go to a different `Map`. + +Regions usually describe physical areas which are subsets of a `Map`. Every `Map` must have one or more defined regions. +A region should not contain area from more than one `Map`. We'll need to draw those lines now even when there is no +logical boundary (like between two the first and second floors of your rival's house), for warp rando. + +Most `Map`s have been split into multiple regions. In the example below, `MAP_ROUTE103` was split into +`REGION_ROUTE_103/WEST`, `REGION_ROUTE_103/WATER`, and `REGION_ROUTE_103/EAST` (this document may be out of date; the +example is demonstrative). Keeping the name consistent with the `Map` name and adding a label suffix for the subarea +makes it clearer where we are in the world and where within a `Map` we're describing. + +Every region (except `Menu`) is configured here. All files in this directory are combined with each other at runtime, +and are only split and ordered for organization. Regions defined in `data/regions/unused` are entirely unused because +they're not yet reachable in the randomizer. They're there for future reference in case we want to pull those maps in +later. Any locations or warps in here should be ignored. Data for a single region looks like this: + +```json +"REGION_ROUTE103/EAST": { + "parent_map": "MAP_ROUTE103", + "locations": [ + "ITEM_ROUTE_103_GUARD_SPEC", + "ITEM_ROUTE_103_PP_UP" + ], + "events": [], + "exits": [ + "REGION_ROUTE103/WATER", + "REGION_ROUTE110/MAIN" + ], + "warps": [ + "MAP_ROUTE103:0/MAP_ALTERING_CAVE:0" + ] +} +``` + +- `[key]`: The name of the object, in this case `REGION_ROUTE103/EAST`, should be the value of `parent_map` where the +`MAP` prefix is replaced with `REGION`. Then there should be a following `/` and a label describing this specific region +within the `Map`. This is not enforced or required by the code, but it makes things much more clear. +- `parent_map`: The name of the `Map` this region exists under. It can relate this region to information like encounter +tables. +- `locations`: Locations contained within this region. This can be anything from an item on the ground to a badge to a +gift from an NPC. Locations themselves are defined in `data/extracted_data.json`, and the names used here should come +directly from it. +- `events`: Events that can be completed in this region. Defeating a gym leader or Aqua/Magma team leader, for example, +can trigger story progression and unblock roads and buildings. Events are defined here and nowhere else, and access +rules are set in `rules.py`. +- `exits`: Names of regions that can be directly accessed from this one. Most often regions within the same `Map`, +neighboring maps in the overworld, or transitions from using HM08 Dive. Most connections between maps/regions come from +warps. Any region in this list should be defined somewhere in `data/regions`. +- `warps`: Warp events contained within this region. Warps are defined in `data/extracted_data.json`, and must exist +there to be referenced here. More on warps in [../README.md](../README.md). + +Think of this data as defining which regions are "claiming" a given location, event, or warp. No more than one region +may claim ownership of a location. Even if some "thing" may happen in two different regions and set the same flag, they +should be defined as two different events and anything conditional on said "thing" happening can check whether either of +the two events is accessible. (e.g. Interacting with the Poke Ball in your rival's room and going back downstairs will +both trigger a conversation with them which enables you to rescue Professor Birch. It's the same "thing" on two +different `Map`s.) + +Conceptually, you shouldn't have to "add" any new regions. You should only have to "split" existing regions. When you +split a region, make sure to correctly reassign `locations`, `events`, `exits`, and `warps` according to which new +region they now exist in. Make sure to define new `exits` to link the new regions to each other if applicable. And +especially remember to rename incoming `exits` defined in other regions which are still pointing to the pre-split +region. `sanity_check.py` should catch you if there are other regions that point to a region that no longer exists, but +if one of your newly-split regions still has the same name as the original, it won't be detected and you may find that +things aren't connected correctly. + +## `extracted_data.json` + +DO NOT TOUCH + +Contains data automatically pulled from the base rom and its source code when it is built. There should be no reason to +manually modify it. Data from this file is piped through `data.py` to create a data object that's more useful and +complete. + +## `items.json` + +A map from items as defined in the `constants` in `extracted_data.json` to useful info like a human-friendly label, the +type of progression it enables, and tags to associate. There are many unused items and extra helper constants in +`extracted_data.json`, so this file contains an exhaustive list of items which can actually be found in the modded game. + +## `locations.json` + +Similar to `items.json`, this associates locations with human-friendly labels and tags that are used for filtering. Any +locations claimed by any region need an entry here. diff --git a/worlds/pokemon_emerald/data/base_patch.bsdiff4 b/worlds/pokemon_emerald/data/base_patch.bsdiff4 new file mode 100644 index 000000000000..c1843904a9ca Binary files /dev/null and b/worlds/pokemon_emerald/data/base_patch.bsdiff4 differ diff --git a/worlds/pokemon_emerald/data/extracted_data.json b/worlds/pokemon_emerald/data/extracted_data.json new file mode 100644 index 000000000000..6174cd4885ee --- /dev/null +++ b/worlds/pokemon_emerald/data/extracted_data.json @@ -0,0 +1 @@ +{"_comment":"DO NOT MODIFY. This file was auto-generated. Your changes will likely be overwritten.","_rom_name":"pokemon emerald version / AP 2","constants":{"ABILITIES_COUNT":78,"ABILITY_AIR_LOCK":77,"ABILITY_ARENA_TRAP":71,"ABILITY_BATTLE_ARMOR":4,"ABILITY_BLAZE":66,"ABILITY_CACOPHONY":76,"ABILITY_CHLOROPHYLL":34,"ABILITY_CLEAR_BODY":29,"ABILITY_CLOUD_NINE":13,"ABILITY_COLOR_CHANGE":16,"ABILITY_COMPOUND_EYES":14,"ABILITY_CUTE_CHARM":56,"ABILITY_DAMP":6,"ABILITY_DRIZZLE":2,"ABILITY_DROUGHT":70,"ABILITY_EARLY_BIRD":48,"ABILITY_EFFECT_SPORE":27,"ABILITY_FLAME_BODY":49,"ABILITY_FLASH_FIRE":18,"ABILITY_FORECAST":59,"ABILITY_GUTS":62,"ABILITY_HUGE_POWER":37,"ABILITY_HUSTLE":55,"ABILITY_HYPER_CUTTER":52,"ABILITY_ILLUMINATE":35,"ABILITY_IMMUNITY":17,"ABILITY_INNER_FOCUS":39,"ABILITY_INSOMNIA":15,"ABILITY_INTIMIDATE":22,"ABILITY_KEEN_EYE":51,"ABILITY_LEVITATE":26,"ABILITY_LIGHTNING_ROD":31,"ABILITY_LIMBER":7,"ABILITY_LIQUID_OOZE":64,"ABILITY_MAGMA_ARMOR":40,"ABILITY_MAGNET_PULL":42,"ABILITY_MARVEL_SCALE":63,"ABILITY_MINUS":58,"ABILITY_NATURAL_CURE":30,"ABILITY_NONE":0,"ABILITY_OBLIVIOUS":12,"ABILITY_OVERGROW":65,"ABILITY_OWN_TEMPO":20,"ABILITY_PICKUP":53,"ABILITY_PLUS":57,"ABILITY_POISON_POINT":38,"ABILITY_PRESSURE":46,"ABILITY_PURE_POWER":74,"ABILITY_RAIN_DISH":44,"ABILITY_ROCK_HEAD":69,"ABILITY_ROUGH_SKIN":24,"ABILITY_RUN_AWAY":50,"ABILITY_SAND_STREAM":45,"ABILITY_SAND_VEIL":8,"ABILITY_SERENE_GRACE":32,"ABILITY_SHADOW_TAG":23,"ABILITY_SHED_SKIN":61,"ABILITY_SHELL_ARMOR":75,"ABILITY_SHIELD_DUST":19,"ABILITY_SOUNDPROOF":43,"ABILITY_SPEED_BOOST":3,"ABILITY_STATIC":9,"ABILITY_STENCH":1,"ABILITY_STICKY_HOLD":60,"ABILITY_STURDY":5,"ABILITY_SUCTION_CUPS":21,"ABILITY_SWARM":68,"ABILITY_SWIFT_SWIM":33,"ABILITY_SYNCHRONIZE":28,"ABILITY_THICK_FAT":47,"ABILITY_TORRENT":67,"ABILITY_TRACE":36,"ABILITY_TRUANT":54,"ABILITY_VITAL_SPIRIT":72,"ABILITY_VOLT_ABSORB":10,"ABILITY_WATER_ABSORB":11,"ABILITY_WATER_VEIL":41,"ABILITY_WHITE_SMOKE":73,"ABILITY_WONDER_GUARD":25,"ACRO_BIKE":1,"BAG_ITEM_CAPACITY_DIGITS":2,"BERRY_CAPACITY_DIGITS":3,"DAILY_FLAGS_END":2399,"DAILY_FLAGS_START":2336,"FIRST_BALL":1,"FIRST_BERRY_INDEX":133,"FIRST_BERRY_MASTER_BERRY":153,"FIRST_BERRY_MASTER_WIFE_BERRY":133,"FIRST_KIRI_BERRY":153,"FIRST_MAIL_INDEX":121,"FIRST_ROUTE_114_MAN_BERRY":148,"FLAGS_COUNT":2400,"FLAG_ADDED_MATCH_CALL_TO_POKENAV":304,"FLAG_ADVENTURE_STARTED":116,"FLAG_ARRIVED_AT_MARINE_CAVE_EMERGE_SPOT":2265,"FLAG_ARRIVED_AT_NAVEL_ROCK":2273,"FLAG_ARRIVED_AT_TERRA_CAVE_ENTRANCE":2266,"FLAG_ARRIVED_ON_FARAWAY_ISLAND":2264,"FLAG_BADGE01_GET":2151,"FLAG_BADGE02_GET":2152,"FLAG_BADGE03_GET":2153,"FLAG_BADGE04_GET":2154,"FLAG_BADGE05_GET":2155,"FLAG_BADGE06_GET":2156,"FLAG_BADGE07_GET":2157,"FLAG_BADGE08_GET":2158,"FLAG_BATTLED_DEOXYS":429,"FLAG_BATTLE_FRONTIER_TRADE_DONE":156,"FLAG_BEAT_MAGMA_GRUNT_JAGGED_PASS":313,"FLAG_BEAUTY_PAINTING_MADE":161,"FLAG_BETTER_SHOPS_ENABLED":483,"FLAG_BIRCH_AIDE_MET":88,"FLAG_CANCEL_BATTLE_ROOM_CHALLENGE":119,"FLAG_CAUGHT_HO_OH":146,"FLAG_CAUGHT_LATIAS_OR_LATIOS":457,"FLAG_CAUGHT_LUGIA":145,"FLAG_CAUGHT_MEW":458,"FLAG_CHOSEN_MULTI_BATTLE_NPC_PARTNER":338,"FLAG_CHOSE_CLAW_FOSSIL":336,"FLAG_CHOSE_ROOT_FOSSIL":335,"FLAG_COLLECTED_ALL_GOLD_SYMBOLS":466,"FLAG_COLLECTED_ALL_SILVER_SYMBOLS":92,"FLAG_CONTEST_SKETCH_CREATED":270,"FLAG_COOL_PAINTING_MADE":160,"FLAG_CUTE_PAINTING_MADE":162,"FLAG_DAILY_APPRENTICE_LEAVES":2356,"FLAG_DAILY_BERRY_MASTERS_WIFE":2353,"FLAG_DAILY_BERRY_MASTER_RECEIVED_BERRY":2349,"FLAG_DAILY_CONTEST_LOBBY_RECEIVED_BERRY":2337,"FLAG_DAILY_FLOWER_SHOP_RECEIVED_BERRY":2352,"FLAG_DAILY_LILYCOVE_RECEIVED_BERRY":2351,"FLAG_DAILY_PICKED_LOTO_TICKET":2346,"FLAG_DAILY_ROUTE_111_RECEIVED_BERRY":2348,"FLAG_DAILY_ROUTE_114_RECEIVED_BERRY":2347,"FLAG_DAILY_ROUTE_120_RECEIVED_BERRY":2350,"FLAG_DAILY_SECRET_BASE":2338,"FLAG_DAILY_SOOTOPOLIS_RECEIVED_BERRY":2354,"FLAG_DECLINED_BIKE":89,"FLAG_DECLINED_RIVAL_BATTLE_LILYCOVE":286,"FLAG_DECLINED_WALLY_BATTLE_MAUVILLE":284,"FLAG_DECORATION_1":174,"FLAG_DECORATION_10":183,"FLAG_DECORATION_11":184,"FLAG_DECORATION_12":185,"FLAG_DECORATION_13":186,"FLAG_DECORATION_14":187,"FLAG_DECORATION_2":175,"FLAG_DECORATION_3":176,"FLAG_DECORATION_4":177,"FLAG_DECORATION_5":178,"FLAG_DECORATION_6":179,"FLAG_DECORATION_7":180,"FLAG_DECORATION_8":181,"FLAG_DECORATION_9":182,"FLAG_DEFEATED_DEOXYS":428,"FLAG_DEFEATED_DEWFORD_GYM":1265,"FLAG_DEFEATED_ELECTRODE_1_AQUA_HIDEOUT":452,"FLAG_DEFEATED_ELECTRODE_2_AQUA_HIDEOUT":453,"FLAG_DEFEATED_ELITE_4_DRAKE":1278,"FLAG_DEFEATED_ELITE_4_GLACIA":1277,"FLAG_DEFEATED_ELITE_4_PHOEBE":1276,"FLAG_DEFEATED_ELITE_4_SIDNEY":1275,"FLAG_DEFEATED_EVIL_TEAM_MT_CHIMNEY":139,"FLAG_DEFEATED_FORTREE_GYM":1269,"FLAG_DEFEATED_GROUDON":447,"FLAG_DEFEATED_GRUNT_SPACE_CENTER_1F":191,"FLAG_DEFEATED_HO_OH":476,"FLAG_DEFEATED_KYOGRE":446,"FLAG_DEFEATED_LATIAS_OR_LATIOS":456,"FLAG_DEFEATED_LAVARIDGE_GYM":1267,"FLAG_DEFEATED_LUGIA":477,"FLAG_DEFEATED_MAGMA_SPACE_CENTER":117,"FLAG_DEFEATED_MAUVILLE_GYM":1266,"FLAG_DEFEATED_METEOR_FALLS_STEVEN":1272,"FLAG_DEFEATED_MEW":455,"FLAG_DEFEATED_MOSSDEEP_GYM":1270,"FLAG_DEFEATED_PETALBURG_GYM":1268,"FLAG_DEFEATED_RAYQUAZA":448,"FLAG_DEFEATED_REGICE":444,"FLAG_DEFEATED_REGIROCK":443,"FLAG_DEFEATED_REGISTEEL":445,"FLAG_DEFEATED_RIVAL_ROUTE103":130,"FLAG_DEFEATED_RIVAL_ROUTE_104":125,"FLAG_DEFEATED_RIVAL_RUSTBORO":211,"FLAG_DEFEATED_RUSTBORO_GYM":1264,"FLAG_DEFEATED_SEASHORE_HOUSE":141,"FLAG_DEFEATED_SOOTOPOLIS_GYM":1271,"FLAG_DEFEATED_SS_TIDAL_TRAINERS":247,"FLAG_DEFEATED_SUDOWOODO":454,"FLAG_DEFEATED_VOLTORB_1_NEW_MAUVILLE":449,"FLAG_DEFEATED_VOLTORB_2_NEW_MAUVILLE":450,"FLAG_DEFEATED_VOLTORB_3_NEW_MAUVILLE":451,"FLAG_DEFEATED_WALLY_MAUVILLE":190,"FLAG_DEFEATED_WALLY_VICTORY_ROAD":126,"FLAG_DELIVERED_DEVON_GOODS":149,"FLAG_DELIVERED_STEVEN_LETTER":189,"FLAG_DEOXYS_ROCK_COMPLETE":2260,"FLAG_DEVON_GOODS_STOLEN":142,"FLAG_DOCK_REJECTED_DEVON_GOODS":148,"FLAG_DONT_TRANSITION_MUSIC":16385,"FLAG_DUMMY_LATIAS":33,"FLAG_DUMMY_LATIOS":32,"FLAG_ENABLE_BRAWLY_MATCH_CALL":468,"FLAG_ENABLE_FIRST_WALLY_POKENAV_CALL":136,"FLAG_ENABLE_FLANNERY_MATCH_CALL":470,"FLAG_ENABLE_JUAN_MATCH_CALL":473,"FLAG_ENABLE_MOM_MATCH_CALL":216,"FLAG_ENABLE_MR_STONE_POKENAV":344,"FLAG_ENABLE_MULTI_CORRIDOR_DOOR":16386,"FLAG_ENABLE_NORMAN_MATCH_CALL":306,"FLAG_ENABLE_PROF_BIRCH_MATCH_CALL":281,"FLAG_ENABLE_RIVAL_MATCH_CALL":253,"FLAG_ENABLE_ROXANNE_FIRST_CALL":128,"FLAG_ENABLE_ROXANNE_MATCH_CALL":467,"FLAG_ENABLE_SCOTT_MATCH_CALL":215,"FLAG_ENABLE_SHIP_BIRTH_ISLAND":2261,"FLAG_ENABLE_SHIP_FARAWAY_ISLAND":2262,"FLAG_ENABLE_SHIP_NAVEL_ROCK":2272,"FLAG_ENABLE_SHIP_SOUTHERN_ISLAND":2227,"FLAG_ENABLE_TATE_AND_LIZA_MATCH_CALL":472,"FLAG_ENABLE_WALLY_MATCH_CALL":214,"FLAG_ENABLE_WATTSON_MATCH_CALL":469,"FLAG_ENABLE_WINONA_MATCH_CALL":471,"FLAG_ENCOUNTERED_LATIAS_OR_LATIOS":206,"FLAG_ENTERED_CONTEST":341,"FLAG_ENTERED_ELITE_FOUR":263,"FLAG_ENTERED_MIRAGE_TOWER":2268,"FLAG_EVIL_LEADER_PLEASE_STOP":219,"FLAG_EVIL_TEAM_ESCAPED_STERN_SPOKE":271,"FLAG_EXCHANGED_SCANNER":294,"FLAG_FAN_CLUB_STRENGTH_SHARED":210,"FLAG_FORCE_MIRAGE_TOWER_VISIBLE":157,"FLAG_FORTREE_NPC_TRADE_COMPLETED":155,"FLAG_GOOD_LUCK_SAFARI_ZONE":93,"FLAG_GOT_BASEMENT_KEY_FROM_WATTSON":208,"FLAG_GOT_TM24_FROM_WATTSON":209,"FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT":111,"FLAG_HAS_MATCH_CALL":303,"FLAG_HIDDEN_ITEMS_START":500,"FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY":531,"FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY":532,"FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY":533,"FLAG_HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY":534,"FLAG_HIDDEN_ITEM_ARTISAN_CAVE_B1F_CALCIUM":601,"FLAG_HIDDEN_ITEM_ARTISAN_CAVE_B1F_IRON":604,"FLAG_HIDDEN_ITEM_ARTISAN_CAVE_B1F_PROTEIN":603,"FLAG_HIDDEN_ITEM_ARTISAN_CAVE_B1F_ZINC":602,"FLAG_HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET":528,"FLAG_HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_1":548,"FLAG_HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_2":549,"FLAG_HIDDEN_ITEM_JAGGED_PASS_FULL_HEAL":577,"FLAG_HIDDEN_ITEM_JAGGED_PASS_GREAT_BALL":576,"FLAG_HIDDEN_ITEM_LAVARIDGE_TOWN_ICE_HEAL":500,"FLAG_HIDDEN_ITEM_LILYCOVE_CITY_HEART_SCALE":527,"FLAG_HIDDEN_ITEM_LILYCOVE_CITY_POKE_BALL":575,"FLAG_HIDDEN_ITEM_LILYCOVE_CITY_PP_UP":543,"FLAG_HIDDEN_ITEM_MT_PYRE_EXTERIOR_MAX_ETHER":578,"FLAG_HIDDEN_ITEM_MT_PYRE_EXTERIOR_ULTRA_BALL":529,"FLAG_HIDDEN_ITEM_MT_PYRE_SUMMIT_RARE_CANDY":580,"FLAG_HIDDEN_ITEM_MT_PYRE_SUMMIT_ZINC":579,"FLAG_HIDDEN_ITEM_NAVEL_ROCK_TOP_SACRED_ASH":609,"FLAG_HIDDEN_ITEM_PETALBURG_CITY_RARE_CANDY":595,"FLAG_HIDDEN_ITEM_PETALBURG_WOODS_POKE_BALL":561,"FLAG_HIDDEN_ITEM_PETALBURG_WOODS_POTION":558,"FLAG_HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_1":559,"FLAG_HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_2":560,"FLAG_HIDDEN_ITEM_ROUTE_104_ANTIDOTE":585,"FLAG_HIDDEN_ITEM_ROUTE_104_HEART_SCALE":588,"FLAG_HIDDEN_ITEM_ROUTE_104_POKE_BALL":562,"FLAG_HIDDEN_ITEM_ROUTE_104_POTION":537,"FLAG_HIDDEN_ITEM_ROUTE_104_SUPER_POTION":544,"FLAG_HIDDEN_ITEM_ROUTE_105_BIG_PEARL":611,"FLAG_HIDDEN_ITEM_ROUTE_105_HEART_SCALE":589,"FLAG_HIDDEN_ITEM_ROUTE_106_HEART_SCALE":547,"FLAG_HIDDEN_ITEM_ROUTE_106_POKE_BALL":563,"FLAG_HIDDEN_ITEM_ROUTE_106_STARDUST":546,"FLAG_HIDDEN_ITEM_ROUTE_108_RARE_CANDY":586,"FLAG_HIDDEN_ITEM_ROUTE_109_ETHER":564,"FLAG_HIDDEN_ITEM_ROUTE_109_GREAT_BALL":551,"FLAG_HIDDEN_ITEM_ROUTE_109_HEART_SCALE_1":552,"FLAG_HIDDEN_ITEM_ROUTE_109_HEART_SCALE_2":590,"FLAG_HIDDEN_ITEM_ROUTE_109_HEART_SCALE_3":591,"FLAG_HIDDEN_ITEM_ROUTE_109_REVIVE":550,"FLAG_HIDDEN_ITEM_ROUTE_110_FULL_HEAL":555,"FLAG_HIDDEN_ITEM_ROUTE_110_GREAT_BALL":553,"FLAG_HIDDEN_ITEM_ROUTE_110_POKE_BALL":565,"FLAG_HIDDEN_ITEM_ROUTE_110_REVIVE":554,"FLAG_HIDDEN_ITEM_ROUTE_111_PROTEIN":556,"FLAG_HIDDEN_ITEM_ROUTE_111_RARE_CANDY":557,"FLAG_HIDDEN_ITEM_ROUTE_111_STARDUST":502,"FLAG_HIDDEN_ITEM_ROUTE_113_ETHER":503,"FLAG_HIDDEN_ITEM_ROUTE_113_NUGGET":598,"FLAG_HIDDEN_ITEM_ROUTE_113_TM32":530,"FLAG_HIDDEN_ITEM_ROUTE_114_CARBOS":504,"FLAG_HIDDEN_ITEM_ROUTE_114_REVIVE":542,"FLAG_HIDDEN_ITEM_ROUTE_115_HEART_SCALE":597,"FLAG_HIDDEN_ITEM_ROUTE_116_BLACK_GLASSES":596,"FLAG_HIDDEN_ITEM_ROUTE_116_SUPER_POTION":545,"FLAG_HIDDEN_ITEM_ROUTE_117_REPEL":572,"FLAG_HIDDEN_ITEM_ROUTE_118_HEART_SCALE":566,"FLAG_HIDDEN_ITEM_ROUTE_118_IRON":567,"FLAG_HIDDEN_ITEM_ROUTE_119_CALCIUM":505,"FLAG_HIDDEN_ITEM_ROUTE_119_FULL_HEAL":568,"FLAG_HIDDEN_ITEM_ROUTE_119_MAX_ETHER":587,"FLAG_HIDDEN_ITEM_ROUTE_119_ULTRA_BALL":506,"FLAG_HIDDEN_ITEM_ROUTE_120_RARE_CANDY_1":571,"FLAG_HIDDEN_ITEM_ROUTE_120_RARE_CANDY_2":569,"FLAG_HIDDEN_ITEM_ROUTE_120_REVIVE":584,"FLAG_HIDDEN_ITEM_ROUTE_120_ZINC":570,"FLAG_HIDDEN_ITEM_ROUTE_121_FULL_HEAL":573,"FLAG_HIDDEN_ITEM_ROUTE_121_HP_UP":539,"FLAG_HIDDEN_ITEM_ROUTE_121_MAX_REVIVE":600,"FLAG_HIDDEN_ITEM_ROUTE_121_NUGGET":540,"FLAG_HIDDEN_ITEM_ROUTE_123_HYPER_POTION":574,"FLAG_HIDDEN_ITEM_ROUTE_123_PP_UP":599,"FLAG_HIDDEN_ITEM_ROUTE_123_RARE_CANDY":610,"FLAG_HIDDEN_ITEM_ROUTE_123_REVIVE":541,"FLAG_HIDDEN_ITEM_ROUTE_123_SUPER_REPEL":507,"FLAG_HIDDEN_ITEM_ROUTE_128_HEART_SCALE_1":592,"FLAG_HIDDEN_ITEM_ROUTE_128_HEART_SCALE_2":593,"FLAG_HIDDEN_ITEM_ROUTE_128_HEART_SCALE_3":594,"FLAG_HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_RARE_CANDY":606,"FLAG_HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_ZINC":607,"FLAG_HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_FULL_RESTORE":605,"FLAG_HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_PP_UP":608,"FLAG_HIDDEN_ITEM_SS_TIDAL_LOWER_DECK_LEFTOVERS":535,"FLAG_HIDDEN_ITEM_TRICK_HOUSE_NUGGET":501,"FLAG_HIDDEN_ITEM_UNDERWATER_124_BIG_PEARL":511,"FLAG_HIDDEN_ITEM_UNDERWATER_124_CALCIUM":536,"FLAG_HIDDEN_ITEM_UNDERWATER_124_CARBOS":508,"FLAG_HIDDEN_ITEM_UNDERWATER_124_GREEN_SHARD":509,"FLAG_HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_1":513,"FLAG_HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_2":538,"FLAG_HIDDEN_ITEM_UNDERWATER_124_PEARL":510,"FLAG_HIDDEN_ITEM_UNDERWATER_126_BIG_PEARL":520,"FLAG_HIDDEN_ITEM_UNDERWATER_126_BLUE_SHARD":512,"FLAG_HIDDEN_ITEM_UNDERWATER_126_HEART_SCALE":514,"FLAG_HIDDEN_ITEM_UNDERWATER_126_IRON":519,"FLAG_HIDDEN_ITEM_UNDERWATER_126_PEARL":517,"FLAG_HIDDEN_ITEM_UNDERWATER_126_STARDUST":516,"FLAG_HIDDEN_ITEM_UNDERWATER_126_ULTRA_BALL":515,"FLAG_HIDDEN_ITEM_UNDERWATER_126_YELLOW_SHARD":518,"FLAG_HIDDEN_ITEM_UNDERWATER_127_HEART_SCALE":523,"FLAG_HIDDEN_ITEM_UNDERWATER_127_HP_UP":522,"FLAG_HIDDEN_ITEM_UNDERWATER_127_RED_SHARD":524,"FLAG_HIDDEN_ITEM_UNDERWATER_127_STAR_PIECE":521,"FLAG_HIDDEN_ITEM_UNDERWATER_128_PEARL":526,"FLAG_HIDDEN_ITEM_UNDERWATER_128_PROTEIN":525,"FLAG_HIDDEN_ITEM_VICTORY_ROAD_1F_ULTRA_BALL":581,"FLAG_HIDDEN_ITEM_VICTORY_ROAD_B2F_ELIXIR":582,"FLAG_HIDDEN_ITEM_VICTORY_ROAD_B2F_MAX_REPEL":583,"FLAG_HIDE_APPRENTICE":701,"FLAG_HIDE_AQUA_HIDEOUT_1F_GRUNTS_BLOCKING_ENTRANCE":821,"FLAG_HIDE_AQUA_HIDEOUT_B1F_ELECTRODE_1":977,"FLAG_HIDE_AQUA_HIDEOUT_B1F_ELECTRODE_2":978,"FLAG_HIDE_AQUA_HIDEOUT_B2F_SUBMARINE_SHADOW":943,"FLAG_HIDE_AQUA_HIDEOUT_GRUNTS":924,"FLAG_HIDE_BATTLE_FRONTIER_RECEPTION_GATE_SCOTT":836,"FLAG_HIDE_BATTLE_FRONTIER_SUDOWOODO":842,"FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_1":711,"FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_2":712,"FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_3":713,"FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_4":714,"FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_5":715,"FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_6":716,"FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_ALT_1":864,"FLAG_HIDE_BATTLE_TOWER_MULTI_BATTLE_PARTNER_ALT_2":865,"FLAG_HIDE_BATTLE_TOWER_OPPONENT":888,"FLAG_HIDE_BATTLE_TOWER_REPORTER":918,"FLAG_HIDE_BIRTH_ISLAND_DEOXYS_TRIANGLE":764,"FLAG_HIDE_BRINEYS_HOUSE_MR_BRINEY":739,"FLAG_HIDE_BRINEYS_HOUSE_PEEKO":881,"FLAG_HIDE_CAVE_OF_ORIGIN_B1F_WALLACE":820,"FLAG_HIDE_CHAMPIONS_ROOM_BIRCH":921,"FLAG_HIDE_CHAMPIONS_ROOM_RIVAL":920,"FLAG_HIDE_CONTEST_POKE_BALL":86,"FLAG_HIDE_DEOXYS":763,"FLAG_HIDE_DESERT_UNDERPASS_FOSSIL":874,"FLAG_HIDE_DEWFORD_HALL_SLUDGE_BOMB_MAN":940,"FLAG_HIDE_EVER_GRANDE_POKEMON_CENTER_1F_SCOTT":793,"FLAG_HIDE_FALLARBOR_AZURILL":907,"FLAG_HIDE_FALLARBOR_HOUSE_PROF_COZMO":928,"FLAG_HIDE_FALLARBOR_TOWN_BATTLE_TENT_SCOTT":767,"FLAG_HIDE_FALLORBOR_POKEMON_CENTER_LANETTE":871,"FLAG_HIDE_FANCLUB_BOY":790,"FLAG_HIDE_FANCLUB_LADY":792,"FLAG_HIDE_FANCLUB_LITTLE_BOY":791,"FLAG_HIDE_FANCLUB_OLD_LADY":789,"FLAG_HIDE_FORTREE_CITY_HOUSE_4_WINGULL":933,"FLAG_HIDE_FORTREE_CITY_KECLEON":969,"FLAG_HIDE_GRANITE_CAVE_STEVEN":833,"FLAG_HIDE_HO_OH":801,"FLAG_HIDE_JAGGED_PASS_MAGMA_GUARD":847,"FLAG_HIDE_LANETTES_HOUSE_LANETTE":870,"FLAG_HIDE_LAVARIDGE_TOWN_RIVAL":929,"FLAG_HIDE_LAVARIDGE_TOWN_RIVAL_ON_BIKE":930,"FLAG_HIDE_LEGEND_MON_CAVE_OF_ORIGIN":825,"FLAG_HIDE_LILYCOVE_CITY_AQUA_GRUNTS":852,"FLAG_HIDE_LILYCOVE_CITY_RIVAL":971,"FLAG_HIDE_LILYCOVE_CITY_WAILMER":729,"FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER":832,"FLAG_HIDE_LILYCOVE_CONTEST_HALL_BLEND_MASTER_REPLACEMENT":873,"FLAG_HIDE_LILYCOVE_CONTEST_HALL_CONTEST_ATTENDANT_1":774,"FLAG_HIDE_LILYCOVE_CONTEST_HALL_CONTEST_ATTENDANT_2":895,"FLAG_HIDE_LILYCOVE_CONTEST_HALL_REPORTER":802,"FLAG_HIDE_LILYCOVE_DEPARTMENT_STORE_ROOFTOP_SALE_WOMAN":962,"FLAG_HIDE_LILYCOVE_FAN_CLUB_INTERVIEWER":730,"FLAG_HIDE_LILYCOVE_HARBOR_EVENT_TICKET_TAKER":748,"FLAG_HIDE_LILYCOVE_HARBOR_FERRY_ATTENDANT":908,"FLAG_HIDE_LILYCOVE_HARBOR_FERRY_SAILOR":909,"FLAG_HIDE_LILYCOVE_HARBOR_SSTIDAL":861,"FLAG_HIDE_LILYCOVE_MOTEL_GAME_DESIGNERS":925,"FLAG_HIDE_LILYCOVE_MOTEL_SCOTT":787,"FLAG_HIDE_LILYCOVE_MUSEUM_CURATOR":775,"FLAG_HIDE_LILYCOVE_MUSEUM_PATRON_1":776,"FLAG_HIDE_LILYCOVE_MUSEUM_PATRON_2":777,"FLAG_HIDE_LILYCOVE_MUSEUM_PATRON_3":778,"FLAG_HIDE_LILYCOVE_MUSEUM_PATRON_4":779,"FLAG_HIDE_LILYCOVE_MUSEUM_TOURISTS":780,"FLAG_HIDE_LILYCOVE_POKEMON_CENTER_CONTEST_LADY_MON":993,"FLAG_HIDE_LITTLEROOT_TOWN_BIRCH":795,"FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_BIRCH":721,"FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_POKEBALL_CHIKORITA":838,"FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_POKEBALL_CYNDAQUIL":811,"FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_POKEBALL_TOTODILE":812,"FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_RIVAL":889,"FLAG_HIDE_LITTLEROOT_TOWN_BIRCHS_LAB_UNKNOWN_0x380":896,"FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F_POKE_BALL":817,"FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F_SWABLU_DOLL":815,"FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_BRENDAN":745,"FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_MOM":758,"FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_BEDROOM":760,"FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_MOM":784,"FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_RIVAL_SIBLING":735,"FLAG_HIDE_LITTLEROOT_TOWN_BRENDANS_HOUSE_TRUCK":761,"FLAG_HIDE_LITTLEROOT_TOWN_FAT_MAN":868,"FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_2F_PICHU_DOLL":849,"FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_2F_POKE_BALL":818,"FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_MAY":746,"FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_MOM":759,"FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_BEDROOM":722,"FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_MOM":785,"FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_RIVAL_SIBLING":736,"FLAG_HIDE_LITTLEROOT_TOWN_MAYS_HOUSE_TRUCK":762,"FLAG_HIDE_LITTLEROOT_TOWN_MOM_OUTSIDE":752,"FLAG_HIDE_LITTLEROOT_TOWN_PLAYERS_BEDROOM_MOM":757,"FLAG_HIDE_LITTLEROOT_TOWN_PLAYERS_HOUSE_VIGOROTH_1":754,"FLAG_HIDE_LITTLEROOT_TOWN_PLAYERS_HOUSE_VIGOROTH_2":755,"FLAG_HIDE_LITTLEROOT_TOWN_RIVAL":794,"FLAG_HIDE_LUGIA":800,"FLAG_HIDE_MAGMA_HIDEOUT_4F_GROUDON":853,"FLAG_HIDE_MAGMA_HIDEOUT_4F_GROUDON_ASLEEP":850,"FLAG_HIDE_MAGMA_HIDEOUT_GRUNTS":857,"FLAG_HIDE_MAP_NAME_POPUP":16384,"FLAG_HIDE_MARINE_CAVE_KYOGRE":782,"FLAG_HIDE_MAUVILLE_CITY_SCOTT":765,"FLAG_HIDE_MAUVILLE_CITY_WALLY":804,"FLAG_HIDE_MAUVILLE_CITY_WALLYS_UNCLE":805,"FLAG_HIDE_MAUVILLE_CITY_WATTSON":912,"FLAG_HIDE_MAUVILLE_GYM_WATTSON":913,"FLAG_HIDE_METEOR_FALLS_1F_1R_COZMO":942,"FLAG_HIDE_METEOR_FALLS_TEAM_AQUA":938,"FLAG_HIDE_METEOR_FALLS_TEAM_MAGMA":939,"FLAG_HIDE_MEW":718,"FLAG_HIDE_MIRAGE_TOWER_CLAW_FOSSIL":964,"FLAG_HIDE_MIRAGE_TOWER_ROOT_FOSSIL":963,"FLAG_HIDE_MOSSDEEP_CITY_HOUSE_2_WINGULL":934,"FLAG_HIDE_MOSSDEEP_CITY_SCOTT":788,"FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_1F_STEVEN":753,"FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_1F_TEAM_MAGMA":756,"FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_2F_STEVEN":863,"FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_2F_TEAM_MAGMA":862,"FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_MAGMA_NOTE":737,"FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_BELDUM_POKEBALL":968,"FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_INVISIBLE_NINJA_BOY":727,"FLAG_HIDE_MOSSDEEP_CITY_STEVENS_HOUSE_STEVEN":967,"FLAG_HIDE_MOSSDEEP_CITY_TEAM_MAGMA":823,"FLAG_HIDE_MR_BRINEY_BOAT_DEWFORD_TOWN":743,"FLAG_HIDE_MR_BRINEY_DEWFORD_TOWN":740,"FLAG_HIDE_MT_CHIMNEY_LAVA_COOKIE_LADY":994,"FLAG_HIDE_MT_CHIMNEY_TEAM_AQUA":926,"FLAG_HIDE_MT_CHIMNEY_TEAM_MAGMA":927,"FLAG_HIDE_MT_CHIMNEY_TRAINERS":877,"FLAG_HIDE_MT_PYRE_SUMMIT_ARCHIE":916,"FLAG_HIDE_MT_PYRE_SUMMIT_MAXIE":856,"FLAG_HIDE_MT_PYRE_SUMMIT_TEAM_AQUA":917,"FLAG_HIDE_NEW_MAUVILLE_VOLTORB_1":974,"FLAG_HIDE_NEW_MAUVILLE_VOLTORB_2":975,"FLAG_HIDE_NEW_MAUVILLE_VOLTORB_3":976,"FLAG_HIDE_OLDALE_TOWN_RIVAL":979,"FLAG_HIDE_PETALBURG_CITY_SCOTT":995,"FLAG_HIDE_PETALBURG_CITY_WALLY":726,"FLAG_HIDE_PETALBURG_CITY_WALLYS_DAD":830,"FLAG_HIDE_PETALBURG_CITY_WALLYS_MOM":728,"FLAG_HIDE_PETALBURG_GYM_GREETER":781,"FLAG_HIDE_PETALBURG_GYM_NORMAN":772,"FLAG_HIDE_PETALBURG_GYM_WALLY":866,"FLAG_HIDE_PETALBURG_GYM_WALLYS_DAD":824,"FLAG_HIDE_PETALBURG_WOODS_AQUA_GRUNT":725,"FLAG_HIDE_PETALBURG_WOODS_DEVON_EMPLOYEE":724,"FLAG_HIDE_PLAYERS_HOUSE_DAD":734,"FLAG_HIDE_POKEMON_CENTER_2F_MYSTERY_GIFT_MAN":702,"FLAG_HIDE_REGICE":936,"FLAG_HIDE_REGIROCK":935,"FLAG_HIDE_REGISTEEL":937,"FLAG_HIDE_ROUTE_101_BIRCH":897,"FLAG_HIDE_ROUTE_101_BIRCH_STARTERS_BAG":700,"FLAG_HIDE_ROUTE_101_BIRCH_ZIGZAGOON_BATTLE":720,"FLAG_HIDE_ROUTE_101_BOY":991,"FLAG_HIDE_ROUTE_101_ZIGZAGOON":750,"FLAG_HIDE_ROUTE_103_BIRCH":898,"FLAG_HIDE_ROUTE_103_RIVAL":723,"FLAG_HIDE_ROUTE_104_MR_BRINEY":738,"FLAG_HIDE_ROUTE_104_MR_BRINEY_BOAT":742,"FLAG_HIDE_ROUTE_104_RIVAL":719,"FLAG_HIDE_ROUTE_104_WHITE_HERB_FLORIST":906,"FLAG_HIDE_ROUTE_109_MR_BRINEY":741,"FLAG_HIDE_ROUTE_109_MR_BRINEY_BOAT":744,"FLAG_HIDE_ROUTE_110_BIRCH":837,"FLAG_HIDE_ROUTE_110_RIVAL":919,"FLAG_HIDE_ROUTE_110_RIVAL_ON_BIKE":922,"FLAG_HIDE_ROUTE_110_TEAM_AQUA":900,"FLAG_HIDE_ROUTE_111_DESERT_FOSSIL":876,"FLAG_HIDE_ROUTE_111_GABBY_AND_TY_1":796,"FLAG_HIDE_ROUTE_111_GABBY_AND_TY_2":903,"FLAG_HIDE_ROUTE_111_GABBY_AND_TY_3":799,"FLAG_HIDE_ROUTE_111_PLAYER_DESCENT":875,"FLAG_HIDE_ROUTE_111_ROCK_SMASH_TIP_GUY":843,"FLAG_HIDE_ROUTE_111_SECRET_POWER_MAN":960,"FLAG_HIDE_ROUTE_111_VICKY_WINSTRATE":771,"FLAG_HIDE_ROUTE_111_VICTORIA_WINSTRATE":769,"FLAG_HIDE_ROUTE_111_VICTOR_WINSTRATE":768,"FLAG_HIDE_ROUTE_111_VIVI_WINSTRATE":770,"FLAG_HIDE_ROUTE_112_TEAM_MAGMA":819,"FLAG_HIDE_ROUTE_115_BOULDERS":482,"FLAG_HIDE_ROUTE_116_DEVON_EMPLOYEE":947,"FLAG_HIDE_ROUTE_116_DROPPED_GLASSES_MAN":813,"FLAG_HIDE_ROUTE_116_MR_BRINEY":891,"FLAG_HIDE_ROUTE_116_WANDAS_BOYFRIEND":894,"FLAG_HIDE_ROUTE_118_GABBY_AND_TY_1":797,"FLAG_HIDE_ROUTE_118_GABBY_AND_TY_2":901,"FLAG_HIDE_ROUTE_118_GABBY_AND_TY_3":904,"FLAG_HIDE_ROUTE_118_STEVEN":966,"FLAG_HIDE_ROUTE_119_KECLEON_1":989,"FLAG_HIDE_ROUTE_119_KECLEON_2":990,"FLAG_HIDE_ROUTE_119_RIVAL":851,"FLAG_HIDE_ROUTE_119_RIVAL_ON_BIKE":923,"FLAG_HIDE_ROUTE_119_SCOTT":786,"FLAG_HIDE_ROUTE_119_TEAM_AQUA":890,"FLAG_HIDE_ROUTE_119_TEAM_AQUA_BRIDGE":822,"FLAG_HIDE_ROUTE_120_GABBY_AND_TY_1":798,"FLAG_HIDE_ROUTE_120_GABBY_AND_TY_2":902,"FLAG_HIDE_ROUTE_120_KECLEON_1":982,"FLAG_HIDE_ROUTE_120_KECLEON_2":985,"FLAG_HIDE_ROUTE_120_KECLEON_3":986,"FLAG_HIDE_ROUTE_120_KECLEON_4":987,"FLAG_HIDE_ROUTE_120_KECLEON_5":988,"FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE":970,"FLAG_HIDE_ROUTE_120_KECLEON_BRIDGE_SHADOW":981,"FLAG_HIDE_ROUTE_120_STEVEN":972,"FLAG_HIDE_ROUTE_121_TEAM_AQUA_GRUNTS":914,"FLAG_HIDE_ROUTE_128_ARCHIE":944,"FLAG_HIDE_ROUTE_128_MAXIE":945,"FLAG_HIDE_ROUTE_128_STEVEN":834,"FLAG_HIDE_RUSTBORO_CITY_AQUA_GRUNT":731,"FLAG_HIDE_RUSTBORO_CITY_DEVON_CORP_3F_EMPLOYEE":949,"FLAG_HIDE_RUSTBORO_CITY_DEVON_EMPLOYEE_1":732,"FLAG_HIDE_RUSTBORO_CITY_POKEMON_SCHOOL_SCOTT":999,"FLAG_HIDE_RUSTBORO_CITY_RIVAL":814,"FLAG_HIDE_RUSTBORO_CITY_SCIENTIST":844,"FLAG_HIDE_RUSTURF_TUNNEL_AQUA_GRUNT":878,"FLAG_HIDE_RUSTURF_TUNNEL_BRINEY":879,"FLAG_HIDE_RUSTURF_TUNNEL_PEEKO":880,"FLAG_HIDE_RUSTURF_TUNNEL_ROCK_1":931,"FLAG_HIDE_RUSTURF_TUNNEL_ROCK_2":932,"FLAG_HIDE_RUSTURF_TUNNEL_WANDA":983,"FLAG_HIDE_RUSTURF_TUNNEL_WANDAS_BOYFRIEND":807,"FLAG_HIDE_SAFARI_ZONE_SOUTH_CONSTRUCTION_WORKERS":717,"FLAG_HIDE_SAFARI_ZONE_SOUTH_EAST_EXPANSION":747,"FLAG_HIDE_SEAFLOOR_CAVERN_AQUA_GRUNTS":946,"FLAG_HIDE_SEAFLOOR_CAVERN_ENTRANCE_AQUA_GRUNT":941,"FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_ARCHIE":828,"FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_KYOGRE":859,"FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_KYOGRE_ASLEEP":733,"FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_MAGMA_GRUNTS":831,"FLAG_HIDE_SEAFLOOR_CAVERN_ROOM_9_MAXIE":829,"FLAG_HIDE_SECRET_BASE_TRAINER":173,"FLAG_HIDE_SKY_PILLAR_TOP_RAYQUAZA":773,"FLAG_HIDE_SKY_PILLAR_TOP_RAYQUAZA_STILL":80,"FLAG_HIDE_SKY_PILLAR_WALLACE":855,"FLAG_HIDE_SLATEPORT_CITY_CAPTAIN_STERN":840,"FLAG_HIDE_SLATEPORT_CITY_CONTEST_REPORTER":803,"FLAG_HIDE_SLATEPORT_CITY_GABBY_AND_TY":835,"FLAG_HIDE_SLATEPORT_CITY_HARBOR_AQUA_GRUNT":845,"FLAG_HIDE_SLATEPORT_CITY_HARBOR_ARCHIE":846,"FLAG_HIDE_SLATEPORT_CITY_HARBOR_CAPTAIN_STERN":841,"FLAG_HIDE_SLATEPORT_CITY_HARBOR_PATRONS":905,"FLAG_HIDE_SLATEPORT_CITY_HARBOR_SS_TIDAL":860,"FLAG_HIDE_SLATEPORT_CITY_HARBOR_SUBMARINE_SHADOW":848,"FLAG_HIDE_SLATEPORT_CITY_OCEANIC_MUSEUM_2F_AQUA_GRUNT_1":884,"FLAG_HIDE_SLATEPORT_CITY_OCEANIC_MUSEUM_2F_AQUA_GRUNT_2":885,"FLAG_HIDE_SLATEPORT_CITY_OCEANIC_MUSEUM_2F_ARCHIE":886,"FLAG_HIDE_SLATEPORT_CITY_OCEANIC_MUSEUM_2F_CAPTAIN_STERN":887,"FLAG_HIDE_SLATEPORT_CITY_OCEANIC_MUSEUM_AQUA_GRUNTS":883,"FLAG_HIDE_SLATEPORT_CITY_OCEANIC_MUSEUM_FAMILIAR_AQUA_GRUNT":965,"FLAG_HIDE_SLATEPORT_CITY_SCOTT":749,"FLAG_HIDE_SLATEPORT_CITY_STERNS_SHIPYARD_MR_BRINEY":869,"FLAG_HIDE_SLATEPORT_CITY_TEAM_AQUA":882,"FLAG_HIDE_SLATEPORT_CITY_TM_SALESMAN":948,"FLAG_HIDE_SLATEPORT_MUSEUM_POPULATION":961,"FLAG_HIDE_SOOTOPOLIS_CITY_ARCHIE":826,"FLAG_HIDE_SOOTOPOLIS_CITY_GROUDON":998,"FLAG_HIDE_SOOTOPOLIS_CITY_KYOGRE":997,"FLAG_HIDE_SOOTOPOLIS_CITY_MAN_1":839,"FLAG_HIDE_SOOTOPOLIS_CITY_MAXIE":827,"FLAG_HIDE_SOOTOPOLIS_CITY_RAYQUAZA":996,"FLAG_HIDE_SOOTOPOLIS_CITY_RESIDENTS":854,"FLAG_HIDE_SOOTOPOLIS_CITY_STEVEN":973,"FLAG_HIDE_SOOTOPOLIS_CITY_WALLACE":816,"FLAG_HIDE_SOUTHERN_ISLAND_EON_STONE":910,"FLAG_HIDE_SOUTHERN_ISLAND_UNCHOSEN_EON_DUO_MON":911,"FLAG_HIDE_SS_TIDAL_CORRIDOR_MR_BRINEY":950,"FLAG_HIDE_SS_TIDAL_CORRIDOR_SCOTT":810,"FLAG_HIDE_SS_TIDAL_ROOMS_SNATCH_GIVER":951,"FLAG_HIDE_TERRA_CAVE_GROUDON":783,"FLAG_HIDE_TRICK_HOUSE_END_MAN":899,"FLAG_HIDE_TRICK_HOUSE_ENTRANCE_MAN":872,"FLAG_HIDE_UNDERWATER_SEA_FLOOR_CAVERN_STOLEN_SUBMARINE":980,"FLAG_HIDE_UNION_ROOM_PLAYER_1":703,"FLAG_HIDE_UNION_ROOM_PLAYER_2":704,"FLAG_HIDE_UNION_ROOM_PLAYER_3":705,"FLAG_HIDE_UNION_ROOM_PLAYER_4":706,"FLAG_HIDE_UNION_ROOM_PLAYER_5":707,"FLAG_HIDE_UNION_ROOM_PLAYER_6":708,"FLAG_HIDE_UNION_ROOM_PLAYER_7":709,"FLAG_HIDE_UNION_ROOM_PLAYER_8":710,"FLAG_HIDE_VERDANTURF_TOWN_SCOTT":766,"FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WALLY":806,"FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WALLYS_UNCLE":809,"FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WANDA":984,"FLAG_HIDE_VERDANTURF_TOWN_WANDAS_HOUSE_WANDAS_BOYFRIEND":808,"FLAG_HIDE_VICTORY_ROAD_ENTRANCE_WALLY":858,"FLAG_HIDE_VICTORY_ROAD_EXIT_WALLY":751,"FLAG_HIDE_WEATHER_INSTITUTE_1F_WORKERS":892,"FLAG_HIDE_WEATHER_INSTITUTE_2F_AQUA_GRUNT_M":992,"FLAG_HIDE_WEATHER_INSTITUTE_2F_WORKERS":893,"FLAG_INTERACTED_WITH_DEVON_EMPLOYEE_GOODS_STOLEN":159,"FLAG_INTERACTED_WITH_STEVEN_SPACE_CENTER":205,"FLAG_IS_CHAMPION":2175,"FLAG_ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY":1100,"FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18":1102,"FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE":1101,"FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER":1078,"FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL":1077,"FLAG_ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL":1095,"FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE":1099,"FLAG_ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL":1097,"FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE":1096,"FLAG_ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13":1098,"FLAG_ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL":1124,"FLAG_ITEM_AQUA_HIDEOUT_B1F_MAX_ELIXIR":1071,"FLAG_ITEM_AQUA_HIDEOUT_B1F_NUGGET":1132,"FLAG_ITEM_AQUA_HIDEOUT_B2F_NEST_BALL":1072,"FLAG_ITEM_ARTISAN_CAVE_1F_CARBOS":1163,"FLAG_ITEM_ARTISAN_CAVE_B1F_HP_UP":1162,"FLAG_ITEM_FIERY_PATH_FIRE_STONE":1111,"FLAG_ITEM_FIERY_PATH_TM06":1091,"FLAG_ITEM_GRANITE_CAVE_1F_ESCAPE_ROPE":1050,"FLAG_ITEM_GRANITE_CAVE_B1F_POKE_BALL":1051,"FLAG_ITEM_GRANITE_CAVE_B2F_RARE_CANDY":1054,"FLAG_ITEM_GRANITE_CAVE_B2F_REPEL":1053,"FLAG_ITEM_JAGGED_PASS_BURN_HEAL":1070,"FLAG_ITEM_LILYCOVE_CITY_MAX_REPEL":1042,"FLAG_ITEM_MAGMA_HIDEOUT_1F_RARE_CANDY":1151,"FLAG_ITEM_MAGMA_HIDEOUT_2F_2R_FULL_RESTORE":1165,"FLAG_ITEM_MAGMA_HIDEOUT_2F_2R_MAX_ELIXIR":1164,"FLAG_ITEM_MAGMA_HIDEOUT_3F_1R_NUGGET":1166,"FLAG_ITEM_MAGMA_HIDEOUT_3F_2R_PP_MAX":1167,"FLAG_ITEM_MAGMA_HIDEOUT_3F_3R_ECAPE_ROPE":1059,"FLAG_ITEM_MAGMA_HIDEOUT_4F_MAX_REVIVE":1168,"FLAG_ITEM_MAUVILLE_CITY_X_SPEED":1116,"FLAG_ITEM_METEOR_FALLS_1F_1R_FULL_HEAL":1045,"FLAG_ITEM_METEOR_FALLS_1F_1R_MOON_STONE":1046,"FLAG_ITEM_METEOR_FALLS_1F_1R_PP_UP":1047,"FLAG_ITEM_METEOR_FALLS_1F_1R_TM23":1044,"FLAG_ITEM_METEOR_FALLS_B1F_2R_TM02":1080,"FLAG_ITEM_MOSSDEEP_CITY_NET_BALL":1043,"FLAG_ITEM_MOSSDEEP_STEVENS_HOUSE_HM08":1133,"FLAG_ITEM_MT_PYRE_2F_ULTRA_BALL":1129,"FLAG_ITEM_MT_PYRE_3F_SUPER_REPEL":1120,"FLAG_ITEM_MT_PYRE_4F_SEA_INCENSE":1130,"FLAG_ITEM_MT_PYRE_5F_LAX_INCENSE":1052,"FLAG_ITEM_MT_PYRE_6F_TM30":1089,"FLAG_ITEM_MT_PYRE_EXTERIOR_MAX_POTION":1073,"FLAG_ITEM_MT_PYRE_EXTERIOR_TM48":1074,"FLAG_ITEM_NEW_MAUVILLE_ESCAPE_ROPE":1076,"FLAG_ITEM_NEW_MAUVILLE_FULL_HEAL":1122,"FLAG_ITEM_NEW_MAUVILLE_PARALYZE_HEAL":1123,"FLAG_ITEM_NEW_MAUVILLE_THUNDER_STONE":1110,"FLAG_ITEM_NEW_MAUVILLE_ULTRA_BALL":1075,"FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MASTER_BALL":1125,"FLAG_ITEM_OLD_MAGMA_HIDEOUT_B1F_MAX_ELIXIR":1126,"FLAG_ITEM_OLD_MAGMA_HIDEOUT_B2F_NEST_BALL":1127,"FLAG_ITEM_PETALBURG_CITY_ETHER":1040,"FLAG_ITEM_PETALBURG_CITY_MAX_REVIVE":1039,"FLAG_ITEM_PETALBURG_WOODS_ETHER":1058,"FLAG_ITEM_PETALBURG_WOODS_GREAT_BALL":1056,"FLAG_ITEM_PETALBURG_WOODS_PARALYZE_HEAL":1117,"FLAG_ITEM_PETALBURG_WOODS_X_ATTACK":1055,"FLAG_ITEM_ROUTE_102_POTION":1000,"FLAG_ITEM_ROUTE_103_GUARD_SPEC":1114,"FLAG_ITEM_ROUTE_103_PP_UP":1137,"FLAG_ITEM_ROUTE_104_POKE_BALL":1057,"FLAG_ITEM_ROUTE_104_POTION":1135,"FLAG_ITEM_ROUTE_104_PP_UP":1002,"FLAG_ITEM_ROUTE_104_X_ACCURACY":1115,"FLAG_ITEM_ROUTE_105_IRON":1003,"FLAG_ITEM_ROUTE_106_PROTEIN":1004,"FLAG_ITEM_ROUTE_108_STAR_PIECE":1139,"FLAG_ITEM_ROUTE_109_POTION":1140,"FLAG_ITEM_ROUTE_109_PP_UP":1005,"FLAG_ITEM_ROUTE_110_DIRE_HIT":1007,"FLAG_ITEM_ROUTE_110_ELIXIR":1141,"FLAG_ITEM_ROUTE_110_RARE_CANDY":1006,"FLAG_ITEM_ROUTE_111_ELIXIR":1142,"FLAG_ITEM_ROUTE_111_HP_UP":1010,"FLAG_ITEM_ROUTE_111_STARDUST":1009,"FLAG_ITEM_ROUTE_111_TM37":1008,"FLAG_ITEM_ROUTE_112_NUGGET":1011,"FLAG_ITEM_ROUTE_113_HYPER_POTION":1143,"FLAG_ITEM_ROUTE_113_MAX_ETHER":1012,"FLAG_ITEM_ROUTE_113_SUPER_REPEL":1013,"FLAG_ITEM_ROUTE_114_ENERGY_POWDER":1160,"FLAG_ITEM_ROUTE_114_PROTEIN":1015,"FLAG_ITEM_ROUTE_114_RARE_CANDY":1014,"FLAG_ITEM_ROUTE_115_GREAT_BALL":1118,"FLAG_ITEM_ROUTE_115_HEAL_POWDER":1144,"FLAG_ITEM_ROUTE_115_IRON":1018,"FLAG_ITEM_ROUTE_115_PP_UP":1161,"FLAG_ITEM_ROUTE_115_SUPER_POTION":1016,"FLAG_ITEM_ROUTE_115_TM01":1017,"FLAG_ITEM_ROUTE_116_ETHER":1019,"FLAG_ITEM_ROUTE_116_HP_UP":1021,"FLAG_ITEM_ROUTE_116_POTION":1146,"FLAG_ITEM_ROUTE_116_REPEL":1020,"FLAG_ITEM_ROUTE_116_X_SPECIAL":1001,"FLAG_ITEM_ROUTE_117_GREAT_BALL":1022,"FLAG_ITEM_ROUTE_117_REVIVE":1023,"FLAG_ITEM_ROUTE_118_HYPER_POTION":1121,"FLAG_ITEM_ROUTE_119_ELIXIR_1":1026,"FLAG_ITEM_ROUTE_119_ELIXIR_2":1147,"FLAG_ITEM_ROUTE_119_HYPER_POTION_1":1029,"FLAG_ITEM_ROUTE_119_HYPER_POTION_2":1106,"FLAG_ITEM_ROUTE_119_LEAF_STONE":1027,"FLAG_ITEM_ROUTE_119_NUGGET":1134,"FLAG_ITEM_ROUTE_119_RARE_CANDY":1028,"FLAG_ITEM_ROUTE_119_SUPER_REPEL":1024,"FLAG_ITEM_ROUTE_119_ZINC":1025,"FLAG_ITEM_ROUTE_120_FULL_HEAL":1031,"FLAG_ITEM_ROUTE_120_HYPER_POTION":1107,"FLAG_ITEM_ROUTE_120_NEST_BALL":1108,"FLAG_ITEM_ROUTE_120_NUGGET":1030,"FLAG_ITEM_ROUTE_120_REVIVE":1148,"FLAG_ITEM_ROUTE_121_CARBOS":1103,"FLAG_ITEM_ROUTE_121_REVIVE":1149,"FLAG_ITEM_ROUTE_121_ZINC":1150,"FLAG_ITEM_ROUTE_123_CALCIUM":1032,"FLAG_ITEM_ROUTE_123_ELIXIR":1109,"FLAG_ITEM_ROUTE_123_PP_UP":1152,"FLAG_ITEM_ROUTE_123_RARE_CANDY":1033,"FLAG_ITEM_ROUTE_123_REVIVAL_HERB":1153,"FLAG_ITEM_ROUTE_123_ULTRA_BALL":1104,"FLAG_ITEM_ROUTE_124_BLUE_SHARD":1093,"FLAG_ITEM_ROUTE_124_RED_SHARD":1092,"FLAG_ITEM_ROUTE_124_YELLOW_SHARD":1066,"FLAG_ITEM_ROUTE_125_BIG_PEARL":1154,"FLAG_ITEM_ROUTE_126_GREEN_SHARD":1105,"FLAG_ITEM_ROUTE_127_CARBOS":1035,"FLAG_ITEM_ROUTE_127_RARE_CANDY":1155,"FLAG_ITEM_ROUTE_127_ZINC":1034,"FLAG_ITEM_ROUTE_132_PROTEIN":1156,"FLAG_ITEM_ROUTE_132_RARE_CANDY":1036,"FLAG_ITEM_ROUTE_133_BIG_PEARL":1037,"FLAG_ITEM_ROUTE_133_MAX_REVIVE":1157,"FLAG_ITEM_ROUTE_133_STAR_PIECE":1038,"FLAG_ITEM_ROUTE_134_CARBOS":1158,"FLAG_ITEM_ROUTE_134_STAR_PIECE":1159,"FLAG_ITEM_RUSTBORO_CITY_X_DEFEND":1041,"FLAG_ITEM_RUSTURF_TUNNEL_MAX_ETHER":1049,"FLAG_ITEM_RUSTURF_TUNNEL_POKE_BALL":1048,"FLAG_ITEM_SAFARI_ZONE_NORTH_CALCIUM":1119,"FLAG_ITEM_SAFARI_ZONE_NORTH_EAST_NUGGET":1169,"FLAG_ITEM_SAFARI_ZONE_NORTH_WEST_TM22":1094,"FLAG_ITEM_SAFARI_ZONE_SOUTH_EAST_BIG_PEARL":1170,"FLAG_ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE":1131,"FLAG_ITEM_SCORCHED_SLAB_TM11":1079,"FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26":1090,"FLAG_ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL":1081,"FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_NEVER_MELT_ICE":1113,"FLAG_ITEM_SHOAL_CAVE_ICE_ROOM_TM07":1112,"FLAG_ITEM_SHOAL_CAVE_INNER_ROOM_RARE_CANDY":1082,"FLAG_ITEM_SHOAL_CAVE_STAIRS_ROOM_ICE_HEAL":1083,"FLAG_ITEM_TRICK_HOUSE_PUZZLE_1_ORANGE_MAIL":1060,"FLAG_ITEM_TRICK_HOUSE_PUZZLE_2_HARBOR_MAIL":1061,"FLAG_ITEM_TRICK_HOUSE_PUZZLE_2_WAVE_MAIL":1062,"FLAG_ITEM_TRICK_HOUSE_PUZZLE_3_SHADOW_MAIL":1063,"FLAG_ITEM_TRICK_HOUSE_PUZZLE_3_WOOD_MAIL":1064,"FLAG_ITEM_TRICK_HOUSE_PUZZLE_4_MECH_MAIL":1065,"FLAG_ITEM_TRICK_HOUSE_PUZZLE_6_GLITTER_MAIL":1067,"FLAG_ITEM_TRICK_HOUSE_PUZZLE_7_TROPIC_MAIL":1068,"FLAG_ITEM_TRICK_HOUSE_PUZZLE_8_BEAD_MAIL":1069,"FLAG_ITEM_VICTORY_ROAD_1F_MAX_ELIXIR":1084,"FLAG_ITEM_VICTORY_ROAD_1F_PP_UP":1085,"FLAG_ITEM_VICTORY_ROAD_B1F_FULL_RESTORE":1087,"FLAG_ITEM_VICTORY_ROAD_B1F_TM29":1086,"FLAG_ITEM_VICTORY_ROAD_B2F_FULL_HEAL":1088,"FLAG_KECLEON_FLED_FORTREE":295,"FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN":129,"FLAG_LANDMARK_ABANDONED_SHIP":2206,"FLAG_LANDMARK_ALTERING_CAVE":2269,"FLAG_LANDMARK_ANCIENT_TOMB":2233,"FLAG_LANDMARK_ARTISAN_CAVE":2271,"FLAG_LANDMARK_BATTLE_FRONTIER":2216,"FLAG_LANDMARK_BERRY_MASTERS_HOUSE":2243,"FLAG_LANDMARK_DESERT_RUINS":2230,"FLAG_LANDMARK_DESERT_UNDERPASS":2270,"FLAG_LANDMARK_FIERY_PATH":2218,"FLAG_LANDMARK_FLOWER_SHOP":2204,"FLAG_LANDMARK_FOSSIL_MANIACS_HOUSE":2231,"FLAG_LANDMARK_GLASS_WORKSHOP":2212,"FLAG_LANDMARK_HUNTERS_HOUSE":2235,"FLAG_LANDMARK_ISLAND_CAVE":2229,"FLAG_LANDMARK_LANETTES_HOUSE":2213,"FLAG_LANDMARK_MIRAGE_TOWER":120,"FLAG_LANDMARK_MR_BRINEY_HOUSE":2205,"FLAG_LANDMARK_NEW_MAUVILLE":2208,"FLAG_LANDMARK_OLD_LADY_REST_SHOP":2209,"FLAG_LANDMARK_POKEMON_DAYCARE":2214,"FLAG_LANDMARK_POKEMON_LEAGUE":2228,"FLAG_LANDMARK_SCORCHED_SLAB":2232,"FLAG_LANDMARK_SEAFLOOR_CAVERN":2215,"FLAG_LANDMARK_SEALED_CHAMBER":2236,"FLAG_LANDMARK_SEASHORE_HOUSE":2207,"FLAG_LANDMARK_SKY_PILLAR":2238,"FLAG_LANDMARK_SOUTHERN_ISLAND":2217,"FLAG_LANDMARK_TRAINER_HILL":2274,"FLAG_LANDMARK_TRICK_HOUSE":2210,"FLAG_LANDMARK_TUNNELERS_REST_HOUSE":2234,"FLAG_LANDMARK_WINSTRATE_FAMILY":2211,"FLAG_LATIOS_OR_LATIAS_ROAMING":255,"FLAG_LEGENDARIES_IN_SOOTOPOLIS":83,"FLAG_MAP_SCRIPT_CHECKED_DEOXYS":2259,"FLAG_MATCH_CALL_REGISTERED":348,"FLAG_MAUVILLE_GYM_BARRIERS_STATE":99,"FLAG_MET_ARCHIE_METEOR_FALLS":207,"FLAG_MET_ARCHIE_SOOTOPOLIS":308,"FLAG_MET_BATTLE_FRONTIER_BREEDER":339,"FLAG_MET_BATTLE_FRONTIER_GAMBLER":343,"FLAG_MET_BATTLE_FRONTIER_MANIAC":340,"FLAG_MET_DEVON_EMPLOYEE":287,"FLAG_MET_DIVING_TREASURE_HUNTER":217,"FLAG_MET_FANCLUB_YOUNGER_BROTHER":300,"FLAG_MET_FRONTIER_BEAUTY_MOVE_TUTOR":346,"FLAG_MET_FRONTIER_SWIMMER_MOVE_TUTOR":347,"FLAG_MET_HIDDEN_POWER_GIVER":118,"FLAG_MET_MAXIE_SOOTOPOLIS":309,"FLAG_MET_PRETTY_PETAL_SHOP_OWNER":127,"FLAG_MET_PROF_COZMO":244,"FLAG_MET_RIVAL_IN_HOUSE_AFTER_LILYCOVE":293,"FLAG_MET_RIVAL_LILYCOVE":292,"FLAG_MET_RIVAL_MOM":87,"FLAG_MET_RIVAL_RUSTBORO":288,"FLAG_MET_SCOTT_AFTER_OBTAINING_STONE_BADGE":459,"FLAG_MET_SCOTT_IN_EVERGRANDE":463,"FLAG_MET_SCOTT_IN_FALLARBOR":461,"FLAG_MET_SCOTT_IN_LILYCOVE":462,"FLAG_MET_SCOTT_IN_VERDANTURF":460,"FLAG_MET_SCOTT_ON_SS_TIDAL":464,"FLAG_MET_SCOTT_RUSTBORO":310,"FLAG_MET_SLATEPORT_FANCLUB_CHAIRMAN":342,"FLAG_MET_TEAM_AQUA_HARBOR":97,"FLAG_MET_WAILMER_TRAINER":218,"FLAG_MIRAGE_TOWER_VISIBLE":334,"FLAG_MOSSDEEP_GYM_SWITCH_1":100,"FLAG_MOSSDEEP_GYM_SWITCH_2":101,"FLAG_MOSSDEEP_GYM_SWITCH_3":102,"FLAG_MOSSDEEP_GYM_SWITCH_4":103,"FLAG_MOVE_TUTOR_TAUGHT_DOUBLE_EDGE":441,"FLAG_MOVE_TUTOR_TAUGHT_DYNAMICPUNCH":440,"FLAG_MOVE_TUTOR_TAUGHT_EXPLOSION":442,"FLAG_MOVE_TUTOR_TAUGHT_FURY_CUTTER":435,"FLAG_MOVE_TUTOR_TAUGHT_METRONOME":437,"FLAG_MOVE_TUTOR_TAUGHT_MIMIC":436,"FLAG_MOVE_TUTOR_TAUGHT_ROLLOUT":434,"FLAG_MOVE_TUTOR_TAUGHT_SLEEP_TALK":438,"FLAG_MOVE_TUTOR_TAUGHT_SUBSTITUTE":439,"FLAG_MOVE_TUTOR_TAUGHT_SWAGGER":433,"FLAG_MR_BRINEY_SAILING_INTRO":147,"FLAG_MYSTERY_GIFT_1":485,"FLAG_MYSTERY_GIFT_10":494,"FLAG_MYSTERY_GIFT_11":495,"FLAG_MYSTERY_GIFT_12":496,"FLAG_MYSTERY_GIFT_13":497,"FLAG_MYSTERY_GIFT_14":498,"FLAG_MYSTERY_GIFT_15":499,"FLAG_MYSTERY_GIFT_2":486,"FLAG_MYSTERY_GIFT_3":487,"FLAG_MYSTERY_GIFT_4":488,"FLAG_MYSTERY_GIFT_5":489,"FLAG_MYSTERY_GIFT_6":490,"FLAG_MYSTERY_GIFT_7":491,"FLAG_MYSTERY_GIFT_8":492,"FLAG_MYSTERY_GIFT_9":493,"FLAG_MYSTERY_GIFT_DONE":484,"FLAG_NEVER_SET_0x0DC":220,"FLAG_NOT_READY_FOR_BATTLE_ROUTE_120":290,"FLAG_NURSE_MENTIONS_GOLD_CARD":345,"FLAG_NURSE_UNION_ROOM_REMINDER":2176,"FLAG_OCEANIC_MUSEUM_MET_REPORTER":105,"FLAG_OMIT_DIVE_FROM_STEVEN_LETTER":302,"FLAG_PACIFIDLOG_NPC_TRADE_COMPLETED":154,"FLAG_PENDING_DAYCARE_EGG":134,"FLAG_PETALBURG_MART_EXPANDED_ITEMS":296,"FLAG_POKERUS_EXPLAINED":273,"FLAG_PURCHASED_HARBOR_MAIL":104,"FLAG_RECEIVED_20_COINS":225,"FLAG_RECEIVED_6_SODA_POP":140,"FLAG_RECEIVED_ACRO_BIKE":1181,"FLAG_RECEIVED_AMULET_COIN":133,"FLAG_RECEIVED_AURORA_TICKET":314,"FLAG_RECEIVED_BADGE_1":1182,"FLAG_RECEIVED_BADGE_2":1183,"FLAG_RECEIVED_BADGE_3":1184,"FLAG_RECEIVED_BADGE_4":1185,"FLAG_RECEIVED_BADGE_5":1186,"FLAG_RECEIVED_BADGE_6":1187,"FLAG_RECEIVED_BADGE_7":1188,"FLAG_RECEIVED_BADGE_8":1189,"FLAG_RECEIVED_BELDUM":298,"FLAG_RECEIVED_BELUE_BERRY":252,"FLAG_RECEIVED_BIKE":90,"FLAG_RECEIVED_BLUE_SCARF":201,"FLAG_RECEIVED_CASTFORM":151,"FLAG_RECEIVED_CHARCOAL":254,"FLAG_RECEIVED_CHESTO_BERRY_ROUTE_104":246,"FLAG_RECEIVED_CLEANSE_TAG":282,"FLAG_RECEIVED_COIN_CASE":258,"FLAG_RECEIVED_CONTEST_PASS":150,"FLAG_RECEIVED_DEEP_SEA_SCALE":1190,"FLAG_RECEIVED_DEEP_SEA_TOOTH":1191,"FLAG_RECEIVED_DEVON_GOODS_RUSTURF_TUNNEL":1172,"FLAG_RECEIVED_DEVON_SCOPE":285,"FLAG_RECEIVED_DOLL_LANETTE":131,"FLAG_RECEIVED_DURIN_BERRY":251,"FLAG_RECEIVED_EXP_SHARE":272,"FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK":299,"FLAG_RECEIVED_FOCUS_BAND":283,"FLAG_RECEIVED_GLASS_ORNAMENT":236,"FLAG_RECEIVED_GOLD_SHIELD":238,"FLAG_RECEIVED_GOOD_ROD":227,"FLAG_RECEIVED_GO_GOGGLES":221,"FLAG_RECEIVED_GREAT_BALL_PETALBURG_WOODS":1171,"FLAG_RECEIVED_GREAT_BALL_RUSTBORO_CITY":1173,"FLAG_RECEIVED_GREEN_SCARF":203,"FLAG_RECEIVED_HM01":137,"FLAG_RECEIVED_HM02":110,"FLAG_RECEIVED_HM03":122,"FLAG_RECEIVED_HM04":106,"FLAG_RECEIVED_HM05":109,"FLAG_RECEIVED_HM06":107,"FLAG_RECEIVED_HM07":312,"FLAG_RECEIVED_HM08":123,"FLAG_RECEIVED_ITEMFINDER":1176,"FLAG_RECEIVED_KINGS_ROCK":276,"FLAG_RECEIVED_LAVARIDGE_EGG":266,"FLAG_RECEIVED_LETTER":1174,"FLAG_RECEIVED_MACHO_BRACE":277,"FLAG_RECEIVED_MACH_BIKE":1180,"FLAG_RECEIVED_MAGMA_EMBLEM":1177,"FLAG_RECEIVED_MENTAL_HERB":223,"FLAG_RECEIVED_METEORITE":115,"FLAG_RECEIVED_MIRACLE_SEED":297,"FLAG_RECEIVED_MYSTIC_TICKET":315,"FLAG_RECEIVED_OLD_ROD":257,"FLAG_RECEIVED_OLD_SEA_MAP":316,"FLAG_RECEIVED_PAMTRE_BERRY":249,"FLAG_RECEIVED_PINK_SCARF":202,"FLAG_RECEIVED_POKEBLOCK_CASE":95,"FLAG_RECEIVED_POKEDEX_FROM_BIRCH":2276,"FLAG_RECEIVED_POKENAV":188,"FLAG_RECEIVED_POTION_OLDALE":132,"FLAG_RECEIVED_POWDER_JAR":337,"FLAG_RECEIVED_PREMIER_BALL_RUSTBORO":213,"FLAG_RECEIVED_QUICK_CLAW":275,"FLAG_RECEIVED_RED_OR_BLUE_ORB":212,"FLAG_RECEIVED_RED_SCARF":200,"FLAG_RECEIVED_REPEAT_BALL":256,"FLAG_RECEIVED_REVIVED_FOSSIL_MON":267,"FLAG_RECEIVED_RUNNING_SHOES":274,"FLAG_RECEIVED_SECRET_POWER":96,"FLAG_RECEIVED_SHOAL_SALT_1":952,"FLAG_RECEIVED_SHOAL_SALT_2":953,"FLAG_RECEIVED_SHOAL_SALT_3":954,"FLAG_RECEIVED_SHOAL_SALT_4":955,"FLAG_RECEIVED_SHOAL_SHELL_1":956,"FLAG_RECEIVED_SHOAL_SHELL_2":957,"FLAG_RECEIVED_SHOAL_SHELL_3":958,"FLAG_RECEIVED_SHOAL_SHELL_4":959,"FLAG_RECEIVED_SILK_SCARF":289,"FLAG_RECEIVED_SILVER_SHIELD":237,"FLAG_RECEIVED_SOFT_SAND":280,"FLAG_RECEIVED_SOOTHE_BELL":278,"FLAG_RECEIVED_SPELON_BERRY":248,"FLAG_RECEIVED_SS_TICKET":291,"FLAG_RECEIVED_STARTER_DOLL":226,"FLAG_RECEIVED_SUN_STONE_MOSSDEEP":192,"FLAG_RECEIVED_SUPER_ROD":152,"FLAG_RECEIVED_TM03":172,"FLAG_RECEIVED_TM04":171,"FLAG_RECEIVED_TM05":231,"FLAG_RECEIVED_TM08":166,"FLAG_RECEIVED_TM09":262,"FLAG_RECEIVED_TM10":264,"FLAG_RECEIVED_TM19":232,"FLAG_RECEIVED_TM21":1179,"FLAG_RECEIVED_TM27":229,"FLAG_RECEIVED_TM27_2":1178,"FLAG_RECEIVED_TM28":261,"FLAG_RECEIVED_TM31":121,"FLAG_RECEIVED_TM34":167,"FLAG_RECEIVED_TM36":230,"FLAG_RECEIVED_TM39":165,"FLAG_RECEIVED_TM40":170,"FLAG_RECEIVED_TM41":265,"FLAG_RECEIVED_TM42":169,"FLAG_RECEIVED_TM44":234,"FLAG_RECEIVED_TM45":235,"FLAG_RECEIVED_TM46":269,"FLAG_RECEIVED_TM47":1175,"FLAG_RECEIVED_TM49":260,"FLAG_RECEIVED_TM50":168,"FLAG_RECEIVED_WAILMER_DOLL":245,"FLAG_RECEIVED_WAILMER_PAIL":94,"FLAG_RECEIVED_WATMEL_BERRY":250,"FLAG_RECEIVED_WHITE_HERB":279,"FLAG_RECEIVED_YELLOW_SCARF":204,"FLAG_RECOVERED_DEVON_GOODS":143,"FLAG_REGISTERED_STEVEN_POKENAV":305,"FLAG_REGISTER_RIVAL_POKENAV":124,"FLAG_REGI_DOORS_OPENED":228,"FLAG_REMATCH_ABIGAIL":387,"FLAG_REMATCH_AMY_AND_LIV":399,"FLAG_REMATCH_ANDRES":350,"FLAG_REMATCH_ANNA_AND_MEG":378,"FLAG_REMATCH_BENJAMIN":390,"FLAG_REMATCH_BERNIE":369,"FLAG_REMATCH_BRAWLY":415,"FLAG_REMATCH_BROOKE":356,"FLAG_REMATCH_CALVIN":383,"FLAG_REMATCH_CAMERON":373,"FLAG_REMATCH_CATHERINE":406,"FLAG_REMATCH_CINDY":359,"FLAG_REMATCH_CORY":401,"FLAG_REMATCH_CRISTIN":355,"FLAG_REMATCH_CYNDY":395,"FLAG_REMATCH_DALTON":368,"FLAG_REMATCH_DIANA":398,"FLAG_REMATCH_DRAKE":424,"FLAG_REMATCH_DUSTY":351,"FLAG_REMATCH_DYLAN":388,"FLAG_REMATCH_EDWIN":402,"FLAG_REMATCH_ELLIOT":384,"FLAG_REMATCH_ERNEST":400,"FLAG_REMATCH_ETHAN":370,"FLAG_REMATCH_FERNANDO":367,"FLAG_REMATCH_FLANNERY":417,"FLAG_REMATCH_GABRIELLE":405,"FLAG_REMATCH_GLACIA":423,"FLAG_REMATCH_HALEY":408,"FLAG_REMATCH_ISAAC":404,"FLAG_REMATCH_ISABEL":379,"FLAG_REMATCH_ISAIAH":385,"FLAG_REMATCH_JACKI":374,"FLAG_REMATCH_JACKSON":407,"FLAG_REMATCH_JAMES":409,"FLAG_REMATCH_JEFFREY":372,"FLAG_REMATCH_JENNY":397,"FLAG_REMATCH_JERRY":377,"FLAG_REMATCH_JESSICA":361,"FLAG_REMATCH_JOHN_AND_JAY":371,"FLAG_REMATCH_KAREN":376,"FLAG_REMATCH_KATELYN":389,"FLAG_REMATCH_KIRA_AND_DAN":412,"FLAG_REMATCH_KOJI":366,"FLAG_REMATCH_LAO":394,"FLAG_REMATCH_LILA_AND_ROY":354,"FLAG_REMATCH_LOLA":352,"FLAG_REMATCH_LYDIA":403,"FLAG_REMATCH_MADELINE":396,"FLAG_REMATCH_MARIA":386,"FLAG_REMATCH_MIGUEL":380,"FLAG_REMATCH_NICOLAS":392,"FLAG_REMATCH_NOB":365,"FLAG_REMATCH_NORMAN":418,"FLAG_REMATCH_PABLO":391,"FLAG_REMATCH_PHOEBE":422,"FLAG_REMATCH_RICKY":353,"FLAG_REMATCH_ROBERT":393,"FLAG_REMATCH_ROSE":349,"FLAG_REMATCH_ROXANNE":414,"FLAG_REMATCH_SAWYER":411,"FLAG_REMATCH_SHELBY":382,"FLAG_REMATCH_SIDNEY":421,"FLAG_REMATCH_STEVE":363,"FLAG_REMATCH_TATE_AND_LIZA":420,"FLAG_REMATCH_THALIA":360,"FLAG_REMATCH_TIMOTHY":381,"FLAG_REMATCH_TONY":364,"FLAG_REMATCH_TRENT":410,"FLAG_REMATCH_VALERIE":358,"FLAG_REMATCH_WALLACE":425,"FLAG_REMATCH_WALLY":413,"FLAG_REMATCH_WALTER":375,"FLAG_REMATCH_WATTSON":416,"FLAG_REMATCH_WILTON":357,"FLAG_REMATCH_WINONA":419,"FLAG_REMATCH_WINSTON":362,"FLAG_RESCUED_BIRCH":82,"FLAG_RETURNED_DEVON_GOODS":144,"FLAG_RETURNED_RED_OR_BLUE_ORB":259,"FLAG_RIVAL_LEFT_FOR_ROUTE103":301,"FLAG_RUSTBORO_NPC_TRADE_COMPLETED":153,"FLAG_RUSTURF_TUNNEL_OPENED":199,"FLAG_SCOTT_CALL_BATTLE_FRONTIER":114,"FLAG_SCOTT_CALL_FORTREE_GYM":138,"FLAG_SCOTT_GIVES_BATTLE_POINTS":465,"FLAG_SECRET_BASE_REGISTRY_ENABLED":268,"FLAG_SET_WALL_CLOCK":81,"FLAG_SHOWN_AURORA_TICKET":431,"FLAG_SHOWN_BOX_WAS_FULL_MESSAGE":2263,"FLAG_SHOWN_EON_TICKET":430,"FLAG_SHOWN_MYSTIC_TICKET":475,"FLAG_SHOWN_OLD_SEA_MAP":432,"FLAG_SMART_PAINTING_MADE":163,"FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE":158,"FLAG_SPECIAL_FLAG_UNUSED_0x4003":16387,"FLAG_SS_TIDAL_DISABLED":84,"FLAG_STEVEN_GUIDES_TO_CAVE_OF_ORIGIN":307,"FLAG_STORING_ITEMS_IN_PYRAMID_BAG":16388,"FLAG_SYS_ARENA_GOLD":2251,"FLAG_SYS_ARENA_SILVER":2250,"FLAG_SYS_BRAILLE_DIG":2223,"FLAG_SYS_BRAILLE_REGICE_COMPLETED":2225,"FLAG_SYS_B_DASH":2240,"FLAG_SYS_CAVE_BATTLE":2201,"FLAG_SYS_CAVE_SHIP":2199,"FLAG_SYS_CAVE_WONDER":2200,"FLAG_SYS_CHANGED_DEWFORD_TREND":2195,"FLAG_SYS_CHAT_USED":2149,"FLAG_SYS_CLOCK_SET":2197,"FLAG_SYS_CRUISE_MODE":2189,"FLAG_SYS_CTRL_OBJ_DELETE":2241,"FLAG_SYS_CYCLING_ROAD":2187,"FLAG_SYS_DOME_GOLD":2247,"FLAG_SYS_DOME_SILVER":2246,"FLAG_SYS_ENC_DOWN_ITEM":2222,"FLAG_SYS_ENC_UP_ITEM":2221,"FLAG_SYS_FACTORY_GOLD":2253,"FLAG_SYS_FACTORY_SILVER":2252,"FLAG_SYS_FRONTIER_PASS":2258,"FLAG_SYS_GAME_CLEAR":2148,"FLAG_SYS_HIPSTER_MEET":2150,"FLAG_SYS_MIX_RECORD":2196,"FLAG_SYS_MYSTERY_EVENT_ENABLE":2220,"FLAG_SYS_MYSTERY_GIFT_ENABLE":2267,"FLAG_SYS_NATIONAL_DEX":2198,"FLAG_SYS_PALACE_GOLD":2249,"FLAG_SYS_PALACE_SILVER":2248,"FLAG_SYS_PC_LANETTE":2219,"FLAG_SYS_PIKE_GOLD":2255,"FLAG_SYS_PIKE_SILVER":2254,"FLAG_SYS_POKEDEX_GET":2145,"FLAG_SYS_POKEMON_GET":2144,"FLAG_SYS_POKENAV_GET":2146,"FLAG_SYS_PYRAMID_GOLD":2257,"FLAG_SYS_PYRAMID_SILVER":2256,"FLAG_SYS_REGIROCK_PUZZLE_COMPLETED":2224,"FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED":2226,"FLAG_SYS_RESET_RTC_ENABLE":2242,"FLAG_SYS_RIBBON_GET":2203,"FLAG_SYS_SAFARI_MODE":2188,"FLAG_SYS_SHOAL_ITEM":2239,"FLAG_SYS_SHOAL_TIDE":2202,"FLAG_SYS_TOWER_GOLD":2245,"FLAG_SYS_TOWER_SILVER":2244,"FLAG_SYS_TV_HOME":2192,"FLAG_SYS_TV_LATIAS_LATIOS":2237,"FLAG_SYS_TV_START":2194,"FLAG_SYS_TV_WATCH":2193,"FLAG_SYS_USE_FLASH":2184,"FLAG_SYS_USE_STRENGTH":2185,"FLAG_SYS_WEATHER_CTRL":2186,"FLAG_TEAM_AQUA_ESCAPED_IN_SUBMARINE":112,"FLAG_TEMP_1":1,"FLAG_TEMP_10":16,"FLAG_TEMP_11":17,"FLAG_TEMP_12":18,"FLAG_TEMP_13":19,"FLAG_TEMP_14":20,"FLAG_TEMP_15":21,"FLAG_TEMP_16":22,"FLAG_TEMP_17":23,"FLAG_TEMP_18":24,"FLAG_TEMP_19":25,"FLAG_TEMP_1A":26,"FLAG_TEMP_1B":27,"FLAG_TEMP_1C":28,"FLAG_TEMP_1D":29,"FLAG_TEMP_1E":30,"FLAG_TEMP_1F":31,"FLAG_TEMP_2":2,"FLAG_TEMP_3":3,"FLAG_TEMP_4":4,"FLAG_TEMP_5":5,"FLAG_TEMP_6":6,"FLAG_TEMP_7":7,"FLAG_TEMP_8":8,"FLAG_TEMP_9":9,"FLAG_TEMP_A":10,"FLAG_TEMP_B":11,"FLAG_TEMP_C":12,"FLAG_TEMP_D":13,"FLAG_TEMP_E":14,"FLAG_TEMP_F":15,"FLAG_THANKED_FOR_PLAYING_WITH_WALLY":135,"FLAG_TOUGH_PAINTING_MADE":164,"FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_1":194,"FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_2":195,"FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_3":196,"FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_4":197,"FLAG_TRICK_HOUSE_PUZZLE_7_SWITCH_5":198,"FLAG_TV_EXPLAINED":98,"FLAG_UNKNOWN_0x363":867,"FLAG_UNKNOWN_0x393":915,"FLAG_UNUSED_0x022":34,"FLAG_UNUSED_0x023":35,"FLAG_UNUSED_0x024":36,"FLAG_UNUSED_0x025":37,"FLAG_UNUSED_0x026":38,"FLAG_UNUSED_0x027":39,"FLAG_UNUSED_0x028":40,"FLAG_UNUSED_0x029":41,"FLAG_UNUSED_0x02A":42,"FLAG_UNUSED_0x02B":43,"FLAG_UNUSED_0x02C":44,"FLAG_UNUSED_0x02D":45,"FLAG_UNUSED_0x02E":46,"FLAG_UNUSED_0x02F":47,"FLAG_UNUSED_0x030":48,"FLAG_UNUSED_0x031":49,"FLAG_UNUSED_0x032":50,"FLAG_UNUSED_0x033":51,"FLAG_UNUSED_0x034":52,"FLAG_UNUSED_0x035":53,"FLAG_UNUSED_0x036":54,"FLAG_UNUSED_0x037":55,"FLAG_UNUSED_0x038":56,"FLAG_UNUSED_0x039":57,"FLAG_UNUSED_0x03A":58,"FLAG_UNUSED_0x03B":59,"FLAG_UNUSED_0x03C":60,"FLAG_UNUSED_0x03D":61,"FLAG_UNUSED_0x03E":62,"FLAG_UNUSED_0x03F":63,"FLAG_UNUSED_0x040":64,"FLAG_UNUSED_0x041":65,"FLAG_UNUSED_0x042":66,"FLAG_UNUSED_0x043":67,"FLAG_UNUSED_0x044":68,"FLAG_UNUSED_0x045":69,"FLAG_UNUSED_0x046":70,"FLAG_UNUSED_0x047":71,"FLAG_UNUSED_0x048":72,"FLAG_UNUSED_0x049":73,"FLAG_UNUSED_0x04A":74,"FLAG_UNUSED_0x04B":75,"FLAG_UNUSED_0x04C":76,"FLAG_UNUSED_0x04D":77,"FLAG_UNUSED_0x04E":78,"FLAG_UNUSED_0x04F":79,"FLAG_UNUSED_0x055":85,"FLAG_UNUSED_0x0E9":233,"FLAG_UNUSED_0x1AA":426,"FLAG_UNUSED_0x1AB":427,"FLAG_UNUSED_0x1DA":474,"FLAG_UNUSED_0x1DE":478,"FLAG_UNUSED_0x1DF":479,"FLAG_UNUSED_0x1E0":480,"FLAG_UNUSED_0x1E1":481,"FLAG_UNUSED_0x264":612,"FLAG_UNUSED_0x265":613,"FLAG_UNUSED_0x266":614,"FLAG_UNUSED_0x267":615,"FLAG_UNUSED_0x268":616,"FLAG_UNUSED_0x269":617,"FLAG_UNUSED_0x26A":618,"FLAG_UNUSED_0x26B":619,"FLAG_UNUSED_0x26C":620,"FLAG_UNUSED_0x26D":621,"FLAG_UNUSED_0x26E":622,"FLAG_UNUSED_0x26F":623,"FLAG_UNUSED_0x270":624,"FLAG_UNUSED_0x271":625,"FLAG_UNUSED_0x272":626,"FLAG_UNUSED_0x273":627,"FLAG_UNUSED_0x274":628,"FLAG_UNUSED_0x275":629,"FLAG_UNUSED_0x276":630,"FLAG_UNUSED_0x277":631,"FLAG_UNUSED_0x278":632,"FLAG_UNUSED_0x279":633,"FLAG_UNUSED_0x27A":634,"FLAG_UNUSED_0x27B":635,"FLAG_UNUSED_0x27C":636,"FLAG_UNUSED_0x27D":637,"FLAG_UNUSED_0x27E":638,"FLAG_UNUSED_0x27F":639,"FLAG_UNUSED_0x280":640,"FLAG_UNUSED_0x281":641,"FLAG_UNUSED_0x282":642,"FLAG_UNUSED_0x283":643,"FLAG_UNUSED_0x284":644,"FLAG_UNUSED_0x285":645,"FLAG_UNUSED_0x286":646,"FLAG_UNUSED_0x287":647,"FLAG_UNUSED_0x288":648,"FLAG_UNUSED_0x289":649,"FLAG_UNUSED_0x28A":650,"FLAG_UNUSED_0x28B":651,"FLAG_UNUSED_0x28C":652,"FLAG_UNUSED_0x28D":653,"FLAG_UNUSED_0x28E":654,"FLAG_UNUSED_0x28F":655,"FLAG_UNUSED_0x290":656,"FLAG_UNUSED_0x291":657,"FLAG_UNUSED_0x292":658,"FLAG_UNUSED_0x293":659,"FLAG_UNUSED_0x294":660,"FLAG_UNUSED_0x295":661,"FLAG_UNUSED_0x296":662,"FLAG_UNUSED_0x297":663,"FLAG_UNUSED_0x298":664,"FLAG_UNUSED_0x299":665,"FLAG_UNUSED_0x29A":666,"FLAG_UNUSED_0x29B":667,"FLAG_UNUSED_0x29C":668,"FLAG_UNUSED_0x29D":669,"FLAG_UNUSED_0x29E":670,"FLAG_UNUSED_0x29F":671,"FLAG_UNUSED_0x2A0":672,"FLAG_UNUSED_0x2A1":673,"FLAG_UNUSED_0x2A2":674,"FLAG_UNUSED_0x2A3":675,"FLAG_UNUSED_0x2A4":676,"FLAG_UNUSED_0x2A5":677,"FLAG_UNUSED_0x2A6":678,"FLAG_UNUSED_0x2A7":679,"FLAG_UNUSED_0x2A8":680,"FLAG_UNUSED_0x2A9":681,"FLAG_UNUSED_0x2AA":682,"FLAG_UNUSED_0x2AB":683,"FLAG_UNUSED_0x2AC":684,"FLAG_UNUSED_0x2AD":685,"FLAG_UNUSED_0x2AE":686,"FLAG_UNUSED_0x2AF":687,"FLAG_UNUSED_0x2B0":688,"FLAG_UNUSED_0x2B1":689,"FLAG_UNUSED_0x2B2":690,"FLAG_UNUSED_0x2B3":691,"FLAG_UNUSED_0x2B4":692,"FLAG_UNUSED_0x2B5":693,"FLAG_UNUSED_0x2B6":694,"FLAG_UNUSED_0x2B7":695,"FLAG_UNUSED_0x2B8":696,"FLAG_UNUSED_0x2B9":697,"FLAG_UNUSED_0x2BA":698,"FLAG_UNUSED_0x2BB":699,"FLAG_UNUSED_0x468":1128,"FLAG_UNUSED_0x470":1136,"FLAG_UNUSED_0x472":1138,"FLAG_UNUSED_0x479":1145,"FLAG_UNUSED_0x4A8":1192,"FLAG_UNUSED_0x4A9":1193,"FLAG_UNUSED_0x4AA":1194,"FLAG_UNUSED_0x4AB":1195,"FLAG_UNUSED_0x4AC":1196,"FLAG_UNUSED_0x4AD":1197,"FLAG_UNUSED_0x4AE":1198,"FLAG_UNUSED_0x4AF":1199,"FLAG_UNUSED_0x4B0":1200,"FLAG_UNUSED_0x4B1":1201,"FLAG_UNUSED_0x4B2":1202,"FLAG_UNUSED_0x4B3":1203,"FLAG_UNUSED_0x4B4":1204,"FLAG_UNUSED_0x4B5":1205,"FLAG_UNUSED_0x4B6":1206,"FLAG_UNUSED_0x4B7":1207,"FLAG_UNUSED_0x4B8":1208,"FLAG_UNUSED_0x4B9":1209,"FLAG_UNUSED_0x4BA":1210,"FLAG_UNUSED_0x4BB":1211,"FLAG_UNUSED_0x4BC":1212,"FLAG_UNUSED_0x4BD":1213,"FLAG_UNUSED_0x4BE":1214,"FLAG_UNUSED_0x4BF":1215,"FLAG_UNUSED_0x4C0":1216,"FLAG_UNUSED_0x4C1":1217,"FLAG_UNUSED_0x4C2":1218,"FLAG_UNUSED_0x4C3":1219,"FLAG_UNUSED_0x4C4":1220,"FLAG_UNUSED_0x4C5":1221,"FLAG_UNUSED_0x4C6":1222,"FLAG_UNUSED_0x4C7":1223,"FLAG_UNUSED_0x4C8":1224,"FLAG_UNUSED_0x4C9":1225,"FLAG_UNUSED_0x4CA":1226,"FLAG_UNUSED_0x4CB":1227,"FLAG_UNUSED_0x4CC":1228,"FLAG_UNUSED_0x4CD":1229,"FLAG_UNUSED_0x4CE":1230,"FLAG_UNUSED_0x4CF":1231,"FLAG_UNUSED_0x4D0":1232,"FLAG_UNUSED_0x4D1":1233,"FLAG_UNUSED_0x4D2":1234,"FLAG_UNUSED_0x4D3":1235,"FLAG_UNUSED_0x4D4":1236,"FLAG_UNUSED_0x4D5":1237,"FLAG_UNUSED_0x4D6":1238,"FLAG_UNUSED_0x4D7":1239,"FLAG_UNUSED_0x4D8":1240,"FLAG_UNUSED_0x4D9":1241,"FLAG_UNUSED_0x4DA":1242,"FLAG_UNUSED_0x4DB":1243,"FLAG_UNUSED_0x4DC":1244,"FLAG_UNUSED_0x4DD":1245,"FLAG_UNUSED_0x4DE":1246,"FLAG_UNUSED_0x4DF":1247,"FLAG_UNUSED_0x4E0":1248,"FLAG_UNUSED_0x4E1":1249,"FLAG_UNUSED_0x4E2":1250,"FLAG_UNUSED_0x4E3":1251,"FLAG_UNUSED_0x4E4":1252,"FLAG_UNUSED_0x4E5":1253,"FLAG_UNUSED_0x4E6":1254,"FLAG_UNUSED_0x4E7":1255,"FLAG_UNUSED_0x4E8":1256,"FLAG_UNUSED_0x4E9":1257,"FLAG_UNUSED_0x4EA":1258,"FLAG_UNUSED_0x4EB":1259,"FLAG_UNUSED_0x4EC":1260,"FLAG_UNUSED_0x4ED":1261,"FLAG_UNUSED_0x4EE":1262,"FLAG_UNUSED_0x4EF":1263,"FLAG_UNUSED_0x4F9":1273,"FLAG_UNUSED_0x4FA":1274,"FLAG_UNUSED_0x4FF":1279,"FLAG_UNUSED_0x863":2147,"FLAG_UNUSED_0x881":2177,"FLAG_UNUSED_0x882":2178,"FLAG_UNUSED_0x883":2179,"FLAG_UNUSED_0x884":2180,"FLAG_UNUSED_0x885":2181,"FLAG_UNUSED_0x886":2182,"FLAG_UNUSED_0x887":2183,"FLAG_UNUSED_0x88E":2190,"FLAG_UNUSED_0x88F":2191,"FLAG_UNUSED_0x8E3":2275,"FLAG_UNUSED_0x8E5":2277,"FLAG_UNUSED_0x8E6":2278,"FLAG_UNUSED_0x8E7":2279,"FLAG_UNUSED_0x8E8":2280,"FLAG_UNUSED_0x8E9":2281,"FLAG_UNUSED_0x8EA":2282,"FLAG_UNUSED_0x8EB":2283,"FLAG_UNUSED_0x8EC":2284,"FLAG_UNUSED_0x8ED":2285,"FLAG_UNUSED_0x8EE":2286,"FLAG_UNUSED_0x8EF":2287,"FLAG_UNUSED_0x8F0":2288,"FLAG_UNUSED_0x8F1":2289,"FLAG_UNUSED_0x8F2":2290,"FLAG_UNUSED_0x8F3":2291,"FLAG_UNUSED_0x8F4":2292,"FLAG_UNUSED_0x8F5":2293,"FLAG_UNUSED_0x8F6":2294,"FLAG_UNUSED_0x8F7":2295,"FLAG_UNUSED_0x8F8":2296,"FLAG_UNUSED_0x8F9":2297,"FLAG_UNUSED_0x8FA":2298,"FLAG_UNUSED_0x8FB":2299,"FLAG_UNUSED_0x8FC":2300,"FLAG_UNUSED_0x8FD":2301,"FLAG_UNUSED_0x8FE":2302,"FLAG_UNUSED_0x8FF":2303,"FLAG_UNUSED_0x900":2304,"FLAG_UNUSED_0x901":2305,"FLAG_UNUSED_0x902":2306,"FLAG_UNUSED_0x903":2307,"FLAG_UNUSED_0x904":2308,"FLAG_UNUSED_0x905":2309,"FLAG_UNUSED_0x906":2310,"FLAG_UNUSED_0x907":2311,"FLAG_UNUSED_0x908":2312,"FLAG_UNUSED_0x909":2313,"FLAG_UNUSED_0x90A":2314,"FLAG_UNUSED_0x90B":2315,"FLAG_UNUSED_0x90C":2316,"FLAG_UNUSED_0x90D":2317,"FLAG_UNUSED_0x90E":2318,"FLAG_UNUSED_0x90F":2319,"FLAG_UNUSED_0x910":2320,"FLAG_UNUSED_0x911":2321,"FLAG_UNUSED_0x912":2322,"FLAG_UNUSED_0x913":2323,"FLAG_UNUSED_0x914":2324,"FLAG_UNUSED_0x915":2325,"FLAG_UNUSED_0x916":2326,"FLAG_UNUSED_0x917":2327,"FLAG_UNUSED_0x918":2328,"FLAG_UNUSED_0x919":2329,"FLAG_UNUSED_0x91A":2330,"FLAG_UNUSED_0x91B":2331,"FLAG_UNUSED_0x91C":2332,"FLAG_UNUSED_0x91D":2333,"FLAG_UNUSED_0x91E":2334,"FLAG_UNUSED_0x91F":2335,"FLAG_UNUSED_0x920":2336,"FLAG_UNUSED_0x923":2339,"FLAG_UNUSED_0x924":2340,"FLAG_UNUSED_0x925":2341,"FLAG_UNUSED_0x926":2342,"FLAG_UNUSED_0x927":2343,"FLAG_UNUSED_0x928":2344,"FLAG_UNUSED_0x929":2345,"FLAG_UNUSED_0x933":2355,"FLAG_UNUSED_0x935":2357,"FLAG_UNUSED_0x936":2358,"FLAG_UNUSED_0x937":2359,"FLAG_UNUSED_0x938":2360,"FLAG_UNUSED_0x939":2361,"FLAG_UNUSED_0x93A":2362,"FLAG_UNUSED_0x93B":2363,"FLAG_UNUSED_0x93C":2364,"FLAG_UNUSED_0x93D":2365,"FLAG_UNUSED_0x93E":2366,"FLAG_UNUSED_0x93F":2367,"FLAG_UNUSED_0x940":2368,"FLAG_UNUSED_0x941":2369,"FLAG_UNUSED_0x942":2370,"FLAG_UNUSED_0x943":2371,"FLAG_UNUSED_0x944":2372,"FLAG_UNUSED_0x945":2373,"FLAG_UNUSED_0x946":2374,"FLAG_UNUSED_0x947":2375,"FLAG_UNUSED_0x948":2376,"FLAG_UNUSED_0x949":2377,"FLAG_UNUSED_0x94A":2378,"FLAG_UNUSED_0x94B":2379,"FLAG_UNUSED_0x94C":2380,"FLAG_UNUSED_0x94D":2381,"FLAG_UNUSED_0x94E":2382,"FLAG_UNUSED_0x94F":2383,"FLAG_UNUSED_0x950":2384,"FLAG_UNUSED_0x951":2385,"FLAG_UNUSED_0x952":2386,"FLAG_UNUSED_0x953":2387,"FLAG_UNUSED_0x954":2388,"FLAG_UNUSED_0x955":2389,"FLAG_UNUSED_0x956":2390,"FLAG_UNUSED_0x957":2391,"FLAG_UNUSED_0x958":2392,"FLAG_UNUSED_0x959":2393,"FLAG_UNUSED_0x95A":2394,"FLAG_UNUSED_0x95B":2395,"FLAG_UNUSED_0x95C":2396,"FLAG_UNUSED_0x95D":2397,"FLAG_UNUSED_0x95E":2398,"FLAG_UNUSED_0x95F":2399,"FLAG_UNUSED_RS_LEGENDARY_BATTLE_DONE":113,"FLAG_USED_ROOM_1_KEY":240,"FLAG_USED_ROOM_2_KEY":241,"FLAG_USED_ROOM_4_KEY":242,"FLAG_USED_ROOM_6_KEY":243,"FLAG_USED_STORAGE_KEY":239,"FLAG_VISITED_DEWFORD_TOWN":2161,"FLAG_VISITED_EVER_GRANDE_CITY":2174,"FLAG_VISITED_FALLARBOR_TOWN":2163,"FLAG_VISITED_FORTREE_CITY":2170,"FLAG_VISITED_LAVARIDGE_TOWN":2162,"FLAG_VISITED_LILYCOVE_CITY":2171,"FLAG_VISITED_LITTLEROOT_TOWN":2159,"FLAG_VISITED_MAUVILLE_CITY":2168,"FLAG_VISITED_MOSSDEEP_CITY":2172,"FLAG_VISITED_OLDALE_TOWN":2160,"FLAG_VISITED_PACIFIDLOG_TOWN":2165,"FLAG_VISITED_PETALBURG_CITY":2166,"FLAG_VISITED_RUSTBORO_CITY":2169,"FLAG_VISITED_SLATEPORT_CITY":2167,"FLAG_VISITED_SOOTOPOLIS_CITY":2173,"FLAG_VISITED_VERDANTURF_TOWN":2164,"FLAG_WALLACE_GOES_TO_SKY_PILLAR":311,"FLAG_WALLY_SPEECH":193,"FLAG_WATTSON_REMATCH_AVAILABLE":91,"FLAG_WHITEOUT_TO_LAVARIDGE":108,"FLAG_WINGULL_DELIVERED_MAIL":224,"FLAG_WINGULL_SENT_ON_ERRAND":222,"FLAG_WONDER_CARD_UNUSED_1":317,"FLAG_WONDER_CARD_UNUSED_10":326,"FLAG_WONDER_CARD_UNUSED_11":327,"FLAG_WONDER_CARD_UNUSED_12":328,"FLAG_WONDER_CARD_UNUSED_13":329,"FLAG_WONDER_CARD_UNUSED_14":330,"FLAG_WONDER_CARD_UNUSED_15":331,"FLAG_WONDER_CARD_UNUSED_16":332,"FLAG_WONDER_CARD_UNUSED_17":333,"FLAG_WONDER_CARD_UNUSED_2":318,"FLAG_WONDER_CARD_UNUSED_3":319,"FLAG_WONDER_CARD_UNUSED_4":320,"FLAG_WONDER_CARD_UNUSED_5":321,"FLAG_WONDER_CARD_UNUSED_6":322,"FLAG_WONDER_CARD_UNUSED_7":323,"FLAG_WONDER_CARD_UNUSED_8":324,"FLAG_WONDER_CARD_UNUSED_9":325,"GOOD_ROD":1,"ITEMS_COUNT":377,"ITEM_034":52,"ITEM_035":53,"ITEM_036":54,"ITEM_037":55,"ITEM_038":56,"ITEM_039":57,"ITEM_03A":58,"ITEM_03B":59,"ITEM_03C":60,"ITEM_03D":61,"ITEM_03E":62,"ITEM_048":72,"ITEM_052":82,"ITEM_057":87,"ITEM_058":88,"ITEM_059":89,"ITEM_05A":90,"ITEM_05B":91,"ITEM_05C":92,"ITEM_063":99,"ITEM_064":100,"ITEM_065":101,"ITEM_066":102,"ITEM_069":105,"ITEM_071":113,"ITEM_072":114,"ITEM_073":115,"ITEM_074":116,"ITEM_075":117,"ITEM_076":118,"ITEM_077":119,"ITEM_078":120,"ITEM_0EA":234,"ITEM_0EB":235,"ITEM_0EC":236,"ITEM_0ED":237,"ITEM_0EE":238,"ITEM_0EF":239,"ITEM_0F0":240,"ITEM_0F1":241,"ITEM_0F2":242,"ITEM_0F3":243,"ITEM_0F4":244,"ITEM_0F5":245,"ITEM_0F6":246,"ITEM_0F7":247,"ITEM_0F8":248,"ITEM_0F9":249,"ITEM_0FA":250,"ITEM_0FB":251,"ITEM_0FC":252,"ITEM_0FD":253,"ITEM_10B":267,"ITEM_15B":347,"ITEM_15C":348,"ITEM_ACRO_BIKE":272,"ITEM_AGUAV_BERRY":146,"ITEM_AMULET_COIN":189,"ITEM_ANTIDOTE":14,"ITEM_APICOT_BERRY":172,"ITEM_ARCHIPELAGO_PROGRESSION":112,"ITEM_ASPEAR_BERRY":137,"ITEM_AURORA_TICKET":371,"ITEM_AWAKENING":17,"ITEM_BADGE_1":226,"ITEM_BADGE_2":227,"ITEM_BADGE_3":228,"ITEM_BADGE_4":229,"ITEM_BADGE_5":230,"ITEM_BADGE_6":231,"ITEM_BADGE_7":232,"ITEM_BADGE_8":233,"ITEM_BASEMENT_KEY":271,"ITEM_BEAD_MAIL":127,"ITEM_BELUE_BERRY":167,"ITEM_BERRY_JUICE":44,"ITEM_BERRY_POUCH":365,"ITEM_BICYCLE":360,"ITEM_BIG_MUSHROOM":104,"ITEM_BIG_PEARL":107,"ITEM_BIKE_VOUCHER":352,"ITEM_BLACK_BELT":207,"ITEM_BLACK_FLUTE":42,"ITEM_BLACK_GLASSES":206,"ITEM_BLUE_FLUTE":39,"ITEM_BLUE_ORB":277,"ITEM_BLUE_SCARF":255,"ITEM_BLUE_SHARD":49,"ITEM_BLUK_BERRY":149,"ITEM_BRIGHT_POWDER":179,"ITEM_BURN_HEAL":15,"ITEM_B_USE_MEDICINE":1,"ITEM_B_USE_OTHER":2,"ITEM_CALCIUM":67,"ITEM_CARBOS":66,"ITEM_CARD_KEY":355,"ITEM_CHARCOAL":215,"ITEM_CHERI_BERRY":133,"ITEM_CHESTO_BERRY":134,"ITEM_CHOICE_BAND":186,"ITEM_CLAW_FOSSIL":287,"ITEM_CLEANSE_TAG":190,"ITEM_COIN_CASE":260,"ITEM_CONTEST_PASS":266,"ITEM_CORNN_BERRY":159,"ITEM_DEEP_SEA_SCALE":193,"ITEM_DEEP_SEA_TOOTH":192,"ITEM_DEVON_GOODS":269,"ITEM_DEVON_SCOPE":288,"ITEM_DIRE_HIT":74,"ITEM_DIVE_BALL":7,"ITEM_DOME_FOSSIL":358,"ITEM_DRAGON_FANG":216,"ITEM_DRAGON_SCALE":201,"ITEM_DREAM_MAIL":130,"ITEM_DURIN_BERRY":166,"ITEM_ELIXIR":36,"ITEM_ENERGY_POWDER":30,"ITEM_ENERGY_ROOT":31,"ITEM_ENIGMA_BERRY":175,"ITEM_EON_TICKET":275,"ITEM_ESCAPE_ROPE":85,"ITEM_ETHER":34,"ITEM_EVERSTONE":195,"ITEM_EXP_SHARE":182,"ITEM_FAB_MAIL":131,"ITEM_FAME_CHECKER":363,"ITEM_FIGY_BERRY":143,"ITEM_FIRE_STONE":95,"ITEM_FLUFFY_TAIL":81,"ITEM_FOCUS_BAND":196,"ITEM_FRESH_WATER":26,"ITEM_FULL_HEAL":23,"ITEM_FULL_RESTORE":19,"ITEM_GANLON_BERRY":169,"ITEM_GLITTER_MAIL":123,"ITEM_GOLD_TEETH":353,"ITEM_GOOD_ROD":263,"ITEM_GO_GOGGLES":279,"ITEM_GREAT_BALL":3,"ITEM_GREEN_SCARF":257,"ITEM_GREEN_SHARD":51,"ITEM_GREPA_BERRY":157,"ITEM_GUARD_SPEC":73,"ITEM_HARBOR_MAIL":122,"ITEM_HARD_STONE":204,"ITEM_HEAL_POWDER":32,"ITEM_HEART_SCALE":111,"ITEM_HELIX_FOSSIL":357,"ITEM_HM01":339,"ITEM_HM01_CUT":339,"ITEM_HM02":340,"ITEM_HM02_FLY":340,"ITEM_HM03":341,"ITEM_HM03_SURF":341,"ITEM_HM04":342,"ITEM_HM04_STRENGTH":342,"ITEM_HM05":343,"ITEM_HM05_FLASH":343,"ITEM_HM06":344,"ITEM_HM06_ROCK_SMASH":344,"ITEM_HM07":345,"ITEM_HM07_WATERFALL":345,"ITEM_HM08":346,"ITEM_HM08_DIVE":346,"ITEM_HONDEW_BERRY":156,"ITEM_HP_UP":63,"ITEM_HYPER_POTION":21,"ITEM_IAPAPA_BERRY":147,"ITEM_ICE_HEAL":16,"ITEM_IRON":65,"ITEM_ITEMFINDER":261,"ITEM_KELPSY_BERRY":154,"ITEM_KINGS_ROCK":187,"ITEM_LANSAT_BERRY":173,"ITEM_LAVA_COOKIE":38,"ITEM_LAX_INCENSE":221,"ITEM_LEAF_STONE":98,"ITEM_LEFTOVERS":200,"ITEM_LEMONADE":28,"ITEM_LEPPA_BERRY":138,"ITEM_LETTER":274,"ITEM_LIECHI_BERRY":168,"ITEM_LIFT_KEY":356,"ITEM_LIGHT_BALL":202,"ITEM_LIST_END":65535,"ITEM_LUCKY_EGG":197,"ITEM_LUCKY_PUNCH":222,"ITEM_LUM_BERRY":141,"ITEM_LUXURY_BALL":11,"ITEM_MACHO_BRACE":181,"ITEM_MACH_BIKE":259,"ITEM_MAGMA_EMBLEM":375,"ITEM_MAGNET":208,"ITEM_MAGOST_BERRY":160,"ITEM_MAGO_BERRY":145,"ITEM_MASTER_BALL":1,"ITEM_MAX_ELIXIR":37,"ITEM_MAX_ETHER":35,"ITEM_MAX_POTION":20,"ITEM_MAX_REPEL":84,"ITEM_MAX_REVIVE":25,"ITEM_MECH_MAIL":124,"ITEM_MENTAL_HERB":185,"ITEM_METAL_COAT":199,"ITEM_METAL_POWDER":223,"ITEM_METEORITE":280,"ITEM_MIRACLE_SEED":205,"ITEM_MOOMOO_MILK":29,"ITEM_MOON_STONE":94,"ITEM_MYSTIC_TICKET":370,"ITEM_MYSTIC_WATER":209,"ITEM_NANAB_BERRY":150,"ITEM_NEST_BALL":8,"ITEM_NET_BALL":6,"ITEM_NEVER_MELT_ICE":212,"ITEM_NOMEL_BERRY":162,"ITEM_NONE":0,"ITEM_NUGGET":110,"ITEM_OAKS_PARCEL":349,"ITEM_OLD_AMBER":354,"ITEM_OLD_ROD":262,"ITEM_OLD_SEA_MAP":376,"ITEM_ORANGE_MAIL":121,"ITEM_ORAN_BERRY":139,"ITEM_PAMTRE_BERRY":164,"ITEM_PARALYZE_HEAL":18,"ITEM_PEARL":106,"ITEM_PECHA_BERRY":135,"ITEM_PERSIM_BERRY":140,"ITEM_PETAYA_BERRY":171,"ITEM_PINAP_BERRY":152,"ITEM_PINK_SCARF":256,"ITEM_POISON_BARB":211,"ITEM_POKEBLOCK_CASE":273,"ITEM_POKE_BALL":4,"ITEM_POKE_DOLL":80,"ITEM_POKE_FLUTE":350,"ITEM_POMEG_BERRY":153,"ITEM_POTION":13,"ITEM_POWDER_JAR":372,"ITEM_PP_MAX":71,"ITEM_PP_UP":69,"ITEM_PREMIER_BALL":12,"ITEM_PROTEIN":64,"ITEM_QUALOT_BERRY":155,"ITEM_QUICK_CLAW":183,"ITEM_RABUTA_BERRY":161,"ITEM_RAINBOW_PASS":368,"ITEM_RARE_CANDY":68,"ITEM_RAWST_BERRY":136,"ITEM_RAZZ_BERRY":148,"ITEM_RED_FLUTE":41,"ITEM_RED_ORB":276,"ITEM_RED_SCARF":254,"ITEM_RED_SHARD":48,"ITEM_REPEAT_BALL":9,"ITEM_REPEL":86,"ITEM_RETRO_MAIL":132,"ITEM_REVIVAL_HERB":33,"ITEM_REVIVE":24,"ITEM_ROOM_1_KEY":281,"ITEM_ROOM_2_KEY":282,"ITEM_ROOM_4_KEY":283,"ITEM_ROOM_6_KEY":284,"ITEM_ROOT_FOSSIL":286,"ITEM_RUBY":373,"ITEM_SACRED_ASH":45,"ITEM_SAFARI_BALL":5,"ITEM_SALAC_BERRY":170,"ITEM_SAPPHIRE":374,"ITEM_SCANNER":278,"ITEM_SCOPE_LENS":198,"ITEM_SEA_INCENSE":220,"ITEM_SECRET_KEY":351,"ITEM_SHADOW_MAIL":128,"ITEM_SHARP_BEAK":210,"ITEM_SHELL_BELL":219,"ITEM_SHOAL_SALT":46,"ITEM_SHOAL_SHELL":47,"ITEM_SILK_SCARF":217,"ITEM_SILPH_SCOPE":359,"ITEM_SILVER_POWDER":188,"ITEM_SITRUS_BERRY":142,"ITEM_SMOKE_BALL":194,"ITEM_SODA_POP":27,"ITEM_SOFT_SAND":203,"ITEM_SOOTHE_BELL":184,"ITEM_SOOT_SACK":270,"ITEM_SOUL_DEW":191,"ITEM_SPELL_TAG":213,"ITEM_SPELON_BERRY":163,"ITEM_SS_TICKET":265,"ITEM_STARDUST":108,"ITEM_STARF_BERRY":174,"ITEM_STAR_PIECE":109,"ITEM_STICK":225,"ITEM_STORAGE_KEY":285,"ITEM_SUN_STONE":93,"ITEM_SUPER_POTION":22,"ITEM_SUPER_REPEL":83,"ITEM_SUPER_ROD":264,"ITEM_TAMATO_BERRY":158,"ITEM_TEA":369,"ITEM_TEACHY_TV":366,"ITEM_THICK_CLUB":224,"ITEM_THUNDER_STONE":96,"ITEM_TIMER_BALL":10,"ITEM_TINY_MUSHROOM":103,"ITEM_TM01":289,"ITEM_TM01_FOCUS_PUNCH":289,"ITEM_TM02":290,"ITEM_TM02_DRAGON_CLAW":290,"ITEM_TM03":291,"ITEM_TM03_WATER_PULSE":291,"ITEM_TM04":292,"ITEM_TM04_CALM_MIND":292,"ITEM_TM05":293,"ITEM_TM05_ROAR":293,"ITEM_TM06":294,"ITEM_TM06_TOXIC":294,"ITEM_TM07":295,"ITEM_TM07_HAIL":295,"ITEM_TM08":296,"ITEM_TM08_BULK_UP":296,"ITEM_TM09":297,"ITEM_TM09_BULLET_SEED":297,"ITEM_TM10":298,"ITEM_TM10_HIDDEN_POWER":298,"ITEM_TM11":299,"ITEM_TM11_SUNNY_DAY":299,"ITEM_TM12":300,"ITEM_TM12_TAUNT":300,"ITEM_TM13":301,"ITEM_TM13_ICE_BEAM":301,"ITEM_TM14":302,"ITEM_TM14_BLIZZARD":302,"ITEM_TM15":303,"ITEM_TM15_HYPER_BEAM":303,"ITEM_TM16":304,"ITEM_TM16_LIGHT_SCREEN":304,"ITEM_TM17":305,"ITEM_TM17_PROTECT":305,"ITEM_TM18":306,"ITEM_TM18_RAIN_DANCE":306,"ITEM_TM19":307,"ITEM_TM19_GIGA_DRAIN":307,"ITEM_TM20":308,"ITEM_TM20_SAFEGUARD":308,"ITEM_TM21":309,"ITEM_TM21_FRUSTRATION":309,"ITEM_TM22":310,"ITEM_TM22_SOLAR_BEAM":310,"ITEM_TM23":311,"ITEM_TM23_IRON_TAIL":311,"ITEM_TM24":312,"ITEM_TM24_THUNDERBOLT":312,"ITEM_TM25":313,"ITEM_TM25_THUNDER":313,"ITEM_TM26":314,"ITEM_TM26_EARTHQUAKE":314,"ITEM_TM27":315,"ITEM_TM27_RETURN":315,"ITEM_TM28":316,"ITEM_TM28_DIG":316,"ITEM_TM29":317,"ITEM_TM29_PSYCHIC":317,"ITEM_TM30":318,"ITEM_TM30_SHADOW_BALL":318,"ITEM_TM31":319,"ITEM_TM31_BRICK_BREAK":319,"ITEM_TM32":320,"ITEM_TM32_DOUBLE_TEAM":320,"ITEM_TM33":321,"ITEM_TM33_REFLECT":321,"ITEM_TM34":322,"ITEM_TM34_SHOCK_WAVE":322,"ITEM_TM35":323,"ITEM_TM35_FLAMETHROWER":323,"ITEM_TM36":324,"ITEM_TM36_SLUDGE_BOMB":324,"ITEM_TM37":325,"ITEM_TM37_SANDSTORM":325,"ITEM_TM38":326,"ITEM_TM38_FIRE_BLAST":326,"ITEM_TM39":327,"ITEM_TM39_ROCK_TOMB":327,"ITEM_TM40":328,"ITEM_TM40_AERIAL_ACE":328,"ITEM_TM41":329,"ITEM_TM41_TORMENT":329,"ITEM_TM42":330,"ITEM_TM42_FACADE":330,"ITEM_TM43":331,"ITEM_TM43_SECRET_POWER":331,"ITEM_TM44":332,"ITEM_TM44_REST":332,"ITEM_TM45":333,"ITEM_TM45_ATTRACT":333,"ITEM_TM46":334,"ITEM_TM46_THIEF":334,"ITEM_TM47":335,"ITEM_TM47_STEEL_WING":335,"ITEM_TM48":336,"ITEM_TM48_SKILL_SWAP":336,"ITEM_TM49":337,"ITEM_TM49_SNATCH":337,"ITEM_TM50":338,"ITEM_TM50_OVERHEAT":338,"ITEM_TM_CASE":364,"ITEM_TOWN_MAP":361,"ITEM_TRI_PASS":367,"ITEM_TROPIC_MAIL":129,"ITEM_TWISTED_SPOON":214,"ITEM_ULTRA_BALL":2,"ITEM_UNUSED_BERRY_1":176,"ITEM_UNUSED_BERRY_2":177,"ITEM_UNUSED_BERRY_3":178,"ITEM_UP_GRADE":218,"ITEM_USE_BAG_MENU":4,"ITEM_USE_FIELD":2,"ITEM_USE_MAIL":0,"ITEM_USE_PARTY_MENU":1,"ITEM_USE_PBLOCK_CASE":3,"ITEM_VS_SEEKER":362,"ITEM_WAILMER_PAIL":268,"ITEM_WATER_STONE":97,"ITEM_WATMEL_BERRY":165,"ITEM_WAVE_MAIL":126,"ITEM_WEPEAR_BERRY":151,"ITEM_WHITE_FLUTE":43,"ITEM_WHITE_HERB":180,"ITEM_WIKI_BERRY":144,"ITEM_WOOD_MAIL":125,"ITEM_X_ACCURACY":78,"ITEM_X_ATTACK":75,"ITEM_X_DEFEND":76,"ITEM_X_SPECIAL":79,"ITEM_X_SPEED":77,"ITEM_YELLOW_FLUTE":40,"ITEM_YELLOW_SCARF":258,"ITEM_YELLOW_SHARD":50,"ITEM_ZINC":70,"LAST_BALL":12,"LAST_BERRY_INDEX":175,"LAST_BERRY_MASTER_BERRY":162,"LAST_BERRY_MASTER_WIFE_BERRY":142,"LAST_KIRI_BERRY":162,"LAST_ROUTE_114_MAN_BERRY":152,"MACH_BIKE":0,"MAIL_NONE":255,"MAP_ABANDONED_SHIP_CAPTAINS_OFFICE":6207,"MAP_ABANDONED_SHIP_CORRIDORS_1F":6199,"MAP_ABANDONED_SHIP_CORRIDORS_B1F":6201,"MAP_ABANDONED_SHIP_DECK":6198,"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS":6209,"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS":6210,"MAP_ABANDONED_SHIP_ROOMS2_1F":6206,"MAP_ABANDONED_SHIP_ROOMS2_B1F":6203,"MAP_ABANDONED_SHIP_ROOMS_1F":6200,"MAP_ABANDONED_SHIP_ROOMS_B1F":6202,"MAP_ABANDONED_SHIP_ROOM_B1F":6205,"MAP_ABANDONED_SHIP_UNDERWATER1":6204,"MAP_ABANDONED_SHIP_UNDERWATER2":6208,"MAP_ALTERING_CAVE":6250,"MAP_ANCIENT_TOMB":6212,"MAP_AQUA_HIDEOUT_1F":6167,"MAP_AQUA_HIDEOUT_B1F":6168,"MAP_AQUA_HIDEOUT_B2F":6169,"MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP1":6218,"MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP2":6219,"MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP3":6220,"MAP_ARTISAN_CAVE_1F":6244,"MAP_ARTISAN_CAVE_B1F":6243,"MAP_BATTLE_COLOSSEUM_2P":6424,"MAP_BATTLE_COLOSSEUM_4P":6427,"MAP_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM":6686,"MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR":6685,"MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY":6684,"MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM":6677,"MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR":6675,"MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY":6674,"MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM":6676,"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM":6689,"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY":6687,"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM":6688,"MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM":6680,"MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR":6679,"MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY":6678,"MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR":6691,"MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY":6690,"MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL":6694,"MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL":6693,"MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS":6695,"MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM":6692,"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR":6682,"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY":6681,"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP":6683,"MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM":6664,"MAP_BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR":6663,"MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR":6662,"MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY":6661,"MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM":6673,"MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR":6672,"MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM":6671,"MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER":6698,"MAP_BATTLE_FRONTIER_LOUNGE1":6697,"MAP_BATTLE_FRONTIER_LOUNGE2":6699,"MAP_BATTLE_FRONTIER_LOUNGE3":6700,"MAP_BATTLE_FRONTIER_LOUNGE4":6701,"MAP_BATTLE_FRONTIER_LOUNGE5":6703,"MAP_BATTLE_FRONTIER_LOUNGE6":6704,"MAP_BATTLE_FRONTIER_LOUNGE7":6705,"MAP_BATTLE_FRONTIER_LOUNGE8":6707,"MAP_BATTLE_FRONTIER_LOUNGE9":6708,"MAP_BATTLE_FRONTIER_MART":6711,"MAP_BATTLE_FRONTIER_OUTSIDE_EAST":6670,"MAP_BATTLE_FRONTIER_OUTSIDE_WEST":6660,"MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F":6709,"MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F":6710,"MAP_BATTLE_FRONTIER_RANKING_HALL":6696,"MAP_BATTLE_FRONTIER_RECEPTION_GATE":6706,"MAP_BATTLE_FRONTIER_SCOTTS_HOUSE":6702,"MAP_BATTLE_PYRAMID_SQUARE01":6444,"MAP_BATTLE_PYRAMID_SQUARE02":6445,"MAP_BATTLE_PYRAMID_SQUARE03":6446,"MAP_BATTLE_PYRAMID_SQUARE04":6447,"MAP_BATTLE_PYRAMID_SQUARE05":6448,"MAP_BATTLE_PYRAMID_SQUARE06":6449,"MAP_BATTLE_PYRAMID_SQUARE07":6450,"MAP_BATTLE_PYRAMID_SQUARE08":6451,"MAP_BATTLE_PYRAMID_SQUARE09":6452,"MAP_BATTLE_PYRAMID_SQUARE10":6453,"MAP_BATTLE_PYRAMID_SQUARE11":6454,"MAP_BATTLE_PYRAMID_SQUARE12":6455,"MAP_BATTLE_PYRAMID_SQUARE13":6456,"MAP_BATTLE_PYRAMID_SQUARE14":6457,"MAP_BATTLE_PYRAMID_SQUARE15":6458,"MAP_BATTLE_PYRAMID_SQUARE16":6459,"MAP_BIRTH_ISLAND_EXTERIOR":6714,"MAP_BIRTH_ISLAND_HARBOR":6715,"MAP_CAVE_OF_ORIGIN_1F":6182,"MAP_CAVE_OF_ORIGIN_B1F":6186,"MAP_CAVE_OF_ORIGIN_ENTRANCE":6181,"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1":6183,"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2":6184,"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3":6185,"MAP_CONTEST_HALL":6428,"MAP_CONTEST_HALL_BEAUTY":6435,"MAP_CONTEST_HALL_COOL":6437,"MAP_CONTEST_HALL_CUTE":6439,"MAP_CONTEST_HALL_SMART":6438,"MAP_CONTEST_HALL_TOUGH":6436,"MAP_DESERT_RUINS":6150,"MAP_DESERT_UNDERPASS":6242,"MAP_DEWFORD_TOWN":11,"MAP_DEWFORD_TOWN_GYM":771,"MAP_DEWFORD_TOWN_HALL":772,"MAP_DEWFORD_TOWN_HOUSE1":768,"MAP_DEWFORD_TOWN_HOUSE2":773,"MAP_DEWFORD_TOWN_POKEMON_CENTER_1F":769,"MAP_DEWFORD_TOWN_POKEMON_CENTER_2F":770,"MAP_EVER_GRANDE_CITY":8,"MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM":4100,"MAP_EVER_GRANDE_CITY_DRAKES_ROOM":4099,"MAP_EVER_GRANDE_CITY_GLACIAS_ROOM":4098,"MAP_EVER_GRANDE_CITY_HALL1":4101,"MAP_EVER_GRANDE_CITY_HALL2":4102,"MAP_EVER_GRANDE_CITY_HALL3":4103,"MAP_EVER_GRANDE_CITY_HALL4":4104,"MAP_EVER_GRANDE_CITY_HALL5":4105,"MAP_EVER_GRANDE_CITY_HALL_OF_FAME":4107,"MAP_EVER_GRANDE_CITY_PHOEBES_ROOM":4097,"MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F":4108,"MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F":4109,"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F":4106,"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F":4110,"MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM":4096,"MAP_FALLARBOR_TOWN":13,"MAP_FALLARBOR_TOWN_BATTLE_TENT_BATTLE_ROOM":1283,"MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR":1282,"MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY":1281,"MAP_FALLARBOR_TOWN_COZMOS_HOUSE":1286,"MAP_FALLARBOR_TOWN_MART":1280,"MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE":1287,"MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F":1284,"MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F":1285,"MAP_FARAWAY_ISLAND_ENTRANCE":6712,"MAP_FARAWAY_ISLAND_INTERIOR":6713,"MAP_FIERY_PATH":6158,"MAP_FORTREE_CITY":4,"MAP_FORTREE_CITY_DECORATION_SHOP":3081,"MAP_FORTREE_CITY_GYM":3073,"MAP_FORTREE_CITY_HOUSE1":3072,"MAP_FORTREE_CITY_HOUSE2":3077,"MAP_FORTREE_CITY_HOUSE3":3078,"MAP_FORTREE_CITY_HOUSE4":3079,"MAP_FORTREE_CITY_HOUSE5":3080,"MAP_FORTREE_CITY_MART":3076,"MAP_FORTREE_CITY_POKEMON_CENTER_1F":3074,"MAP_FORTREE_CITY_POKEMON_CENTER_2F":3075,"MAP_GRANITE_CAVE_1F":6151,"MAP_GRANITE_CAVE_B1F":6152,"MAP_GRANITE_CAVE_B2F":6153,"MAP_GRANITE_CAVE_STEVENS_ROOM":6154,"MAP_GROUPS_COUNT":34,"MAP_INSIDE_OF_TRUCK":6440,"MAP_ISLAND_CAVE":6211,"MAP_JAGGED_PASS":6157,"MAP_LAVARIDGE_TOWN":12,"MAP_LAVARIDGE_TOWN_GYM_1F":1025,"MAP_LAVARIDGE_TOWN_GYM_B1F":1026,"MAP_LAVARIDGE_TOWN_HERB_SHOP":1024,"MAP_LAVARIDGE_TOWN_HOUSE":1027,"MAP_LAVARIDGE_TOWN_MART":1028,"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F":1029,"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F":1030,"MAP_LILYCOVE_CITY":5,"MAP_LILYCOVE_CITY_CONTEST_HALL":3333,"MAP_LILYCOVE_CITY_CONTEST_LOBBY":3332,"MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F":3328,"MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F":3329,"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F":3344,"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F":3345,"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F":3346,"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F":3347,"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F":3348,"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR":3350,"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP":3349,"MAP_LILYCOVE_CITY_HARBOR":3338,"MAP_LILYCOVE_CITY_HOUSE1":3340,"MAP_LILYCOVE_CITY_HOUSE2":3341,"MAP_LILYCOVE_CITY_HOUSE3":3342,"MAP_LILYCOVE_CITY_HOUSE4":3343,"MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F":3330,"MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F":3331,"MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE":3339,"MAP_LILYCOVE_CITY_POKEMON_CENTER_1F":3334,"MAP_LILYCOVE_CITY_POKEMON_CENTER_2F":3335,"MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB":3337,"MAP_LILYCOVE_CITY_UNUSED_MART":3336,"MAP_LITTLEROOT_TOWN":9,"MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F":256,"MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F":257,"MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F":258,"MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F":259,"MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB":260,"MAP_MAGMA_HIDEOUT_1F":6230,"MAP_MAGMA_HIDEOUT_2F_1R":6231,"MAP_MAGMA_HIDEOUT_2F_2R":6232,"MAP_MAGMA_HIDEOUT_2F_3R":6237,"MAP_MAGMA_HIDEOUT_3F_1R":6233,"MAP_MAGMA_HIDEOUT_3F_2R":6234,"MAP_MAGMA_HIDEOUT_3F_3R":6236,"MAP_MAGMA_HIDEOUT_4F":6235,"MAP_MARINE_CAVE_END":6247,"MAP_MARINE_CAVE_ENTRANCE":6246,"MAP_MAUVILLE_CITY":2,"MAP_MAUVILLE_CITY_BIKE_SHOP":2561,"MAP_MAUVILLE_CITY_GAME_CORNER":2563,"MAP_MAUVILLE_CITY_GYM":2560,"MAP_MAUVILLE_CITY_HOUSE1":2562,"MAP_MAUVILLE_CITY_HOUSE2":2564,"MAP_MAUVILLE_CITY_MART":2567,"MAP_MAUVILLE_CITY_POKEMON_CENTER_1F":2565,"MAP_MAUVILLE_CITY_POKEMON_CENTER_2F":2566,"MAP_METEOR_FALLS_1F_1R":6144,"MAP_METEOR_FALLS_1F_2R":6145,"MAP_METEOR_FALLS_B1F_1R":6146,"MAP_METEOR_FALLS_B1F_2R":6147,"MAP_METEOR_FALLS_STEVENS_CAVE":6251,"MAP_MIRAGE_TOWER_1F":6238,"MAP_MIRAGE_TOWER_2F":6239,"MAP_MIRAGE_TOWER_3F":6240,"MAP_MIRAGE_TOWER_4F":6241,"MAP_MOSSDEEP_CITY":6,"MAP_MOSSDEEP_CITY_GAME_CORNER_1F":3595,"MAP_MOSSDEEP_CITY_GAME_CORNER_B1F":3596,"MAP_MOSSDEEP_CITY_GYM":3584,"MAP_MOSSDEEP_CITY_HOUSE1":3585,"MAP_MOSSDEEP_CITY_HOUSE2":3586,"MAP_MOSSDEEP_CITY_HOUSE3":3590,"MAP_MOSSDEEP_CITY_HOUSE4":3592,"MAP_MOSSDEEP_CITY_MART":3589,"MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F":3587,"MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F":3588,"MAP_MOSSDEEP_CITY_SPACE_CENTER_1F":3593,"MAP_MOSSDEEP_CITY_SPACE_CENTER_2F":3594,"MAP_MOSSDEEP_CITY_STEVENS_HOUSE":3591,"MAP_MT_CHIMNEY":6156,"MAP_MT_CHIMNEY_CABLE_CAR_STATION":4865,"MAP_MT_PYRE_1F":6159,"MAP_MT_PYRE_2F":6160,"MAP_MT_PYRE_3F":6161,"MAP_MT_PYRE_4F":6162,"MAP_MT_PYRE_5F":6163,"MAP_MT_PYRE_6F":6164,"MAP_MT_PYRE_EXTERIOR":6165,"MAP_MT_PYRE_SUMMIT":6166,"MAP_NAVEL_ROCK_B1F":6725,"MAP_NAVEL_ROCK_BOTTOM":6743,"MAP_NAVEL_ROCK_DOWN01":6732,"MAP_NAVEL_ROCK_DOWN02":6733,"MAP_NAVEL_ROCK_DOWN03":6734,"MAP_NAVEL_ROCK_DOWN04":6735,"MAP_NAVEL_ROCK_DOWN05":6736,"MAP_NAVEL_ROCK_DOWN06":6737,"MAP_NAVEL_ROCK_DOWN07":6738,"MAP_NAVEL_ROCK_DOWN08":6739,"MAP_NAVEL_ROCK_DOWN09":6740,"MAP_NAVEL_ROCK_DOWN10":6741,"MAP_NAVEL_ROCK_DOWN11":6742,"MAP_NAVEL_ROCK_ENTRANCE":6724,"MAP_NAVEL_ROCK_EXTERIOR":6722,"MAP_NAVEL_ROCK_FORK":6726,"MAP_NAVEL_ROCK_HARBOR":6723,"MAP_NAVEL_ROCK_TOP":6731,"MAP_NAVEL_ROCK_UP1":6727,"MAP_NAVEL_ROCK_UP2":6728,"MAP_NAVEL_ROCK_UP3":6729,"MAP_NAVEL_ROCK_UP4":6730,"MAP_NEW_MAUVILLE_ENTRANCE":6196,"MAP_NEW_MAUVILLE_INSIDE":6197,"MAP_OLDALE_TOWN":10,"MAP_OLDALE_TOWN_HOUSE1":512,"MAP_OLDALE_TOWN_HOUSE2":513,"MAP_OLDALE_TOWN_MART":516,"MAP_OLDALE_TOWN_POKEMON_CENTER_1F":514,"MAP_OLDALE_TOWN_POKEMON_CENTER_2F":515,"MAP_PACIFIDLOG_TOWN":15,"MAP_PACIFIDLOG_TOWN_HOUSE1":1794,"MAP_PACIFIDLOG_TOWN_HOUSE2":1795,"MAP_PACIFIDLOG_TOWN_HOUSE3":1796,"MAP_PACIFIDLOG_TOWN_HOUSE4":1797,"MAP_PACIFIDLOG_TOWN_HOUSE5":1798,"MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F":1792,"MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F":1793,"MAP_PETALBURG_CITY":0,"MAP_PETALBURG_CITY_GYM":2049,"MAP_PETALBURG_CITY_HOUSE1":2050,"MAP_PETALBURG_CITY_HOUSE2":2051,"MAP_PETALBURG_CITY_MART":2054,"MAP_PETALBURG_CITY_POKEMON_CENTER_1F":2052,"MAP_PETALBURG_CITY_POKEMON_CENTER_2F":2053,"MAP_PETALBURG_CITY_WALLYS_HOUSE":2048,"MAP_PETALBURG_WOODS":6155,"MAP_RECORD_CORNER":6426,"MAP_ROUTE101":16,"MAP_ROUTE102":17,"MAP_ROUTE103":18,"MAP_ROUTE104":19,"MAP_ROUTE104_MR_BRINEYS_HOUSE":4352,"MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP":4353,"MAP_ROUTE104_PROTOTYPE":6912,"MAP_ROUTE104_PROTOTYPE_PRETTY_PETAL_FLOWER_SHOP":6913,"MAP_ROUTE105":20,"MAP_ROUTE106":21,"MAP_ROUTE107":22,"MAP_ROUTE108":23,"MAP_ROUTE109":24,"MAP_ROUTE109_SEASHORE_HOUSE":7168,"MAP_ROUTE110":25,"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE":7435,"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE":7436,"MAP_ROUTE110_TRICK_HOUSE_CORRIDOR":7426,"MAP_ROUTE110_TRICK_HOUSE_END":7425,"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE":7424,"MAP_ROUTE110_TRICK_HOUSE_PUZZLE1":7427,"MAP_ROUTE110_TRICK_HOUSE_PUZZLE2":7428,"MAP_ROUTE110_TRICK_HOUSE_PUZZLE3":7429,"MAP_ROUTE110_TRICK_HOUSE_PUZZLE4":7430,"MAP_ROUTE110_TRICK_HOUSE_PUZZLE5":7431,"MAP_ROUTE110_TRICK_HOUSE_PUZZLE6":7432,"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7":7433,"MAP_ROUTE110_TRICK_HOUSE_PUZZLE8":7434,"MAP_ROUTE111":26,"MAP_ROUTE111_OLD_LADYS_REST_STOP":4609,"MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE":4608,"MAP_ROUTE112":27,"MAP_ROUTE112_CABLE_CAR_STATION":4864,"MAP_ROUTE113":28,"MAP_ROUTE113_GLASS_WORKSHOP":7680,"MAP_ROUTE114":29,"MAP_ROUTE114_FOSSIL_MANIACS_HOUSE":5120,"MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL":5121,"MAP_ROUTE114_LANETTES_HOUSE":5122,"MAP_ROUTE115":30,"MAP_ROUTE116":31,"MAP_ROUTE116_TUNNELERS_REST_HOUSE":5376,"MAP_ROUTE117":32,"MAP_ROUTE117_POKEMON_DAY_CARE":5632,"MAP_ROUTE118":33,"MAP_ROUTE119":34,"MAP_ROUTE119_HOUSE":8194,"MAP_ROUTE119_WEATHER_INSTITUTE_1F":8192,"MAP_ROUTE119_WEATHER_INSTITUTE_2F":8193,"MAP_ROUTE120":35,"MAP_ROUTE121":36,"MAP_ROUTE121_SAFARI_ZONE_ENTRANCE":5888,"MAP_ROUTE122":37,"MAP_ROUTE123":38,"MAP_ROUTE123_BERRY_MASTERS_HOUSE":7936,"MAP_ROUTE124":39,"MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE":8448,"MAP_ROUTE125":40,"MAP_ROUTE126":41,"MAP_ROUTE127":42,"MAP_ROUTE128":43,"MAP_ROUTE129":44,"MAP_ROUTE130":45,"MAP_ROUTE131":46,"MAP_ROUTE132":47,"MAP_ROUTE133":48,"MAP_ROUTE134":49,"MAP_RUSTBORO_CITY":3,"MAP_RUSTBORO_CITY_CUTTERS_HOUSE":2827,"MAP_RUSTBORO_CITY_DEVON_CORP_1F":2816,"MAP_RUSTBORO_CITY_DEVON_CORP_2F":2817,"MAP_RUSTBORO_CITY_DEVON_CORP_3F":2818,"MAP_RUSTBORO_CITY_FLAT1_1F":2824,"MAP_RUSTBORO_CITY_FLAT1_2F":2825,"MAP_RUSTBORO_CITY_FLAT2_1F":2829,"MAP_RUSTBORO_CITY_FLAT2_2F":2830,"MAP_RUSTBORO_CITY_FLAT2_3F":2831,"MAP_RUSTBORO_CITY_GYM":2819,"MAP_RUSTBORO_CITY_HOUSE1":2826,"MAP_RUSTBORO_CITY_HOUSE2":2828,"MAP_RUSTBORO_CITY_HOUSE3":2832,"MAP_RUSTBORO_CITY_MART":2823,"MAP_RUSTBORO_CITY_POKEMON_CENTER_1F":2821,"MAP_RUSTBORO_CITY_POKEMON_CENTER_2F":2822,"MAP_RUSTBORO_CITY_POKEMON_SCHOOL":2820,"MAP_RUSTURF_TUNNEL":6148,"MAP_SAFARI_ZONE_NORTH":6657,"MAP_SAFARI_ZONE_NORTHEAST":6668,"MAP_SAFARI_ZONE_NORTHWEST":6656,"MAP_SAFARI_ZONE_REST_HOUSE":6667,"MAP_SAFARI_ZONE_SOUTH":6659,"MAP_SAFARI_ZONE_SOUTHEAST":6669,"MAP_SAFARI_ZONE_SOUTHWEST":6658,"MAP_SCORCHED_SLAB":6217,"MAP_SEAFLOOR_CAVERN_ENTRANCE":6171,"MAP_SEAFLOOR_CAVERN_ROOM1":6172,"MAP_SEAFLOOR_CAVERN_ROOM2":6173,"MAP_SEAFLOOR_CAVERN_ROOM3":6174,"MAP_SEAFLOOR_CAVERN_ROOM4":6175,"MAP_SEAFLOOR_CAVERN_ROOM5":6176,"MAP_SEAFLOOR_CAVERN_ROOM6":6177,"MAP_SEAFLOOR_CAVERN_ROOM7":6178,"MAP_SEAFLOOR_CAVERN_ROOM8":6179,"MAP_SEAFLOOR_CAVERN_ROOM9":6180,"MAP_SEALED_CHAMBER_INNER_ROOM":6216,"MAP_SEALED_CHAMBER_OUTER_ROOM":6215,"MAP_SECRET_BASE_BLUE_CAVE1":6402,"MAP_SECRET_BASE_BLUE_CAVE2":6408,"MAP_SECRET_BASE_BLUE_CAVE3":6414,"MAP_SECRET_BASE_BLUE_CAVE4":6420,"MAP_SECRET_BASE_BROWN_CAVE1":6401,"MAP_SECRET_BASE_BROWN_CAVE2":6407,"MAP_SECRET_BASE_BROWN_CAVE3":6413,"MAP_SECRET_BASE_BROWN_CAVE4":6419,"MAP_SECRET_BASE_RED_CAVE1":6400,"MAP_SECRET_BASE_RED_CAVE2":6406,"MAP_SECRET_BASE_RED_CAVE3":6412,"MAP_SECRET_BASE_RED_CAVE4":6418,"MAP_SECRET_BASE_SHRUB1":6405,"MAP_SECRET_BASE_SHRUB2":6411,"MAP_SECRET_BASE_SHRUB3":6417,"MAP_SECRET_BASE_SHRUB4":6423,"MAP_SECRET_BASE_TREE1":6404,"MAP_SECRET_BASE_TREE2":6410,"MAP_SECRET_BASE_TREE3":6416,"MAP_SECRET_BASE_TREE4":6422,"MAP_SECRET_BASE_YELLOW_CAVE1":6403,"MAP_SECRET_BASE_YELLOW_CAVE2":6409,"MAP_SECRET_BASE_YELLOW_CAVE3":6415,"MAP_SECRET_BASE_YELLOW_CAVE4":6421,"MAP_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM":6194,"MAP_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM":6195,"MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM":6190,"MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM":6227,"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM":6191,"MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM":6193,"MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM":6192,"MAP_SKY_PILLAR_1F":6223,"MAP_SKY_PILLAR_2F":6224,"MAP_SKY_PILLAR_3F":6225,"MAP_SKY_PILLAR_4F":6226,"MAP_SKY_PILLAR_5F":6228,"MAP_SKY_PILLAR_ENTRANCE":6221,"MAP_SKY_PILLAR_OUTSIDE":6222,"MAP_SKY_PILLAR_TOP":6229,"MAP_SLATEPORT_CITY":1,"MAP_SLATEPORT_CITY_BATTLE_TENT_BATTLE_ROOM":2308,"MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR":2307,"MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY":2306,"MAP_SLATEPORT_CITY_HARBOR":2313,"MAP_SLATEPORT_CITY_HOUSE":2314,"MAP_SLATEPORT_CITY_MART":2317,"MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE":2309,"MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F":2311,"MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F":2312,"MAP_SLATEPORT_CITY_POKEMON_CENTER_1F":2315,"MAP_SLATEPORT_CITY_POKEMON_CENTER_2F":2316,"MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB":2310,"MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F":2304,"MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F":2305,"MAP_SOOTOPOLIS_CITY":7,"MAP_SOOTOPOLIS_CITY_GYM_1F":3840,"MAP_SOOTOPOLIS_CITY_GYM_B1F":3841,"MAP_SOOTOPOLIS_CITY_HOUSE1":3845,"MAP_SOOTOPOLIS_CITY_HOUSE2":3846,"MAP_SOOTOPOLIS_CITY_HOUSE3":3847,"MAP_SOOTOPOLIS_CITY_HOUSE4":3848,"MAP_SOOTOPOLIS_CITY_HOUSE5":3849,"MAP_SOOTOPOLIS_CITY_HOUSE6":3850,"MAP_SOOTOPOLIS_CITY_HOUSE7":3851,"MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE":3852,"MAP_SOOTOPOLIS_CITY_MART":3844,"MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F":3853,"MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F":3854,"MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F":3842,"MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F":3843,"MAP_SOUTHERN_ISLAND_EXTERIOR":6665,"MAP_SOUTHERN_ISLAND_INTERIOR":6666,"MAP_SS_TIDAL_CORRIDOR":6441,"MAP_SS_TIDAL_LOWER_DECK":6442,"MAP_SS_TIDAL_ROOMS":6443,"MAP_TERRA_CAVE_END":6249,"MAP_TERRA_CAVE_ENTRANCE":6248,"MAP_TRADE_CENTER":6425,"MAP_TRAINER_HILL_1F":6717,"MAP_TRAINER_HILL_2F":6718,"MAP_TRAINER_HILL_3F":6719,"MAP_TRAINER_HILL_4F":6720,"MAP_TRAINER_HILL_ELEVATOR":6744,"MAP_TRAINER_HILL_ENTRANCE":6716,"MAP_TRAINER_HILL_ROOF":6721,"MAP_UNDERWATER_MARINE_CAVE":6245,"MAP_UNDERWATER_ROUTE105":55,"MAP_UNDERWATER_ROUTE124":50,"MAP_UNDERWATER_ROUTE125":56,"MAP_UNDERWATER_ROUTE126":51,"MAP_UNDERWATER_ROUTE127":52,"MAP_UNDERWATER_ROUTE128":53,"MAP_UNDERWATER_ROUTE129":54,"MAP_UNDERWATER_ROUTE134":6213,"MAP_UNDERWATER_SEAFLOOR_CAVERN":6170,"MAP_UNDERWATER_SEALED_CHAMBER":6214,"MAP_UNDERWATER_SOOTOPOLIS_CITY":6149,"MAP_UNION_ROOM":6460,"MAP_UNUSED_CONTEST_HALL1":6429,"MAP_UNUSED_CONTEST_HALL2":6430,"MAP_UNUSED_CONTEST_HALL3":6431,"MAP_UNUSED_CONTEST_HALL4":6432,"MAP_UNUSED_CONTEST_HALL5":6433,"MAP_UNUSED_CONTEST_HALL6":6434,"MAP_VERDANTURF_TOWN":14,"MAP_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM":1538,"MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR":1537,"MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY":1536,"MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE":1543,"MAP_VERDANTURF_TOWN_HOUSE":1544,"MAP_VERDANTURF_TOWN_MART":1539,"MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F":1540,"MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F":1541,"MAP_VERDANTURF_TOWN_WANDAS_HOUSE":1542,"MAP_VICTORY_ROAD_1F":6187,"MAP_VICTORY_ROAD_B1F":6188,"MAP_VICTORY_ROAD_B2F":6189,"MAX_BAG_ITEM_CAPACITY":99,"MAX_BERRY_CAPACITY":999,"MAX_BERRY_INDEX":178,"MAX_ITEM_DIGITS":3,"MAX_PC_ITEM_CAPACITY":999,"MAX_TRAINERS_COUNT":864,"MOVES_COUNT":355,"MOVE_ABSORB":71,"MOVE_ACID":51,"MOVE_ACID_ARMOR":151,"MOVE_AERIAL_ACE":332,"MOVE_AEROBLAST":177,"MOVE_AGILITY":97,"MOVE_AIR_CUTTER":314,"MOVE_AMNESIA":133,"MOVE_ANCIENT_POWER":246,"MOVE_ARM_THRUST":292,"MOVE_AROMATHERAPY":312,"MOVE_ASSIST":274,"MOVE_ASTONISH":310,"MOVE_ATTRACT":213,"MOVE_AURORA_BEAM":62,"MOVE_BARRAGE":140,"MOVE_BARRIER":112,"MOVE_BATON_PASS":226,"MOVE_BEAT_UP":251,"MOVE_BELLY_DRUM":187,"MOVE_BIDE":117,"MOVE_BIND":20,"MOVE_BITE":44,"MOVE_BLAST_BURN":307,"MOVE_BLAZE_KICK":299,"MOVE_BLIZZARD":59,"MOVE_BLOCK":335,"MOVE_BODY_SLAM":34,"MOVE_BONEMERANG":155,"MOVE_BONE_CLUB":125,"MOVE_BONE_RUSH":198,"MOVE_BOUNCE":340,"MOVE_BRICK_BREAK":280,"MOVE_BUBBLE":145,"MOVE_BUBBLE_BEAM":61,"MOVE_BULK_UP":339,"MOVE_BULLET_SEED":331,"MOVE_CALM_MIND":347,"MOVE_CAMOUFLAGE":293,"MOVE_CHARGE":268,"MOVE_CHARM":204,"MOVE_CLAMP":128,"MOVE_COMET_PUNCH":4,"MOVE_CONFUSE_RAY":109,"MOVE_CONFUSION":93,"MOVE_CONSTRICT":132,"MOVE_CONVERSION":160,"MOVE_CONVERSION_2":176,"MOVE_COSMIC_POWER":322,"MOVE_COTTON_SPORE":178,"MOVE_COUNTER":68,"MOVE_COVET":343,"MOVE_CRABHAMMER":152,"MOVE_CROSS_CHOP":238,"MOVE_CRUNCH":242,"MOVE_CRUSH_CLAW":306,"MOVE_CURSE":174,"MOVE_CUT":15,"MOVE_DEFENSE_CURL":111,"MOVE_DESTINY_BOND":194,"MOVE_DETECT":197,"MOVE_DIG":91,"MOVE_DISABLE":50,"MOVE_DIVE":291,"MOVE_DIZZY_PUNCH":146,"MOVE_DOOM_DESIRE":353,"MOVE_DOUBLE_EDGE":38,"MOVE_DOUBLE_KICK":24,"MOVE_DOUBLE_SLAP":3,"MOVE_DOUBLE_TEAM":104,"MOVE_DRAGON_BREATH":225,"MOVE_DRAGON_CLAW":337,"MOVE_DRAGON_DANCE":349,"MOVE_DRAGON_RAGE":82,"MOVE_DREAM_EATER":138,"MOVE_DRILL_PECK":65,"MOVE_DYNAMIC_PUNCH":223,"MOVE_EARTHQUAKE":89,"MOVE_EGG_BOMB":121,"MOVE_EMBER":52,"MOVE_ENCORE":227,"MOVE_ENDEAVOR":283,"MOVE_ENDURE":203,"MOVE_ERUPTION":284,"MOVE_EXPLOSION":153,"MOVE_EXTRASENSORY":326,"MOVE_EXTREME_SPEED":245,"MOVE_FACADE":263,"MOVE_FAINT_ATTACK":185,"MOVE_FAKE_OUT":252,"MOVE_FAKE_TEARS":313,"MOVE_FALSE_SWIPE":206,"MOVE_FEATHER_DANCE":297,"MOVE_FIRE_BLAST":126,"MOVE_FIRE_PUNCH":7,"MOVE_FIRE_SPIN":83,"MOVE_FISSURE":90,"MOVE_FLAIL":175,"MOVE_FLAMETHROWER":53,"MOVE_FLAME_WHEEL":172,"MOVE_FLASH":148,"MOVE_FLATTER":260,"MOVE_FLY":19,"MOVE_FOCUS_ENERGY":116,"MOVE_FOCUS_PUNCH":264,"MOVE_FOLLOW_ME":266,"MOVE_FORESIGHT":193,"MOVE_FRENZY_PLANT":338,"MOVE_FRUSTRATION":218,"MOVE_FURY_ATTACK":31,"MOVE_FURY_CUTTER":210,"MOVE_FURY_SWIPES":154,"MOVE_FUTURE_SIGHT":248,"MOVE_GIGA_DRAIN":202,"MOVE_GLARE":137,"MOVE_GRASS_WHISTLE":320,"MOVE_GROWL":45,"MOVE_GROWTH":74,"MOVE_GRUDGE":288,"MOVE_GUILLOTINE":12,"MOVE_GUST":16,"MOVE_HAIL":258,"MOVE_HARDEN":106,"MOVE_HAZE":114,"MOVE_HEADBUTT":29,"MOVE_HEAL_BELL":215,"MOVE_HEAT_WAVE":257,"MOVE_HELPING_HAND":270,"MOVE_HIDDEN_POWER":237,"MOVE_HI_JUMP_KICK":136,"MOVE_HORN_ATTACK":30,"MOVE_HORN_DRILL":32,"MOVE_HOWL":336,"MOVE_HYDRO_CANNON":308,"MOVE_HYDRO_PUMP":56,"MOVE_HYPER_BEAM":63,"MOVE_HYPER_FANG":158,"MOVE_HYPER_VOICE":304,"MOVE_HYPNOSIS":95,"MOVE_ICE_BALL":301,"MOVE_ICE_BEAM":58,"MOVE_ICE_PUNCH":8,"MOVE_ICICLE_SPEAR":333,"MOVE_ICY_WIND":196,"MOVE_IMPRISON":286,"MOVE_INGRAIN":275,"MOVE_IRON_DEFENSE":334,"MOVE_IRON_TAIL":231,"MOVE_JUMP_KICK":26,"MOVE_KARATE_CHOP":2,"MOVE_KINESIS":134,"MOVE_KNOCK_OFF":282,"MOVE_LEAF_BLADE":348,"MOVE_LEECH_LIFE":141,"MOVE_LEECH_SEED":73,"MOVE_LEER":43,"MOVE_LICK":122,"MOVE_LIGHT_SCREEN":113,"MOVE_LOCK_ON":199,"MOVE_LOVELY_KISS":142,"MOVE_LOW_KICK":67,"MOVE_LUSTER_PURGE":295,"MOVE_MACH_PUNCH":183,"MOVE_MAGICAL_LEAF":345,"MOVE_MAGIC_COAT":277,"MOVE_MAGNITUDE":222,"MOVE_MEAN_LOOK":212,"MOVE_MEDITATE":96,"MOVE_MEGAHORN":224,"MOVE_MEGA_DRAIN":72,"MOVE_MEGA_KICK":25,"MOVE_MEGA_PUNCH":5,"MOVE_MEMENTO":262,"MOVE_METAL_CLAW":232,"MOVE_METAL_SOUND":319,"MOVE_METEOR_MASH":309,"MOVE_METRONOME":118,"MOVE_MILK_DRINK":208,"MOVE_MIMIC":102,"MOVE_MIND_READER":170,"MOVE_MINIMIZE":107,"MOVE_MIRROR_COAT":243,"MOVE_MIRROR_MOVE":119,"MOVE_MIST":54,"MOVE_MIST_BALL":296,"MOVE_MOONLIGHT":236,"MOVE_MORNING_SUN":234,"MOVE_MUDDY_WATER":330,"MOVE_MUD_SHOT":341,"MOVE_MUD_SLAP":189,"MOVE_MUD_SPORT":300,"MOVE_NATURE_POWER":267,"MOVE_NEEDLE_ARM":302,"MOVE_NIGHTMARE":171,"MOVE_NIGHT_SHADE":101,"MOVE_NONE":0,"MOVE_OCTAZOOKA":190,"MOVE_ODOR_SLEUTH":316,"MOVE_OUTRAGE":200,"MOVE_OVERHEAT":315,"MOVE_PAIN_SPLIT":220,"MOVE_PAY_DAY":6,"MOVE_PECK":64,"MOVE_PERISH_SONG":195,"MOVE_PETAL_DANCE":80,"MOVE_PIN_MISSILE":42,"MOVE_POISON_FANG":305,"MOVE_POISON_GAS":139,"MOVE_POISON_POWDER":77,"MOVE_POISON_STING":40,"MOVE_POISON_TAIL":342,"MOVE_POUND":1,"MOVE_POWDER_SNOW":181,"MOVE_PRESENT":217,"MOVE_PROTECT":182,"MOVE_PSYBEAM":60,"MOVE_PSYCHIC":94,"MOVE_PSYCHO_BOOST":354,"MOVE_PSYCH_UP":244,"MOVE_PSYWAVE":149,"MOVE_PURSUIT":228,"MOVE_QUICK_ATTACK":98,"MOVE_RAGE":99,"MOVE_RAIN_DANCE":240,"MOVE_RAPID_SPIN":229,"MOVE_RAZOR_LEAF":75,"MOVE_RAZOR_WIND":13,"MOVE_RECOVER":105,"MOVE_RECYCLE":278,"MOVE_REFLECT":115,"MOVE_REFRESH":287,"MOVE_REST":156,"MOVE_RETURN":216,"MOVE_REVENGE":279,"MOVE_REVERSAL":179,"MOVE_ROAR":46,"MOVE_ROCK_BLAST":350,"MOVE_ROCK_SLIDE":157,"MOVE_ROCK_SMASH":249,"MOVE_ROCK_THROW":88,"MOVE_ROCK_TOMB":317,"MOVE_ROLE_PLAY":272,"MOVE_ROLLING_KICK":27,"MOVE_ROLLOUT":205,"MOVE_SACRED_FIRE":221,"MOVE_SAFEGUARD":219,"MOVE_SANDSTORM":201,"MOVE_SAND_ATTACK":28,"MOVE_SAND_TOMB":328,"MOVE_SCARY_FACE":184,"MOVE_SCRATCH":10,"MOVE_SCREECH":103,"MOVE_SECRET_POWER":290,"MOVE_SEISMIC_TOSS":69,"MOVE_SELF_DESTRUCT":120,"MOVE_SHADOW_BALL":247,"MOVE_SHADOW_PUNCH":325,"MOVE_SHARPEN":159,"MOVE_SHEER_COLD":329,"MOVE_SHOCK_WAVE":351,"MOVE_SIGNAL_BEAM":324,"MOVE_SILVER_WIND":318,"MOVE_SING":47,"MOVE_SKETCH":166,"MOVE_SKILL_SWAP":285,"MOVE_SKULL_BASH":130,"MOVE_SKY_ATTACK":143,"MOVE_SKY_UPPERCUT":327,"MOVE_SLACK_OFF":303,"MOVE_SLAM":21,"MOVE_SLASH":163,"MOVE_SLEEP_POWDER":79,"MOVE_SLEEP_TALK":214,"MOVE_SLUDGE":124,"MOVE_SLUDGE_BOMB":188,"MOVE_SMELLING_SALT":265,"MOVE_SMOG":123,"MOVE_SMOKESCREEN":108,"MOVE_SNATCH":289,"MOVE_SNORE":173,"MOVE_SOFT_BOILED":135,"MOVE_SOLAR_BEAM":76,"MOVE_SONIC_BOOM":49,"MOVE_SPARK":209,"MOVE_SPIDER_WEB":169,"MOVE_SPIKES":191,"MOVE_SPIKE_CANNON":131,"MOVE_SPITE":180,"MOVE_SPIT_UP":255,"MOVE_SPLASH":150,"MOVE_SPORE":147,"MOVE_STEEL_WING":211,"MOVE_STOCKPILE":254,"MOVE_STOMP":23,"MOVE_STRENGTH":70,"MOVE_STRING_SHOT":81,"MOVE_STRUGGLE":165,"MOVE_STUN_SPORE":78,"MOVE_SUBMISSION":66,"MOVE_SUBSTITUTE":164,"MOVE_SUNNY_DAY":241,"MOVE_SUPERPOWER":276,"MOVE_SUPERSONIC":48,"MOVE_SUPER_FANG":162,"MOVE_SURF":57,"MOVE_SWAGGER":207,"MOVE_SWALLOW":256,"MOVE_SWEET_KISS":186,"MOVE_SWEET_SCENT":230,"MOVE_SWIFT":129,"MOVE_SWORDS_DANCE":14,"MOVE_SYNTHESIS":235,"MOVE_TACKLE":33,"MOVE_TAIL_GLOW":294,"MOVE_TAIL_WHIP":39,"MOVE_TAKE_DOWN":36,"MOVE_TAUNT":269,"MOVE_TEETER_DANCE":298,"MOVE_TELEPORT":100,"MOVE_THIEF":168,"MOVE_THRASH":37,"MOVE_THUNDER":87,"MOVE_THUNDERBOLT":85,"MOVE_THUNDER_PUNCH":9,"MOVE_THUNDER_SHOCK":84,"MOVE_THUNDER_WAVE":86,"MOVE_TICKLE":321,"MOVE_TORMENT":259,"MOVE_TOXIC":92,"MOVE_TRANSFORM":144,"MOVE_TRICK":271,"MOVE_TRIPLE_KICK":167,"MOVE_TRI_ATTACK":161,"MOVE_TWINEEDLE":41,"MOVE_TWISTER":239,"MOVE_UNAVAILABLE":65535,"MOVE_UPROAR":253,"MOVE_VICE_GRIP":11,"MOVE_VINE_WHIP":22,"MOVE_VITAL_THROW":233,"MOVE_VOLT_TACKLE":344,"MOVE_WATERFALL":127,"MOVE_WATER_GUN":55,"MOVE_WATER_PULSE":352,"MOVE_WATER_SPORT":346,"MOVE_WATER_SPOUT":323,"MOVE_WEATHER_BALL":311,"MOVE_WHIRLPOOL":250,"MOVE_WHIRLWIND":18,"MOVE_WILL_O_WISP":261,"MOVE_WING_ATTACK":17,"MOVE_WISH":273,"MOVE_WITHDRAW":110,"MOVE_WRAP":35,"MOVE_YAWN":281,"MOVE_ZAP_CANNON":192,"NUM_BADGES":8,"NUM_BERRY_MASTER_BERRIES":10,"NUM_BERRY_MASTER_BERRIES_SKIPPED":20,"NUM_BERRY_MASTER_WIFE_BERRIES":10,"NUM_HIDDEN_MACHINES":8,"NUM_KIRI_BERRIES":10,"NUM_KIRI_BERRIES_SKIPPED":20,"NUM_ROUTE_114_MAN_BERRIES":5,"NUM_ROUTE_114_MAN_BERRIES_SKIPPED":15,"NUM_SPECIES":412,"NUM_TECHNICAL_MACHINES":50,"NUM_WONDER_CARD_FLAGS":20,"OLD_ROD":0,"SPECIAL_FLAGS_END":16511,"SPECIAL_FLAGS_START":16384,"SPECIES_ABRA":63,"SPECIES_ABSOL":376,"SPECIES_AERODACTYL":142,"SPECIES_AGGRON":384,"SPECIES_AIPOM":190,"SPECIES_ALAKAZAM":65,"SPECIES_ALTARIA":359,"SPECIES_AMPHAROS":181,"SPECIES_ANORITH":390,"SPECIES_ARBOK":24,"SPECIES_ARCANINE":59,"SPECIES_ARIADOS":168,"SPECIES_ARMALDO":391,"SPECIES_ARON":382,"SPECIES_ARTICUNO":144,"SPECIES_AZUMARILL":184,"SPECIES_AZURILL":350,"SPECIES_BAGON":395,"SPECIES_BALTOY":318,"SPECIES_BANETTE":378,"SPECIES_BARBOACH":323,"SPECIES_BAYLEEF":153,"SPECIES_BEAUTIFLY":292,"SPECIES_BEEDRILL":15,"SPECIES_BELDUM":398,"SPECIES_BELLOSSOM":182,"SPECIES_BELLSPROUT":69,"SPECIES_BLASTOISE":9,"SPECIES_BLAZIKEN":282,"SPECIES_BLISSEY":242,"SPECIES_BRELOOM":307,"SPECIES_BULBASAUR":1,"SPECIES_BUTTERFREE":12,"SPECIES_CACNEA":344,"SPECIES_CACTURNE":345,"SPECIES_CAMERUPT":340,"SPECIES_CARVANHA":330,"SPECIES_CASCOON":293,"SPECIES_CASTFORM":385,"SPECIES_CATERPIE":10,"SPECIES_CELEBI":251,"SPECIES_CHANSEY":113,"SPECIES_CHARIZARD":6,"SPECIES_CHARMANDER":4,"SPECIES_CHARMELEON":5,"SPECIES_CHIKORITA":152,"SPECIES_CHIMECHO":411,"SPECIES_CHINCHOU":170,"SPECIES_CLAMPERL":373,"SPECIES_CLAYDOL":319,"SPECIES_CLEFABLE":36,"SPECIES_CLEFAIRY":35,"SPECIES_CLEFFA":173,"SPECIES_CLOYSTER":91,"SPECIES_COMBUSKEN":281,"SPECIES_CORPHISH":326,"SPECIES_CORSOLA":222,"SPECIES_CRADILY":389,"SPECIES_CRAWDAUNT":327,"SPECIES_CROBAT":169,"SPECIES_CROCONAW":159,"SPECIES_CUBONE":104,"SPECIES_CYNDAQUIL":155,"SPECIES_DELCATTY":316,"SPECIES_DELIBIRD":225,"SPECIES_DEOXYS":410,"SPECIES_DEWGONG":87,"SPECIES_DIGLETT":50,"SPECIES_DITTO":132,"SPECIES_DODRIO":85,"SPECIES_DODUO":84,"SPECIES_DONPHAN":232,"SPECIES_DRAGONAIR":148,"SPECIES_DRAGONITE":149,"SPECIES_DRATINI":147,"SPECIES_DROWZEE":96,"SPECIES_DUGTRIO":51,"SPECIES_DUNSPARCE":206,"SPECIES_DUSCLOPS":362,"SPECIES_DUSKULL":361,"SPECIES_DUSTOX":294,"SPECIES_EEVEE":133,"SPECIES_EGG":412,"SPECIES_EKANS":23,"SPECIES_ELECTABUZZ":125,"SPECIES_ELECTRIKE":337,"SPECIES_ELECTRODE":101,"SPECIES_ELEKID":239,"SPECIES_ENTEI":244,"SPECIES_ESPEON":196,"SPECIES_EXEGGCUTE":102,"SPECIES_EXEGGUTOR":103,"SPECIES_EXPLOUD":372,"SPECIES_FARFETCHD":83,"SPECIES_FEAROW":22,"SPECIES_FEEBAS":328,"SPECIES_FERALIGATR":160,"SPECIES_FLAAFFY":180,"SPECIES_FLAREON":136,"SPECIES_FLYGON":334,"SPECIES_FORRETRESS":205,"SPECIES_FURRET":162,"SPECIES_GARDEVOIR":394,"SPECIES_GASTLY":92,"SPECIES_GENGAR":94,"SPECIES_GEODUDE":74,"SPECIES_GIRAFARIG":203,"SPECIES_GLALIE":347,"SPECIES_GLIGAR":207,"SPECIES_GLOOM":44,"SPECIES_GOLBAT":42,"SPECIES_GOLDEEN":118,"SPECIES_GOLDUCK":55,"SPECIES_GOLEM":76,"SPECIES_GOREBYSS":375,"SPECIES_GRANBULL":210,"SPECIES_GRAVELER":75,"SPECIES_GRIMER":88,"SPECIES_GROUDON":405,"SPECIES_GROVYLE":278,"SPECIES_GROWLITHE":58,"SPECIES_GRUMPIG":352,"SPECIES_GULPIN":367,"SPECIES_GYARADOS":130,"SPECIES_HARIYAMA":336,"SPECIES_HAUNTER":93,"SPECIES_HERACROSS":214,"SPECIES_HITMONCHAN":107,"SPECIES_HITMONLEE":106,"SPECIES_HITMONTOP":237,"SPECIES_HOOTHOOT":163,"SPECIES_HOPPIP":187,"SPECIES_HORSEA":116,"SPECIES_HOUNDOOM":229,"SPECIES_HOUNDOUR":228,"SPECIES_HO_OH":250,"SPECIES_HUNTAIL":374,"SPECIES_HYPNO":97,"SPECIES_IGGLYBUFF":174,"SPECIES_ILLUMISE":387,"SPECIES_IVYSAUR":2,"SPECIES_JIGGLYPUFF":39,"SPECIES_JIRACHI":409,"SPECIES_JOLTEON":135,"SPECIES_JUMPLUFF":189,"SPECIES_JYNX":124,"SPECIES_KABUTO":140,"SPECIES_KABUTOPS":141,"SPECIES_KADABRA":64,"SPECIES_KAKUNA":14,"SPECIES_KANGASKHAN":115,"SPECIES_KECLEON":317,"SPECIES_KINGDRA":230,"SPECIES_KINGLER":99,"SPECIES_KIRLIA":393,"SPECIES_KOFFING":109,"SPECIES_KRABBY":98,"SPECIES_KYOGRE":404,"SPECIES_LAIRON":383,"SPECIES_LANTURN":171,"SPECIES_LAPRAS":131,"SPECIES_LARVITAR":246,"SPECIES_LATIAS":407,"SPECIES_LATIOS":408,"SPECIES_LEDIAN":166,"SPECIES_LEDYBA":165,"SPECIES_LICKITUNG":108,"SPECIES_LILEEP":388,"SPECIES_LINOONE":289,"SPECIES_LOMBRE":296,"SPECIES_LOTAD":295,"SPECIES_LOUDRED":371,"SPECIES_LUDICOLO":297,"SPECIES_LUGIA":249,"SPECIES_LUNATONE":348,"SPECIES_LUVDISC":325,"SPECIES_MACHAMP":68,"SPECIES_MACHOKE":67,"SPECIES_MACHOP":66,"SPECIES_MAGBY":240,"SPECIES_MAGCARGO":219,"SPECIES_MAGIKARP":129,"SPECIES_MAGMAR":126,"SPECIES_MAGNEMITE":81,"SPECIES_MAGNETON":82,"SPECIES_MAKUHITA":335,"SPECIES_MANECTRIC":338,"SPECIES_MANKEY":56,"SPECIES_MANTINE":226,"SPECIES_MAREEP":179,"SPECIES_MARILL":183,"SPECIES_MAROWAK":105,"SPECIES_MARSHTOMP":284,"SPECIES_MASQUERAIN":312,"SPECIES_MAWILE":355,"SPECIES_MEDICHAM":357,"SPECIES_MEDITITE":356,"SPECIES_MEGANIUM":154,"SPECIES_MEOWTH":52,"SPECIES_METAGROSS":400,"SPECIES_METANG":399,"SPECIES_METAPOD":11,"SPECIES_MEW":151,"SPECIES_MEWTWO":150,"SPECIES_MIGHTYENA":287,"SPECIES_MILOTIC":329,"SPECIES_MILTANK":241,"SPECIES_MINUN":354,"SPECIES_MISDREAVUS":200,"SPECIES_MOLTRES":146,"SPECIES_MR_MIME":122,"SPECIES_MUDKIP":283,"SPECIES_MUK":89,"SPECIES_MURKROW":198,"SPECIES_NATU":177,"SPECIES_NIDOKING":34,"SPECIES_NIDOQUEEN":31,"SPECIES_NIDORAN_F":29,"SPECIES_NIDORAN_M":32,"SPECIES_NIDORINA":30,"SPECIES_NIDORINO":33,"SPECIES_NINCADA":301,"SPECIES_NINETALES":38,"SPECIES_NINJASK":302,"SPECIES_NOCTOWL":164,"SPECIES_NONE":0,"SPECIES_NOSEPASS":320,"SPECIES_NUMEL":339,"SPECIES_NUZLEAF":299,"SPECIES_OCTILLERY":224,"SPECIES_ODDISH":43,"SPECIES_OLD_UNOWN_B":252,"SPECIES_OLD_UNOWN_C":253,"SPECIES_OLD_UNOWN_D":254,"SPECIES_OLD_UNOWN_E":255,"SPECIES_OLD_UNOWN_F":256,"SPECIES_OLD_UNOWN_G":257,"SPECIES_OLD_UNOWN_H":258,"SPECIES_OLD_UNOWN_I":259,"SPECIES_OLD_UNOWN_J":260,"SPECIES_OLD_UNOWN_K":261,"SPECIES_OLD_UNOWN_L":262,"SPECIES_OLD_UNOWN_M":263,"SPECIES_OLD_UNOWN_N":264,"SPECIES_OLD_UNOWN_O":265,"SPECIES_OLD_UNOWN_P":266,"SPECIES_OLD_UNOWN_Q":267,"SPECIES_OLD_UNOWN_R":268,"SPECIES_OLD_UNOWN_S":269,"SPECIES_OLD_UNOWN_T":270,"SPECIES_OLD_UNOWN_U":271,"SPECIES_OLD_UNOWN_V":272,"SPECIES_OLD_UNOWN_W":273,"SPECIES_OLD_UNOWN_X":274,"SPECIES_OLD_UNOWN_Y":275,"SPECIES_OLD_UNOWN_Z":276,"SPECIES_OMANYTE":138,"SPECIES_OMASTAR":139,"SPECIES_ONIX":95,"SPECIES_PARAS":46,"SPECIES_PARASECT":47,"SPECIES_PELIPPER":310,"SPECIES_PERSIAN":53,"SPECIES_PHANPY":231,"SPECIES_PICHU":172,"SPECIES_PIDGEOT":18,"SPECIES_PIDGEOTTO":17,"SPECIES_PIDGEY":16,"SPECIES_PIKACHU":25,"SPECIES_PILOSWINE":221,"SPECIES_PINECO":204,"SPECIES_PINSIR":127,"SPECIES_PLUSLE":353,"SPECIES_POLITOED":186,"SPECIES_POLIWAG":60,"SPECIES_POLIWHIRL":61,"SPECIES_POLIWRATH":62,"SPECIES_PONYTA":77,"SPECIES_POOCHYENA":286,"SPECIES_PORYGON":137,"SPECIES_PORYGON2":233,"SPECIES_PRIMEAPE":57,"SPECIES_PSYDUCK":54,"SPECIES_PUPITAR":247,"SPECIES_QUAGSIRE":195,"SPECIES_QUILAVA":156,"SPECIES_QWILFISH":211,"SPECIES_RAICHU":26,"SPECIES_RAIKOU":243,"SPECIES_RALTS":392,"SPECIES_RAPIDASH":78,"SPECIES_RATICATE":20,"SPECIES_RATTATA":19,"SPECIES_RAYQUAZA":406,"SPECIES_REGICE":402,"SPECIES_REGIROCK":401,"SPECIES_REGISTEEL":403,"SPECIES_RELICANTH":381,"SPECIES_REMORAID":223,"SPECIES_RHYDON":112,"SPECIES_RHYHORN":111,"SPECIES_ROSELIA":363,"SPECIES_SABLEYE":322,"SPECIES_SALAMENCE":397,"SPECIES_SANDSHREW":27,"SPECIES_SANDSLASH":28,"SPECIES_SCEPTILE":279,"SPECIES_SCIZOR":212,"SPECIES_SCYTHER":123,"SPECIES_SEADRA":117,"SPECIES_SEAKING":119,"SPECIES_SEALEO":342,"SPECIES_SEEDOT":298,"SPECIES_SEEL":86,"SPECIES_SENTRET":161,"SPECIES_SEVIPER":379,"SPECIES_SHARPEDO":331,"SPECIES_SHEDINJA":303,"SPECIES_SHELGON":396,"SPECIES_SHELLDER":90,"SPECIES_SHIFTRY":300,"SPECIES_SHROOMISH":306,"SPECIES_SHUCKLE":213,"SPECIES_SHUPPET":377,"SPECIES_SILCOON":291,"SPECIES_SKARMORY":227,"SPECIES_SKIPLOOM":188,"SPECIES_SKITTY":315,"SPECIES_SLAKING":366,"SPECIES_SLAKOTH":364,"SPECIES_SLOWBRO":80,"SPECIES_SLOWKING":199,"SPECIES_SLOWPOKE":79,"SPECIES_SLUGMA":218,"SPECIES_SMEARGLE":235,"SPECIES_SMOOCHUM":238,"SPECIES_SNEASEL":215,"SPECIES_SNORLAX":143,"SPECIES_SNORUNT":346,"SPECIES_SNUBBULL":209,"SPECIES_SOLROCK":349,"SPECIES_SPEAROW":21,"SPECIES_SPHEAL":341,"SPECIES_SPINARAK":167,"SPECIES_SPINDA":308,"SPECIES_SPOINK":351,"SPECIES_SQUIRTLE":7,"SPECIES_STANTLER":234,"SPECIES_STARMIE":121,"SPECIES_STARYU":120,"SPECIES_STEELIX":208,"SPECIES_SUDOWOODO":185,"SPECIES_SUICUNE":245,"SPECIES_SUNFLORA":192,"SPECIES_SUNKERN":191,"SPECIES_SURSKIT":311,"SPECIES_SWABLU":358,"SPECIES_SWALOT":368,"SPECIES_SWAMPERT":285,"SPECIES_SWELLOW":305,"SPECIES_SWINUB":220,"SPECIES_TAILLOW":304,"SPECIES_TANGELA":114,"SPECIES_TAUROS":128,"SPECIES_TEDDIURSA":216,"SPECIES_TENTACOOL":72,"SPECIES_TENTACRUEL":73,"SPECIES_TOGEPI":175,"SPECIES_TOGETIC":176,"SPECIES_TORCHIC":280,"SPECIES_TORKOAL":321,"SPECIES_TOTODILE":158,"SPECIES_TRAPINCH":332,"SPECIES_TREECKO":277,"SPECIES_TROPIUS":369,"SPECIES_TYPHLOSION":157,"SPECIES_TYRANITAR":248,"SPECIES_TYROGUE":236,"SPECIES_UMBREON":197,"SPECIES_UNOWN":201,"SPECIES_UNOWN_B":413,"SPECIES_UNOWN_C":414,"SPECIES_UNOWN_D":415,"SPECIES_UNOWN_E":416,"SPECIES_UNOWN_EMARK":438,"SPECIES_UNOWN_F":417,"SPECIES_UNOWN_G":418,"SPECIES_UNOWN_H":419,"SPECIES_UNOWN_I":420,"SPECIES_UNOWN_J":421,"SPECIES_UNOWN_K":422,"SPECIES_UNOWN_L":423,"SPECIES_UNOWN_M":424,"SPECIES_UNOWN_N":425,"SPECIES_UNOWN_O":426,"SPECIES_UNOWN_P":427,"SPECIES_UNOWN_Q":428,"SPECIES_UNOWN_QMARK":439,"SPECIES_UNOWN_R":429,"SPECIES_UNOWN_S":430,"SPECIES_UNOWN_T":431,"SPECIES_UNOWN_U":432,"SPECIES_UNOWN_V":433,"SPECIES_UNOWN_W":434,"SPECIES_UNOWN_X":435,"SPECIES_UNOWN_Y":436,"SPECIES_UNOWN_Z":437,"SPECIES_URSARING":217,"SPECIES_VAPOREON":134,"SPECIES_VENOMOTH":49,"SPECIES_VENONAT":48,"SPECIES_VENUSAUR":3,"SPECIES_VIBRAVA":333,"SPECIES_VICTREEBEL":71,"SPECIES_VIGOROTH":365,"SPECIES_VILEPLUME":45,"SPECIES_VOLBEAT":386,"SPECIES_VOLTORB":100,"SPECIES_VULPIX":37,"SPECIES_WAILMER":313,"SPECIES_WAILORD":314,"SPECIES_WALREIN":343,"SPECIES_WARTORTLE":8,"SPECIES_WEEDLE":13,"SPECIES_WEEPINBELL":70,"SPECIES_WEEZING":110,"SPECIES_WHISCASH":324,"SPECIES_WHISMUR":370,"SPECIES_WIGGLYTUFF":40,"SPECIES_WINGULL":309,"SPECIES_WOBBUFFET":202,"SPECIES_WOOPER":194,"SPECIES_WURMPLE":290,"SPECIES_WYNAUT":360,"SPECIES_XATU":178,"SPECIES_YANMA":193,"SPECIES_ZANGOOSE":380,"SPECIES_ZAPDOS":145,"SPECIES_ZIGZAGOON":288,"SPECIES_ZUBAT":41,"SUPER_ROD":2,"SYSTEM_FLAGS":2144,"TEMP_FLAGS_END":31,"TEMP_FLAGS_START":0,"TRAINERS_COUNT":855,"TRAINER_AARON":397,"TRAINER_ABIGAIL_1":358,"TRAINER_ABIGAIL_2":360,"TRAINER_ABIGAIL_3":361,"TRAINER_ABIGAIL_4":362,"TRAINER_ABIGAIL_5":363,"TRAINER_AIDAN":674,"TRAINER_AISHA":757,"TRAINER_ALAN":630,"TRAINER_ALBERT":80,"TRAINER_ALBERTO":12,"TRAINER_ALEX":413,"TRAINER_ALEXA":670,"TRAINER_ALEXIA":90,"TRAINER_ALEXIS":248,"TRAINER_ALICE":448,"TRAINER_ALIX":750,"TRAINER_ALLEN":333,"TRAINER_ALLISON":387,"TRAINER_ALVARO":849,"TRAINER_ALYSSA":701,"TRAINER_AMY_AND_LIV_1":481,"TRAINER_AMY_AND_LIV_2":482,"TRAINER_AMY_AND_LIV_3":485,"TRAINER_AMY_AND_LIV_4":487,"TRAINER_AMY_AND_LIV_5":488,"TRAINER_AMY_AND_LIV_6":489,"TRAINER_ANABEL":805,"TRAINER_ANDREA":613,"TRAINER_ANDRES_1":737,"TRAINER_ANDRES_2":812,"TRAINER_ANDRES_3":813,"TRAINER_ANDRES_4":814,"TRAINER_ANDRES_5":815,"TRAINER_ANDREW":336,"TRAINER_ANGELICA":436,"TRAINER_ANGELINA":712,"TRAINER_ANGELO":802,"TRAINER_ANNA_AND_MEG_1":287,"TRAINER_ANNA_AND_MEG_2":288,"TRAINER_ANNA_AND_MEG_3":289,"TRAINER_ANNA_AND_MEG_4":290,"TRAINER_ANNA_AND_MEG_5":291,"TRAINER_ANNIKA":502,"TRAINER_ANTHONY":352,"TRAINER_ARCHIE":34,"TRAINER_ASHLEY":655,"TRAINER_ATHENA":577,"TRAINER_ATSUSHI":190,"TRAINER_AURON":506,"TRAINER_AUSTINA":58,"TRAINER_AUTUMN":217,"TRAINER_AXLE":203,"TRAINER_BARNY":343,"TRAINER_BARRY":163,"TRAINER_BEAU":212,"TRAINER_BECK":414,"TRAINER_BECKY":470,"TRAINER_BEN":323,"TRAINER_BENJAMIN_1":353,"TRAINER_BENJAMIN_2":354,"TRAINER_BENJAMIN_3":355,"TRAINER_BENJAMIN_4":356,"TRAINER_BENJAMIN_5":357,"TRAINER_BENNY":407,"TRAINER_BERKE":74,"TRAINER_BERNIE_1":206,"TRAINER_BERNIE_2":207,"TRAINER_BERNIE_3":208,"TRAINER_BERNIE_4":209,"TRAINER_BERNIE_5":210,"TRAINER_BETH":445,"TRAINER_BETHANY":301,"TRAINER_BEVERLY":441,"TRAINER_BIANCA":706,"TRAINER_BILLY":319,"TRAINER_BLAKE":235,"TRAINER_BRANDEN":745,"TRAINER_BRANDI":756,"TRAINER_BRANDON":811,"TRAINER_BRAWLY_1":266,"TRAINER_BRAWLY_2":774,"TRAINER_BRAWLY_3":775,"TRAINER_BRAWLY_4":776,"TRAINER_BRAWLY_5":777,"TRAINER_BRAXTON":75,"TRAINER_BRENDA":454,"TRAINER_BRENDAN_LILYCOVE_MUDKIP":661,"TRAINER_BRENDAN_LILYCOVE_TORCHIC":663,"TRAINER_BRENDAN_LILYCOVE_TREECKO":662,"TRAINER_BRENDAN_PLACEHOLDER":853,"TRAINER_BRENDAN_ROUTE_103_MUDKIP":520,"TRAINER_BRENDAN_ROUTE_103_TORCHIC":526,"TRAINER_BRENDAN_ROUTE_103_TREECKO":523,"TRAINER_BRENDAN_ROUTE_110_MUDKIP":521,"TRAINER_BRENDAN_ROUTE_110_TORCHIC":527,"TRAINER_BRENDAN_ROUTE_110_TREECKO":524,"TRAINER_BRENDAN_ROUTE_119_MUDKIP":522,"TRAINER_BRENDAN_ROUTE_119_TORCHIC":528,"TRAINER_BRENDAN_ROUTE_119_TREECKO":525,"TRAINER_BRENDAN_RUSTBORO_MUDKIP":593,"TRAINER_BRENDAN_RUSTBORO_TORCHIC":599,"TRAINER_BRENDAN_RUSTBORO_TREECKO":592,"TRAINER_BRENDEN":572,"TRAINER_BRENT":223,"TRAINER_BRIANNA":118,"TRAINER_BRICE":626,"TRAINER_BRIDGET":129,"TRAINER_BROOKE_1":94,"TRAINER_BROOKE_2":101,"TRAINER_BROOKE_3":102,"TRAINER_BROOKE_4":103,"TRAINER_BROOKE_5":104,"TRAINER_BRYAN":744,"TRAINER_BRYANT":746,"TRAINER_CALE":764,"TRAINER_CALLIE":763,"TRAINER_CALVIN_1":318,"TRAINER_CALVIN_2":328,"TRAINER_CALVIN_3":329,"TRAINER_CALVIN_4":330,"TRAINER_CALVIN_5":331,"TRAINER_CAMDEN":374,"TRAINER_CAMERON_1":238,"TRAINER_CAMERON_2":239,"TRAINER_CAMERON_3":240,"TRAINER_CAMERON_4":241,"TRAINER_CAMERON_5":242,"TRAINER_CAMRON":739,"TRAINER_CARLEE":464,"TRAINER_CAROL":471,"TRAINER_CAROLINA":741,"TRAINER_CAROLINE":99,"TRAINER_CARTER":345,"TRAINER_CATHERINE_1":559,"TRAINER_CATHERINE_2":562,"TRAINER_CATHERINE_3":563,"TRAINER_CATHERINE_4":564,"TRAINER_CATHERINE_5":565,"TRAINER_CEDRIC":475,"TRAINER_CELIA":743,"TRAINER_CELINA":705,"TRAINER_CHAD":174,"TRAINER_CHANDLER":698,"TRAINER_CHARLIE":66,"TRAINER_CHARLOTTE":714,"TRAINER_CHASE":378,"TRAINER_CHESTER":408,"TRAINER_CHIP":45,"TRAINER_CHRIS":693,"TRAINER_CINDY_1":114,"TRAINER_CINDY_2":117,"TRAINER_CINDY_3":120,"TRAINER_CINDY_4":121,"TRAINER_CINDY_5":122,"TRAINER_CINDY_6":123,"TRAINER_CLARENCE":580,"TRAINER_CLARISSA":435,"TRAINER_CLARK":631,"TRAINER_CLAUDE":338,"TRAINER_CLIFFORD":584,"TRAINER_COBY":709,"TRAINER_COLE":201,"TRAINER_COLIN":405,"TRAINER_COLTON":294,"TRAINER_CONNIE":128,"TRAINER_CONOR":511,"TRAINER_CORA":428,"TRAINER_CORY_1":740,"TRAINER_CORY_2":816,"TRAINER_CORY_3":817,"TRAINER_CORY_4":818,"TRAINER_CORY_5":819,"TRAINER_CRISSY":614,"TRAINER_CRISTIAN":574,"TRAINER_CRISTIN_1":767,"TRAINER_CRISTIN_2":828,"TRAINER_CRISTIN_3":829,"TRAINER_CRISTIN_4":830,"TRAINER_CRISTIN_5":831,"TRAINER_CYNDY_1":427,"TRAINER_CYNDY_2":430,"TRAINER_CYNDY_3":431,"TRAINER_CYNDY_4":432,"TRAINER_CYNDY_5":433,"TRAINER_DAISUKE":189,"TRAINER_DAISY":36,"TRAINER_DALE":341,"TRAINER_DALTON_1":196,"TRAINER_DALTON_2":197,"TRAINER_DALTON_3":198,"TRAINER_DALTON_4":199,"TRAINER_DALTON_5":200,"TRAINER_DANA":458,"TRAINER_DANIELLE":650,"TRAINER_DAPHNE":115,"TRAINER_DARCY":733,"TRAINER_DARIAN":696,"TRAINER_DARIUS":803,"TRAINER_DARRIN":154,"TRAINER_DAVID":158,"TRAINER_DAVIS":539,"TRAINER_DAWSON":694,"TRAINER_DAYTON":760,"TRAINER_DEAN":164,"TRAINER_DEANDRE":715,"TRAINER_DEBRA":460,"TRAINER_DECLAN":15,"TRAINER_DEMETRIUS":375,"TRAINER_DENISE":444,"TRAINER_DEREK":227,"TRAINER_DEVAN":753,"TRAINER_DEZ_AND_LUKE":640,"TRAINER_DIANA_1":474,"TRAINER_DIANA_2":477,"TRAINER_DIANA_3":478,"TRAINER_DIANA_4":479,"TRAINER_DIANA_5":480,"TRAINER_DIANNE":417,"TRAINER_DILLON":327,"TRAINER_DOMINIK":152,"TRAINER_DONALD":224,"TRAINER_DONNY":384,"TRAINER_DOUG":618,"TRAINER_DOUGLAS":153,"TRAINER_DRAKE":264,"TRAINER_DREW":211,"TRAINER_DUDLEY":173,"TRAINER_DUNCAN":496,"TRAINER_DUSTY_1":44,"TRAINER_DUSTY_2":47,"TRAINER_DUSTY_3":48,"TRAINER_DUSTY_4":49,"TRAINER_DUSTY_5":50,"TRAINER_DWAYNE":493,"TRAINER_DYLAN_1":364,"TRAINER_DYLAN_2":365,"TRAINER_DYLAN_3":366,"TRAINER_DYLAN_4":367,"TRAINER_DYLAN_5":368,"TRAINER_ED":13,"TRAINER_EDDIE":332,"TRAINER_EDGAR":79,"TRAINER_EDMOND":491,"TRAINER_EDWARD":232,"TRAINER_EDWARDO":404,"TRAINER_EDWIN_1":512,"TRAINER_EDWIN_2":515,"TRAINER_EDWIN_3":516,"TRAINER_EDWIN_4":517,"TRAINER_EDWIN_5":518,"TRAINER_ELI":501,"TRAINER_ELIJAH":742,"TRAINER_ELLIOT_1":339,"TRAINER_ELLIOT_2":346,"TRAINER_ELLIOT_3":347,"TRAINER_ELLIOT_4":348,"TRAINER_ELLIOT_5":349,"TRAINER_ERIC":632,"TRAINER_ERNEST_1":492,"TRAINER_ERNEST_2":497,"TRAINER_ERNEST_3":498,"TRAINER_ERNEST_4":499,"TRAINER_ERNEST_5":500,"TRAINER_ETHAN_1":216,"TRAINER_ETHAN_2":219,"TRAINER_ETHAN_3":220,"TRAINER_ETHAN_4":221,"TRAINER_ETHAN_5":222,"TRAINER_EVERETT":850,"TRAINER_FABIAN":759,"TRAINER_FELIX":38,"TRAINER_FERNANDO_1":195,"TRAINER_FERNANDO_2":832,"TRAINER_FERNANDO_3":833,"TRAINER_FERNANDO_4":834,"TRAINER_FERNANDO_5":835,"TRAINER_FLAGS_END":2143,"TRAINER_FLAGS_START":1280,"TRAINER_FLANNERY_1":268,"TRAINER_FLANNERY_2":782,"TRAINER_FLANNERY_3":783,"TRAINER_FLANNERY_4":784,"TRAINER_FLANNERY_5":785,"TRAINER_FLINT":654,"TRAINER_FOSTER":46,"TRAINER_FRANKLIN":170,"TRAINER_FREDRICK":29,"TRAINER_GABBY_AND_TY_1":51,"TRAINER_GABBY_AND_TY_2":52,"TRAINER_GABBY_AND_TY_3":53,"TRAINER_GABBY_AND_TY_4":54,"TRAINER_GABBY_AND_TY_5":55,"TRAINER_GABBY_AND_TY_6":56,"TRAINER_GABRIELLE_1":9,"TRAINER_GABRIELLE_2":840,"TRAINER_GABRIELLE_3":841,"TRAINER_GABRIELLE_4":842,"TRAINER_GABRIELLE_5":843,"TRAINER_GARRET":138,"TRAINER_GARRISON":547,"TRAINER_GEORGE":73,"TRAINER_GEORGIA":281,"TRAINER_GERALD":648,"TRAINER_GILBERT":169,"TRAINER_GINA_AND_MIA_1":483,"TRAINER_GINA_AND_MIA_2":486,"TRAINER_GLACIA":263,"TRAINER_GRACE":450,"TRAINER_GREG":619,"TRAINER_GRETA":808,"TRAINER_GRUNT_AQUA_HIDEOUT_1":2,"TRAINER_GRUNT_AQUA_HIDEOUT_2":3,"TRAINER_GRUNT_AQUA_HIDEOUT_3":4,"TRAINER_GRUNT_AQUA_HIDEOUT_4":5,"TRAINER_GRUNT_AQUA_HIDEOUT_5":27,"TRAINER_GRUNT_AQUA_HIDEOUT_6":28,"TRAINER_GRUNT_AQUA_HIDEOUT_7":192,"TRAINER_GRUNT_AQUA_HIDEOUT_8":193,"TRAINER_GRUNT_JAGGED_PASS":570,"TRAINER_GRUNT_MAGMA_HIDEOUT_1":716,"TRAINER_GRUNT_MAGMA_HIDEOUT_10":725,"TRAINER_GRUNT_MAGMA_HIDEOUT_11":726,"TRAINER_GRUNT_MAGMA_HIDEOUT_12":727,"TRAINER_GRUNT_MAGMA_HIDEOUT_13":728,"TRAINER_GRUNT_MAGMA_HIDEOUT_14":729,"TRAINER_GRUNT_MAGMA_HIDEOUT_15":730,"TRAINER_GRUNT_MAGMA_HIDEOUT_16":731,"TRAINER_GRUNT_MAGMA_HIDEOUT_2":717,"TRAINER_GRUNT_MAGMA_HIDEOUT_3":718,"TRAINER_GRUNT_MAGMA_HIDEOUT_4":719,"TRAINER_GRUNT_MAGMA_HIDEOUT_5":720,"TRAINER_GRUNT_MAGMA_HIDEOUT_6":721,"TRAINER_GRUNT_MAGMA_HIDEOUT_7":722,"TRAINER_GRUNT_MAGMA_HIDEOUT_8":723,"TRAINER_GRUNT_MAGMA_HIDEOUT_9":724,"TRAINER_GRUNT_MT_CHIMNEY_1":146,"TRAINER_GRUNT_MT_CHIMNEY_2":579,"TRAINER_GRUNT_MT_PYRE_1":23,"TRAINER_GRUNT_MT_PYRE_2":24,"TRAINER_GRUNT_MT_PYRE_3":25,"TRAINER_GRUNT_MT_PYRE_4":569,"TRAINER_GRUNT_MUSEUM_1":20,"TRAINER_GRUNT_MUSEUM_2":21,"TRAINER_GRUNT_PETALBURG_WOODS":10,"TRAINER_GRUNT_RUSTURF_TUNNEL":16,"TRAINER_GRUNT_SEAFLOOR_CAVERN_1":6,"TRAINER_GRUNT_SEAFLOOR_CAVERN_2":7,"TRAINER_GRUNT_SEAFLOOR_CAVERN_3":8,"TRAINER_GRUNT_SEAFLOOR_CAVERN_4":14,"TRAINER_GRUNT_SEAFLOOR_CAVERN_5":567,"TRAINER_GRUNT_SPACE_CENTER_1":22,"TRAINER_GRUNT_SPACE_CENTER_2":116,"TRAINER_GRUNT_SPACE_CENTER_3":586,"TRAINER_GRUNT_SPACE_CENTER_4":587,"TRAINER_GRUNT_SPACE_CENTER_5":588,"TRAINER_GRUNT_SPACE_CENTER_6":589,"TRAINER_GRUNT_SPACE_CENTER_7":590,"TRAINER_GRUNT_UNUSED":568,"TRAINER_GRUNT_WEATHER_INST_1":17,"TRAINER_GRUNT_WEATHER_INST_2":18,"TRAINER_GRUNT_WEATHER_INST_3":19,"TRAINER_GRUNT_WEATHER_INST_4":26,"TRAINER_GRUNT_WEATHER_INST_5":596,"TRAINER_GWEN":59,"TRAINER_HAILEY":697,"TRAINER_HALEY_1":604,"TRAINER_HALEY_2":607,"TRAINER_HALEY_3":608,"TRAINER_HALEY_4":609,"TRAINER_HALEY_5":610,"TRAINER_HALLE":546,"TRAINER_HANNAH":244,"TRAINER_HARRISON":578,"TRAINER_HAYDEN":707,"TRAINER_HECTOR":513,"TRAINER_HEIDI":469,"TRAINER_HELENE":751,"TRAINER_HENRY":668,"TRAINER_HERMAN":167,"TRAINER_HIDEO":651,"TRAINER_HITOSHI":180,"TRAINER_HOPE":96,"TRAINER_HUDSON":510,"TRAINER_HUEY":490,"TRAINER_HUGH":399,"TRAINER_HUMBERTO":402,"TRAINER_IMANI":442,"TRAINER_IRENE":476,"TRAINER_ISAAC_1":538,"TRAINER_ISAAC_2":541,"TRAINER_ISAAC_3":542,"TRAINER_ISAAC_4":543,"TRAINER_ISAAC_5":544,"TRAINER_ISABELLA":595,"TRAINER_ISABELLE":736,"TRAINER_ISABEL_1":302,"TRAINER_ISABEL_2":303,"TRAINER_ISABEL_3":304,"TRAINER_ISABEL_4":305,"TRAINER_ISABEL_5":306,"TRAINER_ISAIAH_1":376,"TRAINER_ISAIAH_2":379,"TRAINER_ISAIAH_3":380,"TRAINER_ISAIAH_4":381,"TRAINER_ISAIAH_5":382,"TRAINER_ISOBEL":383,"TRAINER_IVAN":337,"TRAINER_JACE":204,"TRAINER_JACK":172,"TRAINER_JACKI_1":249,"TRAINER_JACKI_2":250,"TRAINER_JACKI_3":251,"TRAINER_JACKI_4":252,"TRAINER_JACKI_5":253,"TRAINER_JACKSON_1":552,"TRAINER_JACKSON_2":555,"TRAINER_JACKSON_3":556,"TRAINER_JACKSON_4":557,"TRAINER_JACKSON_5":558,"TRAINER_JACLYN":243,"TRAINER_JACOB":351,"TRAINER_JAIDEN":749,"TRAINER_JAMES_1":621,"TRAINER_JAMES_2":622,"TRAINER_JAMES_3":623,"TRAINER_JAMES_4":624,"TRAINER_JAMES_5":625,"TRAINER_JANI":418,"TRAINER_JANICE":605,"TRAINER_JARED":401,"TRAINER_JASMINE":359,"TRAINER_JAYLEN":326,"TRAINER_JAZMYN":503,"TRAINER_JEFF":202,"TRAINER_JEFFREY_1":226,"TRAINER_JEFFREY_2":228,"TRAINER_JEFFREY_3":229,"TRAINER_JEFFREY_4":230,"TRAINER_JEFFREY_5":231,"TRAINER_JENNA":560,"TRAINER_JENNIFER":95,"TRAINER_JENNY_1":449,"TRAINER_JENNY_2":465,"TRAINER_JENNY_3":466,"TRAINER_JENNY_4":467,"TRAINER_JENNY_5":468,"TRAINER_JEROME":156,"TRAINER_JERRY_1":273,"TRAINER_JERRY_2":276,"TRAINER_JERRY_3":277,"TRAINER_JERRY_4":278,"TRAINER_JERRY_5":279,"TRAINER_JESSICA_1":127,"TRAINER_JESSICA_2":132,"TRAINER_JESSICA_3":133,"TRAINER_JESSICA_4":134,"TRAINER_JESSICA_5":135,"TRAINER_JOCELYN":425,"TRAINER_JODY":91,"TRAINER_JOEY":322,"TRAINER_JOHANNA":647,"TRAINER_JOHNSON":754,"TRAINER_JOHN_AND_JAY_1":681,"TRAINER_JOHN_AND_JAY_2":682,"TRAINER_JOHN_AND_JAY_3":683,"TRAINER_JOHN_AND_JAY_4":684,"TRAINER_JOHN_AND_JAY_5":685,"TRAINER_JONAH":667,"TRAINER_JONAS":504,"TRAINER_JONATHAN":598,"TRAINER_JOSE":617,"TRAINER_JOSEPH":700,"TRAINER_JOSH":320,"TRAINER_JOSHUA":237,"TRAINER_JOSUE":738,"TRAINER_JUAN_1":272,"TRAINER_JUAN_2":798,"TRAINER_JUAN_3":799,"TRAINER_JUAN_4":800,"TRAINER_JUAN_5":801,"TRAINER_JULIE":100,"TRAINER_JULIO":566,"TRAINER_JUSTIN":215,"TRAINER_KAI":713,"TRAINER_KALEB":699,"TRAINER_KARA":457,"TRAINER_KAREN_1":280,"TRAINER_KAREN_2":282,"TRAINER_KAREN_3":283,"TRAINER_KAREN_4":284,"TRAINER_KAREN_5":285,"TRAINER_KATELYNN":325,"TRAINER_KATELYN_1":386,"TRAINER_KATELYN_2":388,"TRAINER_KATELYN_3":389,"TRAINER_KATELYN_4":390,"TRAINER_KATELYN_5":391,"TRAINER_KATE_AND_JOY":286,"TRAINER_KATHLEEN":583,"TRAINER_KATIE":455,"TRAINER_KAYLA":247,"TRAINER_KAYLEE":462,"TRAINER_KAYLEY":505,"TRAINER_KEEGAN":205,"TRAINER_KEIGO":652,"TRAINER_KEIRA":93,"TRAINER_KELVIN":507,"TRAINER_KENT":620,"TRAINER_KEVIN":171,"TRAINER_KIM_AND_IRIS":678,"TRAINER_KINDRA":106,"TRAINER_KIRA_AND_DAN_1":642,"TRAINER_KIRA_AND_DAN_2":643,"TRAINER_KIRA_AND_DAN_3":644,"TRAINER_KIRA_AND_DAN_4":645,"TRAINER_KIRA_AND_DAN_5":646,"TRAINER_KIRK":191,"TRAINER_KIYO":181,"TRAINER_KOICHI":182,"TRAINER_KOJI_1":672,"TRAINER_KOJI_2":824,"TRAINER_KOJI_3":825,"TRAINER_KOJI_4":826,"TRAINER_KOJI_5":827,"TRAINER_KYLA":443,"TRAINER_KYRA":748,"TRAINER_LAO_1":419,"TRAINER_LAO_2":421,"TRAINER_LAO_3":422,"TRAINER_LAO_4":423,"TRAINER_LAO_5":424,"TRAINER_LARRY":213,"TRAINER_LAURA":426,"TRAINER_LAUREL":463,"TRAINER_LAWRENCE":710,"TRAINER_LEAF":852,"TRAINER_LEAH":35,"TRAINER_LEA_AND_JED":641,"TRAINER_LENNY":628,"TRAINER_LEONARD":495,"TRAINER_LEONARDO":576,"TRAINER_LEONEL":762,"TRAINER_LEROY":77,"TRAINER_LILA_AND_ROY_1":687,"TRAINER_LILA_AND_ROY_2":688,"TRAINER_LILA_AND_ROY_3":689,"TRAINER_LILA_AND_ROY_4":690,"TRAINER_LILA_AND_ROY_5":691,"TRAINER_LILITH":573,"TRAINER_LINDA":461,"TRAINER_LISA_AND_RAY":692,"TRAINER_LOLA_1":57,"TRAINER_LOLA_2":60,"TRAINER_LOLA_3":61,"TRAINER_LOLA_4":62,"TRAINER_LOLA_5":63,"TRAINER_LORENZO":553,"TRAINER_LUCAS_1":629,"TRAINER_LUCAS_2":633,"TRAINER_LUCY":810,"TRAINER_LUIS":151,"TRAINER_LUNG":420,"TRAINER_LYDIA_1":545,"TRAINER_LYDIA_2":548,"TRAINER_LYDIA_3":549,"TRAINER_LYDIA_4":550,"TRAINER_LYDIA_5":551,"TRAINER_LYLE":616,"TRAINER_MACEY":591,"TRAINER_MADELINE_1":434,"TRAINER_MADELINE_2":437,"TRAINER_MADELINE_3":438,"TRAINER_MADELINE_4":439,"TRAINER_MADELINE_5":440,"TRAINER_MAKAYLA":758,"TRAINER_MARC":571,"TRAINER_MARCEL":11,"TRAINER_MARCOS":702,"TRAINER_MARIA_1":369,"TRAINER_MARIA_2":370,"TRAINER_MARIA_3":371,"TRAINER_MARIA_4":372,"TRAINER_MARIA_5":373,"TRAINER_MARIELA":848,"TRAINER_MARK":145,"TRAINER_MARLENE":752,"TRAINER_MARLEY":508,"TRAINER_MARTHA":473,"TRAINER_MARY":89,"TRAINER_MATT":30,"TRAINER_MATTHEW":157,"TRAINER_MAURA":246,"TRAINER_MAXIE_MAGMA_HIDEOUT":601,"TRAINER_MAXIE_MOSSDEEP":734,"TRAINER_MAXIE_MT_CHIMNEY":602,"TRAINER_MAY_LILYCOVE_MUDKIP":664,"TRAINER_MAY_LILYCOVE_TORCHIC":666,"TRAINER_MAY_LILYCOVE_TREECKO":665,"TRAINER_MAY_PLACEHOLDER":854,"TRAINER_MAY_ROUTE_103_MUDKIP":529,"TRAINER_MAY_ROUTE_103_TORCHIC":535,"TRAINER_MAY_ROUTE_103_TREECKO":532,"TRAINER_MAY_ROUTE_110_MUDKIP":530,"TRAINER_MAY_ROUTE_110_TORCHIC":536,"TRAINER_MAY_ROUTE_110_TREECKO":533,"TRAINER_MAY_ROUTE_119_MUDKIP":531,"TRAINER_MAY_ROUTE_119_TORCHIC":537,"TRAINER_MAY_ROUTE_119_TREECKO":534,"TRAINER_MAY_RUSTBORO_MUDKIP":600,"TRAINER_MAY_RUSTBORO_TORCHIC":769,"TRAINER_MAY_RUSTBORO_TREECKO":768,"TRAINER_MELINA":755,"TRAINER_MELISSA":124,"TRAINER_MEL_AND_PAUL":680,"TRAINER_MICAH":255,"TRAINER_MICHELLE":98,"TRAINER_MIGUEL_1":293,"TRAINER_MIGUEL_2":295,"TRAINER_MIGUEL_3":296,"TRAINER_MIGUEL_4":297,"TRAINER_MIGUEL_5":298,"TRAINER_MIKE_1":634,"TRAINER_MIKE_2":635,"TRAINER_MISSY":447,"TRAINER_MITCHELL":540,"TRAINER_MIU_AND_YUKI":484,"TRAINER_MOLLIE":137,"TRAINER_MYLES":765,"TRAINER_NANCY":472,"TRAINER_NAOMI":119,"TRAINER_NATE":582,"TRAINER_NED":340,"TRAINER_NICHOLAS":585,"TRAINER_NICOLAS_1":392,"TRAINER_NICOLAS_2":393,"TRAINER_NICOLAS_3":394,"TRAINER_NICOLAS_4":395,"TRAINER_NICOLAS_5":396,"TRAINER_NIKKI":453,"TRAINER_NOB_1":183,"TRAINER_NOB_2":184,"TRAINER_NOB_3":185,"TRAINER_NOB_4":186,"TRAINER_NOB_5":187,"TRAINER_NOLAN":342,"TRAINER_NOLAND":809,"TRAINER_NOLEN":161,"TRAINER_NONE":0,"TRAINER_NORMAN_1":269,"TRAINER_NORMAN_2":786,"TRAINER_NORMAN_3":787,"TRAINER_NORMAN_4":788,"TRAINER_NORMAN_5":789,"TRAINER_OLIVIA":130,"TRAINER_OWEN":83,"TRAINER_PABLO_1":377,"TRAINER_PABLO_2":820,"TRAINER_PABLO_3":821,"TRAINER_PABLO_4":822,"TRAINER_PABLO_5":823,"TRAINER_PARKER":72,"TRAINER_PAT":766,"TRAINER_PATRICIA":105,"TRAINER_PAUL":275,"TRAINER_PAULA":429,"TRAINER_PAXTON":594,"TRAINER_PERRY":398,"TRAINER_PETE":735,"TRAINER_PHIL":400,"TRAINER_PHILLIP":494,"TRAINER_PHOEBE":262,"TRAINER_PRESLEY":403,"TRAINER_PRESTON":233,"TRAINER_QUINCY":324,"TRAINER_RACHEL":761,"TRAINER_RANDALL":71,"TRAINER_RED":851,"TRAINER_REED":675,"TRAINER_RELI_AND_IAN":686,"TRAINER_REYNA":509,"TRAINER_RHETT":703,"TRAINER_RICHARD":166,"TRAINER_RICK":615,"TRAINER_RICKY_1":64,"TRAINER_RICKY_2":67,"TRAINER_RICKY_3":68,"TRAINER_RICKY_4":69,"TRAINER_RICKY_5":70,"TRAINER_RILEY":653,"TRAINER_ROBERT_1":406,"TRAINER_ROBERT_2":409,"TRAINER_ROBERT_3":410,"TRAINER_ROBERT_4":411,"TRAINER_ROBERT_5":412,"TRAINER_ROBIN":612,"TRAINER_RODNEY":165,"TRAINER_ROGER":669,"TRAINER_ROLAND":160,"TRAINER_RONALD":350,"TRAINER_ROSE_1":37,"TRAINER_ROSE_2":40,"TRAINER_ROSE_3":41,"TRAINER_ROSE_4":42,"TRAINER_ROSE_5":43,"TRAINER_ROXANNE_1":265,"TRAINER_ROXANNE_2":770,"TRAINER_ROXANNE_3":771,"TRAINER_ROXANNE_4":772,"TRAINER_ROXANNE_5":773,"TRAINER_RUBEN":671,"TRAINER_SALLY":611,"TRAINER_SAMANTHA":245,"TRAINER_SAMUEL":81,"TRAINER_SANTIAGO":168,"TRAINER_SARAH":695,"TRAINER_SAWYER_1":1,"TRAINER_SAWYER_2":836,"TRAINER_SAWYER_3":837,"TRAINER_SAWYER_4":838,"TRAINER_SAWYER_5":839,"TRAINER_SEBASTIAN":554,"TRAINER_SHANE":214,"TRAINER_SHANNON":97,"TRAINER_SHARON":452,"TRAINER_SHAWN":194,"TRAINER_SHAYLA":747,"TRAINER_SHEILA":125,"TRAINER_SHELBY_1":313,"TRAINER_SHELBY_2":314,"TRAINER_SHELBY_3":315,"TRAINER_SHELBY_4":316,"TRAINER_SHELBY_5":317,"TRAINER_SHELLY_SEAFLOOR_CAVERN":33,"TRAINER_SHELLY_WEATHER_INSTITUTE":32,"TRAINER_SHIRLEY":126,"TRAINER_SIDNEY":261,"TRAINER_SIENNA":459,"TRAINER_SIMON":65,"TRAINER_SOPHIA":561,"TRAINER_SOPHIE":708,"TRAINER_SPENCER":159,"TRAINER_SPENSER":807,"TRAINER_STAN":162,"TRAINER_STEVEN":804,"TRAINER_STEVE_1":143,"TRAINER_STEVE_2":147,"TRAINER_STEVE_3":148,"TRAINER_STEVE_4":149,"TRAINER_STEVE_5":150,"TRAINER_SUSIE":456,"TRAINER_SYLVIA":575,"TRAINER_TABITHA_MAGMA_HIDEOUT":732,"TRAINER_TABITHA_MOSSDEEP":514,"TRAINER_TABITHA_MT_CHIMNEY":597,"TRAINER_TAKAO":179,"TRAINER_TAKASHI":416,"TRAINER_TALIA":385,"TRAINER_TAMMY":107,"TRAINER_TANYA":451,"TRAINER_TARA":446,"TRAINER_TASHA":109,"TRAINER_TATE_AND_LIZA_1":271,"TRAINER_TATE_AND_LIZA_2":794,"TRAINER_TATE_AND_LIZA_3":795,"TRAINER_TATE_AND_LIZA_4":796,"TRAINER_TATE_AND_LIZA_5":797,"TRAINER_TAYLOR":225,"TRAINER_TED":274,"TRAINER_TERRY":581,"TRAINER_THALIA_1":144,"TRAINER_THALIA_2":844,"TRAINER_THALIA_3":845,"TRAINER_THALIA_4":846,"TRAINER_THALIA_5":847,"TRAINER_THOMAS":256,"TRAINER_TIANA":603,"TRAINER_TIFFANY":131,"TRAINER_TIMMY":334,"TRAINER_TIMOTHY_1":307,"TRAINER_TIMOTHY_2":308,"TRAINER_TIMOTHY_3":309,"TRAINER_TIMOTHY_4":310,"TRAINER_TIMOTHY_5":311,"TRAINER_TISHA":676,"TRAINER_TOMMY":321,"TRAINER_TONY_1":155,"TRAINER_TONY_2":175,"TRAINER_TONY_3":176,"TRAINER_TONY_4":177,"TRAINER_TONY_5":178,"TRAINER_TORI_AND_TIA":677,"TRAINER_TRAVIS":218,"TRAINER_TRENT_1":627,"TRAINER_TRENT_2":636,"TRAINER_TRENT_3":637,"TRAINER_TRENT_4":638,"TRAINER_TRENT_5":639,"TRAINER_TUCKER":806,"TRAINER_TYRA_AND_IVY":679,"TRAINER_TYRON":704,"TRAINER_VALERIE_1":108,"TRAINER_VALERIE_2":110,"TRAINER_VALERIE_3":111,"TRAINER_VALERIE_4":112,"TRAINER_VALERIE_5":113,"TRAINER_VANESSA":300,"TRAINER_VICKY":312,"TRAINER_VICTOR":292,"TRAINER_VICTORIA":299,"TRAINER_VINCENT":76,"TRAINER_VIOLET":39,"TRAINER_VIRGIL":234,"TRAINER_VITO":82,"TRAINER_VIVI":606,"TRAINER_VIVIAN":649,"TRAINER_WADE":344,"TRAINER_WALLACE":335,"TRAINER_WALLY_MAUVILLE":656,"TRAINER_WALLY_VR_1":519,"TRAINER_WALLY_VR_2":657,"TRAINER_WALLY_VR_3":658,"TRAINER_WALLY_VR_4":659,"TRAINER_WALLY_VR_5":660,"TRAINER_WALTER_1":254,"TRAINER_WALTER_2":257,"TRAINER_WALTER_3":258,"TRAINER_WALTER_4":259,"TRAINER_WALTER_5":260,"TRAINER_WARREN":88,"TRAINER_WATTSON_1":267,"TRAINER_WATTSON_2":778,"TRAINER_WATTSON_3":779,"TRAINER_WATTSON_4":780,"TRAINER_WATTSON_5":781,"TRAINER_WAYNE":673,"TRAINER_WENDY":92,"TRAINER_WILLIAM":236,"TRAINER_WILTON_1":78,"TRAINER_WILTON_2":84,"TRAINER_WILTON_3":85,"TRAINER_WILTON_4":86,"TRAINER_WILTON_5":87,"TRAINER_WINONA_1":270,"TRAINER_WINONA_2":790,"TRAINER_WINONA_3":791,"TRAINER_WINONA_4":792,"TRAINER_WINONA_5":793,"TRAINER_WINSTON_1":136,"TRAINER_WINSTON_2":139,"TRAINER_WINSTON_3":140,"TRAINER_WINSTON_4":141,"TRAINER_WINSTON_5":142,"TRAINER_WYATT":711,"TRAINER_YASU":415,"TRAINER_YUJI":188,"TRAINER_ZANDER":31},"locations":{"BADGE_1":{"default_item":226,"flag":1182,"rom_address":2181887},"BADGE_2":{"default_item":227,"flag":1183,"rom_address":2089138},"BADGE_3":{"default_item":228,"flag":1184,"rom_address":2161147},"BADGE_4":{"default_item":229,"flag":1185,"rom_address":2097239},"BADGE_5":{"default_item":230,"flag":1186,"rom_address":2123748},"BADGE_6":{"default_item":231,"flag":1187,"rom_address":2195957},"BADGE_7":{"default_item":232,"flag":1188,"rom_address":2237755},"BADGE_8":{"default_item":233,"flag":1189,"rom_address":2256065},"HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY":{"default_item":281,"flag":531,"rom_address":5479240},"HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY":{"default_item":282,"flag":532,"rom_address":5479252},"HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY":{"default_item":283,"flag":533,"rom_address":5479264},"HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY":{"default_item":284,"flag":534,"rom_address":5479276},"HIDDEN_ITEM_ARTISAN_CAVE_B1F_CALCIUM":{"default_item":67,"flag":601,"rom_address":5482140},"HIDDEN_ITEM_ARTISAN_CAVE_B1F_IRON":{"default_item":65,"flag":604,"rom_address":5482164},"HIDDEN_ITEM_ARTISAN_CAVE_B1F_PROTEIN":{"default_item":64,"flag":603,"rom_address":5482152},"HIDDEN_ITEM_ARTISAN_CAVE_B1F_ZINC":{"default_item":70,"flag":602,"rom_address":5482128},"HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET":{"default_item":110,"flag":528,"rom_address":5417964},"HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_1":{"default_item":195,"flag":548,"rom_address":5469412},"HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_2":{"default_item":195,"flag":549,"rom_address":5469424},"HIDDEN_ITEM_JAGGED_PASS_FULL_HEAL":{"default_item":23,"flag":577,"rom_address":5471156},"HIDDEN_ITEM_JAGGED_PASS_GREAT_BALL":{"default_item":3,"flag":576,"rom_address":5471168},"HIDDEN_ITEM_LAVARIDGE_TOWN_ICE_HEAL":{"default_item":16,"flag":500,"rom_address":5417712},"HIDDEN_ITEM_LILYCOVE_CITY_HEART_SCALE":{"default_item":111,"flag":527,"rom_address":5414672},"HIDDEN_ITEM_LILYCOVE_CITY_POKE_BALL":{"default_item":4,"flag":575,"rom_address":5414696},"HIDDEN_ITEM_LILYCOVE_CITY_PP_UP":{"default_item":69,"flag":543,"rom_address":5414684},"HIDDEN_ITEM_MT_PYRE_EXTERIOR_MAX_ETHER":{"default_item":35,"flag":578,"rom_address":5472480},"HIDDEN_ITEM_MT_PYRE_EXTERIOR_ULTRA_BALL":{"default_item":2,"flag":529,"rom_address":5472468},"HIDDEN_ITEM_MT_PYRE_SUMMIT_RARE_CANDY":{"default_item":68,"flag":580,"rom_address":5472836},"HIDDEN_ITEM_MT_PYRE_SUMMIT_ZINC":{"default_item":70,"flag":579,"rom_address":5472824},"HIDDEN_ITEM_NAVEL_ROCK_TOP_SACRED_ASH":{"default_item":45,"flag":609,"rom_address":5507844},"HIDDEN_ITEM_PETALBURG_CITY_RARE_CANDY":{"default_item":68,"flag":595,"rom_address":5411036},"HIDDEN_ITEM_PETALBURG_WOODS_POKE_BALL":{"default_item":4,"flag":561,"rom_address":5469948},"HIDDEN_ITEM_PETALBURG_WOODS_POTION":{"default_item":13,"flag":558,"rom_address":5469912},"HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_1":{"default_item":103,"flag":559,"rom_address":5469924},"HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_2":{"default_item":103,"flag":560,"rom_address":5469936},"HIDDEN_ITEM_ROUTE_104_ANTIDOTE":{"default_item":14,"flag":585,"rom_address":5420532},"HIDDEN_ITEM_ROUTE_104_HEART_SCALE":{"default_item":111,"flag":588,"rom_address":5420544},"HIDDEN_ITEM_ROUTE_104_POKE_BALL":{"default_item":4,"flag":562,"rom_address":5420508},"HIDDEN_ITEM_ROUTE_104_POTION":{"default_item":13,"flag":537,"rom_address":5420520},"HIDDEN_ITEM_ROUTE_104_SUPER_POTION":{"default_item":22,"flag":544,"rom_address":5420496},"HIDDEN_ITEM_ROUTE_105_BIG_PEARL":{"default_item":107,"flag":611,"rom_address":5420788},"HIDDEN_ITEM_ROUTE_105_HEART_SCALE":{"default_item":111,"flag":589,"rom_address":5420776},"HIDDEN_ITEM_ROUTE_106_HEART_SCALE":{"default_item":111,"flag":547,"rom_address":5420972},"HIDDEN_ITEM_ROUTE_106_POKE_BALL":{"default_item":4,"flag":563,"rom_address":5420948},"HIDDEN_ITEM_ROUTE_106_STARDUST":{"default_item":108,"flag":546,"rom_address":5420960},"HIDDEN_ITEM_ROUTE_108_RARE_CANDY":{"default_item":68,"flag":586,"rom_address":5421380},"HIDDEN_ITEM_ROUTE_109_ETHER":{"default_item":34,"flag":564,"rom_address":5422056},"HIDDEN_ITEM_ROUTE_109_GREAT_BALL":{"default_item":3,"flag":551,"rom_address":5422044},"HIDDEN_ITEM_ROUTE_109_HEART_SCALE_1":{"default_item":111,"flag":552,"rom_address":5422032},"HIDDEN_ITEM_ROUTE_109_HEART_SCALE_2":{"default_item":111,"flag":590,"rom_address":5422068},"HIDDEN_ITEM_ROUTE_109_HEART_SCALE_3":{"default_item":111,"flag":591,"rom_address":5422080},"HIDDEN_ITEM_ROUTE_109_REVIVE":{"default_item":24,"flag":550,"rom_address":5422020},"HIDDEN_ITEM_ROUTE_110_FULL_HEAL":{"default_item":23,"flag":555,"rom_address":5423348},"HIDDEN_ITEM_ROUTE_110_GREAT_BALL":{"default_item":3,"flag":553,"rom_address":5423324},"HIDDEN_ITEM_ROUTE_110_POKE_BALL":{"default_item":4,"flag":565,"rom_address":5423336},"HIDDEN_ITEM_ROUTE_110_REVIVE":{"default_item":24,"flag":554,"rom_address":5423312},"HIDDEN_ITEM_ROUTE_111_PROTEIN":{"default_item":64,"flag":556,"rom_address":5425260},"HIDDEN_ITEM_ROUTE_111_RARE_CANDY":{"default_item":68,"flag":557,"rom_address":5425272},"HIDDEN_ITEM_ROUTE_111_STARDUST":{"default_item":108,"flag":502,"rom_address":5425200},"HIDDEN_ITEM_ROUTE_113_ETHER":{"default_item":34,"flag":503,"rom_address":5426528},"HIDDEN_ITEM_ROUTE_113_NUGGET":{"default_item":110,"flag":598,"rom_address":5426552},"HIDDEN_ITEM_ROUTE_113_TM32":{"default_item":320,"flag":530,"rom_address":5426540},"HIDDEN_ITEM_ROUTE_114_CARBOS":{"default_item":66,"flag":504,"rom_address":5427380},"HIDDEN_ITEM_ROUTE_114_REVIVE":{"default_item":24,"flag":542,"rom_address":5427404},"HIDDEN_ITEM_ROUTE_115_HEART_SCALE":{"default_item":111,"flag":597,"rom_address":5428216},"HIDDEN_ITEM_ROUTE_116_BLACK_GLASSES":{"default_item":206,"flag":596,"rom_address":5429096},"HIDDEN_ITEM_ROUTE_116_SUPER_POTION":{"default_item":22,"flag":545,"rom_address":5429084},"HIDDEN_ITEM_ROUTE_117_REPEL":{"default_item":86,"flag":572,"rom_address":5429748},"HIDDEN_ITEM_ROUTE_118_HEART_SCALE":{"default_item":111,"flag":566,"rom_address":5430444},"HIDDEN_ITEM_ROUTE_118_IRON":{"default_item":65,"flag":567,"rom_address":5430432},"HIDDEN_ITEM_ROUTE_119_CALCIUM":{"default_item":67,"flag":505,"rom_address":5432012},"HIDDEN_ITEM_ROUTE_119_FULL_HEAL":{"default_item":23,"flag":568,"rom_address":5432096},"HIDDEN_ITEM_ROUTE_119_MAX_ETHER":{"default_item":35,"flag":587,"rom_address":5432108},"HIDDEN_ITEM_ROUTE_119_ULTRA_BALL":{"default_item":2,"flag":506,"rom_address":5432024},"HIDDEN_ITEM_ROUTE_120_RARE_CANDY_1":{"default_item":68,"flag":571,"rom_address":5433636},"HIDDEN_ITEM_ROUTE_120_RARE_CANDY_2":{"default_item":68,"flag":569,"rom_address":5433660},"HIDDEN_ITEM_ROUTE_120_REVIVE":{"default_item":24,"flag":584,"rom_address":5433648},"HIDDEN_ITEM_ROUTE_120_ZINC":{"default_item":70,"flag":570,"rom_address":5433672},"HIDDEN_ITEM_ROUTE_121_FULL_HEAL":{"default_item":23,"flag":573,"rom_address":5434580},"HIDDEN_ITEM_ROUTE_121_HP_UP":{"default_item":63,"flag":539,"rom_address":5434556},"HIDDEN_ITEM_ROUTE_121_MAX_REVIVE":{"default_item":25,"flag":600,"rom_address":5434592},"HIDDEN_ITEM_ROUTE_121_NUGGET":{"default_item":110,"flag":540,"rom_address":5434568},"HIDDEN_ITEM_ROUTE_123_HYPER_POTION":{"default_item":21,"flag":574,"rom_address":5436140},"HIDDEN_ITEM_ROUTE_123_PP_UP":{"default_item":69,"flag":599,"rom_address":5436152},"HIDDEN_ITEM_ROUTE_123_RARE_CANDY":{"default_item":68,"flag":610,"rom_address":5436164},"HIDDEN_ITEM_ROUTE_123_REVIVE":{"default_item":24,"flag":541,"rom_address":5436128},"HIDDEN_ITEM_ROUTE_123_SUPER_REPEL":{"default_item":83,"flag":507,"rom_address":5436092},"HIDDEN_ITEM_ROUTE_128_HEART_SCALE_1":{"default_item":111,"flag":592,"rom_address":5437660},"HIDDEN_ITEM_ROUTE_128_HEART_SCALE_2":{"default_item":111,"flag":593,"rom_address":5437672},"HIDDEN_ITEM_ROUTE_128_HEART_SCALE_3":{"default_item":111,"flag":594,"rom_address":5437684},"HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_RARE_CANDY":{"default_item":68,"flag":606,"rom_address":5499296},"HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_ZINC":{"default_item":70,"flag":607,"rom_address":5499308},"HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_FULL_RESTORE":{"default_item":19,"flag":605,"rom_address":5499472},"HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_PP_UP":{"default_item":69,"flag":608,"rom_address":5499460},"HIDDEN_ITEM_SS_TIDAL_LOWER_DECK_LEFTOVERS":{"default_item":200,"flag":535,"rom_address":5493332},"HIDDEN_ITEM_TRICK_HOUSE_NUGGET":{"default_item":110,"flag":501,"rom_address":5508756},"HIDDEN_ITEM_UNDERWATER_124_BIG_PEARL":{"default_item":107,"flag":511,"rom_address":5439032},"HIDDEN_ITEM_UNDERWATER_124_CALCIUM":{"default_item":67,"flag":536,"rom_address":5439056},"HIDDEN_ITEM_UNDERWATER_124_CARBOS":{"default_item":66,"flag":508,"rom_address":5438996},"HIDDEN_ITEM_UNDERWATER_124_GREEN_SHARD":{"default_item":51,"flag":509,"rom_address":5439008},"HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_1":{"default_item":111,"flag":513,"rom_address":5439044},"HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_2":{"default_item":111,"flag":538,"rom_address":5439068},"HIDDEN_ITEM_UNDERWATER_124_PEARL":{"default_item":106,"flag":510,"rom_address":5439020},"HIDDEN_ITEM_UNDERWATER_126_BIG_PEARL":{"default_item":107,"flag":520,"rom_address":5439180},"HIDDEN_ITEM_UNDERWATER_126_BLUE_SHARD":{"default_item":49,"flag":512,"rom_address":5439192},"HIDDEN_ITEM_UNDERWATER_126_HEART_SCALE":{"default_item":111,"flag":514,"rom_address":5439108},"HIDDEN_ITEM_UNDERWATER_126_IRON":{"default_item":65,"flag":519,"rom_address":5439156},"HIDDEN_ITEM_UNDERWATER_126_PEARL":{"default_item":106,"flag":517,"rom_address":5439144},"HIDDEN_ITEM_UNDERWATER_126_STARDUST":{"default_item":108,"flag":516,"rom_address":5439132},"HIDDEN_ITEM_UNDERWATER_126_ULTRA_BALL":{"default_item":2,"flag":515,"rom_address":5439120},"HIDDEN_ITEM_UNDERWATER_126_YELLOW_SHARD":{"default_item":50,"flag":518,"rom_address":5439168},"HIDDEN_ITEM_UNDERWATER_127_HEART_SCALE":{"default_item":111,"flag":523,"rom_address":5439264},"HIDDEN_ITEM_UNDERWATER_127_HP_UP":{"default_item":63,"flag":522,"rom_address":5439252},"HIDDEN_ITEM_UNDERWATER_127_RED_SHARD":{"default_item":48,"flag":524,"rom_address":5439276},"HIDDEN_ITEM_UNDERWATER_127_STAR_PIECE":{"default_item":109,"flag":521,"rom_address":5439240},"HIDDEN_ITEM_UNDERWATER_128_PEARL":{"default_item":106,"flag":526,"rom_address":5439328},"HIDDEN_ITEM_UNDERWATER_128_PROTEIN":{"default_item":64,"flag":525,"rom_address":5439316},"HIDDEN_ITEM_VICTORY_ROAD_1F_ULTRA_BALL":{"default_item":2,"flag":581,"rom_address":5475972},"HIDDEN_ITEM_VICTORY_ROAD_B2F_ELIXIR":{"default_item":36,"flag":582,"rom_address":5476784},"HIDDEN_ITEM_VICTORY_ROAD_B2F_MAX_REPEL":{"default_item":84,"flag":583,"rom_address":5476796},"ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY":{"default_item":285,"flag":1100,"rom_address":2701736},"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18":{"default_item":306,"flag":1102,"rom_address":2701788},"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE":{"default_item":97,"flag":1101,"rom_address":2701775},"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER":{"default_item":278,"flag":1078,"rom_address":2701762},"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL":{"default_item":11,"flag":1077,"rom_address":2701749},"ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL":{"default_item":122,"flag":1095,"rom_address":2701671},"ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE":{"default_item":24,"flag":1099,"rom_address":2701723},"ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL":{"default_item":7,"flag":1097,"rom_address":2701697},"ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE":{"default_item":85,"flag":1096,"rom_address":2701684},"ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13":{"default_item":301,"flag":1098,"rom_address":2701710},"ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL":{"default_item":1,"flag":1124,"rom_address":2701970},"ITEM_AQUA_HIDEOUT_B1F_MAX_ELIXIR":{"default_item":37,"flag":1071,"rom_address":2701996},"ITEM_AQUA_HIDEOUT_B1F_NUGGET":{"default_item":110,"flag":1132,"rom_address":2701983},"ITEM_AQUA_HIDEOUT_B2F_NEST_BALL":{"default_item":8,"flag":1072,"rom_address":2702009},"ITEM_ARTISAN_CAVE_1F_CARBOS":{"default_item":66,"flag":1163,"rom_address":2702347},"ITEM_ARTISAN_CAVE_B1F_HP_UP":{"default_item":63,"flag":1162,"rom_address":2702334},"ITEM_FIERY_PATH_FIRE_STONE":{"default_item":95,"flag":1111,"rom_address":2701515},"ITEM_FIERY_PATH_TM06":{"default_item":294,"flag":1091,"rom_address":2701528},"ITEM_GRANITE_CAVE_1F_ESCAPE_ROPE":{"default_item":85,"flag":1050,"rom_address":2701450},"ITEM_GRANITE_CAVE_B1F_POKE_BALL":{"default_item":4,"flag":1051,"rom_address":2701463},"ITEM_GRANITE_CAVE_B2F_RARE_CANDY":{"default_item":68,"flag":1054,"rom_address":2701489},"ITEM_GRANITE_CAVE_B2F_REPEL":{"default_item":86,"flag":1053,"rom_address":2701476},"ITEM_JAGGED_PASS_BURN_HEAL":{"default_item":15,"flag":1070,"rom_address":2701502},"ITEM_LILYCOVE_CITY_MAX_REPEL":{"default_item":84,"flag":1042,"rom_address":2701346},"ITEM_MAGMA_HIDEOUT_1F_RARE_CANDY":{"default_item":68,"flag":1151,"rom_address":2702360},"ITEM_MAGMA_HIDEOUT_2F_2R_FULL_RESTORE":{"default_item":19,"flag":1165,"rom_address":2702386},"ITEM_MAGMA_HIDEOUT_2F_2R_MAX_ELIXIR":{"default_item":37,"flag":1164,"rom_address":2702373},"ITEM_MAGMA_HIDEOUT_3F_1R_NUGGET":{"default_item":110,"flag":1166,"rom_address":2702399},"ITEM_MAGMA_HIDEOUT_3F_2R_PP_MAX":{"default_item":71,"flag":1167,"rom_address":2702412},"ITEM_MAGMA_HIDEOUT_3F_3R_ECAPE_ROPE":{"default_item":85,"flag":1059,"rom_address":2702438},"ITEM_MAGMA_HIDEOUT_4F_MAX_REVIVE":{"default_item":25,"flag":1168,"rom_address":2702425},"ITEM_MAUVILLE_CITY_X_SPEED":{"default_item":77,"flag":1116,"rom_address":2701320},"ITEM_METEOR_FALLS_1F_1R_FULL_HEAL":{"default_item":23,"flag":1045,"rom_address":2701554},"ITEM_METEOR_FALLS_1F_1R_MOON_STONE":{"default_item":94,"flag":1046,"rom_address":2701567},"ITEM_METEOR_FALLS_1F_1R_PP_UP":{"default_item":69,"flag":1047,"rom_address":2701580},"ITEM_METEOR_FALLS_1F_1R_TM23":{"default_item":311,"flag":1044,"rom_address":2701541},"ITEM_METEOR_FALLS_B1F_2R_TM02":{"default_item":290,"flag":1080,"rom_address":2701593},"ITEM_MOSSDEEP_CITY_NET_BALL":{"default_item":6,"flag":1043,"rom_address":2701359},"ITEM_MT_PYRE_2F_ULTRA_BALL":{"default_item":2,"flag":1129,"rom_address":2701879},"ITEM_MT_PYRE_3F_SUPER_REPEL":{"default_item":83,"flag":1120,"rom_address":2701892},"ITEM_MT_PYRE_4F_SEA_INCENSE":{"default_item":220,"flag":1130,"rom_address":2701905},"ITEM_MT_PYRE_5F_LAX_INCENSE":{"default_item":221,"flag":1052,"rom_address":2701918},"ITEM_MT_PYRE_6F_TM30":{"default_item":318,"flag":1089,"rom_address":2701931},"ITEM_MT_PYRE_EXTERIOR_MAX_POTION":{"default_item":20,"flag":1073,"rom_address":2701944},"ITEM_MT_PYRE_EXTERIOR_TM48":{"default_item":336,"flag":1074,"rom_address":2701957},"ITEM_NEW_MAUVILLE_ESCAPE_ROPE":{"default_item":85,"flag":1076,"rom_address":2701619},"ITEM_NEW_MAUVILLE_FULL_HEAL":{"default_item":23,"flag":1122,"rom_address":2701645},"ITEM_NEW_MAUVILLE_PARALYZE_HEAL":{"default_item":18,"flag":1123,"rom_address":2701658},"ITEM_NEW_MAUVILLE_THUNDER_STONE":{"default_item":96,"flag":1110,"rom_address":2701632},"ITEM_NEW_MAUVILLE_ULTRA_BALL":{"default_item":2,"flag":1075,"rom_address":2701606},"ITEM_PETALBURG_CITY_ETHER":{"default_item":34,"flag":1040,"rom_address":2701307},"ITEM_PETALBURG_CITY_MAX_REVIVE":{"default_item":25,"flag":1039,"rom_address":2701294},"ITEM_PETALBURG_WOODS_ETHER":{"default_item":34,"flag":1058,"rom_address":2701398},"ITEM_PETALBURG_WOODS_GREAT_BALL":{"default_item":3,"flag":1056,"rom_address":2701385},"ITEM_PETALBURG_WOODS_PARALYZE_HEAL":{"default_item":18,"flag":1117,"rom_address":2701411},"ITEM_PETALBURG_WOODS_X_ATTACK":{"default_item":75,"flag":1055,"rom_address":2701372},"ITEM_ROUTE_102_POTION":{"default_item":13,"flag":1000,"rom_address":2700306},"ITEM_ROUTE_103_GUARD_SPEC":{"default_item":73,"flag":1114,"rom_address":2700319},"ITEM_ROUTE_103_PP_UP":{"default_item":69,"flag":1137,"rom_address":2700332},"ITEM_ROUTE_104_POKE_BALL":{"default_item":4,"flag":1057,"rom_address":2700358},"ITEM_ROUTE_104_POTION":{"default_item":13,"flag":1135,"rom_address":2700384},"ITEM_ROUTE_104_PP_UP":{"default_item":69,"flag":1002,"rom_address":2700345},"ITEM_ROUTE_104_X_ACCURACY":{"default_item":78,"flag":1115,"rom_address":2700371},"ITEM_ROUTE_105_IRON":{"default_item":65,"flag":1003,"rom_address":2700397},"ITEM_ROUTE_106_PROTEIN":{"default_item":64,"flag":1004,"rom_address":2700410},"ITEM_ROUTE_108_STAR_PIECE":{"default_item":109,"flag":1139,"rom_address":2700423},"ITEM_ROUTE_109_POTION":{"default_item":13,"flag":1140,"rom_address":2700449},"ITEM_ROUTE_109_PP_UP":{"default_item":69,"flag":1005,"rom_address":2700436},"ITEM_ROUTE_110_DIRE_HIT":{"default_item":74,"flag":1007,"rom_address":2700475},"ITEM_ROUTE_110_ELIXIR":{"default_item":36,"flag":1141,"rom_address":2700488},"ITEM_ROUTE_110_RARE_CANDY":{"default_item":68,"flag":1006,"rom_address":2700462},"ITEM_ROUTE_111_ELIXIR":{"default_item":36,"flag":1142,"rom_address":2700540},"ITEM_ROUTE_111_HP_UP":{"default_item":63,"flag":1010,"rom_address":2700527},"ITEM_ROUTE_111_STARDUST":{"default_item":108,"flag":1009,"rom_address":2700514},"ITEM_ROUTE_111_TM37":{"default_item":325,"flag":1008,"rom_address":2700501},"ITEM_ROUTE_112_NUGGET":{"default_item":110,"flag":1011,"rom_address":2700553},"ITEM_ROUTE_113_HYPER_POTION":{"default_item":21,"flag":1143,"rom_address":2700592},"ITEM_ROUTE_113_MAX_ETHER":{"default_item":35,"flag":1012,"rom_address":2700566},"ITEM_ROUTE_113_SUPER_REPEL":{"default_item":83,"flag":1013,"rom_address":2700579},"ITEM_ROUTE_114_ENERGY_POWDER":{"default_item":30,"flag":1160,"rom_address":2700631},"ITEM_ROUTE_114_PROTEIN":{"default_item":64,"flag":1015,"rom_address":2700618},"ITEM_ROUTE_114_RARE_CANDY":{"default_item":68,"flag":1014,"rom_address":2700605},"ITEM_ROUTE_115_GREAT_BALL":{"default_item":3,"flag":1118,"rom_address":2700683},"ITEM_ROUTE_115_HEAL_POWDER":{"default_item":32,"flag":1144,"rom_address":2700696},"ITEM_ROUTE_115_IRON":{"default_item":65,"flag":1018,"rom_address":2700670},"ITEM_ROUTE_115_PP_UP":{"default_item":69,"flag":1161,"rom_address":2700709},"ITEM_ROUTE_115_SUPER_POTION":{"default_item":22,"flag":1016,"rom_address":2700644},"ITEM_ROUTE_115_TM01":{"default_item":289,"flag":1017,"rom_address":2700657},"ITEM_ROUTE_116_ETHER":{"default_item":34,"flag":1019,"rom_address":2700735},"ITEM_ROUTE_116_HP_UP":{"default_item":63,"flag":1021,"rom_address":2700761},"ITEM_ROUTE_116_POTION":{"default_item":13,"flag":1146,"rom_address":2700774},"ITEM_ROUTE_116_REPEL":{"default_item":86,"flag":1020,"rom_address":2700748},"ITEM_ROUTE_116_X_SPECIAL":{"default_item":79,"flag":1001,"rom_address":2700722},"ITEM_ROUTE_117_GREAT_BALL":{"default_item":3,"flag":1022,"rom_address":2700787},"ITEM_ROUTE_117_REVIVE":{"default_item":24,"flag":1023,"rom_address":2700800},"ITEM_ROUTE_118_HYPER_POTION":{"default_item":21,"flag":1121,"rom_address":2700813},"ITEM_ROUTE_119_ELIXIR_1":{"default_item":36,"flag":1026,"rom_address":2700852},"ITEM_ROUTE_119_ELIXIR_2":{"default_item":36,"flag":1147,"rom_address":2700917},"ITEM_ROUTE_119_HYPER_POTION_1":{"default_item":21,"flag":1029,"rom_address":2700891},"ITEM_ROUTE_119_HYPER_POTION_2":{"default_item":21,"flag":1106,"rom_address":2700904},"ITEM_ROUTE_119_LEAF_STONE":{"default_item":98,"flag":1027,"rom_address":2700865},"ITEM_ROUTE_119_NUGGET":{"default_item":110,"flag":1134,"rom_address":2702035},"ITEM_ROUTE_119_RARE_CANDY":{"default_item":68,"flag":1028,"rom_address":2700878},"ITEM_ROUTE_119_SUPER_REPEL":{"default_item":83,"flag":1024,"rom_address":2700826},"ITEM_ROUTE_119_ZINC":{"default_item":70,"flag":1025,"rom_address":2700839},"ITEM_ROUTE_120_FULL_HEAL":{"default_item":23,"flag":1031,"rom_address":2700943},"ITEM_ROUTE_120_HYPER_POTION":{"default_item":21,"flag":1107,"rom_address":2700956},"ITEM_ROUTE_120_NEST_BALL":{"default_item":8,"flag":1108,"rom_address":2700969},"ITEM_ROUTE_120_NUGGET":{"default_item":110,"flag":1030,"rom_address":2700930},"ITEM_ROUTE_120_REVIVE":{"default_item":24,"flag":1148,"rom_address":2700982},"ITEM_ROUTE_121_CARBOS":{"default_item":66,"flag":1103,"rom_address":2700995},"ITEM_ROUTE_121_REVIVE":{"default_item":24,"flag":1149,"rom_address":2701008},"ITEM_ROUTE_121_ZINC":{"default_item":70,"flag":1150,"rom_address":2701021},"ITEM_ROUTE_123_CALCIUM":{"default_item":67,"flag":1032,"rom_address":2701034},"ITEM_ROUTE_123_ELIXIR":{"default_item":36,"flag":1109,"rom_address":2701060},"ITEM_ROUTE_123_PP_UP":{"default_item":69,"flag":1152,"rom_address":2701073},"ITEM_ROUTE_123_REVIVAL_HERB":{"default_item":33,"flag":1153,"rom_address":2701086},"ITEM_ROUTE_123_ULTRA_BALL":{"default_item":2,"flag":1104,"rom_address":2701047},"ITEM_ROUTE_124_BLUE_SHARD":{"default_item":49,"flag":1093,"rom_address":2701112},"ITEM_ROUTE_124_RED_SHARD":{"default_item":48,"flag":1092,"rom_address":2701099},"ITEM_ROUTE_124_YELLOW_SHARD":{"default_item":50,"flag":1066,"rom_address":2701125},"ITEM_ROUTE_125_BIG_PEARL":{"default_item":107,"flag":1154,"rom_address":2701138},"ITEM_ROUTE_126_GREEN_SHARD":{"default_item":51,"flag":1105,"rom_address":2701151},"ITEM_ROUTE_127_CARBOS":{"default_item":66,"flag":1035,"rom_address":2701177},"ITEM_ROUTE_127_RARE_CANDY":{"default_item":68,"flag":1155,"rom_address":2701190},"ITEM_ROUTE_127_ZINC":{"default_item":70,"flag":1034,"rom_address":2701164},"ITEM_ROUTE_132_PROTEIN":{"default_item":64,"flag":1156,"rom_address":2701216},"ITEM_ROUTE_132_RARE_CANDY":{"default_item":68,"flag":1036,"rom_address":2701203},"ITEM_ROUTE_133_BIG_PEARL":{"default_item":107,"flag":1037,"rom_address":2701229},"ITEM_ROUTE_133_MAX_REVIVE":{"default_item":25,"flag":1157,"rom_address":2701255},"ITEM_ROUTE_133_STAR_PIECE":{"default_item":109,"flag":1038,"rom_address":2701242},"ITEM_ROUTE_134_CARBOS":{"default_item":66,"flag":1158,"rom_address":2701268},"ITEM_ROUTE_134_STAR_PIECE":{"default_item":109,"flag":1159,"rom_address":2701281},"ITEM_RUSTBORO_CITY_X_DEFEND":{"default_item":76,"flag":1041,"rom_address":2701333},"ITEM_RUSTURF_TUNNEL_MAX_ETHER":{"default_item":35,"flag":1049,"rom_address":2701437},"ITEM_RUSTURF_TUNNEL_POKE_BALL":{"default_item":4,"flag":1048,"rom_address":2701424},"ITEM_SAFARI_ZONE_NORTH_CALCIUM":{"default_item":67,"flag":1119,"rom_address":2701827},"ITEM_SAFARI_ZONE_NORTH_EAST_NUGGET":{"default_item":110,"flag":1169,"rom_address":2701853},"ITEM_SAFARI_ZONE_NORTH_WEST_TM22":{"default_item":310,"flag":1094,"rom_address":2701814},"ITEM_SAFARI_ZONE_SOUTH_EAST_BIG_PEARL":{"default_item":107,"flag":1170,"rom_address":2701866},"ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE":{"default_item":25,"flag":1131,"rom_address":2701840},"ITEM_SCORCHED_SLAB_TM11":{"default_item":299,"flag":1079,"rom_address":2701801},"ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26":{"default_item":314,"flag":1090,"rom_address":2702139},"ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL":{"default_item":107,"flag":1081,"rom_address":2702074},"ITEM_SHOAL_CAVE_ICE_ROOM_NEVER_MELT_ICE":{"default_item":212,"flag":1113,"rom_address":2702126},"ITEM_SHOAL_CAVE_ICE_ROOM_TM07":{"default_item":295,"flag":1112,"rom_address":2702113},"ITEM_SHOAL_CAVE_INNER_ROOM_RARE_CANDY":{"default_item":68,"flag":1082,"rom_address":2702087},"ITEM_SHOAL_CAVE_STAIRS_ROOM_ICE_HEAL":{"default_item":16,"flag":1083,"rom_address":2702100},"ITEM_TRICK_HOUSE_PUZZLE_1_ORANGE_MAIL":{"default_item":121,"flag":1060,"rom_address":2702152},"ITEM_TRICK_HOUSE_PUZZLE_2_HARBOR_MAIL":{"default_item":122,"flag":1061,"rom_address":2702165},"ITEM_TRICK_HOUSE_PUZZLE_2_WAVE_MAIL":{"default_item":126,"flag":1062,"rom_address":2702178},"ITEM_TRICK_HOUSE_PUZZLE_3_SHADOW_MAIL":{"default_item":128,"flag":1063,"rom_address":2702191},"ITEM_TRICK_HOUSE_PUZZLE_3_WOOD_MAIL":{"default_item":125,"flag":1064,"rom_address":2702204},"ITEM_TRICK_HOUSE_PUZZLE_4_MECH_MAIL":{"default_item":124,"flag":1065,"rom_address":2702217},"ITEM_TRICK_HOUSE_PUZZLE_6_GLITTER_MAIL":{"default_item":123,"flag":1067,"rom_address":2702230},"ITEM_TRICK_HOUSE_PUZZLE_7_TROPIC_MAIL":{"default_item":129,"flag":1068,"rom_address":2702243},"ITEM_TRICK_HOUSE_PUZZLE_8_BEAD_MAIL":{"default_item":127,"flag":1069,"rom_address":2702256},"ITEM_VICTORY_ROAD_1F_MAX_ELIXIR":{"default_item":37,"flag":1084,"rom_address":2702269},"ITEM_VICTORY_ROAD_1F_PP_UP":{"default_item":69,"flag":1085,"rom_address":2702282},"ITEM_VICTORY_ROAD_B1F_FULL_RESTORE":{"default_item":19,"flag":1087,"rom_address":2702308},"ITEM_VICTORY_ROAD_B1F_TM29":{"default_item":317,"flag":1086,"rom_address":2702295},"ITEM_VICTORY_ROAD_B2F_FULL_HEAL":{"default_item":23,"flag":1088,"rom_address":2702321},"NPC_GIFT_GOT_BASEMENT_KEY_FROM_WATTSON":{"default_item":271,"flag":208,"rom_address":1967134},"NPC_GIFT_GOT_TM24_FROM_WATTSON":{"default_item":312,"flag":209,"rom_address":1967168},"NPC_GIFT_RECEIVED_6_SODA_POP":{"default_item":27,"flag":140,"rom_address":2537096},"NPC_GIFT_RECEIVED_ACRO_BIKE":{"default_item":272,"flag":1181,"rom_address":2164456},"NPC_GIFT_RECEIVED_AMULET_COIN":{"default_item":189,"flag":133,"rom_address":2708208},"NPC_GIFT_RECEIVED_CHARCOAL":{"default_item":215,"flag":254,"rom_address":2096554},"NPC_GIFT_RECEIVED_CHESTO_BERRY_ROUTE_104":{"default_item":134,"flag":246,"rom_address":2022873},"NPC_GIFT_RECEIVED_CLEANSE_TAG":{"default_item":190,"flag":282,"rom_address":2305748},"NPC_GIFT_RECEIVED_COIN_CASE":{"default_item":260,"flag":258,"rom_address":2172913},"NPC_GIFT_RECEIVED_DEEP_SEA_SCALE":{"default_item":193,"flag":1190,"rom_address":2156474},"NPC_GIFT_RECEIVED_DEEP_SEA_TOOTH":{"default_item":192,"flag":1191,"rom_address":2156462},"NPC_GIFT_RECEIVED_DEVON_GOODS_RUSTURF_TUNNEL":{"default_item":269,"flag":1172,"rom_address":2289508},"NPC_GIFT_RECEIVED_DEVON_SCOPE":{"default_item":288,"flag":285,"rom_address":2059186},"NPC_GIFT_RECEIVED_EXP_SHARE":{"default_item":182,"flag":272,"rom_address":2179378},"NPC_GIFT_RECEIVED_FOCUS_BAND":{"default_item":196,"flag":283,"rom_address":2331353},"NPC_GIFT_RECEIVED_GOOD_ROD":{"default_item":263,"flag":227,"rom_address":2052491},"NPC_GIFT_RECEIVED_GO_GOGGLES":{"default_item":279,"flag":221,"rom_address":2011954},"NPC_GIFT_RECEIVED_GREAT_BALL_PETALBURG_WOODS":{"default_item":3,"flag":1171,"rom_address":2293794},"NPC_GIFT_RECEIVED_GREAT_BALL_RUSTBORO_CITY":{"default_item":3,"flag":1173,"rom_address":1972558},"NPC_GIFT_RECEIVED_HM01":{"default_item":339,"flag":137,"rom_address":2193371},"NPC_GIFT_RECEIVED_HM02":{"default_item":340,"flag":110,"rom_address":2054604},"NPC_GIFT_RECEIVED_HM03":{"default_item":341,"flag":122,"rom_address":2120645},"NPC_GIFT_RECEIVED_HM04":{"default_item":342,"flag":106,"rom_address":2289001},"NPC_GIFT_RECEIVED_HM05":{"default_item":343,"flag":109,"rom_address":2291966},"NPC_GIFT_RECEIVED_HM06":{"default_item":344,"flag":107,"rom_address":2167989},"NPC_GIFT_RECEIVED_HM07":{"default_item":345,"flag":312,"rom_address":1995198},"NPC_GIFT_RECEIVED_HM08":{"default_item":346,"flag":123,"rom_address":2245872},"NPC_GIFT_RECEIVED_ITEMFINDER":{"default_item":261,"flag":1176,"rom_address":2034013},"NPC_GIFT_RECEIVED_KINGS_ROCK":{"default_item":187,"flag":276,"rom_address":1989011},"NPC_GIFT_RECEIVED_LETTER":{"default_item":274,"flag":1174,"rom_address":2179156},"NPC_GIFT_RECEIVED_MACHO_BRACE":{"default_item":181,"flag":277,"rom_address":2278172},"NPC_GIFT_RECEIVED_MACH_BIKE":{"default_item":259,"flag":1180,"rom_address":2164441},"NPC_GIFT_RECEIVED_MAGMA_EMBLEM":{"default_item":375,"flag":1177,"rom_address":2310318},"NPC_GIFT_RECEIVED_MENTAL_HERB":{"default_item":185,"flag":223,"rom_address":2201924},"NPC_GIFT_RECEIVED_METEORITE":{"default_item":280,"flag":115,"rom_address":2297863},"NPC_GIFT_RECEIVED_MIRACLE_SEED":{"default_item":205,"flag":297,"rom_address":2294010},"NPC_GIFT_RECEIVED_OLD_ROD":{"default_item":262,"flag":257,"rom_address":2007886},"NPC_GIFT_RECEIVED_POKEBLOCK_CASE":{"default_item":273,"flag":95,"rom_address":2606136},"NPC_GIFT_RECEIVED_POTION_OLDALE":{"default_item":13,"flag":132,"rom_address":2006235},"NPC_GIFT_RECEIVED_POWDER_JAR":{"default_item":372,"flag":337,"rom_address":1957927},"NPC_GIFT_RECEIVED_PREMIER_BALL_RUSTBORO":{"default_item":12,"flag":213,"rom_address":2194408},"NPC_GIFT_RECEIVED_QUICK_CLAW":{"default_item":183,"flag":275,"rom_address":2186071},"NPC_GIFT_RECEIVED_REPEAT_BALL":{"default_item":9,"flag":256,"rom_address":2047827},"NPC_GIFT_RECEIVED_SECRET_POWER":{"default_item":331,"flag":96,"rom_address":2591201},"NPC_GIFT_RECEIVED_SILK_SCARF":{"default_item":217,"flag":289,"rom_address":2095828},"NPC_GIFT_RECEIVED_SOFT_SAND":{"default_item":203,"flag":280,"rom_address":2029841},"NPC_GIFT_RECEIVED_SOOTHE_BELL":{"default_item":184,"flag":278,"rom_address":2145210},"NPC_GIFT_RECEIVED_SS_TICKET":{"default_item":265,"flag":291,"rom_address":2708464},"NPC_GIFT_RECEIVED_SUN_STONE_MOSSDEEP":{"default_item":93,"flag":192,"rom_address":2248181},"NPC_GIFT_RECEIVED_SUPER_ROD":{"default_item":264,"flag":152,"rom_address":2245339},"NPC_GIFT_RECEIVED_TM03":{"default_item":291,"flag":172,"rom_address":2256148},"NPC_GIFT_RECEIVED_TM04":{"default_item":292,"flag":171,"rom_address":2237855},"NPC_GIFT_RECEIVED_TM05":{"default_item":293,"flag":231,"rom_address":2045877},"NPC_GIFT_RECEIVED_TM08":{"default_item":296,"flag":166,"rom_address":2089212},"NPC_GIFT_RECEIVED_TM09":{"default_item":297,"flag":262,"rom_address":2023076},"NPC_GIFT_RECEIVED_TM10":{"default_item":298,"flag":264,"rom_address":2200728},"NPC_GIFT_RECEIVED_TM19":{"default_item":307,"flag":232,"rom_address":2062050},"NPC_GIFT_RECEIVED_TM21":{"default_item":309,"flag":1179,"rom_address":2118086},"NPC_GIFT_RECEIVED_TM27":{"default_item":315,"flag":229,"rom_address":2107533},"NPC_GIFT_RECEIVED_TM27_2":{"default_item":315,"flag":1178,"rom_address":2118033},"NPC_GIFT_RECEIVED_TM28":{"default_item":316,"flag":261,"rom_address":2280367},"NPC_GIFT_RECEIVED_TM31":{"default_item":319,"flag":121,"rom_address":2262824},"NPC_GIFT_RECEIVED_TM34":{"default_item":322,"flag":167,"rom_address":2161230},"NPC_GIFT_RECEIVED_TM36":{"default_item":324,"flag":230,"rom_address":2093189},"NPC_GIFT_RECEIVED_TM39":{"default_item":327,"flag":165,"rom_address":2181934},"NPC_GIFT_RECEIVED_TM40":{"default_item":328,"flag":170,"rom_address":2196031},"NPC_GIFT_RECEIVED_TM41":{"default_item":329,"flag":265,"rom_address":2139219},"NPC_GIFT_RECEIVED_TM42":{"default_item":330,"flag":169,"rom_address":2123871},"NPC_GIFT_RECEIVED_TM44":{"default_item":332,"flag":234,"rom_address":2230771},"NPC_GIFT_RECEIVED_TM45":{"default_item":333,"flag":235,"rom_address":2110398},"NPC_GIFT_RECEIVED_TM46":{"default_item":334,"flag":269,"rom_address":2148628},"NPC_GIFT_RECEIVED_TM47":{"default_item":335,"flag":1175,"rom_address":2292543},"NPC_GIFT_RECEIVED_TM49":{"default_item":337,"flag":260,"rom_address":2354181},"NPC_GIFT_RECEIVED_TM50":{"default_item":338,"flag":168,"rom_address":2097316},"NPC_GIFT_RECEIVED_WAILMER_PAIL":{"default_item":268,"flag":94,"rom_address":2278027},"NPC_GIFT_RECEIVED_WHITE_HERB":{"default_item":180,"flag":279,"rom_address":2022938}},"maps":{"MAP_ABANDONED_SHIP_CAPTAINS_OFFICE":{"fishing_encounters":null,"header_rom_address":4748492,"land_encounters":null,"warp_table_rom_address":5478884,"water_encounters":null},"MAP_ABANDONED_SHIP_CORRIDORS_1F":{"fishing_encounters":null,"header_rom_address":4748268,"land_encounters":null,"warp_table_rom_address":5477960,"water_encounters":null},"MAP_ABANDONED_SHIP_CORRIDORS_B1F":{"fishing_encounters":null,"header_rom_address":4748324,"land_encounters":null,"warp_table_rom_address":5478288,"water_encounters":null},"MAP_ABANDONED_SHIP_DECK":{"fishing_encounters":null,"header_rom_address":4748240,"land_encounters":null,"warp_table_rom_address":5477852,"water_encounters":null},"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS":{"fishing_encounters":{"encounter_slots":[129,72,129,72,72,72,72,73,73,73],"rom_address":5589416},"header_rom_address":4748548,"land_encounters":null,"warp_table_rom_address":5478948,"water_encounters":{"encounter_slots":[72,72,72,72,73],"rom_address":5589388}},"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS":{"fishing_encounters":null,"header_rom_address":4748576,"land_encounters":null,"warp_table_rom_address":5479160,"water_encounters":null},"MAP_ABANDONED_SHIP_ROOMS2_1F":{"fishing_encounters":null,"header_rom_address":4748464,"land_encounters":null,"warp_table_rom_address":5478792,"water_encounters":null},"MAP_ABANDONED_SHIP_ROOMS2_B1F":{"fishing_encounters":null,"header_rom_address":4748380,"land_encounters":null,"warp_table_rom_address":5478524,"water_encounters":null},"MAP_ABANDONED_SHIP_ROOMS_1F":{"fishing_encounters":null,"header_rom_address":4748296,"land_encounters":null,"warp_table_rom_address":5478172,"water_encounters":null},"MAP_ABANDONED_SHIP_ROOMS_B1F":{"fishing_encounters":{"encounter_slots":[129,72,129,72,72,72,72,73,73,73],"rom_address":5586652},"header_rom_address":4748352,"land_encounters":null,"warp_table_rom_address":5478432,"water_encounters":{"encounter_slots":[72,72,72,72,73],"rom_address":5586624}},"MAP_ABANDONED_SHIP_ROOM_B1F":{"fishing_encounters":null,"header_rom_address":4748436,"land_encounters":null,"warp_table_rom_address":5478636,"water_encounters":null},"MAP_ABANDONED_SHIP_UNDERWATER1":{"fishing_encounters":null,"header_rom_address":4748408,"land_encounters":null,"warp_table_rom_address":5478576,"water_encounters":null},"MAP_ABANDONED_SHIP_UNDERWATER2":{"fishing_encounters":null,"header_rom_address":4748520,"land_encounters":null,"warp_table_rom_address":5478920,"water_encounters":null},"MAP_ALTERING_CAVE":{"fishing_encounters":null,"header_rom_address":4749696,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,41,41,41,41],"rom_address":5593728},"warp_table_rom_address":5482476,"water_encounters":null},"MAP_ANCIENT_TOMB":{"fishing_encounters":null,"header_rom_address":4748632,"land_encounters":null,"warp_table_rom_address":5479500,"water_encounters":null},"MAP_AQUA_HIDEOUT_1F":{"fishing_encounters":null,"header_rom_address":4747372,"land_encounters":null,"warp_table_rom_address":5472932,"water_encounters":null},"MAP_AQUA_HIDEOUT_B1F":{"fishing_encounters":null,"header_rom_address":4747400,"land_encounters":null,"warp_table_rom_address":5473192,"water_encounters":null},"MAP_AQUA_HIDEOUT_B2F":{"fishing_encounters":null,"header_rom_address":4747428,"land_encounters":null,"warp_table_rom_address":5473556,"water_encounters":null},"MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP1":{"fishing_encounters":null,"header_rom_address":4748800,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP2":{"fishing_encounters":null,"header_rom_address":4748828,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP3":{"fishing_encounters":null,"header_rom_address":4748856,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_ARTISAN_CAVE_1F":{"fishing_encounters":null,"header_rom_address":4749528,"land_encounters":{"encounter_slots":[235,235,235,235,235,235,235,235,235,235,235,235],"rom_address":5593672},"warp_table_rom_address":5482212,"water_encounters":null},"MAP_ARTISAN_CAVE_B1F":{"fishing_encounters":null,"header_rom_address":4749500,"land_encounters":{"encounter_slots":[235,235,235,235,235,235,235,235,235,235,235,235],"rom_address":5593616},"warp_table_rom_address":5482104,"water_encounters":null},"MAP_BATTLE_COLOSSEUM_2P":{"fishing_encounters":null,"header_rom_address":4750424,"land_encounters":null,"warp_table_rom_address":5491892,"water_encounters":null},"MAP_BATTLE_COLOSSEUM_4P":{"fishing_encounters":null,"header_rom_address":4750508,"land_encounters":null,"warp_table_rom_address":5492192,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4752300,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4752272,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY":{"fishing_encounters":null,"header_rom_address":4752244,"land_encounters":null,"warp_table_rom_address":5502948,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4752048,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4751992,"land_encounters":null,"warp_table_rom_address":5501116,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY":{"fishing_encounters":null,"header_rom_address":4751964,"land_encounters":null,"warp_table_rom_address":5501008,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4752020,"land_encounters":null,"warp_table_rom_address":5501176,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4752384,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY":{"fishing_encounters":null,"header_rom_address":4752328,"land_encounters":null,"warp_table_rom_address":5503424,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4752356,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4752132,"land_encounters":null,"warp_table_rom_address":5502156,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4752104,"land_encounters":null,"warp_table_rom_address":5501984,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY":{"fishing_encounters":null,"header_rom_address":4752076,"land_encounters":null,"warp_table_rom_address":5501736,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4752440,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY":{"fishing_encounters":null,"header_rom_address":4752412,"land_encounters":null,"warp_table_rom_address":5503848,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL":{"fishing_encounters":null,"header_rom_address":4752524,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL":{"fishing_encounters":null,"header_rom_address":4752496,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS":{"fishing_encounters":null,"header_rom_address":4752552,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM":{"fishing_encounters":null,"header_rom_address":4752468,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR":{"fishing_encounters":null,"header_rom_address":4752188,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY":{"fishing_encounters":null,"header_rom_address":4752160,"land_encounters":null,"warp_table_rom_address":5502288,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP":{"fishing_encounters":null,"header_rom_address":4752216,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4751684,"land_encounters":null,"warp_table_rom_address":5498736,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4751656,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR":{"fishing_encounters":null,"header_rom_address":4751628,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY":{"fishing_encounters":null,"header_rom_address":4751600,"land_encounters":null,"warp_table_rom_address":5498472,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4751936,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4751908,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM":{"fishing_encounters":null,"header_rom_address":4751880,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER":{"fishing_encounters":null,"header_rom_address":4752636,"land_encounters":null,"warp_table_rom_address":5505096,"water_encounters":null},"MAP_BATTLE_FRONTIER_LOUNGE1":{"fishing_encounters":null,"header_rom_address":4752608,"land_encounters":null,"warp_table_rom_address":5504852,"water_encounters":null},"MAP_BATTLE_FRONTIER_LOUNGE2":{"fishing_encounters":null,"header_rom_address":4752664,"land_encounters":null,"warp_table_rom_address":5505260,"water_encounters":null},"MAP_BATTLE_FRONTIER_LOUNGE3":{"fishing_encounters":null,"header_rom_address":4752692,"land_encounters":null,"warp_table_rom_address":5505416,"water_encounters":null},"MAP_BATTLE_FRONTIER_LOUNGE4":{"fishing_encounters":null,"header_rom_address":4752720,"land_encounters":null,"warp_table_rom_address":5505516,"water_encounters":null},"MAP_BATTLE_FRONTIER_LOUNGE5":{"fishing_encounters":null,"header_rom_address":4752776,"land_encounters":null,"warp_table_rom_address":5505700,"water_encounters":null},"MAP_BATTLE_FRONTIER_LOUNGE6":{"fishing_encounters":null,"header_rom_address":4752804,"land_encounters":null,"warp_table_rom_address":5505760,"water_encounters":null},"MAP_BATTLE_FRONTIER_LOUNGE7":{"fishing_encounters":null,"header_rom_address":4752832,"land_encounters":null,"warp_table_rom_address":5505884,"water_encounters":null},"MAP_BATTLE_FRONTIER_LOUNGE8":{"fishing_encounters":null,"header_rom_address":4752888,"land_encounters":null,"warp_table_rom_address":5506140,"water_encounters":null},"MAP_BATTLE_FRONTIER_LOUNGE9":{"fishing_encounters":null,"header_rom_address":4752916,"land_encounters":null,"warp_table_rom_address":5506192,"water_encounters":null},"MAP_BATTLE_FRONTIER_MART":{"fishing_encounters":null,"header_rom_address":4753000,"land_encounters":null,"warp_table_rom_address":5506628,"water_encounters":null},"MAP_BATTLE_FRONTIER_OUTSIDE_EAST":{"fishing_encounters":null,"header_rom_address":4751852,"land_encounters":null,"warp_table_rom_address":5500120,"water_encounters":null},"MAP_BATTLE_FRONTIER_OUTSIDE_WEST":{"fishing_encounters":null,"header_rom_address":4751572,"land_encounters":null,"warp_table_rom_address":5498088,"water_encounters":null},"MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4752944,"land_encounters":null,"warp_table_rom_address":5506348,"water_encounters":null},"MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4752972,"land_encounters":null,"warp_table_rom_address":5506488,"water_encounters":null},"MAP_BATTLE_FRONTIER_RANKING_HALL":{"fishing_encounters":null,"header_rom_address":4752580,"land_encounters":null,"warp_table_rom_address":5504600,"water_encounters":null},"MAP_BATTLE_FRONTIER_RECEPTION_GATE":{"fishing_encounters":null,"header_rom_address":4752860,"land_encounters":null,"warp_table_rom_address":5506032,"water_encounters":null},"MAP_BATTLE_FRONTIER_SCOTTS_HOUSE":{"fishing_encounters":null,"header_rom_address":4752748,"land_encounters":null,"warp_table_rom_address":5505568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE01":{"fishing_encounters":null,"header_rom_address":4750984,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE02":{"fishing_encounters":null,"header_rom_address":4751012,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE03":{"fishing_encounters":null,"header_rom_address":4751040,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE04":{"fishing_encounters":null,"header_rom_address":4751068,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE05":{"fishing_encounters":null,"header_rom_address":4751096,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE06":{"fishing_encounters":null,"header_rom_address":4751124,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE07":{"fishing_encounters":null,"header_rom_address":4751152,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE08":{"fishing_encounters":null,"header_rom_address":4751180,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE09":{"fishing_encounters":null,"header_rom_address":4751208,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE10":{"fishing_encounters":null,"header_rom_address":4751236,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE11":{"fishing_encounters":null,"header_rom_address":4751264,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE12":{"fishing_encounters":null,"header_rom_address":4751292,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE13":{"fishing_encounters":null,"header_rom_address":4751320,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE14":{"fishing_encounters":null,"header_rom_address":4751348,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE15":{"fishing_encounters":null,"header_rom_address":4751376,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BATTLE_PYRAMID_SQUARE16":{"fishing_encounters":null,"header_rom_address":4751404,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_BIRTH_ISLAND_EXTERIOR":{"fishing_encounters":null,"header_rom_address":4753084,"land_encounters":null,"warp_table_rom_address":5506916,"water_encounters":null},"MAP_BIRTH_ISLAND_HARBOR":{"fishing_encounters":null,"header_rom_address":4753112,"land_encounters":null,"warp_table_rom_address":5506992,"water_encounters":null},"MAP_CAVE_OF_ORIGIN_1F":{"fishing_encounters":null,"header_rom_address":4747792,"land_encounters":{"encounter_slots":[41,41,41,322,322,322,41,41,42,42,42,42],"rom_address":5590196},"warp_table_rom_address":5475480,"water_encounters":null},"MAP_CAVE_OF_ORIGIN_B1F":{"fishing_encounters":null,"header_rom_address":4747904,"land_encounters":null,"warp_table_rom_address":5475648,"water_encounters":null},"MAP_CAVE_OF_ORIGIN_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4747764,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,42,42,42,42],"rom_address":5590140},"warp_table_rom_address":5475444,"water_encounters":null},"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1":{"fishing_encounters":null,"header_rom_address":4747820,"land_encounters":{"encounter_slots":[41,41,41,322,322,322,41,41,42,42,42,42],"rom_address":5590252},"warp_table_rom_address":5475516,"water_encounters":null},"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2":{"fishing_encounters":null,"header_rom_address":4747848,"land_encounters":{"encounter_slots":[41,41,41,322,322,322,41,41,42,42,42,42],"rom_address":5590308},"warp_table_rom_address":5475552,"water_encounters":null},"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3":{"fishing_encounters":null,"header_rom_address":4747876,"land_encounters":{"encounter_slots":[41,41,41,322,322,322,41,41,42,42,42,42],"rom_address":5590364},"warp_table_rom_address":5475588,"water_encounters":null},"MAP_CONTEST_HALL":{"fishing_encounters":null,"header_rom_address":4750536,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_CONTEST_HALL_BEAUTY":{"fishing_encounters":null,"header_rom_address":4750732,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_CONTEST_HALL_COOL":{"fishing_encounters":null,"header_rom_address":4750788,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_CONTEST_HALL_CUTE":{"fishing_encounters":null,"header_rom_address":4750844,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_CONTEST_HALL_SMART":{"fishing_encounters":null,"header_rom_address":4750816,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_CONTEST_HALL_TOUGH":{"fishing_encounters":null,"header_rom_address":4750760,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_DESERT_RUINS":{"fishing_encounters":null,"header_rom_address":4746896,"land_encounters":null,"warp_table_rom_address":5468868,"water_encounters":null},"MAP_DESERT_UNDERPASS":{"fishing_encounters":null,"header_rom_address":4749472,"land_encounters":{"encounter_slots":[132,370,132,371,132,370,371,132,370,132,371,132],"rom_address":5593560},"warp_table_rom_address":5482052,"water_encounters":null},"MAP_DEWFORD_TOWN":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5591916},"header_rom_address":4740372,"land_encounters":null,"warp_table_rom_address":5417220,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5591888}},"MAP_DEWFORD_TOWN_GYM":{"fishing_encounters":null,"header_rom_address":4742024,"land_encounters":null,"warp_table_rom_address":5442380,"water_encounters":null},"MAP_DEWFORD_TOWN_HALL":{"fishing_encounters":null,"header_rom_address":4742052,"land_encounters":null,"warp_table_rom_address":5442680,"water_encounters":null},"MAP_DEWFORD_TOWN_HOUSE1":{"fishing_encounters":null,"header_rom_address":4741940,"land_encounters":null,"warp_table_rom_address":5441896,"water_encounters":null},"MAP_DEWFORD_TOWN_HOUSE2":{"fishing_encounters":null,"header_rom_address":4742080,"land_encounters":null,"warp_table_rom_address":5442788,"water_encounters":null},"MAP_DEWFORD_TOWN_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4741968,"land_encounters":null,"warp_table_rom_address":5442004,"water_encounters":null},"MAP_DEWFORD_TOWN_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4741996,"land_encounters":null,"warp_table_rom_address":5442144,"water_encounters":null},"MAP_EVER_GRANDE_CITY":{"fishing_encounters":{"encounter_slots":[129,72,129,325,313,325,313,222,313,313],"rom_address":5592220},"header_rom_address":4740288,"land_encounters":null,"warp_table_rom_address":5416112,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5592192}},"MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM":{"fishing_encounters":null,"header_rom_address":4746084,"land_encounters":null,"warp_table_rom_address":5465760,"water_encounters":null},"MAP_EVER_GRANDE_CITY_DRAKES_ROOM":{"fishing_encounters":null,"header_rom_address":4746056,"land_encounters":null,"warp_table_rom_address":5465652,"water_encounters":null},"MAP_EVER_GRANDE_CITY_GLACIAS_ROOM":{"fishing_encounters":null,"header_rom_address":4746028,"land_encounters":null,"warp_table_rom_address":5465592,"water_encounters":null},"MAP_EVER_GRANDE_CITY_HALL1":{"fishing_encounters":null,"header_rom_address":4746112,"land_encounters":null,"warp_table_rom_address":5465796,"water_encounters":null},"MAP_EVER_GRANDE_CITY_HALL2":{"fishing_encounters":null,"header_rom_address":4746140,"land_encounters":null,"warp_table_rom_address":5465848,"water_encounters":null},"MAP_EVER_GRANDE_CITY_HALL3":{"fishing_encounters":null,"header_rom_address":4746168,"land_encounters":null,"warp_table_rom_address":5465900,"water_encounters":null},"MAP_EVER_GRANDE_CITY_HALL4":{"fishing_encounters":null,"header_rom_address":4746196,"land_encounters":null,"warp_table_rom_address":5465952,"water_encounters":null},"MAP_EVER_GRANDE_CITY_HALL5":{"fishing_encounters":null,"header_rom_address":4746224,"land_encounters":null,"warp_table_rom_address":5465988,"water_encounters":null},"MAP_EVER_GRANDE_CITY_HALL_OF_FAME":{"fishing_encounters":null,"header_rom_address":4746280,"land_encounters":null,"warp_table_rom_address":5466220,"water_encounters":null},"MAP_EVER_GRANDE_CITY_PHOEBES_ROOM":{"fishing_encounters":null,"header_rom_address":4746000,"land_encounters":null,"warp_table_rom_address":5465532,"water_encounters":null},"MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4746308,"land_encounters":null,"warp_table_rom_address":5466344,"water_encounters":null},"MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4746336,"land_encounters":null,"warp_table_rom_address":5466484,"water_encounters":null},"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F":{"fishing_encounters":null,"header_rom_address":4746252,"land_encounters":null,"warp_table_rom_address":5466136,"water_encounters":null},"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F":{"fishing_encounters":null,"header_rom_address":4746364,"land_encounters":null,"warp_table_rom_address":5466624,"water_encounters":null},"MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM":{"fishing_encounters":null,"header_rom_address":4745972,"land_encounters":null,"warp_table_rom_address":5465472,"water_encounters":null},"MAP_FALLARBOR_TOWN":{"fishing_encounters":null,"header_rom_address":4740428,"land_encounters":null,"warp_table_rom_address":5417832,"water_encounters":null},"MAP_FALLARBOR_TOWN_BATTLE_TENT_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4742388,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4742360,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY":{"fishing_encounters":null,"header_rom_address":4742332,"land_encounters":null,"warp_table_rom_address":5444416,"water_encounters":null},"MAP_FALLARBOR_TOWN_COZMOS_HOUSE":{"fishing_encounters":null,"header_rom_address":4742472,"land_encounters":null,"warp_table_rom_address":5444928,"water_encounters":null},"MAP_FALLARBOR_TOWN_MART":{"fishing_encounters":null,"header_rom_address":4742304,"land_encounters":null,"warp_table_rom_address":5444260,"water_encounters":null},"MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE":{"fishing_encounters":null,"header_rom_address":4742500,"land_encounters":null,"warp_table_rom_address":5444988,"water_encounters":null},"MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4742416,"land_encounters":null,"warp_table_rom_address":5444696,"water_encounters":null},"MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4742444,"land_encounters":null,"warp_table_rom_address":5444836,"water_encounters":null},"MAP_FARAWAY_ISLAND_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4753028,"land_encounters":null,"warp_table_rom_address":5506712,"water_encounters":null},"MAP_FARAWAY_ISLAND_INTERIOR":{"fishing_encounters":null,"header_rom_address":4753056,"land_encounters":null,"warp_table_rom_address":5506832,"water_encounters":null},"MAP_FIERY_PATH":{"fishing_encounters":null,"header_rom_address":4747120,"land_encounters":{"encounter_slots":[339,109,339,66,321,218,109,66,321,321,88,88],"rom_address":5586784},"warp_table_rom_address":5471384,"water_encounters":null},"MAP_FORTREE_CITY":{"fishing_encounters":null,"header_rom_address":4740176,"land_encounters":null,"warp_table_rom_address":5413740,"water_encounters":null},"MAP_FORTREE_CITY_DECORATION_SHOP":{"fishing_encounters":null,"header_rom_address":4744516,"land_encounters":null,"warp_table_rom_address":5455976,"water_encounters":null},"MAP_FORTREE_CITY_GYM":{"fishing_encounters":null,"header_rom_address":4744292,"land_encounters":null,"warp_table_rom_address":5455024,"water_encounters":null},"MAP_FORTREE_CITY_HOUSE1":{"fishing_encounters":null,"header_rom_address":4744264,"land_encounters":null,"warp_table_rom_address":5454796,"water_encounters":null},"MAP_FORTREE_CITY_HOUSE2":{"fishing_encounters":null,"header_rom_address":4744404,"land_encounters":null,"warp_table_rom_address":5455544,"water_encounters":null},"MAP_FORTREE_CITY_HOUSE3":{"fishing_encounters":null,"header_rom_address":4744432,"land_encounters":null,"warp_table_rom_address":5455628,"water_encounters":null},"MAP_FORTREE_CITY_HOUSE4":{"fishing_encounters":null,"header_rom_address":4744460,"land_encounters":null,"warp_table_rom_address":5455736,"water_encounters":null},"MAP_FORTREE_CITY_HOUSE5":{"fishing_encounters":null,"header_rom_address":4744488,"land_encounters":null,"warp_table_rom_address":5455844,"water_encounters":null},"MAP_FORTREE_CITY_MART":{"fishing_encounters":null,"header_rom_address":4744376,"land_encounters":null,"warp_table_rom_address":5455460,"water_encounters":null},"MAP_FORTREE_CITY_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4744320,"land_encounters":null,"warp_table_rom_address":5455180,"water_encounters":null},"MAP_FORTREE_CITY_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4744348,"land_encounters":null,"warp_table_rom_address":5455320,"water_encounters":null},"MAP_GRANITE_CAVE_1F":{"fishing_encounters":null,"header_rom_address":4746924,"land_encounters":{"encounter_slots":[41,335,335,41,335,63,335,335,74,74,74,74],"rom_address":5586316},"warp_table_rom_address":5468996,"water_encounters":null},"MAP_GRANITE_CAVE_B1F":{"fishing_encounters":null,"header_rom_address":4746952,"land_encounters":{"encounter_slots":[41,382,382,382,41,63,335,335,322,322,322,322],"rom_address":5586372},"warp_table_rom_address":5469072,"water_encounters":null},"MAP_GRANITE_CAVE_B2F":{"fishing_encounters":null,"header_rom_address":4746980,"land_encounters":{"encounter_slots":[41,382,382,41,382,63,322,322,322,322,322,322],"rom_address":5586700},"warp_table_rom_address":5469364,"water_encounters":null},"MAP_GRANITE_CAVE_STEVENS_ROOM":{"fishing_encounters":null,"header_rom_address":4747008,"land_encounters":{"encounter_slots":[41,335,335,41,335,63,335,335,382,382,382,382],"rom_address":5588516},"warp_table_rom_address":5469472,"water_encounters":null},"MAP_INSIDE_OF_TRUCK":{"fishing_encounters":null,"header_rom_address":4750872,"land_encounters":null,"warp_table_rom_address":5492760,"water_encounters":null},"MAP_ISLAND_CAVE":{"fishing_encounters":null,"header_rom_address":4748604,"land_encounters":null,"warp_table_rom_address":5479396,"water_encounters":null},"MAP_JAGGED_PASS":{"fishing_encounters":null,"header_rom_address":4747092,"land_encounters":{"encounter_slots":[339,339,66,339,351,66,351,66,339,351,339,351],"rom_address":5586972},"warp_table_rom_address":5470948,"water_encounters":null},"MAP_LAVARIDGE_TOWN":{"fishing_encounters":null,"header_rom_address":4740400,"land_encounters":null,"warp_table_rom_address":5417556,"water_encounters":null},"MAP_LAVARIDGE_TOWN_GYM_1F":{"fishing_encounters":null,"header_rom_address":4742136,"land_encounters":null,"warp_table_rom_address":5443076,"water_encounters":null},"MAP_LAVARIDGE_TOWN_GYM_B1F":{"fishing_encounters":null,"header_rom_address":4742164,"land_encounters":null,"warp_table_rom_address":5443424,"water_encounters":null},"MAP_LAVARIDGE_TOWN_HERB_SHOP":{"fishing_encounters":null,"header_rom_address":4742108,"land_encounters":null,"warp_table_rom_address":5442896,"water_encounters":null},"MAP_LAVARIDGE_TOWN_HOUSE":{"fishing_encounters":null,"header_rom_address":4742192,"land_encounters":null,"warp_table_rom_address":5443708,"water_encounters":null},"MAP_LAVARIDGE_TOWN_MART":{"fishing_encounters":null,"header_rom_address":4742220,"land_encounters":null,"warp_table_rom_address":5443816,"water_encounters":null},"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4742248,"land_encounters":null,"warp_table_rom_address":5443948,"water_encounters":null},"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4742276,"land_encounters":null,"warp_table_rom_address":5444096,"water_encounters":null},"MAP_LILYCOVE_CITY":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,120,313,313],"rom_address":5591840},"header_rom_address":4740204,"land_encounters":null,"warp_table_rom_address":5414432,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5591812}},"MAP_LILYCOVE_CITY_CONTEST_HALL":{"fishing_encounters":null,"header_rom_address":4744684,"land_encounters":null,"warp_table_rom_address":5458600,"water_encounters":null},"MAP_LILYCOVE_CITY_CONTEST_LOBBY":{"fishing_encounters":null,"header_rom_address":4744656,"land_encounters":null,"warp_table_rom_address":5457636,"water_encounters":null},"MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F":{"fishing_encounters":null,"header_rom_address":4744544,"land_encounters":null,"warp_table_rom_address":5456036,"water_encounters":null},"MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F":{"fishing_encounters":null,"header_rom_address":4744572,"land_encounters":null,"warp_table_rom_address":5456264,"water_encounters":null},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F":{"fishing_encounters":null,"header_rom_address":4744992,"land_encounters":null,"warp_table_rom_address":5460084,"water_encounters":null},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F":{"fishing_encounters":null,"header_rom_address":4745020,"land_encounters":null,"warp_table_rom_address":5460268,"water_encounters":null},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F":{"fishing_encounters":null,"header_rom_address":4745048,"land_encounters":null,"warp_table_rom_address":5460432,"water_encounters":null},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F":{"fishing_encounters":null,"header_rom_address":4745076,"land_encounters":null,"warp_table_rom_address":5460596,"water_encounters":null},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F":{"fishing_encounters":null,"header_rom_address":4745104,"land_encounters":null,"warp_table_rom_address":5460808,"water_encounters":null},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR":{"fishing_encounters":null,"header_rom_address":4745160,"land_encounters":null,"warp_table_rom_address":5461024,"water_encounters":null},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP":{"fishing_encounters":null,"header_rom_address":4745132,"land_encounters":null,"warp_table_rom_address":5460948,"water_encounters":null},"MAP_LILYCOVE_CITY_HARBOR":{"fishing_encounters":null,"header_rom_address":4744824,"land_encounters":null,"warp_table_rom_address":5459436,"water_encounters":null},"MAP_LILYCOVE_CITY_HOUSE1":{"fishing_encounters":null,"header_rom_address":4744880,"land_encounters":null,"warp_table_rom_address":5459580,"water_encounters":null},"MAP_LILYCOVE_CITY_HOUSE2":{"fishing_encounters":null,"header_rom_address":4744908,"land_encounters":null,"warp_table_rom_address":5459640,"water_encounters":null},"MAP_LILYCOVE_CITY_HOUSE3":{"fishing_encounters":null,"header_rom_address":4744936,"land_encounters":null,"warp_table_rom_address":5459820,"water_encounters":null},"MAP_LILYCOVE_CITY_HOUSE4":{"fishing_encounters":null,"header_rom_address":4744964,"land_encounters":null,"warp_table_rom_address":5459904,"water_encounters":null},"MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F":{"fishing_encounters":null,"header_rom_address":4744600,"land_encounters":null,"warp_table_rom_address":5456532,"water_encounters":null},"MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F":{"fishing_encounters":null,"header_rom_address":4744628,"land_encounters":null,"warp_table_rom_address":5456864,"water_encounters":null},"MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE":{"fishing_encounters":null,"header_rom_address":4744852,"land_encounters":null,"warp_table_rom_address":5459496,"water_encounters":null},"MAP_LILYCOVE_CITY_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4744712,"land_encounters":null,"warp_table_rom_address":5458844,"water_encounters":null},"MAP_LILYCOVE_CITY_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4744740,"land_encounters":null,"warp_table_rom_address":5458984,"water_encounters":null},"MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB":{"fishing_encounters":null,"header_rom_address":4744796,"land_encounters":null,"warp_table_rom_address":5459280,"water_encounters":null},"MAP_LILYCOVE_CITY_UNUSED_MART":{"fishing_encounters":null,"header_rom_address":4744768,"land_encounters":null,"warp_table_rom_address":5459028,"water_encounters":null},"MAP_LITTLEROOT_TOWN":{"fishing_encounters":null,"header_rom_address":4740316,"land_encounters":null,"warp_table_rom_address":5416592,"water_encounters":null},"MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F":{"fishing_encounters":null,"header_rom_address":4741660,"land_encounters":null,"warp_table_rom_address":5439628,"water_encounters":null},"MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F":{"fishing_encounters":null,"header_rom_address":4741688,"land_encounters":null,"warp_table_rom_address":5440120,"water_encounters":null},"MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F":{"fishing_encounters":null,"header_rom_address":4741716,"land_encounters":null,"warp_table_rom_address":5440364,"water_encounters":null},"MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F":{"fishing_encounters":null,"header_rom_address":4741744,"land_encounters":null,"warp_table_rom_address":5440856,"water_encounters":null},"MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB":{"fishing_encounters":null,"header_rom_address":4741772,"land_encounters":null,"warp_table_rom_address":5441076,"water_encounters":null},"MAP_MAGMA_HIDEOUT_1F":{"fishing_encounters":null,"header_rom_address":4749136,"land_encounters":{"encounter_slots":[74,321,74,321,74,74,74,75,75,75,75,75],"rom_address":5592888},"warp_table_rom_address":5480884,"water_encounters":null},"MAP_MAGMA_HIDEOUT_2F_1R":{"fishing_encounters":null,"header_rom_address":4749164,"land_encounters":{"encounter_slots":[74,321,74,321,74,74,74,75,75,75,75,75],"rom_address":5592944},"warp_table_rom_address":5481032,"water_encounters":null},"MAP_MAGMA_HIDEOUT_2F_2R":{"fishing_encounters":null,"header_rom_address":4749192,"land_encounters":{"encounter_slots":[74,321,74,321,74,74,74,75,75,75,75,75],"rom_address":5593000},"warp_table_rom_address":5481220,"water_encounters":null},"MAP_MAGMA_HIDEOUT_2F_3R":{"fishing_encounters":null,"header_rom_address":4749332,"land_encounters":{"encounter_slots":[74,321,74,321,74,74,74,75,75,75,75,75],"rom_address":5593280},"warp_table_rom_address":5481736,"water_encounters":null},"MAP_MAGMA_HIDEOUT_3F_1R":{"fishing_encounters":null,"header_rom_address":4749220,"land_encounters":{"encounter_slots":[74,321,74,321,74,74,74,75,75,75,75,75],"rom_address":5593056},"warp_table_rom_address":5481328,"water_encounters":null},"MAP_MAGMA_HIDEOUT_3F_2R":{"fishing_encounters":null,"header_rom_address":4749248,"land_encounters":{"encounter_slots":[74,321,74,321,74,74,74,75,75,75,75,75],"rom_address":5593112},"warp_table_rom_address":5481420,"water_encounters":null},"MAP_MAGMA_HIDEOUT_3F_3R":{"fishing_encounters":null,"header_rom_address":4749304,"land_encounters":{"encounter_slots":[74,321,74,321,74,74,74,75,75,75,75,75],"rom_address":5593224},"warp_table_rom_address":5481700,"water_encounters":null},"MAP_MAGMA_HIDEOUT_4F":{"fishing_encounters":null,"header_rom_address":4749276,"land_encounters":{"encounter_slots":[74,321,74,321,74,74,74,75,75,75,75,75],"rom_address":5593168},"warp_table_rom_address":5481640,"water_encounters":null},"MAP_MARINE_CAVE_END":{"fishing_encounters":null,"header_rom_address":4749612,"land_encounters":null,"warp_table_rom_address":5482328,"water_encounters":null},"MAP_MARINE_CAVE_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4749584,"land_encounters":null,"warp_table_rom_address":5482276,"water_encounters":null},"MAP_MAUVILLE_CITY":{"fishing_encounters":null,"header_rom_address":4740120,"land_encounters":null,"warp_table_rom_address":5412444,"water_encounters":null},"MAP_MAUVILLE_CITY_BIKE_SHOP":{"fishing_encounters":null,"header_rom_address":4743592,"land_encounters":null,"warp_table_rom_address":5451272,"water_encounters":null},"MAP_MAUVILLE_CITY_GAME_CORNER":{"fishing_encounters":null,"header_rom_address":4743648,"land_encounters":null,"warp_table_rom_address":5451680,"water_encounters":null},"MAP_MAUVILLE_CITY_GYM":{"fishing_encounters":null,"header_rom_address":4743564,"land_encounters":null,"warp_table_rom_address":5451100,"water_encounters":null},"MAP_MAUVILLE_CITY_HOUSE1":{"fishing_encounters":null,"header_rom_address":4743620,"land_encounters":null,"warp_table_rom_address":5451356,"water_encounters":null},"MAP_MAUVILLE_CITY_HOUSE2":{"fishing_encounters":null,"header_rom_address":4743676,"land_encounters":null,"warp_table_rom_address":5452028,"water_encounters":null},"MAP_MAUVILLE_CITY_MART":{"fishing_encounters":null,"header_rom_address":4743760,"land_encounters":null,"warp_table_rom_address":5452464,"water_encounters":null},"MAP_MAUVILLE_CITY_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4743704,"land_encounters":null,"warp_table_rom_address":5452184,"water_encounters":null},"MAP_MAUVILLE_CITY_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4743732,"land_encounters":null,"warp_table_rom_address":5452348,"water_encounters":null},"MAP_METEOR_FALLS_1F_1R":{"fishing_encounters":{"encounter_slots":[129,118,129,118,323,323,323,323,323,323],"rom_address":5591124},"header_rom_address":4746728,"land_encounters":{"encounter_slots":[41,41,41,41,41,349,349,349,41,41,41,41],"rom_address":5591040},"warp_table_rom_address":5468092,"water_encounters":{"encounter_slots":[41,41,349,349,349],"rom_address":5591096}},"MAP_METEOR_FALLS_1F_2R":{"fishing_encounters":{"encounter_slots":[129,118,129,118,323,323,323,324,324,324],"rom_address":5591256},"header_rom_address":4746756,"land_encounters":{"encounter_slots":[42,42,42,349,349,349,42,349,42,42,42,42],"rom_address":5591172},"warp_table_rom_address":5468260,"water_encounters":{"encounter_slots":[42,42,349,349,349],"rom_address":5591228}},"MAP_METEOR_FALLS_B1F_1R":{"fishing_encounters":{"encounter_slots":[129,118,129,118,323,323,323,324,324,324],"rom_address":5591388},"header_rom_address":4746784,"land_encounters":{"encounter_slots":[42,42,42,349,349,349,42,349,42,42,42,42],"rom_address":5591304},"warp_table_rom_address":5468324,"water_encounters":{"encounter_slots":[42,42,349,349,349],"rom_address":5591360}},"MAP_METEOR_FALLS_B1F_2R":{"fishing_encounters":{"encounter_slots":[129,118,129,118,323,323,323,324,324,324],"rom_address":5586924},"header_rom_address":4746812,"land_encounters":{"encounter_slots":[42,42,395,349,395,349,395,349,42,42,42,42],"rom_address":5586840},"warp_table_rom_address":5468416,"water_encounters":{"encounter_slots":[42,42,349,349,349],"rom_address":5586896}},"MAP_METEOR_FALLS_STEVENS_CAVE":{"fishing_encounters":null,"header_rom_address":4749724,"land_encounters":{"encounter_slots":[42,42,42,349,349,349,42,349,42,42,42,42],"rom_address":5594232},"warp_table_rom_address":5482528,"water_encounters":null},"MAP_MIRAGE_TOWER_1F":{"fishing_encounters":null,"header_rom_address":4749360,"land_encounters":{"encounter_slots":[27,332,27,332,27,332,27,332,27,332,27,332],"rom_address":5593336},"warp_table_rom_address":5481772,"water_encounters":null},"MAP_MIRAGE_TOWER_2F":{"fishing_encounters":null,"header_rom_address":4749388,"land_encounters":{"encounter_slots":[27,332,27,332,27,332,27,332,27,332,27,332],"rom_address":5593392},"warp_table_rom_address":5481808,"water_encounters":null},"MAP_MIRAGE_TOWER_3F":{"fishing_encounters":null,"header_rom_address":4749416,"land_encounters":{"encounter_slots":[27,332,27,332,27,332,27,332,27,332,27,332],"rom_address":5593448},"warp_table_rom_address":5481892,"water_encounters":null},"MAP_MIRAGE_TOWER_4F":{"fishing_encounters":null,"header_rom_address":4749444,"land_encounters":{"encounter_slots":[27,332,27,332,27,332,27,332,27,332,27,332],"rom_address":5593504},"warp_table_rom_address":5482000,"water_encounters":null},"MAP_MOSSDEEP_CITY":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5592068},"header_rom_address":4740232,"land_encounters":null,"warp_table_rom_address":5415128,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5592040}},"MAP_MOSSDEEP_CITY_GAME_CORNER_1F":{"fishing_encounters":null,"header_rom_address":4745496,"land_encounters":null,"warp_table_rom_address":5463752,"water_encounters":null},"MAP_MOSSDEEP_CITY_GAME_CORNER_B1F":{"fishing_encounters":null,"header_rom_address":4745524,"land_encounters":null,"warp_table_rom_address":5463856,"water_encounters":null},"MAP_MOSSDEEP_CITY_GYM":{"fishing_encounters":null,"header_rom_address":4745188,"land_encounters":null,"warp_table_rom_address":5461924,"water_encounters":null},"MAP_MOSSDEEP_CITY_HOUSE1":{"fishing_encounters":null,"header_rom_address":4745216,"land_encounters":null,"warp_table_rom_address":5462272,"water_encounters":null},"MAP_MOSSDEEP_CITY_HOUSE2":{"fishing_encounters":null,"header_rom_address":4745244,"land_encounters":null,"warp_table_rom_address":5462380,"water_encounters":null},"MAP_MOSSDEEP_CITY_HOUSE3":{"fishing_encounters":null,"header_rom_address":4745356,"land_encounters":null,"warp_table_rom_address":5462852,"water_encounters":null},"MAP_MOSSDEEP_CITY_HOUSE4":{"fishing_encounters":null,"header_rom_address":4745412,"land_encounters":null,"warp_table_rom_address":5463116,"water_encounters":null},"MAP_MOSSDEEP_CITY_MART":{"fishing_encounters":null,"header_rom_address":4745328,"land_encounters":null,"warp_table_rom_address":5462792,"water_encounters":null},"MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4745272,"land_encounters":null,"warp_table_rom_address":5462488,"water_encounters":null},"MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4745300,"land_encounters":null,"warp_table_rom_address":5462652,"water_encounters":null},"MAP_MOSSDEEP_CITY_SPACE_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4745440,"land_encounters":null,"warp_table_rom_address":5463416,"water_encounters":null},"MAP_MOSSDEEP_CITY_SPACE_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4745468,"land_encounters":null,"warp_table_rom_address":5463676,"water_encounters":null},"MAP_MOSSDEEP_CITY_STEVENS_HOUSE":{"fishing_encounters":null,"header_rom_address":4745384,"land_encounters":null,"warp_table_rom_address":5462960,"water_encounters":null},"MAP_MT_CHIMNEY":{"fishing_encounters":null,"header_rom_address":4747064,"land_encounters":null,"warp_table_rom_address":5470704,"water_encounters":null},"MAP_MT_CHIMNEY_CABLE_CAR_STATION":{"fishing_encounters":null,"header_rom_address":4746532,"land_encounters":null,"warp_table_rom_address":5467184,"water_encounters":null},"MAP_MT_PYRE_1F":{"fishing_encounters":null,"header_rom_address":4747148,"land_encounters":{"encounter_slots":[377,377,377,377,377,377,377,377,377,377,377,377],"rom_address":5586428},"warp_table_rom_address":5471492,"water_encounters":null},"MAP_MT_PYRE_2F":{"fishing_encounters":null,"header_rom_address":4747176,"land_encounters":{"encounter_slots":[377,377,377,377,377,377,377,377,377,377,377,377],"rom_address":5588124},"warp_table_rom_address":5471752,"water_encounters":null},"MAP_MT_PYRE_3F":{"fishing_encounters":null,"header_rom_address":4747204,"land_encounters":{"encounter_slots":[377,377,377,377,377,377,377,377,377,377,377,377],"rom_address":5588180},"warp_table_rom_address":5471908,"water_encounters":null},"MAP_MT_PYRE_4F":{"fishing_encounters":null,"header_rom_address":4747232,"land_encounters":{"encounter_slots":[377,377,377,377,377,377,377,377,361,361,361,361],"rom_address":5588236},"warp_table_rom_address":5472024,"water_encounters":null},"MAP_MT_PYRE_5F":{"fishing_encounters":null,"header_rom_address":4747260,"land_encounters":{"encounter_slots":[377,377,377,377,377,377,377,377,361,361,361,361],"rom_address":5588292},"warp_table_rom_address":5472140,"water_encounters":null},"MAP_MT_PYRE_6F":{"fishing_encounters":null,"header_rom_address":4747288,"land_encounters":{"encounter_slots":[377,377,377,377,377,377,377,377,361,361,361,361],"rom_address":5588348},"warp_table_rom_address":5472272,"water_encounters":null},"MAP_MT_PYRE_EXTERIOR":{"fishing_encounters":null,"header_rom_address":4747316,"land_encounters":{"encounter_slots":[377,377,377,377,37,37,37,37,309,309,309,309],"rom_address":5588404},"warp_table_rom_address":5472356,"water_encounters":null},"MAP_MT_PYRE_SUMMIT":{"fishing_encounters":null,"header_rom_address":4747344,"land_encounters":{"encounter_slots":[377,377,377,377,377,377,377,361,361,361,411,411],"rom_address":5588460},"warp_table_rom_address":5472696,"water_encounters":null},"MAP_NAVEL_ROCK_B1F":{"fishing_encounters":null,"header_rom_address":4753392,"land_encounters":null,"warp_table_rom_address":5507564,"water_encounters":null},"MAP_NAVEL_ROCK_BOTTOM":{"fishing_encounters":null,"header_rom_address":4753896,"land_encounters":null,"warp_table_rom_address":5508288,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN01":{"fishing_encounters":null,"header_rom_address":4753588,"land_encounters":null,"warp_table_rom_address":5507868,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN02":{"fishing_encounters":null,"header_rom_address":4753616,"land_encounters":null,"warp_table_rom_address":5507904,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN03":{"fishing_encounters":null,"header_rom_address":4753644,"land_encounters":null,"warp_table_rom_address":5507940,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN04":{"fishing_encounters":null,"header_rom_address":4753672,"land_encounters":null,"warp_table_rom_address":5507976,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN05":{"fishing_encounters":null,"header_rom_address":4753700,"land_encounters":null,"warp_table_rom_address":5508012,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN06":{"fishing_encounters":null,"header_rom_address":4753728,"land_encounters":null,"warp_table_rom_address":5508048,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN07":{"fishing_encounters":null,"header_rom_address":4753756,"land_encounters":null,"warp_table_rom_address":5508084,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN08":{"fishing_encounters":null,"header_rom_address":4753784,"land_encounters":null,"warp_table_rom_address":5508120,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN09":{"fishing_encounters":null,"header_rom_address":4753812,"land_encounters":null,"warp_table_rom_address":5508156,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN10":{"fishing_encounters":null,"header_rom_address":4753840,"land_encounters":null,"warp_table_rom_address":5508192,"water_encounters":null},"MAP_NAVEL_ROCK_DOWN11":{"fishing_encounters":null,"header_rom_address":4753868,"land_encounters":null,"warp_table_rom_address":5508228,"water_encounters":null},"MAP_NAVEL_ROCK_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4753364,"land_encounters":null,"warp_table_rom_address":5507528,"water_encounters":null},"MAP_NAVEL_ROCK_EXTERIOR":{"fishing_encounters":null,"header_rom_address":4753308,"land_encounters":null,"warp_table_rom_address":5507416,"water_encounters":null},"MAP_NAVEL_ROCK_FORK":{"fishing_encounters":null,"header_rom_address":4753420,"land_encounters":null,"warp_table_rom_address":5507600,"water_encounters":null},"MAP_NAVEL_ROCK_HARBOR":{"fishing_encounters":null,"header_rom_address":4753336,"land_encounters":null,"warp_table_rom_address":5507500,"water_encounters":null},"MAP_NAVEL_ROCK_TOP":{"fishing_encounters":null,"header_rom_address":4753560,"land_encounters":null,"warp_table_rom_address":5507812,"water_encounters":null},"MAP_NAVEL_ROCK_UP1":{"fishing_encounters":null,"header_rom_address":4753448,"land_encounters":null,"warp_table_rom_address":5507644,"water_encounters":null},"MAP_NAVEL_ROCK_UP2":{"fishing_encounters":null,"header_rom_address":4753476,"land_encounters":null,"warp_table_rom_address":5507680,"water_encounters":null},"MAP_NAVEL_ROCK_UP3":{"fishing_encounters":null,"header_rom_address":4753504,"land_encounters":null,"warp_table_rom_address":5507716,"water_encounters":null},"MAP_NAVEL_ROCK_UP4":{"fishing_encounters":null,"header_rom_address":4753532,"land_encounters":null,"warp_table_rom_address":5507752,"water_encounters":null},"MAP_NEW_MAUVILLE_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4748184,"land_encounters":{"encounter_slots":[100,81,100,81,100,81,100,81,100,81,100,81],"rom_address":5590420},"warp_table_rom_address":5477324,"water_encounters":null},"MAP_NEW_MAUVILLE_INSIDE":{"fishing_encounters":null,"header_rom_address":4748212,"land_encounters":{"encounter_slots":[100,81,100,81,100,81,100,81,100,81,101,82],"rom_address":5587464},"warp_table_rom_address":5477568,"water_encounters":null},"MAP_OLDALE_TOWN":{"fishing_encounters":null,"header_rom_address":4740344,"land_encounters":null,"warp_table_rom_address":5416924,"water_encounters":null},"MAP_OLDALE_TOWN_HOUSE1":{"fishing_encounters":null,"header_rom_address":4741800,"land_encounters":null,"warp_table_rom_address":5441316,"water_encounters":null},"MAP_OLDALE_TOWN_HOUSE2":{"fishing_encounters":null,"header_rom_address":4741828,"land_encounters":null,"warp_table_rom_address":5441400,"water_encounters":null},"MAP_OLDALE_TOWN_MART":{"fishing_encounters":null,"header_rom_address":4741912,"land_encounters":null,"warp_table_rom_address":5441788,"water_encounters":null},"MAP_OLDALE_TOWN_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4741856,"land_encounters":null,"warp_table_rom_address":5441532,"water_encounters":null},"MAP_OLDALE_TOWN_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4741884,"land_encounters":null,"warp_table_rom_address":5441672,"water_encounters":null},"MAP_PACIFIDLOG_TOWN":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5592144},"header_rom_address":4740484,"land_encounters":null,"warp_table_rom_address":5418328,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5592116}},"MAP_PACIFIDLOG_TOWN_HOUSE1":{"fishing_encounters":null,"header_rom_address":4742836,"land_encounters":null,"warp_table_rom_address":5446440,"water_encounters":null},"MAP_PACIFIDLOG_TOWN_HOUSE2":{"fishing_encounters":null,"header_rom_address":4742864,"land_encounters":null,"warp_table_rom_address":5446548,"water_encounters":null},"MAP_PACIFIDLOG_TOWN_HOUSE3":{"fishing_encounters":null,"header_rom_address":4742892,"land_encounters":null,"warp_table_rom_address":5446632,"water_encounters":null},"MAP_PACIFIDLOG_TOWN_HOUSE4":{"fishing_encounters":null,"header_rom_address":4742920,"land_encounters":null,"warp_table_rom_address":5446740,"water_encounters":null},"MAP_PACIFIDLOG_TOWN_HOUSE5":{"fishing_encounters":null,"header_rom_address":4742948,"land_encounters":null,"warp_table_rom_address":5446824,"water_encounters":null},"MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4742780,"land_encounters":null,"warp_table_rom_address":5446208,"water_encounters":null},"MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4742808,"land_encounters":null,"warp_table_rom_address":5446348,"water_encounters":null},"MAP_PETALBURG_CITY":{"fishing_encounters":{"encounter_slots":[129,118,129,118,326,326,326,326,326,326],"rom_address":5592296},"header_rom_address":4740064,"land_encounters":null,"warp_table_rom_address":5410768,"water_encounters":{"encounter_slots":[183,183,183,183,183],"rom_address":5592268}},"MAP_PETALBURG_CITY_GYM":{"fishing_encounters":null,"header_rom_address":4743004,"land_encounters":null,"warp_table_rom_address":5447208,"water_encounters":null},"MAP_PETALBURG_CITY_HOUSE1":{"fishing_encounters":null,"header_rom_address":4743032,"land_encounters":null,"warp_table_rom_address":5447748,"water_encounters":null},"MAP_PETALBURG_CITY_HOUSE2":{"fishing_encounters":null,"header_rom_address":4743060,"land_encounters":null,"warp_table_rom_address":5447832,"water_encounters":null},"MAP_PETALBURG_CITY_MART":{"fishing_encounters":null,"header_rom_address":4743144,"land_encounters":null,"warp_table_rom_address":5448268,"water_encounters":null},"MAP_PETALBURG_CITY_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4743088,"land_encounters":null,"warp_table_rom_address":5447988,"water_encounters":null},"MAP_PETALBURG_CITY_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4743116,"land_encounters":null,"warp_table_rom_address":5448128,"water_encounters":null},"MAP_PETALBURG_CITY_WALLYS_HOUSE":{"fishing_encounters":null,"header_rom_address":4742976,"land_encounters":null,"warp_table_rom_address":5446908,"water_encounters":null},"MAP_PETALBURG_WOODS":{"fishing_encounters":null,"header_rom_address":4747036,"land_encounters":{"encounter_slots":[286,290,306,286,291,293,290,306,304,364,304,364],"rom_address":5586204},"warp_table_rom_address":5469812,"water_encounters":null},"MAP_RECORD_CORNER":{"fishing_encounters":null,"header_rom_address":4750480,"land_encounters":null,"warp_table_rom_address":5492076,"water_encounters":null},"MAP_ROUTE101":{"fishing_encounters":null,"header_rom_address":4740512,"land_encounters":{"encounter_slots":[290,286,290,290,286,286,290,286,288,288,288,288],"rom_address":5584716},"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_ROUTE102":{"fishing_encounters":{"encounter_slots":[129,118,129,118,326,326,326,326,326,326],"rom_address":5584856},"header_rom_address":4740540,"land_encounters":{"encounter_slots":[286,290,286,290,295,295,288,288,288,392,288,298],"rom_address":5584772},"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[183,183,183,183,118],"rom_address":5584828}},"MAP_ROUTE103":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5584988},"header_rom_address":4740568,"land_encounters":{"encounter_slots":[286,286,286,286,309,288,288,288,309,309,309,309],"rom_address":5584904},"warp_table_rom_address":5419492,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5584960}},"MAP_ROUTE104":{"fishing_encounters":{"encounter_slots":[129,129,129,129,129,129,129,129,129,129],"rom_address":5585120},"header_rom_address":4740596,"land_encounters":{"encounter_slots":[286,290,286,183,183,286,304,304,309,309,309,309],"rom_address":5585036},"warp_table_rom_address":5420348,"water_encounters":{"encounter_slots":[309,309,309,310,310],"rom_address":5585092}},"MAP_ROUTE104_MR_BRINEYS_HOUSE":{"fishing_encounters":null,"header_rom_address":4746392,"land_encounters":null,"warp_table_rom_address":5466716,"water_encounters":null},"MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP":{"fishing_encounters":null,"header_rom_address":4746420,"land_encounters":null,"warp_table_rom_address":5466824,"water_encounters":null},"MAP_ROUTE104_PROTOTYPE":{"fishing_encounters":null,"header_rom_address":4753952,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_ROUTE104_PROTOTYPE_PRETTY_PETAL_FLOWER_SHOP":{"fishing_encounters":null,"header_rom_address":4753980,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_ROUTE105":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5585196},"header_rom_address":4740624,"land_encounters":null,"warp_table_rom_address":5420760,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5585168}},"MAP_ROUTE106":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5587056},"header_rom_address":4740652,"land_encounters":null,"warp_table_rom_address":5420932,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5587028}},"MAP_ROUTE107":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5587132},"header_rom_address":4740680,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5587104}},"MAP_ROUTE108":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5587208},"header_rom_address":4740708,"land_encounters":null,"warp_table_rom_address":5421364,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5587180}},"MAP_ROUTE109":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5587284},"header_rom_address":4740736,"land_encounters":null,"warp_table_rom_address":5421980,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5587256}},"MAP_ROUTE109_SEASHORE_HOUSE":{"fishing_encounters":null,"header_rom_address":4754008,"land_encounters":null,"warp_table_rom_address":5508512,"water_encounters":null},"MAP_ROUTE110":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5585328},"header_rom_address":4740764,"land_encounters":{"encounter_slots":[286,337,367,337,354,43,354,367,309,309,353,353],"rom_address":5585244},"warp_table_rom_address":5422968,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5585300}},"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4754344,"land_encounters":null,"warp_table_rom_address":5511440,"water_encounters":null},"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4754372,"land_encounters":null,"warp_table_rom_address":5511548,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4754092,"land_encounters":null,"warp_table_rom_address":5508780,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_END":{"fishing_encounters":null,"header_rom_address":4754064,"land_encounters":null,"warp_table_rom_address":5508716,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4754036,"land_encounters":null,"warp_table_rom_address":5508572,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE1":{"fishing_encounters":null,"header_rom_address":4754120,"land_encounters":null,"warp_table_rom_address":5509192,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE2":{"fishing_encounters":null,"header_rom_address":4754148,"land_encounters":null,"warp_table_rom_address":5509368,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE3":{"fishing_encounters":null,"header_rom_address":4754176,"land_encounters":null,"warp_table_rom_address":5509656,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE4":{"fishing_encounters":null,"header_rom_address":4754204,"land_encounters":null,"warp_table_rom_address":5510112,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE5":{"fishing_encounters":null,"header_rom_address":4754232,"land_encounters":null,"warp_table_rom_address":5510288,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE6":{"fishing_encounters":null,"header_rom_address":4754260,"land_encounters":null,"warp_table_rom_address":5510792,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7":{"fishing_encounters":null,"header_rom_address":4754288,"land_encounters":null,"warp_table_rom_address":5511064,"water_encounters":null},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE8":{"fishing_encounters":null,"header_rom_address":4754316,"land_encounters":null,"warp_table_rom_address":5511360,"water_encounters":null},"MAP_ROUTE111":{"fishing_encounters":{"encounter_slots":[129,118,129,118,323,323,323,323,323,323],"rom_address":5585488},"header_rom_address":4740792,"land_encounters":{"encounter_slots":[27,332,27,332,318,318,27,332,318,344,344,344],"rom_address":5585376},"warp_table_rom_address":5424488,"water_encounters":{"encounter_slots":[183,183,183,183,118],"rom_address":5585432}},"MAP_ROUTE111_OLD_LADYS_REST_STOP":{"fishing_encounters":null,"header_rom_address":4746476,"land_encounters":null,"warp_table_rom_address":5467016,"water_encounters":null},"MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE":{"fishing_encounters":null,"header_rom_address":4746448,"land_encounters":null,"warp_table_rom_address":5466956,"water_encounters":null},"MAP_ROUTE112":{"fishing_encounters":null,"header_rom_address":4740820,"land_encounters":{"encounter_slots":[339,339,183,339,339,183,339,183,339,339,339,339],"rom_address":5585536},"warp_table_rom_address":5425644,"water_encounters":null},"MAP_ROUTE112_CABLE_CAR_STATION":{"fishing_encounters":null,"header_rom_address":4746504,"land_encounters":null,"warp_table_rom_address":5467100,"water_encounters":null},"MAP_ROUTE113":{"fishing_encounters":null,"header_rom_address":4740848,"land_encounters":{"encounter_slots":[308,308,218,308,308,218,308,218,308,227,308,227],"rom_address":5585592},"warp_table_rom_address":5426132,"water_encounters":null},"MAP_ROUTE113_GLASS_WORKSHOP":{"fishing_encounters":null,"header_rom_address":4754400,"land_encounters":null,"warp_table_rom_address":5511680,"water_encounters":null},"MAP_ROUTE114":{"fishing_encounters":{"encounter_slots":[129,118,129,118,323,323,323,323,323,323],"rom_address":5585760},"header_rom_address":4740876,"land_encounters":{"encounter_slots":[358,295,358,358,295,296,296,296,379,379,379,299],"rom_address":5585648},"warp_table_rom_address":5427224,"water_encounters":{"encounter_slots":[183,183,183,183,118],"rom_address":5585704}},"MAP_ROUTE114_FOSSIL_MANIACS_HOUSE":{"fishing_encounters":null,"header_rom_address":4746560,"land_encounters":null,"warp_table_rom_address":5467244,"water_encounters":null},"MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL":{"fishing_encounters":null,"header_rom_address":4746588,"land_encounters":null,"warp_table_rom_address":5467360,"water_encounters":null},"MAP_ROUTE114_LANETTES_HOUSE":{"fishing_encounters":null,"header_rom_address":4746616,"land_encounters":null,"warp_table_rom_address":5467460,"water_encounters":null},"MAP_ROUTE115":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5587416},"header_rom_address":4740904,"land_encounters":{"encounter_slots":[358,304,358,304,304,305,39,39,309,309,309,309],"rom_address":5587332},"warp_table_rom_address":5428028,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5587388}},"MAP_ROUTE116":{"fishing_encounters":null,"header_rom_address":4740932,"land_encounters":{"encounter_slots":[286,370,301,63,301,304,304,304,286,286,315,315],"rom_address":5585808},"warp_table_rom_address":5428912,"water_encounters":null},"MAP_ROUTE116_TUNNELERS_REST_HOUSE":{"fishing_encounters":null,"header_rom_address":4746644,"land_encounters":null,"warp_table_rom_address":5467604,"water_encounters":null},"MAP_ROUTE117":{"fishing_encounters":{"encounter_slots":[129,118,129,118,326,326,326,326,326,326],"rom_address":5585948},"header_rom_address":4740960,"land_encounters":{"encounter_slots":[286,43,286,43,183,43,387,387,387,387,386,298],"rom_address":5585864},"warp_table_rom_address":5429696,"water_encounters":{"encounter_slots":[183,183,183,183,118],"rom_address":5585920}},"MAP_ROUTE117_POKEMON_DAY_CARE":{"fishing_encounters":null,"header_rom_address":4746672,"land_encounters":null,"warp_table_rom_address":5467664,"water_encounters":null},"MAP_ROUTE118":{"fishing_encounters":{"encounter_slots":[129,72,129,72,330,331,330,330,330,330],"rom_address":5586080},"header_rom_address":4740988,"land_encounters":{"encounter_slots":[288,337,288,337,289,338,309,309,309,309,309,317],"rom_address":5585996},"warp_table_rom_address":5430276,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5586052}},"MAP_ROUTE119":{"fishing_encounters":{"encounter_slots":[129,72,129,72,330,330,330,330,330,330],"rom_address":5587604},"header_rom_address":4741016,"land_encounters":{"encounter_slots":[288,289,288,43,289,43,43,43,369,369,369,317],"rom_address":5587520},"warp_table_rom_address":5431500,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5587576}},"MAP_ROUTE119_HOUSE":{"fishing_encounters":null,"header_rom_address":4754512,"land_encounters":null,"warp_table_rom_address":5512400,"water_encounters":null},"MAP_ROUTE119_WEATHER_INSTITUTE_1F":{"fishing_encounters":null,"header_rom_address":4754456,"land_encounters":null,"warp_table_rom_address":5511920,"water_encounters":null},"MAP_ROUTE119_WEATHER_INSTITUTE_2F":{"fishing_encounters":null,"header_rom_address":4754484,"land_encounters":null,"warp_table_rom_address":5512204,"water_encounters":null},"MAP_ROUTE120":{"fishing_encounters":{"encounter_slots":[129,118,129,118,323,323,323,323,323,323],"rom_address":5587736},"header_rom_address":4741044,"land_encounters":{"encounter_slots":[286,287,287,43,183,43,43,183,376,376,317,298],"rom_address":5587652},"warp_table_rom_address":5433200,"water_encounters":{"encounter_slots":[183,183,183,183,118],"rom_address":5587708}},"MAP_ROUTE121":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5587868},"header_rom_address":4741072,"land_encounters":{"encounter_slots":[286,377,287,377,287,43,43,44,309,309,309,317],"rom_address":5587784},"warp_table_rom_address":5434404,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5587840}},"MAP_ROUTE121_SAFARI_ZONE_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4746700,"land_encounters":null,"warp_table_rom_address":5467772,"water_encounters":null},"MAP_ROUTE122":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5587944},"header_rom_address":4741100,"land_encounters":null,"warp_table_rom_address":5434616,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5587916}},"MAP_ROUTE123":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5588076},"header_rom_address":4741128,"land_encounters":{"encounter_slots":[286,377,287,377,287,43,43,44,309,309,309,317],"rom_address":5587992},"warp_table_rom_address":5435676,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5588048}},"MAP_ROUTE123_BERRY_MASTERS_HOUSE":{"fishing_encounters":null,"header_rom_address":4754428,"land_encounters":null,"warp_table_rom_address":5511764,"water_encounters":null},"MAP_ROUTE124":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5586156},"header_rom_address":4741156,"land_encounters":null,"warp_table_rom_address":5436476,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5586128}},"MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE":{"fishing_encounters":null,"header_rom_address":4754540,"land_encounters":null,"warp_table_rom_address":5512460,"water_encounters":null},"MAP_ROUTE125":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5588600},"header_rom_address":4741184,"land_encounters":null,"warp_table_rom_address":5436756,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5588572}},"MAP_ROUTE126":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5588676},"header_rom_address":4741212,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5588648}},"MAP_ROUTE127":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5588752},"header_rom_address":4741240,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5588724}},"MAP_ROUTE128":{"fishing_encounters":{"encounter_slots":[129,72,129,325,313,325,313,222,313,313],"rom_address":5588828},"header_rom_address":4741268,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5588800}},"MAP_ROUTE129":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5588904},"header_rom_address":4741296,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[72,309,309,310,314],"rom_address":5588876}},"MAP_ROUTE130":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5589036},"header_rom_address":4741324,"land_encounters":{"encounter_slots":[360,360,360,360,360,360,360,360,360,360,360,360],"rom_address":5588952},"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5589008}},"MAP_ROUTE131":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,313,313,313],"rom_address":5589112},"header_rom_address":4741352,"land_encounters":null,"warp_table_rom_address":5438156,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5589084}},"MAP_ROUTE132":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,116,313,313],"rom_address":5589188},"header_rom_address":4741380,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5589160}},"MAP_ROUTE133":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,116,313,313],"rom_address":5589264},"header_rom_address":4741408,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5589236}},"MAP_ROUTE134":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,331,313,116,313,313],"rom_address":5589340},"header_rom_address":4741436,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5589312}},"MAP_RUSTBORO_CITY":{"fishing_encounters":null,"header_rom_address":4740148,"land_encounters":null,"warp_table_rom_address":5413000,"water_encounters":null},"MAP_RUSTBORO_CITY_CUTTERS_HOUSE":{"fishing_encounters":null,"header_rom_address":4744096,"land_encounters":null,"warp_table_rom_address":5454244,"water_encounters":null},"MAP_RUSTBORO_CITY_DEVON_CORP_1F":{"fishing_encounters":null,"header_rom_address":4743788,"land_encounters":null,"warp_table_rom_address":5452572,"water_encounters":null},"MAP_RUSTBORO_CITY_DEVON_CORP_2F":{"fishing_encounters":null,"header_rom_address":4743816,"land_encounters":null,"warp_table_rom_address":5452784,"water_encounters":null},"MAP_RUSTBORO_CITY_DEVON_CORP_3F":{"fishing_encounters":null,"header_rom_address":4743844,"land_encounters":null,"warp_table_rom_address":5452892,"water_encounters":null},"MAP_RUSTBORO_CITY_FLAT1_1F":{"fishing_encounters":null,"header_rom_address":4744012,"land_encounters":null,"warp_table_rom_address":5453848,"water_encounters":null},"MAP_RUSTBORO_CITY_FLAT1_2F":{"fishing_encounters":null,"header_rom_address":4744040,"land_encounters":null,"warp_table_rom_address":5454084,"water_encounters":null},"MAP_RUSTBORO_CITY_FLAT2_1F":{"fishing_encounters":null,"header_rom_address":4744152,"land_encounters":null,"warp_table_rom_address":5454412,"water_encounters":null},"MAP_RUSTBORO_CITY_FLAT2_2F":{"fishing_encounters":null,"header_rom_address":4744180,"land_encounters":null,"warp_table_rom_address":5454504,"water_encounters":null},"MAP_RUSTBORO_CITY_FLAT2_3F":{"fishing_encounters":null,"header_rom_address":4744208,"land_encounters":null,"warp_table_rom_address":5454588,"water_encounters":null},"MAP_RUSTBORO_CITY_GYM":{"fishing_encounters":null,"header_rom_address":4743872,"land_encounters":null,"warp_table_rom_address":5453064,"water_encounters":null},"MAP_RUSTBORO_CITY_HOUSE1":{"fishing_encounters":null,"header_rom_address":4744068,"land_encounters":null,"warp_table_rom_address":5454160,"water_encounters":null},"MAP_RUSTBORO_CITY_HOUSE2":{"fishing_encounters":null,"header_rom_address":4744124,"land_encounters":null,"warp_table_rom_address":5454328,"water_encounters":null},"MAP_RUSTBORO_CITY_HOUSE3":{"fishing_encounters":null,"header_rom_address":4744236,"land_encounters":null,"warp_table_rom_address":5454688,"water_encounters":null},"MAP_RUSTBORO_CITY_MART":{"fishing_encounters":null,"header_rom_address":4743984,"land_encounters":null,"warp_table_rom_address":5453764,"water_encounters":null},"MAP_RUSTBORO_CITY_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4743928,"land_encounters":null,"warp_table_rom_address":5453484,"water_encounters":null},"MAP_RUSTBORO_CITY_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4743956,"land_encounters":null,"warp_table_rom_address":5453624,"water_encounters":null},"MAP_RUSTBORO_CITY_POKEMON_SCHOOL":{"fishing_encounters":null,"header_rom_address":4743900,"land_encounters":null,"warp_table_rom_address":5453292,"water_encounters":null},"MAP_RUSTURF_TUNNEL":{"fishing_encounters":null,"header_rom_address":4746840,"land_encounters":{"encounter_slots":[370,370,370,370,370,370,370,370,370,370,370,370],"rom_address":5586260},"warp_table_rom_address":5468684,"water_encounters":null},"MAP_SAFARI_ZONE_NORTH":{"fishing_encounters":null,"header_rom_address":4751488,"land_encounters":{"encounter_slots":[231,43,231,43,177,44,44,177,178,214,178,214],"rom_address":5590608},"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_SAFARI_ZONE_NORTHEAST":{"fishing_encounters":null,"header_rom_address":4751796,"land_encounters":{"encounter_slots":[190,216,190,216,191,165,163,204,228,241,228,241],"rom_address":5592804},"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_SAFARI_ZONE_NORTHWEST":{"fishing_encounters":{"encounter_slots":[129,118,129,118,118,118,118,119,119,119],"rom_address":5590776},"header_rom_address":4751460,"land_encounters":{"encounter_slots":[111,43,111,43,84,44,44,84,85,127,85,127],"rom_address":5590692},"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[54,54,54,55,55],"rom_address":5590748}},"MAP_SAFARI_ZONE_REST_HOUSE":{"fishing_encounters":null,"header_rom_address":4751768,"land_encounters":null,"warp_table_rom_address":5499036,"water_encounters":null},"MAP_SAFARI_ZONE_SOUTH":{"fishing_encounters":null,"header_rom_address":4751544,"land_encounters":{"encounter_slots":[43,43,203,203,177,84,44,202,25,202,25,202],"rom_address":5586540},"warp_table_rom_address":5497484,"water_encounters":null},"MAP_SAFARI_ZONE_SOUTHEAST":{"fishing_encounters":{"encounter_slots":[129,118,129,118,223,118,223,223,223,224],"rom_address":5592756},"header_rom_address":4751824,"land_encounters":{"encounter_slots":[191,179,191,179,190,167,163,209,234,207,234,207],"rom_address":5592672},"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[194,183,183,183,195],"rom_address":5592728}},"MAP_SAFARI_ZONE_SOUTHWEST":{"fishing_encounters":{"encounter_slots":[129,118,129,118,118,118,118,119,119,119],"rom_address":5590560},"header_rom_address":4751516,"land_encounters":{"encounter_slots":[43,43,203,203,177,84,44,202,25,202,25,202],"rom_address":5590476},"warp_table_rom_address":5497300,"water_encounters":{"encounter_slots":[54,54,54,54,54],"rom_address":5590532}},"MAP_SCORCHED_SLAB":{"fishing_encounters":null,"header_rom_address":4748772,"land_encounters":null,"warp_table_rom_address":5480184,"water_encounters":null},"MAP_SEAFLOOR_CAVERN_ENTRANCE":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5590092},"header_rom_address":4747484,"land_encounters":null,"warp_table_rom_address":5473836,"water_encounters":{"encounter_slots":[72,41,41,42,42],"rom_address":5590064}},"MAP_SEAFLOOR_CAVERN_ROOM1":{"fishing_encounters":null,"header_rom_address":4747512,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,42,42,42,42],"rom_address":5589464},"warp_table_rom_address":5473992,"water_encounters":null},"MAP_SEAFLOOR_CAVERN_ROOM2":{"fishing_encounters":null,"header_rom_address":4747540,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,42,42,42,42],"rom_address":5589520},"warp_table_rom_address":5474228,"water_encounters":null},"MAP_SEAFLOOR_CAVERN_ROOM3":{"fishing_encounters":null,"header_rom_address":4747568,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,42,42,42,42],"rom_address":5589576},"warp_table_rom_address":5474496,"water_encounters":null},"MAP_SEAFLOOR_CAVERN_ROOM4":{"fishing_encounters":null,"header_rom_address":4747596,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,42,42,42,42],"rom_address":5589632},"warp_table_rom_address":5474588,"water_encounters":null},"MAP_SEAFLOOR_CAVERN_ROOM5":{"fishing_encounters":null,"header_rom_address":4747624,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,42,42,42,42],"rom_address":5589688},"warp_table_rom_address":5474784,"water_encounters":null},"MAP_SEAFLOOR_CAVERN_ROOM6":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5589828},"header_rom_address":4747652,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,42,42,42,42],"rom_address":5589744},"warp_table_rom_address":5474828,"water_encounters":{"encounter_slots":[72,41,41,42,42],"rom_address":5589800}},"MAP_SEAFLOOR_CAVERN_ROOM7":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5589960},"header_rom_address":4747680,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,42,42,42,42],"rom_address":5589876},"warp_table_rom_address":5474872,"water_encounters":{"encounter_slots":[72,41,41,42,42],"rom_address":5589932}},"MAP_SEAFLOOR_CAVERN_ROOM8":{"fishing_encounters":null,"header_rom_address":4747708,"land_encounters":{"encounter_slots":[41,41,41,41,41,41,41,41,42,42,42,42],"rom_address":5590008},"warp_table_rom_address":5475196,"water_encounters":null},"MAP_SEAFLOOR_CAVERN_ROOM9":{"fishing_encounters":null,"header_rom_address":4747736,"land_encounters":null,"warp_table_rom_address":5475400,"water_encounters":null},"MAP_SEALED_CHAMBER_INNER_ROOM":{"fishing_encounters":null,"header_rom_address":4748744,"land_encounters":null,"warp_table_rom_address":5480024,"water_encounters":null},"MAP_SEALED_CHAMBER_OUTER_ROOM":{"fishing_encounters":null,"header_rom_address":4748716,"land_encounters":null,"warp_table_rom_address":5479648,"water_encounters":null},"MAP_SECRET_BASE_BLUE_CAVE1":{"fishing_encounters":null,"header_rom_address":4749808,"land_encounters":null,"warp_table_rom_address":5483692,"water_encounters":null},"MAP_SECRET_BASE_BLUE_CAVE2":{"fishing_encounters":null,"header_rom_address":4749976,"land_encounters":null,"warp_table_rom_address":5486020,"water_encounters":null},"MAP_SECRET_BASE_BLUE_CAVE3":{"fishing_encounters":null,"header_rom_address":4750144,"land_encounters":null,"warp_table_rom_address":5488348,"water_encounters":null},"MAP_SECRET_BASE_BLUE_CAVE4":{"fishing_encounters":null,"header_rom_address":4750312,"land_encounters":null,"warp_table_rom_address":5490676,"water_encounters":null},"MAP_SECRET_BASE_BROWN_CAVE1":{"fishing_encounters":null,"header_rom_address":4749780,"land_encounters":null,"warp_table_rom_address":5483304,"water_encounters":null},"MAP_SECRET_BASE_BROWN_CAVE2":{"fishing_encounters":null,"header_rom_address":4749948,"land_encounters":null,"warp_table_rom_address":5485632,"water_encounters":null},"MAP_SECRET_BASE_BROWN_CAVE3":{"fishing_encounters":null,"header_rom_address":4750116,"land_encounters":null,"warp_table_rom_address":5487960,"water_encounters":null},"MAP_SECRET_BASE_BROWN_CAVE4":{"fishing_encounters":null,"header_rom_address":4750284,"land_encounters":null,"warp_table_rom_address":5490288,"water_encounters":null},"MAP_SECRET_BASE_RED_CAVE1":{"fishing_encounters":null,"header_rom_address":4749752,"land_encounters":null,"warp_table_rom_address":5482916,"water_encounters":null},"MAP_SECRET_BASE_RED_CAVE2":{"fishing_encounters":null,"header_rom_address":4749920,"land_encounters":null,"warp_table_rom_address":5485244,"water_encounters":null},"MAP_SECRET_BASE_RED_CAVE3":{"fishing_encounters":null,"header_rom_address":4750088,"land_encounters":null,"warp_table_rom_address":5487572,"water_encounters":null},"MAP_SECRET_BASE_RED_CAVE4":{"fishing_encounters":null,"header_rom_address":4750256,"land_encounters":null,"warp_table_rom_address":5489900,"water_encounters":null},"MAP_SECRET_BASE_SHRUB1":{"fishing_encounters":null,"header_rom_address":4749892,"land_encounters":null,"warp_table_rom_address":5484856,"water_encounters":null},"MAP_SECRET_BASE_SHRUB2":{"fishing_encounters":null,"header_rom_address":4750060,"land_encounters":null,"warp_table_rom_address":5487184,"water_encounters":null},"MAP_SECRET_BASE_SHRUB3":{"fishing_encounters":null,"header_rom_address":4750228,"land_encounters":null,"warp_table_rom_address":5489512,"water_encounters":null},"MAP_SECRET_BASE_SHRUB4":{"fishing_encounters":null,"header_rom_address":4750396,"land_encounters":null,"warp_table_rom_address":5491840,"water_encounters":null},"MAP_SECRET_BASE_TREE1":{"fishing_encounters":null,"header_rom_address":4749864,"land_encounters":null,"warp_table_rom_address":5484468,"water_encounters":null},"MAP_SECRET_BASE_TREE2":{"fishing_encounters":null,"header_rom_address":4750032,"land_encounters":null,"warp_table_rom_address":5486796,"water_encounters":null},"MAP_SECRET_BASE_TREE3":{"fishing_encounters":null,"header_rom_address":4750200,"land_encounters":null,"warp_table_rom_address":5489124,"water_encounters":null},"MAP_SECRET_BASE_TREE4":{"fishing_encounters":null,"header_rom_address":4750368,"land_encounters":null,"warp_table_rom_address":5491452,"water_encounters":null},"MAP_SECRET_BASE_YELLOW_CAVE1":{"fishing_encounters":null,"header_rom_address":4749836,"land_encounters":null,"warp_table_rom_address":5484080,"water_encounters":null},"MAP_SECRET_BASE_YELLOW_CAVE2":{"fishing_encounters":null,"header_rom_address":4750004,"land_encounters":null,"warp_table_rom_address":5486408,"water_encounters":null},"MAP_SECRET_BASE_YELLOW_CAVE3":{"fishing_encounters":null,"header_rom_address":4750172,"land_encounters":null,"warp_table_rom_address":5488736,"water_encounters":null},"MAP_SECRET_BASE_YELLOW_CAVE4":{"fishing_encounters":null,"header_rom_address":4750340,"land_encounters":null,"warp_table_rom_address":5491064,"water_encounters":null},"MAP_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM":{"fishing_encounters":null,"header_rom_address":4748128,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM":{"fishing_encounters":null,"header_rom_address":4748156,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5591764},"header_rom_address":4748016,"land_encounters":{"encounter_slots":[41,341,41,341,41,341,41,341,42,341,42,341],"rom_address":5591680},"warp_table_rom_address":5476868,"water_encounters":{"encounter_slots":[72,41,341,341,341],"rom_address":5591736}},"MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM":{"fishing_encounters":null,"header_rom_address":4749052,"land_encounters":{"encounter_slots":[41,341,41,341,41,341,346,341,42,346,42,346],"rom_address":5592372},"warp_table_rom_address":5480584,"water_encounters":null},"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5591632},"header_rom_address":4748044,"land_encounters":{"encounter_slots":[41,341,41,341,41,341,41,341,42,341,42,341],"rom_address":5591548},"warp_table_rom_address":5476944,"water_encounters":{"encounter_slots":[72,41,341,341,341],"rom_address":5591604}},"MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM":{"fishing_encounters":null,"header_rom_address":4748100,"land_encounters":{"encounter_slots":[41,341,41,341,41,341,41,341,42,341,42,341],"rom_address":5591492},"warp_table_rom_address":5477220,"water_encounters":null},"MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM":{"fishing_encounters":null,"header_rom_address":4748072,"land_encounters":{"encounter_slots":[41,341,41,341,41,341,41,341,42,341,42,341],"rom_address":5591436},"warp_table_rom_address":5477124,"water_encounters":null},"MAP_SKY_PILLAR_1F":{"fishing_encounters":null,"header_rom_address":4748940,"land_encounters":{"encounter_slots":[322,42,42,322,319,378,378,319,319,319,319,319],"rom_address":5592428},"warp_table_rom_address":5480368,"water_encounters":null},"MAP_SKY_PILLAR_2F":{"fishing_encounters":null,"header_rom_address":4748968,"land_encounters":null,"warp_table_rom_address":5480412,"water_encounters":null},"MAP_SKY_PILLAR_3F":{"fishing_encounters":null,"header_rom_address":4748996,"land_encounters":{"encounter_slots":[322,42,42,322,319,378,378,319,319,319,319,319],"rom_address":5592560},"warp_table_rom_address":5480448,"water_encounters":null},"MAP_SKY_PILLAR_4F":{"fishing_encounters":null,"header_rom_address":4749024,"land_encounters":null,"warp_table_rom_address":5480492,"water_encounters":null},"MAP_SKY_PILLAR_5F":{"fishing_encounters":null,"header_rom_address":4749080,"land_encounters":{"encounter_slots":[322,42,42,322,319,378,378,319,319,359,359,359],"rom_address":5592616},"warp_table_rom_address":5480612,"water_encounters":null},"MAP_SKY_PILLAR_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4748884,"land_encounters":null,"warp_table_rom_address":5480272,"water_encounters":null},"MAP_SKY_PILLAR_OUTSIDE":{"fishing_encounters":null,"header_rom_address":4748912,"land_encounters":null,"warp_table_rom_address":5480332,"water_encounters":null},"MAP_SKY_PILLAR_TOP":{"fishing_encounters":null,"header_rom_address":4749108,"land_encounters":null,"warp_table_rom_address":5480696,"water_encounters":null},"MAP_SLATEPORT_CITY":{"fishing_encounters":{"encounter_slots":[129,72,129,72,313,313,313,313,313,313],"rom_address":5591992},"header_rom_address":4740092,"land_encounters":null,"warp_table_rom_address":5411900,"water_encounters":{"encounter_slots":[72,309,309,310,310],"rom_address":5591964}},"MAP_SLATEPORT_CITY_BATTLE_TENT_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4743284,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4743256,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY":{"fishing_encounters":null,"header_rom_address":4743228,"land_encounters":null,"warp_table_rom_address":5448664,"water_encounters":null},"MAP_SLATEPORT_CITY_HARBOR":{"fishing_encounters":null,"header_rom_address":4743424,"land_encounters":null,"warp_table_rom_address":5450368,"water_encounters":null},"MAP_SLATEPORT_CITY_HOUSE":{"fishing_encounters":null,"header_rom_address":4743452,"land_encounters":null,"warp_table_rom_address":5450532,"water_encounters":null},"MAP_SLATEPORT_CITY_MART":{"fishing_encounters":null,"header_rom_address":4743536,"land_encounters":null,"warp_table_rom_address":5450896,"water_encounters":null},"MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE":{"fishing_encounters":null,"header_rom_address":4743312,"land_encounters":null,"warp_table_rom_address":5448872,"water_encounters":null},"MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F":{"fishing_encounters":null,"header_rom_address":4743368,"land_encounters":null,"warp_table_rom_address":5449496,"water_encounters":null},"MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F":{"fishing_encounters":null,"header_rom_address":4743396,"land_encounters":null,"warp_table_rom_address":5449896,"water_encounters":null},"MAP_SLATEPORT_CITY_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4743480,"land_encounters":null,"warp_table_rom_address":5450640,"water_encounters":null},"MAP_SLATEPORT_CITY_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4743508,"land_encounters":null,"warp_table_rom_address":5450780,"water_encounters":null},"MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB":{"fishing_encounters":null,"header_rom_address":4743340,"land_encounters":null,"warp_table_rom_address":5449124,"water_encounters":null},"MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F":{"fishing_encounters":null,"header_rom_address":4743172,"land_encounters":null,"warp_table_rom_address":5448400,"water_encounters":null},"MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F":{"fishing_encounters":null,"header_rom_address":4743200,"land_encounters":null,"warp_table_rom_address":5448516,"water_encounters":null},"MAP_SOOTOPOLIS_CITY":{"fishing_encounters":{"encounter_slots":[129,72,129,129,129,129,129,130,130,130],"rom_address":5592512},"header_rom_address":4740260,"land_encounters":null,"warp_table_rom_address":5415916,"water_encounters":{"encounter_slots":[129,129,129,129,129],"rom_address":5592484}},"MAP_SOOTOPOLIS_CITY_GYM_1F":{"fishing_encounters":null,"header_rom_address":4745552,"land_encounters":null,"warp_table_rom_address":5463932,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_GYM_B1F":{"fishing_encounters":null,"header_rom_address":4745580,"land_encounters":null,"warp_table_rom_address":5464240,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_HOUSE1":{"fishing_encounters":null,"header_rom_address":4745692,"land_encounters":null,"warp_table_rom_address":5464704,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_HOUSE2":{"fishing_encounters":null,"header_rom_address":4745720,"land_encounters":null,"warp_table_rom_address":5464764,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_HOUSE3":{"fishing_encounters":null,"header_rom_address":4745748,"land_encounters":null,"warp_table_rom_address":5464848,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_HOUSE4":{"fishing_encounters":null,"header_rom_address":4745776,"land_encounters":null,"warp_table_rom_address":5464956,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_HOUSE5":{"fishing_encounters":null,"header_rom_address":4745804,"land_encounters":null,"warp_table_rom_address":5465040,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_HOUSE6":{"fishing_encounters":null,"header_rom_address":4745832,"land_encounters":null,"warp_table_rom_address":5465100,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_HOUSE7":{"fishing_encounters":null,"header_rom_address":4745860,"land_encounters":null,"warp_table_rom_address":5465184,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE":{"fishing_encounters":null,"header_rom_address":4745888,"land_encounters":null,"warp_table_rom_address":5465268,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_MART":{"fishing_encounters":null,"header_rom_address":4745664,"land_encounters":null,"warp_table_rom_address":5464620,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F":{"fishing_encounters":null,"header_rom_address":4745916,"land_encounters":null,"warp_table_rom_address":5465352,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F":{"fishing_encounters":null,"header_rom_address":4745944,"land_encounters":null,"warp_table_rom_address":5465420,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4745608,"land_encounters":null,"warp_table_rom_address":5464364,"water_encounters":null},"MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4745636,"land_encounters":null,"warp_table_rom_address":5464504,"water_encounters":null},"MAP_SOUTHERN_ISLAND_EXTERIOR":{"fishing_encounters":null,"header_rom_address":4751712,"land_encounters":null,"warp_table_rom_address":5498820,"water_encounters":null},"MAP_SOUTHERN_ISLAND_INTERIOR":{"fishing_encounters":null,"header_rom_address":4751740,"land_encounters":null,"warp_table_rom_address":5498916,"water_encounters":null},"MAP_SS_TIDAL_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4750900,"land_encounters":null,"warp_table_rom_address":5493032,"water_encounters":null},"MAP_SS_TIDAL_LOWER_DECK":{"fishing_encounters":null,"header_rom_address":4750928,"land_encounters":null,"warp_table_rom_address":5493316,"water_encounters":null},"MAP_SS_TIDAL_ROOMS":{"fishing_encounters":null,"header_rom_address":4750956,"land_encounters":null,"warp_table_rom_address":5493548,"water_encounters":null},"MAP_TERRA_CAVE_END":{"fishing_encounters":null,"header_rom_address":4749668,"land_encounters":null,"warp_table_rom_address":5482432,"water_encounters":null},"MAP_TERRA_CAVE_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4749640,"land_encounters":null,"warp_table_rom_address":5482372,"water_encounters":null},"MAP_TRADE_CENTER":{"fishing_encounters":null,"header_rom_address":4750452,"land_encounters":null,"warp_table_rom_address":5491984,"water_encounters":null},"MAP_TRAINER_HILL_1F":{"fishing_encounters":null,"header_rom_address":4753168,"land_encounters":null,"warp_table_rom_address":5507212,"water_encounters":null},"MAP_TRAINER_HILL_2F":{"fishing_encounters":null,"header_rom_address":4753196,"land_encounters":null,"warp_table_rom_address":5507248,"water_encounters":null},"MAP_TRAINER_HILL_3F":{"fishing_encounters":null,"header_rom_address":4753224,"land_encounters":null,"warp_table_rom_address":5507284,"water_encounters":null},"MAP_TRAINER_HILL_4F":{"fishing_encounters":null,"header_rom_address":4753252,"land_encounters":null,"warp_table_rom_address":5507320,"water_encounters":null},"MAP_TRAINER_HILL_ELEVATOR":{"fishing_encounters":null,"header_rom_address":4753924,"land_encounters":null,"warp_table_rom_address":5508340,"water_encounters":null},"MAP_TRAINER_HILL_ENTRANCE":{"fishing_encounters":null,"header_rom_address":4753140,"land_encounters":null,"warp_table_rom_address":5507140,"water_encounters":null},"MAP_TRAINER_HILL_ROOF":{"fishing_encounters":null,"header_rom_address":4753280,"land_encounters":null,"warp_table_rom_address":5507380,"water_encounters":null},"MAP_UNDERWATER_MARINE_CAVE":{"fishing_encounters":null,"header_rom_address":4749556,"land_encounters":null,"warp_table_rom_address":5482248,"water_encounters":null},"MAP_UNDERWATER_ROUTE105":{"fishing_encounters":null,"header_rom_address":4741604,"land_encounters":null,"warp_table_rom_address":5439388,"water_encounters":null},"MAP_UNDERWATER_ROUTE124":{"fishing_encounters":null,"header_rom_address":4741464,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":{"encounter_slots":[373,170,373,381,381],"rom_address":5592344}},"MAP_UNDERWATER_ROUTE125":{"fishing_encounters":null,"header_rom_address":4741632,"land_encounters":null,"warp_table_rom_address":5439424,"water_encounters":null},"MAP_UNDERWATER_ROUTE126":{"fishing_encounters":null,"header_rom_address":4741492,"land_encounters":null,"warp_table_rom_address":5439092,"water_encounters":{"encounter_slots":[373,170,373,381,381],"rom_address":5586596}},"MAP_UNDERWATER_ROUTE127":{"fishing_encounters":null,"header_rom_address":4741520,"land_encounters":null,"warp_table_rom_address":5439216,"water_encounters":null},"MAP_UNDERWATER_ROUTE128":{"fishing_encounters":null,"header_rom_address":4741548,"land_encounters":null,"warp_table_rom_address":5439300,"water_encounters":null},"MAP_UNDERWATER_ROUTE129":{"fishing_encounters":null,"header_rom_address":4741576,"land_encounters":null,"warp_table_rom_address":5439352,"water_encounters":null},"MAP_UNDERWATER_ROUTE134":{"fishing_encounters":null,"header_rom_address":4748660,"land_encounters":null,"warp_table_rom_address":5479580,"water_encounters":null},"MAP_UNDERWATER_SEAFLOOR_CAVERN":{"fishing_encounters":null,"header_rom_address":4747456,"land_encounters":null,"warp_table_rom_address":5473784,"water_encounters":null},"MAP_UNDERWATER_SEALED_CHAMBER":{"fishing_encounters":null,"header_rom_address":4748688,"land_encounters":null,"warp_table_rom_address":5479608,"water_encounters":null},"MAP_UNDERWATER_SOOTOPOLIS_CITY":{"fishing_encounters":null,"header_rom_address":4746868,"land_encounters":null,"warp_table_rom_address":5468808,"water_encounters":null},"MAP_UNION_ROOM":{"fishing_encounters":null,"header_rom_address":4751432,"land_encounters":null,"warp_table_rom_address":5496912,"water_encounters":null},"MAP_UNUSED_CONTEST_HALL1":{"fishing_encounters":null,"header_rom_address":4750564,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_UNUSED_CONTEST_HALL2":{"fishing_encounters":null,"header_rom_address":4750592,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_UNUSED_CONTEST_HALL3":{"fishing_encounters":null,"header_rom_address":4750620,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_UNUSED_CONTEST_HALL4":{"fishing_encounters":null,"header_rom_address":4750648,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_UNUSED_CONTEST_HALL5":{"fishing_encounters":null,"header_rom_address":4750676,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_UNUSED_CONTEST_HALL6":{"fishing_encounters":null,"header_rom_address":4750704,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_VERDANTURF_TOWN":{"fishing_encounters":null,"header_rom_address":4740456,"land_encounters":null,"warp_table_rom_address":5418084,"water_encounters":null},"MAP_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM":{"fishing_encounters":null,"header_rom_address":4742584,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR":{"fishing_encounters":null,"header_rom_address":4742556,"land_encounters":null,"warp_table_rom_address":4160749568,"water_encounters":null},"MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY":{"fishing_encounters":null,"header_rom_address":4742528,"land_encounters":null,"warp_table_rom_address":5445168,"water_encounters":null},"MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE":{"fishing_encounters":null,"header_rom_address":4742724,"land_encounters":null,"warp_table_rom_address":5445968,"water_encounters":null},"MAP_VERDANTURF_TOWN_HOUSE":{"fishing_encounters":null,"header_rom_address":4742752,"land_encounters":null,"warp_table_rom_address":5446052,"water_encounters":null},"MAP_VERDANTURF_TOWN_MART":{"fishing_encounters":null,"header_rom_address":4742612,"land_encounters":null,"warp_table_rom_address":5445448,"water_encounters":null},"MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F":{"fishing_encounters":null,"header_rom_address":4742640,"land_encounters":null,"warp_table_rom_address":5445580,"water_encounters":null},"MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F":{"fishing_encounters":null,"header_rom_address":4742668,"land_encounters":null,"warp_table_rom_address":5445720,"water_encounters":null},"MAP_VERDANTURF_TOWN_WANDAS_HOUSE":{"fishing_encounters":null,"header_rom_address":4742696,"land_encounters":null,"warp_table_rom_address":5445884,"water_encounters":null},"MAP_VICTORY_ROAD_1F":{"fishing_encounters":null,"header_rom_address":4747932,"land_encounters":{"encounter_slots":[42,336,383,371,41,335,42,336,382,370,382,370],"rom_address":5586484},"warp_table_rom_address":5475892,"water_encounters":null},"MAP_VICTORY_ROAD_B1F":{"fishing_encounters":null,"header_rom_address":4747960,"land_encounters":{"encounter_slots":[42,336,383,383,42,336,42,336,383,355,383,355],"rom_address":5590824},"warp_table_rom_address":5476500,"water_encounters":null},"MAP_VICTORY_ROAD_B2F":{"fishing_encounters":{"encounter_slots":[129,118,129,118,323,323,323,324,324,324],"rom_address":5590992},"header_rom_address":4747988,"land_encounters":{"encounter_slots":[42,322,383,383,42,322,42,322,383,355,383,355],"rom_address":5590908},"warp_table_rom_address":5476744,"water_encounters":{"encounter_slots":[42,42,42,42,42],"rom_address":5590964}}},"misc_ram_addresses":{"CB2_Overworld":134766684,"gArchipelagoReceivedItem":33792044,"gMain":50340544,"gSaveBlock1Ptr":50355596},"misc_rom_addresses":{"gArchipelagoInfo":5874864,"gArchipelagoOptions":5874840,"gEvolutionTable":3310148,"gLevelUpLearnsets":3326628,"gSpeciesInfo":3288488,"gTMHMLearnsets":3281524,"gTrainers":3221820,"sNewGamePCItems":6172396,"sStarterMon":5983704,"sTMHMMoves":6393984},"species":[{"abilities":[0,0],"base_stats":[0,0,0,0,0,0],"catch_rate":0,"evolutions":[],"friendship":0,"id":0,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":4,"move_id":45},{"level":7,"move_id":73},{"level":10,"move_id":22},{"level":15,"move_id":77},{"level":15,"move_id":79},{"level":20,"move_id":75},{"level":25,"move_id":230},{"level":32,"move_id":74},{"level":39,"move_id":235},{"level":46,"move_id":76}],"rom_address":3300024},"rom_address":3288488,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[65,0],"base_stats":[45,49,49,45,65,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":2}],"friendship":70,"id":1,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":4,"move_id":45},{"level":7,"move_id":73},{"level":10,"move_id":22},{"level":15,"move_id":77},{"level":15,"move_id":79},{"level":20,"move_id":75},{"level":25,"move_id":230},{"level":32,"move_id":74},{"level":39,"move_id":235},{"level":46,"move_id":76}],"rom_address":3300024},"rom_address":3288516,"tmhm_learnset":"00E41E0884350720","types":[12,3]},{"abilities":[65,0],"base_stats":[60,62,63,60,80,80],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":32,"species":3}],"friendship":70,"id":2,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":73},{"level":4,"move_id":45},{"level":7,"move_id":73},{"level":10,"move_id":22},{"level":15,"move_id":77},{"level":15,"move_id":79},{"level":22,"move_id":75},{"level":29,"move_id":230},{"level":38,"move_id":74},{"level":47,"move_id":235},{"level":56,"move_id":76}],"rom_address":3300052},"rom_address":3288544,"tmhm_learnset":"00E41E0884350720","types":[12,3]},{"abilities":[65,0],"base_stats":[80,82,83,80,100,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":3,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":73},{"level":1,"move_id":22},{"level":4,"move_id":45},{"level":7,"move_id":73},{"level":10,"move_id":22},{"level":15,"move_id":77},{"level":15,"move_id":79},{"level":22,"move_id":75},{"level":29,"move_id":230},{"level":41,"move_id":74},{"level":53,"move_id":235},{"level":65,"move_id":76}],"rom_address":3300082},"rom_address":3288572,"tmhm_learnset":"00E41E0886354730","types":[12,3]},{"abilities":[66,0],"base_stats":[39,52,43,65,60,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":5}],"friendship":70,"id":4,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":45},{"level":7,"move_id":52},{"level":13,"move_id":108},{"level":19,"move_id":99},{"level":25,"move_id":184},{"level":31,"move_id":53},{"level":37,"move_id":163},{"level":43,"move_id":82},{"level":49,"move_id":83}],"rom_address":3300112},"rom_address":3288600,"tmhm_learnset":"00A61EA4CC510623","types":[10,10]},{"abilities":[66,0],"base_stats":[58,64,58,80,80,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":6}],"friendship":70,"id":5,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":45},{"level":1,"move_id":52},{"level":7,"move_id":52},{"level":13,"move_id":108},{"level":20,"move_id":99},{"level":27,"move_id":184},{"level":34,"move_id":53},{"level":41,"move_id":163},{"level":48,"move_id":82},{"level":55,"move_id":83}],"rom_address":3300138},"rom_address":3288628,"tmhm_learnset":"00A61EA4CC510623","types":[10,10]},{"abilities":[66,0],"base_stats":[78,84,78,100,109,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":6,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":45},{"level":1,"move_id":52},{"level":1,"move_id":108},{"level":7,"move_id":52},{"level":13,"move_id":108},{"level":20,"move_id":99},{"level":27,"move_id":184},{"level":34,"move_id":53},{"level":36,"move_id":17},{"level":44,"move_id":163},{"level":54,"move_id":82},{"level":64,"move_id":83}],"rom_address":3300164},"rom_address":3288656,"tmhm_learnset":"00AE5EA4CE514633","types":[10,2]},{"abilities":[67,0],"base_stats":[44,48,65,43,50,64],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":8}],"friendship":70,"id":7,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":4,"move_id":39},{"level":7,"move_id":145},{"level":10,"move_id":110},{"level":13,"move_id":55},{"level":18,"move_id":44},{"level":23,"move_id":229},{"level":28,"move_id":182},{"level":33,"move_id":240},{"level":40,"move_id":130},{"level":47,"move_id":56}],"rom_address":3300192},"rom_address":3288684,"tmhm_learnset":"03B01E00CC533265","types":[11,11]},{"abilities":[67,0],"base_stats":[59,63,80,58,65,80],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":9}],"friendship":70,"id":8,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":1,"move_id":145},{"level":4,"move_id":39},{"level":7,"move_id":145},{"level":10,"move_id":110},{"level":13,"move_id":55},{"level":19,"move_id":44},{"level":25,"move_id":229},{"level":31,"move_id":182},{"level":37,"move_id":240},{"level":45,"move_id":130},{"level":53,"move_id":56}],"rom_address":3300222},"rom_address":3288712,"tmhm_learnset":"03B01E00CC533265","types":[11,11]},{"abilities":[67,0],"base_stats":[79,83,100,78,85,105],"catch_rate":45,"evolutions":[],"friendship":70,"id":9,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":1,"move_id":145},{"level":1,"move_id":110},{"level":4,"move_id":39},{"level":7,"move_id":145},{"level":10,"move_id":110},{"level":13,"move_id":55},{"level":19,"move_id":44},{"level":25,"move_id":229},{"level":31,"move_id":182},{"level":42,"move_id":240},{"level":55,"move_id":130},{"level":68,"move_id":56}],"rom_address":3300252},"rom_address":3288740,"tmhm_learnset":"03B01E00CE537275","types":[11,11]},{"abilities":[19,0],"base_stats":[45,30,35,45,20,20],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":7,"species":11}],"friendship":70,"id":10,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":81}],"rom_address":3300282},"rom_address":3288768,"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[61,0],"base_stats":[50,20,55,30,25,25],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":10,"species":12}],"friendship":70,"id":11,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":7,"move_id":106}],"rom_address":3300292},"rom_address":3288796,"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[14,0],"base_stats":[60,45,50,70,80,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":12,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":93},{"level":10,"move_id":93},{"level":13,"move_id":77},{"level":14,"move_id":78},{"level":15,"move_id":79},{"level":18,"move_id":48},{"level":23,"move_id":18},{"level":28,"move_id":16},{"level":34,"move_id":60},{"level":40,"move_id":219},{"level":47,"move_id":318}],"rom_address":3300304},"rom_address":3288824,"tmhm_learnset":"0040BE80B43F4620","types":[6,2]},{"abilities":[19,0],"base_stats":[40,35,30,50,20,20],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":7,"species":14}],"friendship":70,"id":13,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":40},{"level":1,"move_id":81}],"rom_address":3300334},"rom_address":3288852,"tmhm_learnset":"0000000000000000","types":[6,3]},{"abilities":[61,0],"base_stats":[45,25,50,35,25,25],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":10,"species":15}],"friendship":70,"id":14,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":7,"move_id":106}],"rom_address":3300344},"rom_address":3288880,"tmhm_learnset":"0000000000000000","types":[6,3]},{"abilities":[68,0],"base_stats":[65,80,40,75,45,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":15,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":31},{"level":10,"move_id":31},{"level":15,"move_id":116},{"level":20,"move_id":41},{"level":25,"move_id":99},{"level":30,"move_id":228},{"level":35,"move_id":42},{"level":40,"move_id":97},{"level":45,"move_id":283}],"rom_address":3300356},"rom_address":3288908,"tmhm_learnset":"00843E88C4354620","types":[6,3]},{"abilities":[51,0],"base_stats":[40,45,40,56,35,35],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":17}],"friendship":70,"id":16,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":5,"move_id":28},{"level":9,"move_id":16},{"level":13,"move_id":98},{"level":19,"move_id":18},{"level":25,"move_id":17},{"level":31,"move_id":297},{"level":39,"move_id":97},{"level":47,"move_id":119}],"rom_address":3300382},"rom_address":3288936,"tmhm_learnset":"00087E8084130620","types":[0,2]},{"abilities":[51,0],"base_stats":[63,60,55,71,50,50],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":36,"species":18}],"friendship":70,"id":17,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":28},{"level":1,"move_id":16},{"level":5,"move_id":28},{"level":9,"move_id":16},{"level":13,"move_id":98},{"level":20,"move_id":18},{"level":27,"move_id":17},{"level":34,"move_id":297},{"level":43,"move_id":97},{"level":52,"move_id":119}],"rom_address":3300408},"rom_address":3288964,"tmhm_learnset":"00087E8084130620","types":[0,2]},{"abilities":[51,0],"base_stats":[83,80,75,91,70,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":18,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":28},{"level":1,"move_id":16},{"level":1,"move_id":98},{"level":5,"move_id":28},{"level":9,"move_id":16},{"level":13,"move_id":98},{"level":20,"move_id":18},{"level":27,"move_id":17},{"level":34,"move_id":297},{"level":48,"move_id":97},{"level":62,"move_id":119}],"rom_address":3300434},"rom_address":3288992,"tmhm_learnset":"00087E8084134620","types":[0,2]},{"abilities":[50,62],"base_stats":[30,56,35,72,25,35],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":20}],"friendship":70,"id":19,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":7,"move_id":98},{"level":13,"move_id":158},{"level":20,"move_id":116},{"level":27,"move_id":228},{"level":34,"move_id":162},{"level":41,"move_id":283}],"rom_address":3300460},"rom_address":3289020,"tmhm_learnset":"00843E02ADD33E20","types":[0,0]},{"abilities":[50,62],"base_stats":[55,81,60,97,50,70],"catch_rate":127,"evolutions":[],"friendship":70,"id":20,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":1,"move_id":98},{"level":7,"move_id":98},{"level":13,"move_id":158},{"level":20,"move_id":184},{"level":30,"move_id":228},{"level":40,"move_id":162},{"level":50,"move_id":283}],"rom_address":3300482},"rom_address":3289048,"tmhm_learnset":"00A43E02ADD37E30","types":[0,0]},{"abilities":[51,0],"base_stats":[40,60,30,70,31,31],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":22}],"friendship":70,"id":21,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":1,"move_id":45},{"level":7,"move_id":43},{"level":13,"move_id":31},{"level":19,"move_id":228},{"level":25,"move_id":332},{"level":31,"move_id":119},{"level":37,"move_id":65},{"level":43,"move_id":97}],"rom_address":3300504},"rom_address":3289076,"tmhm_learnset":"00087E8084130620","types":[0,2]},{"abilities":[51,0],"base_stats":[65,90,65,100,61,61],"catch_rate":90,"evolutions":[],"friendship":70,"id":22,"learnset":{"moves":[{"level":1,"move_id":64},{"level":1,"move_id":45},{"level":1,"move_id":43},{"level":1,"move_id":31},{"level":7,"move_id":43},{"level":13,"move_id":31},{"level":26,"move_id":228},{"level":32,"move_id":119},{"level":40,"move_id":65},{"level":47,"move_id":97}],"rom_address":3300528},"rom_address":3289104,"tmhm_learnset":"00087E8084134620","types":[0,2]},{"abilities":[22,61],"base_stats":[35,60,44,55,40,54],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":22,"species":24}],"friendship":70,"id":23,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":35},{"level":1,"move_id":43},{"level":8,"move_id":40},{"level":13,"move_id":44},{"level":20,"move_id":137},{"level":25,"move_id":103},{"level":32,"move_id":51},{"level":37,"move_id":254},{"level":37,"move_id":256},{"level":37,"move_id":255},{"level":44,"move_id":114}],"rom_address":3300550},"rom_address":3289132,"tmhm_learnset":"00213F088E570620","types":[3,3]},{"abilities":[22,61],"base_stats":[60,85,69,80,65,79],"catch_rate":90,"evolutions":[],"friendship":70,"id":24,"learnset":{"moves":[{"level":1,"move_id":35},{"level":1,"move_id":43},{"level":1,"move_id":40},{"level":1,"move_id":44},{"level":8,"move_id":40},{"level":13,"move_id":44},{"level":20,"move_id":137},{"level":28,"move_id":103},{"level":38,"move_id":51},{"level":46,"move_id":254},{"level":46,"move_id":256},{"level":46,"move_id":255},{"level":56,"move_id":114}],"rom_address":3300578},"rom_address":3289160,"tmhm_learnset":"00213F088E574620","types":[3,3]},{"abilities":[9,0],"base_stats":[35,55,30,90,50,40],"catch_rate":190,"evolutions":[{"method":"ITEM","param":96,"species":26}],"friendship":70,"id":25,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":84},{"level":1,"move_id":45},{"level":6,"move_id":39},{"level":8,"move_id":86},{"level":11,"move_id":98},{"level":15,"move_id":104},{"level":20,"move_id":21},{"level":26,"move_id":85},{"level":33,"move_id":97},{"level":41,"move_id":87},{"level":50,"move_id":113}],"rom_address":3300606},"rom_address":3289188,"tmhm_learnset":"00E01E02CDD38221","types":[13,13]},{"abilities":[9,0],"base_stats":[60,90,55,100,90,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":26,"learnset":{"moves":[{"level":1,"move_id":84},{"level":1,"move_id":39},{"level":1,"move_id":98},{"level":1,"move_id":85}],"rom_address":3300634},"rom_address":3289216,"tmhm_learnset":"00E03E02CDD3C221","types":[13,13]},{"abilities":[8,0],"base_stats":[50,75,85,40,20,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":22,"species":28}],"friendship":70,"id":27,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":6,"move_id":111},{"level":11,"move_id":28},{"level":17,"move_id":40},{"level":23,"move_id":163},{"level":30,"move_id":129},{"level":37,"move_id":154},{"level":45,"move_id":328},{"level":53,"move_id":201}],"rom_address":3300644},"rom_address":3289244,"tmhm_learnset":"00A43ED0CE510621","types":[4,4]},{"abilities":[8,0],"base_stats":[75,100,110,65,45,55],"catch_rate":90,"evolutions":[],"friendship":70,"id":28,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":111},{"level":1,"move_id":28},{"level":6,"move_id":111},{"level":11,"move_id":28},{"level":17,"move_id":40},{"level":24,"move_id":163},{"level":33,"move_id":129},{"level":42,"move_id":154},{"level":52,"move_id":328},{"level":62,"move_id":201}],"rom_address":3300670},"rom_address":3289272,"tmhm_learnset":"00A43ED0CE514621","types":[4,4]},{"abilities":[38,0],"base_stats":[55,47,52,41,40,40],"catch_rate":235,"evolutions":[{"method":"LEVEL","param":16,"species":30}],"friendship":70,"id":29,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":45},{"level":1,"move_id":10},{"level":8,"move_id":39},{"level":12,"move_id":24},{"level":17,"move_id":40},{"level":20,"move_id":44},{"level":23,"move_id":270},{"level":30,"move_id":154},{"level":38,"move_id":260},{"level":47,"move_id":242}],"rom_address":3300696},"rom_address":3289300,"tmhm_learnset":"00A43E8A8DD33624","types":[3,3]},{"abilities":[38,0],"base_stats":[70,62,67,56,55,55],"catch_rate":120,"evolutions":[{"method":"ITEM","param":94,"species":31}],"friendship":70,"id":30,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":45},{"level":1,"move_id":10},{"level":8,"move_id":39},{"level":12,"move_id":24},{"level":18,"move_id":40},{"level":22,"move_id":44},{"level":26,"move_id":270},{"level":34,"move_id":154},{"level":43,"move_id":260},{"level":53,"move_id":242}],"rom_address":3300722},"rom_address":3289328,"tmhm_learnset":"00A43E8A8DD33624","types":[3,3]},{"abilities":[38,0],"base_stats":[90,82,87,76,75,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":31,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":39},{"level":1,"move_id":24},{"level":1,"move_id":40},{"level":23,"move_id":34}],"rom_address":3300748},"rom_address":3289356,"tmhm_learnset":"00B43FFEEFD37E35","types":[3,4]},{"abilities":[38,0],"base_stats":[46,57,40,50,40,40],"catch_rate":235,"evolutions":[{"method":"LEVEL","param":16,"species":33}],"friendship":70,"id":32,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":64},{"level":8,"move_id":116},{"level":12,"move_id":24},{"level":17,"move_id":40},{"level":20,"move_id":30},{"level":23,"move_id":270},{"level":30,"move_id":31},{"level":38,"move_id":260},{"level":47,"move_id":32}],"rom_address":3300760},"rom_address":3289384,"tmhm_learnset":"00A43E0A8DD33624","types":[3,3]},{"abilities":[38,0],"base_stats":[61,72,57,65,55,55],"catch_rate":120,"evolutions":[{"method":"ITEM","param":94,"species":34}],"friendship":70,"id":33,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":64},{"level":8,"move_id":116},{"level":12,"move_id":24},{"level":18,"move_id":40},{"level":22,"move_id":30},{"level":26,"move_id":270},{"level":34,"move_id":31},{"level":43,"move_id":260},{"level":53,"move_id":32}],"rom_address":3300786},"rom_address":3289412,"tmhm_learnset":"00A43E0A8DD33624","types":[3,3]},{"abilities":[38,0],"base_stats":[81,92,77,85,85,75],"catch_rate":45,"evolutions":[],"friendship":70,"id":34,"learnset":{"moves":[{"level":1,"move_id":64},{"level":1,"move_id":116},{"level":1,"move_id":24},{"level":1,"move_id":40},{"level":23,"move_id":37}],"rom_address":3300812},"rom_address":3289440,"tmhm_learnset":"00B43F7EEFD37E35","types":[3,4]},{"abilities":[56,0],"base_stats":[70,45,48,35,60,65],"catch_rate":150,"evolutions":[{"method":"ITEM","param":94,"species":36}],"friendship":140,"id":35,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":1,"move_id":45},{"level":5,"move_id":227},{"level":9,"move_id":47},{"level":13,"move_id":3},{"level":17,"move_id":266},{"level":21,"move_id":107},{"level":25,"move_id":111},{"level":29,"move_id":118},{"level":33,"move_id":322},{"level":37,"move_id":236},{"level":41,"move_id":113},{"level":45,"move_id":309}],"rom_address":3300824},"rom_address":3289468,"tmhm_learnset":"00611E27FDFBB62D","types":[0,0]},{"abilities":[56,0],"base_stats":[95,70,73,60,85,90],"catch_rate":25,"evolutions":[],"friendship":140,"id":36,"learnset":{"moves":[{"level":1,"move_id":47},{"level":1,"move_id":3},{"level":1,"move_id":107},{"level":1,"move_id":118}],"rom_address":3300856},"rom_address":3289496,"tmhm_learnset":"00611E27FDFBF62D","types":[0,0]},{"abilities":[18,0],"base_stats":[38,41,40,65,50,65],"catch_rate":190,"evolutions":[{"method":"ITEM","param":95,"species":38}],"friendship":70,"id":37,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":52},{"level":5,"move_id":39},{"level":9,"move_id":46},{"level":13,"move_id":98},{"level":17,"move_id":261},{"level":21,"move_id":109},{"level":25,"move_id":286},{"level":29,"move_id":53},{"level":33,"move_id":219},{"level":37,"move_id":288},{"level":41,"move_id":83}],"rom_address":3300866},"rom_address":3289524,"tmhm_learnset":"00021E248C590630","types":[10,10]},{"abilities":[18,0],"base_stats":[73,76,75,100,81,100],"catch_rate":75,"evolutions":[],"friendship":70,"id":38,"learnset":{"moves":[{"level":1,"move_id":52},{"level":1,"move_id":98},{"level":1,"move_id":109},{"level":1,"move_id":219},{"level":45,"move_id":83}],"rom_address":3300896},"rom_address":3289552,"tmhm_learnset":"00021E248C594630","types":[10,10]},{"abilities":[56,0],"base_stats":[115,45,20,20,45,25],"catch_rate":170,"evolutions":[{"method":"ITEM","param":94,"species":40}],"friendship":70,"id":39,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":1,"move_id":47},{"level":4,"move_id":111},{"level":9,"move_id":1},{"level":14,"move_id":50},{"level":19,"move_id":205},{"level":24,"move_id":3},{"level":29,"move_id":156},{"level":34,"move_id":34},{"level":39,"move_id":102},{"level":44,"move_id":304},{"level":49,"move_id":38}],"rom_address":3300908},"rom_address":3289580,"tmhm_learnset":"00611E27FDBBB625","types":[0,0]},{"abilities":[56,0],"base_stats":[140,70,45,45,75,50],"catch_rate":50,"evolutions":[],"friendship":70,"id":40,"learnset":{"moves":[{"level":1,"move_id":47},{"level":1,"move_id":50},{"level":1,"move_id":111},{"level":1,"move_id":3}],"rom_address":3300938},"rom_address":3289608,"tmhm_learnset":"00611E27FDBBF625","types":[0,0]},{"abilities":[39,0],"base_stats":[40,45,35,55,30,40],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":22,"species":42}],"friendship":70,"id":41,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":141},{"level":6,"move_id":48},{"level":11,"move_id":310},{"level":16,"move_id":44},{"level":21,"move_id":17},{"level":26,"move_id":109},{"level":31,"move_id":314},{"level":36,"move_id":212},{"level":41,"move_id":305},{"level":46,"move_id":114}],"rom_address":3300948},"rom_address":3289636,"tmhm_learnset":"00017F88A4170E20","types":[3,2]},{"abilities":[39,0],"base_stats":[75,80,70,90,65,75],"catch_rate":90,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":169}],"friendship":70,"id":42,"learnset":{"moves":[{"level":1,"move_id":103},{"level":1,"move_id":141},{"level":1,"move_id":48},{"level":1,"move_id":310},{"level":6,"move_id":48},{"level":11,"move_id":310},{"level":16,"move_id":44},{"level":21,"move_id":17},{"level":28,"move_id":109},{"level":35,"move_id":314},{"level":42,"move_id":212},{"level":49,"move_id":305},{"level":56,"move_id":114}],"rom_address":3300976},"rom_address":3289664,"tmhm_learnset":"00017F88A4174E20","types":[3,2]},{"abilities":[34,0],"base_stats":[45,50,55,30,75,65],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":21,"species":44}],"friendship":70,"id":43,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":71},{"level":7,"move_id":230},{"level":14,"move_id":77},{"level":16,"move_id":78},{"level":18,"move_id":79},{"level":23,"move_id":51},{"level":32,"move_id":236},{"level":39,"move_id":80}],"rom_address":3301004},"rom_address":3289692,"tmhm_learnset":"00441E0884350720","types":[12,3]},{"abilities":[34,0],"base_stats":[60,65,70,40,85,75],"catch_rate":120,"evolutions":[{"method":"ITEM","param":98,"species":45},{"method":"ITEM","param":93,"species":182}],"friendship":70,"id":44,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":71},{"level":1,"move_id":230},{"level":1,"move_id":77},{"level":7,"move_id":230},{"level":14,"move_id":77},{"level":16,"move_id":78},{"level":18,"move_id":79},{"level":24,"move_id":51},{"level":35,"move_id":236},{"level":44,"move_id":80}],"rom_address":3301028},"rom_address":3289720,"tmhm_learnset":"00441E0884350720","types":[12,3]},{"abilities":[34,0],"base_stats":[75,80,85,50,100,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":45,"learnset":{"moves":[{"level":1,"move_id":71},{"level":1,"move_id":312},{"level":1,"move_id":78},{"level":1,"move_id":72},{"level":44,"move_id":80}],"rom_address":3301052},"rom_address":3289748,"tmhm_learnset":"00441E0884354720","types":[12,3]},{"abilities":[27,0],"base_stats":[35,70,55,25,45,55],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":24,"species":47}],"friendship":70,"id":46,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":7,"move_id":78},{"level":13,"move_id":77},{"level":19,"move_id":141},{"level":25,"move_id":147},{"level":31,"move_id":163},{"level":37,"move_id":74},{"level":43,"move_id":202},{"level":49,"move_id":312}],"rom_address":3301064},"rom_address":3289776,"tmhm_learnset":"00C43E888C350720","types":[6,12]},{"abilities":[27,0],"base_stats":[60,95,80,30,60,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":47,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":78},{"level":1,"move_id":77},{"level":7,"move_id":78},{"level":13,"move_id":77},{"level":19,"move_id":141},{"level":27,"move_id":147},{"level":35,"move_id":163},{"level":43,"move_id":74},{"level":51,"move_id":202},{"level":59,"move_id":312}],"rom_address":3301090},"rom_address":3289804,"tmhm_learnset":"00C43E888C354720","types":[6,12]},{"abilities":[14,0],"base_stats":[60,55,50,45,40,55],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":31,"species":49}],"friendship":70,"id":48,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":50},{"level":1,"move_id":193},{"level":9,"move_id":48},{"level":17,"move_id":93},{"level":20,"move_id":77},{"level":25,"move_id":141},{"level":28,"move_id":78},{"level":33,"move_id":60},{"level":36,"move_id":79},{"level":41,"move_id":94}],"rom_address":3301116},"rom_address":3289832,"tmhm_learnset":"0040BE0894350620","types":[6,3]},{"abilities":[19,0],"base_stats":[70,65,60,90,90,75],"catch_rate":75,"evolutions":[],"friendship":70,"id":49,"learnset":{"moves":[{"level":1,"move_id":318},{"level":1,"move_id":33},{"level":1,"move_id":50},{"level":1,"move_id":193},{"level":1,"move_id":48},{"level":9,"move_id":48},{"level":17,"move_id":93},{"level":20,"move_id":77},{"level":25,"move_id":141},{"level":28,"move_id":78},{"level":31,"move_id":16},{"level":36,"move_id":60},{"level":42,"move_id":79},{"level":52,"move_id":94}],"rom_address":3301142},"rom_address":3289860,"tmhm_learnset":"0040BE8894354620","types":[6,3]},{"abilities":[8,71],"base_stats":[10,55,25,95,35,45],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":26,"species":51}],"friendship":70,"id":50,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":28},{"level":5,"move_id":45},{"level":9,"move_id":222},{"level":17,"move_id":91},{"level":25,"move_id":189},{"level":33,"move_id":163},{"level":41,"move_id":89},{"level":49,"move_id":90}],"rom_address":3301172},"rom_address":3289888,"tmhm_learnset":"00843EC88E110620","types":[4,4]},{"abilities":[8,71],"base_stats":[35,80,50,120,50,70],"catch_rate":50,"evolutions":[],"friendship":70,"id":51,"learnset":{"moves":[{"level":1,"move_id":161},{"level":1,"move_id":10},{"level":1,"move_id":28},{"level":1,"move_id":45},{"level":5,"move_id":45},{"level":9,"move_id":222},{"level":17,"move_id":91},{"level":25,"move_id":189},{"level":26,"move_id":328},{"level":38,"move_id":163},{"level":51,"move_id":89},{"level":64,"move_id":90}],"rom_address":3301196},"rom_address":3289916,"tmhm_learnset":"00843EC88E114620","types":[4,4]},{"abilities":[53,0],"base_stats":[40,45,35,90,40,40],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":28,"species":53}],"friendship":70,"id":52,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":45},{"level":11,"move_id":44},{"level":20,"move_id":6},{"level":28,"move_id":185},{"level":35,"move_id":103},{"level":41,"move_id":154},{"level":46,"move_id":163},{"level":50,"move_id":252}],"rom_address":3301222},"rom_address":3289944,"tmhm_learnset":"00453F82ADD30E24","types":[0,0]},{"abilities":[7,0],"base_stats":[65,70,60,115,65,65],"catch_rate":90,"evolutions":[],"friendship":70,"id":53,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":45},{"level":1,"move_id":44},{"level":11,"move_id":44},{"level":20,"move_id":6},{"level":29,"move_id":185},{"level":38,"move_id":103},{"level":46,"move_id":154},{"level":53,"move_id":163},{"level":59,"move_id":252}],"rom_address":3301246},"rom_address":3289972,"tmhm_learnset":"00453F82ADD34E34","types":[0,0]},{"abilities":[6,13],"base_stats":[50,52,48,55,65,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":33,"species":55}],"friendship":70,"id":54,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":346},{"level":1,"move_id":10},{"level":5,"move_id":39},{"level":10,"move_id":50},{"level":16,"move_id":93},{"level":23,"move_id":103},{"level":31,"move_id":244},{"level":40,"move_id":154},{"level":50,"move_id":56}],"rom_address":3301270},"rom_address":3290000,"tmhm_learnset":"03F01E80CC53326D","types":[11,11]},{"abilities":[6,13],"base_stats":[80,82,78,85,95,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":55,"learnset":{"moves":[{"level":1,"move_id":346},{"level":1,"move_id":10},{"level":1,"move_id":39},{"level":1,"move_id":50},{"level":5,"move_id":39},{"level":10,"move_id":50},{"level":16,"move_id":93},{"level":23,"move_id":103},{"level":31,"move_id":244},{"level":44,"move_id":154},{"level":58,"move_id":56}],"rom_address":3301294},"rom_address":3290028,"tmhm_learnset":"03F01E80CC53726D","types":[11,11]},{"abilities":[72,0],"base_stats":[40,80,35,70,35,45],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":28,"species":57}],"friendship":70,"id":56,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":43},{"level":9,"move_id":67},{"level":15,"move_id":2},{"level":21,"move_id":154},{"level":27,"move_id":116},{"level":33,"move_id":69},{"level":39,"move_id":238},{"level":45,"move_id":103},{"level":51,"move_id":37}],"rom_address":3301318},"rom_address":3290056,"tmhm_learnset":"00A23EC0CFD30EA1","types":[1,1]},{"abilities":[72,0],"base_stats":[65,105,60,95,60,70],"catch_rate":75,"evolutions":[],"friendship":70,"id":57,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":43},{"level":1,"move_id":67},{"level":1,"move_id":99},{"level":9,"move_id":67},{"level":15,"move_id":2},{"level":21,"move_id":154},{"level":27,"move_id":116},{"level":28,"move_id":99},{"level":36,"move_id":69},{"level":45,"move_id":238},{"level":54,"move_id":103},{"level":63,"move_id":37}],"rom_address":3301344},"rom_address":3290084,"tmhm_learnset":"00A23EC0CFD34EA1","types":[1,1]},{"abilities":[22,18],"base_stats":[55,70,45,60,70,50],"catch_rate":190,"evolutions":[{"method":"ITEM","param":95,"species":59}],"friendship":70,"id":58,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":44},{"level":1,"move_id":46},{"level":7,"move_id":52},{"level":13,"move_id":43},{"level":19,"move_id":316},{"level":25,"move_id":36},{"level":31,"move_id":172},{"level":37,"move_id":270},{"level":43,"move_id":97},{"level":49,"move_id":53}],"rom_address":3301372},"rom_address":3290112,"tmhm_learnset":"00A23EA48C510630","types":[10,10]},{"abilities":[22,18],"base_stats":[90,110,80,95,100,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":59,"learnset":{"moves":[{"level":1,"move_id":44},{"level":1,"move_id":46},{"level":1,"move_id":52},{"level":1,"move_id":316},{"level":49,"move_id":245}],"rom_address":3301398},"rom_address":3290140,"tmhm_learnset":"00A23EA48C514630","types":[10,10]},{"abilities":[11,6],"base_stats":[40,50,40,90,40,40],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":25,"species":61}],"friendship":70,"id":60,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":7,"move_id":95},{"level":13,"move_id":55},{"level":19,"move_id":3},{"level":25,"move_id":240},{"level":31,"move_id":34},{"level":37,"move_id":187},{"level":43,"move_id":56}],"rom_address":3301410},"rom_address":3290168,"tmhm_learnset":"03103E009C133264","types":[11,11]},{"abilities":[11,6],"base_stats":[65,65,65,90,50,50],"catch_rate":120,"evolutions":[{"method":"ITEM","param":97,"species":62},{"method":"ITEM","param":187,"species":186}],"friendship":70,"id":61,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":1,"move_id":95},{"level":1,"move_id":55},{"level":7,"move_id":95},{"level":13,"move_id":55},{"level":19,"move_id":3},{"level":27,"move_id":240},{"level":35,"move_id":34},{"level":43,"move_id":187},{"level":51,"move_id":56}],"rom_address":3301434},"rom_address":3290196,"tmhm_learnset":"03B03E00DE133265","types":[11,11]},{"abilities":[11,6],"base_stats":[90,85,95,70,70,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":62,"learnset":{"moves":[{"level":1,"move_id":55},{"level":1,"move_id":95},{"level":1,"move_id":3},{"level":1,"move_id":66},{"level":35,"move_id":66},{"level":51,"move_id":170}],"rom_address":3301458},"rom_address":3290224,"tmhm_learnset":"03B03E40DE1372E5","types":[11,1]},{"abilities":[28,39],"base_stats":[25,20,15,90,105,55],"catch_rate":200,"evolutions":[{"method":"LEVEL","param":16,"species":64}],"friendship":70,"id":63,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":93},{"level":1,"move_id":100}],"rom_address":3301472},"rom_address":3290252,"tmhm_learnset":"0041BF03B45B8E29","types":[14,14]},{"abilities":[28,39],"base_stats":[40,35,30,105,120,70],"catch_rate":100,"evolutions":[{"method":"LEVEL","param":37,"species":65}],"friendship":70,"id":64,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":100},{"level":1,"move_id":134},{"level":1,"move_id":93},{"level":16,"move_id":93},{"level":18,"move_id":50},{"level":21,"move_id":60},{"level":23,"move_id":115},{"level":25,"move_id":105},{"level":30,"move_id":248},{"level":33,"move_id":272},{"level":36,"move_id":94},{"level":43,"move_id":271}],"rom_address":3301482},"rom_address":3290280,"tmhm_learnset":"0041BF03B45B8E29","types":[14,14]},{"abilities":[28,39],"base_stats":[55,50,45,120,135,85],"catch_rate":50,"evolutions":[],"friendship":70,"id":65,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":100},{"level":1,"move_id":134},{"level":1,"move_id":93},{"level":16,"move_id":93},{"level":18,"move_id":50},{"level":21,"move_id":60},{"level":23,"move_id":115},{"level":25,"move_id":105},{"level":30,"move_id":248},{"level":33,"move_id":347},{"level":36,"move_id":94},{"level":43,"move_id":271}],"rom_address":3301510},"rom_address":3290308,"tmhm_learnset":"0041BF03B45BCE29","types":[14,14]},{"abilities":[62,0],"base_stats":[70,80,50,35,35,35],"catch_rate":180,"evolutions":[{"method":"LEVEL","param":28,"species":67}],"friendship":70,"id":66,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":67},{"level":1,"move_id":43},{"level":7,"move_id":116},{"level":13,"move_id":2},{"level":19,"move_id":69},{"level":22,"move_id":193},{"level":25,"move_id":279},{"level":31,"move_id":233},{"level":37,"move_id":66},{"level":40,"move_id":238},{"level":43,"move_id":184},{"level":49,"move_id":223}],"rom_address":3301538},"rom_address":3290336,"tmhm_learnset":"00A03E64CE1306A1","types":[1,1]},{"abilities":[62,0],"base_stats":[80,100,70,45,50,60],"catch_rate":90,"evolutions":[{"method":"LEVEL","param":37,"species":68}],"friendship":70,"id":67,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":67},{"level":1,"move_id":43},{"level":1,"move_id":116},{"level":7,"move_id":116},{"level":13,"move_id":2},{"level":19,"move_id":69},{"level":22,"move_id":193},{"level":25,"move_id":279},{"level":33,"move_id":233},{"level":41,"move_id":66},{"level":46,"move_id":238},{"level":51,"move_id":184},{"level":59,"move_id":223}],"rom_address":3301568},"rom_address":3290364,"tmhm_learnset":"00A03E64CE1306A1","types":[1,1]},{"abilities":[62,0],"base_stats":[90,130,80,55,65,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":68,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":67},{"level":1,"move_id":43},{"level":1,"move_id":116},{"level":7,"move_id":116},{"level":13,"move_id":2},{"level":19,"move_id":69},{"level":22,"move_id":193},{"level":25,"move_id":279},{"level":33,"move_id":233},{"level":41,"move_id":66},{"level":46,"move_id":238},{"level":51,"move_id":184},{"level":59,"move_id":223}],"rom_address":3301598},"rom_address":3290392,"tmhm_learnset":"00A03E64CE1346A1","types":[1,1]},{"abilities":[34,0],"base_stats":[50,75,35,40,70,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":21,"species":70}],"friendship":70,"id":69,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":22},{"level":6,"move_id":74},{"level":11,"move_id":35},{"level":15,"move_id":79},{"level":17,"move_id":77},{"level":19,"move_id":78},{"level":23,"move_id":51},{"level":30,"move_id":230},{"level":37,"move_id":75},{"level":45,"move_id":21}],"rom_address":3301628},"rom_address":3290420,"tmhm_learnset":"00443E0884350720","types":[12,3]},{"abilities":[34,0],"base_stats":[65,90,50,55,85,45],"catch_rate":120,"evolutions":[{"method":"ITEM","param":98,"species":71}],"friendship":70,"id":70,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":22},{"level":1,"move_id":74},{"level":1,"move_id":35},{"level":6,"move_id":74},{"level":11,"move_id":35},{"level":15,"move_id":79},{"level":17,"move_id":77},{"level":19,"move_id":78},{"level":24,"move_id":51},{"level":33,"move_id":230},{"level":42,"move_id":75},{"level":54,"move_id":21}],"rom_address":3301656},"rom_address":3290448,"tmhm_learnset":"00443E0884350720","types":[12,3]},{"abilities":[34,0],"base_stats":[80,105,65,70,100,60],"catch_rate":45,"evolutions":[],"friendship":70,"id":71,"learnset":{"moves":[{"level":1,"move_id":22},{"level":1,"move_id":79},{"level":1,"move_id":230},{"level":1,"move_id":75}],"rom_address":3301684},"rom_address":3290476,"tmhm_learnset":"00443E0884354720","types":[12,3]},{"abilities":[29,64],"base_stats":[40,40,35,70,50,100],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":30,"species":73}],"friendship":70,"id":72,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":40},{"level":6,"move_id":48},{"level":12,"move_id":132},{"level":19,"move_id":51},{"level":25,"move_id":61},{"level":30,"move_id":35},{"level":36,"move_id":112},{"level":43,"move_id":103},{"level":49,"move_id":56}],"rom_address":3301694},"rom_address":3290504,"tmhm_learnset":"03143E0884173264","types":[11,3]},{"abilities":[29,64],"base_stats":[80,70,65,100,80,120],"catch_rate":60,"evolutions":[],"friendship":70,"id":73,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":40},{"level":1,"move_id":48},{"level":1,"move_id":132},{"level":6,"move_id":48},{"level":12,"move_id":132},{"level":19,"move_id":51},{"level":25,"move_id":61},{"level":30,"move_id":35},{"level":38,"move_id":112},{"level":47,"move_id":103},{"level":55,"move_id":56}],"rom_address":3301720},"rom_address":3290532,"tmhm_learnset":"03143E0884177264","types":[11,3]},{"abilities":[69,5],"base_stats":[40,80,100,20,30,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":25,"species":75}],"friendship":70,"id":74,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":111},{"level":6,"move_id":300},{"level":11,"move_id":88},{"level":16,"move_id":222},{"level":21,"move_id":120},{"level":26,"move_id":205},{"level":31,"move_id":350},{"level":36,"move_id":89},{"level":41,"move_id":153},{"level":46,"move_id":38}],"rom_address":3301746},"rom_address":3290560,"tmhm_learnset":"00A01E74CE110621","types":[5,4]},{"abilities":[69,5],"base_stats":[55,95,115,35,45,45],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":37,"species":76}],"friendship":70,"id":75,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":111},{"level":1,"move_id":300},{"level":1,"move_id":88},{"level":6,"move_id":300},{"level":11,"move_id":88},{"level":16,"move_id":222},{"level":21,"move_id":120},{"level":29,"move_id":205},{"level":37,"move_id":350},{"level":45,"move_id":89},{"level":53,"move_id":153},{"level":62,"move_id":38}],"rom_address":3301774},"rom_address":3290588,"tmhm_learnset":"00A01E74CE110621","types":[5,4]},{"abilities":[69,5],"base_stats":[80,110,130,45,55,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":76,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":111},{"level":1,"move_id":300},{"level":1,"move_id":88},{"level":6,"move_id":300},{"level":11,"move_id":88},{"level":16,"move_id":222},{"level":21,"move_id":120},{"level":29,"move_id":205},{"level":37,"move_id":350},{"level":45,"move_id":89},{"level":53,"move_id":153},{"level":62,"move_id":38}],"rom_address":3301802},"rom_address":3290616,"tmhm_learnset":"00A01E74CE114631","types":[5,4]},{"abilities":[50,18],"base_stats":[50,85,55,90,65,65],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":40,"species":78}],"friendship":70,"id":77,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":5,"move_id":45},{"level":9,"move_id":39},{"level":14,"move_id":52},{"level":19,"move_id":23},{"level":25,"move_id":83},{"level":31,"move_id":36},{"level":38,"move_id":97},{"level":45,"move_id":340},{"level":53,"move_id":126}],"rom_address":3301830},"rom_address":3290644,"tmhm_learnset":"00221E2484710620","types":[10,10]},{"abilities":[50,18],"base_stats":[65,100,70,105,80,80],"catch_rate":60,"evolutions":[],"friendship":70,"id":78,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":39},{"level":1,"move_id":52},{"level":5,"move_id":45},{"level":9,"move_id":39},{"level":14,"move_id":52},{"level":19,"move_id":23},{"level":25,"move_id":83},{"level":31,"move_id":36},{"level":38,"move_id":97},{"level":40,"move_id":31},{"level":50,"move_id":340},{"level":63,"move_id":126}],"rom_address":3301858},"rom_address":3290672,"tmhm_learnset":"00221E2484714620","types":[10,10]},{"abilities":[12,20],"base_stats":[90,65,65,15,40,40],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":37,"species":80},{"method":"ITEM","param":187,"species":199}],"friendship":70,"id":79,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":174},{"level":1,"move_id":281},{"level":1,"move_id":33},{"level":6,"move_id":45},{"level":15,"move_id":55},{"level":20,"move_id":93},{"level":29,"move_id":50},{"level":34,"move_id":29},{"level":43,"move_id":133},{"level":48,"move_id":94}],"rom_address":3301888},"rom_address":3290700,"tmhm_learnset":"02709E24BE5B366C","types":[11,14]},{"abilities":[12,20],"base_stats":[95,75,110,30,100,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":80,"learnset":{"moves":[{"level":1,"move_id":174},{"level":1,"move_id":281},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":6,"move_id":45},{"level":15,"move_id":55},{"level":20,"move_id":93},{"level":29,"move_id":50},{"level":34,"move_id":29},{"level":37,"move_id":110},{"level":46,"move_id":133},{"level":54,"move_id":94}],"rom_address":3301912},"rom_address":3290728,"tmhm_learnset":"02F09E24FE5B766D","types":[11,14]},{"abilities":[42,5],"base_stats":[25,35,70,45,95,55],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":30,"species":82}],"friendship":70,"id":81,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":319},{"level":1,"move_id":33},{"level":6,"move_id":84},{"level":11,"move_id":48},{"level":16,"move_id":49},{"level":21,"move_id":86},{"level":26,"move_id":209},{"level":32,"move_id":199},{"level":38,"move_id":129},{"level":44,"move_id":103},{"level":50,"move_id":192}],"rom_address":3301938},"rom_address":3290756,"tmhm_learnset":"00400E0385930620","types":[13,8]},{"abilities":[42,5],"base_stats":[50,60,95,70,120,70],"catch_rate":60,"evolutions":[],"friendship":70,"id":82,"learnset":{"moves":[{"level":1,"move_id":319},{"level":1,"move_id":33},{"level":1,"move_id":84},{"level":1,"move_id":48},{"level":6,"move_id":84},{"level":11,"move_id":48},{"level":16,"move_id":49},{"level":21,"move_id":86},{"level":26,"move_id":209},{"level":35,"move_id":199},{"level":44,"move_id":161},{"level":53,"move_id":103},{"level":62,"move_id":192}],"rom_address":3301966},"rom_address":3290784,"tmhm_learnset":"00400E0385934620","types":[13,8]},{"abilities":[51,39],"base_stats":[52,65,55,60,58,62],"catch_rate":45,"evolutions":[],"friendship":70,"id":83,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":6,"move_id":28},{"level":11,"move_id":43},{"level":16,"move_id":31},{"level":21,"move_id":282},{"level":26,"move_id":210},{"level":31,"move_id":14},{"level":36,"move_id":97},{"level":41,"move_id":163},{"level":46,"move_id":206}],"rom_address":3301994},"rom_address":3290812,"tmhm_learnset":"000C7E8084510620","types":[0,2]},{"abilities":[50,48],"base_stats":[35,85,45,75,35,35],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":31,"species":85}],"friendship":70,"id":84,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":1,"move_id":45},{"level":9,"move_id":228},{"level":13,"move_id":31},{"level":21,"move_id":161},{"level":25,"move_id":99},{"level":33,"move_id":253},{"level":37,"move_id":65},{"level":45,"move_id":97}],"rom_address":3302022},"rom_address":3290840,"tmhm_learnset":"00087E8084110620","types":[0,2]},{"abilities":[50,48],"base_stats":[60,110,70,100,60,60],"catch_rate":45,"evolutions":[],"friendship":70,"id":85,"learnset":{"moves":[{"level":1,"move_id":64},{"level":1,"move_id":45},{"level":1,"move_id":228},{"level":1,"move_id":31},{"level":9,"move_id":228},{"level":13,"move_id":31},{"level":21,"move_id":161},{"level":25,"move_id":99},{"level":38,"move_id":253},{"level":47,"move_id":65},{"level":60,"move_id":97}],"rom_address":3302046},"rom_address":3290868,"tmhm_learnset":"00087F8084114E20","types":[0,2]},{"abilities":[47,0],"base_stats":[65,45,55,45,45,70],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":34,"species":87}],"friendship":70,"id":86,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":29},{"level":9,"move_id":45},{"level":17,"move_id":196},{"level":21,"move_id":62},{"level":29,"move_id":156},{"level":37,"move_id":36},{"level":41,"move_id":58},{"level":49,"move_id":219}],"rom_address":3302070},"rom_address":3290896,"tmhm_learnset":"03103E00841B3264","types":[11,11]},{"abilities":[47,0],"base_stats":[90,70,80,70,70,95],"catch_rate":75,"evolutions":[],"friendship":70,"id":87,"learnset":{"moves":[{"level":1,"move_id":29},{"level":1,"move_id":45},{"level":1,"move_id":196},{"level":1,"move_id":62},{"level":9,"move_id":45},{"level":17,"move_id":196},{"level":21,"move_id":62},{"level":29,"move_id":156},{"level":34,"move_id":329},{"level":42,"move_id":36},{"level":51,"move_id":58},{"level":64,"move_id":219}],"rom_address":3302094},"rom_address":3290924,"tmhm_learnset":"03103E00841B7264","types":[11,15]},{"abilities":[1,60],"base_stats":[80,80,50,25,40,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":38,"species":89}],"friendship":70,"id":88,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":139},{"level":1,"move_id":1},{"level":4,"move_id":106},{"level":8,"move_id":50},{"level":13,"move_id":124},{"level":19,"move_id":107},{"level":26,"move_id":103},{"level":34,"move_id":151},{"level":43,"move_id":188},{"level":53,"move_id":262}],"rom_address":3302120},"rom_address":3290952,"tmhm_learnset":"00003F6E8D970E20","types":[3,3]},{"abilities":[1,60],"base_stats":[105,105,75,50,65,100],"catch_rate":75,"evolutions":[],"friendship":70,"id":89,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":139},{"level":1,"move_id":1},{"level":1,"move_id":106},{"level":4,"move_id":106},{"level":8,"move_id":50},{"level":13,"move_id":124},{"level":19,"move_id":107},{"level":26,"move_id":103},{"level":34,"move_id":151},{"level":47,"move_id":188},{"level":61,"move_id":262}],"rom_address":3302146},"rom_address":3290980,"tmhm_learnset":"00A03F6ECD974E21","types":[3,3]},{"abilities":[75,0],"base_stats":[30,65,100,40,45,25],"catch_rate":190,"evolutions":[{"method":"ITEM","param":97,"species":91}],"friendship":70,"id":90,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":110},{"level":9,"move_id":48},{"level":17,"move_id":62},{"level":25,"move_id":182},{"level":33,"move_id":43},{"level":41,"move_id":128},{"level":49,"move_id":58}],"rom_address":3302172},"rom_address":3291008,"tmhm_learnset":"02101E0084133264","types":[11,11]},{"abilities":[75,0],"base_stats":[50,95,180,70,85,45],"catch_rate":60,"evolutions":[],"friendship":70,"id":91,"learnset":{"moves":[{"level":1,"move_id":110},{"level":1,"move_id":48},{"level":1,"move_id":62},{"level":1,"move_id":182},{"level":33,"move_id":191},{"level":41,"move_id":131}],"rom_address":3302194},"rom_address":3291036,"tmhm_learnset":"02101F0084137264","types":[11,15]},{"abilities":[26,0],"base_stats":[30,35,30,80,100,35],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":25,"species":93}],"friendship":70,"id":92,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":95},{"level":1,"move_id":122},{"level":8,"move_id":180},{"level":13,"move_id":212},{"level":16,"move_id":174},{"level":21,"move_id":101},{"level":28,"move_id":109},{"level":33,"move_id":138},{"level":36,"move_id":194}],"rom_address":3302208},"rom_address":3291064,"tmhm_learnset":"0001BF08B4970E20","types":[7,3]},{"abilities":[26,0],"base_stats":[45,50,45,95,115,55],"catch_rate":90,"evolutions":[{"method":"LEVEL","param":37,"species":94}],"friendship":70,"id":93,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":95},{"level":1,"move_id":122},{"level":1,"move_id":180},{"level":8,"move_id":180},{"level":13,"move_id":212},{"level":16,"move_id":174},{"level":21,"move_id":101},{"level":25,"move_id":325},{"level":31,"move_id":109},{"level":39,"move_id":138},{"level":48,"move_id":194}],"rom_address":3302232},"rom_address":3291092,"tmhm_learnset":"0001BF08B4970E20","types":[7,3]},{"abilities":[26,0],"base_stats":[60,65,60,110,130,75],"catch_rate":45,"evolutions":[],"friendship":70,"id":94,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":95},{"level":1,"move_id":122},{"level":1,"move_id":180},{"level":8,"move_id":180},{"level":13,"move_id":212},{"level":16,"move_id":174},{"level":21,"move_id":101},{"level":25,"move_id":325},{"level":31,"move_id":109},{"level":39,"move_id":138},{"level":48,"move_id":194}],"rom_address":3302258},"rom_address":3291120,"tmhm_learnset":"00A1BF08F5974E21","types":[7,3]},{"abilities":[69,5],"base_stats":[35,45,160,70,30,45],"catch_rate":45,"evolutions":[{"method":"ITEM","param":199,"species":208}],"friendship":70,"id":95,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":103},{"level":9,"move_id":20},{"level":13,"move_id":88},{"level":21,"move_id":106},{"level":25,"move_id":99},{"level":33,"move_id":201},{"level":37,"move_id":21},{"level":45,"move_id":231},{"level":49,"move_id":328},{"level":57,"move_id":38}],"rom_address":3302284},"rom_address":3291148,"tmhm_learnset":"00A01F508E510E30","types":[5,4]},{"abilities":[15,0],"base_stats":[60,48,45,42,43,90],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":26,"species":97}],"friendship":70,"id":96,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":1,"move_id":95},{"level":10,"move_id":50},{"level":18,"move_id":93},{"level":25,"move_id":29},{"level":31,"move_id":139},{"level":36,"move_id":96},{"level":40,"move_id":94},{"level":43,"move_id":244},{"level":45,"move_id":248}],"rom_address":3302312},"rom_address":3291176,"tmhm_learnset":"0041BF01F41B8E29","types":[14,14]},{"abilities":[15,0],"base_stats":[85,73,70,67,73,115],"catch_rate":75,"evolutions":[],"friendship":70,"id":97,"learnset":{"moves":[{"level":1,"move_id":1},{"level":1,"move_id":95},{"level":1,"move_id":50},{"level":1,"move_id":93},{"level":10,"move_id":50},{"level":18,"move_id":93},{"level":25,"move_id":29},{"level":33,"move_id":139},{"level":40,"move_id":96},{"level":49,"move_id":94},{"level":55,"move_id":244},{"level":60,"move_id":248}],"rom_address":3302338},"rom_address":3291204,"tmhm_learnset":"0041BF01F41BCE29","types":[14,14]},{"abilities":[52,75],"base_stats":[30,105,90,50,25,25],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":28,"species":99}],"friendship":70,"id":98,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":5,"move_id":43},{"level":12,"move_id":11},{"level":16,"move_id":106},{"level":23,"move_id":341},{"level":27,"move_id":23},{"level":34,"move_id":12},{"level":41,"move_id":182},{"level":45,"move_id":152}],"rom_address":3302364},"rom_address":3291232,"tmhm_learnset":"02B43E408C133264","types":[11,11]},{"abilities":[52,75],"base_stats":[55,130,115,75,50,50],"catch_rate":60,"evolutions":[],"friendship":70,"id":99,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":1,"move_id":43},{"level":1,"move_id":11},{"level":5,"move_id":43},{"level":12,"move_id":11},{"level":16,"move_id":106},{"level":23,"move_id":341},{"level":27,"move_id":23},{"level":38,"move_id":12},{"level":49,"move_id":182},{"level":57,"move_id":152}],"rom_address":3302390},"rom_address":3291260,"tmhm_learnset":"02B43E408C137264","types":[11,11]},{"abilities":[43,9],"base_stats":[40,30,50,100,55,55],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":30,"species":101}],"friendship":70,"id":100,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":268},{"level":1,"move_id":33},{"level":8,"move_id":103},{"level":15,"move_id":49},{"level":21,"move_id":209},{"level":27,"move_id":120},{"level":32,"move_id":205},{"level":37,"move_id":113},{"level":42,"move_id":129},{"level":46,"move_id":153},{"level":49,"move_id":243}],"rom_address":3302416},"rom_address":3291288,"tmhm_learnset":"00402F0285938A20","types":[13,13]},{"abilities":[43,9],"base_stats":[60,50,70,140,80,80],"catch_rate":60,"evolutions":[],"friendship":70,"id":101,"learnset":{"moves":[{"level":1,"move_id":268},{"level":1,"move_id":33},{"level":1,"move_id":103},{"level":1,"move_id":49},{"level":8,"move_id":103},{"level":15,"move_id":49},{"level":21,"move_id":209},{"level":27,"move_id":120},{"level":34,"move_id":205},{"level":41,"move_id":113},{"level":48,"move_id":129},{"level":54,"move_id":153},{"level":59,"move_id":243}],"rom_address":3302444},"rom_address":3291316,"tmhm_learnset":"00402F028593CA20","types":[13,13]},{"abilities":[34,0],"base_stats":[60,40,80,40,60,45],"catch_rate":90,"evolutions":[{"method":"ITEM","param":98,"species":103}],"friendship":70,"id":102,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":140},{"level":1,"move_id":253},{"level":1,"move_id":95},{"level":7,"move_id":115},{"level":13,"move_id":73},{"level":19,"move_id":93},{"level":25,"move_id":78},{"level":31,"move_id":77},{"level":37,"move_id":79},{"level":43,"move_id":76}],"rom_address":3302472},"rom_address":3291344,"tmhm_learnset":"0060BE0994358720","types":[12,14]},{"abilities":[34,0],"base_stats":[95,95,85,55,125,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":103,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":140},{"level":1,"move_id":95},{"level":1,"move_id":93},{"level":19,"move_id":23},{"level":31,"move_id":121}],"rom_address":3302496},"rom_address":3291372,"tmhm_learnset":"0060BE099435C720","types":[12,14]},{"abilities":[69,31],"base_stats":[50,50,95,35,40,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":28,"species":105}],"friendship":70,"id":104,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":125},{"level":1,"move_id":45},{"level":5,"move_id":39},{"level":9,"move_id":125},{"level":13,"move_id":29},{"level":17,"move_id":43},{"level":21,"move_id":116},{"level":25,"move_id":155},{"level":29,"move_id":99},{"level":33,"move_id":206},{"level":37,"move_id":37},{"level":41,"move_id":198},{"level":45,"move_id":38}],"rom_address":3302510},"rom_address":3291400,"tmhm_learnset":"00A03EF4CE513621","types":[4,4]},{"abilities":[69,31],"base_stats":[60,80,110,45,50,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":105,"learnset":{"moves":[{"level":1,"move_id":45},{"level":1,"move_id":39},{"level":1,"move_id":125},{"level":1,"move_id":29},{"level":5,"move_id":39},{"level":9,"move_id":125},{"level":13,"move_id":29},{"level":17,"move_id":43},{"level":21,"move_id":116},{"level":25,"move_id":155},{"level":32,"move_id":99},{"level":39,"move_id":206},{"level":46,"move_id":37},{"level":53,"move_id":198},{"level":61,"move_id":38}],"rom_address":3302542},"rom_address":3291428,"tmhm_learnset":"00A03EF4CE517621","types":[4,4]},{"abilities":[7,0],"base_stats":[50,120,53,87,35,110],"catch_rate":45,"evolutions":[],"friendship":70,"id":106,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":279},{"level":1,"move_id":24},{"level":6,"move_id":96},{"level":11,"move_id":27},{"level":16,"move_id":26},{"level":20,"move_id":280},{"level":21,"move_id":116},{"level":26,"move_id":136},{"level":31,"move_id":170},{"level":36,"move_id":193},{"level":41,"move_id":203},{"level":46,"move_id":25},{"level":51,"move_id":179}],"rom_address":3302574},"rom_address":3291456,"tmhm_learnset":"00A03E40C61306A1","types":[1,1]},{"abilities":[51,0],"base_stats":[50,105,79,76,35,110],"catch_rate":45,"evolutions":[],"friendship":70,"id":107,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":279},{"level":1,"move_id":4},{"level":7,"move_id":97},{"level":13,"move_id":228},{"level":20,"move_id":183},{"level":26,"move_id":9},{"level":26,"move_id":8},{"level":26,"move_id":7},{"level":32,"move_id":327},{"level":38,"move_id":5},{"level":44,"move_id":197},{"level":50,"move_id":68}],"rom_address":3302606},"rom_address":3291484,"tmhm_learnset":"00A03E40C61306A1","types":[1,1]},{"abilities":[20,12],"base_stats":[90,55,75,30,60,75],"catch_rate":45,"evolutions":[],"friendship":70,"id":108,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":122},{"level":7,"move_id":48},{"level":12,"move_id":111},{"level":18,"move_id":282},{"level":23,"move_id":23},{"level":29,"move_id":35},{"level":34,"move_id":50},{"level":40,"move_id":21},{"level":45,"move_id":103},{"level":51,"move_id":287}],"rom_address":3302636},"rom_address":3291512,"tmhm_learnset":"00B43E76EFF37625","types":[0,0]},{"abilities":[26,0],"base_stats":[40,65,95,35,60,45],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":35,"species":110}],"friendship":70,"id":109,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":139},{"level":1,"move_id":33},{"level":9,"move_id":123},{"level":17,"move_id":120},{"level":21,"move_id":124},{"level":25,"move_id":108},{"level":33,"move_id":114},{"level":41,"move_id":153},{"level":45,"move_id":194},{"level":49,"move_id":262}],"rom_address":3302664},"rom_address":3291540,"tmhm_learnset":"00403F2EA5930E20","types":[3,3]},{"abilities":[26,0],"base_stats":[65,90,120,60,85,70],"catch_rate":60,"evolutions":[],"friendship":70,"id":110,"learnset":{"moves":[{"level":1,"move_id":139},{"level":1,"move_id":33},{"level":1,"move_id":123},{"level":1,"move_id":120},{"level":9,"move_id":123},{"level":17,"move_id":120},{"level":21,"move_id":124},{"level":25,"move_id":108},{"level":33,"move_id":114},{"level":44,"move_id":153},{"level":51,"move_id":194},{"level":58,"move_id":262}],"rom_address":3302690},"rom_address":3291568,"tmhm_learnset":"00403F2EA5934E20","types":[3,3]},{"abilities":[31,69],"base_stats":[80,85,95,25,30,30],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":42,"species":112}],"friendship":70,"id":111,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":30},{"level":1,"move_id":39},{"level":10,"move_id":23},{"level":15,"move_id":31},{"level":24,"move_id":184},{"level":29,"move_id":350},{"level":38,"move_id":32},{"level":43,"move_id":36},{"level":52,"move_id":89},{"level":57,"move_id":224}],"rom_address":3302716},"rom_address":3291596,"tmhm_learnset":"00A03E768FD33630","types":[4,5]},{"abilities":[31,69],"base_stats":[105,130,120,40,45,45],"catch_rate":60,"evolutions":[],"friendship":70,"id":112,"learnset":{"moves":[{"level":1,"move_id":30},{"level":1,"move_id":39},{"level":1,"move_id":23},{"level":1,"move_id":31},{"level":10,"move_id":23},{"level":15,"move_id":31},{"level":24,"move_id":184},{"level":29,"move_id":350},{"level":38,"move_id":32},{"level":46,"move_id":36},{"level":58,"move_id":89},{"level":66,"move_id":224}],"rom_address":3302742},"rom_address":3291624,"tmhm_learnset":"00B43E76CFD37631","types":[4,5]},{"abilities":[30,32],"base_stats":[250,5,5,50,35,105],"catch_rate":30,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":242}],"friendship":140,"id":113,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":1,"move_id":45},{"level":5,"move_id":39},{"level":9,"move_id":287},{"level":13,"move_id":135},{"level":17,"move_id":3},{"level":23,"move_id":107},{"level":29,"move_id":47},{"level":35,"move_id":121},{"level":41,"move_id":111},{"level":49,"move_id":113},{"level":57,"move_id":38}],"rom_address":3302768},"rom_address":3291652,"tmhm_learnset":"00E19E76F7FBF66D","types":[0,0]},{"abilities":[34,0],"base_stats":[65,55,115,60,100,40],"catch_rate":45,"evolutions":[],"friendship":70,"id":114,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":275},{"level":1,"move_id":132},{"level":4,"move_id":79},{"level":10,"move_id":71},{"level":13,"move_id":74},{"level":19,"move_id":77},{"level":22,"move_id":22},{"level":28,"move_id":20},{"level":31,"move_id":72},{"level":37,"move_id":78},{"level":40,"move_id":21},{"level":46,"move_id":321}],"rom_address":3302798},"rom_address":3291680,"tmhm_learnset":"00C43E0884354720","types":[12,12]},{"abilities":[48,0],"base_stats":[105,95,80,90,40,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":115,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":4},{"level":1,"move_id":43},{"level":7,"move_id":44},{"level":13,"move_id":39},{"level":19,"move_id":252},{"level":25,"move_id":5},{"level":31,"move_id":99},{"level":37,"move_id":203},{"level":43,"move_id":146},{"level":49,"move_id":179}],"rom_address":3302828},"rom_address":3291708,"tmhm_learnset":"00B43EF6EFF37675","types":[0,0]},{"abilities":[33,0],"base_stats":[30,40,70,60,70,25],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":32,"species":117}],"friendship":70,"id":116,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":8,"move_id":108},{"level":15,"move_id":43},{"level":22,"move_id":55},{"level":29,"move_id":239},{"level":36,"move_id":97},{"level":43,"move_id":56},{"level":50,"move_id":349}],"rom_address":3302854},"rom_address":3291736,"tmhm_learnset":"03101E0084133264","types":[11,11]},{"abilities":[38,0],"base_stats":[55,65,95,85,95,45],"catch_rate":75,"evolutions":[{"method":"ITEM","param":201,"species":230}],"friendship":70,"id":117,"learnset":{"moves":[{"level":1,"move_id":145},{"level":1,"move_id":108},{"level":1,"move_id":43},{"level":1,"move_id":55},{"level":8,"move_id":108},{"level":15,"move_id":43},{"level":22,"move_id":55},{"level":29,"move_id":239},{"level":40,"move_id":97},{"level":51,"move_id":56},{"level":62,"move_id":349}],"rom_address":3302878},"rom_address":3291764,"tmhm_learnset":"03101E0084137264","types":[11,11]},{"abilities":[33,41],"base_stats":[45,67,60,63,35,50],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":33,"species":119}],"friendship":70,"id":118,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":1,"move_id":39},{"level":1,"move_id":346},{"level":10,"move_id":48},{"level":15,"move_id":30},{"level":24,"move_id":175},{"level":29,"move_id":31},{"level":38,"move_id":127},{"level":43,"move_id":32},{"level":52,"move_id":97}],"rom_address":3302902},"rom_address":3291792,"tmhm_learnset":"03101E0084133264","types":[11,11]},{"abilities":[33,41],"base_stats":[80,92,65,68,65,80],"catch_rate":60,"evolutions":[],"friendship":70,"id":119,"learnset":{"moves":[{"level":1,"move_id":64},{"level":1,"move_id":39},{"level":1,"move_id":346},{"level":1,"move_id":48},{"level":10,"move_id":48},{"level":15,"move_id":30},{"level":24,"move_id":175},{"level":29,"move_id":31},{"level":41,"move_id":127},{"level":49,"move_id":32},{"level":61,"move_id":97}],"rom_address":3302926},"rom_address":3291820,"tmhm_learnset":"03101E0084137264","types":[11,11]},{"abilities":[35,30],"base_stats":[30,45,55,85,70,55],"catch_rate":225,"evolutions":[{"method":"ITEM","param":97,"species":121}],"friendship":70,"id":120,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":6,"move_id":55},{"level":10,"move_id":229},{"level":15,"move_id":105},{"level":19,"move_id":293},{"level":24,"move_id":129},{"level":28,"move_id":61},{"level":33,"move_id":107},{"level":37,"move_id":113},{"level":42,"move_id":322},{"level":46,"move_id":56}],"rom_address":3302950},"rom_address":3291848,"tmhm_learnset":"03500E019593B264","types":[11,11]},{"abilities":[35,30],"base_stats":[60,75,85,115,100,85],"catch_rate":60,"evolutions":[],"friendship":70,"id":121,"learnset":{"moves":[{"level":1,"move_id":55},{"level":1,"move_id":229},{"level":1,"move_id":105},{"level":1,"move_id":129},{"level":33,"move_id":109}],"rom_address":3302980},"rom_address":3291876,"tmhm_learnset":"03508E019593F264","types":[11,14]},{"abilities":[43,0],"base_stats":[40,45,65,90,100,120],"catch_rate":45,"evolutions":[],"friendship":70,"id":122,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":112},{"level":5,"move_id":93},{"level":9,"move_id":164},{"level":13,"move_id":96},{"level":17,"move_id":3},{"level":21,"move_id":113},{"level":21,"move_id":115},{"level":25,"move_id":227},{"level":29,"move_id":60},{"level":33,"move_id":278},{"level":37,"move_id":271},{"level":41,"move_id":272},{"level":45,"move_id":94},{"level":49,"move_id":226},{"level":53,"move_id":219}],"rom_address":3302992},"rom_address":3291904,"tmhm_learnset":"0041BF03F5BBCE29","types":[14,14]},{"abilities":[68,0],"base_stats":[70,110,80,105,55,80],"catch_rate":45,"evolutions":[{"method":"ITEM","param":199,"species":212}],"friendship":70,"id":123,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":98},{"level":1,"move_id":43},{"level":6,"move_id":116},{"level":11,"move_id":228},{"level":16,"move_id":206},{"level":21,"move_id":97},{"level":26,"move_id":17},{"level":31,"move_id":163},{"level":36,"move_id":14},{"level":41,"move_id":104},{"level":46,"move_id":210}],"rom_address":3303030},"rom_address":3291932,"tmhm_learnset":"00847E8084134620","types":[6,2]},{"abilities":[12,0],"base_stats":[65,50,35,95,115,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":124,"learnset":{"moves":[{"level":1,"move_id":1},{"level":1,"move_id":122},{"level":1,"move_id":142},{"level":1,"move_id":181},{"level":9,"move_id":142},{"level":13,"move_id":181},{"level":21,"move_id":3},{"level":25,"move_id":8},{"level":35,"move_id":212},{"level":41,"move_id":313},{"level":51,"move_id":34},{"level":57,"move_id":195},{"level":67,"move_id":59}],"rom_address":3303058},"rom_address":3291960,"tmhm_learnset":"0040BF01F413FA6D","types":[15,14]},{"abilities":[9,0],"base_stats":[65,83,57,105,95,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":125,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":98},{"level":1,"move_id":43},{"level":1,"move_id":9},{"level":9,"move_id":9},{"level":17,"move_id":113},{"level":25,"move_id":129},{"level":36,"move_id":103},{"level":47,"move_id":85},{"level":58,"move_id":87}],"rom_address":3303086},"rom_address":3291988,"tmhm_learnset":"00E03E02D5D3C221","types":[13,13]},{"abilities":[49,0],"base_stats":[65,95,57,93,100,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":126,"learnset":{"moves":[{"level":1,"move_id":52},{"level":1,"move_id":43},{"level":1,"move_id":123},{"level":1,"move_id":7},{"level":7,"move_id":43},{"level":13,"move_id":123},{"level":19,"move_id":7},{"level":25,"move_id":108},{"level":33,"move_id":241},{"level":41,"move_id":53},{"level":49,"move_id":109},{"level":57,"move_id":126}],"rom_address":3303108},"rom_address":3292016,"tmhm_learnset":"00A03E24D4514621","types":[10,10]},{"abilities":[52,0],"base_stats":[65,125,100,85,55,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":127,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":11},{"level":1,"move_id":116},{"level":7,"move_id":20},{"level":13,"move_id":69},{"level":19,"move_id":106},{"level":25,"move_id":279},{"level":31,"move_id":280},{"level":37,"move_id":12},{"level":43,"move_id":66},{"level":49,"move_id":14}],"rom_address":3303134},"rom_address":3292044,"tmhm_learnset":"00A43E40CE1346A1","types":[6,6]},{"abilities":[22,0],"base_stats":[75,100,95,110,40,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":128,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":4,"move_id":39},{"level":8,"move_id":99},{"level":13,"move_id":30},{"level":19,"move_id":184},{"level":26,"move_id":228},{"level":34,"move_id":156},{"level":43,"move_id":37},{"level":53,"move_id":36}],"rom_address":3303160},"rom_address":3292072,"tmhm_learnset":"00B01E7687F37624","types":[0,0]},{"abilities":[33,0],"base_stats":[20,10,55,80,15,20],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":130}],"friendship":70,"id":129,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":150},{"level":15,"move_id":33},{"level":30,"move_id":175}],"rom_address":3303186},"rom_address":3292100,"tmhm_learnset":"0000000000000000","types":[11,11]},{"abilities":[22,0],"base_stats":[95,125,79,81,60,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":130,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":37},{"level":20,"move_id":44},{"level":25,"move_id":82},{"level":30,"move_id":43},{"level":35,"move_id":239},{"level":40,"move_id":56},{"level":45,"move_id":240},{"level":50,"move_id":349},{"level":55,"move_id":63}],"rom_address":3303200},"rom_address":3292128,"tmhm_learnset":"03B01F3487937A74","types":[11,2]},{"abilities":[11,75],"base_stats":[130,85,80,60,85,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":131,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":55},{"level":1,"move_id":45},{"level":1,"move_id":47},{"level":7,"move_id":54},{"level":13,"move_id":34},{"level":19,"move_id":109},{"level":25,"move_id":195},{"level":31,"move_id":58},{"level":37,"move_id":240},{"level":43,"move_id":219},{"level":49,"move_id":56},{"level":55,"move_id":329}],"rom_address":3303226},"rom_address":3292156,"tmhm_learnset":"03B01E0295DB7274","types":[11,15]},{"abilities":[7,0],"base_stats":[48,48,48,48,48,48],"catch_rate":35,"evolutions":[],"friendship":70,"id":132,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":144}],"rom_address":3303254},"rom_address":3292184,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[50,0],"base_stats":[55,55,50,55,45,65],"catch_rate":45,"evolutions":[{"method":"ITEM","param":96,"species":135},{"method":"ITEM","param":97,"species":134},{"method":"ITEM","param":95,"species":136},{"method":"FRIENDSHIP_DAY","param":0,"species":196},{"method":"FRIENDSHIP_NIGHT","param":0,"species":197}],"friendship":70,"id":133,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":1,"move_id":270},{"level":8,"move_id":28},{"level":16,"move_id":45},{"level":23,"move_id":98},{"level":30,"move_id":44},{"level":36,"move_id":226},{"level":42,"move_id":36}],"rom_address":3303264},"rom_address":3292212,"tmhm_learnset":"00001E00AC530620","types":[0,0]},{"abilities":[11,0],"base_stats":[130,65,60,65,110,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":134,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":1,"move_id":270},{"level":8,"move_id":28},{"level":16,"move_id":55},{"level":23,"move_id":98},{"level":30,"move_id":44},{"level":36,"move_id":62},{"level":42,"move_id":114},{"level":47,"move_id":151},{"level":52,"move_id":56}],"rom_address":3303286},"rom_address":3292240,"tmhm_learnset":"03101E00AC537674","types":[11,11]},{"abilities":[10,0],"base_stats":[65,65,60,130,110,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":135,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":1,"move_id":270},{"level":8,"move_id":28},{"level":16,"move_id":84},{"level":23,"move_id":98},{"level":30,"move_id":24},{"level":36,"move_id":42},{"level":42,"move_id":86},{"level":47,"move_id":97},{"level":52,"move_id":87}],"rom_address":3303312},"rom_address":3292268,"tmhm_learnset":"00401E02ADD34630","types":[13,13]},{"abilities":[18,0],"base_stats":[65,130,60,65,95,110],"catch_rate":45,"evolutions":[],"friendship":70,"id":136,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":1,"move_id":270},{"level":8,"move_id":28},{"level":16,"move_id":52},{"level":23,"move_id":98},{"level":30,"move_id":44},{"level":36,"move_id":83},{"level":42,"move_id":123},{"level":47,"move_id":43},{"level":52,"move_id":53}],"rom_address":3303338},"rom_address":3292296,"tmhm_learnset":"00021E24AC534630","types":[10,10]},{"abilities":[36,0],"base_stats":[65,60,70,40,85,75],"catch_rate":45,"evolutions":[{"method":"ITEM","param":218,"species":233}],"friendship":70,"id":137,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":176},{"level":1,"move_id":33},{"level":1,"move_id":160},{"level":9,"move_id":97},{"level":12,"move_id":60},{"level":20,"move_id":105},{"level":24,"move_id":159},{"level":32,"move_id":199},{"level":36,"move_id":161},{"level":44,"move_id":278},{"level":48,"move_id":192}],"rom_address":3303364},"rom_address":3292324,"tmhm_learnset":"00402E82B5F37620","types":[0,0]},{"abilities":[33,75],"base_stats":[35,40,100,35,90,55],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":40,"species":139}],"friendship":70,"id":138,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":132},{"level":1,"move_id":110},{"level":13,"move_id":44},{"level":19,"move_id":55},{"level":25,"move_id":341},{"level":31,"move_id":43},{"level":37,"move_id":182},{"level":43,"move_id":321},{"level":49,"move_id":246},{"level":55,"move_id":56}],"rom_address":3303390},"rom_address":3292352,"tmhm_learnset":"03903E5084133264","types":[5,11]},{"abilities":[33,75],"base_stats":[70,60,125,55,115,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":139,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":132},{"level":1,"move_id":110},{"level":1,"move_id":44},{"level":13,"move_id":44},{"level":19,"move_id":55},{"level":25,"move_id":341},{"level":31,"move_id":43},{"level":37,"move_id":182},{"level":40,"move_id":131},{"level":46,"move_id":321},{"level":55,"move_id":246},{"level":65,"move_id":56}],"rom_address":3303416},"rom_address":3292380,"tmhm_learnset":"03903E5084137264","types":[5,11]},{"abilities":[33,4],"base_stats":[30,80,90,55,55,45],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":40,"species":141}],"friendship":70,"id":140,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":106},{"level":13,"move_id":71},{"level":19,"move_id":43},{"level":25,"move_id":341},{"level":31,"move_id":28},{"level":37,"move_id":203},{"level":43,"move_id":319},{"level":49,"move_id":72},{"level":55,"move_id":246}],"rom_address":3303444},"rom_address":3292408,"tmhm_learnset":"01903ED08C173264","types":[5,11]},{"abilities":[33,4],"base_stats":[60,115,105,80,65,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":141,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":106},{"level":1,"move_id":71},{"level":13,"move_id":71},{"level":19,"move_id":43},{"level":25,"move_id":341},{"level":31,"move_id":28},{"level":37,"move_id":203},{"level":40,"move_id":163},{"level":46,"move_id":319},{"level":55,"move_id":72},{"level":65,"move_id":246}],"rom_address":3303470},"rom_address":3292436,"tmhm_learnset":"03943ED0CC177264","types":[5,11]},{"abilities":[69,46],"base_stats":[80,105,65,130,60,75],"catch_rate":45,"evolutions":[],"friendship":70,"id":142,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":17},{"level":8,"move_id":97},{"level":15,"move_id":44},{"level":22,"move_id":48},{"level":29,"move_id":246},{"level":36,"move_id":184},{"level":43,"move_id":36},{"level":50,"move_id":63}],"rom_address":3303498},"rom_address":3292464,"tmhm_learnset":"00A87FF486534E32","types":[5,2]},{"abilities":[17,47],"base_stats":[160,110,65,30,65,110],"catch_rate":25,"evolutions":[],"friendship":70,"id":143,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":6,"move_id":133},{"level":10,"move_id":111},{"level":15,"move_id":187},{"level":19,"move_id":29},{"level":24,"move_id":281},{"level":28,"move_id":156},{"level":28,"move_id":173},{"level":33,"move_id":34},{"level":37,"move_id":335},{"level":42,"move_id":343},{"level":46,"move_id":205},{"level":51,"move_id":63}],"rom_address":3303522},"rom_address":3292492,"tmhm_learnset":"00301E76F7B37625","types":[0,0]},{"abilities":[46,0],"base_stats":[90,85,100,85,95,125],"catch_rate":3,"evolutions":[],"friendship":35,"id":144,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":16},{"level":1,"move_id":181},{"level":13,"move_id":54},{"level":25,"move_id":97},{"level":37,"move_id":170},{"level":49,"move_id":58},{"level":61,"move_id":115},{"level":73,"move_id":59},{"level":85,"move_id":329}],"rom_address":3303556},"rom_address":3292520,"tmhm_learnset":"00884E9184137674","types":[15,2]},{"abilities":[46,0],"base_stats":[90,90,85,100,125,90],"catch_rate":3,"evolutions":[],"friendship":35,"id":145,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":1,"move_id":84},{"level":13,"move_id":86},{"level":25,"move_id":97},{"level":37,"move_id":197},{"level":49,"move_id":65},{"level":61,"move_id":268},{"level":73,"move_id":113},{"level":85,"move_id":87}],"rom_address":3303580},"rom_address":3292548,"tmhm_learnset":"00C84E928593C630","types":[13,2]},{"abilities":[46,0],"base_stats":[90,100,90,90,125,85],"catch_rate":3,"evolutions":[],"friendship":35,"id":146,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":17},{"level":1,"move_id":52},{"level":13,"move_id":83},{"level":25,"move_id":97},{"level":37,"move_id":203},{"level":49,"move_id":53},{"level":61,"move_id":219},{"level":73,"move_id":257},{"level":85,"move_id":143}],"rom_address":3303604},"rom_address":3292576,"tmhm_learnset":"008A4EB4841B4630","types":[10,2]},{"abilities":[61,0],"base_stats":[41,64,45,50,50,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":148}],"friendship":35,"id":147,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":35},{"level":1,"move_id":43},{"level":8,"move_id":86},{"level":15,"move_id":239},{"level":22,"move_id":82},{"level":29,"move_id":21},{"level":36,"move_id":97},{"level":43,"move_id":219},{"level":50,"move_id":200},{"level":57,"move_id":63}],"rom_address":3303628},"rom_address":3292604,"tmhm_learnset":"01101E2685DB7664","types":[16,16]},{"abilities":[61,0],"base_stats":[61,84,65,70,70,70],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":55,"species":149}],"friendship":35,"id":148,"learnset":{"moves":[{"level":1,"move_id":35},{"level":1,"move_id":43},{"level":1,"move_id":86},{"level":1,"move_id":239},{"level":8,"move_id":86},{"level":15,"move_id":239},{"level":22,"move_id":82},{"level":29,"move_id":21},{"level":38,"move_id":97},{"level":47,"move_id":219},{"level":56,"move_id":200},{"level":65,"move_id":63}],"rom_address":3303654},"rom_address":3292632,"tmhm_learnset":"01101E2685DB7664","types":[16,16]},{"abilities":[39,0],"base_stats":[91,134,95,80,100,100],"catch_rate":45,"evolutions":[],"friendship":35,"id":149,"learnset":{"moves":[{"level":1,"move_id":35},{"level":1,"move_id":43},{"level":1,"move_id":86},{"level":1,"move_id":239},{"level":8,"move_id":86},{"level":15,"move_id":239},{"level":22,"move_id":82},{"level":29,"move_id":21},{"level":38,"move_id":97},{"level":47,"move_id":219},{"level":55,"move_id":17},{"level":61,"move_id":200},{"level":75,"move_id":63}],"rom_address":3303680},"rom_address":3292660,"tmhm_learnset":"03BC5EF6C7DB7677","types":[16,2]},{"abilities":[46,0],"base_stats":[106,110,90,130,154,90],"catch_rate":3,"evolutions":[],"friendship":0,"id":150,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":93},{"level":1,"move_id":50},{"level":11,"move_id":112},{"level":22,"move_id":129},{"level":33,"move_id":244},{"level":44,"move_id":248},{"level":55,"move_id":54},{"level":66,"move_id":94},{"level":77,"move_id":133},{"level":88,"move_id":105},{"level":99,"move_id":219}],"rom_address":3303708},"rom_address":3292688,"tmhm_learnset":"00E18FF7F7FBFEED","types":[14,14]},{"abilities":[28,0],"base_stats":[100,100,100,100,100,100],"catch_rate":45,"evolutions":[],"friendship":100,"id":151,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":10,"move_id":144},{"level":20,"move_id":5},{"level":30,"move_id":118},{"level":40,"move_id":94},{"level":50,"move_id":246}],"rom_address":3303736},"rom_address":3292716,"tmhm_learnset":"03FFFFFFFFFFFFFF","types":[14,14]},{"abilities":[65,0],"base_stats":[45,49,65,45,49,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":153}],"friendship":70,"id":152,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":8,"move_id":75},{"level":12,"move_id":115},{"level":15,"move_id":77},{"level":22,"move_id":235},{"level":29,"move_id":34},{"level":36,"move_id":113},{"level":43,"move_id":219},{"level":50,"move_id":76}],"rom_address":3303756},"rom_address":3292744,"tmhm_learnset":"00441E01847D8720","types":[12,12]},{"abilities":[65,0],"base_stats":[60,62,80,60,63,80],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":32,"species":154}],"friendship":70,"id":153,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":75},{"level":1,"move_id":115},{"level":8,"move_id":75},{"level":12,"move_id":115},{"level":15,"move_id":77},{"level":23,"move_id":235},{"level":31,"move_id":34},{"level":39,"move_id":113},{"level":47,"move_id":219},{"level":55,"move_id":76}],"rom_address":3303782},"rom_address":3292772,"tmhm_learnset":"00E41E01847D8720","types":[12,12]},{"abilities":[65,0],"base_stats":[80,82,100,80,83,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":154,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":75},{"level":1,"move_id":115},{"level":8,"move_id":75},{"level":12,"move_id":115},{"level":15,"move_id":77},{"level":23,"move_id":235},{"level":31,"move_id":34},{"level":41,"move_id":113},{"level":51,"move_id":219},{"level":61,"move_id":76}],"rom_address":3303808},"rom_address":3292800,"tmhm_learnset":"00E41E01867DC720","types":[12,12]},{"abilities":[66,0],"base_stats":[39,52,43,65,60,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":14,"species":156}],"friendship":70,"id":155,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":43},{"level":6,"move_id":108},{"level":12,"move_id":52},{"level":19,"move_id":98},{"level":27,"move_id":172},{"level":36,"move_id":129},{"level":46,"move_id":53}],"rom_address":3303834},"rom_address":3292828,"tmhm_learnset":"00061EA48C110620","types":[10,10]},{"abilities":[66,0],"base_stats":[58,64,58,80,80,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":157}],"friendship":70,"id":156,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":43},{"level":1,"move_id":108},{"level":6,"move_id":108},{"level":12,"move_id":52},{"level":21,"move_id":98},{"level":31,"move_id":172},{"level":42,"move_id":129},{"level":54,"move_id":53}],"rom_address":3303856},"rom_address":3292856,"tmhm_learnset":"00A61EA4CC110631","types":[10,10]},{"abilities":[66,0],"base_stats":[78,84,78,100,109,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":157,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":43},{"level":1,"move_id":108},{"level":1,"move_id":52},{"level":6,"move_id":108},{"level":12,"move_id":52},{"level":21,"move_id":98},{"level":31,"move_id":172},{"level":45,"move_id":129},{"level":60,"move_id":53}],"rom_address":3303878},"rom_address":3292884,"tmhm_learnset":"00A61EA4CE114631","types":[10,10]},{"abilities":[67,0],"base_stats":[50,65,64,43,44,48],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":18,"species":159}],"friendship":70,"id":158,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":43},{"level":7,"move_id":99},{"level":13,"move_id":55},{"level":20,"move_id":44},{"level":27,"move_id":184},{"level":35,"move_id":163},{"level":43,"move_id":103},{"level":52,"move_id":56}],"rom_address":3303900},"rom_address":3292912,"tmhm_learnset":"03141E80CC533265","types":[11,11]},{"abilities":[67,0],"base_stats":[65,80,80,58,59,63],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":160}],"friendship":70,"id":159,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":43},{"level":1,"move_id":99},{"level":7,"move_id":99},{"level":13,"move_id":55},{"level":21,"move_id":44},{"level":28,"move_id":184},{"level":37,"move_id":163},{"level":45,"move_id":103},{"level":55,"move_id":56}],"rom_address":3303924},"rom_address":3292940,"tmhm_learnset":"03B41E80CC533275","types":[11,11]},{"abilities":[67,0],"base_stats":[85,105,100,78,79,83],"catch_rate":45,"evolutions":[],"friendship":70,"id":160,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":43},{"level":1,"move_id":99},{"level":1,"move_id":55},{"level":7,"move_id":99},{"level":13,"move_id":55},{"level":21,"move_id":44},{"level":28,"move_id":184},{"level":38,"move_id":163},{"level":47,"move_id":103},{"level":58,"move_id":56}],"rom_address":3303948},"rom_address":3292968,"tmhm_learnset":"03B41E80CE537277","types":[11,11]},{"abilities":[50,51],"base_stats":[35,46,34,20,35,45],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":15,"species":162}],"friendship":70,"id":161,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":4,"move_id":111},{"level":7,"move_id":98},{"level":12,"move_id":154},{"level":17,"move_id":270},{"level":24,"move_id":21},{"level":31,"move_id":266},{"level":40,"move_id":156},{"level":49,"move_id":133}],"rom_address":3303972},"rom_address":3292996,"tmhm_learnset":"00143E06ECF31625","types":[0,0]},{"abilities":[50,51],"base_stats":[85,76,64,90,45,55],"catch_rate":90,"evolutions":[],"friendship":70,"id":162,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":111},{"level":1,"move_id":98},{"level":4,"move_id":111},{"level":7,"move_id":98},{"level":12,"move_id":154},{"level":19,"move_id":270},{"level":28,"move_id":21},{"level":37,"move_id":266},{"level":48,"move_id":156},{"level":59,"move_id":133}],"rom_address":3303998},"rom_address":3293024,"tmhm_learnset":"00B43E06EDF37625","types":[0,0]},{"abilities":[15,51],"base_stats":[60,30,30,50,36,56],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":164}],"friendship":70,"id":163,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":6,"move_id":193},{"level":11,"move_id":64},{"level":16,"move_id":95},{"level":22,"move_id":115},{"level":28,"move_id":36},{"level":34,"move_id":93},{"level":48,"move_id":138}],"rom_address":3304024},"rom_address":3293052,"tmhm_learnset":"00487E81B4130620","types":[0,2]},{"abilities":[15,51],"base_stats":[100,50,50,70,76,96],"catch_rate":90,"evolutions":[],"friendship":70,"id":164,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":193},{"level":1,"move_id":64},{"level":6,"move_id":193},{"level":11,"move_id":64},{"level":16,"move_id":95},{"level":25,"move_id":115},{"level":33,"move_id":36},{"level":41,"move_id":93},{"level":57,"move_id":138}],"rom_address":3304048},"rom_address":3293080,"tmhm_learnset":"00487E81B4134620","types":[0,2]},{"abilities":[68,48],"base_stats":[40,20,30,55,40,80],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":166}],"friendship":70,"id":165,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":8,"move_id":48},{"level":15,"move_id":4},{"level":22,"move_id":113},{"level":22,"move_id":115},{"level":22,"move_id":219},{"level":29,"move_id":226},{"level":36,"move_id":129},{"level":43,"move_id":97},{"level":50,"move_id":38}],"rom_address":3304072},"rom_address":3293108,"tmhm_learnset":"00403E81CC3D8621","types":[6,2]},{"abilities":[68,48],"base_stats":[55,35,50,85,55,110],"catch_rate":90,"evolutions":[],"friendship":70,"id":166,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":48},{"level":8,"move_id":48},{"level":15,"move_id":4},{"level":24,"move_id":113},{"level":24,"move_id":115},{"level":24,"move_id":219},{"level":33,"move_id":226},{"level":42,"move_id":129},{"level":51,"move_id":97},{"level":60,"move_id":38}],"rom_address":3304100},"rom_address":3293136,"tmhm_learnset":"00403E81CC3DC621","types":[6,2]},{"abilities":[68,15],"base_stats":[40,60,40,30,40,40],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":22,"species":168}],"friendship":70,"id":167,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":40},{"level":1,"move_id":81},{"level":6,"move_id":184},{"level":11,"move_id":132},{"level":17,"move_id":101},{"level":23,"move_id":141},{"level":30,"move_id":154},{"level":37,"move_id":169},{"level":45,"move_id":97},{"level":53,"move_id":94}],"rom_address":3304128},"rom_address":3293164,"tmhm_learnset":"00403E089C350620","types":[6,3]},{"abilities":[68,15],"base_stats":[70,90,70,40,60,60],"catch_rate":90,"evolutions":[],"friendship":70,"id":168,"learnset":{"moves":[{"level":1,"move_id":40},{"level":1,"move_id":81},{"level":1,"move_id":184},{"level":1,"move_id":132},{"level":6,"move_id":184},{"level":11,"move_id":132},{"level":17,"move_id":101},{"level":25,"move_id":141},{"level":34,"move_id":154},{"level":43,"move_id":169},{"level":53,"move_id":97},{"level":63,"move_id":94}],"rom_address":3304154},"rom_address":3293192,"tmhm_learnset":"00403E089C354620","types":[6,3]},{"abilities":[39,0],"base_stats":[85,90,80,130,70,80],"catch_rate":90,"evolutions":[],"friendship":70,"id":169,"learnset":{"moves":[{"level":1,"move_id":103},{"level":1,"move_id":141},{"level":1,"move_id":48},{"level":1,"move_id":310},{"level":6,"move_id":48},{"level":11,"move_id":310},{"level":16,"move_id":44},{"level":21,"move_id":17},{"level":28,"move_id":109},{"level":35,"move_id":314},{"level":42,"move_id":212},{"level":49,"move_id":305},{"level":56,"move_id":114}],"rom_address":3304180},"rom_address":3293220,"tmhm_learnset":"00097F88A4174E20","types":[3,2]},{"abilities":[10,35],"base_stats":[75,38,38,67,56,56],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":27,"species":171}],"friendship":70,"id":170,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":1,"move_id":86},{"level":5,"move_id":48},{"level":13,"move_id":175},{"level":17,"move_id":55},{"level":25,"move_id":209},{"level":29,"move_id":109},{"level":37,"move_id":36},{"level":41,"move_id":56},{"level":49,"move_id":268}],"rom_address":3304208},"rom_address":3293248,"tmhm_learnset":"03501E0285933264","types":[11,13]},{"abilities":[10,35],"base_stats":[125,58,58,67,76,76],"catch_rate":75,"evolutions":[],"friendship":70,"id":171,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":1,"move_id":86},{"level":1,"move_id":48},{"level":5,"move_id":48},{"level":13,"move_id":175},{"level":17,"move_id":55},{"level":25,"move_id":209},{"level":32,"move_id":109},{"level":43,"move_id":36},{"level":50,"move_id":56},{"level":61,"move_id":268}],"rom_address":3304234},"rom_address":3293276,"tmhm_learnset":"03501E0285937264","types":[11,13]},{"abilities":[9,0],"base_stats":[20,40,15,60,35,35],"catch_rate":190,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":25}],"friendship":70,"id":172,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":84},{"level":1,"move_id":204},{"level":6,"move_id":39},{"level":8,"move_id":86},{"level":11,"move_id":186}],"rom_address":3304260},"rom_address":3293304,"tmhm_learnset":"00401E0285D38220","types":[13,13]},{"abilities":[56,0],"base_stats":[50,25,28,15,45,55],"catch_rate":150,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":35}],"friendship":140,"id":173,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":1,"move_id":204},{"level":4,"move_id":227},{"level":8,"move_id":47},{"level":13,"move_id":186}],"rom_address":3304276},"rom_address":3293332,"tmhm_learnset":"00401E27BC7B8624","types":[0,0]},{"abilities":[56,0],"base_stats":[90,30,15,15,40,20],"catch_rate":170,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":39}],"friendship":70,"id":174,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":1,"move_id":47},{"level":1,"move_id":204},{"level":4,"move_id":111},{"level":9,"move_id":1},{"level":14,"move_id":186}],"rom_address":3304292},"rom_address":3293360,"tmhm_learnset":"00401E27BC3B8624","types":[0,0]},{"abilities":[55,32],"base_stats":[35,20,65,20,40,65],"catch_rate":190,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":176}],"friendship":70,"id":175,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":118},{"level":1,"move_id":45},{"level":1,"move_id":204},{"level":6,"move_id":118},{"level":11,"move_id":186},{"level":16,"move_id":281},{"level":21,"move_id":227},{"level":26,"move_id":266},{"level":31,"move_id":273},{"level":36,"move_id":219},{"level":41,"move_id":38}],"rom_address":3304308},"rom_address":3293388,"tmhm_learnset":"00C01E27B43B8624","types":[0,0]},{"abilities":[55,32],"base_stats":[55,40,85,40,80,105],"catch_rate":75,"evolutions":[],"friendship":70,"id":176,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":118},{"level":1,"move_id":45},{"level":1,"move_id":204},{"level":6,"move_id":118},{"level":11,"move_id":186},{"level":16,"move_id":281},{"level":21,"move_id":227},{"level":26,"move_id":266},{"level":31,"move_id":273},{"level":36,"move_id":219},{"level":41,"move_id":38}],"rom_address":3304334},"rom_address":3293416,"tmhm_learnset":"00C85EA7F43BC625","types":[0,2]},{"abilities":[28,48],"base_stats":[40,50,45,70,70,45],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":25,"species":178}],"friendship":70,"id":177,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":1,"move_id":43},{"level":10,"move_id":101},{"level":20,"move_id":100},{"level":30,"move_id":273},{"level":30,"move_id":248},{"level":40,"move_id":109},{"level":50,"move_id":94}],"rom_address":3304360},"rom_address":3293444,"tmhm_learnset":"0040FE81B4378628","types":[14,2]},{"abilities":[28,48],"base_stats":[65,75,70,95,95,70],"catch_rate":75,"evolutions":[],"friendship":70,"id":178,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":1,"move_id":43},{"level":10,"move_id":101},{"level":20,"move_id":100},{"level":35,"move_id":273},{"level":35,"move_id":248},{"level":50,"move_id":109},{"level":65,"move_id":94}],"rom_address":3304382},"rom_address":3293472,"tmhm_learnset":"0048FE81B437C628","types":[14,2]},{"abilities":[9,0],"base_stats":[55,40,40,35,65,45],"catch_rate":235,"evolutions":[{"method":"LEVEL","param":15,"species":180}],"friendship":70,"id":179,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":9,"move_id":84},{"level":16,"move_id":86},{"level":23,"move_id":178},{"level":30,"move_id":113},{"level":37,"move_id":87}],"rom_address":3304404},"rom_address":3293500,"tmhm_learnset":"00401E0285D38220","types":[13,13]},{"abilities":[9,0],"base_stats":[70,55,55,45,80,60],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":30,"species":181}],"friendship":70,"id":180,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":84},{"level":9,"move_id":84},{"level":18,"move_id":86},{"level":27,"move_id":178},{"level":36,"move_id":113},{"level":45,"move_id":87}],"rom_address":3304424},"rom_address":3293528,"tmhm_learnset":"00E01E02C5D38221","types":[13,13]},{"abilities":[9,0],"base_stats":[90,75,75,55,115,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":181,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":84},{"level":1,"move_id":86},{"level":9,"move_id":84},{"level":18,"move_id":86},{"level":27,"move_id":178},{"level":30,"move_id":9},{"level":42,"move_id":113},{"level":57,"move_id":87}],"rom_address":3304444},"rom_address":3293556,"tmhm_learnset":"00E01E02C5D3C221","types":[13,13]},{"abilities":[34,0],"base_stats":[75,80,85,50,90,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":182,"learnset":{"moves":[{"level":1,"move_id":71},{"level":1,"move_id":230},{"level":1,"move_id":78},{"level":1,"move_id":345},{"level":44,"move_id":80},{"level":55,"move_id":76}],"rom_address":3304466},"rom_address":3293584,"tmhm_learnset":"00441E08843D4720","types":[12,12]},{"abilities":[47,37],"base_stats":[70,20,50,40,20,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":18,"species":184}],"friendship":70,"id":183,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":3,"move_id":111},{"level":6,"move_id":39},{"level":10,"move_id":55},{"level":15,"move_id":205},{"level":21,"move_id":61},{"level":28,"move_id":38},{"level":36,"move_id":240},{"level":45,"move_id":56}],"rom_address":3304480},"rom_address":3293612,"tmhm_learnset":"03B01E00CC533265","types":[11,11]},{"abilities":[47,37],"base_stats":[100,50,80,50,50,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":184,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":111},{"level":1,"move_id":39},{"level":1,"move_id":55},{"level":3,"move_id":111},{"level":6,"move_id":39},{"level":10,"move_id":55},{"level":15,"move_id":205},{"level":24,"move_id":61},{"level":34,"move_id":38},{"level":45,"move_id":240},{"level":57,"move_id":56}],"rom_address":3304506},"rom_address":3293640,"tmhm_learnset":"03B01E00CC537265","types":[11,11]},{"abilities":[5,69],"base_stats":[70,100,115,30,30,65],"catch_rate":65,"evolutions":[],"friendship":70,"id":185,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":88},{"level":1,"move_id":102},{"level":9,"move_id":175},{"level":17,"move_id":67},{"level":25,"move_id":157},{"level":33,"move_id":335},{"level":41,"move_id":185},{"level":49,"move_id":21},{"level":57,"move_id":38}],"rom_address":3304532},"rom_address":3293668,"tmhm_learnset":"00A03E50CE110E29","types":[5,5]},{"abilities":[11,6],"base_stats":[90,75,75,70,90,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":186,"learnset":{"moves":[{"level":1,"move_id":55},{"level":1,"move_id":95},{"level":1,"move_id":3},{"level":1,"move_id":195},{"level":35,"move_id":195},{"level":51,"move_id":207}],"rom_address":3304556},"rom_address":3293696,"tmhm_learnset":"03B03E00DE137265","types":[11,11]},{"abilities":[34,0],"base_stats":[35,35,40,50,35,55],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":188}],"friendship":70,"id":187,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":150},{"level":5,"move_id":235},{"level":5,"move_id":39},{"level":10,"move_id":33},{"level":13,"move_id":77},{"level":15,"move_id":78},{"level":17,"move_id":79},{"level":20,"move_id":73},{"level":25,"move_id":178},{"level":30,"move_id":72}],"rom_address":3304570},"rom_address":3293724,"tmhm_learnset":"00401E8084350720","types":[12,2]},{"abilities":[34,0],"base_stats":[55,45,50,80,45,65],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":27,"species":189}],"friendship":70,"id":188,"learnset":{"moves":[{"level":1,"move_id":150},{"level":1,"move_id":235},{"level":1,"move_id":39},{"level":1,"move_id":33},{"level":5,"move_id":235},{"level":5,"move_id":39},{"level":10,"move_id":33},{"level":13,"move_id":77},{"level":15,"move_id":78},{"level":17,"move_id":79},{"level":22,"move_id":73},{"level":29,"move_id":178},{"level":36,"move_id":72}],"rom_address":3304598},"rom_address":3293752,"tmhm_learnset":"00401E8084350720","types":[12,2]},{"abilities":[34,0],"base_stats":[75,55,70,110,55,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":189,"learnset":{"moves":[{"level":1,"move_id":150},{"level":1,"move_id":235},{"level":1,"move_id":39},{"level":1,"move_id":33},{"level":5,"move_id":235},{"level":5,"move_id":39},{"level":10,"move_id":33},{"level":13,"move_id":77},{"level":15,"move_id":78},{"level":17,"move_id":79},{"level":22,"move_id":73},{"level":33,"move_id":178},{"level":44,"move_id":72}],"rom_address":3304626},"rom_address":3293780,"tmhm_learnset":"00401E8084354720","types":[12,2]},{"abilities":[50,53],"base_stats":[55,70,55,85,40,55],"catch_rate":45,"evolutions":[],"friendship":70,"id":190,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":39},{"level":6,"move_id":28},{"level":13,"move_id":310},{"level":18,"move_id":226},{"level":25,"move_id":321},{"level":31,"move_id":154},{"level":38,"move_id":129},{"level":43,"move_id":103},{"level":50,"move_id":97}],"rom_address":3304654},"rom_address":3293808,"tmhm_learnset":"00A53E82EDF30E25","types":[0,0]},{"abilities":[34,0],"base_stats":[30,30,30,30,30,30],"catch_rate":235,"evolutions":[{"method":"ITEM","param":93,"species":192}],"friendship":70,"id":191,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":71},{"level":6,"move_id":74},{"level":13,"move_id":72},{"level":18,"move_id":275},{"level":25,"move_id":283},{"level":30,"move_id":241},{"level":37,"move_id":235},{"level":42,"move_id":202}],"rom_address":3304680},"rom_address":3293836,"tmhm_learnset":"00441E08843D8720","types":[12,12]},{"abilities":[34,0],"base_stats":[75,75,55,30,105,85],"catch_rate":120,"evolutions":[],"friendship":70,"id":192,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":71},{"level":1,"move_id":1},{"level":6,"move_id":74},{"level":13,"move_id":75},{"level":18,"move_id":275},{"level":25,"move_id":331},{"level":30,"move_id":241},{"level":37,"move_id":80},{"level":42,"move_id":76}],"rom_address":3304704},"rom_address":3293864,"tmhm_learnset":"00441E08843DC720","types":[12,12]},{"abilities":[3,14],"base_stats":[65,65,45,95,75,45],"catch_rate":75,"evolutions":[],"friendship":70,"id":193,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":193},{"level":7,"move_id":98},{"level":13,"move_id":104},{"level":19,"move_id":49},{"level":25,"move_id":197},{"level":31,"move_id":48},{"level":37,"move_id":253},{"level":43,"move_id":17},{"level":49,"move_id":103}],"rom_address":3304728},"rom_address":3293892,"tmhm_learnset":"00407E80B4350620","types":[6,2]},{"abilities":[6,11],"base_stats":[55,45,45,15,25,25],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":195}],"friendship":70,"id":194,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":55},{"level":1,"move_id":39},{"level":11,"move_id":21},{"level":16,"move_id":341},{"level":21,"move_id":133},{"level":31,"move_id":281},{"level":36,"move_id":89},{"level":41,"move_id":240},{"level":51,"move_id":54},{"level":51,"move_id":114}],"rom_address":3304754},"rom_address":3293920,"tmhm_learnset":"03D01E188E533264","types":[11,4]},{"abilities":[6,11],"base_stats":[95,85,85,35,65,65],"catch_rate":90,"evolutions":[],"friendship":70,"id":195,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":55},{"level":1,"move_id":39},{"level":11,"move_id":21},{"level":16,"move_id":341},{"level":23,"move_id":133},{"level":35,"move_id":281},{"level":42,"move_id":89},{"level":49,"move_id":240},{"level":61,"move_id":54},{"level":61,"move_id":114}],"rom_address":3304780},"rom_address":3293948,"tmhm_learnset":"03F01E58CE537265","types":[11,4]},{"abilities":[28,0],"base_stats":[65,65,60,110,130,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":196,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":1,"move_id":270},{"level":8,"move_id":28},{"level":16,"move_id":93},{"level":23,"move_id":98},{"level":30,"move_id":129},{"level":36,"move_id":60},{"level":42,"move_id":244},{"level":47,"move_id":94},{"level":52,"move_id":234}],"rom_address":3304806},"rom_address":3293976,"tmhm_learnset":"00449E01BC53C628","types":[14,14]},{"abilities":[28,0],"base_stats":[95,65,110,65,60,130],"catch_rate":45,"evolutions":[],"friendship":35,"id":197,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":39},{"level":1,"move_id":270},{"level":8,"move_id":28},{"level":16,"move_id":228},{"level":23,"move_id":98},{"level":30,"move_id":109},{"level":36,"move_id":185},{"level":42,"move_id":212},{"level":47,"move_id":103},{"level":52,"move_id":236}],"rom_address":3304832},"rom_address":3294004,"tmhm_learnset":"00451F00BC534E20","types":[17,17]},{"abilities":[15,0],"base_stats":[60,85,42,91,85,42],"catch_rate":30,"evolutions":[],"friendship":35,"id":198,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":9,"move_id":310},{"level":14,"move_id":228},{"level":22,"move_id":114},{"level":27,"move_id":101},{"level":35,"move_id":185},{"level":40,"move_id":269},{"level":48,"move_id":212}],"rom_address":3304858},"rom_address":3294032,"tmhm_learnset":"00097F80A4130E28","types":[17,2]},{"abilities":[12,20],"base_stats":[95,75,80,30,100,110],"catch_rate":70,"evolutions":[],"friendship":70,"id":199,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":174},{"level":1,"move_id":281},{"level":1,"move_id":33},{"level":6,"move_id":45},{"level":15,"move_id":55},{"level":20,"move_id":93},{"level":29,"move_id":50},{"level":34,"move_id":29},{"level":43,"move_id":207},{"level":48,"move_id":94}],"rom_address":3304882},"rom_address":3294060,"tmhm_learnset":"02F09E24FE5B766D","types":[11,14]},{"abilities":[26,0],"base_stats":[60,60,60,85,85,85],"catch_rate":45,"evolutions":[],"friendship":35,"id":200,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":45},{"level":1,"move_id":149},{"level":6,"move_id":180},{"level":11,"move_id":310},{"level":17,"move_id":109},{"level":23,"move_id":212},{"level":30,"move_id":60},{"level":37,"move_id":220},{"level":45,"move_id":195},{"level":53,"move_id":288}],"rom_address":3304906},"rom_address":3294088,"tmhm_learnset":"0041BF82B5930E28","types":[7,7]},{"abilities":[26,0],"base_stats":[48,72,48,48,72,48],"catch_rate":225,"evolutions":[],"friendship":70,"id":201,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":237}],"rom_address":3304932},"rom_address":3294116,"tmhm_learnset":"0000000000000000","types":[14,14]},{"abilities":[23,0],"base_stats":[190,33,58,33,33,58],"catch_rate":45,"evolutions":[],"friendship":70,"id":202,"learnset":{"moves":[{"level":1,"move_id":68},{"level":1,"move_id":243},{"level":1,"move_id":219},{"level":1,"move_id":194}],"rom_address":3304942},"rom_address":3294144,"tmhm_learnset":"0000000000000000","types":[14,14]},{"abilities":[39,48],"base_stats":[70,80,65,85,90,65],"catch_rate":60,"evolutions":[],"friendship":70,"id":203,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":7,"move_id":310},{"level":13,"move_id":93},{"level":19,"move_id":23},{"level":25,"move_id":316},{"level":31,"move_id":97},{"level":37,"move_id":226},{"level":43,"move_id":60},{"level":49,"move_id":242}],"rom_address":3304952},"rom_address":3294172,"tmhm_learnset":"00E0BE03B7D38628","types":[0,14]},{"abilities":[5,0],"base_stats":[50,65,90,15,35,35],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":31,"species":205}],"friendship":70,"id":204,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":182},{"level":8,"move_id":120},{"level":15,"move_id":36},{"level":22,"move_id":229},{"level":29,"move_id":117},{"level":36,"move_id":153},{"level":43,"move_id":191},{"level":50,"move_id":38}],"rom_address":3304978},"rom_address":3294200,"tmhm_learnset":"00A01E118E358620","types":[6,6]},{"abilities":[5,0],"base_stats":[75,90,140,40,60,60],"catch_rate":75,"evolutions":[],"friendship":70,"id":205,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":182},{"level":1,"move_id":120},{"level":8,"move_id":120},{"level":15,"move_id":36},{"level":22,"move_id":229},{"level":29,"move_id":117},{"level":39,"move_id":153},{"level":49,"move_id":191},{"level":59,"move_id":38}],"rom_address":3305002},"rom_address":3294228,"tmhm_learnset":"00A01E118E35C620","types":[6,8]},{"abilities":[32,50],"base_stats":[100,70,70,45,65,65],"catch_rate":190,"evolutions":[],"friendship":70,"id":206,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":99},{"level":4,"move_id":111},{"level":11,"move_id":281},{"level":14,"move_id":137},{"level":21,"move_id":180},{"level":24,"move_id":228},{"level":31,"move_id":103},{"level":34,"move_id":36},{"level":41,"move_id":283}],"rom_address":3305026},"rom_address":3294256,"tmhm_learnset":"00A03E66AFF3362C","types":[0,0]},{"abilities":[52,8],"base_stats":[65,75,105,85,35,65],"catch_rate":60,"evolutions":[],"friendship":70,"id":207,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":40},{"level":6,"move_id":28},{"level":13,"move_id":106},{"level":20,"move_id":98},{"level":28,"move_id":185},{"level":36,"move_id":163},{"level":44,"move_id":103},{"level":52,"move_id":12}],"rom_address":3305052},"rom_address":3294284,"tmhm_learnset":"00A47ED88E530620","types":[4,2]},{"abilities":[69,5],"base_stats":[75,85,200,30,55,65],"catch_rate":25,"evolutions":[],"friendship":70,"id":208,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":103},{"level":9,"move_id":20},{"level":13,"move_id":88},{"level":21,"move_id":106},{"level":25,"move_id":99},{"level":33,"move_id":201},{"level":37,"move_id":21},{"level":45,"move_id":231},{"level":49,"move_id":242},{"level":57,"move_id":38}],"rom_address":3305076},"rom_address":3294312,"tmhm_learnset":"00A41F508E514E30","types":[8,4]},{"abilities":[22,50],"base_stats":[60,80,50,30,40,40],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":23,"species":210}],"friendship":70,"id":209,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":184},{"level":4,"move_id":39},{"level":8,"move_id":204},{"level":13,"move_id":44},{"level":19,"move_id":122},{"level":26,"move_id":46},{"level":34,"move_id":99},{"level":43,"move_id":36},{"level":53,"move_id":242}],"rom_address":3305104},"rom_address":3294340,"tmhm_learnset":"00A23F2EEFB30EB5","types":[0,0]},{"abilities":[22,22],"base_stats":[90,120,75,45,60,60],"catch_rate":75,"evolutions":[],"friendship":70,"id":210,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":184},{"level":4,"move_id":39},{"level":8,"move_id":204},{"level":13,"move_id":44},{"level":19,"move_id":122},{"level":28,"move_id":46},{"level":38,"move_id":99},{"level":49,"move_id":36},{"level":61,"move_id":242}],"rom_address":3305130},"rom_address":3294368,"tmhm_learnset":"00A23F6EEFF34EB5","types":[0,0]},{"abilities":[38,33],"base_stats":[65,95,75,85,55,55],"catch_rate":45,"evolutions":[],"friendship":70,"id":211,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":191},{"level":1,"move_id":33},{"level":1,"move_id":40},{"level":10,"move_id":106},{"level":10,"move_id":107},{"level":19,"move_id":55},{"level":28,"move_id":42},{"level":37,"move_id":36},{"level":46,"move_id":56}],"rom_address":3305156},"rom_address":3294396,"tmhm_learnset":"03101E0AA4133264","types":[11,3]},{"abilities":[68,0],"base_stats":[70,130,100,65,55,80],"catch_rate":25,"evolutions":[],"friendship":70,"id":212,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":98},{"level":1,"move_id":43},{"level":6,"move_id":116},{"level":11,"move_id":228},{"level":16,"move_id":206},{"level":21,"move_id":97},{"level":26,"move_id":232},{"level":31,"move_id":163},{"level":36,"move_id":14},{"level":41,"move_id":104},{"level":46,"move_id":210}],"rom_address":3305178},"rom_address":3294424,"tmhm_learnset":"00A47E9084134620","types":[6,8]},{"abilities":[5,0],"base_stats":[20,10,230,5,10,230],"catch_rate":190,"evolutions":[],"friendship":70,"id":213,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":132},{"level":1,"move_id":110},{"level":9,"move_id":35},{"level":14,"move_id":227},{"level":23,"move_id":219},{"level":28,"move_id":117},{"level":37,"move_id":156}],"rom_address":3305206},"rom_address":3294452,"tmhm_learnset":"00E01E588E190620","types":[6,5]},{"abilities":[68,62],"base_stats":[80,125,75,85,40,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":214,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":43},{"level":6,"move_id":30},{"level":11,"move_id":203},{"level":17,"move_id":31},{"level":23,"move_id":280},{"level":30,"move_id":68},{"level":37,"move_id":36},{"level":45,"move_id":179},{"level":53,"move_id":224}],"rom_address":3305226},"rom_address":3294480,"tmhm_learnset":"00A43E40CE1346A1","types":[6,1]},{"abilities":[39,51],"base_stats":[55,95,55,115,35,75],"catch_rate":60,"evolutions":[],"friendship":35,"id":215,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":43},{"level":1,"move_id":269},{"level":8,"move_id":98},{"level":15,"move_id":103},{"level":22,"move_id":185},{"level":29,"move_id":154},{"level":36,"move_id":97},{"level":43,"move_id":196},{"level":50,"move_id":163},{"level":57,"move_id":251},{"level":64,"move_id":232}],"rom_address":3305252},"rom_address":3294508,"tmhm_learnset":"00B53F80EC533E69","types":[17,15]},{"abilities":[53,0],"base_stats":[60,80,50,40,50,50],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":30,"species":217}],"friendship":70,"id":216,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":43},{"level":7,"move_id":122},{"level":13,"move_id":154},{"level":19,"move_id":313},{"level":25,"move_id":185},{"level":31,"move_id":156},{"level":37,"move_id":163},{"level":43,"move_id":173},{"level":49,"move_id":37}],"rom_address":3305280},"rom_address":3294536,"tmhm_learnset":"00A43F80CE130EB1","types":[0,0]},{"abilities":[62,0],"base_stats":[90,130,75,55,75,75],"catch_rate":60,"evolutions":[],"friendship":70,"id":217,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":43},{"level":1,"move_id":122},{"level":1,"move_id":154},{"level":7,"move_id":122},{"level":13,"move_id":154},{"level":19,"move_id":313},{"level":25,"move_id":185},{"level":31,"move_id":156},{"level":37,"move_id":163},{"level":43,"move_id":173},{"level":49,"move_id":37}],"rom_address":3305306},"rom_address":3294564,"tmhm_learnset":"00A43FC0CE134EB1","types":[0,0]},{"abilities":[40,49],"base_stats":[40,40,40,20,70,40],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":38,"species":219}],"friendship":70,"id":218,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":281},{"level":1,"move_id":123},{"level":8,"move_id":52},{"level":15,"move_id":88},{"level":22,"move_id":106},{"level":29,"move_id":133},{"level":36,"move_id":53},{"level":43,"move_id":157},{"level":50,"move_id":34}],"rom_address":3305332},"rom_address":3294592,"tmhm_learnset":"00821E2584118620","types":[10,10]},{"abilities":[40,49],"base_stats":[50,50,120,30,80,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":219,"learnset":{"moves":[{"level":1,"move_id":281},{"level":1,"move_id":123},{"level":1,"move_id":52},{"level":1,"move_id":88},{"level":8,"move_id":52},{"level":15,"move_id":88},{"level":22,"move_id":106},{"level":29,"move_id":133},{"level":36,"move_id":53},{"level":48,"move_id":157},{"level":60,"move_id":34}],"rom_address":3305356},"rom_address":3294620,"tmhm_learnset":"00A21E758611C620","types":[10,5]},{"abilities":[12,0],"base_stats":[50,50,40,50,30,30],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":33,"species":221}],"friendship":70,"id":220,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":316},{"level":10,"move_id":181},{"level":19,"move_id":203},{"level":28,"move_id":36},{"level":37,"move_id":54},{"level":46,"move_id":59},{"level":55,"move_id":133}],"rom_address":3305380},"rom_address":3294648,"tmhm_learnset":"00A01E518E13B270","types":[15,4]},{"abilities":[12,0],"base_stats":[100,100,80,50,60,60],"catch_rate":75,"evolutions":[],"friendship":70,"id":221,"learnset":{"moves":[{"level":1,"move_id":30},{"level":1,"move_id":316},{"level":1,"move_id":181},{"level":1,"move_id":203},{"level":10,"move_id":181},{"level":19,"move_id":203},{"level":28,"move_id":36},{"level":33,"move_id":31},{"level":42,"move_id":54},{"level":56,"move_id":59},{"level":70,"move_id":133}],"rom_address":3305402},"rom_address":3294676,"tmhm_learnset":"00A01E518E13F270","types":[15,4]},{"abilities":[55,30],"base_stats":[55,55,85,35,65,85],"catch_rate":60,"evolutions":[],"friendship":70,"id":222,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":6,"move_id":106},{"level":12,"move_id":145},{"level":17,"move_id":105},{"level":17,"move_id":287},{"level":23,"move_id":61},{"level":28,"move_id":131},{"level":34,"move_id":350},{"level":39,"move_id":243},{"level":45,"move_id":246}],"rom_address":3305426},"rom_address":3294704,"tmhm_learnset":"00B01E51BE1BB66C","types":[11,5]},{"abilities":[55,0],"base_stats":[35,65,35,65,65,35],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":25,"species":224}],"friendship":70,"id":223,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":55},{"level":11,"move_id":199},{"level":22,"move_id":60},{"level":22,"move_id":62},{"level":22,"move_id":61},{"level":33,"move_id":116},{"level":44,"move_id":58},{"level":55,"move_id":63}],"rom_address":3305454},"rom_address":3294732,"tmhm_learnset":"03103E2494137624","types":[11,11]},{"abilities":[21,0],"base_stats":[75,105,75,45,105,75],"catch_rate":75,"evolutions":[],"friendship":70,"id":224,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":55},{"level":11,"move_id":132},{"level":22,"move_id":60},{"level":22,"move_id":62},{"level":22,"move_id":61},{"level":25,"move_id":190},{"level":38,"move_id":116},{"level":54,"move_id":58},{"level":70,"move_id":63}],"rom_address":3305478},"rom_address":3294760,"tmhm_learnset":"03103E2C94137724","types":[11,11]},{"abilities":[72,55],"base_stats":[45,55,45,75,65,45],"catch_rate":45,"evolutions":[],"friendship":70,"id":225,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":217}],"rom_address":3305504},"rom_address":3294788,"tmhm_learnset":"00083E8084133265","types":[15,2]},{"abilities":[33,11],"base_stats":[65,40,70,70,80,140],"catch_rate":25,"evolutions":[],"friendship":70,"id":226,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":145},{"level":8,"move_id":48},{"level":15,"move_id":61},{"level":22,"move_id":36},{"level":29,"move_id":97},{"level":36,"move_id":17},{"level":43,"move_id":352},{"level":50,"move_id":109}],"rom_address":3305514},"rom_address":3294816,"tmhm_learnset":"03101E8086133264","types":[11,2]},{"abilities":[51,5],"base_stats":[65,80,140,70,40,70],"catch_rate":25,"evolutions":[],"friendship":70,"id":227,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":64},{"level":10,"move_id":28},{"level":13,"move_id":129},{"level":16,"move_id":97},{"level":26,"move_id":31},{"level":29,"move_id":314},{"level":32,"move_id":211},{"level":42,"move_id":191},{"level":45,"move_id":319}],"rom_address":3305538},"rom_address":3294844,"tmhm_learnset":"008C7F9084110E30","types":[8,2]},{"abilities":[48,18],"base_stats":[45,60,30,65,80,50],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":24,"species":229}],"friendship":35,"id":228,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":52},{"level":7,"move_id":336},{"level":13,"move_id":123},{"level":19,"move_id":46},{"level":25,"move_id":44},{"level":31,"move_id":316},{"level":37,"move_id":185},{"level":43,"move_id":53},{"level":49,"move_id":242}],"rom_address":3305564},"rom_address":3294872,"tmhm_learnset":"00833F2CA4710E30","types":[17,10]},{"abilities":[48,18],"base_stats":[75,90,50,95,110,80],"catch_rate":45,"evolutions":[],"friendship":35,"id":229,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":52},{"level":1,"move_id":336},{"level":7,"move_id":336},{"level":13,"move_id":123},{"level":19,"move_id":46},{"level":27,"move_id":44},{"level":35,"move_id":316},{"level":43,"move_id":185},{"level":51,"move_id":53},{"level":59,"move_id":242}],"rom_address":3305590},"rom_address":3294900,"tmhm_learnset":"00A33F2CA4714E30","types":[17,10]},{"abilities":[33,0],"base_stats":[75,95,95,85,95,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":230,"learnset":{"moves":[{"level":1,"move_id":145},{"level":1,"move_id":108},{"level":1,"move_id":43},{"level":1,"move_id":55},{"level":8,"move_id":108},{"level":15,"move_id":43},{"level":22,"move_id":55},{"level":29,"move_id":239},{"level":40,"move_id":97},{"level":51,"move_id":56},{"level":62,"move_id":349}],"rom_address":3305616},"rom_address":3294928,"tmhm_learnset":"03101E0084137264","types":[11,16]},{"abilities":[53,0],"base_stats":[90,60,60,40,40,40],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":25,"species":232}],"friendship":70,"id":231,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":316},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":9,"move_id":111},{"level":17,"move_id":175},{"level":25,"move_id":36},{"level":33,"move_id":205},{"level":41,"move_id":203},{"level":49,"move_id":38}],"rom_address":3305640},"rom_address":3294956,"tmhm_learnset":"00A01E5086510630","types":[4,4]},{"abilities":[5,0],"base_stats":[90,120,120,50,60,60],"catch_rate":60,"evolutions":[],"friendship":70,"id":232,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":316},{"level":1,"move_id":30},{"level":1,"move_id":45},{"level":9,"move_id":111},{"level":17,"move_id":175},{"level":25,"move_id":31},{"level":33,"move_id":205},{"level":41,"move_id":229},{"level":49,"move_id":89}],"rom_address":3305662},"rom_address":3294984,"tmhm_learnset":"00A01E5086514630","types":[4,4]},{"abilities":[36,0],"base_stats":[85,80,90,60,105,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":233,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":176},{"level":1,"move_id":33},{"level":1,"move_id":160},{"level":9,"move_id":97},{"level":12,"move_id":60},{"level":20,"move_id":105},{"level":24,"move_id":111},{"level":32,"move_id":199},{"level":36,"move_id":161},{"level":44,"move_id":278},{"level":48,"move_id":192}],"rom_address":3305684},"rom_address":3295012,"tmhm_learnset":"00402E82B5F37620","types":[0,0]},{"abilities":[22,0],"base_stats":[73,95,62,85,85,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":234,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":7,"move_id":43},{"level":13,"move_id":310},{"level":19,"move_id":95},{"level":25,"move_id":23},{"level":31,"move_id":28},{"level":37,"move_id":36},{"level":43,"move_id":109},{"level":49,"move_id":347}],"rom_address":3305710},"rom_address":3295040,"tmhm_learnset":"0040BE03B7F38638","types":[0,0]},{"abilities":[20,0],"base_stats":[55,20,35,75,20,45],"catch_rate":45,"evolutions":[],"friendship":70,"id":235,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":166},{"level":11,"move_id":166},{"level":21,"move_id":166},{"level":31,"move_id":166},{"level":41,"move_id":166},{"level":51,"move_id":166},{"level":61,"move_id":166},{"level":71,"move_id":166},{"level":81,"move_id":166},{"level":91,"move_id":166}],"rom_address":3305736},"rom_address":3295068,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[62,0],"base_stats":[35,35,35,35,35,35],"catch_rate":75,"evolutions":[{"method":"LEVEL_ATK_LT_DEF","param":20,"species":107},{"method":"LEVEL_ATK_GT_DEF","param":20,"species":106},{"method":"LEVEL_ATK_EQ_DEF","param":20,"species":237}],"friendship":70,"id":236,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3305764},"rom_address":3295096,"tmhm_learnset":"00A03E00C61306A0","types":[1,1]},{"abilities":[22,0],"base_stats":[50,95,95,70,35,110],"catch_rate":45,"evolutions":[],"friendship":70,"id":237,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":279},{"level":1,"move_id":27},{"level":7,"move_id":116},{"level":13,"move_id":228},{"level":19,"move_id":98},{"level":20,"move_id":167},{"level":25,"move_id":229},{"level":31,"move_id":68},{"level":37,"move_id":97},{"level":43,"move_id":197},{"level":49,"move_id":283}],"rom_address":3305774},"rom_address":3295124,"tmhm_learnset":"00A03E10CE1306A0","types":[1,1]},{"abilities":[12,0],"base_stats":[45,30,15,65,85,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":124}],"friendship":70,"id":238,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":1,"move_id":122},{"level":9,"move_id":186},{"level":13,"move_id":181},{"level":21,"move_id":93},{"level":25,"move_id":47},{"level":33,"move_id":212},{"level":37,"move_id":313},{"level":45,"move_id":94},{"level":49,"move_id":195},{"level":57,"move_id":59}],"rom_address":3305802},"rom_address":3295152,"tmhm_learnset":"0040BE01B413B26C","types":[15,14]},{"abilities":[9,0],"base_stats":[45,63,37,95,65,55],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":125}],"friendship":70,"id":239,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":98},{"level":1,"move_id":43},{"level":9,"move_id":9},{"level":17,"move_id":113},{"level":25,"move_id":129},{"level":33,"move_id":103},{"level":41,"move_id":85},{"level":49,"move_id":87}],"rom_address":3305830},"rom_address":3295180,"tmhm_learnset":"00C03E02D5938221","types":[13,13]},{"abilities":[49,0],"base_stats":[45,75,37,83,70,55],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":126}],"friendship":70,"id":240,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":52},{"level":7,"move_id":43},{"level":13,"move_id":123},{"level":19,"move_id":7},{"level":25,"move_id":108},{"level":31,"move_id":241},{"level":37,"move_id":53},{"level":43,"move_id":109},{"level":49,"move_id":126}],"rom_address":3305852},"rom_address":3295208,"tmhm_learnset":"00803E24D4510621","types":[10,10]},{"abilities":[47,0],"base_stats":[95,80,105,100,40,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":241,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":4,"move_id":45},{"level":8,"move_id":111},{"level":13,"move_id":23},{"level":19,"move_id":208},{"level":26,"move_id":117},{"level":34,"move_id":205},{"level":43,"move_id":34},{"level":53,"move_id":215}],"rom_address":3305878},"rom_address":3295236,"tmhm_learnset":"00B01E52E7F37625","types":[0,0]},{"abilities":[30,32],"base_stats":[255,10,10,55,75,135],"catch_rate":30,"evolutions":[],"friendship":140,"id":242,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":1,"move_id":45},{"level":4,"move_id":39},{"level":7,"move_id":287},{"level":10,"move_id":135},{"level":13,"move_id":3},{"level":18,"move_id":107},{"level":23,"move_id":47},{"level":28,"move_id":121},{"level":33,"move_id":111},{"level":40,"move_id":113},{"level":47,"move_id":38}],"rom_address":3305904},"rom_address":3295264,"tmhm_learnset":"00E19E76F7FBF66D","types":[0,0]},{"abilities":[46,0],"base_stats":[90,85,75,115,115,100],"catch_rate":3,"evolutions":[],"friendship":35,"id":243,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":44},{"level":1,"move_id":43},{"level":11,"move_id":84},{"level":21,"move_id":46},{"level":31,"move_id":98},{"level":41,"move_id":209},{"level":51,"move_id":115},{"level":61,"move_id":242},{"level":71,"move_id":87},{"level":81,"move_id":347}],"rom_address":3305934},"rom_address":3295292,"tmhm_learnset":"00E40E138DD34638","types":[13,13]},{"abilities":[46,0],"base_stats":[115,115,85,100,90,75],"catch_rate":3,"evolutions":[],"friendship":35,"id":244,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":44},{"level":1,"move_id":43},{"level":11,"move_id":52},{"level":21,"move_id":46},{"level":31,"move_id":83},{"level":41,"move_id":23},{"level":51,"move_id":53},{"level":61,"move_id":207},{"level":71,"move_id":126},{"level":81,"move_id":347}],"rom_address":3305960},"rom_address":3295320,"tmhm_learnset":"00E40E358C734638","types":[10,10]},{"abilities":[46,0],"base_stats":[100,75,115,85,90,115],"catch_rate":3,"evolutions":[],"friendship":35,"id":245,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":44},{"level":1,"move_id":43},{"level":11,"move_id":61},{"level":21,"move_id":240},{"level":31,"move_id":16},{"level":41,"move_id":62},{"level":51,"move_id":54},{"level":61,"move_id":243},{"level":71,"move_id":56},{"level":81,"move_id":347}],"rom_address":3305986},"rom_address":3295348,"tmhm_learnset":"03940E118C53767C","types":[11,11]},{"abilities":[62,0],"base_stats":[50,64,50,41,45,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":247}],"friendship":35,"id":246,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":44},{"level":1,"move_id":43},{"level":8,"move_id":201},{"level":15,"move_id":103},{"level":22,"move_id":157},{"level":29,"move_id":37},{"level":36,"move_id":184},{"level":43,"move_id":242},{"level":50,"move_id":89},{"level":57,"move_id":63}],"rom_address":3306012},"rom_address":3295376,"tmhm_learnset":"00801F10CE134E20","types":[5,4]},{"abilities":[61,0],"base_stats":[70,84,70,51,65,70],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":55,"species":248}],"friendship":35,"id":247,"learnset":{"moves":[{"level":1,"move_id":44},{"level":1,"move_id":43},{"level":1,"move_id":201},{"level":1,"move_id":103},{"level":8,"move_id":201},{"level":15,"move_id":103},{"level":22,"move_id":157},{"level":29,"move_id":37},{"level":38,"move_id":184},{"level":47,"move_id":242},{"level":56,"move_id":89},{"level":65,"move_id":63}],"rom_address":3306038},"rom_address":3295404,"tmhm_learnset":"00801F10CE134E20","types":[5,4]},{"abilities":[45,0],"base_stats":[100,134,110,61,95,100],"catch_rate":45,"evolutions":[],"friendship":35,"id":248,"learnset":{"moves":[{"level":1,"move_id":44},{"level":1,"move_id":43},{"level":1,"move_id":201},{"level":1,"move_id":103},{"level":8,"move_id":201},{"level":15,"move_id":103},{"level":22,"move_id":157},{"level":29,"move_id":37},{"level":38,"move_id":184},{"level":47,"move_id":242},{"level":61,"move_id":89},{"level":75,"move_id":63}],"rom_address":3306064},"rom_address":3295432,"tmhm_learnset":"00B41FF6CFD37E37","types":[5,17]},{"abilities":[46,0],"base_stats":[106,90,130,110,90,154],"catch_rate":3,"evolutions":[],"friendship":0,"id":249,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":16},{"level":1,"move_id":18},{"level":11,"move_id":219},{"level":22,"move_id":16},{"level":33,"move_id":105},{"level":44,"move_id":56},{"level":55,"move_id":240},{"level":66,"move_id":129},{"level":77,"move_id":177},{"level":88,"move_id":246},{"level":99,"move_id":248}],"rom_address":3306090},"rom_address":3295460,"tmhm_learnset":"03B8CE93B7DFF67C","types":[14,2]},{"abilities":[46,0],"base_stats":[106,130,90,90,110,154],"catch_rate":3,"evolutions":[],"friendship":0,"id":250,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":18},{"level":11,"move_id":219},{"level":22,"move_id":16},{"level":33,"move_id":105},{"level":44,"move_id":126},{"level":55,"move_id":241},{"level":66,"move_id":129},{"level":77,"move_id":221},{"level":88,"move_id":246},{"level":99,"move_id":248}],"rom_address":3306118},"rom_address":3295488,"tmhm_learnset":"00EA4EB7B7BFC638","types":[10,2]},{"abilities":[30,0],"base_stats":[100,100,100,100,100,100],"catch_rate":45,"evolutions":[],"friendship":100,"id":251,"learnset":{"moves":[{"level":1,"move_id":73},{"level":1,"move_id":93},{"level":1,"move_id":105},{"level":1,"move_id":215},{"level":10,"move_id":219},{"level":20,"move_id":246},{"level":30,"move_id":248},{"level":40,"move_id":226},{"level":50,"move_id":195}],"rom_address":3306146},"rom_address":3295516,"tmhm_learnset":"00448E93B43FC62C","types":[14,12]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":252,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306166},"rom_address":3295544,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":253,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306176},"rom_address":3295572,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":254,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306186},"rom_address":3295600,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":255,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306196},"rom_address":3295628,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":256,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306206},"rom_address":3295656,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":257,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306216},"rom_address":3295684,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":258,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306226},"rom_address":3295712,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":259,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306236},"rom_address":3295740,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":260,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306246},"rom_address":3295768,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":261,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306256},"rom_address":3295796,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":262,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306266},"rom_address":3295824,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":263,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306276},"rom_address":3295852,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":264,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306286},"rom_address":3295880,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":265,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306296},"rom_address":3295908,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":266,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306306},"rom_address":3295936,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":267,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306316},"rom_address":3295964,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":268,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306326},"rom_address":3295992,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":269,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306336},"rom_address":3296020,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":270,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306346},"rom_address":3296048,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":271,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306356},"rom_address":3296076,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":272,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306366},"rom_address":3296104,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":273,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306376},"rom_address":3296132,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":274,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306386},"rom_address":3296160,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":275,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306396},"rom_address":3296188,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":276,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}],"rom_address":3306406},"rom_address":3296216,"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[65,0],"base_stats":[40,45,35,70,65,55],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":278}],"friendship":70,"id":277,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":1,"move_id":43},{"level":6,"move_id":71},{"level":11,"move_id":98},{"level":16,"move_id":228},{"level":21,"move_id":103},{"level":26,"move_id":72},{"level":31,"move_id":97},{"level":36,"move_id":21},{"level":41,"move_id":197},{"level":46,"move_id":202}],"rom_address":3306416},"rom_address":3296244,"tmhm_learnset":"00E41EC0CC7D0721","types":[12,12]},{"abilities":[65,0],"base_stats":[50,65,45,95,85,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":279}],"friendship":70,"id":278,"learnset":{"moves":[{"level":1,"move_id":1},{"level":1,"move_id":43},{"level":1,"move_id":71},{"level":1,"move_id":98},{"level":6,"move_id":71},{"level":11,"move_id":98},{"level":16,"move_id":210},{"level":17,"move_id":228},{"level":23,"move_id":103},{"level":29,"move_id":348},{"level":35,"move_id":97},{"level":41,"move_id":21},{"level":47,"move_id":197},{"level":53,"move_id":206}],"rom_address":3306444},"rom_address":3296272,"tmhm_learnset":"00E41EC0CC7D0721","types":[12,12]},{"abilities":[65,0],"base_stats":[70,85,65,120,105,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":279,"learnset":{"moves":[{"level":1,"move_id":1},{"level":1,"move_id":43},{"level":1,"move_id":71},{"level":1,"move_id":98},{"level":6,"move_id":71},{"level":11,"move_id":98},{"level":16,"move_id":210},{"level":17,"move_id":228},{"level":23,"move_id":103},{"level":29,"move_id":348},{"level":35,"move_id":97},{"level":43,"move_id":21},{"level":51,"move_id":197},{"level":59,"move_id":206}],"rom_address":3306474},"rom_address":3296300,"tmhm_learnset":"00E41EC0CE7D4733","types":[12,12]},{"abilities":[66,0],"base_stats":[45,60,40,45,70,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":281}],"friendship":70,"id":280,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":45},{"level":7,"move_id":116},{"level":10,"move_id":52},{"level":16,"move_id":64},{"level":19,"move_id":28},{"level":25,"move_id":83},{"level":28,"move_id":98},{"level":34,"move_id":163},{"level":37,"move_id":119},{"level":43,"move_id":53}],"rom_address":3306504},"rom_address":3296328,"tmhm_learnset":"00A61EE48C110620","types":[10,10]},{"abilities":[66,0],"base_stats":[60,85,60,55,85,60],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":282}],"friendship":70,"id":281,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":45},{"level":1,"move_id":116},{"level":1,"move_id":52},{"level":7,"move_id":116},{"level":13,"move_id":52},{"level":16,"move_id":24},{"level":17,"move_id":64},{"level":21,"move_id":28},{"level":28,"move_id":339},{"level":32,"move_id":98},{"level":39,"move_id":163},{"level":43,"move_id":119},{"level":50,"move_id":327}],"rom_address":3306532},"rom_address":3296356,"tmhm_learnset":"00A61EE4CC1106A1","types":[10,1]},{"abilities":[66,0],"base_stats":[80,120,70,80,110,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":282,"learnset":{"moves":[{"level":1,"move_id":7},{"level":1,"move_id":10},{"level":1,"move_id":45},{"level":1,"move_id":116},{"level":1,"move_id":52},{"level":7,"move_id":116},{"level":13,"move_id":52},{"level":16,"move_id":24},{"level":17,"move_id":64},{"level":21,"move_id":28},{"level":28,"move_id":339},{"level":32,"move_id":98},{"level":36,"move_id":299},{"level":42,"move_id":163},{"level":49,"move_id":119},{"level":59,"move_id":327}],"rom_address":3306562},"rom_address":3296384,"tmhm_learnset":"00A61EE4CE1146B1","types":[10,1]},{"abilities":[67,0],"base_stats":[50,70,50,40,50,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":284}],"friendship":70,"id":283,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":6,"move_id":189},{"level":10,"move_id":55},{"level":15,"move_id":117},{"level":19,"move_id":193},{"level":24,"move_id":300},{"level":28,"move_id":36},{"level":33,"move_id":250},{"level":37,"move_id":182},{"level":42,"move_id":56},{"level":46,"move_id":283}],"rom_address":3306596},"rom_address":3296412,"tmhm_learnset":"03B01E408C533264","types":[11,11]},{"abilities":[67,0],"base_stats":[70,85,70,50,60,70],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":285}],"friendship":70,"id":284,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":189},{"level":1,"move_id":55},{"level":6,"move_id":189},{"level":10,"move_id":55},{"level":15,"move_id":117},{"level":16,"move_id":341},{"level":20,"move_id":193},{"level":25,"move_id":300},{"level":31,"move_id":36},{"level":37,"move_id":330},{"level":42,"move_id":182},{"level":46,"move_id":89},{"level":53,"move_id":283}],"rom_address":3306626},"rom_address":3296440,"tmhm_learnset":"03B01E408E533264","types":[11,4]},{"abilities":[67,0],"base_stats":[100,110,90,60,85,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":285,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":189},{"level":1,"move_id":55},{"level":6,"move_id":189},{"level":10,"move_id":55},{"level":15,"move_id":117},{"level":16,"move_id":341},{"level":20,"move_id":193},{"level":25,"move_id":300},{"level":31,"move_id":36},{"level":39,"move_id":330},{"level":46,"move_id":182},{"level":52,"move_id":89},{"level":61,"move_id":283}],"rom_address":3306658},"rom_address":3296468,"tmhm_learnset":"03B01E40CE537275","types":[11,4]},{"abilities":[50,0],"base_stats":[35,55,35,35,30,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":287}],"friendship":70,"id":286,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":5,"move_id":336},{"level":9,"move_id":28},{"level":13,"move_id":44},{"level":17,"move_id":316},{"level":21,"move_id":46},{"level":25,"move_id":207},{"level":29,"move_id":184},{"level":33,"move_id":36},{"level":37,"move_id":269},{"level":41,"move_id":242},{"level":45,"move_id":168}],"rom_address":3306690},"rom_address":3296496,"tmhm_learnset":"00813F00AC530E30","types":[17,17]},{"abilities":[22,0],"base_stats":[70,90,70,70,60,60],"catch_rate":127,"evolutions":[],"friendship":70,"id":287,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":336},{"level":1,"move_id":28},{"level":1,"move_id":44},{"level":5,"move_id":336},{"level":9,"move_id":28},{"level":13,"move_id":44},{"level":17,"move_id":316},{"level":22,"move_id":46},{"level":27,"move_id":207},{"level":32,"move_id":184},{"level":37,"move_id":36},{"level":42,"move_id":269},{"level":47,"move_id":242},{"level":52,"move_id":168}],"rom_address":3306722},"rom_address":3296524,"tmhm_learnset":"00A13F00AC534E30","types":[17,17]},{"abilities":[53,0],"base_stats":[38,30,41,60,30,41],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":289}],"friendship":70,"id":288,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":5,"move_id":39},{"level":9,"move_id":29},{"level":13,"move_id":28},{"level":17,"move_id":316},{"level":21,"move_id":300},{"level":25,"move_id":42},{"level":29,"move_id":343},{"level":33,"move_id":175},{"level":37,"move_id":156},{"level":41,"move_id":187}],"rom_address":3306754},"rom_address":3296552,"tmhm_learnset":"00943E02ADD33624","types":[0,0]},{"abilities":[53,0],"base_stats":[78,70,61,100,50,61],"catch_rate":90,"evolutions":[],"friendship":70,"id":289,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":45},{"level":1,"move_id":39},{"level":1,"move_id":29},{"level":5,"move_id":39},{"level":9,"move_id":29},{"level":13,"move_id":28},{"level":17,"move_id":316},{"level":23,"move_id":300},{"level":29,"move_id":154},{"level":35,"move_id":343},{"level":41,"move_id":163},{"level":47,"move_id":156},{"level":53,"move_id":187}],"rom_address":3306784},"rom_address":3296580,"tmhm_learnset":"00B43E02ADD37634","types":[0,0]},{"abilities":[19,0],"base_stats":[45,45,35,20,20,30],"catch_rate":255,"evolutions":[{"method":"LEVEL_SILCOON","param":7,"species":291},{"method":"LEVEL_CASCOON","param":7,"species":293}],"friendship":70,"id":290,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":81},{"level":5,"move_id":40}],"rom_address":3306814},"rom_address":3296608,"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[61,0],"base_stats":[50,35,55,15,25,25],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":10,"species":292}],"friendship":70,"id":291,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":7,"move_id":106}],"rom_address":3306826},"rom_address":3296636,"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[68,0],"base_stats":[60,70,50,65,90,50],"catch_rate":45,"evolutions":[],"friendship":70,"id":292,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":71},{"level":10,"move_id":71},{"level":13,"move_id":16},{"level":17,"move_id":78},{"level":20,"move_id":234},{"level":24,"move_id":72},{"level":27,"move_id":18},{"level":31,"move_id":213},{"level":34,"move_id":318},{"level":38,"move_id":202}],"rom_address":3306838},"rom_address":3296664,"tmhm_learnset":"00403E80B43D4620","types":[6,2]},{"abilities":[61,0],"base_stats":[50,35,55,15,25,25],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":10,"species":294}],"friendship":70,"id":293,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":7,"move_id":106}],"rom_address":3306866},"rom_address":3296692,"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[19,0],"base_stats":[60,50,70,65,50,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":294,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":93},{"level":10,"move_id":93},{"level":13,"move_id":16},{"level":17,"move_id":182},{"level":20,"move_id":236},{"level":24,"move_id":60},{"level":27,"move_id":18},{"level":31,"move_id":113},{"level":34,"move_id":318},{"level":38,"move_id":92}],"rom_address":3306878},"rom_address":3296720,"tmhm_learnset":"00403E88B435C620","types":[6,3]},{"abilities":[33,44],"base_stats":[40,30,30,30,40,50],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":14,"species":296}],"friendship":70,"id":295,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":310},{"level":3,"move_id":45},{"level":7,"move_id":71},{"level":13,"move_id":267},{"level":21,"move_id":54},{"level":31,"move_id":240},{"level":43,"move_id":72}],"rom_address":3306906},"rom_address":3296748,"tmhm_learnset":"00503E0084373764","types":[11,12]},{"abilities":[33,44],"base_stats":[60,50,50,50,60,70],"catch_rate":120,"evolutions":[{"method":"ITEM","param":97,"species":297}],"friendship":70,"id":296,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":310},{"level":3,"move_id":45},{"level":7,"move_id":71},{"level":13,"move_id":267},{"level":19,"move_id":252},{"level":25,"move_id":154},{"level":31,"move_id":346},{"level":37,"move_id":168},{"level":43,"move_id":253},{"level":49,"move_id":56}],"rom_address":3306928},"rom_address":3296776,"tmhm_learnset":"03F03E00C4373764","types":[11,12]},{"abilities":[33,44],"base_stats":[80,70,70,70,90,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":297,"learnset":{"moves":[{"level":1,"move_id":310},{"level":1,"move_id":45},{"level":1,"move_id":71},{"level":1,"move_id":267}],"rom_address":3306956},"rom_address":3296804,"tmhm_learnset":"03F03E00C4377765","types":[11,12]},{"abilities":[34,48],"base_stats":[40,40,50,30,30,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":14,"species":299}],"friendship":70,"id":298,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":117},{"level":3,"move_id":106},{"level":7,"move_id":74},{"level":13,"move_id":267},{"level":21,"move_id":235},{"level":31,"move_id":241},{"level":43,"move_id":153}],"rom_address":3306966},"rom_address":3296832,"tmhm_learnset":"00C01E00AC350720","types":[12,12]},{"abilities":[34,48],"base_stats":[70,70,40,60,60,40],"catch_rate":120,"evolutions":[{"method":"ITEM","param":98,"species":300}],"friendship":70,"id":299,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":3,"move_id":106},{"level":7,"move_id":74},{"level":13,"move_id":267},{"level":19,"move_id":252},{"level":25,"move_id":259},{"level":31,"move_id":185},{"level":37,"move_id":13},{"level":43,"move_id":207},{"level":49,"move_id":326}],"rom_address":3306988},"rom_address":3296860,"tmhm_learnset":"00E43F40EC354720","types":[12,17]},{"abilities":[34,48],"base_stats":[90,100,60,80,90,60],"catch_rate":45,"evolutions":[],"friendship":70,"id":300,"learnset":{"moves":[{"level":1,"move_id":1},{"level":1,"move_id":106},{"level":1,"move_id":74},{"level":1,"move_id":267}],"rom_address":3307016},"rom_address":3296888,"tmhm_learnset":"00E43FC0EC354720","types":[12,17]},{"abilities":[14,0],"base_stats":[31,45,90,40,30,30],"catch_rate":255,"evolutions":[{"method":"LEVEL_NINJASK","param":20,"species":302},{"method":"LEVEL_SHEDINJA","param":20,"species":303}],"friendship":70,"id":301,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":106},{"level":5,"move_id":141},{"level":9,"move_id":28},{"level":14,"move_id":154},{"level":19,"move_id":170},{"level":25,"move_id":206},{"level":31,"move_id":189},{"level":38,"move_id":232},{"level":45,"move_id":91}],"rom_address":3307026},"rom_address":3296916,"tmhm_learnset":"00440E90AC350620","types":[6,4]},{"abilities":[3,0],"base_stats":[61,90,45,160,50,50],"catch_rate":120,"evolutions":[],"friendship":70,"id":302,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":106},{"level":1,"move_id":141},{"level":1,"move_id":28},{"level":5,"move_id":141},{"level":9,"move_id":28},{"level":14,"move_id":154},{"level":19,"move_id":170},{"level":20,"move_id":104},{"level":20,"move_id":210},{"level":20,"move_id":103},{"level":25,"move_id":14},{"level":31,"move_id":163},{"level":38,"move_id":97},{"level":45,"move_id":226}],"rom_address":3307052},"rom_address":3296944,"tmhm_learnset":"00443E90AC354620","types":[6,2]},{"abilities":[25,0],"base_stats":[1,90,45,40,30,30],"catch_rate":45,"evolutions":[],"friendship":70,"id":303,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":106},{"level":5,"move_id":141},{"level":9,"move_id":28},{"level":14,"move_id":154},{"level":19,"move_id":170},{"level":25,"move_id":180},{"level":31,"move_id":109},{"level":38,"move_id":247},{"level":45,"move_id":288}],"rom_address":3307084},"rom_address":3296972,"tmhm_learnset":"00442E90AC354620","types":[6,7]},{"abilities":[62,0],"base_stats":[40,55,30,85,30,30],"catch_rate":200,"evolutions":[{"method":"LEVEL","param":22,"species":305}],"friendship":70,"id":304,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":1,"move_id":45},{"level":4,"move_id":116},{"level":8,"move_id":98},{"level":13,"move_id":17},{"level":19,"move_id":104},{"level":26,"move_id":283},{"level":34,"move_id":332},{"level":43,"move_id":97}],"rom_address":3307110},"rom_address":3297000,"tmhm_learnset":"00087E8084130620","types":[0,2]},{"abilities":[62,0],"base_stats":[60,85,60,125,50,50],"catch_rate":45,"evolutions":[],"friendship":70,"id":305,"learnset":{"moves":[{"level":1,"move_id":64},{"level":1,"move_id":45},{"level":1,"move_id":116},{"level":1,"move_id":98},{"level":4,"move_id":116},{"level":8,"move_id":98},{"level":13,"move_id":17},{"level":19,"move_id":104},{"level":28,"move_id":283},{"level":38,"move_id":332},{"level":49,"move_id":97}],"rom_address":3307134},"rom_address":3297028,"tmhm_learnset":"00087E8084134620","types":[0,2]},{"abilities":[27,0],"base_stats":[60,40,60,35,40,60],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":23,"species":307}],"friendship":70,"id":306,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":71},{"level":4,"move_id":33},{"level":7,"move_id":78},{"level":10,"move_id":73},{"level":16,"move_id":72},{"level":22,"move_id":29},{"level":28,"move_id":77},{"level":36,"move_id":74},{"level":45,"move_id":202},{"level":54,"move_id":147}],"rom_address":3307158},"rom_address":3297056,"tmhm_learnset":"00411E08843D0720","types":[12,12]},{"abilities":[27,0],"base_stats":[60,130,80,70,60,60],"catch_rate":90,"evolutions":[],"friendship":70,"id":307,"learnset":{"moves":[{"level":1,"move_id":71},{"level":1,"move_id":33},{"level":1,"move_id":78},{"level":1,"move_id":73},{"level":4,"move_id":33},{"level":7,"move_id":78},{"level":10,"move_id":73},{"level":16,"move_id":72},{"level":22,"move_id":29},{"level":23,"move_id":183},{"level":28,"move_id":68},{"level":36,"move_id":327},{"level":45,"move_id":170},{"level":54,"move_id":223}],"rom_address":3307186},"rom_address":3297084,"tmhm_learnset":"00E51E08C47D47A1","types":[12,1]},{"abilities":[20,0],"base_stats":[60,60,60,60,60,60],"catch_rate":255,"evolutions":[],"friendship":70,"id":308,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":5,"move_id":253},{"level":12,"move_id":185},{"level":16,"move_id":60},{"level":23,"move_id":95},{"level":27,"move_id":146},{"level":34,"move_id":298},{"level":38,"move_id":244},{"level":45,"move_id":38},{"level":49,"move_id":175},{"level":56,"move_id":37}],"rom_address":3307216},"rom_address":3297112,"tmhm_learnset":"00E1BE42FC1B062D","types":[0,0]},{"abilities":[51,0],"base_stats":[40,30,30,85,55,30],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":25,"species":310}],"friendship":70,"id":309,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":45},{"level":1,"move_id":55},{"level":7,"move_id":48},{"level":13,"move_id":17},{"level":21,"move_id":54},{"level":31,"move_id":98},{"level":43,"move_id":228},{"level":55,"move_id":97}],"rom_address":3307246},"rom_address":3297140,"tmhm_learnset":"00087E8284133264","types":[11,2]},{"abilities":[51,0],"base_stats":[60,50,100,65,85,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":310,"learnset":{"moves":[{"level":1,"move_id":45},{"level":1,"move_id":55},{"level":1,"move_id":346},{"level":1,"move_id":17},{"level":3,"move_id":55},{"level":7,"move_id":48},{"level":13,"move_id":17},{"level":21,"move_id":54},{"level":25,"move_id":182},{"level":33,"move_id":254},{"level":33,"move_id":256},{"level":47,"move_id":255},{"level":61,"move_id":56}],"rom_address":3307268},"rom_address":3297168,"tmhm_learnset":"00187E8284137264","types":[11,2]},{"abilities":[33,0],"base_stats":[40,30,32,65,50,52],"catch_rate":200,"evolutions":[{"method":"LEVEL","param":22,"species":312}],"friendship":70,"id":311,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":7,"move_id":98},{"level":13,"move_id":230},{"level":19,"move_id":346},{"level":25,"move_id":61},{"level":31,"move_id":97},{"level":37,"move_id":54},{"level":37,"move_id":114}],"rom_address":3307296},"rom_address":3297196,"tmhm_learnset":"00403E00A4373624","types":[6,11]},{"abilities":[22,0],"base_stats":[70,60,62,60,80,82],"catch_rate":75,"evolutions":[],"friendship":70,"id":312,"learnset":{"moves":[{"level":1,"move_id":145},{"level":1,"move_id":98},{"level":1,"move_id":230},{"level":1,"move_id":346},{"level":7,"move_id":98},{"level":13,"move_id":230},{"level":19,"move_id":346},{"level":26,"move_id":16},{"level":33,"move_id":184},{"level":40,"move_id":78},{"level":47,"move_id":318},{"level":53,"move_id":18}],"rom_address":3307320},"rom_address":3297224,"tmhm_learnset":"00403E80A4377624","types":[6,2]},{"abilities":[41,12],"base_stats":[130,70,35,60,70,35],"catch_rate":125,"evolutions":[{"method":"LEVEL","param":40,"species":314}],"friendship":70,"id":313,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":55},{"level":1,"move_id":150},{"level":5,"move_id":45},{"level":10,"move_id":55},{"level":14,"move_id":205},{"level":19,"move_id":250},{"level":23,"move_id":310},{"level":28,"move_id":352},{"level":32,"move_id":54},{"level":37,"move_id":156},{"level":41,"move_id":323},{"level":46,"move_id":133},{"level":50,"move_id":56}],"rom_address":3307346},"rom_address":3297252,"tmhm_learnset":"03B01E4086133274","types":[11,11]},{"abilities":[41,12],"base_stats":[170,90,45,60,90,45],"catch_rate":60,"evolutions":[],"friendship":70,"id":314,"learnset":{"moves":[{"level":1,"move_id":150},{"level":1,"move_id":45},{"level":1,"move_id":55},{"level":1,"move_id":205},{"level":5,"move_id":45},{"level":10,"move_id":55},{"level":14,"move_id":205},{"level":19,"move_id":250},{"level":23,"move_id":310},{"level":28,"move_id":352},{"level":32,"move_id":54},{"level":37,"move_id":156},{"level":44,"move_id":323},{"level":52,"move_id":133},{"level":59,"move_id":56}],"rom_address":3307378},"rom_address":3297280,"tmhm_learnset":"03B01E4086137274","types":[11,11]},{"abilities":[56,0],"base_stats":[50,45,45,50,35,35],"catch_rate":255,"evolutions":[{"method":"ITEM","param":94,"species":316}],"friendship":70,"id":315,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":45},{"level":1,"move_id":33},{"level":3,"move_id":39},{"level":7,"move_id":213},{"level":13,"move_id":47},{"level":15,"move_id":3},{"level":19,"move_id":274},{"level":25,"move_id":204},{"level":27,"move_id":185},{"level":31,"move_id":343},{"level":37,"move_id":215},{"level":39,"move_id":38}],"rom_address":3307410},"rom_address":3297308,"tmhm_learnset":"00401E02ADFB362C","types":[0,0]},{"abilities":[56,0],"base_stats":[70,65,65,70,55,55],"catch_rate":60,"evolutions":[],"friendship":70,"id":316,"learnset":{"moves":[{"level":1,"move_id":45},{"level":1,"move_id":213},{"level":1,"move_id":47},{"level":1,"move_id":3}],"rom_address":3307440},"rom_address":3297336,"tmhm_learnset":"00E01E02ADFB762C","types":[0,0]},{"abilities":[16,0],"base_stats":[60,90,70,40,60,120],"catch_rate":200,"evolutions":[],"friendship":70,"id":317,"learnset":{"moves":[{"level":1,"move_id":168},{"level":1,"move_id":39},{"level":1,"move_id":310},{"level":1,"move_id":122},{"level":1,"move_id":10},{"level":4,"move_id":20},{"level":7,"move_id":185},{"level":12,"move_id":154},{"level":17,"move_id":60},{"level":24,"move_id":103},{"level":31,"move_id":163},{"level":40,"move_id":164},{"level":49,"move_id":246}],"rom_address":3307450},"rom_address":3297364,"tmhm_learnset":"00E5BEE6EDF33625","types":[0,0]},{"abilities":[26,0],"base_stats":[40,40,55,55,40,70],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":36,"species":319}],"friendship":70,"id":318,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":93},{"level":3,"move_id":106},{"level":5,"move_id":229},{"level":7,"move_id":189},{"level":11,"move_id":60},{"level":15,"move_id":317},{"level":19,"move_id":120},{"level":25,"move_id":246},{"level":31,"move_id":201},{"level":37,"move_id":322},{"level":45,"move_id":153}],"rom_address":3307478},"rom_address":3297392,"tmhm_learnset":"00408E51BE339620","types":[4,14]},{"abilities":[26,0],"base_stats":[60,70,105,75,70,120],"catch_rate":90,"evolutions":[],"friendship":70,"id":319,"learnset":{"moves":[{"level":1,"move_id":100},{"level":1,"move_id":93},{"level":1,"move_id":106},{"level":1,"move_id":229},{"level":3,"move_id":106},{"level":5,"move_id":229},{"level":7,"move_id":189},{"level":11,"move_id":60},{"level":15,"move_id":317},{"level":19,"move_id":120},{"level":25,"move_id":246},{"level":31,"move_id":201},{"level":36,"move_id":63},{"level":42,"move_id":322},{"level":55,"move_id":153}],"rom_address":3307508},"rom_address":3297420,"tmhm_learnset":"00E08E51BE33D620","types":[4,14]},{"abilities":[5,42],"base_stats":[30,45,135,30,45,90],"catch_rate":255,"evolutions":[],"friendship":70,"id":320,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":7,"move_id":106},{"level":13,"move_id":88},{"level":16,"move_id":335},{"level":22,"move_id":86},{"level":28,"move_id":157},{"level":31,"move_id":201},{"level":37,"move_id":156},{"level":43,"move_id":192},{"level":46,"move_id":199}],"rom_address":3307540},"rom_address":3297448,"tmhm_learnset":"00A01F5287910E20","types":[5,5]},{"abilities":[73,0],"base_stats":[70,85,140,20,85,70],"catch_rate":90,"evolutions":[],"friendship":70,"id":321,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":52},{"level":4,"move_id":123},{"level":7,"move_id":174},{"level":14,"move_id":108},{"level":17,"move_id":83},{"level":20,"move_id":34},{"level":27,"move_id":182},{"level":30,"move_id":53},{"level":33,"move_id":334},{"level":40,"move_id":133},{"level":43,"move_id":175},{"level":46,"move_id":257}],"rom_address":3307568},"rom_address":3297476,"tmhm_learnset":"00A21E2C84510620","types":[10,10]},{"abilities":[51,0],"base_stats":[50,75,75,50,65,65],"catch_rate":45,"evolutions":[],"friendship":35,"id":322,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":10},{"level":5,"move_id":193},{"level":9,"move_id":101},{"level":13,"move_id":310},{"level":17,"move_id":154},{"level":21,"move_id":252},{"level":25,"move_id":197},{"level":29,"move_id":185},{"level":33,"move_id":282},{"level":37,"move_id":109},{"level":41,"move_id":247},{"level":45,"move_id":212}],"rom_address":3307600},"rom_address":3297504,"tmhm_learnset":"00C53FC2FC130E2D","types":[17,7]},{"abilities":[12,0],"base_stats":[50,48,43,60,46,41],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":30,"species":324}],"friendship":70,"id":323,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":189},{"level":6,"move_id":300},{"level":6,"move_id":346},{"level":11,"move_id":55},{"level":16,"move_id":222},{"level":21,"move_id":133},{"level":26,"move_id":156},{"level":26,"move_id":173},{"level":31,"move_id":89},{"level":36,"move_id":248},{"level":41,"move_id":90}],"rom_address":3307632},"rom_address":3297532,"tmhm_learnset":"03101E5086133264","types":[11,4]},{"abilities":[12,0],"base_stats":[110,78,73,60,76,71],"catch_rate":75,"evolutions":[],"friendship":70,"id":324,"learnset":{"moves":[{"level":1,"move_id":321},{"level":1,"move_id":189},{"level":1,"move_id":300},{"level":1,"move_id":346},{"level":6,"move_id":300},{"level":6,"move_id":346},{"level":11,"move_id":55},{"level":16,"move_id":222},{"level":21,"move_id":133},{"level":26,"move_id":156},{"level":26,"move_id":173},{"level":36,"move_id":89},{"level":46,"move_id":248},{"level":56,"move_id":90}],"rom_address":3307662},"rom_address":3297560,"tmhm_learnset":"03B01E5086137264","types":[11,4]},{"abilities":[33,0],"base_stats":[43,30,55,97,40,65],"catch_rate":225,"evolutions":[],"friendship":70,"id":325,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":4,"move_id":204},{"level":12,"move_id":55},{"level":16,"move_id":97},{"level":24,"move_id":36},{"level":28,"move_id":213},{"level":36,"move_id":186},{"level":40,"move_id":175},{"level":48,"move_id":219}],"rom_address":3307692},"rom_address":3297588,"tmhm_learnset":"03101E00841B3264","types":[11,11]},{"abilities":[52,75],"base_stats":[43,80,65,35,50,35],"catch_rate":205,"evolutions":[{"method":"LEVEL","param":30,"species":327}],"friendship":70,"id":326,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":7,"move_id":106},{"level":10,"move_id":11},{"level":13,"move_id":43},{"level":20,"move_id":61},{"level":23,"move_id":182},{"level":26,"move_id":282},{"level":32,"move_id":269},{"level":35,"move_id":152},{"level":38,"move_id":14},{"level":44,"move_id":12}],"rom_address":3307718},"rom_address":3297616,"tmhm_learnset":"01B41EC8CC133A64","types":[11,11]},{"abilities":[52,75],"base_stats":[63,120,85,55,90,55],"catch_rate":155,"evolutions":[],"friendship":70,"id":327,"learnset":{"moves":[{"level":1,"move_id":145},{"level":1,"move_id":106},{"level":1,"move_id":11},{"level":1,"move_id":43},{"level":7,"move_id":106},{"level":10,"move_id":11},{"level":13,"move_id":43},{"level":20,"move_id":61},{"level":23,"move_id":182},{"level":26,"move_id":282},{"level":34,"move_id":269},{"level":39,"move_id":152},{"level":44,"move_id":14},{"level":52,"move_id":12}],"rom_address":3307748},"rom_address":3297644,"tmhm_learnset":"03B41EC8CC137A64","types":[11,17]},{"abilities":[33,0],"base_stats":[20,15,20,80,10,55],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":30,"species":329}],"friendship":70,"id":328,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":150},{"level":15,"move_id":33},{"level":30,"move_id":175}],"rom_address":3307778},"rom_address":3297672,"tmhm_learnset":"03101E0084133264","types":[11,11]},{"abilities":[63,0],"base_stats":[95,60,79,81,100,125],"catch_rate":60,"evolutions":[],"friendship":70,"id":329,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":55},{"level":5,"move_id":35},{"level":10,"move_id":346},{"level":15,"move_id":287},{"level":20,"move_id":352},{"level":25,"move_id":239},{"level":30,"move_id":105},{"level":35,"move_id":240},{"level":40,"move_id":56},{"level":45,"move_id":213},{"level":50,"move_id":219}],"rom_address":3307792},"rom_address":3297700,"tmhm_learnset":"03101E00845B7264","types":[11,11]},{"abilities":[24,0],"base_stats":[45,90,20,65,65,20],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":30,"species":331}],"friendship":35,"id":330,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":44},{"level":7,"move_id":99},{"level":13,"move_id":116},{"level":16,"move_id":184},{"level":22,"move_id":242},{"level":28,"move_id":103},{"level":31,"move_id":36},{"level":37,"move_id":207},{"level":43,"move_id":97}],"rom_address":3307822},"rom_address":3297728,"tmhm_learnset":"03103F0084133A64","types":[11,17]},{"abilities":[24,0],"base_stats":[70,120,40,95,95,40],"catch_rate":60,"evolutions":[],"friendship":35,"id":331,"learnset":{"moves":[{"level":1,"move_id":43},{"level":1,"move_id":44},{"level":1,"move_id":99},{"level":1,"move_id":116},{"level":7,"move_id":99},{"level":13,"move_id":116},{"level":16,"move_id":184},{"level":22,"move_id":242},{"level":28,"move_id":103},{"level":33,"move_id":163},{"level":38,"move_id":269},{"level":43,"move_id":207},{"level":48,"move_id":130},{"level":53,"move_id":97}],"rom_address":3307848},"rom_address":3297756,"tmhm_learnset":"03B03F4086137A74","types":[11,17]},{"abilities":[52,71],"base_stats":[45,100,45,10,45,45],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":35,"species":333}],"friendship":70,"id":332,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":44},{"level":9,"move_id":28},{"level":17,"move_id":185},{"level":25,"move_id":328},{"level":33,"move_id":242},{"level":41,"move_id":91},{"level":49,"move_id":201},{"level":57,"move_id":63}],"rom_address":3307878},"rom_address":3297784,"tmhm_learnset":"00A01E508E354620","types":[4,4]},{"abilities":[26,26],"base_stats":[50,70,50,70,50,50],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":45,"species":334}],"friendship":70,"id":333,"learnset":{"moves":[{"level":1,"move_id":44},{"level":1,"move_id":28},{"level":1,"move_id":185},{"level":1,"move_id":328},{"level":9,"move_id":28},{"level":17,"move_id":185},{"level":25,"move_id":328},{"level":33,"move_id":242},{"level":35,"move_id":225},{"level":41,"move_id":103},{"level":49,"move_id":201},{"level":57,"move_id":63}],"rom_address":3307902},"rom_address":3297812,"tmhm_learnset":"00A85E508E354620","types":[4,16]},{"abilities":[26,26],"base_stats":[80,100,80,100,80,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":334,"learnset":{"moves":[{"level":1,"move_id":44},{"level":1,"move_id":28},{"level":1,"move_id":185},{"level":1,"move_id":328},{"level":9,"move_id":28},{"level":17,"move_id":185},{"level":25,"move_id":328},{"level":33,"move_id":242},{"level":35,"move_id":225},{"level":41,"move_id":103},{"level":53,"move_id":201},{"level":65,"move_id":63}],"rom_address":3307928},"rom_address":3297840,"tmhm_learnset":"00A85E748E754622","types":[4,16]},{"abilities":[47,62],"base_stats":[72,60,30,25,20,30],"catch_rate":180,"evolutions":[{"method":"LEVEL","param":24,"species":336}],"friendship":70,"id":335,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":116},{"level":4,"move_id":28},{"level":10,"move_id":292},{"level":13,"move_id":233},{"level":19,"move_id":252},{"level":22,"move_id":18},{"level":28,"move_id":282},{"level":31,"move_id":265},{"level":37,"move_id":187},{"level":40,"move_id":203},{"level":46,"move_id":69},{"level":49,"move_id":179}],"rom_address":3307954},"rom_address":3297868,"tmhm_learnset":"00B01E40CE1306A1","types":[1,1]},{"abilities":[47,62],"base_stats":[144,120,60,50,40,60],"catch_rate":200,"evolutions":[],"friendship":70,"id":336,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":116},{"level":1,"move_id":28},{"level":1,"move_id":292},{"level":4,"move_id":28},{"level":10,"move_id":292},{"level":13,"move_id":233},{"level":19,"move_id":252},{"level":22,"move_id":18},{"level":29,"move_id":282},{"level":33,"move_id":265},{"level":40,"move_id":187},{"level":44,"move_id":203},{"level":51,"move_id":69},{"level":55,"move_id":179}],"rom_address":3307986},"rom_address":3297896,"tmhm_learnset":"00B01E40CE1346A1","types":[1,1]},{"abilities":[9,31],"base_stats":[40,45,40,65,65,40],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":26,"species":338}],"friendship":70,"id":337,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":4,"move_id":86},{"level":9,"move_id":43},{"level":12,"move_id":336},{"level":17,"move_id":98},{"level":20,"move_id":209},{"level":25,"move_id":316},{"level":28,"move_id":46},{"level":33,"move_id":44},{"level":36,"move_id":87},{"level":41,"move_id":268}],"rom_address":3308018},"rom_address":3297924,"tmhm_learnset":"00603E0285D30230","types":[13,13]},{"abilities":[9,31],"base_stats":[70,75,60,105,105,60],"catch_rate":45,"evolutions":[],"friendship":70,"id":338,"learnset":{"moves":[{"level":1,"move_id":86},{"level":1,"move_id":43},{"level":1,"move_id":336},{"level":1,"move_id":33},{"level":4,"move_id":86},{"level":9,"move_id":43},{"level":12,"move_id":336},{"level":17,"move_id":98},{"level":20,"move_id":209},{"level":25,"move_id":316},{"level":31,"move_id":46},{"level":39,"move_id":44},{"level":45,"move_id":87},{"level":53,"move_id":268}],"rom_address":3308048},"rom_address":3297952,"tmhm_learnset":"00603E0285D34230","types":[13,13]},{"abilities":[12,0],"base_stats":[60,60,40,35,65,45],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":33,"species":340}],"friendship":70,"id":339,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":45},{"level":1,"move_id":33},{"level":11,"move_id":52},{"level":19,"move_id":222},{"level":25,"move_id":116},{"level":29,"move_id":36},{"level":31,"move_id":133},{"level":35,"move_id":89},{"level":41,"move_id":53},{"level":49,"move_id":38}],"rom_address":3308078},"rom_address":3297980,"tmhm_learnset":"00A21E748E110620","types":[10,4]},{"abilities":[40,0],"base_stats":[70,100,70,40,105,75],"catch_rate":150,"evolutions":[],"friendship":70,"id":340,"learnset":{"moves":[{"level":1,"move_id":45},{"level":1,"move_id":33},{"level":1,"move_id":52},{"level":1,"move_id":222},{"level":11,"move_id":52},{"level":19,"move_id":222},{"level":25,"move_id":116},{"level":29,"move_id":36},{"level":31,"move_id":133},{"level":33,"move_id":157},{"level":37,"move_id":89},{"level":45,"move_id":284},{"level":55,"move_id":90}],"rom_address":3308104},"rom_address":3298008,"tmhm_learnset":"00A21E748E114630","types":[10,4]},{"abilities":[47,0],"base_stats":[70,40,50,25,55,50],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":32,"species":342}],"friendship":70,"id":341,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":181},{"level":1,"move_id":45},{"level":1,"move_id":55},{"level":7,"move_id":227},{"level":13,"move_id":301},{"level":19,"move_id":34},{"level":25,"move_id":62},{"level":31,"move_id":258},{"level":37,"move_id":156},{"level":37,"move_id":173},{"level":43,"move_id":59},{"level":49,"move_id":329}],"rom_address":3308132},"rom_address":3298036,"tmhm_learnset":"03B01E4086533264","types":[15,11]},{"abilities":[47,0],"base_stats":[90,60,70,45,75,70],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":44,"species":343}],"friendship":70,"id":342,"learnset":{"moves":[{"level":1,"move_id":181},{"level":1,"move_id":45},{"level":1,"move_id":55},{"level":1,"move_id":227},{"level":7,"move_id":227},{"level":13,"move_id":301},{"level":19,"move_id":34},{"level":25,"move_id":62},{"level":31,"move_id":258},{"level":39,"move_id":156},{"level":39,"move_id":173},{"level":47,"move_id":59},{"level":55,"move_id":329}],"rom_address":3308160},"rom_address":3298064,"tmhm_learnset":"03B01E4086533274","types":[15,11]},{"abilities":[47,0],"base_stats":[110,80,90,65,95,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":343,"learnset":{"moves":[{"level":1,"move_id":181},{"level":1,"move_id":45},{"level":1,"move_id":55},{"level":1,"move_id":227},{"level":7,"move_id":227},{"level":13,"move_id":301},{"level":19,"move_id":34},{"level":25,"move_id":62},{"level":31,"move_id":258},{"level":39,"move_id":156},{"level":39,"move_id":173},{"level":50,"move_id":59},{"level":61,"move_id":329}],"rom_address":3308188},"rom_address":3298092,"tmhm_learnset":"03B01E4086537274","types":[15,11]},{"abilities":[8,0],"base_stats":[50,85,40,35,85,40],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":32,"species":345}],"friendship":35,"id":344,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":40},{"level":1,"move_id":43},{"level":5,"move_id":71},{"level":9,"move_id":74},{"level":13,"move_id":73},{"level":17,"move_id":28},{"level":21,"move_id":42},{"level":25,"move_id":275},{"level":29,"move_id":185},{"level":33,"move_id":191},{"level":37,"move_id":302},{"level":41,"move_id":178},{"level":45,"move_id":201}],"rom_address":3308216},"rom_address":3298120,"tmhm_learnset":"00441E1084350721","types":[12,12]},{"abilities":[8,0],"base_stats":[70,115,60,55,115,60],"catch_rate":60,"evolutions":[],"friendship":35,"id":345,"learnset":{"moves":[{"level":1,"move_id":40},{"level":1,"move_id":43},{"level":1,"move_id":71},{"level":1,"move_id":74},{"level":5,"move_id":71},{"level":9,"move_id":74},{"level":13,"move_id":73},{"level":17,"move_id":28},{"level":21,"move_id":42},{"level":25,"move_id":275},{"level":29,"move_id":185},{"level":35,"move_id":191},{"level":41,"move_id":302},{"level":47,"move_id":178},{"level":53,"move_id":201}],"rom_address":3308248},"rom_address":3298148,"tmhm_learnset":"00641E1084354721","types":[12,17]},{"abilities":[39,0],"base_stats":[50,50,50,50,50,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":42,"species":347}],"friendship":70,"id":346,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":181},{"level":1,"move_id":43},{"level":7,"move_id":104},{"level":10,"move_id":44},{"level":16,"move_id":196},{"level":19,"move_id":29},{"level":25,"move_id":182},{"level":28,"move_id":242},{"level":34,"move_id":58},{"level":37,"move_id":258},{"level":43,"move_id":59}],"rom_address":3308280},"rom_address":3298176,"tmhm_learnset":"00401E00A41BB264","types":[15,15]},{"abilities":[39,0],"base_stats":[80,80,80,80,80,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":347,"learnset":{"moves":[{"level":1,"move_id":181},{"level":1,"move_id":43},{"level":1,"move_id":104},{"level":1,"move_id":44},{"level":7,"move_id":104},{"level":10,"move_id":44},{"level":16,"move_id":196},{"level":19,"move_id":29},{"level":25,"move_id":182},{"level":28,"move_id":242},{"level":34,"move_id":58},{"level":42,"move_id":258},{"level":53,"move_id":59},{"level":61,"move_id":329}],"rom_address":3308308},"rom_address":3298204,"tmhm_learnset":"00401F00A61BFA64","types":[15,15]},{"abilities":[26,0],"base_stats":[70,55,65,70,95,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":348,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":7,"move_id":93},{"level":13,"move_id":88},{"level":19,"move_id":95},{"level":25,"move_id":149},{"level":31,"move_id":322},{"level":37,"move_id":94},{"level":43,"move_id":248},{"level":49,"move_id":153}],"rom_address":3308338},"rom_address":3298232,"tmhm_learnset":"00408E51B61BD228","types":[5,14]},{"abilities":[26,0],"base_stats":[70,95,85,70,55,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":349,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":7,"move_id":93},{"level":13,"move_id":88},{"level":19,"move_id":83},{"level":25,"move_id":149},{"level":31,"move_id":322},{"level":37,"move_id":157},{"level":43,"move_id":76},{"level":49,"move_id":153}],"rom_address":3308364},"rom_address":3298260,"tmhm_learnset":"00428E75B639C628","types":[5,14]},{"abilities":[47,37],"base_stats":[50,20,40,20,20,40],"catch_rate":150,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":183}],"friendship":70,"id":350,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":145},{"level":1,"move_id":150},{"level":3,"move_id":204},{"level":6,"move_id":39},{"level":10,"move_id":145},{"level":15,"move_id":21},{"level":21,"move_id":55}],"rom_address":3308390},"rom_address":3298288,"tmhm_learnset":"01101E0084533264","types":[0,0]},{"abilities":[47,20],"base_stats":[60,25,35,60,70,80],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":32,"species":352}],"friendship":70,"id":351,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":149},{"level":1,"move_id":150},{"level":7,"move_id":149},{"level":10,"move_id":316},{"level":16,"move_id":60},{"level":19,"move_id":244},{"level":25,"move_id":109},{"level":28,"move_id":277},{"level":34,"move_id":94},{"level":37,"move_id":156},{"level":37,"move_id":173},{"level":43,"move_id":340}],"rom_address":3308410},"rom_address":3298316,"tmhm_learnset":"0041BF03B4538E28","types":[14,14]},{"abilities":[47,20],"base_stats":[80,45,65,80,90,110],"catch_rate":60,"evolutions":[],"friendship":70,"id":352,"learnset":{"moves":[{"level":1,"move_id":150},{"level":1,"move_id":149},{"level":1,"move_id":316},{"level":1,"move_id":60},{"level":7,"move_id":149},{"level":10,"move_id":316},{"level":16,"move_id":60},{"level":19,"move_id":244},{"level":25,"move_id":109},{"level":28,"move_id":277},{"level":37,"move_id":94},{"level":43,"move_id":156},{"level":43,"move_id":173},{"level":55,"move_id":340}],"rom_address":3308440},"rom_address":3298344,"tmhm_learnset":"0041BF03B453CE29","types":[14,14]},{"abilities":[57,0],"base_stats":[60,50,40,95,85,75],"catch_rate":200,"evolutions":[],"friendship":70,"id":353,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":98},{"level":1,"move_id":45},{"level":4,"move_id":86},{"level":10,"move_id":98},{"level":13,"move_id":270},{"level":19,"move_id":209},{"level":22,"move_id":227},{"level":28,"move_id":313},{"level":31,"move_id":268},{"level":37,"move_id":87},{"level":40,"move_id":226},{"level":47,"move_id":97}],"rom_address":3308470},"rom_address":3298372,"tmhm_learnset":"00401E0285D38220","types":[13,13]},{"abilities":[58,0],"base_stats":[60,40,50,95,75,85],"catch_rate":200,"evolutions":[],"friendship":70,"id":354,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":98},{"level":1,"move_id":45},{"level":4,"move_id":86},{"level":10,"move_id":98},{"level":13,"move_id":270},{"level":19,"move_id":209},{"level":22,"move_id":227},{"level":28,"move_id":204},{"level":31,"move_id":268},{"level":37,"move_id":87},{"level":40,"move_id":226},{"level":47,"move_id":97}],"rom_address":3308500},"rom_address":3298400,"tmhm_learnset":"00401E0285D38220","types":[13,13]},{"abilities":[52,22],"base_stats":[50,85,85,50,55,55],"catch_rate":45,"evolutions":[],"friendship":70,"id":355,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":310},{"level":6,"move_id":313},{"level":11,"move_id":44},{"level":16,"move_id":230},{"level":21,"move_id":11},{"level":26,"move_id":185},{"level":31,"move_id":226},{"level":36,"move_id":242},{"level":41,"move_id":334},{"level":46,"move_id":254},{"level":46,"move_id":256},{"level":46,"move_id":255}],"rom_address":3308530},"rom_address":3298428,"tmhm_learnset":"00A01F7CC4335E21","types":[8,8]},{"abilities":[74,0],"base_stats":[30,40,55,60,40,55],"catch_rate":180,"evolutions":[{"method":"LEVEL","param":37,"species":357}],"friendship":70,"id":356,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":117},{"level":4,"move_id":96},{"level":9,"move_id":93},{"level":12,"move_id":197},{"level":18,"move_id":237},{"level":22,"move_id":170},{"level":28,"move_id":347},{"level":32,"move_id":136},{"level":38,"move_id":244},{"level":42,"move_id":179},{"level":48,"move_id":105}],"rom_address":3308562},"rom_address":3298456,"tmhm_learnset":"00E01E41F41386A9","types":[1,14]},{"abilities":[74,0],"base_stats":[60,60,75,80,60,75],"catch_rate":90,"evolutions":[],"friendship":70,"id":357,"learnset":{"moves":[{"level":1,"move_id":7},{"level":1,"move_id":9},{"level":1,"move_id":8},{"level":1,"move_id":117},{"level":1,"move_id":96},{"level":1,"move_id":93},{"level":1,"move_id":197},{"level":4,"move_id":96},{"level":9,"move_id":93},{"level":12,"move_id":197},{"level":18,"move_id":237},{"level":22,"move_id":170},{"level":28,"move_id":347},{"level":32,"move_id":136},{"level":40,"move_id":244},{"level":46,"move_id":179},{"level":54,"move_id":105}],"rom_address":3308592},"rom_address":3298484,"tmhm_learnset":"00E01E41F413C6A9","types":[1,14]},{"abilities":[30,0],"base_stats":[45,40,60,50,40,75],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":35,"species":359}],"friendship":70,"id":358,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":64},{"level":1,"move_id":45},{"level":8,"move_id":310},{"level":11,"move_id":47},{"level":18,"move_id":31},{"level":21,"move_id":219},{"level":28,"move_id":54},{"level":31,"move_id":36},{"level":38,"move_id":119},{"level":41,"move_id":287},{"level":48,"move_id":195}],"rom_address":3308628},"rom_address":3298512,"tmhm_learnset":"00087E80843B1620","types":[0,2]},{"abilities":[30,0],"base_stats":[75,70,90,80,70,105],"catch_rate":45,"evolutions":[],"friendship":70,"id":359,"learnset":{"moves":[{"level":1,"move_id":64},{"level":1,"move_id":45},{"level":1,"move_id":310},{"level":1,"move_id":47},{"level":8,"move_id":310},{"level":11,"move_id":47},{"level":18,"move_id":31},{"level":21,"move_id":219},{"level":28,"move_id":54},{"level":31,"move_id":36},{"level":35,"move_id":225},{"level":40,"move_id":349},{"level":45,"move_id":287},{"level":54,"move_id":195},{"level":59,"move_id":143}],"rom_address":3308656},"rom_address":3298540,"tmhm_learnset":"00887EA4867B5632","types":[16,2]},{"abilities":[23,0],"base_stats":[95,23,48,23,23,48],"catch_rate":125,"evolutions":[{"method":"LEVEL","param":15,"species":202}],"friendship":70,"id":360,"learnset":{"moves":[{"level":1,"move_id":68},{"level":1,"move_id":150},{"level":1,"move_id":204},{"level":1,"move_id":227},{"level":15,"move_id":68},{"level":15,"move_id":243},{"level":15,"move_id":219},{"level":15,"move_id":194}],"rom_address":3308688},"rom_address":3298568,"tmhm_learnset":"0000000000000000","types":[14,14]},{"abilities":[26,0],"base_stats":[20,40,90,25,30,90],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":37,"species":362}],"friendship":35,"id":361,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":101},{"level":5,"move_id":50},{"level":12,"move_id":193},{"level":16,"move_id":310},{"level":23,"move_id":109},{"level":27,"move_id":228},{"level":34,"move_id":174},{"level":38,"move_id":261},{"level":45,"move_id":212},{"level":49,"move_id":248}],"rom_address":3308706},"rom_address":3298596,"tmhm_learnset":"0041BF00B4133E28","types":[7,7]},{"abilities":[46,0],"base_stats":[40,70,130,25,60,130],"catch_rate":90,"evolutions":[],"friendship":35,"id":362,"learnset":{"moves":[{"level":1,"move_id":20},{"level":1,"move_id":43},{"level":1,"move_id":101},{"level":1,"move_id":50},{"level":5,"move_id":50},{"level":12,"move_id":193},{"level":16,"move_id":310},{"level":23,"move_id":109},{"level":27,"move_id":228},{"level":34,"move_id":174},{"level":37,"move_id":325},{"level":41,"move_id":261},{"level":51,"move_id":212},{"level":58,"move_id":248}],"rom_address":3308734},"rom_address":3298624,"tmhm_learnset":"00E1BF40B6137E29","types":[7,7]},{"abilities":[30,38],"base_stats":[50,60,45,65,100,80],"catch_rate":150,"evolutions":[],"friendship":70,"id":363,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":71},{"level":5,"move_id":74},{"level":9,"move_id":40},{"level":13,"move_id":78},{"level":17,"move_id":72},{"level":21,"move_id":73},{"level":25,"move_id":345},{"level":29,"move_id":320},{"level":33,"move_id":202},{"level":37,"move_id":230},{"level":41,"move_id":275},{"level":45,"move_id":92},{"level":49,"move_id":80},{"level":53,"move_id":312},{"level":57,"move_id":235}],"rom_address":3308764},"rom_address":3298652,"tmhm_learnset":"00441E08A4350720","types":[12,3]},{"abilities":[54,0],"base_stats":[60,60,60,30,35,35],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":365}],"friendship":70,"id":364,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":1,"move_id":281},{"level":7,"move_id":227},{"level":13,"move_id":303},{"level":19,"move_id":185},{"level":25,"move_id":133},{"level":31,"move_id":343},{"level":37,"move_id":68},{"level":43,"move_id":175}],"rom_address":3308802},"rom_address":3298680,"tmhm_learnset":"00A41EA6E5B336A5","types":[0,0]},{"abilities":[72,0],"base_stats":[80,80,80,90,55,55],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":36,"species":366}],"friendship":70,"id":365,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":116},{"level":1,"move_id":227},{"level":1,"move_id":253},{"level":7,"move_id":227},{"level":13,"move_id":253},{"level":19,"move_id":154},{"level":25,"move_id":203},{"level":31,"move_id":163},{"level":37,"move_id":68},{"level":43,"move_id":264},{"level":49,"move_id":179}],"rom_address":3308826},"rom_address":3298708,"tmhm_learnset":"00A41EA6E7B33EB5","types":[0,0]},{"abilities":[54,0],"base_stats":[150,160,100,100,95,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":366,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":281},{"level":1,"move_id":227},{"level":1,"move_id":303},{"level":7,"move_id":227},{"level":13,"move_id":303},{"level":19,"move_id":185},{"level":25,"move_id":133},{"level":31,"move_id":343},{"level":36,"move_id":207},{"level":37,"move_id":68},{"level":43,"move_id":175}],"rom_address":3308852},"rom_address":3298736,"tmhm_learnset":"00A41EA6E7B37EB5","types":[0,0]},{"abilities":[64,60],"base_stats":[70,43,53,40,43,53],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":26,"species":368}],"friendship":70,"id":367,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":6,"move_id":281},{"level":9,"move_id":139},{"level":14,"move_id":124},{"level":17,"move_id":133},{"level":23,"move_id":227},{"level":28,"move_id":92},{"level":34,"move_id":254},{"level":34,"move_id":255},{"level":34,"move_id":256},{"level":39,"move_id":188}],"rom_address":3308878},"rom_address":3298764,"tmhm_learnset":"00A11E0AA4371724","types":[3,3]},{"abilities":[64,60],"base_stats":[100,73,83,55,73,83],"catch_rate":75,"evolutions":[],"friendship":70,"id":368,"learnset":{"moves":[{"level":1,"move_id":1},{"level":1,"move_id":281},{"level":1,"move_id":139},{"level":1,"move_id":124},{"level":6,"move_id":281},{"level":9,"move_id":139},{"level":14,"move_id":124},{"level":17,"move_id":133},{"level":23,"move_id":227},{"level":26,"move_id":34},{"level":31,"move_id":92},{"level":40,"move_id":254},{"level":40,"move_id":255},{"level":40,"move_id":256},{"level":48,"move_id":188}],"rom_address":3308908},"rom_address":3298792,"tmhm_learnset":"00A11E0AA4375724","types":[3,3]},{"abilities":[34,0],"base_stats":[99,68,83,51,72,87],"catch_rate":200,"evolutions":[],"friendship":70,"id":369,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":16},{"level":7,"move_id":74},{"level":11,"move_id":75},{"level":17,"move_id":23},{"level":21,"move_id":230},{"level":27,"move_id":18},{"level":31,"move_id":345},{"level":37,"move_id":34},{"level":41,"move_id":76},{"level":47,"move_id":235}],"rom_address":3308940},"rom_address":3298820,"tmhm_learnset":"00EC5E80863D4730","types":[12,2]},{"abilities":[43,0],"base_stats":[64,51,23,28,51,23],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":20,"species":371}],"friendship":70,"id":370,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":1},{"level":5,"move_id":253},{"level":11,"move_id":310},{"level":15,"move_id":336},{"level":21,"move_id":48},{"level":25,"move_id":23},{"level":31,"move_id":103},{"level":35,"move_id":46},{"level":41,"move_id":156},{"level":41,"move_id":214},{"level":45,"move_id":304}],"rom_address":3308968},"rom_address":3298848,"tmhm_learnset":"00001E26A4333634","types":[0,0]},{"abilities":[43,0],"base_stats":[84,71,43,48,71,43],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":40,"species":372}],"friendship":70,"id":371,"learnset":{"moves":[{"level":1,"move_id":1},{"level":1,"move_id":253},{"level":1,"move_id":310},{"level":1,"move_id":336},{"level":5,"move_id":253},{"level":11,"move_id":310},{"level":15,"move_id":336},{"level":23,"move_id":48},{"level":29,"move_id":23},{"level":37,"move_id":103},{"level":43,"move_id":46},{"level":51,"move_id":156},{"level":51,"move_id":214},{"level":57,"move_id":304}],"rom_address":3308998},"rom_address":3298876,"tmhm_learnset":"00A21F26E6333E34","types":[0,0]},{"abilities":[43,0],"base_stats":[104,91,63,68,91,63],"catch_rate":45,"evolutions":[],"friendship":70,"id":372,"learnset":{"moves":[{"level":1,"move_id":1},{"level":1,"move_id":253},{"level":1,"move_id":310},{"level":1,"move_id":336},{"level":5,"move_id":253},{"level":11,"move_id":310},{"level":15,"move_id":336},{"level":23,"move_id":48},{"level":29,"move_id":23},{"level":37,"move_id":103},{"level":40,"move_id":63},{"level":45,"move_id":46},{"level":55,"move_id":156},{"level":55,"move_id":214},{"level":63,"move_id":304}],"rom_address":3309028},"rom_address":3298904,"tmhm_learnset":"00A21F26E6337E34","types":[0,0]},{"abilities":[75,0],"base_stats":[35,64,85,32,74,55],"catch_rate":255,"evolutions":[{"method":"ITEM","param":192,"species":374},{"method":"ITEM","param":193,"species":375}],"friendship":70,"id":373,"learnset":{"moves":[{"level":1,"move_id":128},{"level":1,"move_id":55},{"level":1,"move_id":250},{"level":1,"move_id":334}],"rom_address":3309060},"rom_address":3298932,"tmhm_learnset":"03101E0084133264","types":[11,11]},{"abilities":[33,0],"base_stats":[55,104,105,52,94,75],"catch_rate":60,"evolutions":[],"friendship":70,"id":374,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":250},{"level":8,"move_id":44},{"level":15,"move_id":103},{"level":22,"move_id":352},{"level":29,"move_id":184},{"level":36,"move_id":242},{"level":43,"move_id":226},{"level":50,"move_id":56}],"rom_address":3309070},"rom_address":3298960,"tmhm_learnset":"03111E4084137264","types":[11,11]},{"abilities":[33,0],"base_stats":[55,84,105,52,114,75],"catch_rate":60,"evolutions":[],"friendship":70,"id":375,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":250},{"level":8,"move_id":93},{"level":15,"move_id":97},{"level":22,"move_id":352},{"level":29,"move_id":133},{"level":36,"move_id":94},{"level":43,"move_id":226},{"level":50,"move_id":56}],"rom_address":3309094},"rom_address":3298988,"tmhm_learnset":"03101E00B41B7264","types":[11,11]},{"abilities":[46,0],"base_stats":[65,130,60,75,75,60],"catch_rate":30,"evolutions":[],"friendship":35,"id":376,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":5,"move_id":43},{"level":9,"move_id":269},{"level":13,"move_id":98},{"level":17,"move_id":13},{"level":21,"move_id":44},{"level":26,"move_id":14},{"level":31,"move_id":104},{"level":36,"move_id":163},{"level":41,"move_id":248},{"level":46,"move_id":195}],"rom_address":3309118},"rom_address":3299016,"tmhm_learnset":"00E53FB6A5D37E6C","types":[17,17]},{"abilities":[15,0],"base_stats":[44,75,35,45,63,33],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":37,"species":378}],"friendship":35,"id":377,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":282},{"level":8,"move_id":103},{"level":13,"move_id":101},{"level":20,"move_id":174},{"level":25,"move_id":180},{"level":32,"move_id":261},{"level":37,"move_id":185},{"level":44,"move_id":247},{"level":49,"move_id":289},{"level":56,"move_id":288}],"rom_address":3309148},"rom_address":3299044,"tmhm_learnset":"0041BF02B5930E28","types":[7,7]},{"abilities":[15,0],"base_stats":[64,115,65,65,83,63],"catch_rate":45,"evolutions":[],"friendship":35,"id":378,"learnset":{"moves":[{"level":1,"move_id":282},{"level":1,"move_id":103},{"level":1,"move_id":101},{"level":1,"move_id":174},{"level":8,"move_id":103},{"level":13,"move_id":101},{"level":20,"move_id":174},{"level":25,"move_id":180},{"level":32,"move_id":261},{"level":39,"move_id":185},{"level":48,"move_id":247},{"level":55,"move_id":289},{"level":64,"move_id":288}],"rom_address":3309176},"rom_address":3299072,"tmhm_learnset":"0041BF02B5934E28","types":[7,7]},{"abilities":[61,0],"base_stats":[73,100,60,65,100,60],"catch_rate":90,"evolutions":[],"friendship":70,"id":379,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":35},{"level":7,"move_id":122},{"level":10,"move_id":44},{"level":16,"move_id":342},{"level":19,"move_id":103},{"level":25,"move_id":137},{"level":28,"move_id":242},{"level":34,"move_id":305},{"level":37,"move_id":207},{"level":43,"move_id":114}],"rom_address":3309204},"rom_address":3299100,"tmhm_learnset":"00A13E0C8E570E20","types":[3,3]},{"abilities":[17,0],"base_stats":[73,115,60,90,60,60],"catch_rate":90,"evolutions":[],"friendship":70,"id":380,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":4,"move_id":43},{"level":7,"move_id":98},{"level":10,"move_id":14},{"level":13,"move_id":210},{"level":19,"move_id":163},{"level":25,"move_id":228},{"level":31,"move_id":306},{"level":37,"move_id":269},{"level":46,"move_id":197},{"level":55,"move_id":206}],"rom_address":3309232},"rom_address":3299128,"tmhm_learnset":"00A03EA6EDF73E35","types":[0,0]},{"abilities":[33,69],"base_stats":[100,90,130,55,45,65],"catch_rate":25,"evolutions":[],"friendship":70,"id":381,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":8,"move_id":55},{"level":15,"move_id":317},{"level":22,"move_id":281},{"level":29,"move_id":36},{"level":36,"move_id":300},{"level":43,"move_id":246},{"level":50,"move_id":156},{"level":57,"move_id":38},{"level":64,"move_id":56}],"rom_address":3309262},"rom_address":3299156,"tmhm_learnset":"03901E50861B726C","types":[11,5]},{"abilities":[5,69],"base_stats":[50,70,100,30,40,40],"catch_rate":180,"evolutions":[{"method":"LEVEL","param":32,"species":383}],"friendship":35,"id":382,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":4,"move_id":106},{"level":7,"move_id":189},{"level":10,"move_id":29},{"level":13,"move_id":232},{"level":17,"move_id":334},{"level":21,"move_id":46},{"level":25,"move_id":36},{"level":29,"move_id":231},{"level":34,"move_id":182},{"level":39,"move_id":319},{"level":44,"move_id":38}],"rom_address":3309290},"rom_address":3299184,"tmhm_learnset":"00A41ED28E530634","types":[8,5]},{"abilities":[5,69],"base_stats":[60,90,140,40,50,50],"catch_rate":90,"evolutions":[{"method":"LEVEL","param":42,"species":384}],"friendship":35,"id":383,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":1,"move_id":189},{"level":1,"move_id":29},{"level":4,"move_id":106},{"level":7,"move_id":189},{"level":10,"move_id":29},{"level":13,"move_id":232},{"level":17,"move_id":334},{"level":21,"move_id":46},{"level":25,"move_id":36},{"level":29,"move_id":231},{"level":37,"move_id":182},{"level":45,"move_id":319},{"level":53,"move_id":38}],"rom_address":3309322},"rom_address":3299212,"tmhm_learnset":"00A41ED28E530634","types":[8,5]},{"abilities":[5,69],"base_stats":[70,110,180,50,60,60],"catch_rate":45,"evolutions":[],"friendship":35,"id":384,"learnset":{"moves":[{"level":1,"move_id":33},{"level":1,"move_id":106},{"level":1,"move_id":189},{"level":1,"move_id":29},{"level":4,"move_id":106},{"level":7,"move_id":189},{"level":10,"move_id":29},{"level":13,"move_id":232},{"level":17,"move_id":334},{"level":21,"move_id":46},{"level":25,"move_id":36},{"level":29,"move_id":231},{"level":37,"move_id":182},{"level":50,"move_id":319},{"level":63,"move_id":38}],"rom_address":3309354},"rom_address":3299240,"tmhm_learnset":"00B41EF6CFF37E37","types":[8,5]},{"abilities":[59,0],"base_stats":[70,70,70,70,70,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":385,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":10,"move_id":55},{"level":10,"move_id":52},{"level":10,"move_id":181},{"level":20,"move_id":240},{"level":20,"move_id":241},{"level":20,"move_id":258},{"level":30,"move_id":311}],"rom_address":3309386},"rom_address":3299268,"tmhm_learnset":"00403E36A5B33664","types":[0,0]},{"abilities":[35,68],"base_stats":[65,73,55,85,47,75],"catch_rate":150,"evolutions":[],"friendship":70,"id":386,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":5,"move_id":109},{"level":9,"move_id":104},{"level":13,"move_id":236},{"level":17,"move_id":98},{"level":21,"move_id":294},{"level":25,"move_id":324},{"level":29,"move_id":182},{"level":33,"move_id":270},{"level":37,"move_id":38}],"rom_address":3309410},"rom_address":3299296,"tmhm_learnset":"00403E82E5B78625","types":[6,6]},{"abilities":[12,0],"base_stats":[65,47,55,85,73,75],"catch_rate":150,"evolutions":[],"friendship":70,"id":387,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":5,"move_id":230},{"level":9,"move_id":204},{"level":13,"move_id":236},{"level":17,"move_id":98},{"level":21,"move_id":273},{"level":25,"move_id":227},{"level":29,"move_id":260},{"level":33,"move_id":270},{"level":37,"move_id":343}],"rom_address":3309438},"rom_address":3299324,"tmhm_learnset":"00403E82E5B78625","types":[6,6]},{"abilities":[21,0],"base_stats":[66,41,77,23,61,87],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":40,"species":389}],"friendship":70,"id":388,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":310},{"level":8,"move_id":132},{"level":15,"move_id":51},{"level":22,"move_id":275},{"level":29,"move_id":109},{"level":36,"move_id":133},{"level":43,"move_id":246},{"level":50,"move_id":254},{"level":50,"move_id":255},{"level":50,"move_id":256}],"rom_address":3309466},"rom_address":3299352,"tmhm_learnset":"00001E1884350720","types":[5,12]},{"abilities":[21,0],"base_stats":[86,81,97,43,81,107],"catch_rate":45,"evolutions":[],"friendship":70,"id":389,"learnset":{"moves":[{"level":1,"move_id":310},{"level":1,"move_id":132},{"level":1,"move_id":51},{"level":1,"move_id":275},{"level":8,"move_id":132},{"level":15,"move_id":51},{"level":22,"move_id":275},{"level":29,"move_id":109},{"level":36,"move_id":133},{"level":48,"move_id":246},{"level":60,"move_id":254},{"level":60,"move_id":255},{"level":60,"move_id":256}],"rom_address":3309494},"rom_address":3299380,"tmhm_learnset":"00A01E5886354720","types":[5,12]},{"abilities":[4,0],"base_stats":[45,95,50,75,40,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":40,"species":391}],"friendship":70,"id":390,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":10},{"level":7,"move_id":106},{"level":13,"move_id":300},{"level":19,"move_id":55},{"level":25,"move_id":232},{"level":31,"move_id":182},{"level":37,"move_id":246},{"level":43,"move_id":210},{"level":49,"move_id":163},{"level":55,"move_id":350}],"rom_address":3309522},"rom_address":3299408,"tmhm_learnset":"00841ED0CC110624","types":[5,6]},{"abilities":[4,0],"base_stats":[75,125,100,45,70,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":391,"learnset":{"moves":[{"level":1,"move_id":10},{"level":1,"move_id":106},{"level":1,"move_id":300},{"level":1,"move_id":55},{"level":7,"move_id":106},{"level":13,"move_id":300},{"level":19,"move_id":55},{"level":25,"move_id":232},{"level":31,"move_id":182},{"level":37,"move_id":246},{"level":46,"move_id":210},{"level":55,"move_id":163},{"level":64,"move_id":350}],"rom_address":3309550},"rom_address":3299436,"tmhm_learnset":"00A41ED0CE514624","types":[5,6]},{"abilities":[28,36],"base_stats":[28,25,25,40,45,35],"catch_rate":235,"evolutions":[{"method":"LEVEL","param":20,"species":393}],"friendship":35,"id":392,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":93},{"level":1,"move_id":45},{"level":6,"move_id":93},{"level":11,"move_id":104},{"level":16,"move_id":100},{"level":21,"move_id":347},{"level":26,"move_id":94},{"level":31,"move_id":286},{"level":36,"move_id":248},{"level":41,"move_id":95},{"level":46,"move_id":138}],"rom_address":3309578},"rom_address":3299464,"tmhm_learnset":"0041BF03B49B8E28","types":[14,14]},{"abilities":[28,36],"base_stats":[38,35,35,50,65,55],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":30,"species":394}],"friendship":35,"id":393,"learnset":{"moves":[{"level":1,"move_id":45},{"level":1,"move_id":93},{"level":1,"move_id":104},{"level":1,"move_id":100},{"level":6,"move_id":93},{"level":11,"move_id":104},{"level":16,"move_id":100},{"level":21,"move_id":347},{"level":26,"move_id":94},{"level":33,"move_id":286},{"level":40,"move_id":248},{"level":47,"move_id":95},{"level":54,"move_id":138}],"rom_address":3309606},"rom_address":3299492,"tmhm_learnset":"0041BF03B49B8E28","types":[14,14]},{"abilities":[28,36],"base_stats":[68,65,65,80,125,115],"catch_rate":45,"evolutions":[],"friendship":35,"id":394,"learnset":{"moves":[{"level":1,"move_id":45},{"level":1,"move_id":93},{"level":1,"move_id":104},{"level":1,"move_id":100},{"level":6,"move_id":93},{"level":11,"move_id":104},{"level":16,"move_id":100},{"level":21,"move_id":347},{"level":26,"move_id":94},{"level":33,"move_id":286},{"level":42,"move_id":248},{"level":51,"move_id":95},{"level":60,"move_id":138}],"rom_address":3309634},"rom_address":3299520,"tmhm_learnset":"0041BF03B49BCE28","types":[14,14]},{"abilities":[69,0],"base_stats":[45,75,60,50,40,30],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":396}],"friendship":35,"id":395,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":99},{"level":5,"move_id":44},{"level":9,"move_id":43},{"level":17,"move_id":29},{"level":21,"move_id":116},{"level":25,"move_id":52},{"level":33,"move_id":225},{"level":37,"move_id":184},{"level":41,"move_id":242},{"level":49,"move_id":337},{"level":53,"move_id":38}],"rom_address":3309662},"rom_address":3299548,"tmhm_learnset":"00A41EE4C4130632","types":[16,16]},{"abilities":[69,0],"base_stats":[65,95,100,50,60,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":50,"species":397}],"friendship":35,"id":396,"learnset":{"moves":[{"level":1,"move_id":99},{"level":1,"move_id":44},{"level":1,"move_id":43},{"level":1,"move_id":29},{"level":5,"move_id":44},{"level":9,"move_id":43},{"level":17,"move_id":29},{"level":21,"move_id":116},{"level":25,"move_id":52},{"level":30,"move_id":182},{"level":38,"move_id":225},{"level":47,"move_id":184},{"level":56,"move_id":242},{"level":69,"move_id":337},{"level":78,"move_id":38}],"rom_address":3309692},"rom_address":3299576,"tmhm_learnset":"00A41EE4C4130632","types":[16,16]},{"abilities":[22,0],"base_stats":[95,135,80,100,110,80],"catch_rate":45,"evolutions":[],"friendship":35,"id":397,"learnset":{"moves":[{"level":1,"move_id":99},{"level":1,"move_id":44},{"level":1,"move_id":43},{"level":1,"move_id":29},{"level":5,"move_id":44},{"level":9,"move_id":43},{"level":17,"move_id":29},{"level":21,"move_id":116},{"level":25,"move_id":52},{"level":30,"move_id":182},{"level":38,"move_id":225},{"level":47,"move_id":184},{"level":50,"move_id":19},{"level":61,"move_id":242},{"level":79,"move_id":337},{"level":93,"move_id":38}],"rom_address":3309724},"rom_address":3299604,"tmhm_learnset":"00AC5EE4C6534632","types":[16,2]},{"abilities":[29,0],"base_stats":[40,55,80,30,35,60],"catch_rate":3,"evolutions":[{"method":"LEVEL","param":20,"species":399}],"friendship":35,"id":398,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":36}],"rom_address":3309758},"rom_address":3299632,"tmhm_learnset":"0000000000000000","types":[8,14]},{"abilities":[29,0],"base_stats":[60,75,100,50,55,80],"catch_rate":3,"evolutions":[{"method":"LEVEL","param":45,"species":400}],"friendship":35,"id":399,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":36},{"level":20,"move_id":93},{"level":20,"move_id":232},{"level":26,"move_id":184},{"level":32,"move_id":228},{"level":38,"move_id":94},{"level":44,"move_id":334},{"level":50,"move_id":309},{"level":56,"move_id":97},{"level":62,"move_id":63}],"rom_address":3309768},"rom_address":3299660,"tmhm_learnset":"00E40ED9F613C620","types":[8,14]},{"abilities":[29,0],"base_stats":[80,135,130,70,95,90],"catch_rate":3,"evolutions":[],"friendship":35,"id":400,"learnset":{"moves":[{"level":1,"move_id":36},{"level":1,"move_id":93},{"level":1,"move_id":232},{"level":1,"move_id":184},{"level":20,"move_id":93},{"level":20,"move_id":232},{"level":26,"move_id":184},{"level":32,"move_id":228},{"level":38,"move_id":94},{"level":44,"move_id":334},{"level":55,"move_id":309},{"level":66,"move_id":97},{"level":77,"move_id":63}],"rom_address":3309796},"rom_address":3299688,"tmhm_learnset":"00E40ED9F613C620","types":[8,14]},{"abilities":[29,0],"base_stats":[80,100,200,50,50,100],"catch_rate":3,"evolutions":[],"friendship":35,"id":401,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":88},{"level":1,"move_id":153},{"level":9,"move_id":88},{"level":17,"move_id":174},{"level":25,"move_id":276},{"level":33,"move_id":246},{"level":41,"move_id":334},{"level":49,"move_id":192},{"level":57,"move_id":199},{"level":65,"move_id":63}],"rom_address":3309824},"rom_address":3299716,"tmhm_learnset":"00A00E52CF994621","types":[5,5]},{"abilities":[29,0],"base_stats":[80,50,100,50,100,200],"catch_rate":3,"evolutions":[],"friendship":35,"id":402,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":196},{"level":1,"move_id":153},{"level":9,"move_id":196},{"level":17,"move_id":174},{"level":25,"move_id":276},{"level":33,"move_id":246},{"level":41,"move_id":133},{"level":49,"move_id":192},{"level":57,"move_id":199},{"level":65,"move_id":63}],"rom_address":3309850},"rom_address":3299744,"tmhm_learnset":"00A00E02C79B7261","types":[15,15]},{"abilities":[29,0],"base_stats":[80,75,150,50,75,150],"catch_rate":3,"evolutions":[],"friendship":35,"id":403,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":232},{"level":1,"move_id":153},{"level":9,"move_id":232},{"level":17,"move_id":174},{"level":25,"move_id":276},{"level":33,"move_id":246},{"level":41,"move_id":334},{"level":41,"move_id":133},{"level":49,"move_id":192},{"level":57,"move_id":199},{"level":65,"move_id":63}],"rom_address":3309876},"rom_address":3299772,"tmhm_learnset":"00A00ED2C79B4621","types":[8,8]},{"abilities":[2,0],"base_stats":[100,100,90,90,150,140],"catch_rate":5,"evolutions":[],"friendship":0,"id":404,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":352},{"level":5,"move_id":184},{"level":15,"move_id":246},{"level":20,"move_id":34},{"level":30,"move_id":347},{"level":35,"move_id":58},{"level":45,"move_id":56},{"level":50,"move_id":156},{"level":60,"move_id":329},{"level":65,"move_id":38},{"level":75,"move_id":323}],"rom_address":3309904},"rom_address":3299800,"tmhm_learnset":"03B00E42C79B727C","types":[11,11]},{"abilities":[70,0],"base_stats":[100,150,140,90,100,90],"catch_rate":5,"evolutions":[],"friendship":0,"id":405,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":341},{"level":5,"move_id":184},{"level":15,"move_id":246},{"level":20,"move_id":163},{"level":30,"move_id":339},{"level":35,"move_id":89},{"level":45,"move_id":126},{"level":50,"move_id":156},{"level":60,"move_id":90},{"level":65,"move_id":76},{"level":75,"move_id":284}],"rom_address":3309934},"rom_address":3299828,"tmhm_learnset":"00A60EF6CFF946B2","types":[4,4]},{"abilities":[77,0],"base_stats":[105,150,90,95,150,90],"catch_rate":3,"evolutions":[],"friendship":0,"id":406,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":239},{"level":5,"move_id":184},{"level":15,"move_id":246},{"level":20,"move_id":337},{"level":30,"move_id":349},{"level":35,"move_id":242},{"level":45,"move_id":19},{"level":50,"move_id":156},{"level":60,"move_id":245},{"level":65,"move_id":200},{"level":75,"move_id":63}],"rom_address":3309964},"rom_address":3299856,"tmhm_learnset":"03BA0EB6C7F376B6","types":[16,2]},{"abilities":[26,0],"base_stats":[80,80,90,110,110,130],"catch_rate":3,"evolutions":[],"friendship":90,"id":407,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":149},{"level":5,"move_id":273},{"level":10,"move_id":270},{"level":15,"move_id":219},{"level":20,"move_id":225},{"level":25,"move_id":346},{"level":30,"move_id":287},{"level":35,"move_id":296},{"level":40,"move_id":94},{"level":45,"move_id":105},{"level":50,"move_id":204}],"rom_address":3309994},"rom_address":3299884,"tmhm_learnset":"035C5E93B7BBD63E","types":[16,14]},{"abilities":[26,0],"base_stats":[80,90,80,110,130,110],"catch_rate":3,"evolutions":[],"friendship":90,"id":408,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":149},{"level":5,"move_id":262},{"level":10,"move_id":270},{"level":15,"move_id":219},{"level":20,"move_id":225},{"level":25,"move_id":182},{"level":30,"move_id":287},{"level":35,"move_id":295},{"level":40,"move_id":94},{"level":45,"move_id":105},{"level":50,"move_id":349}],"rom_address":3310024},"rom_address":3299912,"tmhm_learnset":"035C5E93B7BBD63E","types":[16,14]},{"abilities":[32,0],"base_stats":[100,100,100,100,100,100],"catch_rate":3,"evolutions":[],"friendship":100,"id":409,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":273},{"level":1,"move_id":93},{"level":5,"move_id":156},{"level":10,"move_id":129},{"level":15,"move_id":270},{"level":20,"move_id":94},{"level":25,"move_id":287},{"level":30,"move_id":156},{"level":35,"move_id":38},{"level":40,"move_id":248},{"level":45,"move_id":322},{"level":50,"move_id":353}],"rom_address":3310054},"rom_address":3299940,"tmhm_learnset":"00408E93B59BC62C","types":[8,14]},{"abilities":[46,0],"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":410,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":43},{"level":1,"move_id":35},{"level":5,"move_id":101},{"level":10,"move_id":104},{"level":15,"move_id":282},{"level":20,"move_id":228},{"level":25,"move_id":94},{"level":30,"move_id":129},{"level":35,"move_id":97},{"level":40,"move_id":105},{"level":45,"move_id":354},{"level":50,"move_id":245}],"rom_address":3310084},"rom_address":3299968,"tmhm_learnset":"00E58FC3F5BBDE2D","types":[14,14]},{"abilities":[26,0],"base_stats":[65,50,70,65,95,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":411,"learnset":{"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":35},{"level":6,"move_id":45},{"level":9,"move_id":310},{"level":14,"move_id":93},{"level":17,"move_id":36},{"level":22,"move_id":253},{"level":25,"move_id":281},{"level":30,"move_id":149},{"level":33,"move_id":38},{"level":38,"move_id":215},{"level":41,"move_id":219},{"level":46,"move_id":94}],"rom_address":3310114},"rom_address":3299996,"tmhm_learnset":"00419F03B41B8E28","types":[14,14]}],"static_encounters":[{"flag":33,"level":50,"rom_address":2379222,"species":407},{"flag":32,"level":50,"rom_address":2379215,"species":408},{"flag":977,"level":30,"rom_address":2316785,"species":101},{"flag":978,"level":30,"rom_address":2316862,"species":101},{"flag":842,"level":40,"rom_address":2379579,"species":185},{"flag":763,"level":30,"rom_address":2531937,"species":410},{"flag":801,"level":70,"rom_address":2536492,"species":250},{"flag":800,"level":70,"rom_address":2536772,"species":249},{"flag":782,"level":70,"rom_address":2347550,"species":404},{"flag":718,"level":30,"rom_address":2531517,"species":151},{"flag":974,"level":25,"rom_address":2332864,"species":100},{"flag":975,"level":25,"rom_address":2332941,"species":100},{"flag":976,"level":25,"rom_address":2333018,"species":100},{"flag":936,"level":40,"rom_address":2338991,"species":402},{"flag":935,"level":40,"rom_address":2291862,"species":401},{"flag":937,"level":40,"rom_address":2339249,"species":403},{"flag":989,"level":30,"rom_address":2573968,"species":317},{"flag":990,"level":30,"rom_address":2573987,"species":317},{"flag":982,"level":30,"rom_address":2573873,"species":317},{"flag":985,"level":30,"rom_address":2573892,"species":317},{"flag":986,"level":30,"rom_address":2573911,"species":317},{"flag":987,"level":30,"rom_address":2573930,"species":317},{"flag":988,"level":30,"rom_address":2573949,"species":317},{"flag":970,"level":30,"rom_address":2059073,"species":317},{"flag":80,"level":70,"rom_address":2340984,"species":406},{"flag":783,"level":70,"rom_address":2347759,"species":405}],"tmhm_moves":[264,337,352,347,46,92,258,339,331,237,241,269,58,59,63,113,182,240,202,219,218,76,231,85,87,89,216,91,94,247,280,104,115,351,53,188,201,126,317,332,259,263,290,156,213,168,211,285,289,315,15,19,57,70,148,249,127,291],"trainers":[{"battle_script_rom_address":0,"party":[],"party_rom_address":4160749568,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3221820},{"battle_script_rom_address":2298147,"party":[{"level":21,"moves":[0,0,0,0],"species":74}],"party_rom_address":3202872,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3221860},{"battle_script_rom_address":2315511,"party":[{"level":32,"moves":[0,0,0,0],"species":286}],"party_rom_address":3202880,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3221900},{"battle_script_rom_address":2316936,"party":[{"level":31,"moves":[0,0,0,0],"species":41},{"level":31,"moves":[0,0,0,0],"species":330}],"party_rom_address":3202888,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3221940},{"battle_script_rom_address":2316983,"party":[{"level":32,"moves":[0,0,0,0],"species":41}],"party_rom_address":3202904,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3221980},{"battle_script_rom_address":2317996,"party":[{"level":32,"moves":[0,0,0,0],"species":330}],"party_rom_address":3202912,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222020},{"battle_script_rom_address":2320418,"party":[{"level":36,"moves":[0,0,0,0],"species":286}],"party_rom_address":3202920,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222060},{"battle_script_rom_address":2320449,"party":[{"level":36,"moves":[0,0,0,0],"species":330}],"party_rom_address":3202928,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222100},{"battle_script_rom_address":2321650,"party":[{"level":36,"moves":[0,0,0,0],"species":41}],"party_rom_address":3202936,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222140},{"battle_script_rom_address":2307885,"party":[{"level":26,"moves":[0,0,0,0],"species":315},{"level":26,"moves":[0,0,0,0],"species":286},{"level":26,"moves":[0,0,0,0],"species":288},{"level":26,"moves":[0,0,0,0],"species":295},{"level":26,"moves":[0,0,0,0],"species":298},{"level":26,"moves":[0,0,0,0],"species":304}],"party_rom_address":3202944,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222180},{"battle_script_rom_address":0,"party":[{"level":9,"moves":[0,0,0,0],"species":286}],"party_rom_address":3202992,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222220},{"battle_script_rom_address":2061615,"party":[{"level":29,"moves":[0,0,0,0],"species":338},{"level":29,"moves":[0,0,0,0],"species":300}],"party_rom_address":3203000,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222260},{"battle_script_rom_address":2062556,"party":[{"level":30,"moves":[0,0,0,0],"species":310},{"level":30,"moves":[0,0,0,0],"species":178}],"party_rom_address":3203016,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222300},{"battle_script_rom_address":2062587,"party":[{"level":30,"moves":[0,0,0,0],"species":380},{"level":30,"moves":[0,0,0,0],"species":379}],"party_rom_address":3203032,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222340},{"battle_script_rom_address":2321681,"party":[{"level":36,"moves":[0,0,0,0],"species":330}],"party_rom_address":3203048,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222380},{"battle_script_rom_address":2063653,"party":[{"level":34,"moves":[0,0,0,0],"species":130}],"party_rom_address":3203056,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222420},{"battle_script_rom_address":0,"party":[{"level":11,"moves":[0,0,0,0],"species":286}],"party_rom_address":3203064,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222460},{"battle_script_rom_address":2563645,"party":[{"level":27,"moves":[0,0,0,0],"species":41},{"level":27,"moves":[0,0,0,0],"species":286}],"party_rom_address":3203072,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222500},{"battle_script_rom_address":2564779,"party":[{"level":27,"moves":[0,0,0,0],"species":286},{"level":27,"moves":[0,0,0,0],"species":330}],"party_rom_address":3203088,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222540},{"battle_script_rom_address":2564810,"party":[{"level":26,"moves":[0,0,0,0],"species":286},{"level":26,"moves":[0,0,0,0],"species":41},{"level":26,"moves":[0,0,0,0],"species":330}],"party_rom_address":3203104,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222580},{"battle_script_rom_address":2151814,"party":[{"level":15,"moves":[0,0,0,0],"species":330}],"party_rom_address":3203128,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222620},{"battle_script_rom_address":2151873,"party":[{"level":14,"moves":[0,0,0,0],"species":41},{"level":14,"moves":[0,0,0,0],"species":330}],"party_rom_address":3203136,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222660},{"battle_script_rom_address":2248406,"party":[{"level":32,"moves":[0,0,0,0],"species":339}],"party_rom_address":3203152,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222700},{"battle_script_rom_address":2311132,"party":[{"level":32,"moves":[0,0,0,0],"species":41}],"party_rom_address":3203160,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222740},{"battle_script_rom_address":2311163,"party":[{"level":32,"moves":[0,0,0,0],"species":330}],"party_rom_address":3203168,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222780},{"battle_script_rom_address":2311194,"party":[{"level":30,"moves":[0,0,0,0],"species":286},{"level":30,"moves":[0,0,0,0],"species":330}],"party_rom_address":3203176,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222820},{"battle_script_rom_address":2563676,"party":[{"level":28,"moves":[0,0,0,0],"species":330}],"party_rom_address":3203192,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222860},{"battle_script_rom_address":2317024,"party":[{"level":32,"moves":[0,0,0,0],"species":330}],"party_rom_address":3203200,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222900},{"battle_script_rom_address":2318037,"party":[{"level":32,"moves":[0,0,0,0],"species":41}],"party_rom_address":3203208,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222940},{"battle_script_rom_address":2062525,"party":[{"level":30,"moves":[0,0,0,0],"species":335},{"level":30,"moves":[0,0,0,0],"species":67}],"party_rom_address":3203216,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3222980},{"battle_script_rom_address":2317860,"party":[{"level":34,"moves":[0,0,0,0],"species":287},{"level":34,"moves":[0,0,0,0],"species":42}],"party_rom_address":3203232,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223020},{"battle_script_rom_address":2306336,"party":[{"level":31,"moves":[0,0,0,0],"species":336}],"party_rom_address":3203248,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223060},{"battle_script_rom_address":2564841,"party":[{"level":28,"moves":[0,0,0,0],"species":330},{"level":28,"moves":[0,0,0,0],"species":287}],"party_rom_address":3203256,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223100},{"battle_script_rom_address":2320766,"party":[{"level":37,"moves":[0,0,0,0],"species":331},{"level":37,"moves":[0,0,0,0],"species":287}],"party_rom_address":3203272,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223140},{"battle_script_rom_address":2322088,"party":[{"level":41,"moves":[0,0,0,0],"species":287},{"level":41,"moves":[0,0,0,0],"species":169},{"level":43,"moves":[0,0,0,0],"species":331}],"party_rom_address":3203288,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223180},{"battle_script_rom_address":2306305,"party":[{"level":31,"moves":[0,0,0,0],"species":351}],"party_rom_address":3203312,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223220},{"battle_script_rom_address":2020252,"party":[{"level":14,"moves":[0,0,0,0],"species":306},{"level":14,"moves":[0,0,0,0],"species":363}],"party_rom_address":3203320,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223260},{"battle_script_rom_address":2052806,"party":[{"level":14,"moves":[0,0,0,0],"species":363},{"level":14,"moves":[0,0,0,0],"species":306},{"level":14,"moves":[0,0,0,0],"species":363}],"party_rom_address":3203336,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223300},{"battle_script_rom_address":2329135,"party":[{"level":43,"moves":[94,0,0,0],"species":357},{"level":43,"moves":[29,89,0,0],"species":319}],"party_rom_address":3203360,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3223340},{"battle_script_rom_address":2062181,"party":[{"level":26,"moves":[0,0,0,0],"species":363},{"level":26,"moves":[0,0,0,0],"species":44}],"party_rom_address":3203392,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223380},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":306},{"level":26,"moves":[0,0,0,0],"species":363}],"party_rom_address":3203408,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223420},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":306},{"level":28,"moves":[0,0,0,0],"species":44},{"level":28,"moves":[0,0,0,0],"species":363}],"party_rom_address":3203424,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223460},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":306},{"level":31,"moves":[0,0,0,0],"species":44},{"level":31,"moves":[0,0,0,0],"species":363}],"party_rom_address":3203448,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223500},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":307},{"level":34,"moves":[0,0,0,0],"species":44},{"level":34,"moves":[0,0,0,0],"species":363}],"party_rom_address":3203472,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223540},{"battle_script_rom_address":2040619,"party":[{"level":23,"moves":[91,163,28,40],"species":28}],"party_rom_address":3203496,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3223580},{"battle_script_rom_address":2059717,"party":[{"level":27,"moves":[60,120,201,246],"species":318},{"level":27,"moves":[91,163,28,40],"species":27},{"level":27,"moves":[91,163,28,40],"species":28}],"party_rom_address":3203512,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3223620},{"battle_script_rom_address":2027714,"party":[{"level":25,"moves":[91,163,28,40],"species":27},{"level":25,"moves":[91,163,28,40],"species":28}],"party_rom_address":3203560,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3223660},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[91,163,28,40],"species":28}],"party_rom_address":3203592,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3223700},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[91,163,28,40],"species":28}],"party_rom_address":3203608,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3223740},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[91,163,28,40],"species":28}],"party_rom_address":3203624,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3223780},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[91,163,28,40],"species":28}],"party_rom_address":3203640,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3223820},{"battle_script_rom_address":0,"party":[{"level":17,"moves":[0,0,0,0],"species":81},{"level":17,"moves":[0,0,0,0],"species":370}],"party_rom_address":3203656,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223860},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":81},{"level":27,"moves":[0,0,0,0],"species":371}],"party_rom_address":3203672,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223900},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":82},{"level":30,"moves":[0,0,0,0],"species":371}],"party_rom_address":3203688,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223940},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":82},{"level":33,"moves":[0,0,0,0],"species":371}],"party_rom_address":3203704,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3223980},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":82},{"level":36,"moves":[0,0,0,0],"species":371}],"party_rom_address":3203720,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224020},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[49,86,63,85],"species":82},{"level":39,"moves":[54,23,48,48],"species":372}],"party_rom_address":3203736,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3224060},{"battle_script_rom_address":2030183,"party":[{"level":12,"moves":[0,0,0,0],"species":350},{"level":12,"moves":[0,0,0,0],"species":350}],"party_rom_address":3203768,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224100},{"battle_script_rom_address":2030293,"party":[{"level":26,"moves":[0,0,0,0],"species":183}],"party_rom_address":3203784,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224140},{"battle_script_rom_address":2030324,"party":[{"level":26,"moves":[0,0,0,0],"species":183}],"party_rom_address":3203792,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224180},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":183},{"level":26,"moves":[0,0,0,0],"species":183}],"party_rom_address":3203800,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224220},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":183},{"level":29,"moves":[0,0,0,0],"species":183}],"party_rom_address":3203816,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224260},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":183},{"level":32,"moves":[0,0,0,0],"species":183}],"party_rom_address":3203832,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224300},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":184},{"level":35,"moves":[0,0,0,0],"species":184}],"party_rom_address":3203848,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224340},{"battle_script_rom_address":2030073,"party":[{"level":13,"moves":[28,29,39,57],"species":288}],"party_rom_address":3203864,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3224380},{"battle_script_rom_address":2537320,"party":[{"level":12,"moves":[0,0,0,0],"species":350},{"level":12,"moves":[0,0,0,0],"species":183}],"party_rom_address":3203880,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224420},{"battle_script_rom_address":2333372,"party":[{"level":26,"moves":[0,0,0,0],"species":183}],"party_rom_address":3203896,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224460},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[28,42,39,57],"species":289}],"party_rom_address":3203904,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3224500},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[28,42,39,57],"species":289}],"party_rom_address":3203920,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3224540},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[28,42,39,57],"species":289}],"party_rom_address":3203936,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3224580},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[28,42,39,57],"species":289}],"party_rom_address":3203952,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3224620},{"battle_script_rom_address":2125121,"party":[{"level":26,"moves":[98,97,17,0],"species":305}],"party_rom_address":3203968,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3224660},{"battle_script_rom_address":2125185,"party":[{"level":26,"moves":[42,146,8,0],"species":308}],"party_rom_address":3203984,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3224700},{"battle_script_rom_address":2125249,"party":[{"level":26,"moves":[47,68,247,0],"species":364}],"party_rom_address":3204000,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3224740},{"battle_script_rom_address":2125313,"party":[{"level":26,"moves":[116,163,0,0],"species":365}],"party_rom_address":3204016,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3224780},{"battle_script_rom_address":2062150,"party":[{"level":28,"moves":[116,98,17,27],"species":305},{"level":28,"moves":[44,91,185,72],"species":332},{"level":28,"moves":[205,250,54,96],"species":313},{"level":28,"moves":[85,48,86,49],"species":82},{"level":28,"moves":[202,185,104,207],"species":300}],"party_rom_address":3204032,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3224820},{"battle_script_rom_address":2558747,"party":[{"level":44,"moves":[0,0,0,0],"species":322},{"level":44,"moves":[0,0,0,0],"species":357},{"level":44,"moves":[0,0,0,0],"species":331}],"party_rom_address":3204112,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224860},{"battle_script_rom_address":2558809,"party":[{"level":46,"moves":[0,0,0,0],"species":355},{"level":46,"moves":[0,0,0,0],"species":121}],"party_rom_address":3204136,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224900},{"battle_script_rom_address":2040822,"party":[{"level":17,"moves":[0,0,0,0],"species":337},{"level":17,"moves":[0,0,0,0],"species":313},{"level":17,"moves":[0,0,0,0],"species":335}],"party_rom_address":3204152,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224940},{"battle_script_rom_address":2326273,"party":[{"level":43,"moves":[0,0,0,0],"species":345},{"level":43,"moves":[0,0,0,0],"species":310}],"party_rom_address":3204176,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3224980},{"battle_script_rom_address":2326304,"party":[{"level":43,"moves":[0,0,0,0],"species":82},{"level":43,"moves":[0,0,0,0],"species":89}],"party_rom_address":3204192,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225020},{"battle_script_rom_address":2327963,"party":[{"level":42,"moves":[0,0,0,0],"species":305},{"level":42,"moves":[0,0,0,0],"species":355},{"level":42,"moves":[0,0,0,0],"species":64}],"party_rom_address":3204208,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225060},{"battle_script_rom_address":2329011,"party":[{"level":42,"moves":[0,0,0,0],"species":85},{"level":42,"moves":[0,0,0,0],"species":64},{"level":42,"moves":[0,0,0,0],"species":101},{"level":42,"moves":[0,0,0,0],"species":300}],"party_rom_address":3204232,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225100},{"battle_script_rom_address":2329042,"party":[{"level":42,"moves":[0,0,0,0],"species":317},{"level":42,"moves":[0,0,0,0],"species":75},{"level":42,"moves":[0,0,0,0],"species":314}],"party_rom_address":3204264,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225140},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":337},{"level":26,"moves":[0,0,0,0],"species":313},{"level":26,"moves":[0,0,0,0],"species":335}],"party_rom_address":3204288,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225180},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":338},{"level":29,"moves":[0,0,0,0],"species":313},{"level":29,"moves":[0,0,0,0],"species":335}],"party_rom_address":3204312,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225220},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":338},{"level":32,"moves":[0,0,0,0],"species":313},{"level":32,"moves":[0,0,0,0],"species":335}],"party_rom_address":3204336,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225260},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":338},{"level":35,"moves":[0,0,0,0],"species":313},{"level":35,"moves":[0,0,0,0],"species":336}],"party_rom_address":3204360,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225300},{"battle_script_rom_address":2067950,"party":[{"level":33,"moves":[0,0,0,0],"species":75},{"level":33,"moves":[0,0,0,0],"species":297}],"party_rom_address":3204384,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225340},{"battle_script_rom_address":2125377,"party":[{"level":26,"moves":[185,95,0,0],"species":316}],"party_rom_address":3204400,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3225380},{"battle_script_rom_address":2125441,"party":[{"level":26,"moves":[111,38,247,0],"species":40}],"party_rom_address":3204416,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3225420},{"battle_script_rom_address":2125505,"party":[{"level":26,"moves":[14,163,0,0],"species":380}],"party_rom_address":3204432,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3225460},{"battle_script_rom_address":2062119,"party":[{"level":29,"moves":[226,185,57,44],"species":355},{"level":29,"moves":[72,89,64,73],"species":363},{"level":29,"moves":[19,55,54,182],"species":310}],"party_rom_address":3204448,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3225500},{"battle_script_rom_address":2558778,"party":[{"level":45,"moves":[0,0,0,0],"species":383},{"level":45,"moves":[0,0,0,0],"species":338}],"party_rom_address":3204496,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225540},{"battle_script_rom_address":2040932,"party":[{"level":17,"moves":[0,0,0,0],"species":309},{"level":17,"moves":[0,0,0,0],"species":339},{"level":17,"moves":[0,0,0,0],"species":363}],"party_rom_address":3204512,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225580},{"battle_script_rom_address":2059686,"party":[{"level":30,"moves":[0,0,0,0],"species":322}],"party_rom_address":3204536,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225620},{"battle_script_rom_address":2326335,"party":[{"level":45,"moves":[0,0,0,0],"species":363}],"party_rom_address":3204544,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225660},{"battle_script_rom_address":2327994,"party":[{"level":45,"moves":[0,0,0,0],"species":319}],"party_rom_address":3204552,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225700},{"battle_script_rom_address":2328025,"party":[{"level":42,"moves":[0,0,0,0],"species":321},{"level":42,"moves":[0,0,0,0],"species":357},{"level":42,"moves":[0,0,0,0],"species":297}],"party_rom_address":3204560,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225740},{"battle_script_rom_address":2329073,"party":[{"level":43,"moves":[0,0,0,0],"species":227},{"level":43,"moves":[0,0,0,0],"species":322}],"party_rom_address":3204584,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225780},{"battle_script_rom_address":2329104,"party":[{"level":42,"moves":[0,0,0,0],"species":28},{"level":42,"moves":[0,0,0,0],"species":38},{"level":42,"moves":[0,0,0,0],"species":369}],"party_rom_address":3204600,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225820},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":309},{"level":26,"moves":[0,0,0,0],"species":339},{"level":26,"moves":[0,0,0,0],"species":363}],"party_rom_address":3204624,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225860},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":310},{"level":29,"moves":[0,0,0,0],"species":339},{"level":29,"moves":[0,0,0,0],"species":363}],"party_rom_address":3204648,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225900},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":310},{"level":32,"moves":[0,0,0,0],"species":339},{"level":32,"moves":[0,0,0,0],"species":363}],"party_rom_address":3204672,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225940},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":310},{"level":34,"moves":[0,0,0,0],"species":340},{"level":34,"moves":[0,0,0,0],"species":363}],"party_rom_address":3204696,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3225980},{"battle_script_rom_address":2557556,"party":[{"level":41,"moves":[0,0,0,0],"species":378},{"level":41,"moves":[0,0,0,0],"species":348}],"party_rom_address":3204720,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226020},{"battle_script_rom_address":2062494,"party":[{"level":30,"moves":[0,0,0,0],"species":361},{"level":30,"moves":[0,0,0,0],"species":377}],"party_rom_address":3204736,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226060},{"battle_script_rom_address":2061319,"party":[{"level":29,"moves":[0,0,0,0],"species":361},{"level":29,"moves":[0,0,0,0],"species":377}],"party_rom_address":3204752,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226100},{"battle_script_rom_address":2309379,"party":[{"level":32,"moves":[0,0,0,0],"species":322}],"party_rom_address":3204768,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226140},{"battle_script_rom_address":2309166,"party":[{"level":32,"moves":[0,0,0,0],"species":377}],"party_rom_address":3204776,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226180},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":322},{"level":31,"moves":[0,0,0,0],"species":351}],"party_rom_address":3204784,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226220},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":351},{"level":35,"moves":[0,0,0,0],"species":322}],"party_rom_address":3204800,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226260},{"battle_script_rom_address":0,"party":[{"level":40,"moves":[0,0,0,0],"species":351},{"level":40,"moves":[0,0,0,0],"species":322}],"party_rom_address":3204816,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226300},{"battle_script_rom_address":0,"party":[{"level":42,"moves":[0,0,0,0],"species":361},{"level":42,"moves":[0,0,0,0],"species":322},{"level":42,"moves":[0,0,0,0],"species":352}],"party_rom_address":3204832,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226340},{"battle_script_rom_address":2024261,"party":[{"level":7,"moves":[0,0,0,0],"species":288}],"party_rom_address":3204856,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3226380},{"battle_script_rom_address":2259635,"party":[{"level":39,"moves":[213,186,175,96],"species":325},{"level":39,"moves":[213,219,36,96],"species":325}],"party_rom_address":3204864,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3226420},{"battle_script_rom_address":2248487,"party":[{"level":26,"moves":[0,0,0,0],"species":287},{"level":28,"moves":[0,0,0,0],"species":287},{"level":30,"moves":[0,0,0,0],"species":339}],"party_rom_address":3204896,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226460},{"battle_script_rom_address":0,"party":[{"level":11,"moves":[33,39,0,0],"species":288}],"party_rom_address":3204920,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3226500},{"battle_script_rom_address":2259418,"party":[{"level":40,"moves":[0,0,0,0],"species":119}],"party_rom_address":3204936,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3226540},{"battle_script_rom_address":2354429,"party":[{"level":45,"moves":[0,0,0,0],"species":363}],"party_rom_address":3204944,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3226580},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":289}],"party_rom_address":3204952,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3226620},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":289}],"party_rom_address":3204960,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3226660},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":289}],"party_rom_address":3204968,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3226700},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[154,44,60,28],"species":289}],"party_rom_address":3204976,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3226740},{"battle_script_rom_address":2298023,"party":[{"level":21,"moves":[0,0,0,0],"species":183}],"party_rom_address":3204992,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226780},{"battle_script_rom_address":2298054,"party":[{"level":21,"moves":[0,0,0,0],"species":306}],"party_rom_address":3205000,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226820},{"battle_script_rom_address":2298085,"party":[{"level":21,"moves":[0,0,0,0],"species":339}],"party_rom_address":3205008,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226860},{"battle_script_rom_address":2061412,"party":[{"level":29,"moves":[20,122,154,185],"species":317},{"level":29,"moves":[86,103,137,242],"species":379}],"party_rom_address":3205016,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3226900},{"battle_script_rom_address":2259449,"party":[{"level":40,"moves":[0,0,0,0],"species":118}],"party_rom_address":3205048,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226940},{"battle_script_rom_address":2259480,"party":[{"level":40,"moves":[0,0,0,0],"species":184}],"party_rom_address":3205056,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3226980},{"battle_script_rom_address":2259511,"party":[{"level":35,"moves":[78,250,240,96],"species":373},{"level":37,"moves":[13,152,96,0],"species":326},{"level":39,"moves":[253,154,252,96],"species":296}],"party_rom_address":3205064,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3227020},{"battle_script_rom_address":2259542,"party":[{"level":39,"moves":[0,0,0,0],"species":330},{"level":39,"moves":[0,0,0,0],"species":331}],"party_rom_address":3205112,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227060},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[20,122,154,185],"species":317},{"level":35,"moves":[86,103,137,242],"species":379}],"party_rom_address":3205128,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3227100},{"battle_script_rom_address":0,"party":[{"level":38,"moves":[20,122,154,185],"species":317},{"level":38,"moves":[86,103,137,242],"species":379}],"party_rom_address":3205160,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3227140},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[20,122,154,185],"species":317},{"level":41,"moves":[86,103,137,242],"species":379}],"party_rom_address":3205192,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3227180},{"battle_script_rom_address":0,"party":[{"level":44,"moves":[20,122,154,185],"species":317},{"level":44,"moves":[86,103,137,242],"species":379}],"party_rom_address":3205224,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3227220},{"battle_script_rom_address":2024075,"party":[{"level":7,"moves":[0,0,0,0],"species":288}],"party_rom_address":3205256,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3227260},{"battle_script_rom_address":2068012,"party":[{"level":33,"moves":[0,0,0,0],"species":324},{"level":33,"moves":[0,0,0,0],"species":356}],"party_rom_address":3205264,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227300},{"battle_script_rom_address":2354398,"party":[{"level":45,"moves":[0,0,0,0],"species":184}],"party_rom_address":3205280,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3227340},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":289}],"party_rom_address":3205288,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3227380},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":289}],"party_rom_address":3205296,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3227420},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":289}],"party_rom_address":3205304,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3227460},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[154,44,60,28],"species":289}],"party_rom_address":3205312,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3227500},{"battle_script_rom_address":2046087,"party":[{"level":19,"moves":[0,0,0,0],"species":382}],"party_rom_address":3205328,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227540},{"battle_script_rom_address":2333649,"party":[{"level":25,"moves":[0,0,0,0],"species":313},{"level":25,"moves":[0,0,0,0],"species":116}],"party_rom_address":3205336,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227580},{"battle_script_rom_address":2306212,"party":[{"level":31,"moves":[0,0,0,0],"species":111}],"party_rom_address":3205352,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227620},{"battle_script_rom_address":2298116,"party":[{"level":20,"moves":[0,0,0,0],"species":339}],"party_rom_address":3205360,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227660},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":383}],"party_rom_address":3205368,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227700},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":383},{"level":29,"moves":[0,0,0,0],"species":111}],"party_rom_address":3205376,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227740},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":383},{"level":32,"moves":[0,0,0,0],"species":111}],"party_rom_address":3205392,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227780},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":384},{"level":35,"moves":[0,0,0,0],"species":112}],"party_rom_address":3205408,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227820},{"battle_script_rom_address":2027745,"party":[{"level":26,"moves":[0,0,0,0],"species":330}],"party_rom_address":3205424,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227860},{"battle_script_rom_address":2027776,"party":[{"level":26,"moves":[0,0,0,0],"species":72}],"party_rom_address":3205432,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227900},{"battle_script_rom_address":2028359,"party":[{"level":24,"moves":[0,0,0,0],"species":72},{"level":24,"moves":[0,0,0,0],"species":72}],"party_rom_address":3205440,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227940},{"battle_script_rom_address":2028653,"party":[{"level":24,"moves":[0,0,0,0],"species":72},{"level":24,"moves":[0,0,0,0],"species":309},{"level":24,"moves":[0,0,0,0],"species":72}],"party_rom_address":3205456,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3227980},{"battle_script_rom_address":2028684,"party":[{"level":26,"moves":[0,0,0,0],"species":330}],"party_rom_address":3205480,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228020},{"battle_script_rom_address":2028950,"party":[{"level":26,"moves":[0,0,0,0],"species":73}],"party_rom_address":3205488,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228060},{"battle_script_rom_address":2028981,"party":[{"level":26,"moves":[0,0,0,0],"species":330}],"party_rom_address":3205496,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228100},{"battle_script_rom_address":2029949,"party":[{"level":25,"moves":[0,0,0,0],"species":72},{"level":25,"moves":[0,0,0,0],"species":330}],"party_rom_address":3205504,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228140},{"battle_script_rom_address":2063211,"party":[{"level":33,"moves":[0,0,0,0],"species":72},{"level":33,"moves":[0,0,0,0],"species":309}],"party_rom_address":3205520,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228180},{"battle_script_rom_address":2063242,"party":[{"level":34,"moves":[0,0,0,0],"species":330}],"party_rom_address":3205536,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228220},{"battle_script_rom_address":2063822,"party":[{"level":34,"moves":[0,0,0,0],"species":73}],"party_rom_address":3205544,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228260},{"battle_script_rom_address":2063853,"party":[{"level":34,"moves":[0,0,0,0],"species":116}],"party_rom_address":3205552,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228300},{"battle_script_rom_address":2064196,"party":[{"level":34,"moves":[0,0,0,0],"species":130}],"party_rom_address":3205560,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228340},{"battle_script_rom_address":2064227,"party":[{"level":31,"moves":[0,0,0,0],"species":330},{"level":31,"moves":[0,0,0,0],"species":309},{"level":31,"moves":[0,0,0,0],"species":330}],"party_rom_address":3205568,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228380},{"battle_script_rom_address":2067229,"party":[{"level":34,"moves":[0,0,0,0],"species":130}],"party_rom_address":3205592,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228420},{"battle_script_rom_address":2067359,"party":[{"level":34,"moves":[0,0,0,0],"species":310}],"party_rom_address":3205600,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228460},{"battle_script_rom_address":2067390,"party":[{"level":33,"moves":[0,0,0,0],"species":309},{"level":33,"moves":[0,0,0,0],"species":73}],"party_rom_address":3205608,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228500},{"battle_script_rom_address":2067291,"party":[{"level":33,"moves":[0,0,0,0],"species":73},{"level":33,"moves":[0,0,0,0],"species":313}],"party_rom_address":3205624,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228540},{"battle_script_rom_address":2067608,"party":[{"level":34,"moves":[0,0,0,0],"species":331}],"party_rom_address":3205640,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228580},{"battle_script_rom_address":2067857,"party":[{"level":34,"moves":[0,0,0,0],"species":342}],"party_rom_address":3205648,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228620},{"battle_script_rom_address":2067576,"party":[{"level":34,"moves":[0,0,0,0],"species":341}],"party_rom_address":3205656,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228660},{"battle_script_rom_address":2068089,"party":[{"level":34,"moves":[0,0,0,0],"species":130}],"party_rom_address":3205664,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228700},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":72},{"level":33,"moves":[0,0,0,0],"species":309},{"level":33,"moves":[0,0,0,0],"species":73}],"party_rom_address":3205672,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228740},{"battle_script_rom_address":2063414,"party":[{"level":33,"moves":[0,0,0,0],"species":72},{"level":33,"moves":[0,0,0,0],"species":313}],"party_rom_address":3205696,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228780},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":331}],"party_rom_address":3205712,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228820},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":331}],"party_rom_address":3205720,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228860},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":120},{"level":36,"moves":[0,0,0,0],"species":331}],"party_rom_address":3205728,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228900},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":121},{"level":39,"moves":[0,0,0,0],"species":331}],"party_rom_address":3205744,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228940},{"battle_script_rom_address":2089272,"party":[{"level":13,"moves":[0,0,0,0],"species":66}],"party_rom_address":3205760,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3228980},{"battle_script_rom_address":2068213,"party":[{"level":32,"moves":[0,0,0,0],"species":66},{"level":32,"moves":[0,0,0,0],"species":67}],"party_rom_address":3205768,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229020},{"battle_script_rom_address":2067701,"party":[{"level":34,"moves":[0,0,0,0],"species":336}],"party_rom_address":3205784,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229060},{"battle_script_rom_address":2047023,"party":[{"level":24,"moves":[0,0,0,0],"species":66},{"level":28,"moves":[0,0,0,0],"species":67}],"party_rom_address":3205792,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229100},{"battle_script_rom_address":2047054,"party":[{"level":19,"moves":[0,0,0,0],"species":66}],"party_rom_address":3205808,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229140},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":67}],"party_rom_address":3205816,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229180},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":66},{"level":29,"moves":[0,0,0,0],"species":67}],"party_rom_address":3205824,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229220},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":66},{"level":31,"moves":[0,0,0,0],"species":67},{"level":31,"moves":[0,0,0,0],"species":67}],"party_rom_address":3205840,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229260},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":66},{"level":33,"moves":[0,0,0,0],"species":67},{"level":33,"moves":[0,0,0,0],"species":67},{"level":33,"moves":[0,0,0,0],"species":68}],"party_rom_address":3205864,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3229300},{"battle_script_rom_address":2550585,"party":[{"level":26,"moves":[0,0,0,0],"species":335},{"level":26,"moves":[0,0,0,0],"species":67}],"party_rom_address":3205896,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229340},{"battle_script_rom_address":2040791,"party":[{"level":19,"moves":[0,0,0,0],"species":66}],"party_rom_address":3205912,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229380},{"battle_script_rom_address":2308993,"party":[{"level":32,"moves":[0,0,0,0],"species":336}],"party_rom_address":3205920,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229420},{"battle_script_rom_address":2161493,"party":[{"level":17,"moves":[98,86,209,43],"species":337},{"level":17,"moves":[12,95,103,0],"species":100}],"party_rom_address":3205928,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3229460},{"battle_script_rom_address":2317055,"party":[{"level":31,"moves":[0,0,0,0],"species":286},{"level":31,"moves":[0,0,0,0],"species":41}],"party_rom_address":3205960,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229500},{"battle_script_rom_address":2318068,"party":[{"level":32,"moves":[0,0,0,0],"species":330}],"party_rom_address":3205976,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229540},{"battle_script_rom_address":2161524,"party":[{"level":17,"moves":[0,0,0,0],"species":100},{"level":17,"moves":[0,0,0,0],"species":81}],"party_rom_address":3205984,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229580},{"battle_script_rom_address":2062742,"party":[{"level":30,"moves":[0,0,0,0],"species":337},{"level":30,"moves":[0,0,0,0],"species":371}],"party_rom_address":3206000,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229620},{"battle_script_rom_address":2052978,"party":[{"level":15,"moves":[0,0,0,0],"species":81},{"level":15,"moves":[0,0,0,0],"species":370}],"party_rom_address":3206016,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229660},{"battle_script_rom_address":0,"party":[{"level":25,"moves":[0,0,0,0],"species":81},{"level":25,"moves":[0,0,0,0],"species":370},{"level":25,"moves":[0,0,0,0],"species":81}],"party_rom_address":3206032,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229700},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":81},{"level":28,"moves":[0,0,0,0],"species":371},{"level":28,"moves":[0,0,0,0],"species":81}],"party_rom_address":3206056,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229740},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":82},{"level":31,"moves":[0,0,0,0],"species":371},{"level":31,"moves":[0,0,0,0],"species":82}],"party_rom_address":3206080,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229780},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":82},{"level":34,"moves":[0,0,0,0],"species":372},{"level":34,"moves":[0,0,0,0],"species":82}],"party_rom_address":3206104,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229820},{"battle_script_rom_address":2097377,"party":[{"level":23,"moves":[0,0,0,0],"species":339}],"party_rom_address":3206128,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229860},{"battle_script_rom_address":2097584,"party":[{"level":22,"moves":[0,0,0,0],"species":218},{"level":22,"moves":[0,0,0,0],"species":218}],"party_rom_address":3206136,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229900},{"battle_script_rom_address":2097429,"party":[{"level":23,"moves":[0,0,0,0],"species":339}],"party_rom_address":3206152,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229940},{"battle_script_rom_address":2097553,"party":[{"level":23,"moves":[0,0,0,0],"species":218}],"party_rom_address":3206160,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3229980},{"battle_script_rom_address":2097460,"party":[{"level":23,"moves":[0,0,0,0],"species":218}],"party_rom_address":3206168,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230020},{"battle_script_rom_address":2046197,"party":[{"level":18,"moves":[0,0,0,0],"species":218},{"level":18,"moves":[0,0,0,0],"species":309}],"party_rom_address":3206176,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230060},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":218},{"level":26,"moves":[0,0,0,0],"species":309}],"party_rom_address":3206192,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230100},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":218},{"level":29,"moves":[0,0,0,0],"species":310}],"party_rom_address":3206208,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230140},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":218},{"level":32,"moves":[0,0,0,0],"species":310}],"party_rom_address":3206224,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230180},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":219},{"level":35,"moves":[0,0,0,0],"species":310}],"party_rom_address":3206240,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230220},{"battle_script_rom_address":2040495,"party":[{"level":23,"moves":[91,28,40,163],"species":27}],"party_rom_address":3206256,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3230260},{"battle_script_rom_address":2040557,"party":[{"level":21,"moves":[229,189,60,61],"species":318},{"level":21,"moves":[40,28,10,91],"species":27},{"level":21,"moves":[229,189,60,61],"species":318}],"party_rom_address":3206272,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3230300},{"battle_script_rom_address":2043958,"party":[{"level":18,"moves":[0,0,0,0],"species":299}],"party_rom_address":3206320,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230340},{"battle_script_rom_address":2046025,"party":[{"level":18,"moves":[0,0,0,0],"species":27},{"level":18,"moves":[0,0,0,0],"species":299}],"party_rom_address":3206328,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230380},{"battle_script_rom_address":2549832,"party":[{"level":24,"moves":[0,0,0,0],"species":317}],"party_rom_address":3206344,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230420},{"battle_script_rom_address":2303835,"party":[{"level":20,"moves":[0,0,0,0],"species":288},{"level":20,"moves":[0,0,0,0],"species":304}],"party_rom_address":3206352,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230460},{"battle_script_rom_address":2303973,"party":[{"level":21,"moves":[0,0,0,0],"species":306}],"party_rom_address":3206368,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230500},{"battle_script_rom_address":2040729,"party":[{"level":18,"moves":[0,0,0,0],"species":27}],"party_rom_address":3206376,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230540},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":288},{"level":26,"moves":[0,0,0,0],"species":304}],"party_rom_address":3206384,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230580},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":289},{"level":29,"moves":[0,0,0,0],"species":305}],"party_rom_address":3206400,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230620},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":27},{"level":31,"moves":[0,0,0,0],"species":305},{"level":31,"moves":[0,0,0,0],"species":289}],"party_rom_address":3206416,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230660},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":305},{"level":34,"moves":[0,0,0,0],"species":28},{"level":34,"moves":[0,0,0,0],"species":289}],"party_rom_address":3206440,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230700},{"battle_script_rom_address":2054989,"party":[{"level":26,"moves":[0,0,0,0],"species":311}],"party_rom_address":3206464,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230740},{"battle_script_rom_address":2055020,"party":[{"level":24,"moves":[0,0,0,0],"species":290},{"level":24,"moves":[0,0,0,0],"species":291},{"level":24,"moves":[0,0,0,0],"species":292}],"party_rom_address":3206472,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230780},{"battle_script_rom_address":2055051,"party":[{"level":27,"moves":[0,0,0,0],"species":290},{"level":27,"moves":[0,0,0,0],"species":293},{"level":27,"moves":[0,0,0,0],"species":294}],"party_rom_address":3206496,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230820},{"battle_script_rom_address":2059576,"party":[{"level":27,"moves":[0,0,0,0],"species":311},{"level":27,"moves":[0,0,0,0],"species":311},{"level":27,"moves":[0,0,0,0],"species":311}],"party_rom_address":3206520,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230860},{"battle_script_rom_address":2051695,"party":[{"level":16,"moves":[0,0,0,0],"species":294},{"level":16,"moves":[0,0,0,0],"species":292}],"party_rom_address":3206544,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230900},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":311},{"level":31,"moves":[0,0,0,0],"species":311},{"level":31,"moves":[0,0,0,0],"species":311}],"party_rom_address":3206560,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230940},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":311},{"level":34,"moves":[0,0,0,0],"species":311},{"level":34,"moves":[0,0,0,0],"species":312}],"party_rom_address":3206584,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3230980},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":311},{"level":36,"moves":[0,0,0,0],"species":290},{"level":36,"moves":[0,0,0,0],"species":311},{"level":36,"moves":[0,0,0,0],"species":312}],"party_rom_address":3206608,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231020},{"battle_script_rom_address":0,"party":[{"level":38,"moves":[0,0,0,0],"species":311},{"level":38,"moves":[0,0,0,0],"species":294},{"level":38,"moves":[0,0,0,0],"species":311},{"level":38,"moves":[0,0,0,0],"species":312},{"level":38,"moves":[0,0,0,0],"species":292}],"party_rom_address":3206640,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3231060},{"battle_script_rom_address":2032546,"party":[{"level":15,"moves":[237,0,0,0],"species":63}],"party_rom_address":3206680,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3231100},{"battle_script_rom_address":2238272,"party":[{"level":36,"moves":[0,0,0,0],"species":393}],"party_rom_address":3206696,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231140},{"battle_script_rom_address":2238303,"party":[{"level":36,"moves":[0,0,0,0],"species":392}],"party_rom_address":3206704,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231180},{"battle_script_rom_address":2238334,"party":[{"level":36,"moves":[0,0,0,0],"species":203}],"party_rom_address":3206712,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231220},{"battle_script_rom_address":2307823,"party":[{"level":26,"moves":[0,0,0,0],"species":392},{"level":26,"moves":[0,0,0,0],"species":392},{"level":26,"moves":[0,0,0,0],"species":393}],"party_rom_address":3206720,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231260},{"battle_script_rom_address":2557525,"party":[{"level":41,"moves":[0,0,0,0],"species":64},{"level":41,"moves":[0,0,0,0],"species":349}],"party_rom_address":3206744,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231300},{"battle_script_rom_address":2062212,"party":[{"level":31,"moves":[0,0,0,0],"species":349}],"party_rom_address":3206760,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231340},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":64},{"level":33,"moves":[0,0,0,0],"species":349}],"party_rom_address":3206768,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231380},{"battle_script_rom_address":0,"party":[{"level":38,"moves":[0,0,0,0],"species":64},{"level":38,"moves":[0,0,0,0],"species":349}],"party_rom_address":3206784,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231420},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[0,0,0,0],"species":64},{"level":41,"moves":[0,0,0,0],"species":349}],"party_rom_address":3206800,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231460},{"battle_script_rom_address":0,"party":[{"level":45,"moves":[0,0,0,0],"species":349},{"level":45,"moves":[0,0,0,0],"species":65}],"party_rom_address":3206816,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231500},{"battle_script_rom_address":2032577,"party":[{"level":16,"moves":[237,0,0,0],"species":63}],"party_rom_address":3206832,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3231540},{"battle_script_rom_address":2238365,"party":[{"level":36,"moves":[0,0,0,0],"species":393}],"party_rom_address":3206848,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231580},{"battle_script_rom_address":2238396,"party":[{"level":36,"moves":[0,0,0,0],"species":178}],"party_rom_address":3206856,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231620},{"battle_script_rom_address":2238427,"party":[{"level":36,"moves":[0,0,0,0],"species":64}],"party_rom_address":3206864,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231660},{"battle_script_rom_address":2307854,"party":[{"level":26,"moves":[0,0,0,0],"species":202},{"level":26,"moves":[0,0,0,0],"species":177},{"level":26,"moves":[0,0,0,0],"species":64}],"party_rom_address":3206872,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231700},{"battle_script_rom_address":2557587,"party":[{"level":41,"moves":[0,0,0,0],"species":393},{"level":41,"moves":[0,0,0,0],"species":178}],"party_rom_address":3206896,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231740},{"battle_script_rom_address":2062322,"party":[{"level":30,"moves":[0,0,0,0],"species":64},{"level":30,"moves":[0,0,0,0],"species":348}],"party_rom_address":3206912,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231780},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":64},{"level":34,"moves":[0,0,0,0],"species":348}],"party_rom_address":3206928,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231820},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":64},{"level":37,"moves":[0,0,0,0],"species":348}],"party_rom_address":3206944,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231860},{"battle_script_rom_address":0,"party":[{"level":40,"moves":[0,0,0,0],"species":64},{"level":40,"moves":[0,0,0,0],"species":348}],"party_rom_address":3206960,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231900},{"battle_script_rom_address":0,"party":[{"level":43,"moves":[0,0,0,0],"species":348},{"level":43,"moves":[0,0,0,0],"species":65}],"party_rom_address":3206976,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231940},{"battle_script_rom_address":2061209,"party":[{"level":29,"moves":[0,0,0,0],"species":338}],"party_rom_address":3206992,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3231980},{"battle_script_rom_address":2354274,"party":[{"level":44,"moves":[0,0,0,0],"species":338},{"level":44,"moves":[0,0,0,0],"species":338}],"party_rom_address":3207000,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232020},{"battle_script_rom_address":2354305,"party":[{"level":45,"moves":[0,0,0,0],"species":380}],"party_rom_address":3207016,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232060},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":338}],"party_rom_address":3207024,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232100},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[29,28,60,154],"species":289},{"level":36,"moves":[98,209,60,46],"species":338}],"party_rom_address":3207032,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3232140},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[29,28,60,154],"species":289},{"level":39,"moves":[98,209,60,0],"species":338}],"party_rom_address":3207064,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3232180},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[29,28,60,154],"species":289},{"level":41,"moves":[154,50,93,244],"species":55},{"level":41,"moves":[98,209,60,46],"species":338}],"party_rom_address":3207096,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3232220},{"battle_script_rom_address":2268477,"party":[{"level":46,"moves":[46,38,28,242],"species":287},{"level":48,"moves":[3,104,207,70],"species":300},{"level":46,"moves":[73,185,46,178],"species":345},{"level":48,"moves":[57,14,70,7],"species":327},{"level":49,"moves":[76,157,14,163],"species":376}],"party_rom_address":3207144,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232260},{"battle_script_rom_address":2269104,"party":[{"level":48,"moves":[69,109,174,182],"species":362},{"level":49,"moves":[247,32,5,185],"species":378},{"level":50,"moves":[247,104,101,185],"species":322},{"level":49,"moves":[247,94,85,7],"species":378},{"level":51,"moves":[247,58,157,89],"species":362}],"party_rom_address":3207224,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232300},{"battle_script_rom_address":2269786,"party":[{"level":50,"moves":[227,34,2,45],"species":342},{"level":50,"moves":[113,242,196,58],"species":347},{"level":52,"moves":[213,38,2,59],"species":342},{"level":52,"moves":[247,153,2,58],"species":347},{"level":53,"moves":[57,34,58,73],"species":343}],"party_rom_address":3207304,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232340},{"battle_script_rom_address":2270448,"party":[{"level":52,"moves":[61,81,182,38],"species":396},{"level":54,"moves":[38,225,93,76],"species":359},{"level":53,"moves":[108,93,57,34],"species":230},{"level":53,"moves":[53,242,225,89],"species":334},{"level":55,"moves":[53,81,157,242],"species":397}],"party_rom_address":3207384,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232380},{"battle_script_rom_address":2181824,"party":[{"level":12,"moves":[33,111,88,61],"species":74},{"level":12,"moves":[33,111,88,61],"species":74},{"level":15,"moves":[79,106,33,61],"species":320}],"party_rom_address":3207464,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232420},{"battle_script_rom_address":2089070,"party":[{"level":16,"moves":[2,67,69,83],"species":66},{"level":16,"moves":[8,113,115,83],"species":356},{"level":19,"moves":[36,233,179,83],"species":335}],"party_rom_address":3207512,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232460},{"battle_script_rom_address":2161073,"party":[{"level":20,"moves":[205,209,120,95],"species":100},{"level":20,"moves":[95,43,98,80],"species":337},{"level":22,"moves":[48,95,86,49],"species":82},{"level":24,"moves":[98,86,95,80],"species":338}],"party_rom_address":3207560,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232500},{"battle_script_rom_address":2097176,"party":[{"level":24,"moves":[59,36,222,241],"species":339},{"level":24,"moves":[59,123,113,241],"species":218},{"level":26,"moves":[59,33,241,213],"species":340},{"level":29,"moves":[59,241,34,213],"species":321}],"party_rom_address":3207624,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232540},{"battle_script_rom_address":2123720,"party":[{"level":27,"moves":[42,60,7,227],"species":308},{"level":27,"moves":[163,7,227,185],"species":365},{"level":29,"moves":[163,187,7,29],"species":289},{"level":31,"moves":[68,25,7,185],"species":366}],"party_rom_address":3207688,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232580},{"battle_script_rom_address":2195894,"party":[{"level":29,"moves":[195,119,219,76],"species":358},{"level":29,"moves":[241,76,76,235],"species":369},{"level":30,"moves":[55,48,182,76],"species":310},{"level":31,"moves":[28,31,211,76],"species":227},{"level":33,"moves":[89,225,93,76],"species":359}],"party_rom_address":3207752,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232620},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[89,246,94,113],"species":319},{"level":41,"moves":[94,241,109,91],"species":178},{"level":42,"moves":[113,94,95,91],"species":348},{"level":42,"moves":[241,76,94,53],"species":349}],"party_rom_address":3207832,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232660},{"battle_script_rom_address":2255993,"party":[{"level":41,"moves":[96,213,186,175],"species":325},{"level":41,"moves":[240,96,133,89],"species":324},{"level":43,"moves":[227,34,62,96],"species":342},{"level":43,"moves":[96,152,13,43],"species":327},{"level":46,"moves":[96,104,58,156],"species":230}],"party_rom_address":3207896,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3232700},{"battle_script_rom_address":2048342,"party":[{"level":9,"moves":[0,0,0,0],"species":392}],"party_rom_address":3207976,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232740},{"battle_script_rom_address":2547425,"party":[{"level":17,"moves":[0,0,0,0],"species":392}],"party_rom_address":3207984,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232780},{"battle_script_rom_address":2547456,"party":[{"level":15,"moves":[0,0,0,0],"species":339},{"level":15,"moves":[0,0,0,0],"species":43},{"level":15,"moves":[0,0,0,0],"species":309}],"party_rom_address":3207992,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232820},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":392},{"level":26,"moves":[0,0,0,0],"species":356}],"party_rom_address":3208016,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232860},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":393},{"level":29,"moves":[0,0,0,0],"species":356}],"party_rom_address":3208032,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232900},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":393},{"level":32,"moves":[0,0,0,0],"species":357}],"party_rom_address":3208048,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232940},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":393},{"level":34,"moves":[0,0,0,0],"species":378},{"level":34,"moves":[0,0,0,0],"species":357}],"party_rom_address":3208064,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3232980},{"battle_script_rom_address":2048590,"party":[{"level":9,"moves":[0,0,0,0],"species":306}],"party_rom_address":3208088,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3233020},{"battle_script_rom_address":2547487,"party":[{"level":16,"moves":[0,0,0,0],"species":306},{"level":16,"moves":[0,0,0,0],"species":292}],"party_rom_address":3208096,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3233060},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":306},{"level":26,"moves":[0,0,0,0],"species":370}],"party_rom_address":3208112,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3233100},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":306},{"level":29,"moves":[0,0,0,0],"species":371}],"party_rom_address":3208128,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3233140},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":307},{"level":32,"moves":[0,0,0,0],"species":371}],"party_rom_address":3208144,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3233180},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":307},{"level":35,"moves":[0,0,0,0],"species":372}],"party_rom_address":3208160,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3233220},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[95,60,146,42],"species":308},{"level":32,"moves":[8,25,47,185],"species":366}],"party_rom_address":3208176,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3233260},{"battle_script_rom_address":0,"party":[{"level":15,"moves":[45,39,29,60],"species":288},{"level":17,"moves":[33,116,36,0],"species":335}],"party_rom_address":3208208,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3233300},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[45,39,29,60],"species":288},{"level":30,"moves":[33,116,36,0],"species":335}],"party_rom_address":3208240,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3233340},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[45,39,29,60],"species":288},{"level":33,"moves":[33,116,36,0],"species":335}],"party_rom_address":3208272,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3233380},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[45,39,29,60],"species":289},{"level":36,"moves":[33,116,36,0],"species":335}],"party_rom_address":3208304,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3233420},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[45,39,29,60],"species":289},{"level":38,"moves":[33,116,36,0],"species":336}],"party_rom_address":3208336,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3233460},{"battle_script_rom_address":2039914,"party":[{"level":16,"moves":[0,0,0,0],"species":304},{"level":16,"moves":[0,0,0,0],"species":288}],"party_rom_address":3208368,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233500},{"battle_script_rom_address":2020520,"party":[{"level":15,"moves":[0,0,0,0],"species":315}],"party_rom_address":3208384,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233540},{"battle_script_rom_address":2354243,"party":[{"level":22,"moves":[18,204,185,215],"species":315},{"level":36,"moves":[18,204,185,215],"species":315},{"level":40,"moves":[18,204,185,215],"species":315},{"level":12,"moves":[18,204,185,215],"species":315},{"level":30,"moves":[18,204,185,215],"species":315},{"level":42,"moves":[18,204,185,215],"species":316}],"party_rom_address":3208392,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3233580},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":315}],"party_rom_address":3208488,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233620},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":315}],"party_rom_address":3208496,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233660},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":316}],"party_rom_address":3208504,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233700},{"battle_script_rom_address":0,"party":[{"level":38,"moves":[0,0,0,0],"species":316}],"party_rom_address":3208512,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233740},{"battle_script_rom_address":2040019,"party":[{"level":17,"moves":[0,0,0,0],"species":363}],"party_rom_address":3208520,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233780},{"battle_script_rom_address":2061178,"party":[{"level":30,"moves":[0,0,0,0],"species":25}],"party_rom_address":3208528,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233820},{"battle_script_rom_address":2259573,"party":[{"level":35,"moves":[0,0,0,0],"species":350},{"level":37,"moves":[0,0,0,0],"species":183},{"level":39,"moves":[0,0,0,0],"species":184}],"party_rom_address":3208536,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233860},{"battle_script_rom_address":2033062,"party":[{"level":14,"moves":[0,0,0,0],"species":353},{"level":14,"moves":[0,0,0,0],"species":354}],"party_rom_address":3208560,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233900},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":353},{"level":26,"moves":[0,0,0,0],"species":354}],"party_rom_address":3208576,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233940},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":353},{"level":29,"moves":[0,0,0,0],"species":354}],"party_rom_address":3208592,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3233980},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":353},{"level":32,"moves":[0,0,0,0],"species":354}],"party_rom_address":3208608,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3234020},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":353},{"level":35,"moves":[0,0,0,0],"species":354}],"party_rom_address":3208624,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3234060},{"battle_script_rom_address":2046913,"party":[{"level":27,"moves":[0,0,0,0],"species":336}],"party_rom_address":3208640,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234100},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[36,26,28,91],"species":336}],"party_rom_address":3208648,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3234140},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[36,26,28,91],"species":336}],"party_rom_address":3208664,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3234180},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[36,187,28,91],"species":336}],"party_rom_address":3208680,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3234220},{"battle_script_rom_address":0,"party":[{"level":42,"moves":[36,187,28,91],"species":336}],"party_rom_address":3208696,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3234260},{"battle_script_rom_address":2040229,"party":[{"level":18,"moves":[136,96,93,197],"species":356}],"party_rom_address":3208712,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3234300},{"battle_script_rom_address":2297913,"party":[{"level":21,"moves":[0,0,0,0],"species":356},{"level":21,"moves":[0,0,0,0],"species":335}],"party_rom_address":3208728,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234340},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":356},{"level":30,"moves":[0,0,0,0],"species":335}],"party_rom_address":3208744,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234380},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":357},{"level":33,"moves":[0,0,0,0],"species":336}],"party_rom_address":3208760,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234420},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":357},{"level":36,"moves":[0,0,0,0],"species":336}],"party_rom_address":3208776,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234460},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":357},{"level":39,"moves":[0,0,0,0],"species":336}],"party_rom_address":3208792,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234500},{"battle_script_rom_address":2018881,"party":[{"level":5,"moves":[0,0,0,0],"species":286}],"party_rom_address":3208808,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234540},{"battle_script_rom_address":2023858,"party":[{"level":5,"moves":[0,0,0,0],"species":288},{"level":7,"moves":[0,0,0,0],"species":298}],"party_rom_address":3208816,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234580},{"battle_script_rom_address":2181995,"party":[{"level":10,"moves":[33,0,0,0],"species":74}],"party_rom_address":3208832,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3234620},{"battle_script_rom_address":2182026,"party":[{"level":8,"moves":[0,0,0,0],"species":74},{"level":8,"moves":[0,0,0,0],"species":74}],"party_rom_address":3208848,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234660},{"battle_script_rom_address":2048280,"party":[{"level":9,"moves":[0,0,0,0],"species":66}],"party_rom_address":3208864,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234700},{"battle_script_rom_address":2161555,"party":[{"level":17,"moves":[29,28,45,85],"species":288},{"level":17,"moves":[133,124,25,1],"species":367}],"party_rom_address":3208872,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3234740},{"battle_script_rom_address":2326366,"party":[{"level":43,"moves":[213,58,85,53],"species":366},{"level":43,"moves":[29,182,5,92],"species":362}],"party_rom_address":3208904,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3234780},{"battle_script_rom_address":2326397,"party":[{"level":43,"moves":[29,94,85,91],"species":394},{"level":43,"moves":[89,247,76,24],"species":366}],"party_rom_address":3208936,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3234820},{"battle_script_rom_address":2044723,"party":[{"level":19,"moves":[0,0,0,0],"species":332}],"party_rom_address":3208968,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234860},{"battle_script_rom_address":2044754,"party":[{"level":19,"moves":[0,0,0,0],"species":382}],"party_rom_address":3208976,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234900},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":287}],"party_rom_address":3208984,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234940},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":305},{"level":30,"moves":[0,0,0,0],"species":287}],"party_rom_address":3208992,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3234980},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":305},{"level":29,"moves":[0,0,0,0],"species":289},{"level":33,"moves":[0,0,0,0],"species":287}],"party_rom_address":3209008,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235020},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":305},{"level":32,"moves":[0,0,0,0],"species":289},{"level":36,"moves":[0,0,0,0],"species":287}],"party_rom_address":3209032,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235060},{"battle_script_rom_address":2546619,"party":[{"level":14,"moves":[0,0,0,0],"species":288},{"level":16,"moves":[0,0,0,0],"species":288}],"party_rom_address":3209056,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235100},{"battle_script_rom_address":2019129,"party":[{"level":4,"moves":[0,0,0,0],"species":288},{"level":3,"moves":[0,0,0,0],"species":304}],"party_rom_address":3209072,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235140},{"battle_script_rom_address":2033172,"party":[{"level":15,"moves":[0,0,0,0],"species":382},{"level":13,"moves":[0,0,0,0],"species":337}],"party_rom_address":3209088,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235180},{"battle_script_rom_address":2271299,"party":[{"level":57,"moves":[240,67,38,59],"species":314},{"level":55,"moves":[92,56,188,58],"species":73},{"level":56,"moves":[202,57,73,104],"species":297},{"level":56,"moves":[89,57,133,63],"species":324},{"level":56,"moves":[93,89,63,57],"species":130},{"level":58,"moves":[105,57,58,92],"species":329}],"party_rom_address":3209104,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3235220},{"battle_script_rom_address":2020489,"party":[{"level":5,"moves":[0,0,0,0],"species":129},{"level":10,"moves":[0,0,0,0],"species":72},{"level":15,"moves":[0,0,0,0],"species":129}],"party_rom_address":3209200,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235260},{"battle_script_rom_address":2023827,"party":[{"level":5,"moves":[0,0,0,0],"species":129},{"level":6,"moves":[0,0,0,0],"species":129},{"level":7,"moves":[0,0,0,0],"species":129}],"party_rom_address":3209224,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235300},{"battle_script_rom_address":2046307,"party":[{"level":16,"moves":[0,0,0,0],"species":129},{"level":17,"moves":[0,0,0,0],"species":118},{"level":18,"moves":[0,0,0,0],"species":323}],"party_rom_address":3209248,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235340},{"battle_script_rom_address":2028421,"party":[{"level":10,"moves":[0,0,0,0],"species":129},{"level":7,"moves":[0,0,0,0],"species":72},{"level":10,"moves":[0,0,0,0],"species":129}],"party_rom_address":3209272,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235380},{"battle_script_rom_address":2028531,"party":[{"level":11,"moves":[0,0,0,0],"species":72}],"party_rom_address":3209296,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235420},{"battle_script_rom_address":2032718,"party":[{"level":11,"moves":[0,0,0,0],"species":72},{"level":14,"moves":[0,0,0,0],"species":313},{"level":11,"moves":[0,0,0,0],"species":72},{"level":14,"moves":[0,0,0,0],"species":313}],"party_rom_address":3209304,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235460},{"battle_script_rom_address":2046338,"party":[{"level":19,"moves":[0,0,0,0],"species":323}],"party_rom_address":3209336,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235500},{"battle_script_rom_address":2052916,"party":[{"level":25,"moves":[0,0,0,0],"species":72},{"level":25,"moves":[0,0,0,0],"species":330}],"party_rom_address":3209344,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235540},{"battle_script_rom_address":2052947,"party":[{"level":16,"moves":[0,0,0,0],"species":72}],"party_rom_address":3209360,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235580},{"battle_script_rom_address":2030355,"party":[{"level":25,"moves":[0,0,0,0],"species":313},{"level":25,"moves":[0,0,0,0],"species":73}],"party_rom_address":3209368,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235620},{"battle_script_rom_address":0,"party":[{"level":24,"moves":[0,0,0,0],"species":72},{"level":27,"moves":[0,0,0,0],"species":130},{"level":27,"moves":[0,0,0,0],"species":130}],"party_rom_address":3209384,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235660},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":130},{"level":26,"moves":[0,0,0,0],"species":330},{"level":26,"moves":[0,0,0,0],"species":72},{"level":29,"moves":[0,0,0,0],"species":130}],"party_rom_address":3209408,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235700},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":130},{"level":30,"moves":[0,0,0,0],"species":330},{"level":30,"moves":[0,0,0,0],"species":73},{"level":31,"moves":[0,0,0,0],"species":130}],"party_rom_address":3209440,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235740},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":130},{"level":33,"moves":[0,0,0,0],"species":331},{"level":33,"moves":[0,0,0,0],"species":130},{"level":35,"moves":[0,0,0,0],"species":73}],"party_rom_address":3209472,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235780},{"battle_script_rom_address":2067670,"party":[{"level":19,"moves":[0,0,0,0],"species":129},{"level":21,"moves":[0,0,0,0],"species":130},{"level":23,"moves":[0,0,0,0],"species":130},{"level":26,"moves":[0,0,0,0],"species":130},{"level":30,"moves":[0,0,0,0],"species":130},{"level":35,"moves":[0,0,0,0],"species":130}],"party_rom_address":3209504,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235820},{"battle_script_rom_address":2032749,"party":[{"level":6,"moves":[0,0,0,0],"species":100},{"level":6,"moves":[0,0,0,0],"species":100},{"level":14,"moves":[0,0,0,0],"species":81}],"party_rom_address":3209552,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235860},{"battle_script_rom_address":2032780,"party":[{"level":14,"moves":[0,0,0,0],"species":81},{"level":14,"moves":[0,0,0,0],"species":81}],"party_rom_address":3209576,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235900},{"battle_script_rom_address":2032811,"party":[{"level":16,"moves":[0,0,0,0],"species":81}],"party_rom_address":3209592,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235940},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":81}],"party_rom_address":3209600,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3235980},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":81}],"party_rom_address":3209608,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236020},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":82}],"party_rom_address":3209616,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236060},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":82}],"party_rom_address":3209624,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236100},{"battle_script_rom_address":2032952,"party":[{"level":16,"moves":[0,0,0,0],"species":81}],"party_rom_address":3209632,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236140},{"battle_script_rom_address":2032921,"party":[{"level":14,"moves":[0,0,0,0],"species":81},{"level":14,"moves":[0,0,0,0],"species":81},{"level":6,"moves":[0,0,0,0],"species":100}],"party_rom_address":3209640,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236180},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":81}],"party_rom_address":3209664,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236220},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":81}],"party_rom_address":3209672,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236260},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":82}],"party_rom_address":3209680,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236300},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":82}],"party_rom_address":3209688,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236340},{"battle_script_rom_address":2051475,"party":[{"level":17,"moves":[0,0,0,0],"species":84}],"party_rom_address":3209696,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236380},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":84}],"party_rom_address":3209704,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236420},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":84}],"party_rom_address":3209712,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236460},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":85}],"party_rom_address":3209720,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236500},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":85}],"party_rom_address":3209728,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236540},{"battle_script_rom_address":2051585,"party":[{"level":17,"moves":[0,0,0,0],"species":84}],"party_rom_address":3209736,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236580},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":84}],"party_rom_address":3209744,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236620},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":84}],"party_rom_address":3209752,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236660},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":85}],"party_rom_address":3209760,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236700},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":85}],"party_rom_address":3209768,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236740},{"battle_script_rom_address":2064615,"party":[{"level":33,"moves":[0,0,0,0],"species":120},{"level":33,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209776,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236780},{"battle_script_rom_address":2333618,"party":[{"level":25,"moves":[0,0,0,0],"species":288},{"level":25,"moves":[0,0,0,0],"species":337}],"party_rom_address":3209792,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236820},{"battle_script_rom_address":2065332,"party":[{"level":35,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209808,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236860},{"battle_script_rom_address":2064413,"party":[{"level":33,"moves":[0,0,0,0],"species":120},{"level":33,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209816,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236900},{"battle_script_rom_address":2066978,"party":[{"level":26,"moves":[0,0,0,0],"species":309},{"level":34,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209832,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236940},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209848,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3236980},{"battle_script_rom_address":0,"party":[{"level":42,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209856,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237020},{"battle_script_rom_address":0,"party":[{"level":45,"moves":[0,0,0,0],"species":121}],"party_rom_address":3209864,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237060},{"battle_script_rom_address":0,"party":[{"level":48,"moves":[0,0,0,0],"species":121}],"party_rom_address":3209872,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237100},{"battle_script_rom_address":2064351,"party":[{"level":34,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209880,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237140},{"battle_script_rom_address":2064646,"party":[{"level":26,"moves":[0,0,0,0],"species":309},{"level":34,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209888,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237180},{"battle_script_rom_address":2067545,"party":[{"level":34,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209904,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237220},{"battle_script_rom_address":2065442,"party":[{"level":35,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209912,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237260},{"battle_script_rom_address":2067009,"party":[{"level":27,"moves":[0,0,0,0],"species":309},{"level":33,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209920,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237300},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209936,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237340},{"battle_script_rom_address":0,"party":[{"level":42,"moves":[0,0,0,0],"species":120}],"party_rom_address":3209944,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237380},{"battle_script_rom_address":0,"party":[{"level":45,"moves":[0,0,0,0],"species":121}],"party_rom_address":3209952,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237420},{"battle_script_rom_address":0,"party":[{"level":48,"moves":[0,0,0,0],"species":121}],"party_rom_address":3209960,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237460},{"battle_script_rom_address":2286394,"party":[{"level":37,"moves":[0,0,0,0],"species":359},{"level":37,"moves":[0,0,0,0],"species":359}],"party_rom_address":3209968,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237500},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[0,0,0,0],"species":359},{"level":41,"moves":[0,0,0,0],"species":359}],"party_rom_address":3209984,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237540},{"battle_script_rom_address":0,"party":[{"level":44,"moves":[0,0,0,0],"species":359},{"level":44,"moves":[0,0,0,0],"species":359}],"party_rom_address":3210000,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237580},{"battle_script_rom_address":0,"party":[{"level":46,"moves":[0,0,0,0],"species":395},{"level":46,"moves":[0,0,0,0],"species":359},{"level":46,"moves":[0,0,0,0],"species":359}],"party_rom_address":3210016,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237620},{"battle_script_rom_address":0,"party":[{"level":49,"moves":[0,0,0,0],"species":359},{"level":49,"moves":[0,0,0,0],"species":359},{"level":49,"moves":[0,0,0,0],"species":396}],"party_rom_address":3210040,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3237660},{"battle_script_rom_address":2068182,"party":[{"level":34,"moves":[225,29,116,52],"species":395}],"party_rom_address":3210064,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3237700},{"battle_script_rom_address":2053088,"party":[{"level":26,"moves":[0,0,0,0],"species":309}],"party_rom_address":3210080,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237740},{"battle_script_rom_address":2055395,"party":[{"level":25,"moves":[0,0,0,0],"species":309},{"level":25,"moves":[0,0,0,0],"species":369}],"party_rom_address":3210088,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237780},{"battle_script_rom_address":2055426,"party":[{"level":26,"moves":[0,0,0,0],"species":305}],"party_rom_address":3210104,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237820},{"battle_script_rom_address":2196092,"party":[{"level":27,"moves":[0,0,0,0],"species":84},{"level":27,"moves":[0,0,0,0],"species":227},{"level":27,"moves":[0,0,0,0],"species":369}],"party_rom_address":3210112,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237860},{"battle_script_rom_address":2196216,"party":[{"level":30,"moves":[0,0,0,0],"species":227}],"party_rom_address":3210136,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237900},{"battle_script_rom_address":2064118,"party":[{"level":33,"moves":[0,0,0,0],"species":369},{"level":33,"moves":[0,0,0,0],"species":178}],"party_rom_address":3210144,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237940},{"battle_script_rom_address":2196123,"party":[{"level":29,"moves":[0,0,0,0],"species":84},{"level":29,"moves":[0,0,0,0],"species":310}],"party_rom_address":3210160,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3237980},{"battle_script_rom_address":2059373,"party":[{"level":28,"moves":[0,0,0,0],"species":309},{"level":28,"moves":[0,0,0,0],"species":177}],"party_rom_address":3210176,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238020},{"battle_script_rom_address":2059404,"party":[{"level":29,"moves":[0,0,0,0],"species":358}],"party_rom_address":3210192,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238060},{"battle_script_rom_address":2556084,"party":[{"level":36,"moves":[0,0,0,0],"species":305},{"level":36,"moves":[0,0,0,0],"species":310},{"level":36,"moves":[0,0,0,0],"species":178}],"party_rom_address":3210200,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238100},{"battle_script_rom_address":2053119,"party":[{"level":25,"moves":[0,0,0,0],"species":304},{"level":25,"moves":[0,0,0,0],"species":305}],"party_rom_address":3210224,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238140},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":177},{"level":32,"moves":[0,0,0,0],"species":358}],"party_rom_address":3210240,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238180},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":177},{"level":35,"moves":[0,0,0,0],"species":359}],"party_rom_address":3210256,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238220},{"battle_script_rom_address":0,"party":[{"level":38,"moves":[0,0,0,0],"species":177},{"level":38,"moves":[0,0,0,0],"species":359}],"party_rom_address":3210272,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238260},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[0,0,0,0],"species":359},{"level":41,"moves":[0,0,0,0],"species":178}],"party_rom_address":3210288,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238300},{"battle_script_rom_address":2068151,"party":[{"level":33,"moves":[0,0,0,0],"species":177},{"level":33,"moves":[0,0,0,0],"species":305}],"party_rom_address":3210304,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238340},{"battle_script_rom_address":2067981,"party":[{"level":34,"moves":[0,0,0,0],"species":369}],"party_rom_address":3210320,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238380},{"battle_script_rom_address":2055457,"party":[{"level":26,"moves":[0,0,0,0],"species":302}],"party_rom_address":3210328,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238420},{"battle_script_rom_address":2055488,"party":[{"level":25,"moves":[0,0,0,0],"species":302},{"level":25,"moves":[0,0,0,0],"species":109}],"party_rom_address":3210336,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238460},{"battle_script_rom_address":2329166,"party":[{"level":43,"moves":[29,89,0,0],"species":319},{"level":43,"moves":[85,89,0,0],"species":171}],"party_rom_address":3210352,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3238500},{"battle_script_rom_address":2335401,"party":[{"level":26,"moves":[0,0,0,0],"species":183}],"party_rom_address":3210384,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238540},{"battle_script_rom_address":2044895,"party":[{"level":17,"moves":[139,33,123,120],"species":109},{"level":17,"moves":[139,33,123,120],"species":109},{"level":17,"moves":[139,33,124,120],"species":109}],"party_rom_address":3210392,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3238580},{"battle_script_rom_address":2045005,"party":[{"level":18,"moves":[0,0,0,0],"species":109},{"level":18,"moves":[0,0,0,0],"species":302}],"party_rom_address":3210440,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238620},{"battle_script_rom_address":0,"party":[{"level":24,"moves":[139,33,124,120],"species":109},{"level":24,"moves":[139,33,124,0],"species":109},{"level":24,"moves":[139,33,124,120],"species":109},{"level":26,"moves":[33,124,0,0],"species":109}],"party_rom_address":3210456,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3238660},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[139,33,124,120],"species":109},{"level":27,"moves":[139,33,124,120],"species":109},{"level":27,"moves":[139,33,124,0],"species":109},{"level":29,"moves":[33,124,0,0],"species":109}],"party_rom_address":3210520,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3238700},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[139,33,124,0],"species":109},{"level":30,"moves":[139,33,124,0],"species":109},{"level":30,"moves":[139,33,124,0],"species":109},{"level":32,"moves":[33,124,0,0],"species":109}],"party_rom_address":3210584,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3238740},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[139,33,124,0],"species":109},{"level":33,"moves":[139,33,124,120],"species":109},{"level":33,"moves":[139,33,124,120],"species":109},{"level":35,"moves":[33,124,0,0],"species":110}],"party_rom_address":3210648,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3238780},{"battle_script_rom_address":2089310,"party":[{"level":13,"moves":[0,0,0,0],"species":356}],"party_rom_address":3210712,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238820},{"battle_script_rom_address":2089348,"party":[{"level":13,"moves":[0,0,0,0],"species":356}],"party_rom_address":3210720,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238860},{"battle_script_rom_address":2047164,"party":[{"level":18,"moves":[0,0,0,0],"species":356},{"level":18,"moves":[0,0,0,0],"species":335}],"party_rom_address":3210728,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238900},{"battle_script_rom_address":2550554,"party":[{"level":27,"moves":[0,0,0,0],"species":356}],"party_rom_address":3210744,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238940},{"battle_script_rom_address":2550616,"party":[{"level":27,"moves":[0,0,0,0],"species":307}],"party_rom_address":3210752,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3238980},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":356},{"level":26,"moves":[0,0,0,0],"species":335}],"party_rom_address":3210760,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239020},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":356},{"level":29,"moves":[0,0,0,0],"species":335}],"party_rom_address":3210776,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239060},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":357},{"level":32,"moves":[0,0,0,0],"species":336}],"party_rom_address":3210792,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239100},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":357},{"level":35,"moves":[0,0,0,0],"species":336}],"party_rom_address":3210808,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239140},{"battle_script_rom_address":2044785,"party":[{"level":19,"moves":[52,33,222,241],"species":339}],"party_rom_address":3210824,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3239180},{"battle_script_rom_address":2059748,"party":[{"level":28,"moves":[0,0,0,0],"species":363},{"level":28,"moves":[0,0,0,0],"species":313}],"party_rom_address":3210840,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239220},{"battle_script_rom_address":2059779,"party":[{"level":30,"moves":[240,55,87,96],"species":385}],"party_rom_address":3210856,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3239260},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[52,33,222,241],"species":339}],"party_rom_address":3210872,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3239300},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[52,36,222,241],"species":339}],"party_rom_address":3210888,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3239340},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[73,72,64,241],"species":363},{"level":34,"moves":[53,36,222,241],"species":339}],"party_rom_address":3210904,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3239380},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[73,202,76,241],"species":363},{"level":37,"moves":[53,36,89,241],"species":340}],"party_rom_address":3210936,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3239420},{"battle_script_rom_address":2027807,"party":[{"level":25,"moves":[0,0,0,0],"species":309},{"level":25,"moves":[0,0,0,0],"species":313}],"party_rom_address":3210968,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239460},{"battle_script_rom_address":2027838,"party":[{"level":26,"moves":[0,0,0,0],"species":183}],"party_rom_address":3210984,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239500},{"battle_script_rom_address":2028390,"party":[{"level":26,"moves":[0,0,0,0],"species":313}],"party_rom_address":3210992,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239540},{"battle_script_rom_address":2028794,"party":[{"level":25,"moves":[0,0,0,0],"species":309},{"level":25,"moves":[0,0,0,0],"species":118}],"party_rom_address":3211000,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239580},{"battle_script_rom_address":2028825,"party":[{"level":26,"moves":[0,0,0,0],"species":118}],"party_rom_address":3211016,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239620},{"battle_script_rom_address":2029012,"party":[{"level":25,"moves":[0,0,0,0],"species":116},{"level":25,"moves":[0,0,0,0],"species":183}],"party_rom_address":3211024,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239660},{"battle_script_rom_address":2029043,"party":[{"level":26,"moves":[0,0,0,0],"species":118}],"party_rom_address":3211040,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239700},{"battle_script_rom_address":2029980,"party":[{"level":24,"moves":[0,0,0,0],"species":118},{"level":24,"moves":[0,0,0,0],"species":309},{"level":24,"moves":[0,0,0,0],"species":118}],"party_rom_address":3211048,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239740},{"battle_script_rom_address":2063273,"party":[{"level":34,"moves":[0,0,0,0],"species":313}],"party_rom_address":3211072,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239780},{"battle_script_rom_address":2063383,"party":[{"level":34,"moves":[0,0,0,0],"species":183}],"party_rom_address":3211080,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239820},{"battle_script_rom_address":2063884,"party":[{"level":34,"moves":[0,0,0,0],"species":325}],"party_rom_address":3211088,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239860},{"battle_script_rom_address":2063915,"party":[{"level":34,"moves":[0,0,0,0],"species":119}],"party_rom_address":3211096,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239900},{"battle_script_rom_address":2064258,"party":[{"level":33,"moves":[0,0,0,0],"species":183},{"level":33,"moves":[0,0,0,0],"species":341}],"party_rom_address":3211104,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239940},{"battle_script_rom_address":2064289,"party":[{"level":34,"moves":[0,0,0,0],"species":118}],"party_rom_address":3211120,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3239980},{"battle_script_rom_address":2067260,"party":[{"level":33,"moves":[0,0,0,0],"species":118},{"level":33,"moves":[0,0,0,0],"species":341}],"party_rom_address":3211128,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240020},{"battle_script_rom_address":2067421,"party":[{"level":34,"moves":[0,0,0,0],"species":325}],"party_rom_address":3211144,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240060},{"battle_script_rom_address":2067452,"party":[{"level":34,"moves":[0,0,0,0],"species":119}],"party_rom_address":3211152,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240100},{"battle_script_rom_address":2067639,"party":[{"level":34,"moves":[0,0,0,0],"species":184}],"party_rom_address":3211160,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240140},{"battle_script_rom_address":2064382,"party":[{"level":33,"moves":[0,0,0,0],"species":325},{"level":33,"moves":[0,0,0,0],"species":325}],"party_rom_address":3211168,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240180},{"battle_script_rom_address":2067888,"party":[{"level":34,"moves":[0,0,0,0],"species":119}],"party_rom_address":3211184,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240220},{"battle_script_rom_address":2067919,"party":[{"level":33,"moves":[0,0,0,0],"species":116},{"level":33,"moves":[0,0,0,0],"species":117}],"party_rom_address":3211192,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240260},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":171},{"level":34,"moves":[0,0,0,0],"species":310}],"party_rom_address":3211208,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240300},{"battle_script_rom_address":2068120,"party":[{"level":33,"moves":[0,0,0,0],"species":325},{"level":33,"moves":[0,0,0,0],"species":325}],"party_rom_address":3211224,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240340},{"battle_script_rom_address":2065676,"party":[{"level":35,"moves":[0,0,0,0],"species":119}],"party_rom_address":3211240,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240380},{"battle_script_rom_address":0,"party":[{"level":38,"moves":[0,0,0,0],"species":313}],"party_rom_address":3211248,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240420},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[0,0,0,0],"species":313}],"party_rom_address":3211256,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240460},{"battle_script_rom_address":0,"party":[{"level":43,"moves":[0,0,0,0],"species":120},{"level":43,"moves":[0,0,0,0],"species":313}],"party_rom_address":3211264,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240500},{"battle_script_rom_address":0,"party":[{"level":45,"moves":[0,0,0,0],"species":325},{"level":45,"moves":[0,0,0,0],"species":313},{"level":45,"moves":[0,0,0,0],"species":121}],"party_rom_address":3211280,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240540},{"battle_script_rom_address":2040526,"party":[{"level":22,"moves":[91,28,40,163],"species":27},{"level":22,"moves":[229,189,60,61],"species":318}],"party_rom_address":3211304,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3240580},{"battle_script_rom_address":2040588,"party":[{"level":22,"moves":[28,40,163,91],"species":27},{"level":22,"moves":[205,61,39,111],"species":183}],"party_rom_address":3211336,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3240620},{"battle_script_rom_address":2043989,"party":[{"level":17,"moves":[0,0,0,0],"species":304},{"level":17,"moves":[0,0,0,0],"species":296}],"party_rom_address":3211368,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240660},{"battle_script_rom_address":2046056,"party":[{"level":18,"moves":[0,0,0,0],"species":183},{"level":18,"moves":[0,0,0,0],"species":296}],"party_rom_address":3211384,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240700},{"battle_script_rom_address":2549863,"party":[{"level":23,"moves":[0,0,0,0],"species":315},{"level":23,"moves":[0,0,0,0],"species":358}],"party_rom_address":3211400,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240740},{"battle_script_rom_address":2303728,"party":[{"level":19,"moves":[0,0,0,0],"species":306},{"level":19,"moves":[0,0,0,0],"species":43},{"level":19,"moves":[0,0,0,0],"species":358}],"party_rom_address":3211416,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240780},{"battle_script_rom_address":2309489,"party":[{"level":32,"moves":[194,219,68,243],"species":202}],"party_rom_address":3211440,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3240820},{"battle_script_rom_address":2040760,"party":[{"level":17,"moves":[0,0,0,0],"species":306},{"level":17,"moves":[0,0,0,0],"species":183}],"party_rom_address":3211456,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240860},{"battle_script_rom_address":0,"party":[{"level":25,"moves":[0,0,0,0],"species":306},{"level":25,"moves":[0,0,0,0],"species":44},{"level":25,"moves":[0,0,0,0],"species":358}],"party_rom_address":3211472,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240900},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":307},{"level":28,"moves":[0,0,0,0],"species":44},{"level":28,"moves":[0,0,0,0],"species":358}],"party_rom_address":3211496,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240940},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":307},{"level":31,"moves":[0,0,0,0],"species":44},{"level":31,"moves":[0,0,0,0],"species":358}],"party_rom_address":3211520,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3240980},{"battle_script_rom_address":0,"party":[{"level":40,"moves":[0,0,0,0],"species":307},{"level":40,"moves":[0,0,0,0],"species":45},{"level":40,"moves":[0,0,0,0],"species":359}],"party_rom_address":3211544,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241020},{"battle_script_rom_address":0,"party":[{"level":15,"moves":[0,0,0,0],"species":353},{"level":15,"moves":[0,0,0,0],"species":354}],"party_rom_address":3211568,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241060},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":353},{"level":27,"moves":[0,0,0,0],"species":354}],"party_rom_address":3211584,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241100},{"battle_script_rom_address":0,"party":[{"level":6,"moves":[0,0,0,0],"species":298},{"level":6,"moves":[0,0,0,0],"species":295}],"party_rom_address":3211600,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241140},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":292},{"level":26,"moves":[0,0,0,0],"species":294}],"party_rom_address":3211616,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241180},{"battle_script_rom_address":0,"party":[{"level":9,"moves":[0,0,0,0],"species":353},{"level":9,"moves":[0,0,0,0],"species":354}],"party_rom_address":3211632,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241220},{"battle_script_rom_address":0,"party":[{"level":10,"moves":[101,50,0,0],"species":361},{"level":10,"moves":[71,73,0,0],"species":306}],"party_rom_address":3211648,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3241260},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":353},{"level":30,"moves":[0,0,0,0],"species":354}],"party_rom_address":3211680,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241300},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[209,12,57,14],"species":353},{"level":33,"moves":[209,12,204,14],"species":354}],"party_rom_address":3211696,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3241340},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[87,12,57,14],"species":353},{"level":36,"moves":[87,12,204,14],"species":354}],"party_rom_address":3211728,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3241380},{"battle_script_rom_address":2030011,"party":[{"level":12,"moves":[0,0,0,0],"species":309},{"level":12,"moves":[0,0,0,0],"species":66}],"party_rom_address":3211760,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241420},{"battle_script_rom_address":2030042,"party":[{"level":13,"moves":[0,0,0,0],"species":309}],"party_rom_address":3211776,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241460},{"battle_script_rom_address":2063946,"party":[{"level":33,"moves":[0,0,0,0],"species":309},{"level":33,"moves":[0,0,0,0],"species":67}],"party_rom_address":3211784,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241500},{"battle_script_rom_address":2537258,"party":[{"level":11,"moves":[0,0,0,0],"species":309},{"level":11,"moves":[0,0,0,0],"species":66},{"level":11,"moves":[0,0,0,0],"species":72}],"party_rom_address":3211800,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241540},{"battle_script_rom_address":2353667,"party":[{"level":44,"moves":[0,0,0,0],"species":73},{"level":44,"moves":[0,0,0,0],"species":67}],"party_rom_address":3211824,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241580},{"battle_script_rom_address":2353698,"party":[{"level":43,"moves":[0,0,0,0],"species":66},{"level":43,"moves":[0,0,0,0],"species":310},{"level":43,"moves":[0,0,0,0],"species":67}],"party_rom_address":3211840,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241620},{"battle_script_rom_address":2334525,"party":[{"level":25,"moves":[0,0,0,0],"species":341},{"level":25,"moves":[0,0,0,0],"species":67}],"party_rom_address":3211864,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241660},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":309},{"level":36,"moves":[0,0,0,0],"species":72},{"level":36,"moves":[0,0,0,0],"species":67}],"party_rom_address":3211880,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241700},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":310},{"level":39,"moves":[0,0,0,0],"species":72},{"level":39,"moves":[0,0,0,0],"species":67}],"party_rom_address":3211904,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241740},{"battle_script_rom_address":0,"party":[{"level":42,"moves":[0,0,0,0],"species":310},{"level":42,"moves":[0,0,0,0],"species":72},{"level":42,"moves":[0,0,0,0],"species":67}],"party_rom_address":3211928,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241780},{"battle_script_rom_address":0,"party":[{"level":45,"moves":[0,0,0,0],"species":310},{"level":45,"moves":[0,0,0,0],"species":67},{"level":45,"moves":[0,0,0,0],"species":73}],"party_rom_address":3211952,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241820},{"battle_script_rom_address":2097615,"party":[{"level":23,"moves":[0,0,0,0],"species":339}],"party_rom_address":3211976,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241860},{"battle_script_rom_address":2259604,"party":[{"level":39,"moves":[175,96,216,213],"species":328},{"level":39,"moves":[175,96,216,213],"species":328}],"party_rom_address":3211984,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3241900},{"battle_script_rom_address":2062680,"party":[{"level":27,"moves":[0,0,0,0],"species":376}],"party_rom_address":3212016,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3241940},{"battle_script_rom_address":2062649,"party":[{"level":31,"moves":[92,87,120,188],"species":109}],"party_rom_address":3212024,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3241980},{"battle_script_rom_address":2062618,"party":[{"level":31,"moves":[241,55,53,76],"species":385}],"party_rom_address":3212040,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3242020},{"battle_script_rom_address":2064149,"party":[{"level":33,"moves":[0,0,0,0],"species":338},{"level":33,"moves":[0,0,0,0],"species":68}],"party_rom_address":3212056,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242060},{"battle_script_rom_address":2068337,"party":[{"level":33,"moves":[0,0,0,0],"species":67},{"level":33,"moves":[0,0,0,0],"species":341}],"party_rom_address":3212072,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242100},{"battle_script_rom_address":2068306,"party":[{"level":34,"moves":[44,46,86,85],"species":338}],"party_rom_address":3212088,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3242140},{"battle_script_rom_address":2068275,"party":[{"level":33,"moves":[0,0,0,0],"species":356},{"level":33,"moves":[0,0,0,0],"species":336}],"party_rom_address":3212104,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242180},{"battle_script_rom_address":2068244,"party":[{"level":34,"moves":[0,0,0,0],"species":313}],"party_rom_address":3212120,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242220},{"battle_script_rom_address":2068043,"party":[{"level":33,"moves":[0,0,0,0],"species":170},{"level":33,"moves":[0,0,0,0],"species":336}],"party_rom_address":3212128,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242260},{"battle_script_rom_address":2032608,"party":[{"level":14,"moves":[0,0,0,0],"species":296},{"level":14,"moves":[0,0,0,0],"species":299}],"party_rom_address":3212144,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242300},{"battle_script_rom_address":2047274,"party":[{"level":18,"moves":[0,0,0,0],"species":380},{"level":18,"moves":[0,0,0,0],"species":379}],"party_rom_address":3212160,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242340},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":340},{"level":38,"moves":[0,0,0,0],"species":287},{"level":40,"moves":[0,0,0,0],"species":42}],"party_rom_address":3212176,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242380},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":296},{"level":26,"moves":[0,0,0,0],"species":299}],"party_rom_address":3212200,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242420},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":296},{"level":29,"moves":[0,0,0,0],"species":299}],"party_rom_address":3212216,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242460},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":296},{"level":32,"moves":[0,0,0,0],"species":299}],"party_rom_address":3212232,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242500},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":297},{"level":35,"moves":[0,0,0,0],"species":300}],"party_rom_address":3212248,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242540},{"battle_script_rom_address":2326117,"party":[{"level":44,"moves":[76,219,225,93],"species":359},{"level":43,"moves":[47,18,204,185],"species":316},{"level":44,"moves":[89,73,202,92],"species":363},{"level":41,"moves":[48,85,161,103],"species":82},{"level":45,"moves":[104,91,94,248],"species":394}],"party_rom_address":3212264,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3242580},{"battle_script_rom_address":2019962,"party":[{"level":5,"moves":[0,0,0,0],"species":277}],"party_rom_address":3212344,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242620},{"battle_script_rom_address":2033952,"party":[{"level":18,"moves":[0,0,0,0],"species":218},{"level":18,"moves":[0,0,0,0],"species":309},{"level":20,"moves":[0,0,0,0],"species":278}],"party_rom_address":3212352,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242660},{"battle_script_rom_address":2054543,"party":[{"level":29,"moves":[0,0,0,0],"species":218},{"level":29,"moves":[0,0,0,0],"species":310},{"level":31,"moves":[0,0,0,0],"species":278}],"party_rom_address":3212376,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242700},{"battle_script_rom_address":2019906,"party":[{"level":5,"moves":[0,0,0,0],"species":280}],"party_rom_address":3212400,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242740},{"battle_script_rom_address":2033896,"party":[{"level":18,"moves":[0,0,0,0],"species":309},{"level":18,"moves":[0,0,0,0],"species":296},{"level":20,"moves":[0,0,0,0],"species":281}],"party_rom_address":3212408,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242780},{"battle_script_rom_address":2054487,"party":[{"level":29,"moves":[0,0,0,0],"species":310},{"level":29,"moves":[0,0,0,0],"species":296},{"level":31,"moves":[0,0,0,0],"species":281}],"party_rom_address":3212432,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242820},{"battle_script_rom_address":2019934,"party":[{"level":5,"moves":[0,0,0,0],"species":283}],"party_rom_address":3212456,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242860},{"battle_script_rom_address":2033924,"party":[{"level":18,"moves":[0,0,0,0],"species":296},{"level":18,"moves":[0,0,0,0],"species":218},{"level":20,"moves":[0,0,0,0],"species":284}],"party_rom_address":3212464,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242900},{"battle_script_rom_address":2054515,"party":[{"level":29,"moves":[0,0,0,0],"species":296},{"level":29,"moves":[0,0,0,0],"species":218},{"level":31,"moves":[0,0,0,0],"species":284}],"party_rom_address":3212488,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242940},{"battle_script_rom_address":2019878,"party":[{"level":5,"moves":[0,0,0,0],"species":277}],"party_rom_address":3212512,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3242980},{"battle_script_rom_address":2033794,"party":[{"level":18,"moves":[0,0,0,0],"species":309},{"level":18,"moves":[0,0,0,0],"species":218},{"level":20,"moves":[0,0,0,0],"species":278}],"party_rom_address":3212520,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243020},{"battle_script_rom_address":2054385,"party":[{"level":29,"moves":[0,0,0,0],"species":218},{"level":29,"moves":[0,0,0,0],"species":296},{"level":31,"moves":[0,0,0,0],"species":278}],"party_rom_address":3212544,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243060},{"battle_script_rom_address":2019822,"party":[{"level":5,"moves":[0,0,0,0],"species":280}],"party_rom_address":3212568,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243100},{"battle_script_rom_address":2033738,"party":[{"level":18,"moves":[0,0,0,0],"species":309},{"level":18,"moves":[0,0,0,0],"species":296},{"level":20,"moves":[0,0,0,0],"species":281}],"party_rom_address":3212576,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243140},{"battle_script_rom_address":2054329,"party":[{"level":29,"moves":[0,0,0,0],"species":310},{"level":29,"moves":[0,0,0,0],"species":296},{"level":31,"moves":[0,0,0,0],"species":281}],"party_rom_address":3212600,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243180},{"battle_script_rom_address":2019850,"party":[{"level":5,"moves":[0,0,0,0],"species":283}],"party_rom_address":3212624,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243220},{"battle_script_rom_address":2033766,"party":[{"level":18,"moves":[0,0,0,0],"species":296},{"level":18,"moves":[0,0,0,0],"species":218},{"level":20,"moves":[0,0,0,0],"species":284}],"party_rom_address":3212632,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243260},{"battle_script_rom_address":2054357,"party":[{"level":29,"moves":[0,0,0,0],"species":296},{"level":29,"moves":[0,0,0,0],"species":218},{"level":31,"moves":[0,0,0,0],"species":284}],"party_rom_address":3212656,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243300},{"battle_script_rom_address":2051255,"party":[{"level":11,"moves":[0,0,0,0],"species":370},{"level":11,"moves":[0,0,0,0],"species":288},{"level":11,"moves":[0,0,0,0],"species":382},{"level":11,"moves":[0,0,0,0],"species":286},{"level":11,"moves":[0,0,0,0],"species":304},{"level":11,"moves":[0,0,0,0],"species":335}],"party_rom_address":3212680,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243340},{"battle_script_rom_address":2062711,"party":[{"level":27,"moves":[0,0,0,0],"species":127}],"party_rom_address":3212728,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243380},{"battle_script_rom_address":2328056,"party":[{"level":43,"moves":[153,115,113,94],"species":348},{"level":43,"moves":[153,115,113,247],"species":349}],"party_rom_address":3212736,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3243420},{"battle_script_rom_address":0,"party":[{"level":22,"moves":[0,0,0,0],"species":371},{"level":22,"moves":[0,0,0,0],"species":289},{"level":22,"moves":[0,0,0,0],"species":382},{"level":22,"moves":[0,0,0,0],"species":287},{"level":22,"moves":[0,0,0,0],"species":305},{"level":22,"moves":[0,0,0,0],"species":335}],"party_rom_address":3212768,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243460},{"battle_script_rom_address":0,"party":[{"level":25,"moves":[0,0,0,0],"species":371},{"level":25,"moves":[0,0,0,0],"species":289},{"level":25,"moves":[0,0,0,0],"species":382},{"level":25,"moves":[0,0,0,0],"species":287},{"level":25,"moves":[0,0,0,0],"species":305},{"level":25,"moves":[0,0,0,0],"species":336}],"party_rom_address":3212816,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243500},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":371},{"level":28,"moves":[0,0,0,0],"species":289},{"level":28,"moves":[0,0,0,0],"species":382},{"level":28,"moves":[0,0,0,0],"species":287},{"level":28,"moves":[0,0,0,0],"species":305},{"level":28,"moves":[0,0,0,0],"species":336}],"party_rom_address":3212864,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243540},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":371},{"level":31,"moves":[0,0,0,0],"species":289},{"level":31,"moves":[0,0,0,0],"species":383},{"level":31,"moves":[0,0,0,0],"species":287},{"level":31,"moves":[0,0,0,0],"species":305},{"level":31,"moves":[0,0,0,0],"species":336}],"party_rom_address":3212912,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243580},{"battle_script_rom_address":2051365,"party":[{"level":11,"moves":[0,0,0,0],"species":309},{"level":11,"moves":[0,0,0,0],"species":306},{"level":11,"moves":[0,0,0,0],"species":183},{"level":11,"moves":[0,0,0,0],"species":363},{"level":11,"moves":[0,0,0,0],"species":315},{"level":11,"moves":[0,0,0,0],"species":118}],"party_rom_address":3212960,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243620},{"battle_script_rom_address":2328087,"party":[{"level":43,"moves":[0,0,0,0],"species":322},{"level":43,"moves":[0,0,0,0],"species":376}],"party_rom_address":3213008,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243660},{"battle_script_rom_address":2335432,"party":[{"level":26,"moves":[0,0,0,0],"species":28}],"party_rom_address":3213024,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243700},{"battle_script_rom_address":0,"party":[{"level":22,"moves":[0,0,0,0],"species":309},{"level":22,"moves":[0,0,0,0],"species":306},{"level":22,"moves":[0,0,0,0],"species":183},{"level":22,"moves":[0,0,0,0],"species":363},{"level":22,"moves":[0,0,0,0],"species":315},{"level":22,"moves":[0,0,0,0],"species":118}],"party_rom_address":3213032,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243740},{"battle_script_rom_address":0,"party":[{"level":25,"moves":[0,0,0,0],"species":310},{"level":25,"moves":[0,0,0,0],"species":307},{"level":25,"moves":[0,0,0,0],"species":183},{"level":25,"moves":[0,0,0,0],"species":363},{"level":25,"moves":[0,0,0,0],"species":316},{"level":25,"moves":[0,0,0,0],"species":118}],"party_rom_address":3213080,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243780},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":310},{"level":28,"moves":[0,0,0,0],"species":307},{"level":28,"moves":[0,0,0,0],"species":183},{"level":28,"moves":[0,0,0,0],"species":363},{"level":28,"moves":[0,0,0,0],"species":316},{"level":28,"moves":[0,0,0,0],"species":118}],"party_rom_address":3213128,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243820},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":310},{"level":31,"moves":[0,0,0,0],"species":307},{"level":31,"moves":[0,0,0,0],"species":184},{"level":31,"moves":[0,0,0,0],"species":363},{"level":31,"moves":[0,0,0,0],"species":316},{"level":31,"moves":[0,0,0,0],"species":119}],"party_rom_address":3213176,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243860},{"battle_script_rom_address":2055175,"party":[{"level":27,"moves":[0,0,0,0],"species":307}],"party_rom_address":3213224,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243900},{"battle_script_rom_address":2059514,"party":[{"level":28,"moves":[0,0,0,0],"species":298},{"level":28,"moves":[0,0,0,0],"species":299},{"level":28,"moves":[0,0,0,0],"species":296}],"party_rom_address":3213232,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243940},{"battle_script_rom_address":2556115,"party":[{"level":39,"moves":[0,0,0,0],"species":345}],"party_rom_address":3213256,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3243980},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":307}],"party_rom_address":3213264,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244020},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":307}],"party_rom_address":3213272,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244060},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":307}],"party_rom_address":3213280,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244100},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":317},{"level":39,"moves":[0,0,0,0],"species":307}],"party_rom_address":3213288,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244140},{"battle_script_rom_address":2055285,"party":[{"level":26,"moves":[0,0,0,0],"species":44},{"level":26,"moves":[0,0,0,0],"species":363}],"party_rom_address":3213304,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244180},{"battle_script_rom_address":2059545,"party":[{"level":28,"moves":[0,0,0,0],"species":295},{"level":28,"moves":[0,0,0,0],"species":296},{"level":28,"moves":[0,0,0,0],"species":299}],"party_rom_address":3213320,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244220},{"battle_script_rom_address":2556053,"party":[{"level":38,"moves":[0,0,0,0],"species":358},{"level":38,"moves":[0,0,0,0],"species":363}],"party_rom_address":3213344,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244260},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":44},{"level":30,"moves":[0,0,0,0],"species":363}],"party_rom_address":3213360,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244300},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":44},{"level":33,"moves":[0,0,0,0],"species":363}],"party_rom_address":3213376,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244340},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":44},{"level":36,"moves":[0,0,0,0],"species":363}],"party_rom_address":3213392,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244380},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":182},{"level":39,"moves":[0,0,0,0],"species":363}],"party_rom_address":3213408,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244420},{"battle_script_rom_address":2303942,"party":[{"level":21,"moves":[0,0,0,0],"species":81}],"party_rom_address":3213424,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244460},{"battle_script_rom_address":2320797,"party":[{"level":35,"moves":[0,0,0,0],"species":287},{"level":35,"moves":[0,0,0,0],"species":42}],"party_rom_address":3213432,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244500},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":313},{"level":31,"moves":[0,0,0,0],"species":41}],"party_rom_address":3213448,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244540},{"battle_script_rom_address":2311225,"party":[{"level":30,"moves":[0,0,0,0],"species":313},{"level":30,"moves":[0,0,0,0],"species":41}],"party_rom_address":3213464,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244580},{"battle_script_rom_address":2303629,"party":[{"level":22,"moves":[0,0,0,0],"species":286},{"level":22,"moves":[0,0,0,0],"species":339}],"party_rom_address":3213480,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244620},{"battle_script_rom_address":2182057,"party":[{"level":8,"moves":[0,0,0,0],"species":74},{"level":8,"moves":[0,0,0,0],"species":74}],"party_rom_address":3213496,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244660},{"battle_script_rom_address":2089386,"party":[{"level":13,"moves":[0,0,0,0],"species":66}],"party_rom_address":3213512,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244700},{"battle_script_rom_address":2089462,"party":[{"level":13,"moves":[0,0,0,0],"species":356}],"party_rom_address":3213520,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244740},{"battle_script_rom_address":2089424,"party":[{"level":13,"moves":[0,0,0,0],"species":335}],"party_rom_address":3213528,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244780},{"battle_script_rom_address":2238458,"party":[{"level":36,"moves":[0,0,0,0],"species":356}],"party_rom_address":3213536,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244820},{"battle_script_rom_address":2064320,"party":[{"level":34,"moves":[0,0,0,0],"species":330}],"party_rom_address":3213544,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244860},{"battle_script_rom_address":2064801,"party":[{"level":32,"moves":[87,86,98,0],"species":338},{"level":32,"moves":[57,168,0,0],"species":289}],"party_rom_address":3213552,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3244900},{"battle_script_rom_address":2065645,"party":[{"level":35,"moves":[0,0,0,0],"species":73}],"party_rom_address":3213584,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244940},{"battle_script_rom_address":2297708,"party":[{"level":20,"moves":[0,0,0,0],"species":41}],"party_rom_address":3213592,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3244980},{"battle_script_rom_address":2067102,"party":[{"level":34,"moves":[0,0,0,0],"species":331}],"party_rom_address":3213600,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245020},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":203}],"party_rom_address":3213608,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245060},{"battle_script_rom_address":2238489,"party":[{"level":36,"moves":[0,0,0,0],"species":351}],"party_rom_address":3213616,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245100},{"battle_script_rom_address":2238613,"party":[{"level":36,"moves":[0,0,0,0],"species":64}],"party_rom_address":3213624,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245140},{"battle_script_rom_address":2238551,"party":[{"level":36,"moves":[0,0,0,0],"species":203}],"party_rom_address":3213632,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245180},{"battle_script_rom_address":2238582,"party":[{"level":36,"moves":[0,0,0,0],"species":202}],"party_rom_address":3213640,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245220},{"battle_script_rom_address":2248375,"party":[{"level":31,"moves":[0,0,0,0],"species":41},{"level":31,"moves":[0,0,0,0],"species":286}],"party_rom_address":3213648,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245260},{"battle_script_rom_address":2248437,"party":[{"level":32,"moves":[0,0,0,0],"species":318}],"party_rom_address":3213664,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245300},{"battle_script_rom_address":2251538,"party":[{"level":32,"moves":[0,0,0,0],"species":41}],"party_rom_address":3213672,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245340},{"battle_script_rom_address":2251588,"party":[{"level":32,"moves":[0,0,0,0],"species":287}],"party_rom_address":3213680,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245380},{"battle_script_rom_address":2251638,"party":[{"level":32,"moves":[0,0,0,0],"species":318}],"party_rom_address":3213688,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245420},{"battle_script_rom_address":2238520,"party":[{"level":36,"moves":[0,0,0,0],"species":177}],"party_rom_address":3213696,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245460},{"battle_script_rom_address":1973930,"party":[{"level":13,"moves":[0,0,0,0],"species":295},{"level":15,"moves":[0,0,0,0],"species":280}],"party_rom_address":3213704,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245500},{"battle_script_rom_address":1973992,"party":[{"level":13,"moves":[0,0,0,0],"species":309},{"level":15,"moves":[0,0,0,0],"species":277}],"party_rom_address":3213720,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245540},{"battle_script_rom_address":2067732,"party":[{"level":33,"moves":[0,0,0,0],"species":305},{"level":33,"moves":[0,0,0,0],"species":307}],"party_rom_address":3213736,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245580},{"battle_script_rom_address":2063684,"party":[{"level":34,"moves":[0,0,0,0],"species":120}],"party_rom_address":3213752,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245620},{"battle_script_rom_address":2564748,"party":[{"level":27,"moves":[0,0,0,0],"species":41},{"level":27,"moves":[0,0,0,0],"species":286}],"party_rom_address":3213760,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245660},{"battle_script_rom_address":2297677,"party":[{"level":18,"moves":[0,0,0,0],"species":339},{"level":20,"moves":[0,0,0,0],"species":286},{"level":22,"moves":[0,0,0,0],"species":339},{"level":22,"moves":[0,0,0,0],"species":41}],"party_rom_address":3213776,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245700},{"battle_script_rom_address":2067794,"party":[{"level":33,"moves":[0,0,0,0],"species":317},{"level":33,"moves":[0,0,0,0],"species":371}],"party_rom_address":3213808,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245740},{"battle_script_rom_address":1973961,"party":[{"level":13,"moves":[0,0,0,0],"species":218},{"level":15,"moves":[0,0,0,0],"species":283}],"party_rom_address":3213824,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245780},{"battle_script_rom_address":1973706,"party":[{"level":13,"moves":[0,0,0,0],"species":309},{"level":15,"moves":[0,0,0,0],"species":277}],"party_rom_address":3213840,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245820},{"battle_script_rom_address":2344934,"party":[{"level":37,"moves":[0,0,0,0],"species":287},{"level":38,"moves":[0,0,0,0],"species":169},{"level":39,"moves":[0,0,0,0],"species":340}],"party_rom_address":3213856,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245860},{"battle_script_rom_address":2297108,"party":[{"level":24,"moves":[0,0,0,0],"species":287},{"level":24,"moves":[0,0,0,0],"species":41},{"level":25,"moves":[0,0,0,0],"species":340}],"party_rom_address":3213880,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245900},{"battle_script_rom_address":2019098,"party":[{"level":4,"moves":[0,0,0,0],"species":288},{"level":4,"moves":[0,0,0,0],"species":306}],"party_rom_address":3213904,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245940},{"battle_script_rom_address":2023889,"party":[{"level":6,"moves":[0,0,0,0],"species":295},{"level":6,"moves":[0,0,0,0],"species":306}],"party_rom_address":3213920,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3245980},{"battle_script_rom_address":2048559,"party":[{"level":9,"moves":[0,0,0,0],"species":183}],"party_rom_address":3213936,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246020},{"battle_script_rom_address":2040124,"party":[{"level":15,"moves":[0,0,0,0],"species":183},{"level":15,"moves":[0,0,0,0],"species":306},{"level":15,"moves":[0,0,0,0],"species":339}],"party_rom_address":3213944,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246060},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":296},{"level":26,"moves":[0,0,0,0],"species":306}],"party_rom_address":3213968,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246100},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":296},{"level":29,"moves":[0,0,0,0],"species":307}],"party_rom_address":3213984,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246140},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":296},{"level":32,"moves":[0,0,0,0],"species":307}],"party_rom_address":3214000,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246180},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":305},{"level":34,"moves":[0,0,0,0],"species":296},{"level":34,"moves":[0,0,0,0],"species":307}],"party_rom_address":3214016,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246220},{"battle_script_rom_address":2546588,"party":[{"level":16,"moves":[0,0,0,0],"species":43}],"party_rom_address":3214040,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246260},{"battle_script_rom_address":2546650,"party":[{"level":14,"moves":[0,0,0,0],"species":315},{"level":14,"moves":[0,0,0,0],"species":306},{"level":14,"moves":[0,0,0,0],"species":183}],"party_rom_address":3214048,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246300},{"battle_script_rom_address":2259356,"party":[{"level":40,"moves":[0,0,0,0],"species":325}],"party_rom_address":3214072,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246340},{"battle_script_rom_address":2259387,"party":[{"level":39,"moves":[0,0,0,0],"species":118},{"level":39,"moves":[0,0,0,0],"species":313}],"party_rom_address":3214080,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246380},{"battle_script_rom_address":2019067,"party":[{"level":4,"moves":[0,0,0,0],"species":290},{"level":4,"moves":[0,0,0,0],"species":290}],"party_rom_address":3214096,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246420},{"battle_script_rom_address":2294060,"party":[{"level":3,"moves":[0,0,0,0],"species":290},{"level":3,"moves":[0,0,0,0],"species":290},{"level":3,"moves":[0,0,0,0],"species":290},{"level":3,"moves":[0,0,0,0],"species":290}],"party_rom_address":3214112,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246460},{"battle_script_rom_address":2048311,"party":[{"level":8,"moves":[0,0,0,0],"species":290},{"level":8,"moves":[0,0,0,0],"species":301}],"party_rom_address":3214144,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246500},{"battle_script_rom_address":2055082,"party":[{"level":28,"moves":[0,0,0,0],"species":301},{"level":28,"moves":[0,0,0,0],"species":302}],"party_rom_address":3214160,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246540},{"battle_script_rom_address":2055113,"party":[{"level":25,"moves":[0,0,0,0],"species":386},{"level":25,"moves":[0,0,0,0],"species":387}],"party_rom_address":3214176,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246580},{"battle_script_rom_address":2055144,"party":[{"level":25,"moves":[0,0,0,0],"species":302}],"party_rom_address":3214192,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246620},{"battle_script_rom_address":2294091,"party":[{"level":6,"moves":[0,0,0,0],"species":301},{"level":6,"moves":[0,0,0,0],"species":301}],"party_rom_address":3214200,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246660},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":302}],"party_rom_address":3214216,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246700},{"battle_script_rom_address":0,"party":[{"level":29,"moves":[0,0,0,0],"species":294},{"level":29,"moves":[0,0,0,0],"species":302}],"party_rom_address":3214224,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246740},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":311},{"level":31,"moves":[0,0,0,0],"species":294},{"level":31,"moves":[0,0,0,0],"species":302}],"party_rom_address":3214240,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246780},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":311},{"level":33,"moves":[0,0,0,0],"species":302},{"level":33,"moves":[0,0,0,0],"species":294},{"level":33,"moves":[0,0,0,0],"species":302}],"party_rom_address":3214264,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246820},{"battle_script_rom_address":2043817,"party":[{"level":17,"moves":[0,0,0,0],"species":339},{"level":17,"moves":[0,0,0,0],"species":66}],"party_rom_address":3214296,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246860},{"battle_script_rom_address":2043848,"party":[{"level":16,"moves":[0,0,0,0],"species":74},{"level":17,"moves":[0,0,0,0],"species":74},{"level":16,"moves":[0,0,0,0],"species":74}],"party_rom_address":3214312,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246900},{"battle_script_rom_address":2045963,"party":[{"level":18,"moves":[0,0,0,0],"species":74},{"level":18,"moves":[0,0,0,0],"species":66}],"party_rom_address":3214336,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246940},{"battle_script_rom_address":2045994,"party":[{"level":18,"moves":[0,0,0,0],"species":74},{"level":18,"moves":[0,0,0,0],"species":339}],"party_rom_address":3214352,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3246980},{"battle_script_rom_address":2549894,"party":[{"level":22,"moves":[0,0,0,0],"species":74},{"level":22,"moves":[0,0,0,0],"species":320},{"level":22,"moves":[0,0,0,0],"species":75}],"party_rom_address":3214368,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247020},{"battle_script_rom_address":2048528,"party":[{"level":8,"moves":[0,0,0,0],"species":74}],"party_rom_address":3214392,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247060},{"battle_script_rom_address":2303697,"party":[{"level":20,"moves":[0,0,0,0],"species":74},{"level":20,"moves":[0,0,0,0],"species":318}],"party_rom_address":3214400,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247100},{"battle_script_rom_address":0,"party":[{"level":9,"moves":[150,55,0,0],"species":313}],"party_rom_address":3214416,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3247140},{"battle_script_rom_address":0,"party":[{"level":10,"moves":[16,45,0,0],"species":310},{"level":10,"moves":[44,184,0,0],"species":286}],"party_rom_address":3214432,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3247180},{"battle_script_rom_address":2289712,"party":[{"level":16,"moves":[0,0,0,0],"species":74},{"level":16,"moves":[0,0,0,0],"species":74},{"level":16,"moves":[0,0,0,0],"species":66}],"party_rom_address":3214464,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247220},{"battle_script_rom_address":0,"party":[{"level":24,"moves":[0,0,0,0],"species":74},{"level":24,"moves":[0,0,0,0],"species":74},{"level":24,"moves":[0,0,0,0],"species":74},{"level":24,"moves":[0,0,0,0],"species":75}],"party_rom_address":3214488,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247260},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":74},{"level":27,"moves":[0,0,0,0],"species":74},{"level":27,"moves":[0,0,0,0],"species":75},{"level":27,"moves":[0,0,0,0],"species":75}],"party_rom_address":3214520,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247300},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":74},{"level":30,"moves":[0,0,0,0],"species":75},{"level":30,"moves":[0,0,0,0],"species":75},{"level":30,"moves":[0,0,0,0],"species":75}],"party_rom_address":3214552,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247340},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":75},{"level":33,"moves":[0,0,0,0],"species":75},{"level":33,"moves":[0,0,0,0],"species":75},{"level":33,"moves":[0,0,0,0],"species":76}],"party_rom_address":3214584,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247380},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":316},{"level":31,"moves":[0,0,0,0],"species":338}],"party_rom_address":3214616,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247420},{"battle_script_rom_address":0,"party":[{"level":45,"moves":[0,0,0,0],"species":325},{"level":45,"moves":[0,0,0,0],"species":325}],"party_rom_address":3214632,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247460},{"battle_script_rom_address":0,"party":[{"level":25,"moves":[0,0,0,0],"species":386},{"level":25,"moves":[0,0,0,0],"species":387}],"party_rom_address":3214648,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247500},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":386},{"level":30,"moves":[0,0,0,0],"species":387}],"party_rom_address":3214664,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247540},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":386},{"level":33,"moves":[0,0,0,0],"species":387}],"party_rom_address":3214680,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247580},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":386},{"level":36,"moves":[0,0,0,0],"species":387}],"party_rom_address":3214696,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247620},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":386},{"level":39,"moves":[0,0,0,0],"species":387}],"party_rom_address":3214712,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247660},{"battle_script_rom_address":2537289,"party":[{"level":13,"moves":[0,0,0,0],"species":118}],"party_rom_address":3214728,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247700},{"battle_script_rom_address":2097522,"party":[{"level":23,"moves":[53,154,185,20],"species":317}],"party_rom_address":3214736,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3247740},{"battle_script_rom_address":2161586,"party":[{"level":17,"moves":[117,197,93,9],"species":356},{"level":17,"moves":[9,197,93,96],"species":356}],"party_rom_address":3214752,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3247780},{"battle_script_rom_address":2097491,"party":[{"level":23,"moves":[117,197,93,7],"species":356}],"party_rom_address":3214784,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3247820},{"battle_script_rom_address":2055519,"party":[{"level":25,"moves":[33,120,124,108],"species":109},{"level":25,"moves":[33,139,124,108],"species":109}],"party_rom_address":3214800,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3247860},{"battle_script_rom_address":2059810,"party":[{"level":28,"moves":[139,120,124,108],"species":109},{"level":28,"moves":[28,104,210,14],"species":302}],"party_rom_address":3214832,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3247900},{"battle_script_rom_address":2059841,"party":[{"level":28,"moves":[141,154,170,91],"species":301},{"level":28,"moves":[33,120,124,108],"species":109}],"party_rom_address":3214864,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3247940},{"battle_script_rom_address":2196154,"party":[{"level":29,"moves":[0,0,0,0],"species":305},{"level":29,"moves":[0,0,0,0],"species":178}],"party_rom_address":3214896,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3247980},{"battle_script_rom_address":2196185,"party":[{"level":27,"moves":[0,0,0,0],"species":358},{"level":27,"moves":[0,0,0,0],"species":358},{"level":27,"moves":[0,0,0,0],"species":358}],"party_rom_address":3214912,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248020},{"battle_script_rom_address":1966818,"party":[{"level":16,"moves":[0,0,0,0],"species":392}],"party_rom_address":3214936,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248060},{"battle_script_rom_address":2326195,"party":[{"level":47,"moves":[76,219,225,93],"species":359},{"level":46,"moves":[47,18,204,185],"species":316},{"level":47,"moves":[89,73,202,92],"species":363},{"level":44,"moves":[48,85,161,103],"species":82},{"level":48,"moves":[104,91,94,248],"species":394}],"party_rom_address":3214944,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3248100},{"battle_script_rom_address":0,"party":[{"level":50,"moves":[76,219,225,93],"species":359},{"level":49,"moves":[47,18,204,185],"species":316},{"level":50,"moves":[89,73,202,92],"species":363},{"level":47,"moves":[48,85,161,103],"species":82},{"level":51,"moves":[104,91,94,248],"species":394}],"party_rom_address":3215024,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3248140},{"battle_script_rom_address":0,"party":[{"level":53,"moves":[76,219,225,93],"species":359},{"level":52,"moves":[47,18,204,185],"species":316},{"level":53,"moves":[89,73,202,92],"species":363},{"level":50,"moves":[48,85,161,103],"species":82},{"level":54,"moves":[104,91,94,248],"species":394}],"party_rom_address":3215104,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3248180},{"battle_script_rom_address":0,"party":[{"level":56,"moves":[76,219,225,93],"species":359},{"level":55,"moves":[47,18,204,185],"species":316},{"level":56,"moves":[89,73,202,92],"species":363},{"level":53,"moves":[48,85,161,103],"species":82},{"level":57,"moves":[104,91,94,248],"species":394}],"party_rom_address":3215184,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3248220},{"battle_script_rom_address":1981539,"party":[{"level":31,"moves":[0,0,0,0],"species":369},{"level":32,"moves":[0,0,0,0],"species":218},{"level":32,"moves":[0,0,0,0],"species":310},{"level":34,"moves":[0,0,0,0],"species":278}],"party_rom_address":3215264,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248260},{"battle_script_rom_address":1981483,"party":[{"level":31,"moves":[0,0,0,0],"species":369},{"level":32,"moves":[0,0,0,0],"species":310},{"level":32,"moves":[0,0,0,0],"species":297},{"level":34,"moves":[0,0,0,0],"species":281}],"party_rom_address":3215296,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248300},{"battle_script_rom_address":1981511,"party":[{"level":31,"moves":[0,0,0,0],"species":369},{"level":32,"moves":[0,0,0,0],"species":297},{"level":32,"moves":[0,0,0,0],"species":218},{"level":34,"moves":[0,0,0,0],"species":284}],"party_rom_address":3215328,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248340},{"battle_script_rom_address":1981455,"party":[{"level":31,"moves":[0,0,0,0],"species":369},{"level":32,"moves":[0,0,0,0],"species":218},{"level":32,"moves":[0,0,0,0],"species":310},{"level":34,"moves":[0,0,0,0],"species":278}],"party_rom_address":3215360,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248380},{"battle_script_rom_address":1981399,"party":[{"level":31,"moves":[0,0,0,0],"species":369},{"level":32,"moves":[0,0,0,0],"species":310},{"level":32,"moves":[0,0,0,0],"species":297},{"level":34,"moves":[0,0,0,0],"species":281}],"party_rom_address":3215392,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248420},{"battle_script_rom_address":1981427,"party":[{"level":31,"moves":[0,0,0,0],"species":369},{"level":32,"moves":[0,0,0,0],"species":297},{"level":32,"moves":[0,0,0,0],"species":218},{"level":34,"moves":[0,0,0,0],"species":284}],"party_rom_address":3215424,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248460},{"battle_script_rom_address":2064677,"party":[{"level":30,"moves":[0,0,0,0],"species":313},{"level":31,"moves":[0,0,0,0],"species":72},{"level":32,"moves":[0,0,0,0],"species":331}],"party_rom_address":3215456,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248500},{"battle_script_rom_address":2064708,"party":[{"level":31,"moves":[0,0,0,0],"species":330},{"level":34,"moves":[0,0,0,0],"species":73}],"party_rom_address":3215480,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248540},{"battle_script_rom_address":2064739,"party":[{"level":15,"moves":[0,0,0,0],"species":129},{"level":25,"moves":[0,0,0,0],"species":129},{"level":35,"moves":[0,0,0,0],"species":130}],"party_rom_address":3215496,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248580},{"battle_script_rom_address":2065552,"party":[{"level":34,"moves":[0,0,0,0],"species":44},{"level":34,"moves":[0,0,0,0],"species":184}],"party_rom_address":3215520,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248620},{"battle_script_rom_address":2065583,"party":[{"level":34,"moves":[0,0,0,0],"species":300},{"level":34,"moves":[0,0,0,0],"species":320}],"party_rom_address":3215536,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248660},{"battle_script_rom_address":2064832,"party":[{"level":34,"moves":[0,0,0,0],"species":67}],"party_rom_address":3215552,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248700},{"battle_script_rom_address":2065614,"party":[{"level":31,"moves":[0,0,0,0],"species":72},{"level":31,"moves":[0,0,0,0],"species":72},{"level":36,"moves":[0,0,0,0],"species":313}],"party_rom_address":3215560,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248740},{"battle_script_rom_address":2064770,"party":[{"level":32,"moves":[0,0,0,0],"species":305},{"level":32,"moves":[0,0,0,0],"species":227}],"party_rom_address":3215584,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248780},{"battle_script_rom_address":2067040,"party":[{"level":33,"moves":[0,0,0,0],"species":341},{"level":33,"moves":[0,0,0,0],"species":331}],"party_rom_address":3215600,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248820},{"battle_script_rom_address":2067071,"party":[{"level":34,"moves":[0,0,0,0],"species":170}],"party_rom_address":3215616,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248860},{"battle_script_rom_address":0,"party":[{"level":19,"moves":[0,0,0,0],"species":308},{"level":19,"moves":[0,0,0,0],"species":308}],"party_rom_address":3215624,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3248900},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[47,31,219,76],"species":358},{"level":35,"moves":[53,36,156,89],"species":339}],"party_rom_address":3215640,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3248940},{"battle_script_rom_address":0,"party":[{"level":18,"moves":[74,78,72,73],"species":363},{"level":20,"moves":[111,205,44,88],"species":75}],"party_rom_address":3215672,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3248980},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[16,60,92,182],"species":294},{"level":27,"moves":[16,72,213,78],"species":292}],"party_rom_address":3215704,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3249020},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[94,7,244,182],"species":357},{"level":39,"moves":[8,61,156,187],"species":336}],"party_rom_address":3215736,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3249060},{"battle_script_rom_address":0,"party":[{"level":43,"moves":[94,7,244,182],"species":357},{"level":43,"moves":[8,61,156,187],"species":336}],"party_rom_address":3215768,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3249100},{"battle_script_rom_address":0,"party":[{"level":46,"moves":[94,7,244,182],"species":357},{"level":46,"moves":[8,61,156,187],"species":336}],"party_rom_address":3215800,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3249140},{"battle_script_rom_address":0,"party":[{"level":49,"moves":[94,7,244,182],"species":357},{"level":49,"moves":[8,61,156,187],"species":336}],"party_rom_address":3215832,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3249180},{"battle_script_rom_address":0,"party":[{"level":52,"moves":[94,7,244,182],"species":357},{"level":52,"moves":[8,61,156,187],"species":336}],"party_rom_address":3215864,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3249220},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":184},{"level":33,"moves":[0,0,0,0],"species":309}],"party_rom_address":3215896,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249260},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":170},{"level":33,"moves":[0,0,0,0],"species":330}],"party_rom_address":3215912,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249300},{"battle_script_rom_address":0,"party":[{"level":42,"moves":[0,0,0,0],"species":170},{"level":40,"moves":[0,0,0,0],"species":330}],"party_rom_address":3215928,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249340},{"battle_script_rom_address":0,"party":[{"level":45,"moves":[0,0,0,0],"species":171},{"level":43,"moves":[0,0,0,0],"species":330}],"party_rom_address":3215944,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249380},{"battle_script_rom_address":0,"party":[{"level":48,"moves":[0,0,0,0],"species":171},{"level":46,"moves":[0,0,0,0],"species":331}],"party_rom_address":3215960,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249420},{"battle_script_rom_address":0,"party":[{"level":51,"moves":[0,0,0,0],"species":171},{"level":49,"moves":[0,0,0,0],"species":331}],"party_rom_address":3215976,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249460},{"battle_script_rom_address":0,"party":[{"level":27,"moves":[0,0,0,0],"species":118},{"level":25,"moves":[0,0,0,0],"species":72}],"party_rom_address":3215992,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249500},{"battle_script_rom_address":2055550,"party":[{"level":29,"moves":[0,0,0,0],"species":129},{"level":20,"moves":[0,0,0,0],"species":72},{"level":26,"moves":[0,0,0,0],"species":328},{"level":23,"moves":[0,0,0,0],"species":330}],"party_rom_address":3216008,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249540},{"battle_script_rom_address":2048807,"party":[{"level":8,"moves":[0,0,0,0],"species":288},{"level":8,"moves":[0,0,0,0],"species":286}],"party_rom_address":3216040,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3249580},{"battle_script_rom_address":2048776,"party":[{"level":8,"moves":[0,0,0,0],"species":295},{"level":8,"moves":[0,0,0,0],"species":288}],"party_rom_address":3216056,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3249620},{"battle_script_rom_address":2024517,"party":[{"level":9,"moves":[0,0,0,0],"species":129}],"party_rom_address":3216072,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249660},{"battle_script_rom_address":2030479,"party":[{"level":13,"moves":[0,0,0,0],"species":183}],"party_rom_address":3216080,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249700},{"battle_script_rom_address":2030448,"party":[{"level":12,"moves":[0,0,0,0],"species":72},{"level":12,"moves":[0,0,0,0],"species":72}],"party_rom_address":3216088,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249740},{"battle_script_rom_address":2033204,"party":[{"level":14,"moves":[0,0,0,0],"species":354},{"level":14,"moves":[0,0,0,0],"species":353}],"party_rom_address":3216104,"pokemon_data_type":"ITEM_DEFAULT_MOVES","rom_address":3249780},{"battle_script_rom_address":2033235,"party":[{"level":14,"moves":[0,0,0,0],"species":337},{"level":14,"moves":[0,0,0,0],"species":100}],"party_rom_address":3216120,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249820},{"battle_script_rom_address":2033266,"party":[{"level":15,"moves":[0,0,0,0],"species":81}],"party_rom_address":3216136,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249860},{"battle_script_rom_address":2020630,"party":[{"level":15,"moves":[0,0,0,0],"species":100}],"party_rom_address":3216144,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249900},{"battle_script_rom_address":2020661,"party":[{"level":15,"moves":[0,0,0,0],"species":335}],"party_rom_address":3216152,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249940},{"battle_script_rom_address":2041104,"party":[{"level":19,"moves":[0,0,0,0],"species":27}],"party_rom_address":3216160,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3249980},{"battle_script_rom_address":2041135,"party":[{"level":18,"moves":[0,0,0,0],"species":363}],"party_rom_address":3216168,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250020},{"battle_script_rom_address":2041073,"party":[{"level":18,"moves":[0,0,0,0],"species":306}],"party_rom_address":3216176,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250060},{"battle_script_rom_address":2041042,"party":[{"level":18,"moves":[0,0,0,0],"species":339}],"party_rom_address":3216184,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250100},{"battle_script_rom_address":2045098,"party":[{"level":17,"moves":[0,0,0,0],"species":183},{"level":19,"moves":[0,0,0,0],"species":296}],"party_rom_address":3216192,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250140},{"battle_script_rom_address":2045129,"party":[{"level":17,"moves":[0,0,0,0],"species":227},{"level":19,"moves":[0,0,0,0],"species":305}],"party_rom_address":3216208,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250180},{"battle_script_rom_address":2045160,"party":[{"level":18,"moves":[0,0,0,0],"species":318},{"level":18,"moves":[0,0,0,0],"species":27}],"party_rom_address":3216224,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250220},{"battle_script_rom_address":2045191,"party":[{"level":18,"moves":[0,0,0,0],"species":382},{"level":18,"moves":[0,0,0,0],"species":382}],"party_rom_address":3216240,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250260},{"battle_script_rom_address":2046431,"party":[{"level":18,"moves":[0,0,0,0],"species":296},{"level":18,"moves":[0,0,0,0],"species":183}],"party_rom_address":3216256,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250300},{"battle_script_rom_address":2046493,"party":[{"level":19,"moves":[0,0,0,0],"species":323}],"party_rom_address":3216272,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250340},{"battle_script_rom_address":2046462,"party":[{"level":19,"moves":[0,0,0,0],"species":299}],"party_rom_address":3216280,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250380},{"battle_script_rom_address":2053150,"party":[{"level":14,"moves":[0,0,0,0],"species":288},{"level":14,"moves":[0,0,0,0],"species":382},{"level":14,"moves":[0,0,0,0],"species":337}],"party_rom_address":3216288,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250420},{"battle_script_rom_address":2341334,"party":[{"level":29,"moves":[0,0,0,0],"species":41}],"party_rom_address":3216312,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250460},{"battle_script_rom_address":2341365,"party":[{"level":29,"moves":[0,0,0,0],"species":286}],"party_rom_address":3216320,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250500},{"battle_script_rom_address":2342090,"party":[{"level":29,"moves":[0,0,0,0],"species":339}],"party_rom_address":3216328,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250540},{"battle_script_rom_address":2342121,"party":[{"level":28,"moves":[0,0,0,0],"species":318},{"level":28,"moves":[0,0,0,0],"species":41}],"party_rom_address":3216336,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250580},{"battle_script_rom_address":2342152,"party":[{"level":28,"moves":[0,0,0,0],"species":318},{"level":28,"moves":[0,0,0,0],"species":339}],"party_rom_address":3216352,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250620},{"battle_script_rom_address":2342817,"party":[{"level":29,"moves":[0,0,0,0],"species":287}],"party_rom_address":3216368,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250660},{"battle_script_rom_address":2342848,"party":[{"level":29,"moves":[0,0,0,0],"species":41}],"party_rom_address":3216376,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250700},{"battle_script_rom_address":2342879,"party":[{"level":29,"moves":[0,0,0,0],"species":286}],"party_rom_address":3216384,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250740},{"battle_script_rom_address":2343757,"party":[{"level":29,"moves":[0,0,0,0],"species":41}],"party_rom_address":3216392,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250780},{"battle_script_rom_address":2344319,"party":[{"level":29,"moves":[0,0,0,0],"species":287}],"party_rom_address":3216400,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250820},{"battle_script_rom_address":2345034,"party":[{"level":29,"moves":[0,0,0,0],"species":318}],"party_rom_address":3216408,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250860},{"battle_script_rom_address":2345065,"party":[{"level":29,"moves":[0,0,0,0],"species":339}],"party_rom_address":3216416,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250900},{"battle_script_rom_address":2345096,"party":[{"level":29,"moves":[0,0,0,0],"species":41}],"party_rom_address":3216424,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250940},{"battle_script_rom_address":2342059,"party":[{"level":29,"moves":[0,0,0,0],"species":287}],"party_rom_address":3216432,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3250980},{"battle_script_rom_address":2342786,"party":[{"level":29,"moves":[0,0,0,0],"species":339}],"party_rom_address":3216440,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251020},{"battle_script_rom_address":2343788,"party":[{"level":29,"moves":[0,0,0,0],"species":318}],"party_rom_address":3216448,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251060},{"battle_script_rom_address":2345127,"party":[{"level":26,"moves":[0,0,0,0],"species":339},{"level":28,"moves":[0,0,0,0],"species":287},{"level":30,"moves":[0,0,0,0],"species":41},{"level":33,"moves":[0,0,0,0],"species":340}],"party_rom_address":3216456,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251100},{"battle_script_rom_address":2067763,"party":[{"level":33,"moves":[0,0,0,0],"species":310},{"level":33,"moves":[0,0,0,0],"species":340}],"party_rom_address":3216488,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251140},{"battle_script_rom_address":0,"party":[{"level":42,"moves":[0,0,0,0],"species":287},{"level":43,"moves":[0,0,0,0],"species":169},{"level":44,"moves":[0,0,0,0],"species":340}],"party_rom_address":3216504,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251180},{"battle_script_rom_address":2020692,"party":[{"level":15,"moves":[0,0,0,0],"species":72}],"party_rom_address":3216528,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251220},{"battle_script_rom_address":2020723,"party":[{"level":15,"moves":[0,0,0,0],"species":183}],"party_rom_address":3216536,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251260},{"battle_script_rom_address":2027900,"party":[{"level":25,"moves":[0,0,0,0],"species":27},{"level":25,"moves":[0,0,0,0],"species":27}],"party_rom_address":3216544,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251300},{"battle_script_rom_address":2027869,"party":[{"level":25,"moves":[0,0,0,0],"species":304},{"level":25,"moves":[0,0,0,0],"species":309}],"party_rom_address":3216560,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251340},{"battle_script_rom_address":2028918,"party":[{"level":26,"moves":[0,0,0,0],"species":120}],"party_rom_address":3216576,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251380},{"battle_script_rom_address":2029105,"party":[{"level":24,"moves":[0,0,0,0],"species":309},{"level":24,"moves":[0,0,0,0],"species":66},{"level":24,"moves":[0,0,0,0],"species":72}],"party_rom_address":3216584,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251420},{"battle_script_rom_address":2029074,"party":[{"level":24,"moves":[0,0,0,0],"species":338},{"level":24,"moves":[0,0,0,0],"species":305},{"level":24,"moves":[0,0,0,0],"species":338}],"party_rom_address":3216608,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251460},{"battle_script_rom_address":2030510,"party":[{"level":25,"moves":[0,0,0,0],"species":227},{"level":25,"moves":[0,0,0,0],"species":227}],"party_rom_address":3216632,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251500},{"battle_script_rom_address":2041166,"party":[{"level":22,"moves":[0,0,0,0],"species":183},{"level":22,"moves":[0,0,0,0],"species":296}],"party_rom_address":3216648,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251540},{"battle_script_rom_address":2041197,"party":[{"level":22,"moves":[0,0,0,0],"species":27},{"level":22,"moves":[0,0,0,0],"species":28}],"party_rom_address":3216664,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251580},{"battle_script_rom_address":2041228,"party":[{"level":22,"moves":[0,0,0,0],"species":304},{"level":22,"moves":[0,0,0,0],"species":299}],"party_rom_address":3216680,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251620},{"battle_script_rom_address":2044020,"party":[{"level":18,"moves":[0,0,0,0],"species":339},{"level":18,"moves":[0,0,0,0],"species":218}],"party_rom_address":3216696,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251660},{"battle_script_rom_address":2044051,"party":[{"level":18,"moves":[0,0,0,0],"species":306},{"level":18,"moves":[0,0,0,0],"species":363}],"party_rom_address":3216712,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251700},{"battle_script_rom_address":2047305,"party":[{"level":26,"moves":[0,0,0,0],"species":84},{"level":26,"moves":[0,0,0,0],"species":85}],"party_rom_address":3216728,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251740},{"battle_script_rom_address":2047336,"party":[{"level":26,"moves":[0,0,0,0],"species":302},{"level":26,"moves":[0,0,0,0],"species":367}],"party_rom_address":3216744,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251780},{"battle_script_rom_address":2047367,"party":[{"level":26,"moves":[0,0,0,0],"species":64},{"level":26,"moves":[0,0,0,0],"species":393}],"party_rom_address":3216760,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251820},{"battle_script_rom_address":2047398,"party":[{"level":26,"moves":[0,0,0,0],"species":356},{"level":26,"moves":[0,0,0,0],"species":335}],"party_rom_address":3216776,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251860},{"battle_script_rom_address":2047429,"party":[{"level":18,"moves":[0,0,0,0],"species":356},{"level":18,"moves":[0,0,0,0],"species":351}],"party_rom_address":3216792,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251900},{"battle_script_rom_address":2048838,"party":[{"level":8,"moves":[0,0,0,0],"species":74},{"level":8,"moves":[0,0,0,0],"species":74}],"party_rom_address":3216808,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251940},{"battle_script_rom_address":2048869,"party":[{"level":8,"moves":[0,0,0,0],"species":306},{"level":8,"moves":[0,0,0,0],"species":295}],"party_rom_address":3216824,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3251980},{"battle_script_rom_address":2051934,"party":[{"level":17,"moves":[0,0,0,0],"species":84}],"party_rom_address":3216840,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252020},{"battle_script_rom_address":2051965,"party":[{"level":17,"moves":[0,0,0,0],"species":392}],"party_rom_address":3216848,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252060},{"battle_script_rom_address":2051996,"party":[{"level":17,"moves":[0,0,0,0],"species":356}],"party_rom_address":3216856,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252100},{"battle_script_rom_address":2067825,"party":[{"level":33,"moves":[0,0,0,0],"species":363},{"level":33,"moves":[0,0,0,0],"species":357}],"party_rom_address":3216864,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252140},{"battle_script_rom_address":2055581,"party":[{"level":26,"moves":[0,0,0,0],"species":338}],"party_rom_address":3216880,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252180},{"battle_script_rom_address":2055612,"party":[{"level":25,"moves":[0,0,0,0],"species":218},{"level":25,"moves":[0,0,0,0],"species":339}],"party_rom_address":3216888,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252220},{"battle_script_rom_address":2055643,"party":[{"level":26,"moves":[0,0,0,0],"species":118}],"party_rom_address":3216904,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252260},{"battle_script_rom_address":2059872,"party":[{"level":30,"moves":[87,98,86,0],"species":338}],"party_rom_address":3216912,"pokemon_data_type":"NO_ITEM_CUSTOM_MOVES","rom_address":3252300},{"battle_script_rom_address":2059903,"party":[{"level":28,"moves":[0,0,0,0],"species":356},{"level":28,"moves":[0,0,0,0],"species":335}],"party_rom_address":3216928,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252340},{"battle_script_rom_address":2061522,"party":[{"level":29,"moves":[0,0,0,0],"species":294},{"level":29,"moves":[0,0,0,0],"species":292}],"party_rom_address":3216944,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252380},{"battle_script_rom_address":2061553,"party":[{"level":25,"moves":[0,0,0,0],"species":335},{"level":25,"moves":[0,0,0,0],"species":309},{"level":25,"moves":[0,0,0,0],"species":369},{"level":25,"moves":[0,0,0,0],"species":288},{"level":25,"moves":[0,0,0,0],"species":337},{"level":25,"moves":[0,0,0,0],"species":339}],"party_rom_address":3216960,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252420},{"battle_script_rom_address":2061584,"party":[{"level":25,"moves":[0,0,0,0],"species":286},{"level":25,"moves":[0,0,0,0],"species":306},{"level":25,"moves":[0,0,0,0],"species":337},{"level":25,"moves":[0,0,0,0],"species":183},{"level":25,"moves":[0,0,0,0],"species":27},{"level":25,"moves":[0,0,0,0],"species":367}],"party_rom_address":3217008,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252460},{"battle_script_rom_address":2061646,"party":[{"level":29,"moves":[0,0,0,0],"species":371},{"level":29,"moves":[0,0,0,0],"species":365}],"party_rom_address":3217056,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252500},{"battle_script_rom_address":1973644,"party":[{"level":13,"moves":[0,0,0,0],"species":295},{"level":15,"moves":[0,0,0,0],"species":280}],"party_rom_address":3217072,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252540},{"battle_script_rom_address":1973675,"party":[{"level":13,"moves":[0,0,0,0],"species":321},{"level":15,"moves":[0,0,0,0],"species":283}],"party_rom_address":3217088,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3252580},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[182,205,222,153],"species":76},{"level":35,"moves":[14,58,57,157],"species":140},{"level":35,"moves":[231,153,46,157],"species":95},{"level":37,"moves":[104,153,182,157],"species":320}],"party_rom_address":3217104,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252620},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[182,58,157,57],"species":138},{"level":37,"moves":[182,205,222,153],"species":76},{"level":40,"moves":[14,58,57,157],"species":141},{"level":40,"moves":[231,153,46,157],"species":95},{"level":42,"moves":[104,153,182,157],"species":320}],"party_rom_address":3217168,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252660},{"battle_script_rom_address":0,"party":[{"level":42,"moves":[182,58,157,57],"species":139},{"level":42,"moves":[182,205,89,153],"species":76},{"level":45,"moves":[14,58,57,157],"species":141},{"level":45,"moves":[231,153,46,157],"species":95},{"level":47,"moves":[104,153,182,157],"species":320}],"party_rom_address":3217248,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252700},{"battle_script_rom_address":0,"party":[{"level":47,"moves":[157,63,48,182],"species":142},{"level":47,"moves":[8,205,89,153],"species":76},{"level":47,"moves":[182,58,157,57],"species":139},{"level":50,"moves":[14,58,57,157],"species":141},{"level":50,"moves":[231,153,46,157],"species":208},{"level":52,"moves":[104,153,182,157],"species":320}],"party_rom_address":3217328,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252740},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[2,157,8,83],"species":68},{"level":33,"moves":[94,113,115,8],"species":356},{"level":35,"moves":[228,68,182,167],"species":237},{"level":37,"moves":[252,8,187,89],"species":336}],"party_rom_address":3217424,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252780},{"battle_script_rom_address":0,"party":[{"level":38,"moves":[2,157,8,83],"species":68},{"level":38,"moves":[94,113,115,8],"species":357},{"level":40,"moves":[228,68,182,167],"species":237},{"level":42,"moves":[252,8,187,89],"species":336}],"party_rom_address":3217488,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252820},{"battle_script_rom_address":0,"party":[{"level":40,"moves":[71,182,7,8],"species":107},{"level":43,"moves":[2,157,8,83],"species":68},{"level":43,"moves":[8,113,115,94],"species":357},{"level":45,"moves":[228,68,182,167],"species":237},{"level":47,"moves":[252,8,187,89],"species":336}],"party_rom_address":3217552,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252860},{"battle_script_rom_address":0,"party":[{"level":46,"moves":[25,8,89,83],"species":106},{"level":46,"moves":[71,182,7,8],"species":107},{"level":48,"moves":[238,157,8,83],"species":68},{"level":48,"moves":[8,113,115,94],"species":357},{"level":50,"moves":[228,68,182,167],"species":237},{"level":52,"moves":[252,8,187,89],"species":336}],"party_rom_address":3217632,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252900},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[87,182,86,113],"species":179},{"level":36,"moves":[205,87,153,240],"species":101},{"level":38,"moves":[48,182,87,240],"species":82},{"level":40,"moves":[44,86,87,182],"species":338}],"party_rom_address":3217728,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252940},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[87,21,240,95],"species":25},{"level":41,"moves":[87,182,86,113],"species":180},{"level":41,"moves":[205,87,153,240],"species":101},{"level":43,"moves":[48,182,87,240],"species":82},{"level":45,"moves":[44,86,87,182],"species":338}],"party_rom_address":3217792,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3252980},{"battle_script_rom_address":0,"party":[{"level":44,"moves":[87,21,240,182],"species":26},{"level":46,"moves":[87,182,86,113],"species":181},{"level":46,"moves":[205,87,153,240],"species":101},{"level":48,"moves":[48,182,87,240],"species":82},{"level":50,"moves":[44,86,87,182],"species":338}],"party_rom_address":3217872,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253020},{"battle_script_rom_address":0,"party":[{"level":50,"moves":[129,8,9,113],"species":125},{"level":51,"moves":[87,21,240,182],"species":26},{"level":51,"moves":[87,182,86,113],"species":181},{"level":53,"moves":[205,87,153,240],"species":101},{"level":53,"moves":[48,182,87,240],"species":82},{"level":55,"moves":[44,86,87,182],"species":338}],"party_rom_address":3217952,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253060},{"battle_script_rom_address":0,"party":[{"level":38,"moves":[59,213,113,157],"species":219},{"level":36,"moves":[53,213,76,84],"species":77},{"level":38,"moves":[59,241,89,213],"species":340},{"level":40,"moves":[59,241,153,213],"species":321}],"party_rom_address":3218048,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253100},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[14,53,46,241],"species":58},{"level":43,"moves":[59,213,113,157],"species":219},{"level":41,"moves":[53,213,76,84],"species":77},{"level":43,"moves":[59,241,89,213],"species":340},{"level":45,"moves":[59,241,153,213],"species":321}],"party_rom_address":3218112,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253140},{"battle_script_rom_address":0,"party":[{"level":46,"moves":[46,76,13,241],"species":228},{"level":46,"moves":[14,53,241,46],"species":58},{"level":48,"moves":[59,213,113,157],"species":219},{"level":46,"moves":[53,213,76,84],"species":78},{"level":48,"moves":[59,241,89,213],"species":340},{"level":50,"moves":[59,241,153,213],"species":321}],"party_rom_address":3218192,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253180},{"battle_script_rom_address":0,"party":[{"level":51,"moves":[14,53,241,46],"species":59},{"level":53,"moves":[59,213,113,157],"species":219},{"level":51,"moves":[46,76,13,241],"species":229},{"level":51,"moves":[53,213,76,84],"species":78},{"level":53,"moves":[59,241,89,213],"species":340},{"level":55,"moves":[59,241,153,213],"species":321}],"party_rom_address":3218288,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253220},{"battle_script_rom_address":0,"party":[{"level":42,"moves":[113,47,29,8],"species":113},{"level":42,"moves":[59,247,38,126],"species":366},{"level":43,"moves":[42,29,7,95],"species":308},{"level":45,"moves":[63,53,85,247],"species":366}],"party_rom_address":3218384,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253260},{"battle_script_rom_address":0,"party":[{"level":47,"moves":[59,247,38,126],"species":366},{"level":47,"moves":[113,47,29,8],"species":113},{"level":45,"moves":[252,146,203,179],"species":115},{"level":48,"moves":[42,29,7,95],"species":308},{"level":50,"moves":[63,53,85,247],"species":366}],"party_rom_address":3218448,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253300},{"battle_script_rom_address":0,"party":[{"level":52,"moves":[59,247,38,126],"species":366},{"level":52,"moves":[113,47,29,8],"species":242},{"level":50,"moves":[252,146,203,179],"species":115},{"level":53,"moves":[42,29,7,95],"species":308},{"level":55,"moves":[63,53,85,247],"species":366}],"party_rom_address":3218528,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253340},{"battle_script_rom_address":0,"party":[{"level":57,"moves":[59,247,38,126],"species":366},{"level":57,"moves":[182,47,29,8],"species":242},{"level":55,"moves":[252,146,203,179],"species":115},{"level":57,"moves":[36,182,126,89],"species":128},{"level":58,"moves":[42,29,7,95],"species":308},{"level":60,"moves":[63,53,85,247],"species":366}],"party_rom_address":3218608,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253380},{"battle_script_rom_address":0,"party":[{"level":40,"moves":[86,85,182,58],"species":147},{"level":38,"moves":[241,76,76,89],"species":369},{"level":41,"moves":[57,48,182,76],"species":310},{"level":43,"moves":[18,191,211,76],"species":227},{"level":45,"moves":[76,156,93,89],"species":359}],"party_rom_address":3218704,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253420},{"battle_script_rom_address":0,"party":[{"level":43,"moves":[95,94,115,138],"species":163},{"level":43,"moves":[241,76,76,89],"species":369},{"level":45,"moves":[86,85,182,58],"species":148},{"level":46,"moves":[57,48,182,76],"species":310},{"level":48,"moves":[18,191,211,76],"species":227},{"level":50,"moves":[76,156,93,89],"species":359}],"party_rom_address":3218784,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253460},{"battle_script_rom_address":0,"party":[{"level":48,"moves":[95,94,115,138],"species":164},{"level":49,"moves":[241,76,76,89],"species":369},{"level":50,"moves":[86,85,182,58],"species":148},{"level":51,"moves":[57,48,182,76],"species":310},{"level":53,"moves":[18,191,211,76],"species":227},{"level":55,"moves":[76,156,93,89],"species":359}],"party_rom_address":3218880,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253500},{"battle_script_rom_address":0,"party":[{"level":53,"moves":[95,94,115,138],"species":164},{"level":54,"moves":[241,76,76,89],"species":369},{"level":55,"moves":[57,48,182,76],"species":310},{"level":55,"moves":[63,85,89,58],"species":149},{"level":58,"moves":[18,191,211,76],"species":227},{"level":60,"moves":[143,156,93,89],"species":359}],"party_rom_address":3218976,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253540},{"battle_script_rom_address":0,"party":[{"level":48,"moves":[25,94,91,182],"species":79},{"level":49,"moves":[89,246,94,113],"species":319},{"level":49,"moves":[94,156,109,91],"species":178},{"level":50,"moves":[89,94,156,91],"species":348},{"level":50,"moves":[241,76,94,53],"species":349}],"party_rom_address":3219072,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253580},{"battle_script_rom_address":0,"party":[{"level":53,"moves":[95,138,29,182],"species":96},{"level":53,"moves":[25,94,91,182],"species":79},{"level":54,"moves":[89,153,94,113],"species":319},{"level":54,"moves":[94,156,109,91],"species":178},{"level":55,"moves":[89,94,156,91],"species":348},{"level":55,"moves":[241,76,94,53],"species":349}],"party_rom_address":3219152,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253620},{"battle_script_rom_address":0,"party":[{"level":58,"moves":[95,138,29,182],"species":97},{"level":59,"moves":[89,153,94,113],"species":319},{"level":58,"moves":[25,94,91,182],"species":79},{"level":59,"moves":[94,156,109,91],"species":178},{"level":60,"moves":[89,94,156,91],"species":348},{"level":60,"moves":[241,76,94,53],"species":349}],"party_rom_address":3219248,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253660},{"battle_script_rom_address":0,"party":[{"level":63,"moves":[95,138,29,182],"species":97},{"level":64,"moves":[89,153,94,113],"species":319},{"level":63,"moves":[25,94,91,182],"species":199},{"level":64,"moves":[94,156,109,91],"species":178},{"level":65,"moves":[89,94,156,91],"species":348},{"level":65,"moves":[241,76,94,53],"species":349}],"party_rom_address":3219344,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253700},{"battle_script_rom_address":0,"party":[{"level":46,"moves":[95,240,182,56],"species":60},{"level":46,"moves":[240,96,104,90],"species":324},{"level":48,"moves":[96,34,182,58],"species":343},{"level":48,"moves":[156,152,13,104],"species":327},{"level":51,"moves":[96,104,58,156],"species":230}],"party_rom_address":3219440,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253740},{"battle_script_rom_address":0,"party":[{"level":50,"moves":[95,240,182,56],"species":61},{"level":51,"moves":[240,96,104,90],"species":324},{"level":53,"moves":[96,34,182,58],"species":343},{"level":53,"moves":[156,12,13,104],"species":327},{"level":56,"moves":[96,104,58,156],"species":230}],"party_rom_address":3219520,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253780},{"battle_script_rom_address":0,"party":[{"level":56,"moves":[56,195,58,109],"species":131},{"level":58,"moves":[240,96,104,90],"species":324},{"level":56,"moves":[95,240,182,56],"species":61},{"level":58,"moves":[96,34,182,58],"species":343},{"level":58,"moves":[156,12,13,104],"species":327},{"level":61,"moves":[96,104,58,156],"species":230}],"party_rom_address":3219600,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253820},{"battle_script_rom_address":0,"party":[{"level":61,"moves":[56,195,58,109],"species":131},{"level":63,"moves":[240,96,104,90],"species":324},{"level":61,"moves":[95,240,56,195],"species":186},{"level":63,"moves":[96,34,182,73],"species":343},{"level":63,"moves":[156,12,13,104],"species":327},{"level":66,"moves":[96,104,58,156],"species":230}],"party_rom_address":3219696,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253860},{"battle_script_rom_address":2161617,"party":[{"level":17,"moves":[95,98,204,0],"species":387},{"level":17,"moves":[95,98,109,0],"species":386}],"party_rom_address":3219792,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253900},{"battle_script_rom_address":2196247,"party":[{"level":30,"moves":[0,0,0,0],"species":369}],"party_rom_address":3219824,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3253940},{"battle_script_rom_address":2347924,"party":[{"level":77,"moves":[92,76,191,211],"species":227},{"level":75,"moves":[115,113,246,89],"species":319},{"level":76,"moves":[87,89,76,81],"species":384},{"level":76,"moves":[202,246,19,109],"species":389},{"level":76,"moves":[96,246,76,163],"species":391},{"level":78,"moves":[89,94,53,247],"species":400}],"party_rom_address":3219832,"pokemon_data_type":"ITEM_CUSTOM_MOVES","rom_address":3253980},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":398}],"party_rom_address":3219928,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254020},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":398}],"party_rom_address":3219936,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254060},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":398}],"party_rom_address":3219944,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254100},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":398}],"party_rom_address":3219952,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254140},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":398}],"party_rom_address":3219960,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254180},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":398}],"party_rom_address":3219968,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254220},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":398}],"party_rom_address":3219976,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254260},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":27},{"level":31,"moves":[0,0,0,0],"species":27}],"party_rom_address":3219984,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254300},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":320},{"level":33,"moves":[0,0,0,0],"species":27},{"level":33,"moves":[0,0,0,0],"species":27}],"party_rom_address":3220000,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254340},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":320},{"level":35,"moves":[0,0,0,0],"species":27},{"level":35,"moves":[0,0,0,0],"species":27}],"party_rom_address":3220024,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254380},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":320},{"level":37,"moves":[0,0,0,0],"species":28},{"level":37,"moves":[0,0,0,0],"species":28}],"party_rom_address":3220048,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254420},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":309},{"level":30,"moves":[0,0,0,0],"species":66},{"level":30,"moves":[0,0,0,0],"species":72}],"party_rom_address":3220072,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254460},{"battle_script_rom_address":0,"party":[{"level":32,"moves":[0,0,0,0],"species":310},{"level":32,"moves":[0,0,0,0],"species":66},{"level":32,"moves":[0,0,0,0],"species":72}],"party_rom_address":3220096,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254500},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":310},{"level":34,"moves":[0,0,0,0],"species":66},{"level":34,"moves":[0,0,0,0],"species":73}],"party_rom_address":3220120,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254540},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":310},{"level":36,"moves":[0,0,0,0],"species":67},{"level":36,"moves":[0,0,0,0],"species":73}],"party_rom_address":3220144,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254580},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":120},{"level":37,"moves":[0,0,0,0],"species":120}],"party_rom_address":3220168,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254620},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":309},{"level":39,"moves":[0,0,0,0],"species":120},{"level":39,"moves":[0,0,0,0],"species":120}],"party_rom_address":3220184,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254660},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[0,0,0,0],"species":310},{"level":41,"moves":[0,0,0,0],"species":120},{"level":41,"moves":[0,0,0,0],"species":120}],"party_rom_address":3220208,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254700},{"battle_script_rom_address":0,"party":[{"level":43,"moves":[0,0,0,0],"species":310},{"level":43,"moves":[0,0,0,0],"species":121},{"level":43,"moves":[0,0,0,0],"species":121}],"party_rom_address":3220232,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254740},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":67},{"level":37,"moves":[0,0,0,0],"species":67}],"party_rom_address":3220256,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254780},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":335},{"level":39,"moves":[0,0,0,0],"species":67},{"level":39,"moves":[0,0,0,0],"species":67}],"party_rom_address":3220272,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254820},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[0,0,0,0],"species":336},{"level":41,"moves":[0,0,0,0],"species":67},{"level":41,"moves":[0,0,0,0],"species":67}],"party_rom_address":3220296,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254860},{"battle_script_rom_address":0,"party":[{"level":43,"moves":[0,0,0,0],"species":336},{"level":43,"moves":[0,0,0,0],"species":68},{"level":43,"moves":[0,0,0,0],"species":68}],"party_rom_address":3220320,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254900},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":371},{"level":35,"moves":[0,0,0,0],"species":365}],"party_rom_address":3220344,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254940},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":308},{"level":37,"moves":[0,0,0,0],"species":371},{"level":37,"moves":[0,0,0,0],"species":365}],"party_rom_address":3220360,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3254980},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":308},{"level":39,"moves":[0,0,0,0],"species":371},{"level":39,"moves":[0,0,0,0],"species":365}],"party_rom_address":3220384,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255020},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[0,0,0,0],"species":308},{"level":41,"moves":[0,0,0,0],"species":372},{"level":41,"moves":[0,0,0,0],"species":366}],"party_rom_address":3220408,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255060},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":337},{"level":35,"moves":[0,0,0,0],"species":337},{"level":35,"moves":[0,0,0,0],"species":371}],"party_rom_address":3220432,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255100},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":337},{"level":37,"moves":[0,0,0,0],"species":338},{"level":37,"moves":[0,0,0,0],"species":371}],"party_rom_address":3220456,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255140},{"battle_script_rom_address":0,"party":[{"level":39,"moves":[0,0,0,0],"species":338},{"level":39,"moves":[0,0,0,0],"species":338},{"level":39,"moves":[0,0,0,0],"species":371}],"party_rom_address":3220480,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255180},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[0,0,0,0],"species":338},{"level":41,"moves":[0,0,0,0],"species":338},{"level":41,"moves":[0,0,0,0],"species":372}],"party_rom_address":3220504,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255220},{"battle_script_rom_address":0,"party":[{"level":26,"moves":[0,0,0,0],"species":74},{"level":26,"moves":[0,0,0,0],"species":339}],"party_rom_address":3220528,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255260},{"battle_script_rom_address":0,"party":[{"level":28,"moves":[0,0,0,0],"species":66},{"level":28,"moves":[0,0,0,0],"species":339},{"level":28,"moves":[0,0,0,0],"species":75}],"party_rom_address":3220544,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255300},{"battle_script_rom_address":0,"party":[{"level":30,"moves":[0,0,0,0],"species":66},{"level":30,"moves":[0,0,0,0],"species":339},{"level":30,"moves":[0,0,0,0],"species":75}],"party_rom_address":3220568,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255340},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":67},{"level":33,"moves":[0,0,0,0],"species":340},{"level":33,"moves":[0,0,0,0],"species":76}],"party_rom_address":3220592,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255380},{"battle_script_rom_address":0,"party":[{"level":31,"moves":[0,0,0,0],"species":315},{"level":31,"moves":[0,0,0,0],"species":287},{"level":31,"moves":[0,0,0,0],"species":288},{"level":31,"moves":[0,0,0,0],"species":295},{"level":31,"moves":[0,0,0,0],"species":298},{"level":31,"moves":[0,0,0,0],"species":304}],"party_rom_address":3220616,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255420},{"battle_script_rom_address":0,"party":[{"level":33,"moves":[0,0,0,0],"species":315},{"level":33,"moves":[0,0,0,0],"species":287},{"level":33,"moves":[0,0,0,0],"species":289},{"level":33,"moves":[0,0,0,0],"species":296},{"level":33,"moves":[0,0,0,0],"species":299},{"level":33,"moves":[0,0,0,0],"species":304}],"party_rom_address":3220664,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255460},{"battle_script_rom_address":0,"party":[{"level":35,"moves":[0,0,0,0],"species":316},{"level":35,"moves":[0,0,0,0],"species":287},{"level":35,"moves":[0,0,0,0],"species":289},{"level":35,"moves":[0,0,0,0],"species":296},{"level":35,"moves":[0,0,0,0],"species":299},{"level":35,"moves":[0,0,0,0],"species":305}],"party_rom_address":3220712,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255500},{"battle_script_rom_address":0,"party":[{"level":37,"moves":[0,0,0,0],"species":316},{"level":37,"moves":[0,0,0,0],"species":287},{"level":37,"moves":[0,0,0,0],"species":289},{"level":37,"moves":[0,0,0,0],"species":297},{"level":37,"moves":[0,0,0,0],"species":300},{"level":37,"moves":[0,0,0,0],"species":305}],"party_rom_address":3220760,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255540},{"battle_script_rom_address":0,"party":[{"level":34,"moves":[0,0,0,0],"species":313},{"level":34,"moves":[0,0,0,0],"species":116}],"party_rom_address":3220808,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255580},{"battle_script_rom_address":0,"party":[{"level":36,"moves":[0,0,0,0],"species":325},{"level":36,"moves":[0,0,0,0],"species":313},{"level":36,"moves":[0,0,0,0],"species":117}],"party_rom_address":3220824,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255620},{"battle_script_rom_address":0,"party":[{"level":38,"moves":[0,0,0,0],"species":325},{"level":38,"moves":[0,0,0,0],"species":313},{"level":38,"moves":[0,0,0,0],"species":117}],"party_rom_address":3220848,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255660},{"battle_script_rom_address":0,"party":[{"level":40,"moves":[0,0,0,0],"species":325},{"level":40,"moves":[0,0,0,0],"species":314},{"level":40,"moves":[0,0,0,0],"species":230}],"party_rom_address":3220872,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255700},{"battle_script_rom_address":2557618,"party":[{"level":41,"moves":[0,0,0,0],"species":411}],"party_rom_address":3220896,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255740},{"battle_script_rom_address":2557649,"party":[{"level":41,"moves":[0,0,0,0],"species":378},{"level":41,"moves":[0,0,0,0],"species":64}],"party_rom_address":3220904,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255780},{"battle_script_rom_address":0,"party":[{"level":41,"moves":[0,0,0,0],"species":202}],"party_rom_address":3220920,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255820},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":4}],"party_rom_address":3220928,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255860},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":1}],"party_rom_address":3220936,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255900},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":405}],"party_rom_address":3220944,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255940},{"battle_script_rom_address":0,"party":[{"level":5,"moves":[0,0,0,0],"species":404}],"party_rom_address":3220952,"pokemon_data_type":"NO_ITEM_DEFAULT_MOVES","rom_address":3255980}],"warps":{"MAP_ABANDONED_SHIP_CAPTAINS_OFFICE:0,1/MAP_ABANDONED_SHIP_DECK:4":"MAP_ABANDONED_SHIP_DECK:4/MAP_ABANDONED_SHIP_CAPTAINS_OFFICE:0","MAP_ABANDONED_SHIP_CORRIDORS_1F:0,1/MAP_ABANDONED_SHIP_DECK:2":"MAP_ABANDONED_SHIP_DECK:2/MAP_ABANDONED_SHIP_CORRIDORS_1F:1","MAP_ABANDONED_SHIP_CORRIDORS_1F:10/MAP_ABANDONED_SHIP_CORRIDORS_B1F:6":"MAP_ABANDONED_SHIP_CORRIDORS_B1F:6/MAP_ABANDONED_SHIP_CORRIDORS_1F:10","MAP_ABANDONED_SHIP_CORRIDORS_1F:11/MAP_ABANDONED_SHIP_ROOMS2_1F:2":"MAP_ABANDONED_SHIP_ROOMS2_1F:2/MAP_ABANDONED_SHIP_CORRIDORS_1F:11","MAP_ABANDONED_SHIP_CORRIDORS_1F:2,3/MAP_ABANDONED_SHIP_DECK:3":"MAP_ABANDONED_SHIP_DECK:3/MAP_ABANDONED_SHIP_CORRIDORS_1F:2","MAP_ABANDONED_SHIP_CORRIDORS_1F:4/MAP_ABANDONED_SHIP_ROOMS_1F:0":"MAP_ABANDONED_SHIP_ROOMS_1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_1F:4","MAP_ABANDONED_SHIP_CORRIDORS_1F:5/MAP_ABANDONED_SHIP_ROOMS_1F:3":"MAP_ABANDONED_SHIP_ROOMS_1F:3,5/MAP_ABANDONED_SHIP_CORRIDORS_1F:5","MAP_ABANDONED_SHIP_CORRIDORS_1F:6/MAP_ABANDONED_SHIP_ROOMS_1F:2":"MAP_ABANDONED_SHIP_ROOMS_1F:2/MAP_ABANDONED_SHIP_CORRIDORS_1F:6","MAP_ABANDONED_SHIP_CORRIDORS_1F:7/MAP_ABANDONED_SHIP_ROOMS_1F:4":"MAP_ABANDONED_SHIP_ROOMS_1F:4/MAP_ABANDONED_SHIP_CORRIDORS_1F:7","MAP_ABANDONED_SHIP_CORRIDORS_1F:8/MAP_ABANDONED_SHIP_ROOMS2_1F:0":"MAP_ABANDONED_SHIP_ROOMS2_1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_1F:8","MAP_ABANDONED_SHIP_CORRIDORS_1F:9/MAP_ABANDONED_SHIP_CORRIDORS_B1F:7":"MAP_ABANDONED_SHIP_CORRIDORS_B1F:7/MAP_ABANDONED_SHIP_CORRIDORS_1F:9","MAP_ABANDONED_SHIP_CORRIDORS_B1F:0/MAP_ABANDONED_SHIP_ROOMS2_B1F:2":"MAP_ABANDONED_SHIP_ROOMS2_B1F:2,3/MAP_ABANDONED_SHIP_CORRIDORS_B1F:0","MAP_ABANDONED_SHIP_CORRIDORS_B1F:1/MAP_ABANDONED_SHIP_ROOMS2_B1F:0":"MAP_ABANDONED_SHIP_ROOMS2_B1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_B1F:1","MAP_ABANDONED_SHIP_CORRIDORS_B1F:2/MAP_ABANDONED_SHIP_ROOMS_B1F:0":"MAP_ABANDONED_SHIP_ROOMS_B1F:0/MAP_ABANDONED_SHIP_CORRIDORS_B1F:2","MAP_ABANDONED_SHIP_CORRIDORS_B1F:3/MAP_ABANDONED_SHIP_ROOMS_B1F:1":"MAP_ABANDONED_SHIP_ROOMS_B1F:1/MAP_ABANDONED_SHIP_CORRIDORS_B1F:3","MAP_ABANDONED_SHIP_CORRIDORS_B1F:4/MAP_ABANDONED_SHIP_ROOMS_B1F:2":"MAP_ABANDONED_SHIP_ROOMS_B1F:2/MAP_ABANDONED_SHIP_CORRIDORS_B1F:4","MAP_ABANDONED_SHIP_CORRIDORS_B1F:5/MAP_ABANDONED_SHIP_ROOM_B1F:0":"MAP_ABANDONED_SHIP_ROOM_B1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_B1F:5","MAP_ABANDONED_SHIP_CORRIDORS_B1F:6/MAP_ABANDONED_SHIP_CORRIDORS_1F:10":"MAP_ABANDONED_SHIP_CORRIDORS_1F:10/MAP_ABANDONED_SHIP_CORRIDORS_B1F:6","MAP_ABANDONED_SHIP_CORRIDORS_B1F:7/MAP_ABANDONED_SHIP_CORRIDORS_1F:9":"MAP_ABANDONED_SHIP_CORRIDORS_1F:9/MAP_ABANDONED_SHIP_CORRIDORS_B1F:7","MAP_ABANDONED_SHIP_DECK:0,1/MAP_ROUTE108:0":"MAP_ROUTE108:0/MAP_ABANDONED_SHIP_DECK:0","MAP_ABANDONED_SHIP_DECK:2/MAP_ABANDONED_SHIP_CORRIDORS_1F:1":"MAP_ABANDONED_SHIP_CORRIDORS_1F:0,1/MAP_ABANDONED_SHIP_DECK:2","MAP_ABANDONED_SHIP_DECK:3/MAP_ABANDONED_SHIP_CORRIDORS_1F:2":"MAP_ABANDONED_SHIP_CORRIDORS_1F:2,3/MAP_ABANDONED_SHIP_DECK:3","MAP_ABANDONED_SHIP_DECK:4/MAP_ABANDONED_SHIP_CAPTAINS_OFFICE:0":"MAP_ABANDONED_SHIP_CAPTAINS_OFFICE:0,1/MAP_ABANDONED_SHIP_DECK:4","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:0/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:0":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:0,1/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:0","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:1/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:2":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:2,3/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:1","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:2/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:4":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:4,5/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:2","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:3/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:6":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:6/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:3","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:4/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:7":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:7/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:4","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:5/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:8":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:8/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:5","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:0,1/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:0":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:0/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:0","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:2,3/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:1":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:1/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:2","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:4,5/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:2":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:2/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:4","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:6/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:3":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:3/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:6","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:7/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:4":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:4/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:7","MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:8/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:5":"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:5/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:8","MAP_ABANDONED_SHIP_ROOMS2_1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_1F:8":"MAP_ABANDONED_SHIP_CORRIDORS_1F:8/MAP_ABANDONED_SHIP_ROOMS2_1F:0","MAP_ABANDONED_SHIP_ROOMS2_1F:2/MAP_ABANDONED_SHIP_CORRIDORS_1F:11":"MAP_ABANDONED_SHIP_CORRIDORS_1F:11/MAP_ABANDONED_SHIP_ROOMS2_1F:2","MAP_ABANDONED_SHIP_ROOMS2_B1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_B1F:1":"MAP_ABANDONED_SHIP_CORRIDORS_B1F:1/MAP_ABANDONED_SHIP_ROOMS2_B1F:0","MAP_ABANDONED_SHIP_ROOMS2_B1F:2,3/MAP_ABANDONED_SHIP_CORRIDORS_B1F:0":"MAP_ABANDONED_SHIP_CORRIDORS_B1F:0/MAP_ABANDONED_SHIP_ROOMS2_B1F:2","MAP_ABANDONED_SHIP_ROOMS_1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_1F:4":"MAP_ABANDONED_SHIP_CORRIDORS_1F:4/MAP_ABANDONED_SHIP_ROOMS_1F:0","MAP_ABANDONED_SHIP_ROOMS_1F:2/MAP_ABANDONED_SHIP_CORRIDORS_1F:6":"MAP_ABANDONED_SHIP_CORRIDORS_1F:6/MAP_ABANDONED_SHIP_ROOMS_1F:2","MAP_ABANDONED_SHIP_ROOMS_1F:3,5/MAP_ABANDONED_SHIP_CORRIDORS_1F:5":"MAP_ABANDONED_SHIP_CORRIDORS_1F:5/MAP_ABANDONED_SHIP_ROOMS_1F:3","MAP_ABANDONED_SHIP_ROOMS_1F:4/MAP_ABANDONED_SHIP_CORRIDORS_1F:7":"MAP_ABANDONED_SHIP_CORRIDORS_1F:7/MAP_ABANDONED_SHIP_ROOMS_1F:4","MAP_ABANDONED_SHIP_ROOMS_B1F:0/MAP_ABANDONED_SHIP_CORRIDORS_B1F:2":"MAP_ABANDONED_SHIP_CORRIDORS_B1F:2/MAP_ABANDONED_SHIP_ROOMS_B1F:0","MAP_ABANDONED_SHIP_ROOMS_B1F:1/MAP_ABANDONED_SHIP_CORRIDORS_B1F:3":"MAP_ABANDONED_SHIP_CORRIDORS_B1F:3/MAP_ABANDONED_SHIP_ROOMS_B1F:1","MAP_ABANDONED_SHIP_ROOMS_B1F:2/MAP_ABANDONED_SHIP_CORRIDORS_B1F:4":"MAP_ABANDONED_SHIP_CORRIDORS_B1F:4/MAP_ABANDONED_SHIP_ROOMS_B1F:2","MAP_ABANDONED_SHIP_ROOM_B1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_B1F:5":"MAP_ABANDONED_SHIP_CORRIDORS_B1F:5/MAP_ABANDONED_SHIP_ROOM_B1F:0","MAP_ABANDONED_SHIP_UNDERWATER1:0,1/MAP_ABANDONED_SHIP_UNDERWATER2:0":"MAP_ABANDONED_SHIP_UNDERWATER2:0/MAP_ABANDONED_SHIP_UNDERWATER1:0","MAP_ABANDONED_SHIP_UNDERWATER2:0/MAP_ABANDONED_SHIP_UNDERWATER1:0":"MAP_ABANDONED_SHIP_UNDERWATER1:0,1/MAP_ABANDONED_SHIP_UNDERWATER2:0","MAP_ALTERING_CAVE:0/MAP_ROUTE103:0":"MAP_ROUTE103:0/MAP_ALTERING_CAVE:0","MAP_ANCIENT_TOMB:0/MAP_ROUTE120:0":"MAP_ROUTE120:0/MAP_ANCIENT_TOMB:0","MAP_ANCIENT_TOMB:1/MAP_ANCIENT_TOMB:2":"MAP_ANCIENT_TOMB:2/MAP_ANCIENT_TOMB:1","MAP_ANCIENT_TOMB:2/MAP_ANCIENT_TOMB:1":"MAP_ANCIENT_TOMB:1/MAP_ANCIENT_TOMB:2","MAP_AQUA_HIDEOUT_1F:0,1/MAP_LILYCOVE_CITY:6":"MAP_LILYCOVE_CITY:6/MAP_AQUA_HIDEOUT_1F:0","MAP_AQUA_HIDEOUT_1F:2/MAP_AQUA_HIDEOUT_B1F:0":"MAP_AQUA_HIDEOUT_B1F:0/MAP_AQUA_HIDEOUT_1F:2","MAP_AQUA_HIDEOUT_B1F:0/MAP_AQUA_HIDEOUT_1F:2":"MAP_AQUA_HIDEOUT_1F:2/MAP_AQUA_HIDEOUT_B1F:0","MAP_AQUA_HIDEOUT_B1F:1/MAP_AQUA_HIDEOUT_B2F:0":"MAP_AQUA_HIDEOUT_B2F:0/MAP_AQUA_HIDEOUT_B1F:1","MAP_AQUA_HIDEOUT_B1F:10/MAP_AQUA_HIDEOUT_B1F:6":"MAP_AQUA_HIDEOUT_B1F:6/MAP_AQUA_HIDEOUT_B1F:10","MAP_AQUA_HIDEOUT_B1F:11/MAP_AQUA_HIDEOUT_B1F:22":"MAP_AQUA_HIDEOUT_B1F:22/MAP_AQUA_HIDEOUT_B1F:11","MAP_AQUA_HIDEOUT_B1F:12/MAP_AQUA_HIDEOUT_B1F:9":"MAP_AQUA_HIDEOUT_B1F:9/MAP_AQUA_HIDEOUT_B1F:12","MAP_AQUA_HIDEOUT_B1F:13/MAP_AQUA_HIDEOUT_B1F:18":"MAP_AQUA_HIDEOUT_B1F:18/MAP_AQUA_HIDEOUT_B1F:13","MAP_AQUA_HIDEOUT_B1F:14/MAP_AQUA_HIDEOUT_B1F:12!":"MAP_AQUA_HIDEOUT_B1F:12/MAP_AQUA_HIDEOUT_B1F:9","MAP_AQUA_HIDEOUT_B1F:15/MAP_AQUA_HIDEOUT_B1F:16":"MAP_AQUA_HIDEOUT_B1F:16/MAP_AQUA_HIDEOUT_B1F:15","MAP_AQUA_HIDEOUT_B1F:16/MAP_AQUA_HIDEOUT_B1F:15":"MAP_AQUA_HIDEOUT_B1F:15/MAP_AQUA_HIDEOUT_B1F:16","MAP_AQUA_HIDEOUT_B1F:17/MAP_AQUA_HIDEOUT_B1F:20":"MAP_AQUA_HIDEOUT_B1F:20/MAP_AQUA_HIDEOUT_B1F:17","MAP_AQUA_HIDEOUT_B1F:18/MAP_AQUA_HIDEOUT_B1F:13":"MAP_AQUA_HIDEOUT_B1F:13/MAP_AQUA_HIDEOUT_B1F:18","MAP_AQUA_HIDEOUT_B1F:19/MAP_AQUA_HIDEOUT_B1F:24":"MAP_AQUA_HIDEOUT_B1F:24/MAP_AQUA_HIDEOUT_B1F:19","MAP_AQUA_HIDEOUT_B1F:2/MAP_AQUA_HIDEOUT_B2F:1":"MAP_AQUA_HIDEOUT_B2F:1/MAP_AQUA_HIDEOUT_B1F:2","MAP_AQUA_HIDEOUT_B1F:20/MAP_AQUA_HIDEOUT_B1F:17":"MAP_AQUA_HIDEOUT_B1F:17/MAP_AQUA_HIDEOUT_B1F:20","MAP_AQUA_HIDEOUT_B1F:21/MAP_AQUA_HIDEOUT_B1F:12!":"MAP_AQUA_HIDEOUT_B1F:12/MAP_AQUA_HIDEOUT_B1F:9","MAP_AQUA_HIDEOUT_B1F:22/MAP_AQUA_HIDEOUT_B1F:11":"MAP_AQUA_HIDEOUT_B1F:11/MAP_AQUA_HIDEOUT_B1F:22","MAP_AQUA_HIDEOUT_B1F:23/MAP_AQUA_HIDEOUT_B1F:17!":"MAP_AQUA_HIDEOUT_B1F:17/MAP_AQUA_HIDEOUT_B1F:20","MAP_AQUA_HIDEOUT_B1F:24/MAP_AQUA_HIDEOUT_B1F:19":"MAP_AQUA_HIDEOUT_B1F:19/MAP_AQUA_HIDEOUT_B1F:24","MAP_AQUA_HIDEOUT_B1F:3/MAP_AQUA_HIDEOUT_B2F:2":"MAP_AQUA_HIDEOUT_B2F:2/MAP_AQUA_HIDEOUT_B1F:3","MAP_AQUA_HIDEOUT_B1F:4/MAP_AQUA_HIDEOUT_B1F:7":"MAP_AQUA_HIDEOUT_B1F:7/MAP_AQUA_HIDEOUT_B1F:4","MAP_AQUA_HIDEOUT_B1F:5/MAP_AQUA_HIDEOUT_B1F:8":"MAP_AQUA_HIDEOUT_B1F:8/MAP_AQUA_HIDEOUT_B1F:5","MAP_AQUA_HIDEOUT_B1F:6/MAP_AQUA_HIDEOUT_B1F:10":"MAP_AQUA_HIDEOUT_B1F:10/MAP_AQUA_HIDEOUT_B1F:6","MAP_AQUA_HIDEOUT_B1F:7/MAP_AQUA_HIDEOUT_B1F:4":"MAP_AQUA_HIDEOUT_B1F:4/MAP_AQUA_HIDEOUT_B1F:7","MAP_AQUA_HIDEOUT_B1F:8/MAP_AQUA_HIDEOUT_B1F:5":"MAP_AQUA_HIDEOUT_B1F:5/MAP_AQUA_HIDEOUT_B1F:8","MAP_AQUA_HIDEOUT_B1F:9/MAP_AQUA_HIDEOUT_B1F:12":"MAP_AQUA_HIDEOUT_B1F:12/MAP_AQUA_HIDEOUT_B1F:9","MAP_AQUA_HIDEOUT_B2F:0/MAP_AQUA_HIDEOUT_B1F:1":"MAP_AQUA_HIDEOUT_B1F:1/MAP_AQUA_HIDEOUT_B2F:0","MAP_AQUA_HIDEOUT_B2F:1/MAP_AQUA_HIDEOUT_B1F:2":"MAP_AQUA_HIDEOUT_B1F:2/MAP_AQUA_HIDEOUT_B2F:1","MAP_AQUA_HIDEOUT_B2F:2/MAP_AQUA_HIDEOUT_B1F:3":"MAP_AQUA_HIDEOUT_B1F:3/MAP_AQUA_HIDEOUT_B2F:2","MAP_AQUA_HIDEOUT_B2F:3/MAP_AQUA_HIDEOUT_B2F:5":"MAP_AQUA_HIDEOUT_B2F:5/MAP_AQUA_HIDEOUT_B2F:3","MAP_AQUA_HIDEOUT_B2F:4/MAP_AQUA_HIDEOUT_B2F:8":"MAP_AQUA_HIDEOUT_B2F:8/MAP_AQUA_HIDEOUT_B2F:4","MAP_AQUA_HIDEOUT_B2F:5/MAP_AQUA_HIDEOUT_B2F:3":"MAP_AQUA_HIDEOUT_B2F:3/MAP_AQUA_HIDEOUT_B2F:5","MAP_AQUA_HIDEOUT_B2F:6/MAP_AQUA_HIDEOUT_B2F:7":"MAP_AQUA_HIDEOUT_B2F:7/MAP_AQUA_HIDEOUT_B2F:6","MAP_AQUA_HIDEOUT_B2F:7/MAP_AQUA_HIDEOUT_B2F:6":"MAP_AQUA_HIDEOUT_B2F:6/MAP_AQUA_HIDEOUT_B2F:7","MAP_AQUA_HIDEOUT_B2F:8/MAP_AQUA_HIDEOUT_B2F:4":"MAP_AQUA_HIDEOUT_B2F:4/MAP_AQUA_HIDEOUT_B2F:8","MAP_AQUA_HIDEOUT_B2F:9/MAP_AQUA_HIDEOUT_B1F:4!":"MAP_AQUA_HIDEOUT_B1F:4/MAP_AQUA_HIDEOUT_B1F:7","MAP_ARTISAN_CAVE_1F:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:13":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:13/MAP_ARTISAN_CAVE_1F:0","MAP_ARTISAN_CAVE_1F:1/MAP_ARTISAN_CAVE_B1F:1":"MAP_ARTISAN_CAVE_B1F:1/MAP_ARTISAN_CAVE_1F:1","MAP_ARTISAN_CAVE_B1F:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:10":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:10/MAP_ARTISAN_CAVE_B1F:0","MAP_ARTISAN_CAVE_B1F:1/MAP_ARTISAN_CAVE_1F:1":"MAP_ARTISAN_CAVE_1F:1/MAP_ARTISAN_CAVE_B1F:1","MAP_BATTLE_COLOSSEUM_2P:0,1/MAP_DYNAMIC:-1!":"","MAP_BATTLE_COLOSSEUM_4P:0,1,2,3/MAP_DYNAMIC:-1!":"","MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:1":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:1/MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY:0","MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1!":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1/MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0","MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1/MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0","MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1!":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1/MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0","MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:2":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:2/MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY:0","MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:2":"MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0","MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:0,1/MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:2":"MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:0","MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0":"MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:2","MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:3/MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0!":"MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:2","MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:2":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:0","MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:0":"MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:0,1/MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:2","MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY:0,1,2/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:0":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:0/MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY:0","MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:3":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:3/MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY:0","MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:2":"MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:2/MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM:0","MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:0":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:0/MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:0","MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:2/MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM:0":"MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:2","MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER:0,1,2/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:6":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:6/MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER:0","MAP_BATTLE_FRONTIER_LOUNGE1:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:5":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:5/MAP_BATTLE_FRONTIER_LOUNGE1:0","MAP_BATTLE_FRONTIER_LOUNGE2:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:3":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:3/MAP_BATTLE_FRONTIER_LOUNGE2:0","MAP_BATTLE_FRONTIER_LOUNGE3:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:9":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:9/MAP_BATTLE_FRONTIER_LOUNGE3:0","MAP_BATTLE_FRONTIER_LOUNGE4:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:6":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:6/MAP_BATTLE_FRONTIER_LOUNGE4:0","MAP_BATTLE_FRONTIER_LOUNGE5:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:7":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:7/MAP_BATTLE_FRONTIER_LOUNGE5:0","MAP_BATTLE_FRONTIER_LOUNGE6:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:8":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:8/MAP_BATTLE_FRONTIER_LOUNGE6:0","MAP_BATTLE_FRONTIER_LOUNGE7:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:7":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:7/MAP_BATTLE_FRONTIER_LOUNGE7:0","MAP_BATTLE_FRONTIER_LOUNGE8:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:10":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:10/MAP_BATTLE_FRONTIER_LOUNGE8:0","MAP_BATTLE_FRONTIER_LOUNGE9:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:11":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:11/MAP_BATTLE_FRONTIER_LOUNGE9:0","MAP_BATTLE_FRONTIER_MART:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:4":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:4/MAP_BATTLE_FRONTIER_MART:0","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:0/MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:0":"MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:0","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:1/MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY:0":"MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:1","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:10/MAP_BATTLE_FRONTIER_LOUNGE8:0":"MAP_BATTLE_FRONTIER_LOUNGE8:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:10","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:11/MAP_BATTLE_FRONTIER_LOUNGE9:0":"MAP_BATTLE_FRONTIER_LOUNGE9:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:11","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:12/MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:0":"MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:12","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:13/MAP_ARTISAN_CAVE_1F:0":"MAP_ARTISAN_CAVE_1F:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:13","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:0":"MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:2","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:3/MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY:0":"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:3","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:4/MAP_BATTLE_FRONTIER_RANKING_HALL:0":"MAP_BATTLE_FRONTIER_RANKING_HALL:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:4","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:5/MAP_BATTLE_FRONTIER_LOUNGE1:0":"MAP_BATTLE_FRONTIER_LOUNGE1:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:5","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:6/MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER:0":"MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER:0,1,2/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:6","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:7/MAP_BATTLE_FRONTIER_LOUNGE5:0":"MAP_BATTLE_FRONTIER_LOUNGE5:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:7","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:8/MAP_BATTLE_FRONTIER_LOUNGE6:0":"MAP_BATTLE_FRONTIER_LOUNGE6:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:8","MAP_BATTLE_FRONTIER_OUTSIDE_EAST:9/MAP_BATTLE_FRONTIER_LOUNGE3:0":"MAP_BATTLE_FRONTIER_LOUNGE3:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:9","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:0/MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY:0":"MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY:0,1,2/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:0","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1/MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0":"MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:10/MAP_ARTISAN_CAVE_B1F:0":"MAP_ARTISAN_CAVE_B1F:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:10","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:2/MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY:0":"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:2","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:3/MAP_BATTLE_FRONTIER_LOUNGE2:0":"MAP_BATTLE_FRONTIER_LOUNGE2:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:3","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:4/MAP_BATTLE_FRONTIER_MART:0":"MAP_BATTLE_FRONTIER_MART:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:4","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:5/MAP_BATTLE_FRONTIER_SCOTTS_HOUSE:0":"MAP_BATTLE_FRONTIER_SCOTTS_HOUSE:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:5","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:6/MAP_BATTLE_FRONTIER_LOUNGE4:0":"MAP_BATTLE_FRONTIER_LOUNGE4:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:6","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:7/MAP_BATTLE_FRONTIER_LOUNGE7:0":"MAP_BATTLE_FRONTIER_LOUNGE7:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:7","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:8/MAP_BATTLE_FRONTIER_RECEPTION_GATE:0":"MAP_BATTLE_FRONTIER_RECEPTION_GATE:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:8","MAP_BATTLE_FRONTIER_OUTSIDE_WEST:9/MAP_BATTLE_FRONTIER_RECEPTION_GATE:1":"MAP_BATTLE_FRONTIER_RECEPTION_GATE:1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:9","MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:12":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:12/MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:0","MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:2/MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:0":"MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:0/MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:2","MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:0/MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:2":"MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:2/MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:0","MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_BATTLE_FRONTIER_RANKING_HALL:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:4":"MAP_BATTLE_FRONTIER_OUTSIDE_EAST:4/MAP_BATTLE_FRONTIER_RANKING_HALL:0","MAP_BATTLE_FRONTIER_RECEPTION_GATE:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:8":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:8/MAP_BATTLE_FRONTIER_RECEPTION_GATE:0","MAP_BATTLE_FRONTIER_RECEPTION_GATE:1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:9":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:9/MAP_BATTLE_FRONTIER_RECEPTION_GATE:1","MAP_BATTLE_FRONTIER_SCOTTS_HOUSE:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:5":"MAP_BATTLE_FRONTIER_OUTSIDE_WEST:5/MAP_BATTLE_FRONTIER_SCOTTS_HOUSE:0","MAP_BIRTH_ISLAND_EXTERIOR:0/MAP_BIRTH_ISLAND_HARBOR:0":"MAP_BIRTH_ISLAND_HARBOR:0/MAP_BIRTH_ISLAND_EXTERIOR:0","MAP_BIRTH_ISLAND_HARBOR:0/MAP_BIRTH_ISLAND_EXTERIOR:0":"MAP_BIRTH_ISLAND_EXTERIOR:0/MAP_BIRTH_ISLAND_HARBOR:0","MAP_CAVE_OF_ORIGIN_1F:0/MAP_CAVE_OF_ORIGIN_ENTRANCE:1":"MAP_CAVE_OF_ORIGIN_ENTRANCE:1/MAP_CAVE_OF_ORIGIN_1F:0","MAP_CAVE_OF_ORIGIN_1F:1/MAP_CAVE_OF_ORIGIN_B1F:0":"MAP_CAVE_OF_ORIGIN_B1F:0/MAP_CAVE_OF_ORIGIN_1F:1","MAP_CAVE_OF_ORIGIN_B1F:0/MAP_CAVE_OF_ORIGIN_1F:1":"MAP_CAVE_OF_ORIGIN_1F:1/MAP_CAVE_OF_ORIGIN_B1F:0","MAP_CAVE_OF_ORIGIN_ENTRANCE:0/MAP_SOOTOPOLIS_CITY:3":"MAP_SOOTOPOLIS_CITY:3/MAP_CAVE_OF_ORIGIN_ENTRANCE:0","MAP_CAVE_OF_ORIGIN_ENTRANCE:1/MAP_CAVE_OF_ORIGIN_1F:0":"MAP_CAVE_OF_ORIGIN_1F:0/MAP_CAVE_OF_ORIGIN_ENTRANCE:1","MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1:0/MAP_CAVE_OF_ORIGIN_1F:1!":"MAP_CAVE_OF_ORIGIN_1F:1/MAP_CAVE_OF_ORIGIN_B1F:0","MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1:1/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:0":"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:0/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1:1","MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:0/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1:1":"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1:1/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:0","MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:1/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3:0":"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3:0/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:1","MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3:0/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:1":"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:1/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3:0","MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3:1/MAP_CAVE_OF_ORIGIN_B1F:0!":"MAP_CAVE_OF_ORIGIN_B1F:0/MAP_CAVE_OF_ORIGIN_1F:1","MAP_DESERT_RUINS:0/MAP_ROUTE111:1":"MAP_ROUTE111:1/MAP_DESERT_RUINS:0","MAP_DESERT_RUINS:1/MAP_DESERT_RUINS:2":"MAP_DESERT_RUINS:2/MAP_DESERT_RUINS:1","MAP_DESERT_RUINS:2/MAP_DESERT_RUINS:1":"MAP_DESERT_RUINS:1/MAP_DESERT_RUINS:2","MAP_DESERT_UNDERPASS:0/MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:2":"MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:2/MAP_DESERT_UNDERPASS:0","MAP_DEWFORD_TOWN:0/MAP_DEWFORD_TOWN_HALL:0":"MAP_DEWFORD_TOWN_HALL:0,1/MAP_DEWFORD_TOWN:0","MAP_DEWFORD_TOWN:1/MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:0":"MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:0,1/MAP_DEWFORD_TOWN:1","MAP_DEWFORD_TOWN:2/MAP_DEWFORD_TOWN_GYM:0":"MAP_DEWFORD_TOWN_GYM:0,1/MAP_DEWFORD_TOWN:2","MAP_DEWFORD_TOWN:3/MAP_DEWFORD_TOWN_HOUSE1:0":"MAP_DEWFORD_TOWN_HOUSE1:0,1/MAP_DEWFORD_TOWN:3","MAP_DEWFORD_TOWN:4/MAP_DEWFORD_TOWN_HOUSE2:0":"MAP_DEWFORD_TOWN_HOUSE2:0,1/MAP_DEWFORD_TOWN:4","MAP_DEWFORD_TOWN_GYM:0,1/MAP_DEWFORD_TOWN:2":"MAP_DEWFORD_TOWN:2/MAP_DEWFORD_TOWN_GYM:0","MAP_DEWFORD_TOWN_HALL:0,1/MAP_DEWFORD_TOWN:0":"MAP_DEWFORD_TOWN:0/MAP_DEWFORD_TOWN_HALL:0","MAP_DEWFORD_TOWN_HOUSE1:0,1/MAP_DEWFORD_TOWN:3":"MAP_DEWFORD_TOWN:3/MAP_DEWFORD_TOWN_HOUSE1:0","MAP_DEWFORD_TOWN_HOUSE2:0,1/MAP_DEWFORD_TOWN:4":"MAP_DEWFORD_TOWN:4/MAP_DEWFORD_TOWN_HOUSE2:0","MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:0,1/MAP_DEWFORD_TOWN:1":"MAP_DEWFORD_TOWN:1/MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:0","MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:2/MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:0":"MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:0/MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:2","MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:0/MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:2":"MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:2/MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:0","MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_EVER_GRANDE_CITY:0/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:0":"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:0,1/MAP_EVER_GRANDE_CITY:0","MAP_EVER_GRANDE_CITY:1/MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:0":"MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:0,1/MAP_EVER_GRANDE_CITY:1","MAP_EVER_GRANDE_CITY:2/MAP_VICTORY_ROAD_1F:0":"MAP_VICTORY_ROAD_1F:0/MAP_EVER_GRANDE_CITY:2","MAP_EVER_GRANDE_CITY:3/MAP_VICTORY_ROAD_1F:1":"MAP_VICTORY_ROAD_1F:1/MAP_EVER_GRANDE_CITY:3","MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:0/MAP_EVER_GRANDE_CITY_HALL4:1":"MAP_EVER_GRANDE_CITY_HALL4:1/MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:0","MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:1/MAP_EVER_GRANDE_CITY_HALL_OF_FAME:0":"MAP_EVER_GRANDE_CITY_HALL_OF_FAME:0/MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:1","MAP_EVER_GRANDE_CITY_DRAKES_ROOM:0/MAP_EVER_GRANDE_CITY_HALL3:1":"MAP_EVER_GRANDE_CITY_HALL3:1/MAP_EVER_GRANDE_CITY_DRAKES_ROOM:0","MAP_EVER_GRANDE_CITY_DRAKES_ROOM:1/MAP_EVER_GRANDE_CITY_HALL4:0":"MAP_EVER_GRANDE_CITY_HALL4:0/MAP_EVER_GRANDE_CITY_DRAKES_ROOM:1","MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:0/MAP_EVER_GRANDE_CITY_HALL2:1":"MAP_EVER_GRANDE_CITY_HALL2:1/MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:0","MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:1/MAP_EVER_GRANDE_CITY_HALL3:0":"MAP_EVER_GRANDE_CITY_HALL3:0,2,3/MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:1","MAP_EVER_GRANDE_CITY_HALL1:0,2,3/MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:1":"MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:1/MAP_EVER_GRANDE_CITY_HALL1:0","MAP_EVER_GRANDE_CITY_HALL1:1/MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:0":"MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:0/MAP_EVER_GRANDE_CITY_HALL1:1","MAP_EVER_GRANDE_CITY_HALL2:0,2,3/MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:1":"MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:1/MAP_EVER_GRANDE_CITY_HALL2:0","MAP_EVER_GRANDE_CITY_HALL2:1/MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:0":"MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:0/MAP_EVER_GRANDE_CITY_HALL2:1","MAP_EVER_GRANDE_CITY_HALL3:0,2,3/MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:1":"MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:1/MAP_EVER_GRANDE_CITY_HALL3:0","MAP_EVER_GRANDE_CITY_HALL3:1/MAP_EVER_GRANDE_CITY_DRAKES_ROOM:0":"MAP_EVER_GRANDE_CITY_DRAKES_ROOM:0/MAP_EVER_GRANDE_CITY_HALL3:1","MAP_EVER_GRANDE_CITY_HALL4:0/MAP_EVER_GRANDE_CITY_DRAKES_ROOM:1":"MAP_EVER_GRANDE_CITY_DRAKES_ROOM:1/MAP_EVER_GRANDE_CITY_HALL4:0","MAP_EVER_GRANDE_CITY_HALL4:1/MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:0":"MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:0/MAP_EVER_GRANDE_CITY_HALL4:1","MAP_EVER_GRANDE_CITY_HALL5:0,2,3/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:2":"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:2,3/MAP_EVER_GRANDE_CITY_HALL5:0","MAP_EVER_GRANDE_CITY_HALL5:1/MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:0":"MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:0/MAP_EVER_GRANDE_CITY_HALL5:1","MAP_EVER_GRANDE_CITY_HALL_OF_FAME:0/MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:1":"MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:1/MAP_EVER_GRANDE_CITY_HALL_OF_FAME:0","MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:0/MAP_EVER_GRANDE_CITY_HALL1:1":"MAP_EVER_GRANDE_CITY_HALL1:1/MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:0","MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:1/MAP_EVER_GRANDE_CITY_HALL2:0":"MAP_EVER_GRANDE_CITY_HALL2:0,2,3/MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:1","MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:0,1/MAP_EVER_GRANDE_CITY:1":"MAP_EVER_GRANDE_CITY:1/MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:0","MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:2/MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:0":"MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:0/MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:2","MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:0/MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:2":"MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:2/MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:0","MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:0,1/MAP_EVER_GRANDE_CITY:0":"MAP_EVER_GRANDE_CITY:0/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:0","MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:2,3/MAP_EVER_GRANDE_CITY_HALL5:0":"MAP_EVER_GRANDE_CITY_HALL5:0,2,3/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:2","MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:4/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:0":"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:0/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:4","MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:0/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:4":"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:4/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:0","MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:0/MAP_EVER_GRANDE_CITY_HALL5:1":"MAP_EVER_GRANDE_CITY_HALL5:1/MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:0","MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:1/MAP_EVER_GRANDE_CITY_HALL1:0":"MAP_EVER_GRANDE_CITY_HALL1:0,2,3/MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:1","MAP_FALLARBOR_TOWN:0/MAP_FALLARBOR_TOWN_MART:0":"MAP_FALLARBOR_TOWN_MART:0,1/MAP_FALLARBOR_TOWN:0","MAP_FALLARBOR_TOWN:1/MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY:0":"MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY:0,1/MAP_FALLARBOR_TOWN:1","MAP_FALLARBOR_TOWN:2/MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:0":"MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:0,1/MAP_FALLARBOR_TOWN:2","MAP_FALLARBOR_TOWN:3/MAP_FALLARBOR_TOWN_COZMOS_HOUSE:0":"MAP_FALLARBOR_TOWN_COZMOS_HOUSE:0,1/MAP_FALLARBOR_TOWN:3","MAP_FALLARBOR_TOWN:4/MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE:0":"MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE:0,1/MAP_FALLARBOR_TOWN:4","MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY:0,1/MAP_FALLARBOR_TOWN:1":"MAP_FALLARBOR_TOWN:1/MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY:0","MAP_FALLARBOR_TOWN_COZMOS_HOUSE:0,1/MAP_FALLARBOR_TOWN:3":"MAP_FALLARBOR_TOWN:3/MAP_FALLARBOR_TOWN_COZMOS_HOUSE:0","MAP_FALLARBOR_TOWN_MART:0,1/MAP_FALLARBOR_TOWN:0":"MAP_FALLARBOR_TOWN:0/MAP_FALLARBOR_TOWN_MART:0","MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE:0,1/MAP_FALLARBOR_TOWN:4":"MAP_FALLARBOR_TOWN:4/MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE:0","MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:0,1/MAP_FALLARBOR_TOWN:2":"MAP_FALLARBOR_TOWN:2/MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:0","MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:2/MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:0":"MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:0/MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:2","MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:0/MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:2":"MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:2/MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:0","MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_FARAWAY_ISLAND_ENTRANCE:0,1/MAP_FARAWAY_ISLAND_INTERIOR:0,1":"MAP_FARAWAY_ISLAND_INTERIOR:0,1/MAP_FARAWAY_ISLAND_ENTRANCE:0,1","MAP_FARAWAY_ISLAND_INTERIOR:0,1/MAP_FARAWAY_ISLAND_ENTRANCE:0,1":"MAP_FARAWAY_ISLAND_ENTRANCE:0,1/MAP_FARAWAY_ISLAND_INTERIOR:0,1","MAP_FIERY_PATH:0/MAP_ROUTE112:4":"MAP_ROUTE112:4/MAP_FIERY_PATH:0","MAP_FIERY_PATH:1/MAP_ROUTE112:5":"MAP_ROUTE112:5/MAP_FIERY_PATH:1","MAP_FORTREE_CITY:0/MAP_FORTREE_CITY_POKEMON_CENTER_1F:0":"MAP_FORTREE_CITY_POKEMON_CENTER_1F:0,1/MAP_FORTREE_CITY:0","MAP_FORTREE_CITY:1/MAP_FORTREE_CITY_HOUSE1:0":"MAP_FORTREE_CITY_HOUSE1:0,1/MAP_FORTREE_CITY:1","MAP_FORTREE_CITY:2/MAP_FORTREE_CITY_GYM:0":"MAP_FORTREE_CITY_GYM:0,1/MAP_FORTREE_CITY:2","MAP_FORTREE_CITY:3/MAP_FORTREE_CITY_MART:0":"MAP_FORTREE_CITY_MART:0,1/MAP_FORTREE_CITY:3","MAP_FORTREE_CITY:4/MAP_FORTREE_CITY_HOUSE2:0":"MAP_FORTREE_CITY_HOUSE2:0,1/MAP_FORTREE_CITY:4","MAP_FORTREE_CITY:5/MAP_FORTREE_CITY_HOUSE3:0":"MAP_FORTREE_CITY_HOUSE3:0,1/MAP_FORTREE_CITY:5","MAP_FORTREE_CITY:6/MAP_FORTREE_CITY_HOUSE4:0":"MAP_FORTREE_CITY_HOUSE4:0,1/MAP_FORTREE_CITY:6","MAP_FORTREE_CITY:7/MAP_FORTREE_CITY_HOUSE5:0":"MAP_FORTREE_CITY_HOUSE5:0,1/MAP_FORTREE_CITY:7","MAP_FORTREE_CITY:8/MAP_FORTREE_CITY_DECORATION_SHOP:0":"MAP_FORTREE_CITY_DECORATION_SHOP:0,1/MAP_FORTREE_CITY:8","MAP_FORTREE_CITY_DECORATION_SHOP:0,1/MAP_FORTREE_CITY:8":"MAP_FORTREE_CITY:8/MAP_FORTREE_CITY_DECORATION_SHOP:0","MAP_FORTREE_CITY_GYM:0,1/MAP_FORTREE_CITY:2":"MAP_FORTREE_CITY:2/MAP_FORTREE_CITY_GYM:0","MAP_FORTREE_CITY_HOUSE1:0,1/MAP_FORTREE_CITY:1":"MAP_FORTREE_CITY:1/MAP_FORTREE_CITY_HOUSE1:0","MAP_FORTREE_CITY_HOUSE2:0,1/MAP_FORTREE_CITY:4":"MAP_FORTREE_CITY:4/MAP_FORTREE_CITY_HOUSE2:0","MAP_FORTREE_CITY_HOUSE3:0,1/MAP_FORTREE_CITY:5":"MAP_FORTREE_CITY:5/MAP_FORTREE_CITY_HOUSE3:0","MAP_FORTREE_CITY_HOUSE4:0,1/MAP_FORTREE_CITY:6":"MAP_FORTREE_CITY:6/MAP_FORTREE_CITY_HOUSE4:0","MAP_FORTREE_CITY_HOUSE5:0,1/MAP_FORTREE_CITY:7":"MAP_FORTREE_CITY:7/MAP_FORTREE_CITY_HOUSE5:0","MAP_FORTREE_CITY_MART:0,1/MAP_FORTREE_CITY:3":"MAP_FORTREE_CITY:3/MAP_FORTREE_CITY_MART:0","MAP_FORTREE_CITY_POKEMON_CENTER_1F:0,1/MAP_FORTREE_CITY:0":"MAP_FORTREE_CITY:0/MAP_FORTREE_CITY_POKEMON_CENTER_1F:0","MAP_FORTREE_CITY_POKEMON_CENTER_1F:2/MAP_FORTREE_CITY_POKEMON_CENTER_2F:0":"MAP_FORTREE_CITY_POKEMON_CENTER_2F:0/MAP_FORTREE_CITY_POKEMON_CENTER_1F:2","MAP_FORTREE_CITY_POKEMON_CENTER_2F:0/MAP_FORTREE_CITY_POKEMON_CENTER_1F:2":"MAP_FORTREE_CITY_POKEMON_CENTER_1F:2/MAP_FORTREE_CITY_POKEMON_CENTER_2F:0","MAP_FORTREE_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_FORTREE_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_GRANITE_CAVE_1F:0/MAP_ROUTE106:0":"MAP_ROUTE106:0/MAP_GRANITE_CAVE_1F:0","MAP_GRANITE_CAVE_1F:1/MAP_GRANITE_CAVE_B1F:0":"MAP_GRANITE_CAVE_B1F:0/MAP_GRANITE_CAVE_1F:1","MAP_GRANITE_CAVE_1F:2/MAP_GRANITE_CAVE_B1F:1":"MAP_GRANITE_CAVE_B1F:1/MAP_GRANITE_CAVE_1F:2","MAP_GRANITE_CAVE_1F:3/MAP_GRANITE_CAVE_STEVENS_ROOM:0":"MAP_GRANITE_CAVE_STEVENS_ROOM:0/MAP_GRANITE_CAVE_1F:3","MAP_GRANITE_CAVE_B1F:0/MAP_GRANITE_CAVE_1F:1":"MAP_GRANITE_CAVE_1F:1/MAP_GRANITE_CAVE_B1F:0","MAP_GRANITE_CAVE_B1F:1/MAP_GRANITE_CAVE_1F:2":"MAP_GRANITE_CAVE_1F:2/MAP_GRANITE_CAVE_B1F:1","MAP_GRANITE_CAVE_B1F:2/MAP_GRANITE_CAVE_B2F:0":"MAP_GRANITE_CAVE_B2F:0/MAP_GRANITE_CAVE_B1F:2","MAP_GRANITE_CAVE_B1F:3/MAP_GRANITE_CAVE_B2F:1":"MAP_GRANITE_CAVE_B2F:1/MAP_GRANITE_CAVE_B1F:3","MAP_GRANITE_CAVE_B1F:4/MAP_GRANITE_CAVE_B2F:2":"MAP_GRANITE_CAVE_B2F:2/MAP_GRANITE_CAVE_B1F:4","MAP_GRANITE_CAVE_B1F:5/MAP_GRANITE_CAVE_B2F:3":"MAP_GRANITE_CAVE_B2F:3/MAP_GRANITE_CAVE_B1F:5","MAP_GRANITE_CAVE_B1F:6/MAP_GRANITE_CAVE_B2F:4":"MAP_GRANITE_CAVE_B2F:4/MAP_GRANITE_CAVE_B1F:6","MAP_GRANITE_CAVE_B2F:0/MAP_GRANITE_CAVE_B1F:2":"MAP_GRANITE_CAVE_B1F:2/MAP_GRANITE_CAVE_B2F:0","MAP_GRANITE_CAVE_B2F:1/MAP_GRANITE_CAVE_B1F:3":"MAP_GRANITE_CAVE_B1F:3/MAP_GRANITE_CAVE_B2F:1","MAP_GRANITE_CAVE_B2F:2/MAP_GRANITE_CAVE_B1F:4":"MAP_GRANITE_CAVE_B1F:4/MAP_GRANITE_CAVE_B2F:2","MAP_GRANITE_CAVE_B2F:3/MAP_GRANITE_CAVE_B1F:5":"MAP_GRANITE_CAVE_B1F:5/MAP_GRANITE_CAVE_B2F:3","MAP_GRANITE_CAVE_B2F:4/MAP_GRANITE_CAVE_B1F:6":"MAP_GRANITE_CAVE_B1F:6/MAP_GRANITE_CAVE_B2F:4","MAP_GRANITE_CAVE_STEVENS_ROOM:0/MAP_GRANITE_CAVE_1F:3":"MAP_GRANITE_CAVE_1F:3/MAP_GRANITE_CAVE_STEVENS_ROOM:0","MAP_INSIDE_OF_TRUCK:0,1,2/MAP_DYNAMIC:-1!":"","MAP_ISLAND_CAVE:0/MAP_ROUTE105:0":"MAP_ROUTE105:0/MAP_ISLAND_CAVE:0","MAP_ISLAND_CAVE:1/MAP_ISLAND_CAVE:2":"MAP_ISLAND_CAVE:2/MAP_ISLAND_CAVE:1","MAP_ISLAND_CAVE:2/MAP_ISLAND_CAVE:1":"MAP_ISLAND_CAVE:1/MAP_ISLAND_CAVE:2","MAP_JAGGED_PASS:0,1/MAP_ROUTE112:2,3":"MAP_ROUTE112:2,3/MAP_JAGGED_PASS:0,1","MAP_JAGGED_PASS:2,3/MAP_MT_CHIMNEY:2,3":"MAP_MT_CHIMNEY:2,3/MAP_JAGGED_PASS:2,3","MAP_JAGGED_PASS:4/MAP_MAGMA_HIDEOUT_1F:0":"MAP_MAGMA_HIDEOUT_1F:0/MAP_JAGGED_PASS:4","MAP_LAVARIDGE_TOWN:0/MAP_LAVARIDGE_TOWN_HERB_SHOP:0":"MAP_LAVARIDGE_TOWN_HERB_SHOP:0,1/MAP_LAVARIDGE_TOWN:0","MAP_LAVARIDGE_TOWN:1/MAP_LAVARIDGE_TOWN_GYM_1F:0":"MAP_LAVARIDGE_TOWN_GYM_1F:0,1/MAP_LAVARIDGE_TOWN:1","MAP_LAVARIDGE_TOWN:2/MAP_LAVARIDGE_TOWN_MART:0":"MAP_LAVARIDGE_TOWN_MART:0,1/MAP_LAVARIDGE_TOWN:2","MAP_LAVARIDGE_TOWN:3/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:0":"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:0,1/MAP_LAVARIDGE_TOWN:3","MAP_LAVARIDGE_TOWN:4/MAP_LAVARIDGE_TOWN_HOUSE:0":"MAP_LAVARIDGE_TOWN_HOUSE:0,1/MAP_LAVARIDGE_TOWN:4","MAP_LAVARIDGE_TOWN:5/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:3":"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:3/MAP_LAVARIDGE_TOWN:5","MAP_LAVARIDGE_TOWN_GYM_1F:0,1/MAP_LAVARIDGE_TOWN:1":"MAP_LAVARIDGE_TOWN:1/MAP_LAVARIDGE_TOWN_GYM_1F:0","MAP_LAVARIDGE_TOWN_GYM_1F:10/MAP_LAVARIDGE_TOWN_GYM_B1F:8":"MAP_LAVARIDGE_TOWN_GYM_B1F:8/MAP_LAVARIDGE_TOWN_GYM_1F:10","MAP_LAVARIDGE_TOWN_GYM_1F:11/MAP_LAVARIDGE_TOWN_GYM_B1F:9":"MAP_LAVARIDGE_TOWN_GYM_B1F:9/MAP_LAVARIDGE_TOWN_GYM_1F:11","MAP_LAVARIDGE_TOWN_GYM_1F:12/MAP_LAVARIDGE_TOWN_GYM_B1F:10":"MAP_LAVARIDGE_TOWN_GYM_B1F:10/MAP_LAVARIDGE_TOWN_GYM_1F:12","MAP_LAVARIDGE_TOWN_GYM_1F:13/MAP_LAVARIDGE_TOWN_GYM_B1F:11":"MAP_LAVARIDGE_TOWN_GYM_B1F:11/MAP_LAVARIDGE_TOWN_GYM_1F:13","MAP_LAVARIDGE_TOWN_GYM_1F:14/MAP_LAVARIDGE_TOWN_GYM_B1F:12":"MAP_LAVARIDGE_TOWN_GYM_B1F:12/MAP_LAVARIDGE_TOWN_GYM_1F:14","MAP_LAVARIDGE_TOWN_GYM_1F:15/MAP_LAVARIDGE_TOWN_GYM_B1F:13":"MAP_LAVARIDGE_TOWN_GYM_B1F:13/MAP_LAVARIDGE_TOWN_GYM_1F:15","MAP_LAVARIDGE_TOWN_GYM_1F:16/MAP_LAVARIDGE_TOWN_GYM_B1F:14":"MAP_LAVARIDGE_TOWN_GYM_B1F:14/MAP_LAVARIDGE_TOWN_GYM_1F:16","MAP_LAVARIDGE_TOWN_GYM_1F:17/MAP_LAVARIDGE_TOWN_GYM_B1F:15":"MAP_LAVARIDGE_TOWN_GYM_B1F:15/MAP_LAVARIDGE_TOWN_GYM_1F:17","MAP_LAVARIDGE_TOWN_GYM_1F:18/MAP_LAVARIDGE_TOWN_GYM_B1F:16":"MAP_LAVARIDGE_TOWN_GYM_B1F:16/MAP_LAVARIDGE_TOWN_GYM_1F:18","MAP_LAVARIDGE_TOWN_GYM_1F:19/MAP_LAVARIDGE_TOWN_GYM_B1F:17":"MAP_LAVARIDGE_TOWN_GYM_B1F:17/MAP_LAVARIDGE_TOWN_GYM_1F:19","MAP_LAVARIDGE_TOWN_GYM_1F:2/MAP_LAVARIDGE_TOWN_GYM_B1F:0":"MAP_LAVARIDGE_TOWN_GYM_B1F:0/MAP_LAVARIDGE_TOWN_GYM_1F:2","MAP_LAVARIDGE_TOWN_GYM_1F:20/MAP_LAVARIDGE_TOWN_GYM_B1F:18":"MAP_LAVARIDGE_TOWN_GYM_B1F:18/MAP_LAVARIDGE_TOWN_GYM_1F:20","MAP_LAVARIDGE_TOWN_GYM_1F:21/MAP_LAVARIDGE_TOWN_GYM_B1F:20":"MAP_LAVARIDGE_TOWN_GYM_B1F:20/MAP_LAVARIDGE_TOWN_GYM_1F:21","MAP_LAVARIDGE_TOWN_GYM_1F:22/MAP_LAVARIDGE_TOWN_GYM_B1F:19":"MAP_LAVARIDGE_TOWN_GYM_B1F:19/MAP_LAVARIDGE_TOWN_GYM_1F:22","MAP_LAVARIDGE_TOWN_GYM_1F:23/MAP_LAVARIDGE_TOWN_GYM_B1F:21":"MAP_LAVARIDGE_TOWN_GYM_B1F:21/MAP_LAVARIDGE_TOWN_GYM_1F:23","MAP_LAVARIDGE_TOWN_GYM_1F:24/MAP_LAVARIDGE_TOWN_GYM_B1F:22":"MAP_LAVARIDGE_TOWN_GYM_B1F:22/MAP_LAVARIDGE_TOWN_GYM_1F:24","MAP_LAVARIDGE_TOWN_GYM_1F:25/MAP_LAVARIDGE_TOWN_GYM_B1F:23":"MAP_LAVARIDGE_TOWN_GYM_B1F:23/MAP_LAVARIDGE_TOWN_GYM_1F:25","MAP_LAVARIDGE_TOWN_GYM_1F:3/MAP_LAVARIDGE_TOWN_GYM_B1F:2":"MAP_LAVARIDGE_TOWN_GYM_B1F:2/MAP_LAVARIDGE_TOWN_GYM_1F:3","MAP_LAVARIDGE_TOWN_GYM_1F:4/MAP_LAVARIDGE_TOWN_GYM_B1F:4":"MAP_LAVARIDGE_TOWN_GYM_B1F:4/MAP_LAVARIDGE_TOWN_GYM_1F:4","MAP_LAVARIDGE_TOWN_GYM_1F:5/MAP_LAVARIDGE_TOWN_GYM_B1F:3":"MAP_LAVARIDGE_TOWN_GYM_B1F:3/MAP_LAVARIDGE_TOWN_GYM_1F:5","MAP_LAVARIDGE_TOWN_GYM_1F:6/MAP_LAVARIDGE_TOWN_GYM_B1F:1":"MAP_LAVARIDGE_TOWN_GYM_B1F:1/MAP_LAVARIDGE_TOWN_GYM_1F:6","MAP_LAVARIDGE_TOWN_GYM_1F:7/MAP_LAVARIDGE_TOWN_GYM_B1F:5":"MAP_LAVARIDGE_TOWN_GYM_B1F:5/MAP_LAVARIDGE_TOWN_GYM_1F:7","MAP_LAVARIDGE_TOWN_GYM_1F:8/MAP_LAVARIDGE_TOWN_GYM_B1F:6":"MAP_LAVARIDGE_TOWN_GYM_B1F:6/MAP_LAVARIDGE_TOWN_GYM_1F:8","MAP_LAVARIDGE_TOWN_GYM_1F:9/MAP_LAVARIDGE_TOWN_GYM_B1F:7":"MAP_LAVARIDGE_TOWN_GYM_B1F:7/MAP_LAVARIDGE_TOWN_GYM_1F:9","MAP_LAVARIDGE_TOWN_GYM_B1F:0/MAP_LAVARIDGE_TOWN_GYM_1F:2":"MAP_LAVARIDGE_TOWN_GYM_1F:2/MAP_LAVARIDGE_TOWN_GYM_B1F:0","MAP_LAVARIDGE_TOWN_GYM_B1F:1/MAP_LAVARIDGE_TOWN_GYM_1F:6":"MAP_LAVARIDGE_TOWN_GYM_1F:6/MAP_LAVARIDGE_TOWN_GYM_B1F:1","MAP_LAVARIDGE_TOWN_GYM_B1F:10/MAP_LAVARIDGE_TOWN_GYM_1F:12":"MAP_LAVARIDGE_TOWN_GYM_1F:12/MAP_LAVARIDGE_TOWN_GYM_B1F:10","MAP_LAVARIDGE_TOWN_GYM_B1F:11/MAP_LAVARIDGE_TOWN_GYM_1F:13":"MAP_LAVARIDGE_TOWN_GYM_1F:13/MAP_LAVARIDGE_TOWN_GYM_B1F:11","MAP_LAVARIDGE_TOWN_GYM_B1F:12/MAP_LAVARIDGE_TOWN_GYM_1F:14":"MAP_LAVARIDGE_TOWN_GYM_1F:14/MAP_LAVARIDGE_TOWN_GYM_B1F:12","MAP_LAVARIDGE_TOWN_GYM_B1F:13/MAP_LAVARIDGE_TOWN_GYM_1F:15":"MAP_LAVARIDGE_TOWN_GYM_1F:15/MAP_LAVARIDGE_TOWN_GYM_B1F:13","MAP_LAVARIDGE_TOWN_GYM_B1F:14/MAP_LAVARIDGE_TOWN_GYM_1F:16":"MAP_LAVARIDGE_TOWN_GYM_1F:16/MAP_LAVARIDGE_TOWN_GYM_B1F:14","MAP_LAVARIDGE_TOWN_GYM_B1F:15/MAP_LAVARIDGE_TOWN_GYM_1F:17":"MAP_LAVARIDGE_TOWN_GYM_1F:17/MAP_LAVARIDGE_TOWN_GYM_B1F:15","MAP_LAVARIDGE_TOWN_GYM_B1F:16/MAP_LAVARIDGE_TOWN_GYM_1F:18":"MAP_LAVARIDGE_TOWN_GYM_1F:18/MAP_LAVARIDGE_TOWN_GYM_B1F:16","MAP_LAVARIDGE_TOWN_GYM_B1F:17/MAP_LAVARIDGE_TOWN_GYM_1F:19":"MAP_LAVARIDGE_TOWN_GYM_1F:19/MAP_LAVARIDGE_TOWN_GYM_B1F:17","MAP_LAVARIDGE_TOWN_GYM_B1F:18/MAP_LAVARIDGE_TOWN_GYM_1F:20":"MAP_LAVARIDGE_TOWN_GYM_1F:20/MAP_LAVARIDGE_TOWN_GYM_B1F:18","MAP_LAVARIDGE_TOWN_GYM_B1F:19/MAP_LAVARIDGE_TOWN_GYM_1F:22":"MAP_LAVARIDGE_TOWN_GYM_1F:22/MAP_LAVARIDGE_TOWN_GYM_B1F:19","MAP_LAVARIDGE_TOWN_GYM_B1F:2/MAP_LAVARIDGE_TOWN_GYM_1F:3":"MAP_LAVARIDGE_TOWN_GYM_1F:3/MAP_LAVARIDGE_TOWN_GYM_B1F:2","MAP_LAVARIDGE_TOWN_GYM_B1F:20/MAP_LAVARIDGE_TOWN_GYM_1F:21":"MAP_LAVARIDGE_TOWN_GYM_1F:21/MAP_LAVARIDGE_TOWN_GYM_B1F:20","MAP_LAVARIDGE_TOWN_GYM_B1F:21/MAP_LAVARIDGE_TOWN_GYM_1F:23":"MAP_LAVARIDGE_TOWN_GYM_1F:23/MAP_LAVARIDGE_TOWN_GYM_B1F:21","MAP_LAVARIDGE_TOWN_GYM_B1F:22/MAP_LAVARIDGE_TOWN_GYM_1F:24":"MAP_LAVARIDGE_TOWN_GYM_1F:24/MAP_LAVARIDGE_TOWN_GYM_B1F:22","MAP_LAVARIDGE_TOWN_GYM_B1F:23/MAP_LAVARIDGE_TOWN_GYM_1F:25":"MAP_LAVARIDGE_TOWN_GYM_1F:25/MAP_LAVARIDGE_TOWN_GYM_B1F:23","MAP_LAVARIDGE_TOWN_GYM_B1F:3/MAP_LAVARIDGE_TOWN_GYM_1F:5":"MAP_LAVARIDGE_TOWN_GYM_1F:5/MAP_LAVARIDGE_TOWN_GYM_B1F:3","MAP_LAVARIDGE_TOWN_GYM_B1F:4/MAP_LAVARIDGE_TOWN_GYM_1F:4":"MAP_LAVARIDGE_TOWN_GYM_1F:4/MAP_LAVARIDGE_TOWN_GYM_B1F:4","MAP_LAVARIDGE_TOWN_GYM_B1F:5/MAP_LAVARIDGE_TOWN_GYM_1F:7":"MAP_LAVARIDGE_TOWN_GYM_1F:7/MAP_LAVARIDGE_TOWN_GYM_B1F:5","MAP_LAVARIDGE_TOWN_GYM_B1F:6/MAP_LAVARIDGE_TOWN_GYM_1F:8":"MAP_LAVARIDGE_TOWN_GYM_1F:8/MAP_LAVARIDGE_TOWN_GYM_B1F:6","MAP_LAVARIDGE_TOWN_GYM_B1F:7/MAP_LAVARIDGE_TOWN_GYM_1F:9":"MAP_LAVARIDGE_TOWN_GYM_1F:9/MAP_LAVARIDGE_TOWN_GYM_B1F:7","MAP_LAVARIDGE_TOWN_GYM_B1F:8/MAP_LAVARIDGE_TOWN_GYM_1F:10":"MAP_LAVARIDGE_TOWN_GYM_1F:10/MAP_LAVARIDGE_TOWN_GYM_B1F:8","MAP_LAVARIDGE_TOWN_GYM_B1F:9/MAP_LAVARIDGE_TOWN_GYM_1F:11":"MAP_LAVARIDGE_TOWN_GYM_1F:11/MAP_LAVARIDGE_TOWN_GYM_B1F:9","MAP_LAVARIDGE_TOWN_HERB_SHOP:0,1/MAP_LAVARIDGE_TOWN:0":"MAP_LAVARIDGE_TOWN:0/MAP_LAVARIDGE_TOWN_HERB_SHOP:0","MAP_LAVARIDGE_TOWN_HOUSE:0,1/MAP_LAVARIDGE_TOWN:4":"MAP_LAVARIDGE_TOWN:4/MAP_LAVARIDGE_TOWN_HOUSE:0","MAP_LAVARIDGE_TOWN_MART:0,1/MAP_LAVARIDGE_TOWN:2":"MAP_LAVARIDGE_TOWN:2/MAP_LAVARIDGE_TOWN_MART:0","MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:0,1/MAP_LAVARIDGE_TOWN:3":"MAP_LAVARIDGE_TOWN:3/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:0","MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:2/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:0":"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:0/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:2","MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:3/MAP_LAVARIDGE_TOWN:5":"MAP_LAVARIDGE_TOWN:5/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:3","MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:0/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:2":"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:2/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:0","MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_LILYCOVE_CITY:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:0":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:0,1/MAP_LILYCOVE_CITY:0","MAP_LILYCOVE_CITY:1/MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:0":"MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:0,1/MAP_LILYCOVE_CITY:1","MAP_LILYCOVE_CITY:10/MAP_LILYCOVE_CITY_HOUSE3:0":"MAP_LILYCOVE_CITY_HOUSE3:0,1/MAP_LILYCOVE_CITY:10","MAP_LILYCOVE_CITY:11/MAP_LILYCOVE_CITY_HOUSE4:0":"MAP_LILYCOVE_CITY_HOUSE4:0,1/MAP_LILYCOVE_CITY:11","MAP_LILYCOVE_CITY:12/MAP_LILYCOVE_CITY_HARBOR:0":"MAP_LILYCOVE_CITY_HARBOR:0,1/MAP_LILYCOVE_CITY:12","MAP_LILYCOVE_CITY:2/MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:0":"MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:0,1/MAP_LILYCOVE_CITY:2","MAP_LILYCOVE_CITY:3,13/MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:0,1":"MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:0,1/MAP_LILYCOVE_CITY:3,13","MAP_LILYCOVE_CITY:4/MAP_LILYCOVE_CITY_CONTEST_LOBBY:0":"MAP_LILYCOVE_CITY_CONTEST_LOBBY:0,1/MAP_LILYCOVE_CITY:4","MAP_LILYCOVE_CITY:5/MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB:1":"MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB:0,1/MAP_LILYCOVE_CITY:5","MAP_LILYCOVE_CITY:6/MAP_AQUA_HIDEOUT_1F:0":"MAP_AQUA_HIDEOUT_1F:0,1/MAP_LILYCOVE_CITY:6","MAP_LILYCOVE_CITY:7/MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE:0":"MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE:0,1/MAP_LILYCOVE_CITY:7","MAP_LILYCOVE_CITY:8/MAP_LILYCOVE_CITY_HOUSE1:0":"MAP_LILYCOVE_CITY_HOUSE1:0,1/MAP_LILYCOVE_CITY:8","MAP_LILYCOVE_CITY:9/MAP_LILYCOVE_CITY_HOUSE2:0":"MAP_LILYCOVE_CITY_HOUSE2:0,1/MAP_LILYCOVE_CITY:9","MAP_LILYCOVE_CITY_CONTEST_HALL:0,2/MAP_LILYCOVE_CITY_CONTEST_LOBBY:2":"MAP_LILYCOVE_CITY_CONTEST_LOBBY:2/MAP_LILYCOVE_CITY_CONTEST_HALL:0","MAP_LILYCOVE_CITY_CONTEST_HALL:1,3/MAP_LILYCOVE_CITY_CONTEST_LOBBY:3":"MAP_LILYCOVE_CITY_CONTEST_LOBBY:3/MAP_LILYCOVE_CITY_CONTEST_HALL:1","MAP_LILYCOVE_CITY_CONTEST_LOBBY:0,1/MAP_LILYCOVE_CITY:4":"MAP_LILYCOVE_CITY:4/MAP_LILYCOVE_CITY_CONTEST_LOBBY:0","MAP_LILYCOVE_CITY_CONTEST_LOBBY:2/MAP_LILYCOVE_CITY_CONTEST_HALL:0":"MAP_LILYCOVE_CITY_CONTEST_HALL:0,2/MAP_LILYCOVE_CITY_CONTEST_LOBBY:2","MAP_LILYCOVE_CITY_CONTEST_LOBBY:3/MAP_LILYCOVE_CITY_CONTEST_HALL:1":"MAP_LILYCOVE_CITY_CONTEST_HALL:1,3/MAP_LILYCOVE_CITY_CONTEST_LOBBY:3","MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:0,1/MAP_LILYCOVE_CITY:1":"MAP_LILYCOVE_CITY:1/MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:0","MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:2/MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F:0":"MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F:0/MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:2","MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F:0/MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:2":"MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:2/MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F:0","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:0,1/MAP_LILYCOVE_CITY:0":"MAP_LILYCOVE_CITY:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:0","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:0":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:2","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:3/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0,1/MAP_DYNAMIC:-1!","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:2":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:0","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:0":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:1","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0,1/MAP_DYNAMIC:-1!","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:1":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:0","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:0":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:1","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0,1/MAP_DYNAMIC:-1!","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:1":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:0","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:0":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:1","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0,1/MAP_DYNAMIC:-1!","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:1":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:0","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0,1/MAP_DYNAMIC:-1!","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP:0":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:2","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0,1/MAP_DYNAMIC:-1!":"","MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:2":"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP:0","MAP_LILYCOVE_CITY_HARBOR:0,1/MAP_LILYCOVE_CITY:12":"MAP_LILYCOVE_CITY:12/MAP_LILYCOVE_CITY_HARBOR:0","MAP_LILYCOVE_CITY_HOUSE1:0,1/MAP_LILYCOVE_CITY:8":"MAP_LILYCOVE_CITY:8/MAP_LILYCOVE_CITY_HOUSE1:0","MAP_LILYCOVE_CITY_HOUSE2:0,1/MAP_LILYCOVE_CITY:9":"MAP_LILYCOVE_CITY:9/MAP_LILYCOVE_CITY_HOUSE2:0","MAP_LILYCOVE_CITY_HOUSE3:0,1/MAP_LILYCOVE_CITY:10":"MAP_LILYCOVE_CITY:10/MAP_LILYCOVE_CITY_HOUSE3:0","MAP_LILYCOVE_CITY_HOUSE4:0,1/MAP_LILYCOVE_CITY:11":"MAP_LILYCOVE_CITY:11/MAP_LILYCOVE_CITY_HOUSE4:0","MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:0,1/MAP_LILYCOVE_CITY:3,13":"MAP_LILYCOVE_CITY:3,13/MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:0,1","MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:2/MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F:0":"MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F:0/MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:2","MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F:0/MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:2":"MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:2/MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F:0","MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE:0,1/MAP_LILYCOVE_CITY:7":"MAP_LILYCOVE_CITY:7/MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE:0","MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:0,1/MAP_LILYCOVE_CITY:2":"MAP_LILYCOVE_CITY:2/MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:0","MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:2/MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:0":"MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:0/MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:2","MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:0/MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:2":"MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:2/MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:0","MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB:0,1/MAP_LILYCOVE_CITY:5":"MAP_LILYCOVE_CITY:5/MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB:1","MAP_LILYCOVE_CITY_UNUSED_MART:0,1/MAP_LILYCOVE_CITY:0!":"MAP_LILYCOVE_CITY:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:0","MAP_LITTLEROOT_TOWN:0/MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:1":"MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:0,1/MAP_LITTLEROOT_TOWN:0","MAP_LITTLEROOT_TOWN:1/MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:1":"MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:0,1/MAP_LITTLEROOT_TOWN:1","MAP_LITTLEROOT_TOWN:2/MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB:0":"MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB:0,1/MAP_LITTLEROOT_TOWN:2","MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:0,1/MAP_LITTLEROOT_TOWN:1":"MAP_LITTLEROOT_TOWN:1/MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:1","MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:2/MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F:0":"MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F:0/MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:2","MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F:0/MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:2":"MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:2/MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F:0","MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:0,1/MAP_LITTLEROOT_TOWN:0":"MAP_LITTLEROOT_TOWN:0/MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:1","MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:2/MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F:0":"MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F:0/MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:2","MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F:0/MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:2":"MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:2/MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F:0","MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB:0,1/MAP_LITTLEROOT_TOWN:2":"MAP_LITTLEROOT_TOWN:2/MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB:0","MAP_MAGMA_HIDEOUT_1F:0/MAP_JAGGED_PASS:4":"MAP_JAGGED_PASS:4/MAP_MAGMA_HIDEOUT_1F:0","MAP_MAGMA_HIDEOUT_1F:1/MAP_MAGMA_HIDEOUT_2F_1R:1":"MAP_MAGMA_HIDEOUT_2F_1R:1/MAP_MAGMA_HIDEOUT_1F:1","MAP_MAGMA_HIDEOUT_1F:2/MAP_MAGMA_HIDEOUT_2F_2R:1":"MAP_MAGMA_HIDEOUT_2F_2R:1/MAP_MAGMA_HIDEOUT_1F:2","MAP_MAGMA_HIDEOUT_1F:3/MAP_MAGMA_HIDEOUT_2F_3R:0":"MAP_MAGMA_HIDEOUT_2F_3R:0/MAP_MAGMA_HIDEOUT_1F:3","MAP_MAGMA_HIDEOUT_2F_1R:0/MAP_MAGMA_HIDEOUT_2F_2R:0":"MAP_MAGMA_HIDEOUT_2F_2R:0/MAP_MAGMA_HIDEOUT_2F_1R:0","MAP_MAGMA_HIDEOUT_2F_1R:1/MAP_MAGMA_HIDEOUT_1F:1":"MAP_MAGMA_HIDEOUT_1F:1/MAP_MAGMA_HIDEOUT_2F_1R:1","MAP_MAGMA_HIDEOUT_2F_1R:2/MAP_MAGMA_HIDEOUT_3F_1R:2":"MAP_MAGMA_HIDEOUT_3F_1R:2/MAP_MAGMA_HIDEOUT_2F_1R:2","MAP_MAGMA_HIDEOUT_2F_2R:0/MAP_MAGMA_HIDEOUT_2F_1R:0":"MAP_MAGMA_HIDEOUT_2F_1R:0/MAP_MAGMA_HIDEOUT_2F_2R:0","MAP_MAGMA_HIDEOUT_2F_2R:1/MAP_MAGMA_HIDEOUT_1F:2":"MAP_MAGMA_HIDEOUT_1F:2/MAP_MAGMA_HIDEOUT_2F_2R:1","MAP_MAGMA_HIDEOUT_2F_3R:0/MAP_MAGMA_HIDEOUT_1F:3":"MAP_MAGMA_HIDEOUT_1F:3/MAP_MAGMA_HIDEOUT_2F_3R:0","MAP_MAGMA_HIDEOUT_2F_3R:1/MAP_MAGMA_HIDEOUT_3F_3R:0":"MAP_MAGMA_HIDEOUT_3F_3R:0/MAP_MAGMA_HIDEOUT_2F_3R:1","MAP_MAGMA_HIDEOUT_3F_1R:0/MAP_MAGMA_HIDEOUT_4F:0":"MAP_MAGMA_HIDEOUT_4F:0/MAP_MAGMA_HIDEOUT_3F_1R:0","MAP_MAGMA_HIDEOUT_3F_1R:1/MAP_MAGMA_HIDEOUT_3F_2R:0":"MAP_MAGMA_HIDEOUT_3F_2R:0/MAP_MAGMA_HIDEOUT_3F_1R:1","MAP_MAGMA_HIDEOUT_3F_1R:2/MAP_MAGMA_HIDEOUT_2F_1R:2":"MAP_MAGMA_HIDEOUT_2F_1R:2/MAP_MAGMA_HIDEOUT_3F_1R:2","MAP_MAGMA_HIDEOUT_3F_2R:0/MAP_MAGMA_HIDEOUT_3F_1R:1":"MAP_MAGMA_HIDEOUT_3F_1R:1/MAP_MAGMA_HIDEOUT_3F_2R:0","MAP_MAGMA_HIDEOUT_3F_3R:0/MAP_MAGMA_HIDEOUT_2F_3R:1":"MAP_MAGMA_HIDEOUT_2F_3R:1/MAP_MAGMA_HIDEOUT_3F_3R:0","MAP_MAGMA_HIDEOUT_3F_3R:1/MAP_MAGMA_HIDEOUT_4F:1":"MAP_MAGMA_HIDEOUT_4F:1/MAP_MAGMA_HIDEOUT_3F_3R:1","MAP_MAGMA_HIDEOUT_4F:0/MAP_MAGMA_HIDEOUT_3F_1R:0":"MAP_MAGMA_HIDEOUT_3F_1R:0/MAP_MAGMA_HIDEOUT_4F:0","MAP_MAGMA_HIDEOUT_4F:1/MAP_MAGMA_HIDEOUT_3F_3R:1":"MAP_MAGMA_HIDEOUT_3F_3R:1/MAP_MAGMA_HIDEOUT_4F:1","MAP_MARINE_CAVE_END:0/MAP_MARINE_CAVE_ENTRANCE:0":"MAP_MARINE_CAVE_ENTRANCE:0/MAP_MARINE_CAVE_END:0","MAP_MARINE_CAVE_ENTRANCE:0/MAP_MARINE_CAVE_END:0":"MAP_MARINE_CAVE_END:0/MAP_MARINE_CAVE_ENTRANCE:0","MAP_MAUVILLE_CITY:0/MAP_MAUVILLE_CITY_GYM:0":"MAP_MAUVILLE_CITY_GYM:0,1/MAP_MAUVILLE_CITY:0","MAP_MAUVILLE_CITY:1/MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:0":"MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:0,1/MAP_MAUVILLE_CITY:1","MAP_MAUVILLE_CITY:2/MAP_MAUVILLE_CITY_BIKE_SHOP:0":"MAP_MAUVILLE_CITY_BIKE_SHOP:0,1/MAP_MAUVILLE_CITY:2","MAP_MAUVILLE_CITY:3/MAP_MAUVILLE_CITY_MART:0":"MAP_MAUVILLE_CITY_MART:0,1/MAP_MAUVILLE_CITY:3","MAP_MAUVILLE_CITY:4/MAP_MAUVILLE_CITY_HOUSE1:0":"MAP_MAUVILLE_CITY_HOUSE1:0,1/MAP_MAUVILLE_CITY:4","MAP_MAUVILLE_CITY:5/MAP_MAUVILLE_CITY_GAME_CORNER:0":"MAP_MAUVILLE_CITY_GAME_CORNER:0,1/MAP_MAUVILLE_CITY:5","MAP_MAUVILLE_CITY:6/MAP_MAUVILLE_CITY_HOUSE2:0":"MAP_MAUVILLE_CITY_HOUSE2:0,1/MAP_MAUVILLE_CITY:6","MAP_MAUVILLE_CITY_BIKE_SHOP:0,1/MAP_MAUVILLE_CITY:2":"MAP_MAUVILLE_CITY:2/MAP_MAUVILLE_CITY_BIKE_SHOP:0","MAP_MAUVILLE_CITY_GAME_CORNER:0,1/MAP_MAUVILLE_CITY:5":"MAP_MAUVILLE_CITY:5/MAP_MAUVILLE_CITY_GAME_CORNER:0","MAP_MAUVILLE_CITY_GYM:0,1/MAP_MAUVILLE_CITY:0":"MAP_MAUVILLE_CITY:0/MAP_MAUVILLE_CITY_GYM:0","MAP_MAUVILLE_CITY_HOUSE1:0,1/MAP_MAUVILLE_CITY:4":"MAP_MAUVILLE_CITY:4/MAP_MAUVILLE_CITY_HOUSE1:0","MAP_MAUVILLE_CITY_HOUSE2:0,1/MAP_MAUVILLE_CITY:6":"MAP_MAUVILLE_CITY:6/MAP_MAUVILLE_CITY_HOUSE2:0","MAP_MAUVILLE_CITY_MART:0,1/MAP_MAUVILLE_CITY:3":"MAP_MAUVILLE_CITY:3/MAP_MAUVILLE_CITY_MART:0","MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:0,1/MAP_MAUVILLE_CITY:1":"MAP_MAUVILLE_CITY:1/MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:0","MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:2/MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:0":"MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:0/MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:2","MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:0/MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:2":"MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:2/MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:0","MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_METEOR_FALLS_1F_1R:0/MAP_ROUTE114:0":"MAP_ROUTE114:0/MAP_METEOR_FALLS_1F_1R:0","MAP_METEOR_FALLS_1F_1R:1/MAP_ROUTE115:0":"MAP_ROUTE115:0/MAP_METEOR_FALLS_1F_1R:1","MAP_METEOR_FALLS_1F_1R:2/MAP_METEOR_FALLS_1F_2R:0":"MAP_METEOR_FALLS_1F_2R:0/MAP_METEOR_FALLS_1F_1R:2","MAP_METEOR_FALLS_1F_1R:3/MAP_METEOR_FALLS_B1F_1R:4":"MAP_METEOR_FALLS_B1F_1R:4/MAP_METEOR_FALLS_1F_1R:3","MAP_METEOR_FALLS_1F_1R:4/MAP_METEOR_FALLS_B1F_1R:5":"MAP_METEOR_FALLS_B1F_1R:5/MAP_METEOR_FALLS_1F_1R:4","MAP_METEOR_FALLS_1F_1R:5/MAP_METEOR_FALLS_STEVENS_CAVE:0":"MAP_METEOR_FALLS_STEVENS_CAVE:0/MAP_METEOR_FALLS_1F_1R:5","MAP_METEOR_FALLS_1F_2R:0/MAP_METEOR_FALLS_1F_1R:2":"MAP_METEOR_FALLS_1F_1R:2/MAP_METEOR_FALLS_1F_2R:0","MAP_METEOR_FALLS_1F_2R:1/MAP_METEOR_FALLS_B1F_1R:0":"MAP_METEOR_FALLS_B1F_1R:0/MAP_METEOR_FALLS_1F_2R:1","MAP_METEOR_FALLS_1F_2R:2/MAP_METEOR_FALLS_B1F_1R:1":"MAP_METEOR_FALLS_B1F_1R:1/MAP_METEOR_FALLS_1F_2R:2","MAP_METEOR_FALLS_1F_2R:3/MAP_METEOR_FALLS_B1F_1R:2":"MAP_METEOR_FALLS_B1F_1R:2/MAP_METEOR_FALLS_1F_2R:3","MAP_METEOR_FALLS_B1F_1R:0/MAP_METEOR_FALLS_1F_2R:1":"MAP_METEOR_FALLS_1F_2R:1/MAP_METEOR_FALLS_B1F_1R:0","MAP_METEOR_FALLS_B1F_1R:1/MAP_METEOR_FALLS_1F_2R:2":"MAP_METEOR_FALLS_1F_2R:2/MAP_METEOR_FALLS_B1F_1R:1","MAP_METEOR_FALLS_B1F_1R:2/MAP_METEOR_FALLS_1F_2R:3":"MAP_METEOR_FALLS_1F_2R:3/MAP_METEOR_FALLS_B1F_1R:2","MAP_METEOR_FALLS_B1F_1R:3/MAP_METEOR_FALLS_B1F_2R:0":"MAP_METEOR_FALLS_B1F_2R:0/MAP_METEOR_FALLS_B1F_1R:3","MAP_METEOR_FALLS_B1F_1R:4/MAP_METEOR_FALLS_1F_1R:3":"MAP_METEOR_FALLS_1F_1R:3/MAP_METEOR_FALLS_B1F_1R:4","MAP_METEOR_FALLS_B1F_1R:5/MAP_METEOR_FALLS_1F_1R:4":"MAP_METEOR_FALLS_1F_1R:4/MAP_METEOR_FALLS_B1F_1R:5","MAP_METEOR_FALLS_B1F_2R:0/MAP_METEOR_FALLS_B1F_1R:3":"MAP_METEOR_FALLS_B1F_1R:3/MAP_METEOR_FALLS_B1F_2R:0","MAP_METEOR_FALLS_STEVENS_CAVE:0/MAP_METEOR_FALLS_1F_1R:5":"MAP_METEOR_FALLS_1F_1R:5/MAP_METEOR_FALLS_STEVENS_CAVE:0","MAP_MIRAGE_TOWER_1F:0/MAP_ROUTE111:3":"MAP_ROUTE111:3/MAP_MIRAGE_TOWER_1F:0","MAP_MIRAGE_TOWER_1F:1/MAP_MIRAGE_TOWER_2F:1":"MAP_MIRAGE_TOWER_2F:1/MAP_MIRAGE_TOWER_1F:1","MAP_MIRAGE_TOWER_2F:0/MAP_MIRAGE_TOWER_3F:0":"MAP_MIRAGE_TOWER_3F:0/MAP_MIRAGE_TOWER_2F:0","MAP_MIRAGE_TOWER_2F:1/MAP_MIRAGE_TOWER_1F:1":"MAP_MIRAGE_TOWER_1F:1/MAP_MIRAGE_TOWER_2F:1","MAP_MIRAGE_TOWER_3F:0/MAP_MIRAGE_TOWER_2F:0":"MAP_MIRAGE_TOWER_2F:0/MAP_MIRAGE_TOWER_3F:0","MAP_MIRAGE_TOWER_3F:1/MAP_MIRAGE_TOWER_4F:0":"MAP_MIRAGE_TOWER_4F:0/MAP_MIRAGE_TOWER_3F:1","MAP_MIRAGE_TOWER_4F:0/MAP_MIRAGE_TOWER_3F:1":"MAP_MIRAGE_TOWER_3F:1/MAP_MIRAGE_TOWER_4F:0","MAP_MOSSDEEP_CITY:0/MAP_MOSSDEEP_CITY_HOUSE1:0":"MAP_MOSSDEEP_CITY_HOUSE1:0,1/MAP_MOSSDEEP_CITY:0","MAP_MOSSDEEP_CITY:1/MAP_MOSSDEEP_CITY_GYM:0":"MAP_MOSSDEEP_CITY_GYM:0,1/MAP_MOSSDEEP_CITY:1","MAP_MOSSDEEP_CITY:2/MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:0":"MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:0,1/MAP_MOSSDEEP_CITY:2","MAP_MOSSDEEP_CITY:3/MAP_MOSSDEEP_CITY_HOUSE2:0":"MAP_MOSSDEEP_CITY_HOUSE2:0,1/MAP_MOSSDEEP_CITY:3","MAP_MOSSDEEP_CITY:4/MAP_MOSSDEEP_CITY_MART:0":"MAP_MOSSDEEP_CITY_MART:0,1/MAP_MOSSDEEP_CITY:4","MAP_MOSSDEEP_CITY:5/MAP_MOSSDEEP_CITY_HOUSE3:0":"MAP_MOSSDEEP_CITY_HOUSE3:0,1/MAP_MOSSDEEP_CITY:5","MAP_MOSSDEEP_CITY:6/MAP_MOSSDEEP_CITY_STEVENS_HOUSE:0":"MAP_MOSSDEEP_CITY_STEVENS_HOUSE:0,1/MAP_MOSSDEEP_CITY:6","MAP_MOSSDEEP_CITY:7/MAP_MOSSDEEP_CITY_HOUSE4:1":"MAP_MOSSDEEP_CITY_HOUSE4:0,1/MAP_MOSSDEEP_CITY:7","MAP_MOSSDEEP_CITY:8/MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:0":"MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:0,1/MAP_MOSSDEEP_CITY:8","MAP_MOSSDEEP_CITY:9/MAP_MOSSDEEP_CITY_GAME_CORNER_1F:0":"MAP_MOSSDEEP_CITY_GAME_CORNER_1F:0,1/MAP_MOSSDEEP_CITY:9","MAP_MOSSDEEP_CITY_GAME_CORNER_1F:0,1/MAP_MOSSDEEP_CITY:9":"MAP_MOSSDEEP_CITY:9/MAP_MOSSDEEP_CITY_GAME_CORNER_1F:0","MAP_MOSSDEEP_CITY_GAME_CORNER_1F:2/MAP_MOSSDEEP_CITY_GAME_CORNER_B1F:0":"MAP_MOSSDEEP_CITY_GAME_CORNER_B1F:0/MAP_MOSSDEEP_CITY_GAME_CORNER_1F:2","MAP_MOSSDEEP_CITY_GAME_CORNER_B1F:0/MAP_MOSSDEEP_CITY_GAME_CORNER_1F:2":"MAP_MOSSDEEP_CITY_GAME_CORNER_1F:2/MAP_MOSSDEEP_CITY_GAME_CORNER_B1F:0","MAP_MOSSDEEP_CITY_GYM:0,1/MAP_MOSSDEEP_CITY:1":"MAP_MOSSDEEP_CITY:1/MAP_MOSSDEEP_CITY_GYM:0","MAP_MOSSDEEP_CITY_GYM:10/MAP_MOSSDEEP_CITY_GYM:11":"MAP_MOSSDEEP_CITY_GYM:11/MAP_MOSSDEEP_CITY_GYM:10","MAP_MOSSDEEP_CITY_GYM:11/MAP_MOSSDEEP_CITY_GYM:10":"MAP_MOSSDEEP_CITY_GYM:10/MAP_MOSSDEEP_CITY_GYM:11","MAP_MOSSDEEP_CITY_GYM:12/MAP_MOSSDEEP_CITY_GYM:13":"MAP_MOSSDEEP_CITY_GYM:13/MAP_MOSSDEEP_CITY_GYM:12","MAP_MOSSDEEP_CITY_GYM:13/MAP_MOSSDEEP_CITY_GYM:12":"MAP_MOSSDEEP_CITY_GYM:12/MAP_MOSSDEEP_CITY_GYM:13","MAP_MOSSDEEP_CITY_GYM:2/MAP_MOSSDEEP_CITY_GYM:3":"MAP_MOSSDEEP_CITY_GYM:3/MAP_MOSSDEEP_CITY_GYM:2","MAP_MOSSDEEP_CITY_GYM:3/MAP_MOSSDEEP_CITY_GYM:2":"MAP_MOSSDEEP_CITY_GYM:2/MAP_MOSSDEEP_CITY_GYM:3","MAP_MOSSDEEP_CITY_GYM:4/MAP_MOSSDEEP_CITY_GYM:5":"MAP_MOSSDEEP_CITY_GYM:5/MAP_MOSSDEEP_CITY_GYM:4","MAP_MOSSDEEP_CITY_GYM:5/MAP_MOSSDEEP_CITY_GYM:4":"MAP_MOSSDEEP_CITY_GYM:4/MAP_MOSSDEEP_CITY_GYM:5","MAP_MOSSDEEP_CITY_GYM:6/MAP_MOSSDEEP_CITY_GYM:7":"MAP_MOSSDEEP_CITY_GYM:7/MAP_MOSSDEEP_CITY_GYM:6","MAP_MOSSDEEP_CITY_GYM:7/MAP_MOSSDEEP_CITY_GYM:6":"MAP_MOSSDEEP_CITY_GYM:6/MAP_MOSSDEEP_CITY_GYM:7","MAP_MOSSDEEP_CITY_GYM:8/MAP_MOSSDEEP_CITY_GYM:9":"MAP_MOSSDEEP_CITY_GYM:9/MAP_MOSSDEEP_CITY_GYM:8","MAP_MOSSDEEP_CITY_GYM:9/MAP_MOSSDEEP_CITY_GYM:8":"MAP_MOSSDEEP_CITY_GYM:8/MAP_MOSSDEEP_CITY_GYM:9","MAP_MOSSDEEP_CITY_HOUSE1:0,1/MAP_MOSSDEEP_CITY:0":"MAP_MOSSDEEP_CITY:0/MAP_MOSSDEEP_CITY_HOUSE1:0","MAP_MOSSDEEP_CITY_HOUSE2:0,1/MAP_MOSSDEEP_CITY:3":"MAP_MOSSDEEP_CITY:3/MAP_MOSSDEEP_CITY_HOUSE2:0","MAP_MOSSDEEP_CITY_HOUSE3:0,1/MAP_MOSSDEEP_CITY:5":"MAP_MOSSDEEP_CITY:5/MAP_MOSSDEEP_CITY_HOUSE3:0","MAP_MOSSDEEP_CITY_HOUSE4:0,1/MAP_MOSSDEEP_CITY:7":"MAP_MOSSDEEP_CITY:7/MAP_MOSSDEEP_CITY_HOUSE4:1","MAP_MOSSDEEP_CITY_MART:0,1/MAP_MOSSDEEP_CITY:4":"MAP_MOSSDEEP_CITY:4/MAP_MOSSDEEP_CITY_MART:0","MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:0,1/MAP_MOSSDEEP_CITY:2":"MAP_MOSSDEEP_CITY:2/MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:0","MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:2/MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:0":"MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:0/MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:2","MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:0/MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:2":"MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:2/MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:0","MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:0,1/MAP_MOSSDEEP_CITY:8":"MAP_MOSSDEEP_CITY:8/MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:0","MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:2/MAP_MOSSDEEP_CITY_SPACE_CENTER_2F:0":"MAP_MOSSDEEP_CITY_SPACE_CENTER_2F:0/MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:2","MAP_MOSSDEEP_CITY_SPACE_CENTER_2F:0/MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:2":"MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:2/MAP_MOSSDEEP_CITY_SPACE_CENTER_2F:0","MAP_MOSSDEEP_CITY_STEVENS_HOUSE:0,1/MAP_MOSSDEEP_CITY:6":"MAP_MOSSDEEP_CITY:6/MAP_MOSSDEEP_CITY_STEVENS_HOUSE:0","MAP_MT_CHIMNEY:0,1/MAP_MT_CHIMNEY_CABLE_CAR_STATION:0,1":"MAP_MT_CHIMNEY_CABLE_CAR_STATION:0,1/MAP_MT_CHIMNEY:0,1","MAP_MT_CHIMNEY:2,3/MAP_JAGGED_PASS:2,3":"MAP_JAGGED_PASS:2,3/MAP_MT_CHIMNEY:2,3","MAP_MT_CHIMNEY_CABLE_CAR_STATION:0,1/MAP_MT_CHIMNEY:0,1":"MAP_MT_CHIMNEY:0,1/MAP_MT_CHIMNEY_CABLE_CAR_STATION:0,1","MAP_MT_PYRE_1F:0,2/MAP_ROUTE122:0":"MAP_ROUTE122:0/MAP_MT_PYRE_1F:0","MAP_MT_PYRE_1F:1,3/MAP_MT_PYRE_EXTERIOR:0":"MAP_MT_PYRE_EXTERIOR:0/MAP_MT_PYRE_1F:1","MAP_MT_PYRE_1F:4/MAP_MT_PYRE_2F:0":"MAP_MT_PYRE_2F:0/MAP_MT_PYRE_1F:4","MAP_MT_PYRE_1F:5/MAP_MT_PYRE_2F:4":"MAP_MT_PYRE_2F:4/MAP_MT_PYRE_1F:5","MAP_MT_PYRE_2F:0/MAP_MT_PYRE_1F:4":"MAP_MT_PYRE_1F:4/MAP_MT_PYRE_2F:0","MAP_MT_PYRE_2F:1/MAP_MT_PYRE_3F:0":"MAP_MT_PYRE_3F:0/MAP_MT_PYRE_2F:1","MAP_MT_PYRE_2F:2/MAP_MT_PYRE_3F:4":"MAP_MT_PYRE_3F:4/MAP_MT_PYRE_2F:2","MAP_MT_PYRE_2F:3/MAP_MT_PYRE_3F:5":"MAP_MT_PYRE_3F:5/MAP_MT_PYRE_2F:3","MAP_MT_PYRE_2F:4/MAP_MT_PYRE_1F:5":"MAP_MT_PYRE_1F:5/MAP_MT_PYRE_2F:4","MAP_MT_PYRE_3F:0/MAP_MT_PYRE_2F:1":"MAP_MT_PYRE_2F:1/MAP_MT_PYRE_3F:0","MAP_MT_PYRE_3F:1/MAP_MT_PYRE_4F:1":"MAP_MT_PYRE_4F:1/MAP_MT_PYRE_3F:1","MAP_MT_PYRE_3F:2/MAP_MT_PYRE_4F:4":"MAP_MT_PYRE_4F:4/MAP_MT_PYRE_3F:2","MAP_MT_PYRE_3F:3/MAP_MT_PYRE_4F:5":"MAP_MT_PYRE_4F:5/MAP_MT_PYRE_3F:3","MAP_MT_PYRE_3F:4/MAP_MT_PYRE_2F:2":"MAP_MT_PYRE_2F:2/MAP_MT_PYRE_3F:4","MAP_MT_PYRE_3F:5/MAP_MT_PYRE_2F:3":"MAP_MT_PYRE_2F:3/MAP_MT_PYRE_3F:5","MAP_MT_PYRE_4F:0/MAP_MT_PYRE_5F:1":"MAP_MT_PYRE_5F:1/MAP_MT_PYRE_4F:0","MAP_MT_PYRE_4F:1/MAP_MT_PYRE_3F:1":"MAP_MT_PYRE_3F:1/MAP_MT_PYRE_4F:1","MAP_MT_PYRE_4F:2/MAP_MT_PYRE_5F:3":"MAP_MT_PYRE_5F:3/MAP_MT_PYRE_4F:2","MAP_MT_PYRE_4F:3/MAP_MT_PYRE_5F:4":"MAP_MT_PYRE_5F:4/MAP_MT_PYRE_4F:3","MAP_MT_PYRE_4F:4/MAP_MT_PYRE_3F:2":"MAP_MT_PYRE_3F:2/MAP_MT_PYRE_4F:4","MAP_MT_PYRE_4F:5/MAP_MT_PYRE_3F:3":"MAP_MT_PYRE_3F:3/MAP_MT_PYRE_4F:5","MAP_MT_PYRE_5F:0/MAP_MT_PYRE_6F:0":"MAP_MT_PYRE_6F:0/MAP_MT_PYRE_5F:0","MAP_MT_PYRE_5F:1/MAP_MT_PYRE_4F:0":"MAP_MT_PYRE_4F:0/MAP_MT_PYRE_5F:1","MAP_MT_PYRE_5F:2/MAP_MT_PYRE_6F:1":"MAP_MT_PYRE_6F:1/MAP_MT_PYRE_5F:2","MAP_MT_PYRE_5F:3/MAP_MT_PYRE_4F:2":"MAP_MT_PYRE_4F:2/MAP_MT_PYRE_5F:3","MAP_MT_PYRE_5F:4/MAP_MT_PYRE_4F:3":"MAP_MT_PYRE_4F:3/MAP_MT_PYRE_5F:4","MAP_MT_PYRE_6F:0/MAP_MT_PYRE_5F:0":"MAP_MT_PYRE_5F:0/MAP_MT_PYRE_6F:0","MAP_MT_PYRE_6F:1/MAP_MT_PYRE_5F:2":"MAP_MT_PYRE_5F:2/MAP_MT_PYRE_6F:1","MAP_MT_PYRE_EXTERIOR:0/MAP_MT_PYRE_1F:1":"MAP_MT_PYRE_1F:1,3/MAP_MT_PYRE_EXTERIOR:0","MAP_MT_PYRE_EXTERIOR:1,2/MAP_MT_PYRE_SUMMIT:1":"MAP_MT_PYRE_SUMMIT:0,1,2/MAP_MT_PYRE_EXTERIOR:1","MAP_MT_PYRE_SUMMIT:0,1,2/MAP_MT_PYRE_EXTERIOR:1":"MAP_MT_PYRE_EXTERIOR:1,2/MAP_MT_PYRE_SUMMIT:1","MAP_NAVEL_ROCK_B1F:0/MAP_NAVEL_ROCK_ENTRANCE:0":"MAP_NAVEL_ROCK_ENTRANCE:0/MAP_NAVEL_ROCK_B1F:0","MAP_NAVEL_ROCK_B1F:1/MAP_NAVEL_ROCK_FORK:1":"MAP_NAVEL_ROCK_FORK:1/MAP_NAVEL_ROCK_B1F:1","MAP_NAVEL_ROCK_BOTTOM:0/MAP_NAVEL_ROCK_DOWN11:0":"MAP_NAVEL_ROCK_DOWN11:0/MAP_NAVEL_ROCK_BOTTOM:0","MAP_NAVEL_ROCK_DOWN01:0/MAP_NAVEL_ROCK_FORK:2":"MAP_NAVEL_ROCK_FORK:2/MAP_NAVEL_ROCK_DOWN01:0","MAP_NAVEL_ROCK_DOWN01:1/MAP_NAVEL_ROCK_DOWN02:0":"MAP_NAVEL_ROCK_DOWN02:0/MAP_NAVEL_ROCK_DOWN01:1","MAP_NAVEL_ROCK_DOWN02:0/MAP_NAVEL_ROCK_DOWN01:1":"MAP_NAVEL_ROCK_DOWN01:1/MAP_NAVEL_ROCK_DOWN02:0","MAP_NAVEL_ROCK_DOWN02:1/MAP_NAVEL_ROCK_DOWN03:0":"MAP_NAVEL_ROCK_DOWN03:0/MAP_NAVEL_ROCK_DOWN02:1","MAP_NAVEL_ROCK_DOWN03:0/MAP_NAVEL_ROCK_DOWN02:1":"MAP_NAVEL_ROCK_DOWN02:1/MAP_NAVEL_ROCK_DOWN03:0","MAP_NAVEL_ROCK_DOWN03:1/MAP_NAVEL_ROCK_DOWN04:0":"MAP_NAVEL_ROCK_DOWN04:0/MAP_NAVEL_ROCK_DOWN03:1","MAP_NAVEL_ROCK_DOWN04:0/MAP_NAVEL_ROCK_DOWN03:1":"MAP_NAVEL_ROCK_DOWN03:1/MAP_NAVEL_ROCK_DOWN04:0","MAP_NAVEL_ROCK_DOWN04:1/MAP_NAVEL_ROCK_DOWN05:0":"MAP_NAVEL_ROCK_DOWN05:0/MAP_NAVEL_ROCK_DOWN04:1","MAP_NAVEL_ROCK_DOWN05:0/MAP_NAVEL_ROCK_DOWN04:1":"MAP_NAVEL_ROCK_DOWN04:1/MAP_NAVEL_ROCK_DOWN05:0","MAP_NAVEL_ROCK_DOWN05:1/MAP_NAVEL_ROCK_DOWN06:0":"MAP_NAVEL_ROCK_DOWN06:0/MAP_NAVEL_ROCK_DOWN05:1","MAP_NAVEL_ROCK_DOWN06:0/MAP_NAVEL_ROCK_DOWN05:1":"MAP_NAVEL_ROCK_DOWN05:1/MAP_NAVEL_ROCK_DOWN06:0","MAP_NAVEL_ROCK_DOWN06:1/MAP_NAVEL_ROCK_DOWN07:0":"MAP_NAVEL_ROCK_DOWN07:0/MAP_NAVEL_ROCK_DOWN06:1","MAP_NAVEL_ROCK_DOWN07:0/MAP_NAVEL_ROCK_DOWN06:1":"MAP_NAVEL_ROCK_DOWN06:1/MAP_NAVEL_ROCK_DOWN07:0","MAP_NAVEL_ROCK_DOWN07:1/MAP_NAVEL_ROCK_DOWN08:0":"MAP_NAVEL_ROCK_DOWN08:0/MAP_NAVEL_ROCK_DOWN07:1","MAP_NAVEL_ROCK_DOWN08:0/MAP_NAVEL_ROCK_DOWN07:1":"MAP_NAVEL_ROCK_DOWN07:1/MAP_NAVEL_ROCK_DOWN08:0","MAP_NAVEL_ROCK_DOWN08:1/MAP_NAVEL_ROCK_DOWN09:0":"MAP_NAVEL_ROCK_DOWN09:0/MAP_NAVEL_ROCK_DOWN08:1","MAP_NAVEL_ROCK_DOWN09:0/MAP_NAVEL_ROCK_DOWN08:1":"MAP_NAVEL_ROCK_DOWN08:1/MAP_NAVEL_ROCK_DOWN09:0","MAP_NAVEL_ROCK_DOWN09:1/MAP_NAVEL_ROCK_DOWN10:0":"MAP_NAVEL_ROCK_DOWN10:0/MAP_NAVEL_ROCK_DOWN09:1","MAP_NAVEL_ROCK_DOWN10:0/MAP_NAVEL_ROCK_DOWN09:1":"MAP_NAVEL_ROCK_DOWN09:1/MAP_NAVEL_ROCK_DOWN10:0","MAP_NAVEL_ROCK_DOWN10:1/MAP_NAVEL_ROCK_DOWN11:1":"MAP_NAVEL_ROCK_DOWN11:1/MAP_NAVEL_ROCK_DOWN10:1","MAP_NAVEL_ROCK_DOWN11:0/MAP_NAVEL_ROCK_BOTTOM:0":"MAP_NAVEL_ROCK_BOTTOM:0/MAP_NAVEL_ROCK_DOWN11:0","MAP_NAVEL_ROCK_DOWN11:1/MAP_NAVEL_ROCK_DOWN10:1":"MAP_NAVEL_ROCK_DOWN10:1/MAP_NAVEL_ROCK_DOWN11:1","MAP_NAVEL_ROCK_ENTRANCE:0/MAP_NAVEL_ROCK_B1F:0":"MAP_NAVEL_ROCK_B1F:0/MAP_NAVEL_ROCK_ENTRANCE:0","MAP_NAVEL_ROCK_ENTRANCE:1/MAP_NAVEL_ROCK_EXTERIOR:1":"MAP_NAVEL_ROCK_EXTERIOR:1/MAP_NAVEL_ROCK_ENTRANCE:1","MAP_NAVEL_ROCK_EXTERIOR:0/MAP_NAVEL_ROCK_HARBOR:0":"MAP_NAVEL_ROCK_HARBOR:0/MAP_NAVEL_ROCK_EXTERIOR:0","MAP_NAVEL_ROCK_EXTERIOR:1/MAP_NAVEL_ROCK_ENTRANCE:1":"MAP_NAVEL_ROCK_ENTRANCE:1/MAP_NAVEL_ROCK_EXTERIOR:1","MAP_NAVEL_ROCK_FORK:0/MAP_NAVEL_ROCK_UP1:0":"MAP_NAVEL_ROCK_UP1:0/MAP_NAVEL_ROCK_FORK:0","MAP_NAVEL_ROCK_FORK:1/MAP_NAVEL_ROCK_B1F:1":"MAP_NAVEL_ROCK_B1F:1/MAP_NAVEL_ROCK_FORK:1","MAP_NAVEL_ROCK_FORK:2/MAP_NAVEL_ROCK_DOWN01:0":"MAP_NAVEL_ROCK_DOWN01:0/MAP_NAVEL_ROCK_FORK:2","MAP_NAVEL_ROCK_HARBOR:0/MAP_NAVEL_ROCK_EXTERIOR:0":"MAP_NAVEL_ROCK_EXTERIOR:0/MAP_NAVEL_ROCK_HARBOR:0","MAP_NAVEL_ROCK_TOP:0/MAP_NAVEL_ROCK_UP4:1":"MAP_NAVEL_ROCK_UP4:1/MAP_NAVEL_ROCK_TOP:0","MAP_NAVEL_ROCK_UP1:0/MAP_NAVEL_ROCK_FORK:0":"MAP_NAVEL_ROCK_FORK:0/MAP_NAVEL_ROCK_UP1:0","MAP_NAVEL_ROCK_UP1:1/MAP_NAVEL_ROCK_UP2:0":"MAP_NAVEL_ROCK_UP2:0/MAP_NAVEL_ROCK_UP1:1","MAP_NAVEL_ROCK_UP2:0/MAP_NAVEL_ROCK_UP1:1":"MAP_NAVEL_ROCK_UP1:1/MAP_NAVEL_ROCK_UP2:0","MAP_NAVEL_ROCK_UP2:1/MAP_NAVEL_ROCK_UP3:0":"MAP_NAVEL_ROCK_UP3:0/MAP_NAVEL_ROCK_UP2:1","MAP_NAVEL_ROCK_UP3:0/MAP_NAVEL_ROCK_UP2:1":"MAP_NAVEL_ROCK_UP2:1/MAP_NAVEL_ROCK_UP3:0","MAP_NAVEL_ROCK_UP3:1/MAP_NAVEL_ROCK_UP4:0":"MAP_NAVEL_ROCK_UP4:0/MAP_NAVEL_ROCK_UP3:1","MAP_NAVEL_ROCK_UP4:0/MAP_NAVEL_ROCK_UP3:1":"MAP_NAVEL_ROCK_UP3:1/MAP_NAVEL_ROCK_UP4:0","MAP_NAVEL_ROCK_UP4:1/MAP_NAVEL_ROCK_TOP:0":"MAP_NAVEL_ROCK_TOP:0/MAP_NAVEL_ROCK_UP4:1","MAP_NEW_MAUVILLE_ENTRANCE:0/MAP_ROUTE110:0":"MAP_ROUTE110:0/MAP_NEW_MAUVILLE_ENTRANCE:0","MAP_NEW_MAUVILLE_ENTRANCE:1/MAP_NEW_MAUVILLE_INSIDE:0":"MAP_NEW_MAUVILLE_INSIDE:0/MAP_NEW_MAUVILLE_ENTRANCE:1","MAP_NEW_MAUVILLE_INSIDE:0/MAP_NEW_MAUVILLE_ENTRANCE:1":"MAP_NEW_MAUVILLE_ENTRANCE:1/MAP_NEW_MAUVILLE_INSIDE:0","MAP_OLDALE_TOWN:0/MAP_OLDALE_TOWN_HOUSE1:0":"MAP_OLDALE_TOWN_HOUSE1:0,1/MAP_OLDALE_TOWN:0","MAP_OLDALE_TOWN:1/MAP_OLDALE_TOWN_HOUSE2:0":"MAP_OLDALE_TOWN_HOUSE2:0,1/MAP_OLDALE_TOWN:1","MAP_OLDALE_TOWN:2/MAP_OLDALE_TOWN_POKEMON_CENTER_1F:0":"MAP_OLDALE_TOWN_POKEMON_CENTER_1F:0,1/MAP_OLDALE_TOWN:2","MAP_OLDALE_TOWN:3/MAP_OLDALE_TOWN_MART:0":"MAP_OLDALE_TOWN_MART:0,1/MAP_OLDALE_TOWN:3","MAP_OLDALE_TOWN_HOUSE1:0,1/MAP_OLDALE_TOWN:0":"MAP_OLDALE_TOWN:0/MAP_OLDALE_TOWN_HOUSE1:0","MAP_OLDALE_TOWN_HOUSE2:0,1/MAP_OLDALE_TOWN:1":"MAP_OLDALE_TOWN:1/MAP_OLDALE_TOWN_HOUSE2:0","MAP_OLDALE_TOWN_MART:0,1/MAP_OLDALE_TOWN:3":"MAP_OLDALE_TOWN:3/MAP_OLDALE_TOWN_MART:0","MAP_OLDALE_TOWN_POKEMON_CENTER_1F:0,1/MAP_OLDALE_TOWN:2":"MAP_OLDALE_TOWN:2/MAP_OLDALE_TOWN_POKEMON_CENTER_1F:0","MAP_OLDALE_TOWN_POKEMON_CENTER_1F:2/MAP_OLDALE_TOWN_POKEMON_CENTER_2F:0":"MAP_OLDALE_TOWN_POKEMON_CENTER_2F:0/MAP_OLDALE_TOWN_POKEMON_CENTER_1F:2","MAP_OLDALE_TOWN_POKEMON_CENTER_2F:0/MAP_OLDALE_TOWN_POKEMON_CENTER_1F:2":"MAP_OLDALE_TOWN_POKEMON_CENTER_1F:2/MAP_OLDALE_TOWN_POKEMON_CENTER_2F:0","MAP_OLDALE_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_OLDALE_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_PACIFIDLOG_TOWN:0/MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:0":"MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:0,1/MAP_PACIFIDLOG_TOWN:0","MAP_PACIFIDLOG_TOWN:1/MAP_PACIFIDLOG_TOWN_HOUSE1:0":"MAP_PACIFIDLOG_TOWN_HOUSE1:0,1/MAP_PACIFIDLOG_TOWN:1","MAP_PACIFIDLOG_TOWN:2/MAP_PACIFIDLOG_TOWN_HOUSE2:0":"MAP_PACIFIDLOG_TOWN_HOUSE2:0,1/MAP_PACIFIDLOG_TOWN:2","MAP_PACIFIDLOG_TOWN:3/MAP_PACIFIDLOG_TOWN_HOUSE3:0":"MAP_PACIFIDLOG_TOWN_HOUSE3:0,1/MAP_PACIFIDLOG_TOWN:3","MAP_PACIFIDLOG_TOWN:4/MAP_PACIFIDLOG_TOWN_HOUSE4:0":"MAP_PACIFIDLOG_TOWN_HOUSE4:0,1/MAP_PACIFIDLOG_TOWN:4","MAP_PACIFIDLOG_TOWN:5/MAP_PACIFIDLOG_TOWN_HOUSE5:0":"MAP_PACIFIDLOG_TOWN_HOUSE5:0,1/MAP_PACIFIDLOG_TOWN:5","MAP_PACIFIDLOG_TOWN_HOUSE1:0,1/MAP_PACIFIDLOG_TOWN:1":"MAP_PACIFIDLOG_TOWN:1/MAP_PACIFIDLOG_TOWN_HOUSE1:0","MAP_PACIFIDLOG_TOWN_HOUSE2:0,1/MAP_PACIFIDLOG_TOWN:2":"MAP_PACIFIDLOG_TOWN:2/MAP_PACIFIDLOG_TOWN_HOUSE2:0","MAP_PACIFIDLOG_TOWN_HOUSE3:0,1/MAP_PACIFIDLOG_TOWN:3":"MAP_PACIFIDLOG_TOWN:3/MAP_PACIFIDLOG_TOWN_HOUSE3:0","MAP_PACIFIDLOG_TOWN_HOUSE4:0,1/MAP_PACIFIDLOG_TOWN:4":"MAP_PACIFIDLOG_TOWN:4/MAP_PACIFIDLOG_TOWN_HOUSE4:0","MAP_PACIFIDLOG_TOWN_HOUSE5:0,1/MAP_PACIFIDLOG_TOWN:5":"MAP_PACIFIDLOG_TOWN:5/MAP_PACIFIDLOG_TOWN_HOUSE5:0","MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:0,1/MAP_PACIFIDLOG_TOWN:0":"MAP_PACIFIDLOG_TOWN:0/MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:0","MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:2/MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:0":"MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:0/MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:2","MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:0/MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:2":"MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:2/MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:0","MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_PETALBURG_CITY:0/MAP_PETALBURG_CITY_HOUSE1:0":"MAP_PETALBURG_CITY_HOUSE1:0,1/MAP_PETALBURG_CITY:0","MAP_PETALBURG_CITY:1/MAP_PETALBURG_CITY_WALLYS_HOUSE:0":"MAP_PETALBURG_CITY_WALLYS_HOUSE:0,1/MAP_PETALBURG_CITY:1","MAP_PETALBURG_CITY:2/MAP_PETALBURG_CITY_GYM:0":"MAP_PETALBURG_CITY_GYM:0,1/MAP_PETALBURG_CITY:2","MAP_PETALBURG_CITY:3/MAP_PETALBURG_CITY_POKEMON_CENTER_1F:0":"MAP_PETALBURG_CITY_POKEMON_CENTER_1F:0,1/MAP_PETALBURG_CITY:3","MAP_PETALBURG_CITY:4/MAP_PETALBURG_CITY_HOUSE2:0":"MAP_PETALBURG_CITY_HOUSE2:0,1/MAP_PETALBURG_CITY:4","MAP_PETALBURG_CITY:5/MAP_PETALBURG_CITY_MART:0":"MAP_PETALBURG_CITY_MART:0,1/MAP_PETALBURG_CITY:5","MAP_PETALBURG_CITY_GYM:0,1/MAP_PETALBURG_CITY:2":"MAP_PETALBURG_CITY:2/MAP_PETALBURG_CITY_GYM:0","MAP_PETALBURG_CITY_GYM:10,11/MAP_PETALBURG_CITY_GYM:8":"MAP_PETALBURG_CITY_GYM:8/MAP_PETALBURG_CITY_GYM:10","MAP_PETALBURG_CITY_GYM:12,13/MAP_PETALBURG_CITY_GYM:9":"MAP_PETALBURG_CITY_GYM:9/MAP_PETALBURG_CITY_GYM:12","MAP_PETALBURG_CITY_GYM:14/MAP_PETALBURG_CITY_GYM:16":"MAP_PETALBURG_CITY_GYM:16,17/MAP_PETALBURG_CITY_GYM:14","MAP_PETALBURG_CITY_GYM:15/MAP_PETALBURG_CITY_GYM:18":"MAP_PETALBURG_CITY_GYM:18,19/MAP_PETALBURG_CITY_GYM:15","MAP_PETALBURG_CITY_GYM:16,17/MAP_PETALBURG_CITY_GYM:14":"MAP_PETALBURG_CITY_GYM:14/MAP_PETALBURG_CITY_GYM:16","MAP_PETALBURG_CITY_GYM:18,19/MAP_PETALBURG_CITY_GYM:15":"MAP_PETALBURG_CITY_GYM:15/MAP_PETALBURG_CITY_GYM:18","MAP_PETALBURG_CITY_GYM:2/MAP_PETALBURG_CITY_GYM:3":"MAP_PETALBURG_CITY_GYM:3,4/MAP_PETALBURG_CITY_GYM:2","MAP_PETALBURG_CITY_GYM:20/MAP_PETALBURG_CITY_GYM:24":"MAP_PETALBURG_CITY_GYM:24,25/MAP_PETALBURG_CITY_GYM:20","MAP_PETALBURG_CITY_GYM:21/MAP_PETALBURG_CITY_GYM:26":"MAP_PETALBURG_CITY_GYM:26,27/MAP_PETALBURG_CITY_GYM:21","MAP_PETALBURG_CITY_GYM:22/MAP_PETALBURG_CITY_GYM:28":"MAP_PETALBURG_CITY_GYM:28,29/MAP_PETALBURG_CITY_GYM:22","MAP_PETALBURG_CITY_GYM:23/MAP_PETALBURG_CITY_GYM:30":"MAP_PETALBURG_CITY_GYM:30,31/MAP_PETALBURG_CITY_GYM:23","MAP_PETALBURG_CITY_GYM:24,25/MAP_PETALBURG_CITY_GYM:20":"MAP_PETALBURG_CITY_GYM:20/MAP_PETALBURG_CITY_GYM:24","MAP_PETALBURG_CITY_GYM:26,27/MAP_PETALBURG_CITY_GYM:21":"MAP_PETALBURG_CITY_GYM:21/MAP_PETALBURG_CITY_GYM:26","MAP_PETALBURG_CITY_GYM:28,29/MAP_PETALBURG_CITY_GYM:22":"MAP_PETALBURG_CITY_GYM:22/MAP_PETALBURG_CITY_GYM:28","MAP_PETALBURG_CITY_GYM:3,4/MAP_PETALBURG_CITY_GYM:2":"MAP_PETALBURG_CITY_GYM:2/MAP_PETALBURG_CITY_GYM:3","MAP_PETALBURG_CITY_GYM:30,31/MAP_PETALBURG_CITY_GYM:23":"MAP_PETALBURG_CITY_GYM:23/MAP_PETALBURG_CITY_GYM:30","MAP_PETALBURG_CITY_GYM:32/MAP_PETALBURG_CITY_GYM:34":"MAP_PETALBURG_CITY_GYM:34,35/MAP_PETALBURG_CITY_GYM:32","MAP_PETALBURG_CITY_GYM:33/MAP_PETALBURG_CITY_GYM:36":"MAP_PETALBURG_CITY_GYM:36,37/MAP_PETALBURG_CITY_GYM:33","MAP_PETALBURG_CITY_GYM:34,35/MAP_PETALBURG_CITY_GYM:32":"MAP_PETALBURG_CITY_GYM:32/MAP_PETALBURG_CITY_GYM:34","MAP_PETALBURG_CITY_GYM:36,37/MAP_PETALBURG_CITY_GYM:33":"MAP_PETALBURG_CITY_GYM:33/MAP_PETALBURG_CITY_GYM:36","MAP_PETALBURG_CITY_GYM:5/MAP_PETALBURG_CITY_GYM:6":"MAP_PETALBURG_CITY_GYM:6,7/MAP_PETALBURG_CITY_GYM:5","MAP_PETALBURG_CITY_GYM:6,7/MAP_PETALBURG_CITY_GYM:5":"MAP_PETALBURG_CITY_GYM:5/MAP_PETALBURG_CITY_GYM:6","MAP_PETALBURG_CITY_GYM:8/MAP_PETALBURG_CITY_GYM:10":"MAP_PETALBURG_CITY_GYM:10,11/MAP_PETALBURG_CITY_GYM:8","MAP_PETALBURG_CITY_GYM:9/MAP_PETALBURG_CITY_GYM:12":"MAP_PETALBURG_CITY_GYM:12,13/MAP_PETALBURG_CITY_GYM:9","MAP_PETALBURG_CITY_HOUSE1:0,1/MAP_PETALBURG_CITY:0":"MAP_PETALBURG_CITY:0/MAP_PETALBURG_CITY_HOUSE1:0","MAP_PETALBURG_CITY_HOUSE2:0,1/MAP_PETALBURG_CITY:4":"MAP_PETALBURG_CITY:4/MAP_PETALBURG_CITY_HOUSE2:0","MAP_PETALBURG_CITY_MART:0,1/MAP_PETALBURG_CITY:5":"MAP_PETALBURG_CITY:5/MAP_PETALBURG_CITY_MART:0","MAP_PETALBURG_CITY_POKEMON_CENTER_1F:0,1/MAP_PETALBURG_CITY:3":"MAP_PETALBURG_CITY:3/MAP_PETALBURG_CITY_POKEMON_CENTER_1F:0","MAP_PETALBURG_CITY_POKEMON_CENTER_1F:2/MAP_PETALBURG_CITY_POKEMON_CENTER_2F:0":"MAP_PETALBURG_CITY_POKEMON_CENTER_2F:0/MAP_PETALBURG_CITY_POKEMON_CENTER_1F:2","MAP_PETALBURG_CITY_POKEMON_CENTER_2F:0/MAP_PETALBURG_CITY_POKEMON_CENTER_1F:2":"MAP_PETALBURG_CITY_POKEMON_CENTER_1F:2/MAP_PETALBURG_CITY_POKEMON_CENTER_2F:0","MAP_PETALBURG_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_PETALBURG_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_PETALBURG_CITY_WALLYS_HOUSE:0,1/MAP_PETALBURG_CITY:1":"MAP_PETALBURG_CITY:1/MAP_PETALBURG_CITY_WALLYS_HOUSE:0","MAP_PETALBURG_WOODS:0,1/MAP_ROUTE104:2,3":"MAP_ROUTE104:2,3/MAP_PETALBURG_WOODS:0,1","MAP_PETALBURG_WOODS:2,3/MAP_ROUTE104:4,5":"MAP_ROUTE104:4,5/MAP_PETALBURG_WOODS:2,3","MAP_PETALBURG_WOODS:4,5/MAP_ROUTE104:6,7":"MAP_ROUTE104:6,7/MAP_PETALBURG_WOODS:4,5","MAP_RECORD_CORNER:0,1,2,3/MAP_DYNAMIC:-1!":"","MAP_ROUTE103:0/MAP_ALTERING_CAVE:0":"MAP_ALTERING_CAVE:0/MAP_ROUTE103:0","MAP_ROUTE104:0/MAP_ROUTE104_MR_BRINEYS_HOUSE:0":"MAP_ROUTE104_MR_BRINEYS_HOUSE:0,1/MAP_ROUTE104:0","MAP_ROUTE104:1/MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP:0":"MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP:0,1/MAP_ROUTE104:1","MAP_ROUTE104:2,3/MAP_PETALBURG_WOODS:0,1":"MAP_PETALBURG_WOODS:0,1/MAP_ROUTE104:2,3","MAP_ROUTE104:4,5/MAP_PETALBURG_WOODS:2,3":"MAP_PETALBURG_WOODS:2,3/MAP_ROUTE104:4,5","MAP_ROUTE104:6,7/MAP_PETALBURG_WOODS:4,5":"MAP_PETALBURG_WOODS:4,5/MAP_ROUTE104:6,7","MAP_ROUTE104_MR_BRINEYS_HOUSE:0,1/MAP_ROUTE104:0":"MAP_ROUTE104:0/MAP_ROUTE104_MR_BRINEYS_HOUSE:0","MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP:0,1/MAP_ROUTE104:1":"MAP_ROUTE104:1/MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP:0","MAP_ROUTE105:0/MAP_ISLAND_CAVE:0":"MAP_ISLAND_CAVE:0/MAP_ROUTE105:0","MAP_ROUTE106:0/MAP_GRANITE_CAVE_1F:0":"MAP_GRANITE_CAVE_1F:0/MAP_ROUTE106:0","MAP_ROUTE108:0/MAP_ABANDONED_SHIP_DECK:0":"MAP_ABANDONED_SHIP_DECK:0,1/MAP_ROUTE108:0","MAP_ROUTE109:0/MAP_ROUTE109_SEASHORE_HOUSE:0":"MAP_ROUTE109_SEASHORE_HOUSE:0,1/MAP_ROUTE109:0","MAP_ROUTE109_SEASHORE_HOUSE:0,1/MAP_ROUTE109:0":"MAP_ROUTE109:0/MAP_ROUTE109_SEASHORE_HOUSE:0","MAP_ROUTE110:0/MAP_NEW_MAUVILLE_ENTRANCE:0":"MAP_NEW_MAUVILLE_ENTRANCE:0/MAP_ROUTE110:0","MAP_ROUTE110:1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:0":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:0,1/MAP_ROUTE110:1","MAP_ROUTE110:2/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:0":"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:0,1/MAP_ROUTE110:2","MAP_ROUTE110:3/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:2":"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:2,3/MAP_ROUTE110:3","MAP_ROUTE110:4/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:0":"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:0,1/MAP_ROUTE110:4","MAP_ROUTE110:5/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:2":"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:2,3/MAP_ROUTE110:5","MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:0,1/MAP_ROUTE110:4":"MAP_ROUTE110:4/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:0","MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:2,3/MAP_ROUTE110:5":"MAP_ROUTE110:5/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:2","MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:0,1/MAP_ROUTE110:2":"MAP_ROUTE110:2/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:0","MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:2,3/MAP_ROUTE110:3":"MAP_ROUTE110:3/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:2","MAP_ROUTE110_TRICK_HOUSE_CORRIDOR:0,1/MAP_ROUTE110_TRICK_HOUSE_END:1":"MAP_ROUTE110_TRICK_HOUSE_END:1/MAP_ROUTE110_TRICK_HOUSE_CORRIDOR:0","MAP_ROUTE110_TRICK_HOUSE_CORRIDOR:2,3/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0","MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2/MAP_ROUTE110_TRICK_HOUSE_END:0","MAP_ROUTE110_TRICK_HOUSE_END:1/MAP_ROUTE110_TRICK_HOUSE_CORRIDOR:0":"MAP_ROUTE110_TRICK_HOUSE_CORRIDOR:0,1/MAP_ROUTE110_TRICK_HOUSE_END:1","MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:0,1/MAP_ROUTE110:1":"MAP_ROUTE110:1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:0","MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2","MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0","MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2/MAP_ROUTE110_TRICK_HOUSE_END:0":"MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2","MAP_ROUTE110_TRICK_HOUSE_PUZZLE2:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0","MAP_ROUTE110_TRICK_HOUSE_PUZZLE2:2/MAP_ROUTE110_TRICK_HOUSE_END:0!":"MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2","MAP_ROUTE110_TRICK_HOUSE_PUZZLE3:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0","MAP_ROUTE110_TRICK_HOUSE_PUZZLE3:2/MAP_ROUTE110_TRICK_HOUSE_END:0!":"MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2","MAP_ROUTE110_TRICK_HOUSE_PUZZLE4:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0","MAP_ROUTE110_TRICK_HOUSE_PUZZLE4:2/MAP_ROUTE110_TRICK_HOUSE_END:0!":"MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2","MAP_ROUTE110_TRICK_HOUSE_PUZZLE5:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0","MAP_ROUTE110_TRICK_HOUSE_PUZZLE5:2/MAP_ROUTE110_TRICK_HOUSE_END:0!":"MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2","MAP_ROUTE110_TRICK_HOUSE_PUZZLE6:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0","MAP_ROUTE110_TRICK_HOUSE_PUZZLE6:2/MAP_ROUTE110_TRICK_HOUSE_END:0!":"MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:10/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:9":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:9/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:10","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:11/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:12":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:12/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:11","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:12/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:11":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:11/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:12","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:2/MAP_ROUTE110_TRICK_HOUSE_END:0!":"MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:3/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:4":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:4/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:3","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:4/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:3":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:3/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:4","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:5/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:6":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:6/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:5","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:6/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:5":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:5/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:6","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:7/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:8":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:8/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:7","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:8/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:7":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:7/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:8","MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:9/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:10":"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:10/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:9","MAP_ROUTE110_TRICK_HOUSE_PUZZLE8:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!":"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0","MAP_ROUTE110_TRICK_HOUSE_PUZZLE8:2/MAP_ROUTE110_TRICK_HOUSE_END:0!":"MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2","MAP_ROUTE111:0/MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE:0":"MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE:0,1/MAP_ROUTE111:0","MAP_ROUTE111:1/MAP_DESERT_RUINS:0":"MAP_DESERT_RUINS:0/MAP_ROUTE111:1","MAP_ROUTE111:2/MAP_ROUTE111_OLD_LADYS_REST_STOP:0":"MAP_ROUTE111_OLD_LADYS_REST_STOP:0,1/MAP_ROUTE111:2","MAP_ROUTE111:3/MAP_MIRAGE_TOWER_1F:0":"MAP_MIRAGE_TOWER_1F:0/MAP_ROUTE111:3","MAP_ROUTE111:4/MAP_TRAINER_HILL_ENTRANCE:0":"MAP_TRAINER_HILL_ENTRANCE:0,1/MAP_ROUTE111:4","MAP_ROUTE111_OLD_LADYS_REST_STOP:0,1/MAP_ROUTE111:2":"MAP_ROUTE111:2/MAP_ROUTE111_OLD_LADYS_REST_STOP:0","MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE:0,1/MAP_ROUTE111:0":"MAP_ROUTE111:0/MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE:0","MAP_ROUTE112:0,1/MAP_ROUTE112_CABLE_CAR_STATION:0,1":"MAP_ROUTE112_CABLE_CAR_STATION:0,1/MAP_ROUTE112:0,1","MAP_ROUTE112:2,3/MAP_JAGGED_PASS:0,1":"MAP_JAGGED_PASS:0,1/MAP_ROUTE112:2,3","MAP_ROUTE112:4/MAP_FIERY_PATH:0":"MAP_FIERY_PATH:0/MAP_ROUTE112:4","MAP_ROUTE112:5/MAP_FIERY_PATH:1":"MAP_FIERY_PATH:1/MAP_ROUTE112:5","MAP_ROUTE112_CABLE_CAR_STATION:0,1/MAP_ROUTE112:0,1":"MAP_ROUTE112:0,1/MAP_ROUTE112_CABLE_CAR_STATION:0,1","MAP_ROUTE113:0/MAP_ROUTE113_GLASS_WORKSHOP:0":"MAP_ROUTE113_GLASS_WORKSHOP:0,1/MAP_ROUTE113:0","MAP_ROUTE113:1/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE113:2/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE113_GLASS_WORKSHOP:0,1/MAP_ROUTE113:0":"MAP_ROUTE113:0/MAP_ROUTE113_GLASS_WORKSHOP:0","MAP_ROUTE114:0/MAP_METEOR_FALLS_1F_1R:0":"MAP_METEOR_FALLS_1F_1R:0/MAP_ROUTE114:0","MAP_ROUTE114:1/MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:0":"MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:0,1/MAP_ROUTE114:1","MAP_ROUTE114:2/MAP_ROUTE114_LANETTES_HOUSE:0":"MAP_ROUTE114_LANETTES_HOUSE:0,1/MAP_ROUTE114:2","MAP_ROUTE114:3/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE114:4/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:0,1/MAP_ROUTE114:1":"MAP_ROUTE114:1/MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:0","MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:2/MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:0":"MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:0,1/MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:2","MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:0,1/MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:2":"MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:2/MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:0","MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:2/MAP_DESERT_UNDERPASS:0":"MAP_DESERT_UNDERPASS:0/MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:2","MAP_ROUTE114_LANETTES_HOUSE:0,1/MAP_ROUTE114:2":"MAP_ROUTE114:2/MAP_ROUTE114_LANETTES_HOUSE:0","MAP_ROUTE115:0/MAP_METEOR_FALLS_1F_1R:1":"MAP_METEOR_FALLS_1F_1R:1/MAP_ROUTE115:0","MAP_ROUTE115:1/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE115:2/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE116:0/MAP_RUSTURF_TUNNEL:0":"MAP_RUSTURF_TUNNEL:0/MAP_ROUTE116:0","MAP_ROUTE116:1/MAP_ROUTE116_TUNNELERS_REST_HOUSE:0":"MAP_ROUTE116_TUNNELERS_REST_HOUSE:0,1/MAP_ROUTE116:1","MAP_ROUTE116:2/MAP_RUSTURF_TUNNEL:2":"MAP_RUSTURF_TUNNEL:2/MAP_ROUTE116:2","MAP_ROUTE116:3/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE116:4/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE116_TUNNELERS_REST_HOUSE:0,1/MAP_ROUTE116:1":"MAP_ROUTE116:1/MAP_ROUTE116_TUNNELERS_REST_HOUSE:0","MAP_ROUTE117:0/MAP_ROUTE117_POKEMON_DAY_CARE:0":"MAP_ROUTE117_POKEMON_DAY_CARE:0,1/MAP_ROUTE117:0","MAP_ROUTE117_POKEMON_DAY_CARE:0,1/MAP_ROUTE117:0":"MAP_ROUTE117:0/MAP_ROUTE117_POKEMON_DAY_CARE:0","MAP_ROUTE118:0/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE118:1/MAP_TERRA_CAVE_ENTRANCE:0!":"MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!","MAP_ROUTE119:0/MAP_ROUTE119_WEATHER_INSTITUTE_1F:0":"MAP_ROUTE119_WEATHER_INSTITUTE_1F:0,1/MAP_ROUTE119:0","MAP_ROUTE119:1/MAP_ROUTE119_HOUSE:0":"MAP_ROUTE119_HOUSE:0,1/MAP_ROUTE119:1","MAP_ROUTE119_HOUSE:0,1/MAP_ROUTE119:1":"MAP_ROUTE119:1/MAP_ROUTE119_HOUSE:0","MAP_ROUTE119_WEATHER_INSTITUTE_1F:0,1/MAP_ROUTE119:0":"MAP_ROUTE119:0/MAP_ROUTE119_WEATHER_INSTITUTE_1F:0","MAP_ROUTE119_WEATHER_INSTITUTE_1F:2/MAP_ROUTE119_WEATHER_INSTITUTE_2F:0":"MAP_ROUTE119_WEATHER_INSTITUTE_2F:0/MAP_ROUTE119_WEATHER_INSTITUTE_1F:2","MAP_ROUTE119_WEATHER_INSTITUTE_2F:0/MAP_ROUTE119_WEATHER_INSTITUTE_1F:2":"MAP_ROUTE119_WEATHER_INSTITUTE_1F:2/MAP_ROUTE119_WEATHER_INSTITUTE_2F:0","MAP_ROUTE120:0/MAP_ANCIENT_TOMB:0":"MAP_ANCIENT_TOMB:0/MAP_ROUTE120:0","MAP_ROUTE120:1/MAP_SCORCHED_SLAB:0":"MAP_SCORCHED_SLAB:0/MAP_ROUTE120:1","MAP_ROUTE121:0/MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:2":"MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:2,3/MAP_ROUTE121:0","MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:0,1/MAP_SAFARI_ZONE_SOUTH:0":"MAP_SAFARI_ZONE_SOUTH:0/MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:0","MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:2,3/MAP_ROUTE121:0":"MAP_ROUTE121:0/MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:2","MAP_ROUTE122:0/MAP_MT_PYRE_1F:0":"MAP_MT_PYRE_1F:0,2/MAP_ROUTE122:0","MAP_ROUTE123:0/MAP_ROUTE123_BERRY_MASTERS_HOUSE:0":"MAP_ROUTE123_BERRY_MASTERS_HOUSE:0,1/MAP_ROUTE123:0","MAP_ROUTE123_BERRY_MASTERS_HOUSE:0,1/MAP_ROUTE123:0":"MAP_ROUTE123:0/MAP_ROUTE123_BERRY_MASTERS_HOUSE:0","MAP_ROUTE124:0/MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE:0":"MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE:0,1/MAP_ROUTE124:0","MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE:0,1/MAP_ROUTE124:0":"MAP_ROUTE124:0/MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE:0","MAP_ROUTE125:0/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:0":"MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:0/MAP_ROUTE125:0","MAP_ROUTE131:0/MAP_SKY_PILLAR_ENTRANCE:0":"MAP_SKY_PILLAR_ENTRANCE:0/MAP_ROUTE131:0","MAP_RUSTBORO_CITY:0/MAP_RUSTBORO_CITY_GYM:0":"MAP_RUSTBORO_CITY_GYM:0,1/MAP_RUSTBORO_CITY:0","MAP_RUSTBORO_CITY:1/MAP_RUSTBORO_CITY_FLAT1_1F:0":"MAP_RUSTBORO_CITY_FLAT1_1F:0,1/MAP_RUSTBORO_CITY:1","MAP_RUSTBORO_CITY:10/MAP_RUSTBORO_CITY_FLAT2_1F:0":"MAP_RUSTBORO_CITY_FLAT2_1F:0,1/MAP_RUSTBORO_CITY:10","MAP_RUSTBORO_CITY:11/MAP_RUSTBORO_CITY_HOUSE3:0":"MAP_RUSTBORO_CITY_HOUSE3:0,1/MAP_RUSTBORO_CITY:11","MAP_RUSTBORO_CITY:2/MAP_RUSTBORO_CITY_MART:0":"MAP_RUSTBORO_CITY_MART:0,1/MAP_RUSTBORO_CITY:2","MAP_RUSTBORO_CITY:3/MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:0":"MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:0,1/MAP_RUSTBORO_CITY:3","MAP_RUSTBORO_CITY:4/MAP_RUSTBORO_CITY_POKEMON_SCHOOL:0":"MAP_RUSTBORO_CITY_POKEMON_SCHOOL:0,1/MAP_RUSTBORO_CITY:4","MAP_RUSTBORO_CITY:5,6/MAP_RUSTBORO_CITY_DEVON_CORP_1F:0,1":"MAP_RUSTBORO_CITY_DEVON_CORP_1F:0,1/MAP_RUSTBORO_CITY:5,6","MAP_RUSTBORO_CITY:7/MAP_RUSTBORO_CITY_HOUSE1:0":"MAP_RUSTBORO_CITY_HOUSE1:0,1/MAP_RUSTBORO_CITY:7","MAP_RUSTBORO_CITY:8/MAP_RUSTBORO_CITY_CUTTERS_HOUSE:0":"MAP_RUSTBORO_CITY_CUTTERS_HOUSE:0,1/MAP_RUSTBORO_CITY:8","MAP_RUSTBORO_CITY:9/MAP_RUSTBORO_CITY_HOUSE2:0":"MAP_RUSTBORO_CITY_HOUSE2:0,1/MAP_RUSTBORO_CITY:9","MAP_RUSTBORO_CITY_CUTTERS_HOUSE:0,1/MAP_RUSTBORO_CITY:8":"MAP_RUSTBORO_CITY:8/MAP_RUSTBORO_CITY_CUTTERS_HOUSE:0","MAP_RUSTBORO_CITY_DEVON_CORP_1F:0,1/MAP_RUSTBORO_CITY:5,6":"MAP_RUSTBORO_CITY:5,6/MAP_RUSTBORO_CITY_DEVON_CORP_1F:0,1","MAP_RUSTBORO_CITY_DEVON_CORP_1F:2/MAP_RUSTBORO_CITY_DEVON_CORP_2F:0":"MAP_RUSTBORO_CITY_DEVON_CORP_2F:0/MAP_RUSTBORO_CITY_DEVON_CORP_1F:2","MAP_RUSTBORO_CITY_DEVON_CORP_2F:0/MAP_RUSTBORO_CITY_DEVON_CORP_1F:2":"MAP_RUSTBORO_CITY_DEVON_CORP_1F:2/MAP_RUSTBORO_CITY_DEVON_CORP_2F:0","MAP_RUSTBORO_CITY_DEVON_CORP_2F:1/MAP_RUSTBORO_CITY_DEVON_CORP_3F:0":"MAP_RUSTBORO_CITY_DEVON_CORP_3F:0/MAP_RUSTBORO_CITY_DEVON_CORP_2F:1","MAP_RUSTBORO_CITY_DEVON_CORP_3F:0/MAP_RUSTBORO_CITY_DEVON_CORP_2F:1":"MAP_RUSTBORO_CITY_DEVON_CORP_2F:1/MAP_RUSTBORO_CITY_DEVON_CORP_3F:0","MAP_RUSTBORO_CITY_FLAT1_1F:0,1/MAP_RUSTBORO_CITY:1":"MAP_RUSTBORO_CITY:1/MAP_RUSTBORO_CITY_FLAT1_1F:0","MAP_RUSTBORO_CITY_FLAT1_1F:2/MAP_RUSTBORO_CITY_FLAT1_2F:0":"MAP_RUSTBORO_CITY_FLAT1_2F:0/MAP_RUSTBORO_CITY_FLAT1_1F:2","MAP_RUSTBORO_CITY_FLAT1_2F:0/MAP_RUSTBORO_CITY_FLAT1_1F:2":"MAP_RUSTBORO_CITY_FLAT1_1F:2/MAP_RUSTBORO_CITY_FLAT1_2F:0","MAP_RUSTBORO_CITY_FLAT2_1F:0,1/MAP_RUSTBORO_CITY:10":"MAP_RUSTBORO_CITY:10/MAP_RUSTBORO_CITY_FLAT2_1F:0","MAP_RUSTBORO_CITY_FLAT2_1F:2/MAP_RUSTBORO_CITY_FLAT2_2F:0":"MAP_RUSTBORO_CITY_FLAT2_2F:0/MAP_RUSTBORO_CITY_FLAT2_1F:2","MAP_RUSTBORO_CITY_FLAT2_2F:0/MAP_RUSTBORO_CITY_FLAT2_1F:2":"MAP_RUSTBORO_CITY_FLAT2_1F:2/MAP_RUSTBORO_CITY_FLAT2_2F:0","MAP_RUSTBORO_CITY_FLAT2_2F:1/MAP_RUSTBORO_CITY_FLAT2_3F:0":"MAP_RUSTBORO_CITY_FLAT2_3F:0/MAP_RUSTBORO_CITY_FLAT2_2F:1","MAP_RUSTBORO_CITY_FLAT2_3F:0/MAP_RUSTBORO_CITY_FLAT2_2F:1":"MAP_RUSTBORO_CITY_FLAT2_2F:1/MAP_RUSTBORO_CITY_FLAT2_3F:0","MAP_RUSTBORO_CITY_GYM:0,1/MAP_RUSTBORO_CITY:0":"MAP_RUSTBORO_CITY:0/MAP_RUSTBORO_CITY_GYM:0","MAP_RUSTBORO_CITY_HOUSE1:0,1/MAP_RUSTBORO_CITY:7":"MAP_RUSTBORO_CITY:7/MAP_RUSTBORO_CITY_HOUSE1:0","MAP_RUSTBORO_CITY_HOUSE2:0,1/MAP_RUSTBORO_CITY:9":"MAP_RUSTBORO_CITY:9/MAP_RUSTBORO_CITY_HOUSE2:0","MAP_RUSTBORO_CITY_HOUSE3:0,1/MAP_RUSTBORO_CITY:11":"MAP_RUSTBORO_CITY:11/MAP_RUSTBORO_CITY_HOUSE3:0","MAP_RUSTBORO_CITY_MART:0,1/MAP_RUSTBORO_CITY:2":"MAP_RUSTBORO_CITY:2/MAP_RUSTBORO_CITY_MART:0","MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:0,1/MAP_RUSTBORO_CITY:3":"MAP_RUSTBORO_CITY:3/MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:0","MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:2/MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:0":"MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:0/MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:2","MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:0/MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:2":"MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:2/MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:0","MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_RUSTBORO_CITY_POKEMON_SCHOOL:0,1/MAP_RUSTBORO_CITY:4":"MAP_RUSTBORO_CITY:4/MAP_RUSTBORO_CITY_POKEMON_SCHOOL:0","MAP_RUSTURF_TUNNEL:0/MAP_ROUTE116:0":"MAP_ROUTE116:0/MAP_RUSTURF_TUNNEL:0","MAP_RUSTURF_TUNNEL:1/MAP_VERDANTURF_TOWN:4":"MAP_VERDANTURF_TOWN:4/MAP_RUSTURF_TUNNEL:1","MAP_RUSTURF_TUNNEL:2/MAP_ROUTE116:2":"MAP_ROUTE116:2/MAP_RUSTURF_TUNNEL:2","MAP_SAFARI_ZONE_REST_HOUSE:0,1/MAP_SAFARI_ZONE_SOUTHWEST:0":"MAP_SAFARI_ZONE_SOUTHWEST:0/MAP_SAFARI_ZONE_REST_HOUSE:0","MAP_SAFARI_ZONE_SOUTH:0/MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:0":"MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:0,1/MAP_SAFARI_ZONE_SOUTH:0","MAP_SAFARI_ZONE_SOUTHWEST:0/MAP_SAFARI_ZONE_REST_HOUSE:0":"MAP_SAFARI_ZONE_REST_HOUSE:0,1/MAP_SAFARI_ZONE_SOUTHWEST:0","MAP_SCORCHED_SLAB:0/MAP_ROUTE120:1":"MAP_ROUTE120:1/MAP_SCORCHED_SLAB:0","MAP_SEAFLOOR_CAVERN_ENTRANCE:0/MAP_UNDERWATER_ROUTE128:0!":"MAP_UNDERWATER_ROUTE128:0/MAP_UNDERWATER_SEAFLOOR_CAVERN:0","MAP_SEAFLOOR_CAVERN_ENTRANCE:1/MAP_SEAFLOOR_CAVERN_ROOM1:0":"MAP_SEAFLOOR_CAVERN_ROOM1:0/MAP_SEAFLOOR_CAVERN_ENTRANCE:1","MAP_SEAFLOOR_CAVERN_ROOM1:0/MAP_SEAFLOOR_CAVERN_ENTRANCE:1":"MAP_SEAFLOOR_CAVERN_ENTRANCE:1/MAP_SEAFLOOR_CAVERN_ROOM1:0","MAP_SEAFLOOR_CAVERN_ROOM1:1/MAP_SEAFLOOR_CAVERN_ROOM5:0":"MAP_SEAFLOOR_CAVERN_ROOM5:0/MAP_SEAFLOOR_CAVERN_ROOM1:1","MAP_SEAFLOOR_CAVERN_ROOM1:2/MAP_SEAFLOOR_CAVERN_ROOM2:0":"MAP_SEAFLOOR_CAVERN_ROOM2:0/MAP_SEAFLOOR_CAVERN_ROOM1:2","MAP_SEAFLOOR_CAVERN_ROOM2:0/MAP_SEAFLOOR_CAVERN_ROOM1:2":"MAP_SEAFLOOR_CAVERN_ROOM1:2/MAP_SEAFLOOR_CAVERN_ROOM2:0","MAP_SEAFLOOR_CAVERN_ROOM2:1/MAP_SEAFLOOR_CAVERN_ROOM4:0":"MAP_SEAFLOOR_CAVERN_ROOM4:0/MAP_SEAFLOOR_CAVERN_ROOM2:1","MAP_SEAFLOOR_CAVERN_ROOM2:2/MAP_SEAFLOOR_CAVERN_ROOM6:0":"MAP_SEAFLOOR_CAVERN_ROOM6:0/MAP_SEAFLOOR_CAVERN_ROOM2:2","MAP_SEAFLOOR_CAVERN_ROOM2:3/MAP_SEAFLOOR_CAVERN_ROOM7:0":"MAP_SEAFLOOR_CAVERN_ROOM7:0/MAP_SEAFLOOR_CAVERN_ROOM2:3","MAP_SEAFLOOR_CAVERN_ROOM3:0/MAP_SEAFLOOR_CAVERN_ROOM8:1":"MAP_SEAFLOOR_CAVERN_ROOM8:1/MAP_SEAFLOOR_CAVERN_ROOM3:0","MAP_SEAFLOOR_CAVERN_ROOM3:1/MAP_SEAFLOOR_CAVERN_ROOM7:1":"MAP_SEAFLOOR_CAVERN_ROOM7:1/MAP_SEAFLOOR_CAVERN_ROOM3:1","MAP_SEAFLOOR_CAVERN_ROOM3:2/MAP_SEAFLOOR_CAVERN_ROOM6:1":"MAP_SEAFLOOR_CAVERN_ROOM6:1/MAP_SEAFLOOR_CAVERN_ROOM3:2","MAP_SEAFLOOR_CAVERN_ROOM4:0/MAP_SEAFLOOR_CAVERN_ROOM2:1":"MAP_SEAFLOOR_CAVERN_ROOM2:1/MAP_SEAFLOOR_CAVERN_ROOM4:0","MAP_SEAFLOOR_CAVERN_ROOM4:1/MAP_SEAFLOOR_CAVERN_ROOM5:1":"MAP_SEAFLOOR_CAVERN_ROOM5:1/MAP_SEAFLOOR_CAVERN_ROOM4:1","MAP_SEAFLOOR_CAVERN_ROOM4:2/MAP_SEAFLOOR_CAVERN_ROOM5:2":"MAP_SEAFLOOR_CAVERN_ROOM5:2/MAP_SEAFLOOR_CAVERN_ROOM4:2","MAP_SEAFLOOR_CAVERN_ROOM4:3/MAP_SEAFLOOR_CAVERN_ENTRANCE:1!":"MAP_SEAFLOOR_CAVERN_ENTRANCE:1/MAP_SEAFLOOR_CAVERN_ROOM1:0","MAP_SEAFLOOR_CAVERN_ROOM5:0/MAP_SEAFLOOR_CAVERN_ROOM1:1":"MAP_SEAFLOOR_CAVERN_ROOM1:1/MAP_SEAFLOOR_CAVERN_ROOM5:0","MAP_SEAFLOOR_CAVERN_ROOM5:1/MAP_SEAFLOOR_CAVERN_ROOM4:1":"MAP_SEAFLOOR_CAVERN_ROOM4:1/MAP_SEAFLOOR_CAVERN_ROOM5:1","MAP_SEAFLOOR_CAVERN_ROOM5:2/MAP_SEAFLOOR_CAVERN_ROOM4:2":"MAP_SEAFLOOR_CAVERN_ROOM4:2/MAP_SEAFLOOR_CAVERN_ROOM5:2","MAP_SEAFLOOR_CAVERN_ROOM6:0/MAP_SEAFLOOR_CAVERN_ROOM2:2":"MAP_SEAFLOOR_CAVERN_ROOM2:2/MAP_SEAFLOOR_CAVERN_ROOM6:0","MAP_SEAFLOOR_CAVERN_ROOM6:1/MAP_SEAFLOOR_CAVERN_ROOM3:2":"MAP_SEAFLOOR_CAVERN_ROOM3:2/MAP_SEAFLOOR_CAVERN_ROOM6:1","MAP_SEAFLOOR_CAVERN_ROOM6:2/MAP_SEAFLOOR_CAVERN_ENTRANCE:1!":"MAP_SEAFLOOR_CAVERN_ENTRANCE:1/MAP_SEAFLOOR_CAVERN_ROOM1:0","MAP_SEAFLOOR_CAVERN_ROOM7:0/MAP_SEAFLOOR_CAVERN_ROOM2:3":"MAP_SEAFLOOR_CAVERN_ROOM2:3/MAP_SEAFLOOR_CAVERN_ROOM7:0","MAP_SEAFLOOR_CAVERN_ROOM7:1/MAP_SEAFLOOR_CAVERN_ROOM3:1":"MAP_SEAFLOOR_CAVERN_ROOM3:1/MAP_SEAFLOOR_CAVERN_ROOM7:1","MAP_SEAFLOOR_CAVERN_ROOM8:0/MAP_SEAFLOOR_CAVERN_ROOM9:0":"MAP_SEAFLOOR_CAVERN_ROOM9:0/MAP_SEAFLOOR_CAVERN_ROOM8:0","MAP_SEAFLOOR_CAVERN_ROOM8:1/MAP_SEAFLOOR_CAVERN_ROOM3:0":"MAP_SEAFLOOR_CAVERN_ROOM3:0/MAP_SEAFLOOR_CAVERN_ROOM8:1","MAP_SEAFLOOR_CAVERN_ROOM9:0/MAP_SEAFLOOR_CAVERN_ROOM8:0":"MAP_SEAFLOOR_CAVERN_ROOM8:0/MAP_SEAFLOOR_CAVERN_ROOM9:0","MAP_SEALED_CHAMBER_INNER_ROOM:0/MAP_SEALED_CHAMBER_OUTER_ROOM:0":"MAP_SEALED_CHAMBER_OUTER_ROOM:0/MAP_SEALED_CHAMBER_INNER_ROOM:0","MAP_SEALED_CHAMBER_OUTER_ROOM:0/MAP_SEALED_CHAMBER_INNER_ROOM:0":"MAP_SEALED_CHAMBER_INNER_ROOM:0/MAP_SEALED_CHAMBER_OUTER_ROOM:0","MAP_SECRET_BASE_BLUE_CAVE1:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_BLUE_CAVE2:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_BLUE_CAVE3:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_BLUE_CAVE4:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_BROWN_CAVE1:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_BROWN_CAVE2:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_BROWN_CAVE3:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_BROWN_CAVE4:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_RED_CAVE1:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_RED_CAVE2:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_RED_CAVE3:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_RED_CAVE4:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_SHRUB1:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_SHRUB2:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_SHRUB3:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_SHRUB4:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_TREE1:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_TREE2:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_TREE3:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_TREE4:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_YELLOW_CAVE1:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_YELLOW_CAVE2:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_YELLOW_CAVE3:0/MAP_DYNAMIC:-2!":"","MAP_SECRET_BASE_YELLOW_CAVE4:0/MAP_DYNAMIC:-2!":"","MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:0/MAP_ROUTE125:0":"MAP_ROUTE125:0/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:0","MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:0":"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:1","MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:2/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:6":"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:6/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:2","MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:3/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:7":"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:7/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:3","MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:3":"MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:3/MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM:0","MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:1":"MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:0","MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:0":"MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:1","MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:2/MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:1":"MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:2","MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:3/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:0":"MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:3","MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:4/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:1":"MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:4","MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:5/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:2":"MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:2/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:5","MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:6/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:2":"MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:2/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:6","MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:7/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:3":"MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:3/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:7","MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:3":"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:3/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:0","MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:4":"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:4/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:1","MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:2/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:5":"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:5/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:2","MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:3/MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM:0":"MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:3","MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:1":"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:0","MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:2":"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:2/MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:1","MAP_SKY_PILLAR_1F:0,1/MAP_SKY_PILLAR_OUTSIDE:1":"MAP_SKY_PILLAR_OUTSIDE:1/MAP_SKY_PILLAR_1F:0","MAP_SKY_PILLAR_1F:2/MAP_SKY_PILLAR_2F:0":"MAP_SKY_PILLAR_2F:0/MAP_SKY_PILLAR_1F:2","MAP_SKY_PILLAR_2F:0/MAP_SKY_PILLAR_1F:2":"MAP_SKY_PILLAR_1F:2/MAP_SKY_PILLAR_2F:0","MAP_SKY_PILLAR_2F:1/MAP_SKY_PILLAR_3F:0":"MAP_SKY_PILLAR_3F:0/MAP_SKY_PILLAR_2F:1","MAP_SKY_PILLAR_3F:0/MAP_SKY_PILLAR_2F:1":"MAP_SKY_PILLAR_2F:1/MAP_SKY_PILLAR_3F:0","MAP_SKY_PILLAR_3F:1/MAP_SKY_PILLAR_4F:0":"MAP_SKY_PILLAR_4F:0/MAP_SKY_PILLAR_3F:1","MAP_SKY_PILLAR_3F:2/MAP_SKY_PILLAR_4F:1":"MAP_SKY_PILLAR_4F:1/MAP_SKY_PILLAR_3F:2","MAP_SKY_PILLAR_4F:0/MAP_SKY_PILLAR_3F:1":"MAP_SKY_PILLAR_3F:1/MAP_SKY_PILLAR_4F:0","MAP_SKY_PILLAR_4F:1/MAP_SKY_PILLAR_3F:2":"MAP_SKY_PILLAR_3F:2/MAP_SKY_PILLAR_4F:1","MAP_SKY_PILLAR_4F:2/MAP_SKY_PILLAR_5F:0":"MAP_SKY_PILLAR_5F:0/MAP_SKY_PILLAR_4F:2","MAP_SKY_PILLAR_5F:0/MAP_SKY_PILLAR_4F:2":"MAP_SKY_PILLAR_4F:2/MAP_SKY_PILLAR_5F:0","MAP_SKY_PILLAR_5F:1/MAP_SKY_PILLAR_TOP:0":"MAP_SKY_PILLAR_TOP:0/MAP_SKY_PILLAR_5F:1","MAP_SKY_PILLAR_ENTRANCE:0/MAP_ROUTE131:0":"MAP_ROUTE131:0/MAP_SKY_PILLAR_ENTRANCE:0","MAP_SKY_PILLAR_ENTRANCE:1/MAP_SKY_PILLAR_OUTSIDE:0":"MAP_SKY_PILLAR_OUTSIDE:0/MAP_SKY_PILLAR_ENTRANCE:1","MAP_SKY_PILLAR_OUTSIDE:0/MAP_SKY_PILLAR_ENTRANCE:1":"MAP_SKY_PILLAR_ENTRANCE:1/MAP_SKY_PILLAR_OUTSIDE:0","MAP_SKY_PILLAR_OUTSIDE:1/MAP_SKY_PILLAR_1F:0":"MAP_SKY_PILLAR_1F:0,1/MAP_SKY_PILLAR_OUTSIDE:1","MAP_SKY_PILLAR_TOP:0/MAP_SKY_PILLAR_5F:1":"MAP_SKY_PILLAR_5F:1/MAP_SKY_PILLAR_TOP:0","MAP_SLATEPORT_CITY:0/MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:0":"MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:0,1/MAP_SLATEPORT_CITY:0","MAP_SLATEPORT_CITY:1/MAP_SLATEPORT_CITY_MART:0":"MAP_SLATEPORT_CITY_MART:0,1/MAP_SLATEPORT_CITY:1","MAP_SLATEPORT_CITY:10/MAP_SLATEPORT_CITY_HOUSE:0":"MAP_SLATEPORT_CITY_HOUSE:0,1/MAP_SLATEPORT_CITY:10","MAP_SLATEPORT_CITY:2/MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:0":"MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:0,1/MAP_SLATEPORT_CITY:2","MAP_SLATEPORT_CITY:3/MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY:0":"MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY:0,1/MAP_SLATEPORT_CITY:3","MAP_SLATEPORT_CITY:4/MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB:0":"MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB:0,1/MAP_SLATEPORT_CITY:4","MAP_SLATEPORT_CITY:5,7/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:0,1":"MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:0,1/MAP_SLATEPORT_CITY:5,7","MAP_SLATEPORT_CITY:6/MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE:0":"MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE:0,1/MAP_SLATEPORT_CITY:6","MAP_SLATEPORT_CITY:8/MAP_SLATEPORT_CITY_HARBOR:0":"MAP_SLATEPORT_CITY_HARBOR:0,1/MAP_SLATEPORT_CITY:8","MAP_SLATEPORT_CITY:9/MAP_SLATEPORT_CITY_HARBOR:2":"MAP_SLATEPORT_CITY_HARBOR:2,3/MAP_SLATEPORT_CITY:9","MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY:0,1/MAP_SLATEPORT_CITY:3":"MAP_SLATEPORT_CITY:3/MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY:0","MAP_SLATEPORT_CITY_HARBOR:0,1/MAP_SLATEPORT_CITY:8":"MAP_SLATEPORT_CITY:8/MAP_SLATEPORT_CITY_HARBOR:0","MAP_SLATEPORT_CITY_HARBOR:2,3/MAP_SLATEPORT_CITY:9":"MAP_SLATEPORT_CITY:9/MAP_SLATEPORT_CITY_HARBOR:2","MAP_SLATEPORT_CITY_HOUSE:0,1/MAP_SLATEPORT_CITY:10":"MAP_SLATEPORT_CITY:10/MAP_SLATEPORT_CITY_HOUSE:0","MAP_SLATEPORT_CITY_MART:0,1/MAP_SLATEPORT_CITY:1":"MAP_SLATEPORT_CITY:1/MAP_SLATEPORT_CITY_MART:0","MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE:0,1/MAP_SLATEPORT_CITY:6":"MAP_SLATEPORT_CITY:6/MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE:0","MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:0,1/MAP_SLATEPORT_CITY:5,7":"MAP_SLATEPORT_CITY:5,7/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:0,1","MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:2/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F:0":"MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F:0/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:2","MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F:0/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:2":"MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:2/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F:0","MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:0,1/MAP_SLATEPORT_CITY:0":"MAP_SLATEPORT_CITY:0/MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:0","MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:2/MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:0":"MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:0/MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:2","MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:0/MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:2":"MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:2/MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:0","MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB:0,1/MAP_SLATEPORT_CITY:4":"MAP_SLATEPORT_CITY:4/MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB:0","MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:0,1/MAP_SLATEPORT_CITY:2":"MAP_SLATEPORT_CITY:2/MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:0","MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:2/MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F:0":"MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F:0/MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:2","MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F:0/MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:2":"MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:2/MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F:0","MAP_SOOTOPOLIS_CITY:0/MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:0":"MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:0,1/MAP_SOOTOPOLIS_CITY:0","MAP_SOOTOPOLIS_CITY:1/MAP_SOOTOPOLIS_CITY_MART:0":"MAP_SOOTOPOLIS_CITY_MART:0,1/MAP_SOOTOPOLIS_CITY:1","MAP_SOOTOPOLIS_CITY:10/MAP_SOOTOPOLIS_CITY_HOUSE7:0":"MAP_SOOTOPOLIS_CITY_HOUSE7:0,1/MAP_SOOTOPOLIS_CITY:10","MAP_SOOTOPOLIS_CITY:11/MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE:0":"MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE:0,1/MAP_SOOTOPOLIS_CITY:11","MAP_SOOTOPOLIS_CITY:12/MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:0":"MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:0,1/MAP_SOOTOPOLIS_CITY:12","MAP_SOOTOPOLIS_CITY:2/MAP_SOOTOPOLIS_CITY_GYM_1F:0":"MAP_SOOTOPOLIS_CITY_GYM_1F:0,1/MAP_SOOTOPOLIS_CITY:2","MAP_SOOTOPOLIS_CITY:3/MAP_CAVE_OF_ORIGIN_ENTRANCE:0":"MAP_CAVE_OF_ORIGIN_ENTRANCE:0/MAP_SOOTOPOLIS_CITY:3","MAP_SOOTOPOLIS_CITY:4/MAP_SOOTOPOLIS_CITY_HOUSE1:0":"MAP_SOOTOPOLIS_CITY_HOUSE1:0,1/MAP_SOOTOPOLIS_CITY:4","MAP_SOOTOPOLIS_CITY:5/MAP_SOOTOPOLIS_CITY_HOUSE2:0":"MAP_SOOTOPOLIS_CITY_HOUSE2:0,1/MAP_SOOTOPOLIS_CITY:5","MAP_SOOTOPOLIS_CITY:6/MAP_SOOTOPOLIS_CITY_HOUSE3:0":"MAP_SOOTOPOLIS_CITY_HOUSE3:0,1/MAP_SOOTOPOLIS_CITY:6","MAP_SOOTOPOLIS_CITY:7/MAP_SOOTOPOLIS_CITY_HOUSE4:0":"MAP_SOOTOPOLIS_CITY_HOUSE4:0,1/MAP_SOOTOPOLIS_CITY:7","MAP_SOOTOPOLIS_CITY:8/MAP_SOOTOPOLIS_CITY_HOUSE5:0":"MAP_SOOTOPOLIS_CITY_HOUSE5:0,1/MAP_SOOTOPOLIS_CITY:8","MAP_SOOTOPOLIS_CITY:9/MAP_SOOTOPOLIS_CITY_HOUSE6:0":"MAP_SOOTOPOLIS_CITY_HOUSE6:0,1/MAP_SOOTOPOLIS_CITY:9","MAP_SOOTOPOLIS_CITY_GYM_1F:0,1/MAP_SOOTOPOLIS_CITY:2":"MAP_SOOTOPOLIS_CITY:2/MAP_SOOTOPOLIS_CITY_GYM_1F:0","MAP_SOOTOPOLIS_CITY_GYM_1F:2/MAP_SOOTOPOLIS_CITY_GYM_B1F:0":"MAP_SOOTOPOLIS_CITY_GYM_B1F:0/MAP_SOOTOPOLIS_CITY_GYM_1F:2","MAP_SOOTOPOLIS_CITY_GYM_B1F:0/MAP_SOOTOPOLIS_CITY_GYM_1F:2":"MAP_SOOTOPOLIS_CITY_GYM_1F:2/MAP_SOOTOPOLIS_CITY_GYM_B1F:0","MAP_SOOTOPOLIS_CITY_HOUSE1:0,1/MAP_SOOTOPOLIS_CITY:4":"MAP_SOOTOPOLIS_CITY:4/MAP_SOOTOPOLIS_CITY_HOUSE1:0","MAP_SOOTOPOLIS_CITY_HOUSE2:0,1/MAP_SOOTOPOLIS_CITY:5":"MAP_SOOTOPOLIS_CITY:5/MAP_SOOTOPOLIS_CITY_HOUSE2:0","MAP_SOOTOPOLIS_CITY_HOUSE3:0,1/MAP_SOOTOPOLIS_CITY:6":"MAP_SOOTOPOLIS_CITY:6/MAP_SOOTOPOLIS_CITY_HOUSE3:0","MAP_SOOTOPOLIS_CITY_HOUSE4:0,1/MAP_SOOTOPOLIS_CITY:7":"MAP_SOOTOPOLIS_CITY:7/MAP_SOOTOPOLIS_CITY_HOUSE4:0","MAP_SOOTOPOLIS_CITY_HOUSE5:0,1/MAP_SOOTOPOLIS_CITY:8":"MAP_SOOTOPOLIS_CITY:8/MAP_SOOTOPOLIS_CITY_HOUSE5:0","MAP_SOOTOPOLIS_CITY_HOUSE6:0,1/MAP_SOOTOPOLIS_CITY:9":"MAP_SOOTOPOLIS_CITY:9/MAP_SOOTOPOLIS_CITY_HOUSE6:0","MAP_SOOTOPOLIS_CITY_HOUSE7:0,1/MAP_SOOTOPOLIS_CITY:10":"MAP_SOOTOPOLIS_CITY:10/MAP_SOOTOPOLIS_CITY_HOUSE7:0","MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE:0,1/MAP_SOOTOPOLIS_CITY:11":"MAP_SOOTOPOLIS_CITY:11/MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE:0","MAP_SOOTOPOLIS_CITY_MART:0,1/MAP_SOOTOPOLIS_CITY:1":"MAP_SOOTOPOLIS_CITY:1/MAP_SOOTOPOLIS_CITY_MART:0","MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:0,1/MAP_SOOTOPOLIS_CITY:12":"MAP_SOOTOPOLIS_CITY:12/MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:0","MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:2/MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F:0":"MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F:0/MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:2","MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F:0/MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:2":"MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:2/MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F:0","MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:0,1/MAP_SOOTOPOLIS_CITY:0":"MAP_SOOTOPOLIS_CITY:0/MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:0","MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:2/MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:0":"MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:0/MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:2","MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:0/MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:2":"MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:2/MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:0","MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_SOUTHERN_ISLAND_EXTERIOR:0,1/MAP_SOUTHERN_ISLAND_INTERIOR:0,1":"MAP_SOUTHERN_ISLAND_INTERIOR:0,1/MAP_SOUTHERN_ISLAND_EXTERIOR:0,1","MAP_SOUTHERN_ISLAND_INTERIOR:0,1/MAP_SOUTHERN_ISLAND_EXTERIOR:0,1":"MAP_SOUTHERN_ISLAND_EXTERIOR:0,1/MAP_SOUTHERN_ISLAND_INTERIOR:0,1","MAP_SS_TIDAL_CORRIDOR:0/MAP_SS_TIDAL_ROOMS:0":"MAP_SS_TIDAL_ROOMS:0,1/MAP_SS_TIDAL_CORRIDOR:0","MAP_SS_TIDAL_CORRIDOR:1/MAP_SS_TIDAL_ROOMS:2":"MAP_SS_TIDAL_ROOMS:2,3/MAP_SS_TIDAL_CORRIDOR:1","MAP_SS_TIDAL_CORRIDOR:2/MAP_SS_TIDAL_ROOMS:4":"MAP_SS_TIDAL_ROOMS:4,5/MAP_SS_TIDAL_CORRIDOR:2","MAP_SS_TIDAL_CORRIDOR:3/MAP_SS_TIDAL_ROOMS:6":"MAP_SS_TIDAL_ROOMS:6,7/MAP_SS_TIDAL_CORRIDOR:3","MAP_SS_TIDAL_CORRIDOR:4/MAP_SS_TIDAL_ROOMS:8":"MAP_SS_TIDAL_ROOMS:8/MAP_SS_TIDAL_CORRIDOR:4","MAP_SS_TIDAL_CORRIDOR:5/MAP_SS_TIDAL_ROOMS:9":"MAP_SS_TIDAL_ROOMS:9/MAP_SS_TIDAL_CORRIDOR:5","MAP_SS_TIDAL_CORRIDOR:6/MAP_SS_TIDAL_ROOMS:10":"MAP_SS_TIDAL_ROOMS:10/MAP_SS_TIDAL_CORRIDOR:6","MAP_SS_TIDAL_CORRIDOR:7/MAP_SS_TIDAL_ROOMS:11":"MAP_SS_TIDAL_ROOMS:11/MAP_SS_TIDAL_CORRIDOR:7","MAP_SS_TIDAL_CORRIDOR:8/MAP_SS_TIDAL_LOWER_DECK:0":"MAP_SS_TIDAL_LOWER_DECK:0/MAP_SS_TIDAL_CORRIDOR:8","MAP_SS_TIDAL_LOWER_DECK:0/MAP_SS_TIDAL_CORRIDOR:8":"MAP_SS_TIDAL_CORRIDOR:8/MAP_SS_TIDAL_LOWER_DECK:0","MAP_SS_TIDAL_ROOMS:0,1/MAP_SS_TIDAL_CORRIDOR:0":"MAP_SS_TIDAL_CORRIDOR:0/MAP_SS_TIDAL_ROOMS:0","MAP_SS_TIDAL_ROOMS:10/MAP_SS_TIDAL_CORRIDOR:6":"MAP_SS_TIDAL_CORRIDOR:6/MAP_SS_TIDAL_ROOMS:10","MAP_SS_TIDAL_ROOMS:11/MAP_SS_TIDAL_CORRIDOR:7":"MAP_SS_TIDAL_CORRIDOR:7/MAP_SS_TIDAL_ROOMS:11","MAP_SS_TIDAL_ROOMS:2,3/MAP_SS_TIDAL_CORRIDOR:1":"MAP_SS_TIDAL_CORRIDOR:1/MAP_SS_TIDAL_ROOMS:2","MAP_SS_TIDAL_ROOMS:4,5/MAP_SS_TIDAL_CORRIDOR:2":"MAP_SS_TIDAL_CORRIDOR:2/MAP_SS_TIDAL_ROOMS:4","MAP_SS_TIDAL_ROOMS:6,7/MAP_SS_TIDAL_CORRIDOR:3":"MAP_SS_TIDAL_CORRIDOR:3/MAP_SS_TIDAL_ROOMS:6","MAP_SS_TIDAL_ROOMS:8/MAP_SS_TIDAL_CORRIDOR:4":"MAP_SS_TIDAL_CORRIDOR:4/MAP_SS_TIDAL_ROOMS:8","MAP_SS_TIDAL_ROOMS:9/MAP_SS_TIDAL_CORRIDOR:5":"MAP_SS_TIDAL_CORRIDOR:5/MAP_SS_TIDAL_ROOMS:9","MAP_TERRA_CAVE_END:0/MAP_TERRA_CAVE_ENTRANCE:1":"MAP_TERRA_CAVE_ENTRANCE:1/MAP_TERRA_CAVE_END:0","MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!":"","MAP_TERRA_CAVE_ENTRANCE:1/MAP_TERRA_CAVE_END:0":"MAP_TERRA_CAVE_END:0/MAP_TERRA_CAVE_ENTRANCE:1","MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!":"","MAP_TRAINER_HILL_1F:0/MAP_TRAINER_HILL_ENTRANCE:2":"MAP_TRAINER_HILL_ENTRANCE:2/MAP_TRAINER_HILL_1F:0","MAP_TRAINER_HILL_1F:1/MAP_TRAINER_HILL_2F:0":"MAP_TRAINER_HILL_2F:0/MAP_TRAINER_HILL_1F:1","MAP_TRAINER_HILL_2F:0/MAP_TRAINER_HILL_1F:1":"MAP_TRAINER_HILL_1F:1/MAP_TRAINER_HILL_2F:0","MAP_TRAINER_HILL_2F:1/MAP_TRAINER_HILL_3F:0":"MAP_TRAINER_HILL_3F:0/MAP_TRAINER_HILL_2F:1","MAP_TRAINER_HILL_3F:0/MAP_TRAINER_HILL_2F:1":"MAP_TRAINER_HILL_2F:1/MAP_TRAINER_HILL_3F:0","MAP_TRAINER_HILL_3F:1/MAP_TRAINER_HILL_4F:0":"MAP_TRAINER_HILL_4F:0/MAP_TRAINER_HILL_3F:1","MAP_TRAINER_HILL_4F:0/MAP_TRAINER_HILL_3F:1":"MAP_TRAINER_HILL_3F:1/MAP_TRAINER_HILL_4F:0","MAP_TRAINER_HILL_4F:1/MAP_TRAINER_HILL_ROOF:0":"MAP_TRAINER_HILL_ROOF:0/MAP_TRAINER_HILL_4F:1","MAP_TRAINER_HILL_ELEVATOR:0,1/MAP_TRAINER_HILL_ROOF:1":"MAP_TRAINER_HILL_ROOF:1/MAP_TRAINER_HILL_ELEVATOR:1","MAP_TRAINER_HILL_ENTRANCE:0,1/MAP_ROUTE111:4":"MAP_ROUTE111:4/MAP_TRAINER_HILL_ENTRANCE:0","MAP_TRAINER_HILL_ENTRANCE:2/MAP_TRAINER_HILL_1F:0":"MAP_TRAINER_HILL_1F:0/MAP_TRAINER_HILL_ENTRANCE:2","MAP_TRAINER_HILL_ROOF:0/MAP_TRAINER_HILL_4F:1":"MAP_TRAINER_HILL_4F:1/MAP_TRAINER_HILL_ROOF:0","MAP_TRAINER_HILL_ROOF:1/MAP_TRAINER_HILL_ELEVATOR:1":"MAP_TRAINER_HILL_ELEVATOR:0,1/MAP_TRAINER_HILL_ROOF:1","MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!":"","MAP_UNDERWATER_ROUTE105:0/MAP_UNDERWATER_MARINE_CAVE:0!":"MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!","MAP_UNDERWATER_ROUTE105:1/MAP_UNDERWATER_MARINE_CAVE:0!":"MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!","MAP_UNDERWATER_ROUTE125:0/MAP_UNDERWATER_MARINE_CAVE:0!":"MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!","MAP_UNDERWATER_ROUTE125:1/MAP_UNDERWATER_MARINE_CAVE:0!":"MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!","MAP_UNDERWATER_ROUTE126:0/MAP_UNDERWATER_SOOTOPOLIS_CITY:0":"MAP_UNDERWATER_SOOTOPOLIS_CITY:0,1/MAP_UNDERWATER_ROUTE126:0","MAP_UNDERWATER_ROUTE127:0/MAP_UNDERWATER_MARINE_CAVE:0!":"MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!","MAP_UNDERWATER_ROUTE127:1/MAP_UNDERWATER_MARINE_CAVE:0!":"MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!","MAP_UNDERWATER_ROUTE128:0/MAP_UNDERWATER_SEAFLOOR_CAVERN:0":"MAP_UNDERWATER_SEAFLOOR_CAVERN:0/MAP_UNDERWATER_ROUTE128:0","MAP_UNDERWATER_ROUTE129:0/MAP_UNDERWATER_MARINE_CAVE:0!":"MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!","MAP_UNDERWATER_ROUTE129:1/MAP_UNDERWATER_MARINE_CAVE:0!":"MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!","MAP_UNDERWATER_ROUTE134:0/MAP_UNDERWATER_SEALED_CHAMBER:0":"MAP_UNDERWATER_SEALED_CHAMBER:0/MAP_UNDERWATER_ROUTE134:0","MAP_UNDERWATER_SEAFLOOR_CAVERN:0/MAP_UNDERWATER_ROUTE128:0":"MAP_UNDERWATER_ROUTE128:0/MAP_UNDERWATER_SEAFLOOR_CAVERN:0","MAP_UNDERWATER_SEALED_CHAMBER:0/MAP_UNDERWATER_ROUTE134:0":"MAP_UNDERWATER_ROUTE134:0/MAP_UNDERWATER_SEALED_CHAMBER:0","MAP_UNDERWATER_SOOTOPOLIS_CITY:0,1/MAP_UNDERWATER_ROUTE126:0":"MAP_UNDERWATER_ROUTE126:0/MAP_UNDERWATER_SOOTOPOLIS_CITY:0","MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!":"","MAP_VERDANTURF_TOWN:0/MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY:0":"MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY:0,1/MAP_VERDANTURF_TOWN:0","MAP_VERDANTURF_TOWN:1/MAP_VERDANTURF_TOWN_MART:0":"MAP_VERDANTURF_TOWN_MART:0,1/MAP_VERDANTURF_TOWN:1","MAP_VERDANTURF_TOWN:2/MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:0":"MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:0,1/MAP_VERDANTURF_TOWN:2","MAP_VERDANTURF_TOWN:3/MAP_VERDANTURF_TOWN_WANDAS_HOUSE:0":"MAP_VERDANTURF_TOWN_WANDAS_HOUSE:0,1/MAP_VERDANTURF_TOWN:3","MAP_VERDANTURF_TOWN:4/MAP_RUSTURF_TUNNEL:1":"MAP_RUSTURF_TUNNEL:1/MAP_VERDANTURF_TOWN:4","MAP_VERDANTURF_TOWN:5/MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE:0":"MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE:0,1/MAP_VERDANTURF_TOWN:5","MAP_VERDANTURF_TOWN:6/MAP_VERDANTURF_TOWN_HOUSE:0":"MAP_VERDANTURF_TOWN_HOUSE:0,1/MAP_VERDANTURF_TOWN:6","MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY:0,1/MAP_VERDANTURF_TOWN:0":"MAP_VERDANTURF_TOWN:0/MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY:0","MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE:0,1/MAP_VERDANTURF_TOWN:5":"MAP_VERDANTURF_TOWN:5/MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE:0","MAP_VERDANTURF_TOWN_HOUSE:0,1/MAP_VERDANTURF_TOWN:6":"MAP_VERDANTURF_TOWN:6/MAP_VERDANTURF_TOWN_HOUSE:0","MAP_VERDANTURF_TOWN_MART:0,1/MAP_VERDANTURF_TOWN:1":"MAP_VERDANTURF_TOWN:1/MAP_VERDANTURF_TOWN_MART:0","MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:0,1/MAP_VERDANTURF_TOWN:2":"MAP_VERDANTURF_TOWN:2/MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:0","MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:2/MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:0":"MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:0/MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:2","MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:0/MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:2":"MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:2/MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:0","MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!":"MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!","MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!":"MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!","MAP_VERDANTURF_TOWN_WANDAS_HOUSE:0,1/MAP_VERDANTURF_TOWN:3":"MAP_VERDANTURF_TOWN:3/MAP_VERDANTURF_TOWN_WANDAS_HOUSE:0","MAP_VICTORY_ROAD_1F:0/MAP_EVER_GRANDE_CITY:2":"MAP_EVER_GRANDE_CITY:2/MAP_VICTORY_ROAD_1F:0","MAP_VICTORY_ROAD_1F:1/MAP_EVER_GRANDE_CITY:3":"MAP_EVER_GRANDE_CITY:3/MAP_VICTORY_ROAD_1F:1","MAP_VICTORY_ROAD_1F:2/MAP_VICTORY_ROAD_B1F:5":"MAP_VICTORY_ROAD_B1F:5/MAP_VICTORY_ROAD_1F:2","MAP_VICTORY_ROAD_1F:3/MAP_VICTORY_ROAD_B1F:2":"MAP_VICTORY_ROAD_B1F:2/MAP_VICTORY_ROAD_1F:3","MAP_VICTORY_ROAD_1F:4/MAP_VICTORY_ROAD_B1F:4":"MAP_VICTORY_ROAD_B1F:4/MAP_VICTORY_ROAD_1F:4","MAP_VICTORY_ROAD_B1F:0/MAP_VICTORY_ROAD_B2F:0":"MAP_VICTORY_ROAD_B2F:0/MAP_VICTORY_ROAD_B1F:0","MAP_VICTORY_ROAD_B1F:1/MAP_VICTORY_ROAD_B2F:2":"MAP_VICTORY_ROAD_B2F:2/MAP_VICTORY_ROAD_B1F:1","MAP_VICTORY_ROAD_B1F:2/MAP_VICTORY_ROAD_1F:3":"MAP_VICTORY_ROAD_1F:3/MAP_VICTORY_ROAD_B1F:2","MAP_VICTORY_ROAD_B1F:3/MAP_VICTORY_ROAD_B2F:1":"MAP_VICTORY_ROAD_B2F:1/MAP_VICTORY_ROAD_B1F:3","MAP_VICTORY_ROAD_B1F:4/MAP_VICTORY_ROAD_1F:4":"MAP_VICTORY_ROAD_1F:4/MAP_VICTORY_ROAD_B1F:4","MAP_VICTORY_ROAD_B1F:5/MAP_VICTORY_ROAD_1F:2":"MAP_VICTORY_ROAD_1F:2/MAP_VICTORY_ROAD_B1F:5","MAP_VICTORY_ROAD_B1F:6/MAP_VICTORY_ROAD_B2F:3":"MAP_VICTORY_ROAD_B2F:3/MAP_VICTORY_ROAD_B1F:6","MAP_VICTORY_ROAD_B2F:0/MAP_VICTORY_ROAD_B1F:0":"MAP_VICTORY_ROAD_B1F:0/MAP_VICTORY_ROAD_B2F:0","MAP_VICTORY_ROAD_B2F:1/MAP_VICTORY_ROAD_B1F:3":"MAP_VICTORY_ROAD_B1F:3/MAP_VICTORY_ROAD_B2F:1","MAP_VICTORY_ROAD_B2F:2/MAP_VICTORY_ROAD_B1F:1":"MAP_VICTORY_ROAD_B1F:1/MAP_VICTORY_ROAD_B2F:2","MAP_VICTORY_ROAD_B2F:3/MAP_VICTORY_ROAD_B1F:6":"MAP_VICTORY_ROAD_B1F:6/MAP_VICTORY_ROAD_B2F:3"}} diff --git a/worlds/pokemon_emerald/data/items.json b/worlds/pokemon_emerald/data/items.json new file mode 100644 index 000000000000..cea72eb65047 --- /dev/null +++ b/worlds/pokemon_emerald/data/items.json @@ -0,0 +1,1481 @@ +{ + "ITEM_BADGE_1": { + "label": "Stone Badge", + "classification": "PROGRESSION", + "tags": ["Badge", "Unique"] + }, + "ITEM_BADGE_2": { + "label": "Knuckle Badge", + "classification": "PROGRESSION", + "tags": ["Badge", "Unique"] + }, + "ITEM_BADGE_3": { + "label": "Dynamo Badge", + "classification": "PROGRESSION", + "tags": ["Badge", "Unique"] + }, + "ITEM_BADGE_4": { + "label": "Heat Badge", + "classification": "PROGRESSION", + "tags": ["Badge", "Unique"] + }, + "ITEM_BADGE_5": { + "label": "Balance Badge", + "classification": "PROGRESSION", + "tags": ["Badge", "Unique"] + }, + "ITEM_BADGE_6": { + "label": "Feather Badge", + "classification": "PROGRESSION", + "tags": ["Badge", "Unique"] + }, + "ITEM_BADGE_7": { + "label": "Mind Badge", + "classification": "PROGRESSION", + "tags": ["Badge", "Unique"] + }, + "ITEM_BADGE_8": { + "label": "Rain Badge", + "classification": "PROGRESSION", + "tags": ["Badge", "Unique"] + }, + + + "ITEM_HM01_CUT": { + "label": "HM01 Cut", + "classification": "PROGRESSION", + "tags": ["HM", "Unique"] + }, + "ITEM_HM02_FLY": { + "label": "HM02 Fly", + "classification": "PROGRESSION", + "tags": ["HM", "Unique"] + }, + "ITEM_HM03_SURF": { + "label": "HM03 Surf", + "classification": "PROGRESSION", + "tags": ["HM", "Unique"] + }, + "ITEM_HM04_STRENGTH": { + "label": "HM04 Strength", + "classification": "PROGRESSION", + "tags": ["HM", "Unique"] + }, + "ITEM_HM05_FLASH": { + "label": "HM05 Flash", + "classification": "PROGRESSION", + "tags": ["HM", "Unique"] + }, + "ITEM_HM06_ROCK_SMASH": { + "label": "HM06 Rock Smash", + "classification": "PROGRESSION", + "tags": ["HM", "Unique"] + }, + "ITEM_HM07_WATERFALL": { + "label": "HM07 Waterfall", + "classification": "PROGRESSION", + "tags": ["HM", "Unique"] + }, + "ITEM_HM08_DIVE": { + "label": "HM08 Dive", + "classification": "PROGRESSION", + "tags": ["HM", "Unique"] + }, + + + "ITEM_MACH_BIKE": { + "label": "Mach Bike", + "classification": "PROGRESSION", + "tags": ["Bike", "Unique"] + }, + "ITEM_ACRO_BIKE": { + "label": "Acro Bike", + "classification": "PROGRESSION", + "tags": ["Bike", "Unique"] + }, + + + "ITEM_DEVON_GOODS": { + "label": "Devon Goods", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_LETTER": { + "label": "Letter", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_ITEMFINDER": { + "label": "Itemfinder", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_METEORITE": { + "label": "Meteorite", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_GO_GOGGLES": { + "label": "Go Goggles", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_ROOM_1_KEY": { + "label": "Room 1 Key", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_ROOM_2_KEY": { + "label": "Room 2 Key", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_ROOM_4_KEY": { + "label": "Room 4 Key", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_ROOM_6_KEY": { + "label": "Room 6 Key", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_STORAGE_KEY": { + "label": "Storage Key", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_SCANNER": { + "label": "Scanner", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_BASEMENT_KEY": { + "label": "Basement Key", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_DEVON_SCOPE": { + "label": "Devon Scope", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_MAGMA_EMBLEM": { + "label": "Magma Emblem", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_POKEBLOCK_CASE": { + "label": "Pokeblock Case", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_SS_TICKET": { + "label": "S.S. Ticket", + "classification": "PROGRESSION", + "tags": ["Unique"] + }, + "ITEM_WAILMER_PAIL": { + "label": "Wailmer Pail", + "classification": "USEFUL", + "tags": ["Unique"] + }, + + + "ITEM_POWDER_JAR": { + "label": "Powder Jar", + "classification": "FILLER", + "tags": ["Unique"] + }, + "ITEM_COIN_CASE": { + "label": "Coin Case", + "classification": "FILLER", + "tags": ["Unique"] + }, + "ITEM_CONTEST_PASS": { + "label": "Contest Pass", + "classification": "FILLER", + "tags": ["Unique"] + }, + "ITEM_SOOT_SACK": { + "label": "Soot Sack", + "classification": "FILLER", + "tags": ["Unique"] + }, + "ITEM_ROOT_FOSSIL": { + "label": "Root Fossil", + "classification": "FILLER", + "tags": ["Unique"] + }, + "ITEM_CLAW_FOSSIL": { + "label": "Claw Fossil", + "classification": "FILLER", + "tags": ["Unique"] + }, + "ITEM_EON_TICKET": { + "label": "Eon Ticket", + "classification": "FILLER", + "tags": ["Unique"] + }, + "ITEM_OLD_SEA_MAP": { + "label": "Old Sea Map", + "classification": "FILLER", + "tags": ["Unique"] + }, + + + "ITEM_OLD_ROD": { + "label": "Old Rod", + "classification": "USEFUL", + "tags": ["Rod", "Unique"] + }, + "ITEM_GOOD_ROD": { + "label": "Good Rod", + "classification": "USEFUL", + "tags": ["Rod", "Unique"] + }, + "ITEM_SUPER_ROD": { + "label": "Super Rod", + "classification": "USEFUL", + "tags": ["Rod", "Unique"] + }, + + + "ITEM_MASTER_BALL": { + "label": "Master Ball", + "classification": "USEFUL", + "tags": ["Ball"] + }, + "ITEM_ULTRA_BALL": { + "label": "Ultra Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_GREAT_BALL": { + "label": "Great Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_POKE_BALL": { + "label": "Poke Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_SAFARI_BALL": { + "label": "Safari Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_NET_BALL": { + "label": "Net Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_DIVE_BALL": { + "label": "Dive Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_NEST_BALL": { + "label": "Nest Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_REPEAT_BALL": { + "label": "Repeat Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_TIMER_BALL": { + "label": "Timer Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_LUXURY_BALL": { + "label": "Luxury Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + "ITEM_PREMIER_BALL": { + "label": "Premier Ball", + "classification": "FILLER", + "tags": ["Ball"] + }, + + + "ITEM_POTION": { + "label": "Potion", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_ANTIDOTE": { + "label": "Antidote", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_BURN_HEAL": { + "label": "Burn Heal", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_ICE_HEAL": { + "label": "Ice Heal", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_AWAKENING": { + "label": "Awakening", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_PARALYZE_HEAL": { + "label": "Paralyze Heal", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_FULL_RESTORE": { + "label": "Full Restore", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_MAX_POTION": { + "label": "Max Potion", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_HYPER_POTION": { + "label": "Hyper Potion", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_SUPER_POTION": { + "label": "Super Potion", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_FULL_HEAL": { + "label": "Full Heal", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_REVIVE": { + "label": "Revive", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_MAX_REVIVE": { + "label": "Max Revive", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_FRESH_WATER": { + "label": "Fresh Water", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_SODA_POP": { + "label": "Soda Pop", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_LEMONADE": { + "label": "Lemonade", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_MOOMOO_MILK": { + "label": "Moomoo Milk", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_ENERGY_POWDER": { + "label": "Energy Powder", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_ENERGY_ROOT": { + "label": "Energy Root", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_HEAL_POWDER": { + "label": "Heal Powder", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_REVIVAL_HERB": { + "label": "Revival Herb", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_ETHER": { + "label": "Ether", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_MAX_ETHER": { + "label": "Max Ether", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_ELIXIR": { + "label": "Elixir", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_MAX_ELIXIR": { + "label": "Max Elixir", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_LAVA_COOKIE": { + "label": "Lava Cookie", + "classification": "FILLER", + "tags": ["Heal"] + }, + "ITEM_SACRED_ASH": { + "label": "Sacred Ash", + "classification": "USEFUL", + "tags": ["Heal"] + }, + + + "ITEM_BERRY_JUICE": { + "label": "Berry Juice", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_SHOAL_SALT": { + "label": "Shoal Salt", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_SHOAL_SHELL": { + "label": "Shoal Shell", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_RED_SHARD": { + "label": "Red Shard", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_BLUE_SHARD": { + "label": "Blue Shard", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_YELLOW_SHARD": { + "label": "Yellow Shard", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_GREEN_SHARD": { + "label": "Green Shard", + "classification": "FILLER", + "tags": ["Misc"] + }, + + + "ITEM_HP_UP": { + "label": "HP Up", + "classification": "FILLER", + "tags": ["Vitamin"] + }, + "ITEM_PROTEIN": { + "label": "Protein", + "classification": "FILLER", + "tags": ["Vitamin"] + }, + "ITEM_IRON": { + "label": "Iron", + "classification": "FILLER", + "tags": ["Vitamin"] + }, + "ITEM_CARBOS": { + "label": "Carbos", + "classification": "FILLER", + "tags": ["Vitamin"] + }, + "ITEM_CALCIUM": { + "label": "Calcium", + "classification": "FILLER", + "tags": ["Vitamin"] + }, + "ITEM_ZINC": { + "label": "Zinc", + "classification": "FILLER", + "tags": ["Vitamin"] + }, + "ITEM_PP_UP": { + "label": "PP Up", + "classification": "FILLER", + "tags": ["Vitamin"] + }, + "ITEM_PP_MAX": { + "label": "PP Max", + "classification": "FILLER", + "tags": ["Vitamin"] + }, + "ITEM_RARE_CANDY": { + "label": "Rare Candy", + "classification": "USEFUL", + "tags": ["Vitamin"] + }, + + + "ITEM_GUARD_SPEC": { + "label": "Guard Spec", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_DIRE_HIT": { + "label": "Dire Hit", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_X_ATTACK": { + "label": "X Attack", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_X_DEFEND": { + "label": "X Defend", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_X_SPEED": { + "label": "X Speed", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_X_ACCURACY": { + "label": "X Accuracy", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_X_SPECIAL": { + "label": "X Special", + "classification": "FILLER", + "tags": ["Misc"] + }, + + + "ITEM_REPEL": { + "label": "Repel", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_SUPER_REPEL": { + "label": "Super Repel", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_MAX_REPEL": { + "label": "Max Repel", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_POKE_DOLL": { + "label": "Poke Doll", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_FLUFFY_TAIL": { + "label": "Fluffy Tail", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_ESCAPE_ROPE": { + "label": "Escape Rope", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_BLUE_FLUTE": { + "label": "Blue Flute", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_YELLOW_FLUTE": { + "label": "Yellow Flute", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_RED_FLUTE": { + "label": "Red Flute", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_BLACK_FLUTE": { + "label": "Black Flute", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_WHITE_FLUTE": { + "label": "White Flute", + "classification": "FILLER", + "tags": ["Misc"] + }, + "ITEM_HEART_SCALE": { + "label": "Heart Scale", + "classification": "FILLER", + "tags": ["Misc"] + }, + + + "ITEM_SUN_STONE": { + "label": "Sun Stone", + "classification": "USEFUL", + "tags": ["EvoStone"] + }, + "ITEM_MOON_STONE": { + "label": "Moon Stone", + "classification": "USEFUL", + "tags": ["EvoStone"] + }, + "ITEM_FIRE_STONE": { + "label": "Fire Stone", + "classification": "USEFUL", + "tags": ["EvoStone"] + }, + "ITEM_THUNDER_STONE": { + "label": "Thunder Stone", + "classification": "USEFUL", + "tags": ["EvoStone"] + }, + "ITEM_WATER_STONE": { + "label": "Water Stone", + "classification": "USEFUL", + "tags": ["EvoStone"] + }, + "ITEM_LEAF_STONE": { + "label": "Leaf Stone", + "classification": "USEFUL", + "tags": ["EvoStone"] + }, + + + "ITEM_TINY_MUSHROOM": { + "label": "Tiny Mushroom", + "classification": "FILLER", + "tags": ["Money"] + }, + "ITEM_BIG_MUSHROOM": { + "label": "Big Mushroom", + "classification": "FILLER", + "tags": ["Money"] + }, + "ITEM_PEARL": { + "label": "Pearl", + "classification": "FILLER", + "tags": ["Money"] + }, + "ITEM_BIG_PEARL": { + "label": "Big Pearl", + "classification": "FILLER", + "tags": ["Money"] + }, + "ITEM_STARDUST": { + "label": "Stardust", + "classification": "FILLER", + "tags": ["Money"] + }, + "ITEM_STAR_PIECE": { + "label": "Star Piece", + "classification": "FILLER", + "tags": ["Money"] + }, + "ITEM_NUGGET": { + "label": "Nugget", + "classification": "FILLER", + "tags": ["Money"] + }, + + + "ITEM_ORANGE_MAIL": { + "label": "Orange Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_HARBOR_MAIL": { + "label": "Harbor Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_GLITTER_MAIL": { + "label": "Glitter Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_MECH_MAIL": { + "label": "Mech Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_WOOD_MAIL": { + "label": "Wood Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_WAVE_MAIL": { + "label": "Wave Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_BEAD_MAIL": { + "label": "Bead Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_SHADOW_MAIL": { + "label": "Shadow Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_TROPIC_MAIL": { + "label": "Tropic Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_DREAM_MAIL": { + "label": "Dream Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_FAB_MAIL": { + "label": "Fab Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + "ITEM_RETRO_MAIL": { + "label": "Retro Mail", + "classification": "FILLER", + "tags": ["Mail"] + }, + + + "ITEM_CHERI_BERRY": { + "label": "Cheri Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_CHESTO_BERRY": { + "label": "Chesto Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_PECHA_BERRY": { + "label": "Pecha Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_RAWST_BERRY": { + "label": "Rawst Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_ASPEAR_BERRY": { + "label": "Aspear Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_LEPPA_BERRY": { + "label": "Leppa Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_ORAN_BERRY": { + "label": "Oran Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_PERSIM_BERRY": { + "label": "Persim Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_LUM_BERRY": { + "label": "Lum Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_SITRUS_BERRY": { + "label": "Sitrus Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_FIGY_BERRY": { + "label": "Figy Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_WIKI_BERRY": { + "label": "Wiki Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_MAGO_BERRY": { + "label": "Mago Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_AGUAV_BERRY": { + "label": "Aguav Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_IAPAPA_BERRY": { + "label": "Iapapa Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_RAZZ_BERRY": { + "label": "Razz Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_BLUK_BERRY": { + "label": "Bluk Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_NANAB_BERRY": { + "label": "Nanab Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_WEPEAR_BERRY": { + "label": "Wepear Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_PINAP_BERRY": { + "label": "Pinap Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_POMEG_BERRY": { + "label": "Pomeg Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_KELPSY_BERRY": { + "label": "Kelpsy Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_QUALOT_BERRY": { + "label": "Qualot Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_HONDEW_BERRY": { + "label": "Hondew Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_GREPA_BERRY": { + "label": "Grepa Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_TAMATO_BERRY": { + "label": "Tamato Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_CORNN_BERRY": { + "label": "Cornn Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_MAGOST_BERRY": { + "label": "Magost Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_RABUTA_BERRY": { + "label": "Rabuta Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_NOMEL_BERRY": { + "label": "Nomel Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_SPELON_BERRY": { + "label": "Spelon Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_PAMTRE_BERRY": { + "label": "Pamtre Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_WATMEL_BERRY": { + "label": "Watmel Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_DURIN_BERRY": { + "label": "Durin Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_BELUE_BERRY": { + "label": "Belue Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_LIECHI_BERRY": { + "label": "Liechi Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_GANLON_BERRY": { + "label": "Ganlon Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_SALAC_BERRY": { + "label": "Salac Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_PETAYA_BERRY": { + "label": "Petaya Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_APICOT_BERRY": { + "label": "Apicot Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_LANSAT_BERRY": { + "label": "Lansat Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + "ITEM_STARF_BERRY": { + "label": "Starf Berry", + "classification": "FILLER", + "tags": ["Berry"] + }, + + + "ITEM_BRIGHT_POWDER": { + "label": "Bright Powder", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_WHITE_HERB": { + "label": "White Herb", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_MACHO_BRACE": { + "label": "Macho Brace", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_EXP_SHARE": { + "label": "Exp. Share", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_QUICK_CLAW": { + "label": "Quick Claw", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SOOTHE_BELL": { + "label": "Soothe Bell", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_MENTAL_HERB": { + "label": "Mental Herb", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_CHOICE_BAND": { + "label": "Choice Band", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_KINGS_ROCK": { + "label": "King's Rock", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SILVER_POWDER": { + "label": "Silver Powder", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_AMULET_COIN": { + "label": "Amulet Coin", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_CLEANSE_TAG": { + "label": "Cleanse Tag", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SOUL_DEW": { + "label": "Soul Dew", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_DEEP_SEA_TOOTH": { + "label": "Deep Sea Tooth", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_DEEP_SEA_SCALE": { + "label": "Deep Sea Scale", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SMOKE_BALL": { + "label": "Smoke Ball", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_EVERSTONE": { + "label": "Everstone", + "classification": "FILLER", + "tags": ["Held"] + }, + "ITEM_FOCUS_BAND": { + "label": "Focus Band", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_LUCKY_EGG": { + "label": "Lucky Egg", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SCOPE_LENS": { + "label": "Scope Lens", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_METAL_COAT": { + "label": "Metal Coat", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_LEFTOVERS": { + "label": "Leftovers", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_DRAGON_SCALE": { + "label": "Dragon Scale", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_LIGHT_BALL": { + "label": "Light Ball", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SOFT_SAND": { + "label": "Soft Sand", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_HARD_STONE": { + "label": "Hard Stone", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_MIRACLE_SEED": { + "label": "Miracle Seed", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_BLACK_GLASSES": { + "label": "Black Glasses", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_BLACK_BELT": { + "label": "Black Belt", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_MAGNET": { + "label": "Magnet", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_MYSTIC_WATER": { + "label": "Mystic Water", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SHARP_BEAK": { + "label": "Sharp Beak", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_POISON_BARB": { + "label": "Poison Barb", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_NEVER_MELT_ICE": { + "label": "Never-Melt Ice", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SPELL_TAG": { + "label": "Spell Tag", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_TWISTED_SPOON": { + "label": "Twisted Spoon", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_CHARCOAL": { + "label": "Charcoal", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_DRAGON_FANG": { + "label": "Dragon Fang", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SILK_SCARF": { + "label": "Silk Scarf", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_UP_GRADE": { + "label": "Up-Grade", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SHELL_BELL": { + "label": "Shell Bell", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_SEA_INCENSE": { + "label": "Sea Incense", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_LAX_INCENSE": { + "label": "Lax Incense", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_LUCKY_PUNCH": { + "label": "Lucky Punch", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_METAL_POWDER": { + "label": "Metal Powder", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_THICK_CLUB": { + "label": "Thick Club", + "classification": "USEFUL", + "tags": ["Held"] + }, + "ITEM_STICK": { + "label": "Stick", + "classification": "FILLER", + "tags": ["Held"] + }, + "ITEM_RED_SCARF": { + "label": "Red Scarf", + "classification": "FILLER", + "tags": ["Held"] + }, + "ITEM_BLUE_SCARF": { + "label": "Blue Scarf", + "classification": "FILLER", + "tags": ["Held"] + }, + "ITEM_PINK_SCARF": { + "label": "Pink Scarf", + "classification": "FILLER", + "tags": ["Held"] + }, + "ITEM_GREEN_SCARF": { + "label": "Green Scarf", + "classification": "FILLER", + "tags": ["Held"] + }, + "ITEM_YELLOW_SCARF": { + "label": "Yellow Scarf", + "classification": "FILLER", + "tags": ["Held"] + }, + + + "ITEM_TM01_FOCUS_PUNCH": { + "label": "TM01", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM02_DRAGON_CLAW": { + "label": "TM02", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM03_WATER_PULSE": { + "label": "TM03", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM04_CALM_MIND": { + "label": "TM04", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM05_ROAR": { + "label": "TM05", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM06_TOXIC": { + "label": "TM06", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM07_HAIL": { + "label": "TM07", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM08_BULK_UP": { + "label": "TM08", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM09_BULLET_SEED": { + "label": "TM09", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM10_HIDDEN_POWER": { + "label": "TM10", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM11_SUNNY_DAY": { + "label": "TM11", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM12_TAUNT": { + "label": "TM12", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM13_ICE_BEAM": { + "label": "TM13", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM14_BLIZZARD": { + "label": "TM14", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM15_HYPER_BEAM": { + "label": "TM15", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM16_LIGHT_SCREEN": { + "label": "TM16", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM17_PROTECT": { + "label": "TM17", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM18_RAIN_DANCE": { + "label": "TM18", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM19_GIGA_DRAIN": { + "label": "TM19", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM20_SAFEGUARD": { + "label": "TM20", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM21_FRUSTRATION": { + "label": "TM21", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM22_SOLAR_BEAM": { + "label": "TM22", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM23_IRON_TAIL": { + "label": "TM23", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM24_THUNDERBOLT": { + "label": "TM24", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM25_THUNDER": { + "label": "TM25", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM26_EARTHQUAKE": { + "label": "TM26", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM27_RETURN": { + "label": "TM27", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM28_DIG": { + "label": "TM28", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM29_PSYCHIC": { + "label": "TM29", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM30_SHADOW_BALL": { + "label": "TM30", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM31_BRICK_BREAK": { + "label": "TM31", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM32_DOUBLE_TEAM": { + "label": "TM32", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM33_REFLECT": { + "label": "TM33", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM34_SHOCK_WAVE": { + "label": "TM34", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM35_FLAMETHROWER": { + "label": "TM35", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM36_SLUDGE_BOMB": { + "label": "TM36", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM37_SANDSTORM": { + "label": "TM37", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM38_FIRE_BLAST": { + "label": "TM38", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM39_ROCK_TOMB": { + "label": "TM39", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM40_AERIAL_ACE": { + "label": "TM40", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM41_TORMENT": { + "label": "TM41", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM42_FACADE": { + "label": "TM42", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM43_SECRET_POWER": { + "label": "TM43", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM44_REST": { + "label": "TM44", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM45_ATTRACT": { + "label": "TM45", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM46_THIEF": { + "label": "TM46", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM47_STEEL_WING": { + "label": "TM47", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM48_SKILL_SWAP": { + "label": "TM48", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM49_SNATCH": { + "label": "TM49", + "classification": "USEFUL", + "tags": ["TM"] + }, + "ITEM_TM50_OVERHEAT": { + "label": "TM50", + "classification": "USEFUL", + "tags": ["TM"] + } +} diff --git a/worlds/pokemon_emerald/data/locations.json b/worlds/pokemon_emerald/data/locations.json new file mode 100644 index 000000000000..a44ec204a02c --- /dev/null +++ b/worlds/pokemon_emerald/data/locations.json @@ -0,0 +1,1441 @@ +{ + "BADGE_1": { + "label": "Rustboro Gym - Stone Badge", + "tags": ["Badge"] + }, + "BADGE_2": { + "label": "Dewford Gym - Knuckle Badge", + "tags": ["Badge"] + }, + "BADGE_3": { + "label": "Mauville Gym - Dynamo Badge", + "tags": ["Badge"] + }, + "BADGE_4": { + "label": "Lavaridge Gym - Heat Badge", + "tags": ["Badge"] + }, + "BADGE_5": { + "label": "Petalburg Gym - Balance Badge", + "tags": ["Badge"] + }, + "BADGE_6": { + "label": "Fortree Gym - Feather Badge", + "tags": ["Badge"] + }, + "BADGE_7": { + "label": "Mossdeep Gym - Mind Badge", + "tags": ["Badge"] + }, + "BADGE_8": { + "label": "Sootopolis Gym - Rain Badge", + "tags": ["Badge"] + }, + + "NPC_GIFT_RECEIVED_HM01": { + "label": "Rustboro City - HM01 from Cutter's House", + "tags": ["HM"] + }, + "NPC_GIFT_RECEIVED_HM02": { + "label": "Route 119 - HM02 from Rival Battle", + "tags": ["HM"] + }, + "NPC_GIFT_RECEIVED_HM03": { + "label": "Petalburg City - HM03 from Wally's Uncle", + "tags": ["HM"] + }, + "NPC_GIFT_RECEIVED_HM04": { + "label": "Rusturf Tunnel - HM04 from Tunneler", + "tags": ["HM"] + }, + "NPC_GIFT_RECEIVED_HM05": { + "label": "Granite Cave 1F - HM05 from Hiker", + "tags": ["HM"] + }, + "NPC_GIFT_RECEIVED_HM06": { + "label": "Mauville City - HM06 from Rock Smash Guy", + "tags": ["HM"] + }, + "NPC_GIFT_RECEIVED_HM07": { + "label": "Sootopolis City - HM07 from Wallace", + "tags": ["HM"] + }, + "NPC_GIFT_RECEIVED_HM08": { + "label": "Mossdeep City - HM08 from Steven's House", + "tags": ["HM"] + }, + + "NPC_GIFT_RECEIVED_ACRO_BIKE": { + "label": "Mauville City - Acro Bike", + "tags": ["Bike"] + }, + "NPC_GIFT_RECEIVED_MACH_BIKE": { + "label": "Mauville City - Mach Bike", + "tags": ["Bike"] + }, + + "NPC_GIFT_RECEIVED_WAILMER_PAIL": { + "label": "Route 104 - Wailmer Pail from Flower Shop Lady", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_DEVON_GOODS_RUSTURF_TUNNEL": { + "label": "Rusturf Tunnel - Recover Devon Goods", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_LETTER": { + "label": "Devon Corp 3F - Letter from Mr. Stone", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_COIN_CASE": { + "label": "Mauville City - Coin Case from Lady in House", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_METEORITE": { + "label": "Mt Chimney - Meteorite from Machine", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_GO_GOGGLES": { + "label": "Lavaridge Town - Go Goggles from Rival", + "tags": ["KeyItem"] + }, + "NPC_GIFT_GOT_BASEMENT_KEY_FROM_WATTSON": { + "label": "Mauville City - Basement Key from Wattson", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_ITEMFINDER": { + "label": "Route 110 - Itemfinder from Rival", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_DEVON_SCOPE": { + "label": "Route 120 - Devon Scope from Steven", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_MAGMA_EMBLEM": { + "label": "Mt Pyre Summit - Magma Emblem from Old Lady", + "tags": ["KeyItem"] + }, + "ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY": { + "label": "Abandoned Ship - Captain's Office Key", + "tags": ["KeyItem"] + }, + "HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY": { + "label": "Abandoned Ship HF - Hidden Item in Room 1", + "tags": ["KeyItem"] + }, + "HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY": { + "label": "Abandoned Ship HF - Hidden Item in Room 3", + "tags": ["KeyItem"] + }, + "HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY": { + "label": "Abandoned Ship HF - Hidden Item in Room 4", + "tags": ["KeyItem"] + }, + "HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY": { + "label": "Abandoned Ship HF - Hidden Item in Room 5", + "tags": ["KeyItem"] + }, + "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER": { + "label": "Abandoned Ship HF - Item in Room 2", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_POKEBLOCK_CASE": { + "label": "Lilycove City - Pokeblock Case from Contest Hall", + "tags": ["KeyItem"] + }, + "NPC_GIFT_RECEIVED_SS_TICKET": { + "label": "Littleroot Town - S.S. Ticket from Norman", + "tags": ["Ferry"] + }, + + "NPC_GIFT_RECEIVED_OLD_ROD": { + "label": "Dewford Town - Old Rod from Fisherman", + "tags": ["Rod"] + }, + "NPC_GIFT_RECEIVED_GOOD_ROD": { + "label": "Route 118 - Good Rod from Fisherman", + "tags": ["Rod"] + }, + "NPC_GIFT_RECEIVED_SUPER_ROD": { + "label": "Mossdeep City - Super Rod from Fisherman in House", + "tags": ["Rod"] + }, + + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_CALCIUM": { + "label": "Artisan Cave B1F - Hidden Item 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_IRON": { + "label": "Artisan Cave B1F - Hidden Item 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_PROTEIN": { + "label": "Artisan Cave B1F - Hidden Item 3", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_ZINC": { + "label": "Artisan Cave B1F - Hidden Item 4", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET": { + "label": "Fallarbor Town - Hidden Item in Crater", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_1": { + "label": "Granite Cave B2F - Hidden Item After Crumbling Floor", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_2": { + "label": "Granite Cave B2F - Hidden Item on Platform", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_JAGGED_PASS_FULL_HEAL": { + "label": "Jagged Pass - Hidden Item in Grass", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_JAGGED_PASS_GREAT_BALL": { + "label": "Jagged Pass - Hidden Item in Corner", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_LAVARIDGE_TOWN_ICE_HEAL": { + "label": "Lavaridge Town - Hidden Item in Springs", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_LILYCOVE_CITY_HEART_SCALE": { + "label": "Lilycove City - Hidden Item on Beach West", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_LILYCOVE_CITY_POKE_BALL": { + "label": "Lilycove City - Hidden Item on Beach East", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_LILYCOVE_CITY_PP_UP": { + "label": "Lilycove City - Hidden Item on Beach North", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_MT_PYRE_EXTERIOR_MAX_ETHER": { + "label": "Mt Pyre Exterior - Hidden Item First Grave", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_MT_PYRE_EXTERIOR_ULTRA_BALL": { + "label": "Mt Pyre Exterior - Hidden Item Second Grave", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_MT_PYRE_SUMMIT_RARE_CANDY": { + "label": "Mt Pyre Summit - Hidden Item in Grass", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_MT_PYRE_SUMMIT_ZINC": { + "label": "Mt Pyre Summit - Hidden Item Grave", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_NAVEL_ROCK_TOP_SACRED_ASH": { + "label": "Navel Rock Top - Hidden Item Sacred Ash", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_PETALBURG_CITY_RARE_CANDY": { + "label": "Petalburg City - Hidden Item Past Pond South", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_PETALBURG_WOODS_POKE_BALL": { + "label": "Petalburg Woods - Hidden Item After Grunt", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_PETALBURG_WOODS_POTION": { + "label": "Petalburg Woods - Hidden Item Southeast", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_1": { + "label": "Petalburg Woods - Hidden Item Past Tree North", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_2": { + "label": "Petalburg Woods - Hidden Item Past Tree South", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_104_ANTIDOTE": { + "label": "Route 104 - Hidden Item on Beach 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_104_HEART_SCALE": { + "label": "Route 104 - Hidden Item on Beach 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_104_POTION": { + "label": "Route 104 - Hidden Item on Beach 3", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_104_POKE_BALL": { + "label": "Route 104 - Hidden Item Behind Flower Shop 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_104_SUPER_POTION": { + "label": "Route 104 - Hidden Item Behind Flower Shop 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_105_BIG_PEARL": { + "label": "Route 105 - Hidden Item Between Trainers", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_105_HEART_SCALE": { + "label": "Route 105 - Hidden Item on Small Island", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_106_HEART_SCALE": { + "label": "Route 106 - Hidden Item on Beach 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_106_STARDUST": { + "label": "Route 106 - Hidden Item on Beach 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_106_POKE_BALL": { + "label": "Route 106 - Hidden Item on Beach 3", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_108_RARE_CANDY": { + "label": "Route 108 - Hidden Item on Rock", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_109_REVIVE": { + "label": "Route 109 - Hidden Item on Beach Southwest", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_109_ETHER": { + "label": "Route 109 - Hidden Item on Beach Southeast", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_109_HEART_SCALE_2": { + "label": "Route 109 - Hidden Item on Beach Under Umbrella", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_109_GREAT_BALL": { + "label": "Route 109 - Hidden Item on Beach West", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_109_HEART_SCALE_1": { + "label": "Route 109 - Hidden Item on Beach Behind Old Man", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_109_HEART_SCALE_3": { + "label": "Route 109 - Hidden Item in Front of Couple", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_110_FULL_HEAL": { + "label": "Route 110 - Hidden Item South of Rival", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_110_GREAT_BALL": { + "label": "Route 110 - Hidden Item North of Rival", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_110_REVIVE": { + "label": "Route 110 - Hidden Item Behind Two Trainers", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_110_POKE_BALL": { + "label": "Route 110 - Hidden Item South of Berries", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_111_PROTEIN": { + "label": "Route 111 - Hidden Item Desert Behind Tower", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_111_RARE_CANDY": { + "label": "Route 111 - Hidden Item Desert on Rock 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_111_STARDUST": { + "label": "Route 111 - Hidden Item Desert on Rock 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_113_ETHER": { + "label": "Route 113 - Hidden Item Mound West of Three Trainers", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_113_NUGGET": { + "label": "Route 113 - Hidden Item Mound Between Trainers", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_113_TM32": { + "label": "Route 113 - Hidden Item Mound West of Workshop", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_114_CARBOS": { + "label": "Route 114 - Hidden Item Rock in Grass", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_114_REVIVE": { + "label": "Route 114 - Hidden Item West of Bridge", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_115_HEART_SCALE": { + "label": "Route 115 - Hidden Item Behind Trainer on Beach", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_116_BLACK_GLASSES": { + "label": "Route 116 - Hidden Item in East", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_116_SUPER_POTION": { + "label": "Route 116 - Hidden Item in Tree Maze", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_117_REPEL": { + "label": "Route 117 - Hidden Item Behind Flower Patch", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_118_HEART_SCALE": { + "label": "Route 118 - Hidden Item West on Rock", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_118_IRON": { + "label": "Route 118 - Hidden Item East on Rock", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_119_FULL_HEAL": { + "label": "Route 119 - Hidden Item in South Tall Grass", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_119_CALCIUM": { + "label": "Route 119 - Hidden Item Across South Rail", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_119_ULTRA_BALL": { + "label": "Route 119 - Hidden Item in East Tall Grass", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_119_MAX_ETHER": { + "label": "Route 119 - Hidden Item Next to Waterfall", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_120_RARE_CANDY_1": { + "label": "Route 120 - Hidden Item Behind Trees", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_120_REVIVE": { + "label": "Route 120 - Hidden Item in North Tall Grass", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_120_ZINC": { + "label": "Route 120 - Hidden Item in Tall Grass Maze", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_120_RARE_CANDY_2": { + "label": "Route 120 - Hidden Item Behind Southwest Pool", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_121_HP_UP": { + "label": "Route 121 - Hidden Item West of Grunts", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_121_FULL_HEAL": { + "label": "Route 121 - Hidden Item in Maze 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_121_MAX_REVIVE": { + "label": "Route 121 - Hidden Item in Maze 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_121_NUGGET": { + "label": "Route 121 - Hidden Item Behind Tree", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_123_PP_UP": { + "label": "Route 123 - Hidden Item East Behind Tree 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_123_RARE_CANDY": { + "label": "Route 123 - Hidden Item East Behind Tree 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_123_HYPER_POTION": { + "label": "Route 123 - Hidden Item on Rock Before Ledges", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_123_SUPER_REPEL": { + "label": "Route 123 - Hidden Item in North Path Grass", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_123_REVIVE": { + "label": "Route 123 - Hidden Item Behind House", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_128_HEART_SCALE_1": { + "label": "Route 128 - Hidden Item North Island", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_128_HEART_SCALE_2": { + "label": "Route 128 - Hidden Item Center Island", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_ROUTE_128_HEART_SCALE_3": { + "label": "Route 128 - Hidden Item Southwest Island", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_ZINC": { + "label": "Safari Zone NE - Hidden Item North", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_RARE_CANDY": { + "label": "Safari Zone NE - Hidden Item East", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_FULL_RESTORE": { + "label": "Safari Zone SE - Hidden Item in South Grass 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_PP_UP": { + "label": "Safari Zone SE - Hidden Item in South Grass 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_SS_TIDAL_LOWER_DECK_LEFTOVERS": { + "label": "SS Tidal - Hidden Item in Lower Deck Trash Can", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_TRICK_HOUSE_NUGGET": { + "label": "Trick House - Hidden Item", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_124_GREEN_SHARD": { + "label": "Route 124 UW - Hidden Item in Big Area", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_124_CARBOS": { + "label": "Route 124 UW - Hidden Item in Tunnel Alcove", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_124_CALCIUM": { + "label": "Route 124 UW - Hidden Item in North Tunnel 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_2": { + "label": "Route 124 UW - Hidden Item in North Tunnel 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_124_PEARL": { + "label": "Route 124 UW - Hidden Item in Small Area North", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_124_BIG_PEARL": { + "label": "Route 124 UW - Hidden Item in Small Area Middle", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_1": { + "label": "Route 124 UW - Hidden Item in Small Area South", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_126_STARDUST": { + "label": "Route 126 UW - Hidden Item Northeast", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_126_ULTRA_BALL": { + "label": "Route 126 UW - Hidden Item in North Alcove", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_126_BIG_PEARL": { + "label": "Route 126 UW - Hidden Item in Southeast", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_126_HEART_SCALE": { + "label": "Route 126 UW - Hidden Item in Northwest Alcove", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_126_BLUE_SHARD": { + "label": "Route 126 UW - Hidden Item in Southwest Area", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_126_IRON": { + "label": "Route 126 UW - Hidden Item in West Area 1", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_126_PEARL": { + "label": "Route 126 UW - Hidden Item in West Area 2", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_126_YELLOW_SHARD": { + "label": "Route 126 UW - Hidden Item in West Area 3", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_127_STAR_PIECE": { + "label": "Route 127 UW - Hidden Item in West Area", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_127_HEART_SCALE": { + "label": "Route 127 UW - Hidden Item in Center Area", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_127_HP_UP": { + "label": "Route 127 UW - Hidden Item in East Area", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_127_RED_SHARD": { + "label": "Route 127 UW - Hidden Item in Northeast Area", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_128_PEARL": { + "label": "Route 128 UW - Hidden Item in East Area", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_UNDERWATER_128_PROTEIN": { + "label": "Route 128 UW - Hidden Item in Small Area", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_VICTORY_ROAD_1F_ULTRA_BALL": { + "label": "Victory Road 1F - Hidden Item on Southeast Ledge", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_VICTORY_ROAD_B2F_ELIXIR": { + "label": "Victory Road B2F - Hidden Item Above Waterfall", + "tags": ["HiddenItem"] + }, + "HIDDEN_ITEM_VICTORY_ROAD_B2F_MAX_REPEL": { + "label": "Victory Road B2F - Hidden Item in Northeast Corner", + "tags": ["HiddenItem"] + }, + + "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18": { + "label": "Abandoned Ship HF - Item in Room 1", + "tags": ["OverworldItem"] + }, + "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE": { + "label": "Abandoned Ship HF - Item in Room 3", + "tags": ["OverworldItem"] + }, + "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL": { + "label": "Abandoned Ship HF - Item in Room 6", + "tags": ["OverworldItem"] + }, + "ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL": { + "label": "Abandoned Ship 1F - Item in East Side Northwest Room", + "tags": ["OverworldItem"] + }, + "ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE": { + "label": "Abandoned Ship 1F - Item in West Side North Room", + "tags": ["OverworldItem"] + }, + "ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE": { + "label": "Abandoned Ship B1F - Item in South Rooms", + "tags": ["OverworldItem"] + }, + "ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13": { + "label": "Abandoned Ship B1F - Item in Storage Room", + "tags": ["OverworldItem"] + }, + "ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL": { + "label": "Abandoned Ship B1F - Item in North Rooms", + "tags": ["OverworldItem"] + }, + "ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL": { + "label": "Aqua Hideout B1F - Item in Center Room 1", + "tags": ["OverworldItem"] + }, + "ITEM_AQUA_HIDEOUT_B1F_NUGGET": { + "label": "Aqua Hideout B1F - Item in Center Room 2", + "tags": ["OverworldItem"] + }, + "ITEM_AQUA_HIDEOUT_B1F_MAX_ELIXIR": { + "label": "Aqua Hideout B1F - Item in East Room", + "tags": ["OverworldItem"] + }, + "ITEM_AQUA_HIDEOUT_B2F_NEST_BALL": { + "label": "Aqua Hideout B2F - Item in Long Hallway", + "tags": ["OverworldItem"] + }, + "ITEM_ARTISAN_CAVE_1F_CARBOS": { + "label": "Artisan Cave 1F - Item", + "tags": ["OverworldItem"] + }, + "ITEM_ARTISAN_CAVE_B1F_HP_UP": { + "label": "Artisan Cave B1F - Item", + "tags": ["OverworldItem"] + }, + "ITEM_FIERY_PATH_FIRE_STONE": { + "label": "Fiery Path - Item Behind Boulders 1", + "tags": ["OverworldItem"] + }, + "ITEM_FIERY_PATH_TM06": { + "label": "Fiery Path - Item Behind Boulders 2", + "tags": ["OverworldItem"] + }, + "ITEM_GRANITE_CAVE_1F_ESCAPE_ROPE": { + "label": "Granite Cave 1F - Item Before Ladder", + "tags": ["OverworldItem"] + }, + "ITEM_GRANITE_CAVE_B1F_POKE_BALL": { + "label": "Granite Cave B1F - Item in Alcove", + "tags": ["OverworldItem"] + }, + "ITEM_GRANITE_CAVE_B2F_RARE_CANDY": { + "label": "Granite Cave B2F - Item After Crumbling Floor", + "tags": ["OverworldItem"] + }, + "ITEM_GRANITE_CAVE_B2F_REPEL": { + "label": "Granite Cave B2F - Item After Mud Slope", + "tags": ["OverworldItem"] + }, + "ITEM_JAGGED_PASS_BURN_HEAL": { + "label": "Jagged Pass - Item Below Hideout", + "tags": ["OverworldItem"] + }, + "ITEM_LILYCOVE_CITY_MAX_REPEL": { + "label": "Lilycove City - Item on Peninsula", + "tags": ["OverworldItem"] + }, + "ITEM_MAGMA_HIDEOUT_1F_RARE_CANDY": { + "label": "Magma Hideout 1F - Item on Ledge", + "tags": ["OverworldItem"] + }, + "ITEM_MAGMA_HIDEOUT_2F_2R_FULL_RESTORE": { + "label": "Magma Hideout 2F - Item on West Platform", + "tags": ["OverworldItem"] + }, + "ITEM_MAGMA_HIDEOUT_2F_2R_MAX_ELIXIR": { + "label": "Magma Hideout 2F - Item on East Platform", + "tags": ["OverworldItem"] + }, + "ITEM_MAGMA_HIDEOUT_3F_1R_NUGGET": { + "label": "Magma Hideout 3F - Item Before Last Floor", + "tags": ["OverworldItem"] + }, + "ITEM_MAGMA_HIDEOUT_3F_2R_PP_MAX": { + "label": "Magma Hideout 3F - Item in Drill Room", + "tags": ["OverworldItem"] + }, + "ITEM_MAGMA_HIDEOUT_3F_3R_ECAPE_ROPE": { + "label": "Magma Hideout 3F - Item After Groudon", + "tags": ["OverworldItem"] + }, + "ITEM_MAGMA_HIDEOUT_4F_MAX_REVIVE": { + "label": "Magma Hideout 4F - Item Before Groudon", + "tags": ["OverworldItem"] + }, + "ITEM_MAUVILLE_CITY_X_SPEED": { + "label": "Mauville City - Item", + "tags": ["OverworldItem"] + }, + "ITEM_METEOR_FALLS_1F_1R_FULL_HEAL": { + "label": "Meteor Falls 1F - Item Northeast", + "tags": ["OverworldItem"] + }, + "ITEM_METEOR_FALLS_1F_1R_MOON_STONE": { + "label": "Meteor Falls 1F - Item West", + "tags": ["OverworldItem"] + }, + "ITEM_METEOR_FALLS_1F_1R_PP_UP": { + "label": "Meteor Falls 1F - Item Below Waterfall", + "tags": ["OverworldItem"] + }, + "ITEM_METEOR_FALLS_1F_1R_TM23": { + "label": "Meteor Falls 1F - Item Before Steven's Cave", + "tags": ["OverworldItem"] + }, + "ITEM_METEOR_FALLS_B1F_2R_TM02": { + "label": "Meteor Falls B1F - Item in North Cave", + "tags": ["OverworldItem"] + }, + "ITEM_MOSSDEEP_CITY_NET_BALL": { + "label": "Mossdeep City - Item", + "tags": ["OverworldItem"] + }, + "ITEM_MT_PYRE_2F_ULTRA_BALL": { + "label": "Mt Pyre 2F - Item", + "tags": ["OverworldItem"] + }, + "ITEM_MT_PYRE_3F_SUPER_REPEL": { + "label": "Mt Pyre 3F - Item", + "tags": ["OverworldItem"] + }, + "ITEM_MT_PYRE_4F_SEA_INCENSE": { + "label": "Mt Pyre 4F - Item", + "tags": ["OverworldItem"] + }, + "ITEM_MT_PYRE_5F_LAX_INCENSE": { + "label": "Mt Pyre 5F - Item", + "tags": ["OverworldItem"] + }, + "ITEM_MT_PYRE_6F_TM30": { + "label": "Mt Pyre 6F - Item", + "tags": ["OverworldItem"] + }, + "ITEM_MT_PYRE_EXTERIOR_TM48": { + "label": "Mt Pyre Exterior - Item 1", + "tags": ["OverworldItem"] + }, + "ITEM_MT_PYRE_EXTERIOR_MAX_POTION": { + "label": "Mt Pyre Exterior - Item 2", + "tags": ["OverworldItem"] + }, + "ITEM_NEW_MAUVILLE_ESCAPE_ROPE": { + "label": "New Mauville - Item 1", + "tags": ["OverworldItem"] + }, + "ITEM_NEW_MAUVILLE_PARALYZE_HEAL": { + "label": "New Mauville - Item 2", + "tags": ["OverworldItem"] + }, + "ITEM_NEW_MAUVILLE_FULL_HEAL": { + "label": "New Mauville - Item 3", + "tags": ["OverworldItem"] + }, + "ITEM_NEW_MAUVILLE_THUNDER_STONE": { + "label": "New Mauville - Item 4", + "tags": ["OverworldItem"] + }, + "ITEM_NEW_MAUVILLE_ULTRA_BALL": { + "label": "New Mauville - Item 5", + "tags": ["OverworldItem"] + }, + "ITEM_PETALBURG_CITY_ETHER": { + "label": "Petalburg City - Item Past Pond South", + "tags": ["OverworldItem"] + }, + "ITEM_PETALBURG_CITY_MAX_REVIVE": { + "label": "Petalburg City - Item Past Pond North", + "tags": ["OverworldItem"] + }, + "ITEM_PETALBURG_WOODS_ETHER": { + "label": "Petalburg Woods - Item Northwest", + "tags": ["OverworldItem"] + }, + "ITEM_PETALBURG_WOODS_PARALYZE_HEAL": { + "label": "Petalburg Woods - Item Southwest", + "tags": ["OverworldItem"] + }, + "ITEM_PETALBURG_WOODS_GREAT_BALL": { + "label": "Petalburg Woods - Item Past Tree Northeast", + "tags": ["OverworldItem"] + }, + "ITEM_PETALBURG_WOODS_X_ATTACK": { + "label": "Petalburg Woods - Item Past Tree South", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_102_POTION": { + "label": "Route 102 - Item", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_103_GUARD_SPEC": { + "label": "Route 103 - Item Near Berries", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_103_PP_UP": { + "label": "Route 103 - Item in Tree Maze", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_104_POKE_BALL": { + "label": "Route 104 - Item Near Briney on Ledge", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_104_POTION": { + "label": "Route 104 - Item Behind Flower Shop", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_104_X_ACCURACY": { + "label": "Route 104 - Item Behind Tree", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_104_PP_UP": { + "label": "Route 104 - Item East Past Pond", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_105_IRON": { + "label": "Route 105 - Item on Island", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_106_PROTEIN": { + "label": "Route 106 - Item on West Beach", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_108_STAR_PIECE": { + "label": "Route 108 - Item Between Trainers", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_109_POTION": { + "label": "Route 109 - Item on Beach", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_109_PP_UP": { + "label": "Route 109 - Item on Island", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_110_DIRE_HIT": { + "label": "Route 110 - Item South of Rival", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_110_ELIXIR": { + "label": "Route 110 - Item South of Berries", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_110_RARE_CANDY": { + "label": "Route 110 - Item on Island", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_111_ELIXIR": { + "label": "Route 111 - Item Near Winstrates", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_111_HP_UP": { + "label": "Route 111 - Item West of Pond Near Winstrates", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_111_STARDUST": { + "label": "Route 111 - Item Desert Near Tower", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_111_TM37": { + "label": "Route 111 - Item Desert South", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_112_NUGGET": { + "label": "Route 112 - Item on Ledges", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_113_SUPER_REPEL": { + "label": "Route 113 - Item Past Three Trainers", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_113_MAX_ETHER": { + "label": "Route 113 - Item on Ledge", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_113_HYPER_POTION": { + "label": "Route 113 - Item Near Fallarbor South", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_114_ENERGY_POWDER": { + "label": "Route 114 - Item Between Trainers", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_114_PROTEIN": { + "label": "Route 114 - Item Behind Smashable Rock", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_114_RARE_CANDY": { + "label": "Route 114 - Item Above Waterfall", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_115_SUPER_POTION": { + "label": "Route 115 - Item on Beach", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_115_PP_UP": { + "label": "Route 115 - Item on Ledge", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_115_GREAT_BALL": { + "label": "Route 115 - Item Behind Smashable Rock", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_115_HEAL_POWDER": { + "label": "Route 115 - Item North Near Trainers", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_115_TM01": { + "label": "Route 115 - Item Near Mud Slope", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_115_IRON": { + "label": "Route 115 - Item Past Mud Slope", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_116_REPEL": { + "label": "Route 116 - Item in Grass", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_116_X_SPECIAL": { + "label": "Route 116 - Item Near Tunnel", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_116_POTION": { + "label": "Route 116 - Item in Tree Maze 1", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_116_ETHER": { + "label": "Route 116 - Item in Tree Maze 2", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_116_HP_UP": { + "label": "Route 116 - Item in East", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_117_GREAT_BALL": { + "label": "Route 117 - Item Behind Flower Patch", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_117_REVIVE": { + "label": "Route 117 - Item Behind Tree", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_118_HYPER_POTION": { + "label": "Route 118 - Item", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_119_SUPER_REPEL": { + "label": "Route 119 - Item in South Tall Grass 1", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_119_HYPER_POTION_1": { + "label": "Route 119 - Item in South Tall Grass 2", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_119_ZINC": { + "label": "Route 119 - Item Across River South", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_119_HYPER_POTION_2": { + "label": "Route 119 - Item Near Mud Slope", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_119_ELIXIR_1": { + "label": "Route 119 - Item East of Mud Slope", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_119_ELIXIR_2": { + "label": "Route 119 - Item on River Bank", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_119_LEAF_STONE": { + "label": "Route 119 - Item Near South Waterfall", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_119_NUGGET": { + "label": "Route 119 - Item Above North Waterfall 1", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_119_RARE_CANDY": { + "label": "Route 119 - Item Above North Waterfall 2", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_120_NEST_BALL": { + "label": "Route 120 - Item Near North Pond", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_120_REVIVE": { + "label": "Route 120 - Item in North Puddles", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_120_NUGGET": { + "label": "Route 120 - Item in Tall Grass Maze", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_120_HYPER_POTION": { + "label": "Route 120 - Item in Tall Grass South", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_120_FULL_HEAL": { + "label": "Route 120 - Item Behind Southwest Pool", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_121_ZINC": { + "label": "Route 121 - Item Near Safari Zone", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_121_REVIVE": { + "label": "Route 121 - Item in Maze 1", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_121_CARBOS": { + "label": "Route 121 - Item in Maze 2", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_123_ULTRA_BALL": { + "label": "Route 123 - Item Below Ledges", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_123_ELIXIR": { + "label": "Route 123 - Item on Ledges 1", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_123_REVIVAL_HERB": { + "label": "Route 123 - Item on Ledges 2", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_123_PP_UP": { + "label": "Route 123 - Item on Ledges 3", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_123_CALCIUM": { + "label": "Route 123 - Item on Ledges 4", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_124_RED_SHARD": { + "label": "Route 124 - Item in Northwest Area", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_124_YELLOW_SHARD": { + "label": "Route 124 - Item in Northeast Area", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_124_BLUE_SHARD": { + "label": "Route 124 - Item in Southwest Area", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_125_BIG_PEARL": { + "label": "Route 125 - Item Between Trainers", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_126_GREEN_SHARD": { + "label": "Route 126 - Item in Separated Area", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_127_ZINC": { + "label": "Route 127 - Item North", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_127_CARBOS": { + "label": "Route 127 - Item East", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_127_RARE_CANDY": { + "label": "Route 127 - Item Between Trainers", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_132_PROTEIN": { + "label": "Route 132 - Item 1", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_132_RARE_CANDY": { + "label": "Route 132 - Item 2", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_133_BIG_PEARL": { + "label": "Route 133 - Item 1", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_133_MAX_REVIVE": { + "label": "Route 133 - Item 2", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_133_STAR_PIECE": { + "label": "Route 133 - Item 3", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_134_CARBOS": { + "label": "Route 134 - Item 1", + "tags": ["OverworldItem"] + }, + "ITEM_ROUTE_134_STAR_PIECE": { + "label": "Route 134 - Item 2", + "tags": ["OverworldItem"] + }, + "ITEM_RUSTBORO_CITY_X_DEFEND": { + "label": "Rustboro City - Item Behind Fences", + "tags": ["OverworldItem"] + }, + "ITEM_RUSTURF_TUNNEL_POKE_BALL": { + "label": "Rusturf Tunnel - Item West", + "tags": ["OverworldItem"] + }, + "ITEM_RUSTURF_TUNNEL_MAX_ETHER": { + "label": "Rusturf Tunnel - Item East", + "tags": ["OverworldItem"] + }, + "ITEM_SAFARI_ZONE_NORTH_CALCIUM": { + "label": "Safari Zone N - Item in Grass", + "tags": ["OverworldItem"] + }, + "ITEM_SAFARI_ZONE_NORTH_EAST_NUGGET": { + "label": "Safari Zone NE - Item on Ledge", + "tags": ["OverworldItem"] + }, + "ITEM_SAFARI_ZONE_NORTH_WEST_TM22": { + "label": "Safari Zone NW - Item Behind Pond", + "tags": ["OverworldItem"] + }, + "ITEM_SAFARI_ZONE_SOUTH_EAST_BIG_PEARL": { + "label": "Safari Zone SE - Item in Grass", + "tags": ["OverworldItem"] + }, + "ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE": { + "label": "Safari Zone SW - Item Behind Pond", + "tags": ["OverworldItem"] + }, + "ITEM_SCORCHED_SLAB_TM11": { + "label": "Scorched Slab - Item", + "tags": ["OverworldItem"] + }, + "ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26": { + "label": "Seafloor Cavern Room 9 - Item Before Kyogre", + "tags": ["OverworldItem"] + }, + "ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL": { + "label": "Shoal Cave Entrance - Item on Ledge", + "tags": ["OverworldItem"] + }, + "ITEM_SHOAL_CAVE_ICE_ROOM_NEVER_MELT_ICE": { + "label": "Shoal Cave Ice Room - Item 1", + "tags": ["OverworldItem"] + }, + "ITEM_SHOAL_CAVE_ICE_ROOM_TM07": { + "label": "Shoal Cave Ice Room - Item 2", + "tags": ["OverworldItem"] + }, + "ITEM_SHOAL_CAVE_INNER_ROOM_RARE_CANDY": { + "label": "Shoal Cave Inner Room - Item in Center", + "tags": ["OverworldItem"] + }, + "ITEM_SHOAL_CAVE_STAIRS_ROOM_ICE_HEAL": { + "label": "Shoal Cave Stairs Room - Item", + "tags": ["OverworldItem"] + }, + "ITEM_TRICK_HOUSE_PUZZLE_1_ORANGE_MAIL": { + "label": "Trick House Puzzle 1 - Item", + "tags": ["OverworldItem"] + }, + "ITEM_TRICK_HOUSE_PUZZLE_2_HARBOR_MAIL": { + "label": "Trick House Puzzle 2 - Item 1", + "tags": ["OverworldItem"] + }, + "ITEM_TRICK_HOUSE_PUZZLE_2_WAVE_MAIL": { + "label": "Trick House Puzzle 2 - Item 2", + "tags": ["OverworldItem"] + }, + "ITEM_TRICK_HOUSE_PUZZLE_3_SHADOW_MAIL": { + "label": "Trick House Puzzle 3 - Item 1", + "tags": ["OverworldItem"] + }, + "ITEM_TRICK_HOUSE_PUZZLE_3_WOOD_MAIL": { + "label": "Trick House Puzzle 3 - Item 2", + "tags": ["OverworldItem"] + }, + "ITEM_TRICK_HOUSE_PUZZLE_4_MECH_MAIL": { + "label": "Trick House Puzzle 4 - Item", + "tags": ["OverworldItem"] + }, + "ITEM_TRICK_HOUSE_PUZZLE_6_GLITTER_MAIL": { + "label": "Trick House Puzzle 6 - Item", + "tags": ["OverworldItem"] + }, + "ITEM_TRICK_HOUSE_PUZZLE_7_TROPIC_MAIL": { + "label": "Trick House Puzzle 7 - Item", + "tags": ["OverworldItem"] + }, + "ITEM_TRICK_HOUSE_PUZZLE_8_BEAD_MAIL": { + "label": "Trick House Puzzle 8 - Item", + "tags": ["OverworldItem"] + }, + "ITEM_VICTORY_ROAD_1F_MAX_ELIXIR": { + "label": "Victory Road 1F - Item East", + "tags": ["OverworldItem"] + }, + "ITEM_VICTORY_ROAD_1F_PP_UP": { + "label": "Victory Road 1F - Item on Southeast Ledge", + "tags": ["OverworldItem"] + }, + "ITEM_VICTORY_ROAD_B1F_FULL_RESTORE": { + "label": "Victory Road B1F - Item Behind Boulders", + "tags": ["OverworldItem"] + }, + "ITEM_VICTORY_ROAD_B1F_TM29": { + "label": "Victory Road B1F - Item on Northeast Ledge", + "tags": ["OverworldItem"] + }, + "ITEM_VICTORY_ROAD_B2F_FULL_HEAL": { + "label": "Victory Road B2F - Item Above Waterfall", + "tags": ["OverworldItem"] + }, + + "NPC_GIFT_GOT_TM24_FROM_WATTSON": { + "label": "Mauville City - TM24 from Wattson", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_6_SODA_POP": { + "label": "Route 109 - Seashore House Reward", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_AMULET_COIN": { + "label": "Littleroot Town - Amulet Coin from Mom", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_CHARCOAL": { + "label": "Lavaridge Town Herb Shop - Charcoal from Man", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_CHESTO_BERRY_ROUTE_104": { + "label": "Route 104 - Gift from Woman Near Berries", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_CLEANSE_TAG": { + "label": "Mt Pyre 1F - Cleanse Tag from Woman in NE Corner", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_EXP_SHARE": { + "label": "Devon Corp 3F - Exp. Share from Mr. Stone", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_FOCUS_BAND": { + "label": "Shoal Cave Lower Room - Focus Band from Black Belt", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_GREAT_BALL_PETALBURG_WOODS": { + "label": "Petalburg Woods - Gift from Devon Employee", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_GREAT_BALL_RUSTBORO_CITY": { + "label": "Rustboro City - Gift from Devon Employee", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_KINGS_ROCK": { + "label": "Mossdeep City - King's Rock from Kid", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_MACHO_BRACE": { + "label": "Route 111 - Winstrate Family Reward", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_MENTAL_HERB": { + "label": "Fortree City - Wingull Delivery Reward", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_MIRACLE_SEED": { + "label": "Petalburg Woods - Miracle Seed from Lady", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_POTION_OLDALE": { + "label": "Oldale Town - Gift from Shop Tutorial", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_POWDER_JAR": { + "label": "Slateport City - Powder Jar from Lady in Market", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_PREMIER_BALL_RUSTBORO": { + "label": "Rustboro City - Gift from Boy in Apartments", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_QUICK_CLAW": { + "label": "Rustboro City - Quick Claw from School Teacher", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_REPEAT_BALL": { + "label": "Route 116 - Gift from Devon Researcher", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_SECRET_POWER": { + "label": "Route 111 - Secret Power from Man Near Tree", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_SILK_SCARF": { + "label": "Dewford Town - Silk Scarf from Man in House", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_SOFT_SAND": { + "label": "Route 109 - Soft Sand from Tuber", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_SOOTHE_BELL": { + "label": "Slateport City - Soothe Bell from Woman in Fan Club", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_SUN_STONE_MOSSDEEP": { + "label": "Mossdeep City - Gift from Man in Museum", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM03": { + "label": "Sootopolis Gym - TM03 from Juan", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM04": { + "label": "Mossdeep Gym - TM04 from Tate and Liza", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM05": { + "label": "Route 114 - TM05 from Roaring Man", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM08": { + "label": "Dewford Gym - TM08 from Brawly", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM09": { + "label": "Route 104 - TM09 from Boy", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM10": { + "label": "Fortree City - TM10 from Hidden Power Lady", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM19": { + "label": "Route 123 - TM19 from Girl near Berries", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM21": { + "label": "Pacifidlog Town - TM21 from Man in House", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM27": { + "label": "Fallarbor Town - TM27 from Cozmo", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM27_2": { + "label": "Pacifidlog Town - TM27 from Man in House", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM28": { + "label": "Route 114 - TM28 from Fossil Maniac", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM31": { + "label": "Sootopolis City - TM31 from Black Belt in House", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM34": { + "label": "Mauville Gym - TM34 from Wattson", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM36": { + "label": "Dewford Town - TM36 from Sludge Bomb Man", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM39": { + "label": "Rustboro Gym - TM39 from Roxanne", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM40": { + "label": "Fortree Gym - TM40 from Winona", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM41": { + "label": "Slateport City - TM41 from Sailor in Battle Tent", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM42": { + "label": "Petalburg Gym - TM42 from Norman", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM44": { + "label": "Lilycove City - TM44 from Man in House", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM45": { + "label": "Verdanturf Town - TM45 from Woman in Battle Tent", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM46": { + "label": "Slateport City - TM46 from Aqua Grunt in Museum", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM47": { + "label": "Granite Cave 1F - TM47 from Steven", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM49": { + "label": "SS Tidal - TM49 from Thief", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_TM50": { + "label": "Lavaridge Gym - TM50 from Flannery", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_WHITE_HERB": { + "label": "Route 104 - White Herb from Lady Near Flower Shop", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_DEEP_SEA_SCALE": { + "label": "Slateport City - Deep Sea Scale from Capt. Stern", + "tags": ["NpcGift"] + }, + "NPC_GIFT_RECEIVED_DEEP_SEA_TOOTH": { + "label": "Slateport City - Deep Sea Tooth from Capt. Stern", + "tags": ["NpcGift"] + } +} diff --git a/worlds/pokemon_emerald/data/regions/cities.json b/worlds/pokemon_emerald/data/regions/cities.json new file mode 100644 index 000000000000..d39c0cc847c0 --- /dev/null +++ b/worlds/pokemon_emerald/data/regions/cities.json @@ -0,0 +1,2604 @@ +{ + "REGION_SKY": { + "parent_map": null, + "locations": [], + "events": [], + "exits": [ + "REGION_LITTLEROOT_TOWN/MAIN", + "REGION_OLDALE_TOWN/MAIN", + "REGION_PETALBURG_CITY/MAIN", + "REGION_RUSTBORO_CITY/MAIN", + "REGION_DEWFORD_TOWN/MAIN", + "REGION_SLATEPORT_CITY/MAIN", + "REGION_MAUVILLE_CITY/MAIN", + "REGION_VERDANTURF_TOWN/MAIN", + "REGION_FALLARBOR_TOWN/MAIN", + "REGION_LAVARIDGE_TOWN/MAIN", + "REGION_FORTREE_CITY/MAIN", + "REGION_LILYCOVE_CITY/MAIN", + "REGION_MOSSDEEP_CITY/MAIN", + "REGION_SOOTOPOLIS_CITY/EAST", + "REGION_EVER_GRANDE_CITY/SOUTH" + ], + "warps": [] + }, + + "REGION_LITTLEROOT_TOWN/MAIN": { + "parent_map": "MAP_LITTLEROOT_TOWN", + "locations": [], + "events": [ + "EVENT_VISITED_LITTLEROOT_TOWN", + "FREE_FLY_LOCATION" + ], + "exits": [ + "REGION_ROUTE101/MAIN", + "REGION_SKY" + ], + "warps": [ + "MAP_LITTLEROOT_TOWN:0/MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:1", + "MAP_LITTLEROOT_TOWN:1/MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:1", + "MAP_LITTLEROOT_TOWN:2/MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB:0" + ] + }, + "REGION_LITTLEROOT_TOWN_MAYS_HOUSE_1F/MAIN": { + "parent_map": "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:0,1/MAP_LITTLEROOT_TOWN:0", + "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:2/MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F:0" + ] + }, + "REGION_LITTLEROOT_TOWN_MAYS_HOUSE_2F/MAIN": { + "parent_map": "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F:0/MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F:2" + ] + }, + "REGION_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F/MAIN": { + "parent_map": "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F", + "locations": [ + "NPC_GIFT_RECEIVED_AMULET_COIN", + "NPC_GIFT_RECEIVED_SS_TICKET" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:0,1/MAP_LITTLEROOT_TOWN:1", + "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:2/MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F:0" + ] + }, + "REGION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F/MAIN": { + "parent_map": "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F:0/MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F:2" + ] + }, + "REGION_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB/MAIN": { + "parent_map": "MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB:0,1/MAP_LITTLEROOT_TOWN:2" + ] + }, + + "REGION_OLDALE_TOWN/MAIN": { + "parent_map": "MAP_OLDALE_TOWN", + "locations": [ + "NPC_GIFT_RECEIVED_POTION_OLDALE" + ], + "events": [ + "EVENT_VISITED_OLDALE_TOWN" + ], + "exits": [ + "REGION_ROUTE101/MAIN", + "REGION_ROUTE102/MAIN", + "REGION_ROUTE103/WEST" + ], + "warps": [ + "MAP_OLDALE_TOWN:0/MAP_OLDALE_TOWN_HOUSE1:0", + "MAP_OLDALE_TOWN:1/MAP_OLDALE_TOWN_HOUSE2:0", + "MAP_OLDALE_TOWN:2/MAP_OLDALE_TOWN_POKEMON_CENTER_1F:0", + "MAP_OLDALE_TOWN:3/MAP_OLDALE_TOWN_MART:0" + ] + }, + "REGION_OLDALE_TOWN_HOUSE1/MAIN": { + "parent_map": "MAP_OLDALE_TOWN_HOUSE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_OLDALE_TOWN_HOUSE1:0,1/MAP_OLDALE_TOWN:0" + ] + }, + "REGION_OLDALE_TOWN_HOUSE2/MAIN": { + "parent_map": "MAP_OLDALE_TOWN_HOUSE2", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_OLDALE_TOWN_HOUSE2:0,1/MAP_OLDALE_TOWN:1" + ] + }, + "REGION_OLDALE_TOWN_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_OLDALE_TOWN_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_OLDALE_TOWN_POKEMON_CENTER_1F:0,1/MAP_OLDALE_TOWN:2", + "MAP_OLDALE_TOWN_POKEMON_CENTER_1F:2/MAP_OLDALE_TOWN_POKEMON_CENTER_2F:0" + ] + }, + "REGION_OLDALE_TOWN_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_OLDALE_TOWN_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_OLDALE_TOWN_POKEMON_CENTER_2F:0/MAP_OLDALE_TOWN_POKEMON_CENTER_1F:2" + ] + }, + "REGION_OLDALE_TOWN_MART/MAIN": { + "parent_map": "MAP_OLDALE_TOWN_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_OLDALE_TOWN_MART:0,1/MAP_OLDALE_TOWN:3" + ] + }, + + "REGION_PETALBURG_CITY/MAIN": { + "parent_map": "MAP_PETALBURG_CITY", + "locations": [], + "events": [ + "EVENT_VISITED_PETALBURG_CITY" + ], + "exits": [ + "REGION_PETALBURG_CITY/SOUTH_POND", + "REGION_PETALBURG_CITY/NORTH_POND", + "REGION_ROUTE102/MAIN", + "REGION_ROUTE104/SOUTH" + ], + "warps": [ + "MAP_PETALBURG_CITY:0/MAP_PETALBURG_CITY_HOUSE1:0", + "MAP_PETALBURG_CITY:1/MAP_PETALBURG_CITY_WALLYS_HOUSE:0", + "MAP_PETALBURG_CITY:2/MAP_PETALBURG_CITY_GYM:0", + "MAP_PETALBURG_CITY:3/MAP_PETALBURG_CITY_POKEMON_CENTER_1F:0", + "MAP_PETALBURG_CITY:4/MAP_PETALBURG_CITY_HOUSE2:0", + "MAP_PETALBURG_CITY:5/MAP_PETALBURG_CITY_MART:0" + ] + }, + "REGION_PETALBURG_CITY/NORTH_POND": { + "parent_map": "MAP_PETALBURG_CITY", + "locations": [ + "ITEM_PETALBURG_CITY_MAX_REVIVE" + ], + "events": [], + "exits": [ + "REGION_PETALBURG_CITY/MAIN" + ], + "warps": [] + }, + "REGION_PETALBURG_CITY/SOUTH_POND": { + "parent_map": "MAP_PETALBURG_CITY", + "locations": [ + "ITEM_PETALBURG_CITY_ETHER", + "HIDDEN_ITEM_PETALBURG_CITY_RARE_CANDY" + ], + "events": [], + "exits": [ + "REGION_PETALBURG_CITY/MAIN" + ], + "warps": [] + }, + "REGION_PETALBURG_CITY_HOUSE1/MAIN": { + "parent_map": "MAP_PETALBURG_CITY_HOUSE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_HOUSE1:0,1/MAP_PETALBURG_CITY:0" + ] + }, + "REGION_PETALBURG_CITY_HOUSE2/MAIN": { + "parent_map": "MAP_PETALBURG_CITY_HOUSE2", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_HOUSE2:0,1/MAP_PETALBURG_CITY:4" + ] + }, + "REGION_PETALBURG_CITY_WALLYS_HOUSE/MAIN": { + "parent_map": "MAP_PETALBURG_CITY_WALLYS_HOUSE", + "locations": [ + "NPC_GIFT_RECEIVED_HM03" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_WALLYS_HOUSE:0,1/MAP_PETALBURG_CITY:1" + ] + }, + "REGION_PETALBURG_CITY_GYM/ROOM_1": { + "parent_map": "MAP_PETALBURG_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_GYM:0,1/MAP_PETALBURG_CITY:2", + "MAP_PETALBURG_CITY_GYM:2/MAP_PETALBURG_CITY_GYM:3", + "MAP_PETALBURG_CITY_GYM:5/MAP_PETALBURG_CITY_GYM:6" + ] + }, + "REGION_PETALBURG_CITY_GYM/ROOM_2": { + "parent_map": "MAP_PETALBURG_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_GYM:6,7/MAP_PETALBURG_CITY_GYM:5", + "MAP_PETALBURG_CITY_GYM:14/MAP_PETALBURG_CITY_GYM:16", + "MAP_PETALBURG_CITY_GYM:15/MAP_PETALBURG_CITY_GYM:18" + ] + }, + "REGION_PETALBURG_CITY_GYM/ROOM_3": { + "parent_map": "MAP_PETALBURG_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_GYM:3,4/MAP_PETALBURG_CITY_GYM:2", + "MAP_PETALBURG_CITY_GYM:8/MAP_PETALBURG_CITY_GYM:10", + "MAP_PETALBURG_CITY_GYM:9/MAP_PETALBURG_CITY_GYM:12" + ] + }, + "REGION_PETALBURG_CITY_GYM/ROOM_4": { + "parent_map": "MAP_PETALBURG_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_GYM:18,19/MAP_PETALBURG_CITY_GYM:15", + "MAP_PETALBURG_CITY_GYM:23/MAP_PETALBURG_CITY_GYM:30" + ] + }, + "REGION_PETALBURG_CITY_GYM/ROOM_5": { + "parent_map": "MAP_PETALBURG_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_GYM:12,13/MAP_PETALBURG_CITY_GYM:9", + "MAP_PETALBURG_CITY_GYM:16,17/MAP_PETALBURG_CITY_GYM:14", + "MAP_PETALBURG_CITY_GYM:21/MAP_PETALBURG_CITY_GYM:26", + "MAP_PETALBURG_CITY_GYM:22/MAP_PETALBURG_CITY_GYM:28" + ] + }, + "REGION_PETALBURG_CITY_GYM/ROOM_6": { + "parent_map": "MAP_PETALBURG_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_GYM:10,11/MAP_PETALBURG_CITY_GYM:8", + "MAP_PETALBURG_CITY_GYM:20/MAP_PETALBURG_CITY_GYM:24" + ] + }, + "REGION_PETALBURG_CITY_GYM/ROOM_7": { + "parent_map": "MAP_PETALBURG_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_GYM:28,29/MAP_PETALBURG_CITY_GYM:22", + "MAP_PETALBURG_CITY_GYM:30,31/MAP_PETALBURG_CITY_GYM:23", + "MAP_PETALBURG_CITY_GYM:33/MAP_PETALBURG_CITY_GYM:36" + ] + }, + "REGION_PETALBURG_CITY_GYM/ROOM_8": { + "parent_map": "MAP_PETALBURG_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_GYM:24,25/MAP_PETALBURG_CITY_GYM:20", + "MAP_PETALBURG_CITY_GYM:26,27/MAP_PETALBURG_CITY_GYM:21", + "MAP_PETALBURG_CITY_GYM:32/MAP_PETALBURG_CITY_GYM:34" + ] + }, + "REGION_PETALBURG_CITY_GYM/ROOM_9": { + "parent_map": "MAP_PETALBURG_CITY_GYM", + "locations": [ + "NPC_GIFT_RECEIVED_TM42", + "BADGE_5" + ], + "events": [ + "EVENT_DEFEAT_NORMAN" + ], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_GYM:34,35/MAP_PETALBURG_CITY_GYM:32", + "MAP_PETALBURG_CITY_GYM:36,37/MAP_PETALBURG_CITY_GYM:33" + ] + }, + "REGION_PETALBURG_CITY_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_PETALBURG_CITY_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_POKEMON_CENTER_1F:0,1/MAP_PETALBURG_CITY:3", + "MAP_PETALBURG_CITY_POKEMON_CENTER_1F:2/MAP_PETALBURG_CITY_POKEMON_CENTER_2F:0" + ] + }, + "REGION_PETALBURG_CITY_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_PETALBURG_CITY_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_POKEMON_CENTER_2F:0/MAP_PETALBURG_CITY_POKEMON_CENTER_1F:2" + ] + }, + "REGION_PETALBURG_CITY_MART/MAIN": { + "parent_map": "MAP_PETALBURG_CITY_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PETALBURG_CITY_MART:0,1/MAP_PETALBURG_CITY:5" + ] + }, + + "REGION_RUSTBORO_CITY/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY", + "locations": [ + "ITEM_RUSTBORO_CITY_X_DEFEND", + "NPC_GIFT_RECEIVED_GREAT_BALL_RUSTBORO_CITY" + ], + "events": [ + "EVENT_RETURN_DEVON_GOODS", + "EVENT_VISITED_RUSTBORO_CITY" + ], + "exits": [ + "REGION_ROUTE104/NORTH", + "REGION_ROUTE115/SOUTH_BELOW_LEDGE", + "REGION_ROUTE116/WEST" + ], + "warps": [ + "MAP_RUSTBORO_CITY:0/MAP_RUSTBORO_CITY_GYM:0", + "MAP_RUSTBORO_CITY:1/MAP_RUSTBORO_CITY_FLAT1_1F:0", + "MAP_RUSTBORO_CITY:2/MAP_RUSTBORO_CITY_MART:0", + "MAP_RUSTBORO_CITY:3/MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:0", + "MAP_RUSTBORO_CITY:4/MAP_RUSTBORO_CITY_POKEMON_SCHOOL:0", + "MAP_RUSTBORO_CITY:5,6/MAP_RUSTBORO_CITY_DEVON_CORP_1F:0,1", + "MAP_RUSTBORO_CITY:7/MAP_RUSTBORO_CITY_HOUSE1:0", + "MAP_RUSTBORO_CITY:8/MAP_RUSTBORO_CITY_CUTTERS_HOUSE:0", + "MAP_RUSTBORO_CITY:9/MAP_RUSTBORO_CITY_HOUSE2:0", + "MAP_RUSTBORO_CITY:10/MAP_RUSTBORO_CITY_FLAT2_1F:0", + "MAP_RUSTBORO_CITY:11/MAP_RUSTBORO_CITY_HOUSE3:0" + ] + }, + "REGION_RUSTBORO_CITY_GYM/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_GYM", + "locations": [ + "NPC_GIFT_RECEIVED_TM39", + "BADGE_1" + ], + "events": [ + "EVENT_DEFEAT_ROXANNE" + ], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_GYM:0,1/MAP_RUSTBORO_CITY:0" + ] + }, + "REGION_RUSTBORO_CITY_MART/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_MART:0,1/MAP_RUSTBORO_CITY:2" + ] + }, + "REGION_RUSTBORO_CITY_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:0,1/MAP_RUSTBORO_CITY:3", + "MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:2/MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:0" + ] + }, + "REGION_RUSTBORO_CITY_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:0/MAP_RUSTBORO_CITY_POKEMON_CENTER_1F:2" + ] + }, + "REGION_RUSTBORO_CITY_POKEMON_SCHOOL/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_POKEMON_SCHOOL", + "locations": [ + "NPC_GIFT_RECEIVED_QUICK_CLAW" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_POKEMON_SCHOOL:0,1/MAP_RUSTBORO_CITY:4" + ] + }, + "REGION_RUSTBORO_CITY_DEVON_CORP_1F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_DEVON_CORP_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_DEVON_CORP_1F:0,1/MAP_RUSTBORO_CITY:5,6", + "MAP_RUSTBORO_CITY_DEVON_CORP_1F:2/MAP_RUSTBORO_CITY_DEVON_CORP_2F:0" + ] + }, + "REGION_RUSTBORO_CITY_DEVON_CORP_2F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_DEVON_CORP_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_DEVON_CORP_2F:0/MAP_RUSTBORO_CITY_DEVON_CORP_1F:2", + "MAP_RUSTBORO_CITY_DEVON_CORP_2F:1/MAP_RUSTBORO_CITY_DEVON_CORP_3F:0" + ] + }, + "REGION_RUSTBORO_CITY_DEVON_CORP_3F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_DEVON_CORP_3F", + "locations": [ + "NPC_GIFT_RECEIVED_LETTER", + "NPC_GIFT_RECEIVED_EXP_SHARE" + ], + "events": [ + "EVENT_TALK_TO_MR_STONE" + ], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_DEVON_CORP_3F:0/MAP_RUSTBORO_CITY_DEVON_CORP_2F:1" + ] + }, + "REGION_RUSTBORO_CITY_FLAT1_1F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_FLAT1_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_FLAT1_1F:0,1/MAP_RUSTBORO_CITY:1", + "MAP_RUSTBORO_CITY_FLAT1_1F:2/MAP_RUSTBORO_CITY_FLAT1_2F:0" + ] + }, + "REGION_RUSTBORO_CITY_FLAT1_2F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_FLAT1_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_FLAT1_2F:0/MAP_RUSTBORO_CITY_FLAT1_1F:2" + ] + }, + "REGION_RUSTBORO_CITY_FLAT2_1F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_FLAT2_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_FLAT2_1F:0,1/MAP_RUSTBORO_CITY:10", + "MAP_RUSTBORO_CITY_FLAT2_1F:2/MAP_RUSTBORO_CITY_FLAT2_2F:0" + ] + }, + "REGION_RUSTBORO_CITY_FLAT2_2F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_FLAT2_2F", + "locations": [ + "NPC_GIFT_RECEIVED_PREMIER_BALL_RUSTBORO" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_FLAT2_2F:0/MAP_RUSTBORO_CITY_FLAT2_1F:2", + "MAP_RUSTBORO_CITY_FLAT2_2F:1/MAP_RUSTBORO_CITY_FLAT2_3F:0" + ] + }, + "REGION_RUSTBORO_CITY_FLAT2_3F/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_FLAT2_3F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_FLAT2_3F:0/MAP_RUSTBORO_CITY_FLAT2_2F:1" + ] + }, + "REGION_RUSTBORO_CITY_HOUSE1/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_HOUSE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_HOUSE1:0,1/MAP_RUSTBORO_CITY:7" + ] + }, + "REGION_RUSTBORO_CITY_HOUSE2/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_HOUSE2", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_HOUSE2:0,1/MAP_RUSTBORO_CITY:9" + ] + }, + "REGION_RUSTBORO_CITY_HOUSE3/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_HOUSE3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_HOUSE3:0,1/MAP_RUSTBORO_CITY:11" + ] + }, + "REGION_RUSTBORO_CITY_CUTTERS_HOUSE/MAIN": { + "parent_map": "MAP_RUSTBORO_CITY_CUTTERS_HOUSE", + "locations": [ + "NPC_GIFT_RECEIVED_HM01" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_RUSTBORO_CITY_CUTTERS_HOUSE:0,1/MAP_RUSTBORO_CITY:8" + ] + }, + + "REGION_DEWFORD_TOWN/MAIN": { + "parent_map": "MAP_DEWFORD_TOWN", + "locations": [ + "NPC_GIFT_RECEIVED_OLD_ROD" + ], + "events": [ + "EVENT_VISITED_DEWFORD_TOWN" + ], + "exits": [ + "REGION_ROUTE106/EAST", + "REGION_ROUTE107/MAIN", + "REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN", + "REGION_ROUTE109/BEACH" + ], + "warps": [ + "MAP_DEWFORD_TOWN:0/MAP_DEWFORD_TOWN_HALL:0", + "MAP_DEWFORD_TOWN:1/MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:0", + "MAP_DEWFORD_TOWN:2/MAP_DEWFORD_TOWN_GYM:0", + "MAP_DEWFORD_TOWN:3/MAP_DEWFORD_TOWN_HOUSE1:0", + "MAP_DEWFORD_TOWN:4/MAP_DEWFORD_TOWN_HOUSE2:0" + ] + }, + "REGION_DEWFORD_TOWN_HALL/MAIN": { + "parent_map": "MAP_DEWFORD_TOWN_HALL", + "locations": [ + "NPC_GIFT_RECEIVED_TM36" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_DEWFORD_TOWN_HALL:0,1/MAP_DEWFORD_TOWN:0" + ] + }, + "REGION_DEWFORD_TOWN_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_DEWFORD_TOWN_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:0,1/MAP_DEWFORD_TOWN:1", + "MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:2/MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:0" + ] + }, + "REGION_DEWFORD_TOWN_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_DEWFORD_TOWN_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:0/MAP_DEWFORD_TOWN_POKEMON_CENTER_1F:2" + ] + }, + "REGION_DEWFORD_TOWN_GYM/MAIN": { + "parent_map": "MAP_DEWFORD_TOWN_GYM", + "locations": [ + "NPC_GIFT_RECEIVED_TM08", + "BADGE_2" + ], + "events": [ + "EVENT_DEFEAT_BRAWLY" + ], + "exits": [], + "warps": [ + "MAP_DEWFORD_TOWN_GYM:0,1/MAP_DEWFORD_TOWN:2" + ] + }, + "REGION_DEWFORD_TOWN_HOUSE1/MAIN": { + "parent_map": "MAP_DEWFORD_TOWN_HOUSE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_DEWFORD_TOWN_HOUSE1:0,1/MAP_DEWFORD_TOWN:3" + ] + }, + "REGION_DEWFORD_TOWN_HOUSE2/MAIN": { + "parent_map": "MAP_DEWFORD_TOWN_HOUSE2", + "locations": [ + "NPC_GIFT_RECEIVED_SILK_SCARF" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_DEWFORD_TOWN_HOUSE2:0,1/MAP_DEWFORD_TOWN:4" + ] + }, + + "REGION_SLATEPORT_CITY/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY", + "locations": [ + "NPC_GIFT_RECEIVED_POWDER_JAR" + ], + "events": [ + "EVENT_AQUA_STEALS_SUBMARINE", + "EVENT_VISITED_SLATEPORT_CITY" + ], + "exits": [ + "REGION_ROUTE109/BEACH", + "REGION_ROUTE110/SOUTH", + "REGION_ROUTE134/WEST" + ], + "warps": [ + "MAP_SLATEPORT_CITY:0/MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:0", + "MAP_SLATEPORT_CITY:1/MAP_SLATEPORT_CITY_MART:0", + "MAP_SLATEPORT_CITY:2/MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:0", + "MAP_SLATEPORT_CITY:3/MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY:0", + "MAP_SLATEPORT_CITY:4/MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB:0", + "MAP_SLATEPORT_CITY:5,7/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:0,1", + "MAP_SLATEPORT_CITY:6/MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE:0", + "MAP_SLATEPORT_CITY:8/MAP_SLATEPORT_CITY_HARBOR:0", + "MAP_SLATEPORT_CITY:9/MAP_SLATEPORT_CITY_HARBOR:2", + "MAP_SLATEPORT_CITY:10/MAP_SLATEPORT_CITY_HOUSE:0" + ] + }, + "REGION_SLATEPORT_CITY_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:0/MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:2" + ] + }, + "REGION_SLATEPORT_CITY_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:0,1/MAP_SLATEPORT_CITY:0", + "MAP_SLATEPORT_CITY_POKEMON_CENTER_1F:2/MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:0" + ] + }, + "REGION_SLATEPORT_CITY_MART/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_MART", + "locations": [], + "events": [ + "EVENT_BUY_HARBOR_MAIL" + ], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_MART:0,1/MAP_SLATEPORT_CITY:1" + ] + }, + "REGION_SLATEPORT_CITY_STERNS_SHIPYARD_1F/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F", + "locations": [], + "events": [ + "EVENT_TALK_TO_DOCK" + ], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:0,1/MAP_SLATEPORT_CITY:2", + "MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:2/MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F:0" + ] + }, + "REGION_SLATEPORT_CITY_STERNS_SHIPYARD_2F/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F:0/MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F:2" + ] + }, + "REGION_SLATEPORT_CITY_BATTLE_TENT_LOBBY/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY", + "locations": [ + "NPC_GIFT_RECEIVED_TM41" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY:0,1/MAP_SLATEPORT_CITY:3" + ] + }, + "REGION_SLATEPORT_CITY_POKEMON_FAN_CLUB/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB", + "locations": [ + "NPC_GIFT_RECEIVED_SOOTHE_BELL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB:0,1/MAP_SLATEPORT_CITY:4" + ] + }, + "REGION_SLATEPORT_CITY_OCEANIC_MUSEUM_1F/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F", + "locations": [ + "NPC_GIFT_RECEIVED_TM46" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:0,1/MAP_SLATEPORT_CITY:5,7", + "MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:2/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F:0" + ] + }, + "REGION_SLATEPORT_CITY_OCEANIC_MUSEUM_2F/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F", + "locations": [], + "events": [ + "EVENT_RESCUE_CAPT_STERN" + ], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F:0/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:2" + ] + }, + "REGION_SLATEPORT_CITY_NAME_RATERS_HOUSE/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE:0,1/MAP_SLATEPORT_CITY:6" + ] + }, + "REGION_SLATEPORT_CITY_HARBOR/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_HARBOR", + "locations": [ + "NPC_GIFT_RECEIVED_DEEP_SEA_TOOTH", + "NPC_GIFT_RECEIVED_DEEP_SEA_SCALE" + ], + "events": [], + "exits": [ + "REGION_SS_TIDAL_CORRIDOR/MAIN" + ], + "warps": [ + "MAP_SLATEPORT_CITY_HARBOR:0,1/MAP_SLATEPORT_CITY:8", + "MAP_SLATEPORT_CITY_HARBOR:2,3/MAP_SLATEPORT_CITY:9" + ] + }, + "REGION_SLATEPORT_CITY_HOUSE/MAIN": { + "parent_map": "MAP_SLATEPORT_CITY_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SLATEPORT_CITY_HOUSE:0,1/MAP_SLATEPORT_CITY:10" + ] + }, + + "REGION_MAUVILLE_CITY/MAIN": { + "parent_map": "MAP_MAUVILLE_CITY", + "locations": [ + "ITEM_MAUVILLE_CITY_X_SPEED", + "NPC_GIFT_GOT_BASEMENT_KEY_FROM_WATTSON", + "NPC_GIFT_GOT_TM24_FROM_WATTSON" + ], + "events": [ + "EVENT_VISITED_MAUVILLE_CITY" + ], + "exits": [ + "REGION_ROUTE111/SOUTH", + "REGION_ROUTE117/MAIN", + "REGION_ROUTE110/MAIN", + "REGION_ROUTE118/WEST" + ], + "warps": [ + "MAP_MAUVILLE_CITY:0/MAP_MAUVILLE_CITY_GYM:0", + "MAP_MAUVILLE_CITY:1/MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:0", + "MAP_MAUVILLE_CITY:2/MAP_MAUVILLE_CITY_BIKE_SHOP:0", + "MAP_MAUVILLE_CITY:3/MAP_MAUVILLE_CITY_MART:0", + "MAP_MAUVILLE_CITY:4/MAP_MAUVILLE_CITY_HOUSE1:0", + "MAP_MAUVILLE_CITY:5/MAP_MAUVILLE_CITY_GAME_CORNER:0", + "MAP_MAUVILLE_CITY:6/MAP_MAUVILLE_CITY_HOUSE2:0" + ] + }, + "REGION_MAUVILLE_CITY_GYM/MAIN": { + "parent_map": "MAP_MAUVILLE_CITY_GYM", + "locations": [ + "NPC_GIFT_RECEIVED_TM34", + "BADGE_3" + ], + "events": [ + "EVENT_DEFEAT_WATTSON" + ], + "exits": [], + "warps": [ + "MAP_MAUVILLE_CITY_GYM:0,1/MAP_MAUVILLE_CITY:0" + ] + }, + "REGION_MAUVILLE_CITY_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_MAUVILLE_CITY_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:0,1/MAP_MAUVILLE_CITY:1", + "MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:2/MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:0" + ] + }, + "REGION_MAUVILLE_CITY_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_MAUVILLE_CITY_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:0/MAP_MAUVILLE_CITY_POKEMON_CENTER_1F:2" + ] + }, + "REGION_MAUVILLE_CITY_BIKE_SHOP/MAIN": { + "parent_map": "MAP_MAUVILLE_CITY_BIKE_SHOP", + "locations": [ + "NPC_GIFT_RECEIVED_ACRO_BIKE", + "NPC_GIFT_RECEIVED_MACH_BIKE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MAUVILLE_CITY_BIKE_SHOP:0,1/MAP_MAUVILLE_CITY:2" + ] + }, + "REGION_MAUVILLE_CITY_MART/MAIN": { + "parent_map": "MAP_MAUVILLE_CITY_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MAUVILLE_CITY_MART:0,1/MAP_MAUVILLE_CITY:3" + ] + }, + "REGION_MAUVILLE_CITY_HOUSE1/MAIN": { + "parent_map": "MAP_MAUVILLE_CITY_HOUSE1", + "locations": [ + "NPC_GIFT_RECEIVED_HM06" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MAUVILLE_CITY_HOUSE1:0,1/MAP_MAUVILLE_CITY:4" + ] + }, + "REGION_MAUVILLE_CITY_HOUSE2/MAIN": { + "parent_map": "MAP_MAUVILLE_CITY_HOUSE2", + "locations": [ + "NPC_GIFT_RECEIVED_COIN_CASE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MAUVILLE_CITY_HOUSE2:0,1/MAP_MAUVILLE_CITY:6" + ] + }, + "REGION_MAUVILLE_CITY_GAME_CORNER/MAIN": { + "parent_map": "MAP_MAUVILLE_CITY_GAME_CORNER", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MAUVILLE_CITY_GAME_CORNER:0,1/MAP_MAUVILLE_CITY:5" + ] + }, + + "REGION_VERDANTURF_TOWN/MAIN": { + "parent_map": "MAP_VERDANTURF_TOWN", + "locations": [], + "events": [ + "EVENT_VISITED_VERDANTURF_TOWN" + ], + "exits": [ + "REGION_ROUTE117/MAIN" + ], + "warps": [ + "MAP_VERDANTURF_TOWN:0/MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY:0", + "MAP_VERDANTURF_TOWN:1/MAP_VERDANTURF_TOWN_MART:0", + "MAP_VERDANTURF_TOWN:2/MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:0", + "MAP_VERDANTURF_TOWN:3/MAP_VERDANTURF_TOWN_WANDAS_HOUSE:0", + "MAP_VERDANTURF_TOWN:4/MAP_RUSTURF_TUNNEL:1", + "MAP_VERDANTURF_TOWN:5/MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE:0", + "MAP_VERDANTURF_TOWN:6/MAP_VERDANTURF_TOWN_HOUSE:0" + ] + }, + "REGION_VERDANTURF_TOWN_BATTLE_TENT_LOBBY/MAIN": { + "parent_map": "MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY", + "locations": [ + "NPC_GIFT_RECEIVED_TM45" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY:0,1/MAP_VERDANTURF_TOWN:0" + ] + }, + "REGION_VERDANTURF_TOWN_MART/MAIN": { + "parent_map": "MAP_VERDANTURF_TOWN_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_VERDANTURF_TOWN_MART:0,1/MAP_VERDANTURF_TOWN:1" + ] + }, + "REGION_VERDANTURF_TOWN_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:0,1/MAP_VERDANTURF_TOWN:2", + "MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:2/MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:0" + ] + }, + "REGION_VERDANTURF_TOWN_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:0/MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F:2" + ] + }, + "REGION_VERDANTURF_TOWN_WANDAS_HOUSE/MAIN": { + "parent_map": "MAP_VERDANTURF_TOWN_WANDAS_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_VERDANTURF_TOWN_WANDAS_HOUSE:0,1/MAP_VERDANTURF_TOWN:3" + ] + }, + "REGION_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE/MAIN": { + "parent_map": "MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE:0,1/MAP_VERDANTURF_TOWN:5" + ] + }, + "REGION_VERDANTURF_TOWN_HOUSE/MAIN": { + "parent_map": "MAP_VERDANTURF_TOWN_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_VERDANTURF_TOWN_HOUSE:0,1/MAP_VERDANTURF_TOWN:6" + ] + }, + + "REGION_FALLARBOR_TOWN/MAIN": { + "parent_map": "MAP_FALLARBOR_TOWN", + "locations": [ + "HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET" + ], + "events": [ + "EVENT_VISITED_FALLARBOR_TOWN" + ], + "exits": [ + "REGION_ROUTE114/MAIN", + "REGION_ROUTE113/MAIN" + ], + "warps": [ + "MAP_FALLARBOR_TOWN:0/MAP_FALLARBOR_TOWN_MART:0", + "MAP_FALLARBOR_TOWN:1/MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY:0", + "MAP_FALLARBOR_TOWN:2/MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:0", + "MAP_FALLARBOR_TOWN:3/MAP_FALLARBOR_TOWN_COZMOS_HOUSE:0", + "MAP_FALLARBOR_TOWN:4/MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE:0" + ] + }, + "REGION_FALLARBOR_TOWN_MART/MAIN": { + "parent_map": "MAP_FALLARBOR_TOWN_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FALLARBOR_TOWN_MART:0,1/MAP_FALLARBOR_TOWN:0" + ] + }, + "REGION_FALLARBOR_TOWN_BATTLE_TENT_LOBBY/MAIN": { + "parent_map": "MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY:0,1/MAP_FALLARBOR_TOWN:1" + ] + }, + "REGION_FALLARBOR_TOWN_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:0,1/MAP_FALLARBOR_TOWN:2", + "MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:2/MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:0" + ] + }, + "REGION_FALLARBOR_TOWN_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:0/MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F:2" + ] + }, + "REGION_FALLARBOR_TOWN_COZMOS_HOUSE/MAIN": { + "parent_map": "MAP_FALLARBOR_TOWN_COZMOS_HOUSE", + "locations": [ + "NPC_GIFT_RECEIVED_TM27" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_FALLARBOR_TOWN_COZMOS_HOUSE:0,1/MAP_FALLARBOR_TOWN:3" + ] + }, + "REGION_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE/MAIN": { + "parent_map": "MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE:0,1/MAP_FALLARBOR_TOWN:4" + ] + }, + + "REGION_LAVARIDGE_TOWN/MAIN": { + "parent_map": "MAP_LAVARIDGE_TOWN", + "locations": [ + "NPC_GIFT_RECEIVED_GO_GOGGLES" + ], + "events": [ + "EVENT_VISITED_LAVARIDGE_TOWN" + ], + "exits": [ + "REGION_ROUTE112/SOUTH_WEST" + ], + "warps": [ + "MAP_LAVARIDGE_TOWN:0/MAP_LAVARIDGE_TOWN_HERB_SHOP:0", + "MAP_LAVARIDGE_TOWN:1/MAP_LAVARIDGE_TOWN_GYM_1F:0", + "MAP_LAVARIDGE_TOWN:2/MAP_LAVARIDGE_TOWN_MART:0", + "MAP_LAVARIDGE_TOWN:3/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:0", + "MAP_LAVARIDGE_TOWN:4/MAP_LAVARIDGE_TOWN_HOUSE:0" + ] + }, + "REGION_LAVARIDGE_TOWN/SPRINGS": { + "parent_map": "MAP_LAVARIDGE_TOWN", + "locations": [ + "HIDDEN_ITEM_LAVARIDGE_TOWN_ICE_HEAL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN:5/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:3" + ] + }, + "REGION_LAVARIDGE_TOWN_HERB_SHOP/MAIN": { + "parent_map": "MAP_LAVARIDGE_TOWN_HERB_SHOP", + "locations": [ + "NPC_GIFT_RECEIVED_CHARCOAL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_HERB_SHOP:0,1/MAP_LAVARIDGE_TOWN:0" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_1F/ENTRANCE": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_1F:0,1/MAP_LAVARIDGE_TOWN:1", + "MAP_LAVARIDGE_TOWN_GYM_1F:2/MAP_LAVARIDGE_TOWN_GYM_B1F:0", + "MAP_LAVARIDGE_TOWN_GYM_1F:3/MAP_LAVARIDGE_TOWN_GYM_B1F:2", + "MAP_LAVARIDGE_TOWN_GYM_1F:24/MAP_LAVARIDGE_TOWN_GYM_B1F:22" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_1F/BOTTOM_LEFT_LOWER": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_1F:4/MAP_LAVARIDGE_TOWN_GYM_B1F:4", + "MAP_LAVARIDGE_TOWN_GYM_1F:6/MAP_LAVARIDGE_TOWN_GYM_B1F:1", + "MAP_LAVARIDGE_TOWN_GYM_1F:8/MAP_LAVARIDGE_TOWN_GYM_B1F:6", + "MAP_LAVARIDGE_TOWN_GYM_1F:9/MAP_LAVARIDGE_TOWN_GYM_B1F:7", + "MAP_LAVARIDGE_TOWN_GYM_1F:10/MAP_LAVARIDGE_TOWN_GYM_B1F:8", + "MAP_LAVARIDGE_TOWN_GYM_1F:11/MAP_LAVARIDGE_TOWN_GYM_B1F:9", + "MAP_LAVARIDGE_TOWN_GYM_1F:12/MAP_LAVARIDGE_TOWN_GYM_B1F:10", + "MAP_LAVARIDGE_TOWN_GYM_1F:21/MAP_LAVARIDGE_TOWN_GYM_B1F:20" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_1F/BOTTOM_LEFT_UPPER": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_LAVARIDGE_TOWN_GYM_1F/BOTTOM_LEFT_LOWER" + ], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_1F:5/MAP_LAVARIDGE_TOWN_GYM_B1F:3", + "MAP_LAVARIDGE_TOWN_GYM_1F:7/MAP_LAVARIDGE_TOWN_GYM_B1F:5" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_1F/TOP_LEFT": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_1F:13/MAP_LAVARIDGE_TOWN_GYM_B1F:11", + "MAP_LAVARIDGE_TOWN_GYM_1F:14/MAP_LAVARIDGE_TOWN_GYM_B1F:12", + "MAP_LAVARIDGE_TOWN_GYM_1F:15/MAP_LAVARIDGE_TOWN_GYM_B1F:13", + "MAP_LAVARIDGE_TOWN_GYM_1F:16/MAP_LAVARIDGE_TOWN_GYM_B1F:14", + "MAP_LAVARIDGE_TOWN_GYM_1F:17/MAP_LAVARIDGE_TOWN_GYM_B1F:15" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_1F/TOP_CENTER": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_1F:18/MAP_LAVARIDGE_TOWN_GYM_B1F:16", + "MAP_LAVARIDGE_TOWN_GYM_1F:19/MAP_LAVARIDGE_TOWN_GYM_B1F:17", + "MAP_LAVARIDGE_TOWN_GYM_1F:20/MAP_LAVARIDGE_TOWN_GYM_B1F:18" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_1F/TOP_RIGHT": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_1F:22/MAP_LAVARIDGE_TOWN_GYM_B1F:19", + "MAP_LAVARIDGE_TOWN_GYM_1F:23/MAP_LAVARIDGE_TOWN_GYM_B1F:21" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_1F/FLANNERY": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F", + "locations": [ + "NPC_GIFT_RECEIVED_TM50", + "BADGE_4" + ], + "events": [ + "EVENT_DEFEAT_FLANNERY" + ], + "exits": [ + "REGION_LAVARIDGE_TOWN_GYM_1F/ENTRANCE" + ], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_1F:25/MAP_LAVARIDGE_TOWN_GYM_B1F:23" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_B1F/TOP": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_B1F:14/MAP_LAVARIDGE_TOWN_GYM_1F:16", + "MAP_LAVARIDGE_TOWN_GYM_B1F:15/MAP_LAVARIDGE_TOWN_GYM_1F:17", + "MAP_LAVARIDGE_TOWN_GYM_B1F:16/MAP_LAVARIDGE_TOWN_GYM_1F:18", + "MAP_LAVARIDGE_TOWN_GYM_B1F:19/MAP_LAVARIDGE_TOWN_GYM_1F:22" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_LEFT_LOWER": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_B1F:1/MAP_LAVARIDGE_TOWN_GYM_1F:6", + "MAP_LAVARIDGE_TOWN_GYM_B1F:2/MAP_LAVARIDGE_TOWN_GYM_1F:3", + "MAP_LAVARIDGE_TOWN_GYM_B1F:3/MAP_LAVARIDGE_TOWN_GYM_1F:5", + "MAP_LAVARIDGE_TOWN_GYM_B1F:4/MAP_LAVARIDGE_TOWN_GYM_1F:4", + "MAP_LAVARIDGE_TOWN_GYM_B1F:6/MAP_LAVARIDGE_TOWN_GYM_1F:8", + "MAP_LAVARIDGE_TOWN_GYM_B1F:7/MAP_LAVARIDGE_TOWN_GYM_1F:9", + "MAP_LAVARIDGE_TOWN_GYM_B1F:8/MAP_LAVARIDGE_TOWN_GYM_1F:10", + "MAP_LAVARIDGE_TOWN_GYM_B1F:17/MAP_LAVARIDGE_TOWN_GYM_1F:19", + "MAP_LAVARIDGE_TOWN_GYM_B1F:20/MAP_LAVARIDGE_TOWN_GYM_1F:21" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_LEFT_UPPER_1": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_LEFT_LOWER" + ], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_B1F:9/MAP_LAVARIDGE_TOWN_GYM_1F:11", + "MAP_LAVARIDGE_TOWN_GYM_B1F:10/MAP_LAVARIDGE_TOWN_GYM_1F:12", + "MAP_LAVARIDGE_TOWN_GYM_B1F:11/MAP_LAVARIDGE_TOWN_GYM_1F:13", + "MAP_LAVARIDGE_TOWN_GYM_B1F:12/MAP_LAVARIDGE_TOWN_GYM_1F:14" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_LEFT_UPPER_2": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_LEFT_LOWER" + ], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_B1F:5/MAP_LAVARIDGE_TOWN_GYM_1F:7", + "MAP_LAVARIDGE_TOWN_GYM_B1F:13/MAP_LAVARIDGE_TOWN_GYM_1F:15" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_LOWER": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_B1F:0/MAP_LAVARIDGE_TOWN_GYM_1F:2", + "MAP_LAVARIDGE_TOWN_GYM_B1F:22/MAP_LAVARIDGE_TOWN_GYM_1F:24" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_MIDDLE": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_LOWER" + ], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_B1F:23/MAP_LAVARIDGE_TOWN_GYM_1F:25" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_UPPER_1": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_MIDDLE" + ], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_B1F:18/MAP_LAVARIDGE_TOWN_GYM_1F:20" + ] + }, + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_UPPER_2": { + "parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_LOWER" + ], + "warps": [ + "MAP_LAVARIDGE_TOWN_GYM_B1F:21/MAP_LAVARIDGE_TOWN_GYM_1F:23" + ] + }, + "REGION_LAVARIDGE_TOWN_MART/MAIN": { + "parent_map": "MAP_LAVARIDGE_TOWN_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_MART:0,1/MAP_LAVARIDGE_TOWN:2" + ] + }, + "REGION_LAVARIDGE_TOWN_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:0,1/MAP_LAVARIDGE_TOWN:3", + "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:2/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:0", + "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:3/MAP_LAVARIDGE_TOWN:5" + ] + }, + "REGION_LAVARIDGE_TOWN_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:0/MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F:2" + ] + }, + "REGION_LAVARIDGE_TOWN_HOUSE/MAIN": { + "parent_map": "MAP_LAVARIDGE_TOWN_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LAVARIDGE_TOWN_HOUSE:0,1/MAP_LAVARIDGE_TOWN:4" + ] + }, + + "REGION_FORTREE_CITY/MAIN": { + "parent_map": "MAP_FORTREE_CITY", + "locations": [], + "events": [ + "EVENT_VISITED_FORTREE_CITY" + ], + "exits": [ + "REGION_FORTREE_CITY/BEFORE_GYM", + "REGION_ROUTE119/UPPER", + "REGION_ROUTE120/NORTH" + ], + "warps": [ + "MAP_FORTREE_CITY:0/MAP_FORTREE_CITY_POKEMON_CENTER_1F:0", + "MAP_FORTREE_CITY:1/MAP_FORTREE_CITY_HOUSE1:0", + "MAP_FORTREE_CITY:3/MAP_FORTREE_CITY_MART:0", + "MAP_FORTREE_CITY:4/MAP_FORTREE_CITY_HOUSE2:0", + "MAP_FORTREE_CITY:5/MAP_FORTREE_CITY_HOUSE3:0", + "MAP_FORTREE_CITY:6/MAP_FORTREE_CITY_HOUSE4:0", + "MAP_FORTREE_CITY:7/MAP_FORTREE_CITY_HOUSE5:0", + "MAP_FORTREE_CITY:8/MAP_FORTREE_CITY_DECORATION_SHOP:0" + ] + }, + "REGION_FORTREE_CITY/BEFORE_GYM": { + "parent_map": "MAP_FORTREE_CITY", + "locations": [], + "events": [], + "exits": [ + "REGION_FORTREE_CITY/MAIN" + ], + "warps": [ + "MAP_FORTREE_CITY:2/MAP_FORTREE_CITY_GYM:0" + ] + }, + "REGION_FORTREE_CITY_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_FORTREE_CITY_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_POKEMON_CENTER_1F:0,1/MAP_FORTREE_CITY:0", + "MAP_FORTREE_CITY_POKEMON_CENTER_1F:2/MAP_FORTREE_CITY_POKEMON_CENTER_2F:0" + ] + }, + "REGION_FORTREE_CITY_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_FORTREE_CITY_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_POKEMON_CENTER_2F:0/MAP_FORTREE_CITY_POKEMON_CENTER_1F:2" + ] + }, + "REGION_FORTREE_CITY_HOUSE1/MAIN": { + "parent_map": "MAP_FORTREE_CITY_HOUSE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_HOUSE1:0,1/MAP_FORTREE_CITY:1" + ] + }, + "REGION_FORTREE_CITY_HOUSE2/MAIN": { + "parent_map": "MAP_FORTREE_CITY_HOUSE2", + "locations": [ + "NPC_GIFT_RECEIVED_TM10" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_HOUSE2:0,1/MAP_FORTREE_CITY:4" + ] + }, + "REGION_FORTREE_CITY_HOUSE3/MAIN": { + "parent_map": "MAP_FORTREE_CITY_HOUSE3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_HOUSE3:0,1/MAP_FORTREE_CITY:5" + ] + }, + "REGION_FORTREE_CITY_HOUSE4/MAIN": { + "parent_map": "MAP_FORTREE_CITY_HOUSE4", + "locations": [ + "NPC_GIFT_RECEIVED_MENTAL_HERB" + ], + "events": [ + "EVENT_WINGULL_QUEST_1" + ], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_HOUSE4:0,1/MAP_FORTREE_CITY:6" + ] + }, + "REGION_FORTREE_CITY_HOUSE5/MAIN": { + "parent_map": "MAP_FORTREE_CITY_HOUSE5", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_HOUSE5:0,1/MAP_FORTREE_CITY:7" + ] + }, + "REGION_FORTREE_CITY_GYM/MAIN": { + "parent_map": "MAP_FORTREE_CITY_GYM", + "locations": [ + "NPC_GIFT_RECEIVED_TM40", + "BADGE_6" + ], + "events": [ + "EVENT_DEFEAT_WINONA" + ], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_GYM:0,1/MAP_FORTREE_CITY:2" + ] + }, + "REGION_FORTREE_CITY_MART/MAIN": { + "parent_map": "MAP_FORTREE_CITY_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_MART:0,1/MAP_FORTREE_CITY:3" + ] + }, + "REGION_FORTREE_CITY_DECORATION_SHOP/MAIN": { + "parent_map": "MAP_FORTREE_CITY_DECORATION_SHOP", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FORTREE_CITY_DECORATION_SHOP:0,1/MAP_FORTREE_CITY:8" + ] + }, + + "REGION_LILYCOVE_CITY/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY", + "locations": [ + "ITEM_LILYCOVE_CITY_MAX_REPEL", + "HIDDEN_ITEM_LILYCOVE_CITY_HEART_SCALE", + "HIDDEN_ITEM_LILYCOVE_CITY_PP_UP", + "HIDDEN_ITEM_LILYCOVE_CITY_POKE_BALL" + ], + "events": [ + "EVENT_VISITED_LILYCOVE_CITY" + ], + "exits": [ + "REGION_ROUTE121/EAST", + "REGION_LILYCOVE_CITY/SEA" + ], + "warps": [ + "MAP_LILYCOVE_CITY:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:0", + "MAP_LILYCOVE_CITY:1/MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:0", + "MAP_LILYCOVE_CITY:2/MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:0", + "MAP_LILYCOVE_CITY:3,13/MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:0,1", + "MAP_LILYCOVE_CITY:4/MAP_LILYCOVE_CITY_CONTEST_LOBBY:0", + "MAP_LILYCOVE_CITY:5/MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB:1", + "MAP_LILYCOVE_CITY:7/MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE:0", + "MAP_LILYCOVE_CITY:8/MAP_LILYCOVE_CITY_HOUSE1:0", + "MAP_LILYCOVE_CITY:9/MAP_LILYCOVE_CITY_HOUSE2:0", + "MAP_LILYCOVE_CITY:10/MAP_LILYCOVE_CITY_HOUSE3:0", + "MAP_LILYCOVE_CITY:11/MAP_LILYCOVE_CITY_HOUSE4:0", + "MAP_LILYCOVE_CITY:12/MAP_LILYCOVE_CITY_HARBOR:0" + ] + }, + "REGION_LILYCOVE_CITY/SEA": { + "parent_map": "MAP_LILYCOVE_CITY", + "locations": [], + "events": [], + "exits": [ + "REGION_LILYCOVE_CITY/MAIN", + "REGION_ROUTE124/MAIN" + ], + "warps": [ + "MAP_LILYCOVE_CITY:6/MAP_AQUA_HIDEOUT_1F:0" + ] + }, + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_1F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR/MAIN" + ], + "warps": [ + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:0,1/MAP_LILYCOVE_CITY:0", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:0" + ] + }, + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_2F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F", + "locations": [], + "events": [], + "exits": [ + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR/MAIN" + ], + "warps": [ + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:2", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:0" + ] + }, + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_3F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F", + "locations": [], + "events": [], + "exits": [ + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR/MAIN" + ], + "warps": [ + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:1", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:0" + ] + }, + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_4F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F", + "locations": [], + "events": [], + "exits": [ + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR/MAIN" + ], + "warps": [ + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:1", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:0" + ] + }, + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_5F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F", + "locations": [], + "events": [], + "exits": [ + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR/MAIN" + ], + "warps": [ + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:1", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP:0" + ] + }, + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP:0/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:2" + ] + }, + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR", + "locations": [], + "events": [], + "exits": [ + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_1F/MAIN", + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_2F/MAIN", + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_3F/MAIN", + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_4F/MAIN", + "REGION_LILYCOVE_CITY_DEPARTMENT_STORE_5F/MAIN" + ], + "warps": [] + }, + "REGION_LILYCOVE_CITY_COVE_LILY_MOTEL_1F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:0,1/MAP_LILYCOVE_CITY:1", + "MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:2/MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F:0" + ] + }, + "REGION_LILYCOVE_CITY_COVE_LILY_MOTEL_2F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F:0/MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F:2" + ] + }, + "REGION_LILYCOVE_CITY_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:0,1/MAP_LILYCOVE_CITY:2", + "MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:2/MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:0" + ] + }, + "REGION_LILYCOVE_CITY_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:0/MAP_LILYCOVE_CITY_POKEMON_CENTER_1F:2" + ] + }, + "REGION_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:0,1/MAP_LILYCOVE_CITY:3,13", + "MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:2/MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F:0" + ] + }, + "REGION_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F:0/MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F:2" + ] + }, + "REGION_LILYCOVE_CITY_CONTEST_LOBBY/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_CONTEST_LOBBY", + "locations": [ + "NPC_GIFT_RECEIVED_POKEBLOCK_CASE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_CONTEST_LOBBY:0,1/MAP_LILYCOVE_CITY:4", + "MAP_LILYCOVE_CITY_CONTEST_LOBBY:2/MAP_LILYCOVE_CITY_CONTEST_HALL:0", + "MAP_LILYCOVE_CITY_CONTEST_LOBBY:3/MAP_LILYCOVE_CITY_CONTEST_HALL:1" + ] + }, + "REGION_LILYCOVE_CITY_CONTEST_HALL/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_CONTEST_HALL", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_CONTEST_HALL:0,2/MAP_LILYCOVE_CITY_CONTEST_LOBBY:2", + "MAP_LILYCOVE_CITY_CONTEST_HALL:1,3/MAP_LILYCOVE_CITY_CONTEST_LOBBY:3" + ] + }, + "REGION_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB:0,1/MAP_LILYCOVE_CITY:5" + ] + }, + "REGION_LILYCOVE_CITY_MOVE_DELETERS_HOUSE/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE:0,1/MAP_LILYCOVE_CITY:7" + ] + }, + "REGION_LILYCOVE_CITY_HOUSE1/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_HOUSE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_HOUSE1:0,1/MAP_LILYCOVE_CITY:8" + ] + }, + "REGION_LILYCOVE_CITY_HOUSE2/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_HOUSE2", + "locations": [ + "NPC_GIFT_RECEIVED_TM44" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_HOUSE2:0,1/MAP_LILYCOVE_CITY:9" + ] + }, + "REGION_LILYCOVE_CITY_HOUSE3/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_HOUSE3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_HOUSE3:0,1/MAP_LILYCOVE_CITY:10" + ] + }, + "REGION_LILYCOVE_CITY_HOUSE4/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_HOUSE4", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_LILYCOVE_CITY_HOUSE4:0,1/MAP_LILYCOVE_CITY:11" + ] + }, + "REGION_LILYCOVE_CITY_HARBOR/MAIN": { + "parent_map": "MAP_LILYCOVE_CITY_HARBOR", + "locations": [], + "events": [], + "exits": [ + "REGION_SS_TIDAL_CORRIDOR/MAIN" + ], + "warps": [ + "MAP_LILYCOVE_CITY_HARBOR:0,1/MAP_LILYCOVE_CITY:12" + ] + }, + "REGION_SS_TIDAL_CORRIDOR/MAIN": { + "parent_map": "MAP_SS_TIDAL_CORRIDOR", + "locations": [], + "events": [], + "exits": [ + "REGION_SLATEPORT_CITY_HARBOR/MAIN", + "REGION_LILYCOVE_CITY_HARBOR/MAIN" + ], + "warps": [ + "MAP_SS_TIDAL_CORRIDOR:0/MAP_SS_TIDAL_ROOMS:0", + "MAP_SS_TIDAL_CORRIDOR:4/MAP_SS_TIDAL_ROOMS:8", + "MAP_SS_TIDAL_CORRIDOR:1/MAP_SS_TIDAL_ROOMS:2", + "MAP_SS_TIDAL_CORRIDOR:5/MAP_SS_TIDAL_ROOMS:9", + "MAP_SS_TIDAL_CORRIDOR:2/MAP_SS_TIDAL_ROOMS:4", + "MAP_SS_TIDAL_CORRIDOR:6/MAP_SS_TIDAL_ROOMS:10", + "MAP_SS_TIDAL_CORRIDOR:3/MAP_SS_TIDAL_ROOMS:6", + "MAP_SS_TIDAL_CORRIDOR:7/MAP_SS_TIDAL_ROOMS:11", + "MAP_SS_TIDAL_CORRIDOR:8/MAP_SS_TIDAL_LOWER_DECK:0" + ] + }, + "REGION_SS_TIDAL_ROOMS/MAIN": { + "parent_map": "MAP_SS_TIDAL_ROOMS", + "locations": [ + "NPC_GIFT_RECEIVED_TM49" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_SS_TIDAL_ROOMS:0,1/MAP_SS_TIDAL_CORRIDOR:0", + "MAP_SS_TIDAL_ROOMS:8/MAP_SS_TIDAL_CORRIDOR:4", + "MAP_SS_TIDAL_ROOMS:2,3/MAP_SS_TIDAL_CORRIDOR:1", + "MAP_SS_TIDAL_ROOMS:9/MAP_SS_TIDAL_CORRIDOR:5", + "MAP_SS_TIDAL_ROOMS:4,5/MAP_SS_TIDAL_CORRIDOR:2", + "MAP_SS_TIDAL_ROOMS:10/MAP_SS_TIDAL_CORRIDOR:6", + "MAP_SS_TIDAL_ROOMS:6,7/MAP_SS_TIDAL_CORRIDOR:3", + "MAP_SS_TIDAL_ROOMS:11/MAP_SS_TIDAL_CORRIDOR:7" + ] + }, + "REGION_SS_TIDAL_LOWER_DECK/MAIN": { + "parent_map": "MAP_SS_TIDAL_LOWER_DECK", + "locations": [ + "HIDDEN_ITEM_SS_TIDAL_LOWER_DECK_LEFTOVERS" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_SS_TIDAL_LOWER_DECK:0/MAP_SS_TIDAL_CORRIDOR:8" + ] + }, + + "REGION_MOSSDEEP_CITY/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY", + "locations": [ + "ITEM_MOSSDEEP_CITY_NET_BALL", + "NPC_GIFT_RECEIVED_KINGS_ROCK" + ], + "events": [ + "EVENT_VISITED_MOSSDEEP_CITY" + ], + "exits": [ + "REGION_ROUTE124/MAIN", + "REGION_ROUTE125/SEA", + "REGION_ROUTE127/MAIN" + ], + "warps": [ + "MAP_MOSSDEEP_CITY:0/MAP_MOSSDEEP_CITY_HOUSE1:0", + "MAP_MOSSDEEP_CITY:1/MAP_MOSSDEEP_CITY_GYM:0", + "MAP_MOSSDEEP_CITY:2/MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:0", + "MAP_MOSSDEEP_CITY:3/MAP_MOSSDEEP_CITY_HOUSE2:0", + "MAP_MOSSDEEP_CITY:4/MAP_MOSSDEEP_CITY_MART:0", + "MAP_MOSSDEEP_CITY:5/MAP_MOSSDEEP_CITY_HOUSE3:0", + "MAP_MOSSDEEP_CITY:6/MAP_MOSSDEEP_CITY_STEVENS_HOUSE:0", + "MAP_MOSSDEEP_CITY:7/MAP_MOSSDEEP_CITY_HOUSE4:1", + "MAP_MOSSDEEP_CITY:8/MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:0", + "MAP_MOSSDEEP_CITY:9/MAP_MOSSDEEP_CITY_GAME_CORNER_1F:0" + ] + }, + "REGION_MOSSDEEP_CITY_GYM/ROOM_1": { + "parent_map": "MAP_MOSSDEEP_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_GYM:0,1/MAP_MOSSDEEP_CITY:1", + "MAP_MOSSDEEP_CITY_GYM:2/MAP_MOSSDEEP_CITY_GYM:3", + "MAP_MOSSDEEP_CITY_GYM:8/MAP_MOSSDEEP_CITY_GYM:9" + ] + }, + "REGION_MOSSDEEP_CITY_GYM/ROOM_2": { + "parent_map": "MAP_MOSSDEEP_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_GYM:3/MAP_MOSSDEEP_CITY_GYM:2", + "MAP_MOSSDEEP_CITY_GYM:4/MAP_MOSSDEEP_CITY_GYM:5", + "MAP_MOSSDEEP_CITY_GYM:6/MAP_MOSSDEEP_CITY_GYM:7" + ] + }, + "REGION_MOSSDEEP_CITY_GYM/ROOM_3": { + "parent_map": "MAP_MOSSDEEP_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_GYM:5/MAP_MOSSDEEP_CITY_GYM:4", + "MAP_MOSSDEEP_CITY_GYM:10/MAP_MOSSDEEP_CITY_GYM:11" + ] + }, + "REGION_MOSSDEEP_CITY_GYM/ROOM_4": { + "parent_map": "MAP_MOSSDEEP_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_GYM:11/MAP_MOSSDEEP_CITY_GYM:10", + "MAP_MOSSDEEP_CITY_GYM:12/MAP_MOSSDEEP_CITY_GYM:13" + ] + }, + "REGION_MOSSDEEP_CITY_GYM/ROOM_5": { + "parent_map": "MAP_MOSSDEEP_CITY_GYM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_GYM:7/MAP_MOSSDEEP_CITY_GYM:6", + "MAP_MOSSDEEP_CITY_GYM:9/MAP_MOSSDEEP_CITY_GYM:8" + ] + }, + "REGION_MOSSDEEP_CITY_GYM/ROOM_6": { + "parent_map": "MAP_MOSSDEEP_CITY_GYM", + "locations": [ + "NPC_GIFT_RECEIVED_TM04", + "BADGE_7" + ], + "events": [ + "EVENT_DEFEAT_TATE_AND_LIZA" + ], + "exits": [ + "REGION_MOSSDEEP_CITY_GYM/ROOM_1" + ], + "warps": [ + "MAP_MOSSDEEP_CITY_GYM:13/MAP_MOSSDEEP_CITY_GYM:12" + ] + }, + "REGION_MOSSDEEP_CITY_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:0,1/MAP_MOSSDEEP_CITY:2", + "MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:2/MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:0" + ] + }, + "REGION_MOSSDEEP_CITY_MART/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_MART:0,1/MAP_MOSSDEEP_CITY:4" + ] + }, + "REGION_MOSSDEEP_CITY_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:0/MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F:2" + ] + }, + "REGION_MOSSDEEP_CITY_SPACE_CENTER_1F/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_SPACE_CENTER_1F", + "locations": [ + "NPC_GIFT_RECEIVED_SUN_STONE_MOSSDEEP" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:0,1/MAP_MOSSDEEP_CITY:8", + "MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:2/MAP_MOSSDEEP_CITY_SPACE_CENTER_2F:0" + ] + }, + "REGION_MOSSDEEP_CITY_SPACE_CENTER_2F/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_SPACE_CENTER_2F", + "locations": [], + "events": [ + "EVENT_DEFEAT_MAXIE_AT_SPACE_STATION" + ], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_SPACE_CENTER_2F:0/MAP_MOSSDEEP_CITY_SPACE_CENTER_1F:2" + ] + }, + "REGION_MOSSDEEP_CITY_GAME_CORNER_1F/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_GAME_CORNER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_GAME_CORNER_1F:0,1/MAP_MOSSDEEP_CITY:9", + "MAP_MOSSDEEP_CITY_GAME_CORNER_1F:2/MAP_MOSSDEEP_CITY_GAME_CORNER_B1F:0" + ] + }, + "REGION_MOSSDEEP_CITY_GAME_CORNER_B1F/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_GAME_CORNER_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_GAME_CORNER_B1F:0/MAP_MOSSDEEP_CITY_GAME_CORNER_1F:2" + ] + }, + "REGION_MOSSDEEP_CITY_STEVENS_HOUSE/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_STEVENS_HOUSE", + "locations": [ + "NPC_GIFT_RECEIVED_HM08" + ], + "events": [ + "EVENT_STEVEN_GIVES_DIVE" + ], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_STEVENS_HOUSE:0,1/MAP_MOSSDEEP_CITY:6" + ] + }, + "REGION_MOSSDEEP_CITY_HOUSE1/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_HOUSE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_HOUSE1:0,1/MAP_MOSSDEEP_CITY:0" + ] + }, + "REGION_MOSSDEEP_CITY_HOUSE2/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_HOUSE2", + "locations": [], + "events": [ + "EVENT_WINGULL_QUEST_2" + ], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_HOUSE2:0,1/MAP_MOSSDEEP_CITY:3" + ] + }, + "REGION_MOSSDEEP_CITY_HOUSE3/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_HOUSE3", + "locations": [ + "NPC_GIFT_RECEIVED_SUPER_ROD" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_HOUSE3:0,1/MAP_MOSSDEEP_CITY:5" + ] + }, + "REGION_MOSSDEEP_CITY_HOUSE4/MAIN": { + "parent_map": "MAP_MOSSDEEP_CITY_HOUSE4", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MOSSDEEP_CITY_HOUSE4:0,1/MAP_MOSSDEEP_CITY:7" + ] + }, + + "REGION_UNDERWATER_SOOTOPOLIS_CITY/MAIN": { + "parent_map": "MAP_UNDERWATER_SOOTOPOLIS_CITY", + "locations": [], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY/WATER" + ], + "warps": [ + "MAP_UNDERWATER_SOOTOPOLIS_CITY:0,1/MAP_UNDERWATER_ROUTE126:0" + ] + }, + "REGION_SOOTOPOLIS_CITY/WATER": { + "parent_map": "MAP_SOOTOPOLIS_CITY", + "locations": [], + "events": [], + "exits": [ + "REGION_UNDERWATER_SOOTOPOLIS_CITY/MAIN", + "REGION_SOOTOPOLIS_CITY/EAST", + "REGION_SOOTOPOLIS_CITY/WEST", + "REGION_SOOTOPOLIS_CITY/ISLAND" + ], + "warps": [] + }, + "REGION_SOOTOPOLIS_CITY/EAST": { + "parent_map": "MAP_SOOTOPOLIS_CITY", + "locations": [], + "events": [ + "EVENT_VISITED_SOOTOPOLIS_CITY" + ], + "exits": [ + "REGION_SOOTOPOLIS_CITY/WATER" + ], + "warps": [ + "MAP_SOOTOPOLIS_CITY:0/MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:0", + "MAP_SOOTOPOLIS_CITY:5/MAP_SOOTOPOLIS_CITY_HOUSE2:0", + "MAP_SOOTOPOLIS_CITY:7/MAP_SOOTOPOLIS_CITY_HOUSE4:0", + "MAP_SOOTOPOLIS_CITY:9/MAP_SOOTOPOLIS_CITY_HOUSE6:0", + "MAP_SOOTOPOLIS_CITY:11/MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE:0", + "MAP_SOOTOPOLIS_CITY:12/MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:0" + ] + }, + "REGION_SOOTOPOLIS_CITY/WEST": { + "parent_map": "MAP_SOOTOPOLIS_CITY", + "locations": [], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY/WATER" + ], + "warps": [ + "MAP_SOOTOPOLIS_CITY:1/MAP_SOOTOPOLIS_CITY_MART:0", + "MAP_SOOTOPOLIS_CITY:6/MAP_SOOTOPOLIS_CITY_HOUSE3:0", + "MAP_SOOTOPOLIS_CITY:3/MAP_CAVE_OF_ORIGIN_ENTRANCE:0", + "MAP_SOOTOPOLIS_CITY:4/MAP_SOOTOPOLIS_CITY_HOUSE1:0", + "MAP_SOOTOPOLIS_CITY:8/MAP_SOOTOPOLIS_CITY_HOUSE5:0", + "MAP_SOOTOPOLIS_CITY:10/MAP_SOOTOPOLIS_CITY_HOUSE7:0" + ] + }, + "REGION_SOOTOPOLIS_CITY/ISLAND": { + "parent_map": "MAP_SOOTOPOLIS_CITY", + "locations": [ + "NPC_GIFT_RECEIVED_HM07" + ], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY/WATER" + ], + "warps": [ + "MAP_SOOTOPOLIS_CITY:2/MAP_SOOTOPOLIS_CITY_GYM_1F:0" + ] + }, + "REGION_SOOTOPOLIS_CITY_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:0,1/MAP_SOOTOPOLIS_CITY:0", + "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:2/MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:0" + ] + }, + "REGION_SOOTOPOLIS_CITY_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:0/MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F:2" + ] + }, + "REGION_SOOTOPOLIS_CITY_MART/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_MART:0,1/MAP_SOOTOPOLIS_CITY:1" + ] + }, + "REGION_SOOTOPOLIS_CITY_GYM_1F/ENTRANCE": { + "parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_1" + ], + "warps": [ + "MAP_SOOTOPOLIS_CITY_GYM_1F:0,1/MAP_SOOTOPOLIS_CITY:2", + "MAP_SOOTOPOLIS_CITY_GYM_1F:2/MAP_SOOTOPOLIS_CITY_GYM_B1F:0" + ] + }, + "REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_1": { + "parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY_GYM_1F/ENTRANCE", + "REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_2", + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_2" + ], + "warps": [] + }, + "REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_2": { + "parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_1", + "REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_3", + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_3" + ], + "warps": [] + }, + "REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_3": { + "parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_2", + "REGION_SOOTOPOLIS_CITY_GYM_1F/TOP", + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_4" + ], + "warps": [] + }, + "REGION_SOOTOPOLIS_CITY_GYM_1F/TOP": { + "parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F", + "locations": [ + "NPC_GIFT_RECEIVED_TM03", + "BADGE_8" + ], + "events": [ + "EVENT_DEFEAT_JUAN" + ], + "exits": [ + "REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_3" + ], + "warps": [] + }, + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_1": { + "parent_map": "MAP_SOOTOPOLIS_CITY_GYM_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_GYM_B1F:0/MAP_SOOTOPOLIS_CITY_GYM_1F:2" + ] + }, + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_2": { + "parent_map": "MAP_SOOTOPOLIS_CITY_GYM_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_1" + ], + "warps": [] + }, + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_3": { + "parent_map": "MAP_SOOTOPOLIS_CITY_GYM_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_2" + ], + "warps": [] + }, + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_4": { + "parent_map": "MAP_SOOTOPOLIS_CITY_GYM_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_3" + ], + "warps": [] + }, + "REGION_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:0,1/MAP_SOOTOPOLIS_CITY:12", + "MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:2/MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F:0" + ] + }, + "REGION_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F:0/MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F:2" + ] + }, + "REGION_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE:0,1/MAP_SOOTOPOLIS_CITY:11" + ] + }, + "REGION_SOOTOPOLIS_CITY_HOUSE1/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE1", + "locations": [ + "NPC_GIFT_RECEIVED_TM31" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_HOUSE1:0,1/MAP_SOOTOPOLIS_CITY:4" + ] + }, + "REGION_SOOTOPOLIS_CITY_HOUSE2/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE2", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_HOUSE2:0,1/MAP_SOOTOPOLIS_CITY:5" + ] + }, + "REGION_SOOTOPOLIS_CITY_HOUSE3/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_HOUSE3:0,1/MAP_SOOTOPOLIS_CITY:6" + ] + }, + "REGION_SOOTOPOLIS_CITY_HOUSE4/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE4", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_HOUSE4:0,1/MAP_SOOTOPOLIS_CITY:7" + ] + }, + "REGION_SOOTOPOLIS_CITY_HOUSE5/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE5", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_HOUSE5:0,1/MAP_SOOTOPOLIS_CITY:8" + ] + }, + "REGION_SOOTOPOLIS_CITY_HOUSE6/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE6", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_HOUSE6:0,1/MAP_SOOTOPOLIS_CITY:9" + ] + }, + "REGION_SOOTOPOLIS_CITY_HOUSE7/MAIN": { + "parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE7", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOOTOPOLIS_CITY_HOUSE7:0,1/MAP_SOOTOPOLIS_CITY:10" + ] + }, + + "REGION_PACIFIDLOG_TOWN/MAIN": { + "parent_map": "MAP_PACIFIDLOG_TOWN", + "locations": [], + "events": [ + "EVENT_VISITED_PACIFIDLOG_TOWN" + ], + "exits": [ + "REGION_ROUTE131/MAIN", + "REGION_ROUTE132/EAST" + ], + "warps": [ + "MAP_PACIFIDLOG_TOWN:0/MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:0", + "MAP_PACIFIDLOG_TOWN:1/MAP_PACIFIDLOG_TOWN_HOUSE1:0", + "MAP_PACIFIDLOG_TOWN:2/MAP_PACIFIDLOG_TOWN_HOUSE2:0", + "MAP_PACIFIDLOG_TOWN:3/MAP_PACIFIDLOG_TOWN_HOUSE3:0", + "MAP_PACIFIDLOG_TOWN:4/MAP_PACIFIDLOG_TOWN_HOUSE4:0", + "MAP_PACIFIDLOG_TOWN:5/MAP_PACIFIDLOG_TOWN_HOUSE5:0" + ] + }, + "REGION_PACIFIDLOG_TOWN_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:0,1/MAP_PACIFIDLOG_TOWN:0", + "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:2/MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:0" + ] + }, + "REGION_PACIFIDLOG_TOWN_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:0/MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F:2" + ] + }, + "REGION_PACIFIDLOG_TOWN_HOUSE1/MAIN": { + "parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PACIFIDLOG_TOWN_HOUSE1:0,1/MAP_PACIFIDLOG_TOWN:1" + ] + }, + "REGION_PACIFIDLOG_TOWN_HOUSE2/MAIN": { + "parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE2", + "locations": [ + "NPC_GIFT_RECEIVED_TM27_2", + "NPC_GIFT_RECEIVED_TM21" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_PACIFIDLOG_TOWN_HOUSE2:0,1/MAP_PACIFIDLOG_TOWN:2" + ] + }, + "REGION_PACIFIDLOG_TOWN_HOUSE3/MAIN": { + "parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PACIFIDLOG_TOWN_HOUSE3:0,1/MAP_PACIFIDLOG_TOWN:3" + ] + }, + "REGION_PACIFIDLOG_TOWN_HOUSE4/MAIN": { + "parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE4", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PACIFIDLOG_TOWN_HOUSE4:0,1/MAP_PACIFIDLOG_TOWN:4" + ] + }, + "REGION_PACIFIDLOG_TOWN_HOUSE5/MAIN": { + "parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE5", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_PACIFIDLOG_TOWN_HOUSE5:0,1/MAP_PACIFIDLOG_TOWN:5" + ] + }, + + "REGION_EVER_GRANDE_CITY/SEA": { + "parent_map": "MAP_EVER_GRANDE_CITY", + "locations": [], + "events": [], + "exits": [ + "REGION_EVER_GRANDE_CITY/SOUTH", + "REGION_ROUTE128/MAIN" + ], + "warps": [] + }, + "REGION_EVER_GRANDE_CITY/SOUTH": { + "parent_map": "MAP_EVER_GRANDE_CITY", + "locations": [], + "events": [ + "EVENT_VISITED_EVER_GRANDE_CITY" + ], + "exits": [ + "REGION_EVER_GRANDE_CITY/SEA" + ], + "warps": [ + "MAP_EVER_GRANDE_CITY:1/MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:0", + "MAP_EVER_GRANDE_CITY:2/MAP_VICTORY_ROAD_1F:0" + ] + }, + "REGION_EVER_GRANDE_CITY/NORTH": { + "parent_map": "MAP_EVER_GRANDE_CITY", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY:0/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:0", + "MAP_EVER_GRANDE_CITY:3/MAP_VICTORY_ROAD_1F:1" + ] + }, + "REGION_EVER_GRANDE_CITY_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:0,1/MAP_EVER_GRANDE_CITY:1", + "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:2/MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:0" + ] + }, + "REGION_EVER_GRANDE_CITY_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:0/MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F:2" + ] + }, + "REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/BEHIND_BADGE_CHECKERS" + ], + "warps": [ + "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:0,1/MAP_EVER_GRANDE_CITY:0", + "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:4/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:0" + ] + }, + "REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/BEHIND_BADGE_CHECKERS": { + "parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/MAIN" + ], + "warps": [ + "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:2,3/MAP_EVER_GRANDE_CITY_HALL5:0" + ] + }, + "REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:0/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:4" + ] + }, + "REGION_EVER_GRANDE_CITY_HALL5/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_HALL5", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_HALL5:0,2,3/MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F:2", + "MAP_EVER_GRANDE_CITY_HALL5:1/MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:0" + ] + }, + "REGION_EVER_GRANDE_CITY_SIDNEYS_ROOM/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:0/MAP_EVER_GRANDE_CITY_HALL5:1", + "MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:1/MAP_EVER_GRANDE_CITY_HALL1:0" + ] + }, + "REGION_EVER_GRANDE_CITY_HALL1/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_HALL1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_HALL1:0,2,3/MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM:1", + "MAP_EVER_GRANDE_CITY_HALL1:1/MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:0" + ] + }, + "REGION_EVER_GRANDE_CITY_PHOEBES_ROOM/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_PHOEBES_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:0/MAP_EVER_GRANDE_CITY_HALL1:1", + "MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:1/MAP_EVER_GRANDE_CITY_HALL2:0" + ] + }, + "REGION_EVER_GRANDE_CITY_HALL2/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_HALL2", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_HALL2:0,2,3/MAP_EVER_GRANDE_CITY_PHOEBES_ROOM:1", + "MAP_EVER_GRANDE_CITY_HALL2:1/MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:0" + ] + }, + "REGION_EVER_GRANDE_CITY_GLACIAS_ROOM/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_GLACIAS_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:0/MAP_EVER_GRANDE_CITY_HALL2:1", + "MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:1/MAP_EVER_GRANDE_CITY_HALL3:0" + ] + }, + "REGION_EVER_GRANDE_CITY_HALL3/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_HALL3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_HALL3:0,2,3/MAP_EVER_GRANDE_CITY_GLACIAS_ROOM:1", + "MAP_EVER_GRANDE_CITY_HALL3:1/MAP_EVER_GRANDE_CITY_DRAKES_ROOM:0" + ] + }, + "REGION_EVER_GRANDE_CITY_DRAKES_ROOM/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_DRAKES_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_DRAKES_ROOM:0/MAP_EVER_GRANDE_CITY_HALL3:1", + "MAP_EVER_GRANDE_CITY_DRAKES_ROOM:1/MAP_EVER_GRANDE_CITY_HALL4:0" + ] + }, + "REGION_EVER_GRANDE_CITY_CHAMPIONS_ROOM/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM", + "locations": [], + "events": [ + "EVENT_DEFEAT_CHAMPION" + ], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:0/MAP_EVER_GRANDE_CITY_HALL4:1", + "MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:1/MAP_EVER_GRANDE_CITY_HALL_OF_FAME:0" + ] + }, + "REGION_EVER_GRANDE_CITY_HALL4/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_HALL4", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_HALL4:0/MAP_EVER_GRANDE_CITY_DRAKES_ROOM:1", + "MAP_EVER_GRANDE_CITY_HALL4:1/MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:0" + ] + }, + "REGION_EVER_GRANDE_CITY_HALL_OF_FAME/MAIN": { + "parent_map": "MAP_EVER_GRANDE_CITY_HALL_OF_FAME", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_EVER_GRANDE_CITY_HALL_OF_FAME:0/MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM:1" + ] + } +} diff --git a/worlds/pokemon_emerald/data/regions/dungeons.json b/worlds/pokemon_emerald/data/regions/dungeons.json new file mode 100644 index 000000000000..1da5e325bad0 --- /dev/null +++ b/worlds/pokemon_emerald/data/regions/dungeons.json @@ -0,0 +1,2231 @@ +{ + "REGION_PETALBURG_WOODS/WEST_PATH": { + "parent_map": "MAP_PETALBURG_WOODS", + "locations": [ + "ITEM_PETALBURG_WOODS_ETHER", + "ITEM_PETALBURG_WOODS_PARALYZE_HEAL", + "HIDDEN_ITEM_PETALBURG_WOODS_POTION", + "HIDDEN_ITEM_PETALBURG_WOODS_POKE_BALL", + "NPC_GIFT_RECEIVED_GREAT_BALL_PETALBURG_WOODS" + ], + "events": [], + "exits": [ + "REGION_PETALBURG_WOODS/EAST_PATH" + ], + "warps": [ + "MAP_PETALBURG_WOODS:0,1/MAP_ROUTE104:2,3", + "MAP_PETALBURG_WOODS:2,3/MAP_ROUTE104:4,5", + "MAP_PETALBURG_WOODS:4,5/MAP_ROUTE104:6,7" + ] + }, + "REGION_PETALBURG_WOODS/EAST_PATH": { + "parent_map": "MAP_PETALBURG_WOODS", + "locations": [ + "ITEM_PETALBURG_WOODS_GREAT_BALL", + "ITEM_PETALBURG_WOODS_X_ATTACK", + "HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_1", + "HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_2", + "NPC_GIFT_RECEIVED_MIRACLE_SEED" + ], + "events": [], + "exits": [ + "REGION_PETALBURG_WOODS/WEST_PATH" + ], + "warps": [] + }, + "REGION_RUSTURF_TUNNEL/WEST": { + "parent_map": "MAP_RUSTURF_TUNNEL", + "locations": [ + "ITEM_RUSTURF_TUNNEL_POKE_BALL", + "NPC_GIFT_RECEIVED_DEVON_GOODS_RUSTURF_TUNNEL" + ], + "events": [ + "EVENT_RECOVER_DEVON_GOODS" + ], + "exits": [ + "REGION_RUSTURF_TUNNEL/EAST" + ], + "warps": [ + "MAP_RUSTURF_TUNNEL:0/MAP_ROUTE116:0" + ] + }, + "REGION_RUSTURF_TUNNEL/EAST": { + "parent_map": "MAP_RUSTURF_TUNNEL", + "locations": [ + "ITEM_RUSTURF_TUNNEL_MAX_ETHER", + "NPC_GIFT_RECEIVED_HM04" + ], + "events": [], + "exits": [ + "REGION_RUSTURF_TUNNEL/WEST" + ], + "warps": [ + "MAP_RUSTURF_TUNNEL:1/MAP_VERDANTURF_TOWN:4", + "MAP_RUSTURF_TUNNEL:2/MAP_ROUTE116:2" + ] + }, + "REGION_GRANITE_CAVE_1F/LOWER": { + "parent_map": "MAP_GRANITE_CAVE_1F", + "locations": [ + "ITEM_GRANITE_CAVE_1F_ESCAPE_ROPE", + "NPC_GIFT_RECEIVED_HM05" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_GRANITE_CAVE_1F:0/MAP_ROUTE106:0", + "MAP_GRANITE_CAVE_1F:2/MAP_GRANITE_CAVE_B1F:1" + ] + }, + "REGION_GRANITE_CAVE_1F/UPPER": { + "parent_map": "MAP_GRANITE_CAVE_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_GRANITE_CAVE_1F/LOWER" + ], + "warps": [ + "MAP_GRANITE_CAVE_1F:1/MAP_GRANITE_CAVE_B1F:0", + "MAP_GRANITE_CAVE_1F:3/MAP_GRANITE_CAVE_STEVENS_ROOM:0" + ] + }, + "REGION_GRANITE_CAVE_B1F/LOWER": { + "parent_map": "MAP_GRANITE_CAVE_B1F", + "locations": [ + "ITEM_GRANITE_CAVE_B1F_POKE_BALL" + ], + "events": [], + "exits": [ + "REGION_GRANITE_CAVE_B1F/UPPER" + ], + "warps": [ + "MAP_GRANITE_CAVE_B1F:1/MAP_GRANITE_CAVE_1F:2", + "MAP_GRANITE_CAVE_B1F:3/MAP_GRANITE_CAVE_B2F:1" + ] + }, + "REGION_GRANITE_CAVE_B1F/LOWER_PLATFORM": { + "parent_map": "MAP_GRANITE_CAVE_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_GRANITE_CAVE_B1F:0/MAP_GRANITE_CAVE_1F:1", + "MAP_GRANITE_CAVE_B1F:2/MAP_GRANITE_CAVE_B2F:0" + ] + }, + "REGION_GRANITE_CAVE_B1F/UPPER": { + "parent_map": "MAP_GRANITE_CAVE_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_GRANITE_CAVE_B1F/UPPER" + ], + "warps": [ + "MAP_GRANITE_CAVE_B1F:4/MAP_GRANITE_CAVE_B2F:2", + "MAP_GRANITE_CAVE_B1F:5/MAP_GRANITE_CAVE_B2F:3", + "MAP_GRANITE_CAVE_B1F:6/MAP_GRANITE_CAVE_B2F:4" + ] + }, + "REGION_GRANITE_CAVE_B2F/NORTH_LOWER_LANDING": { + "parent_map": "MAP_GRANITE_CAVE_B2F", + "locations": [ + "ITEM_GRANITE_CAVE_B2F_REPEL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_GRANITE_CAVE_B2F:2/MAP_GRANITE_CAVE_B1F:4" + ] + }, + "REGION_GRANITE_CAVE_B2F/NORTH_UPPER_LANDING": { + "parent_map": "MAP_GRANITE_CAVE_B2F", + "locations": [], + "events": [], + "exits": [ + "REGION_GRANITE_CAVE_B2F/NORTH_LOWER_LANDING" + ], + "warps": [ + "MAP_GRANITE_CAVE_B2F:3/MAP_GRANITE_CAVE_B1F:5" + ] + }, + "REGION_GRANITE_CAVE_B2F/NORTH_EAST_ROOM": { + "parent_map": "MAP_GRANITE_CAVE_B2F", + "locations": [ + "ITEM_GRANITE_CAVE_B2F_RARE_CANDY", + "HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_1" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_GRANITE_CAVE_B2F:4/MAP_GRANITE_CAVE_B1F:6" + ] + }, + "REGION_GRANITE_CAVE_B2F/LOWER": { + "parent_map": "MAP_GRANITE_CAVE_B2F", + "locations": [ + "HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_2" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_GRANITE_CAVE_B2F:0/MAP_GRANITE_CAVE_B1F:2", + "MAP_GRANITE_CAVE_B2F:1/MAP_GRANITE_CAVE_B1F:3" + ] + }, + "REGION_GRANITE_CAVE_STEVENS_ROOM/MAIN": { + "parent_map": "MAP_GRANITE_CAVE_STEVENS_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_GRANITE_CAVE_STEVENS_ROOM/LETTER_DELIVERED" + ], + "warps": [ + "MAP_GRANITE_CAVE_STEVENS_ROOM:0/MAP_GRANITE_CAVE_1F:3" + ] + }, + "REGION_GRANITE_CAVE_STEVENS_ROOM/LETTER_DELIVERED": { + "parent_map": "MAP_GRANITE_CAVE_STEVENS_ROOM", + "locations": [ + "NPC_GIFT_RECEIVED_TM47" + ], + "events": [ + "EVENT_DELIVER_LETTER" + ], + "exits": [], + "warps": [] + }, + "REGION_TRAINER_HILL_ENTRANCE/MAIN": { + "parent_map": "MAP_TRAINER_HILL_ENTRANCE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_TRAINER_HILL_ENTRANCE:0,1/MAP_ROUTE111:4", + "MAP_TRAINER_HILL_ENTRANCE:2/MAP_TRAINER_HILL_1F:0" + ] + }, + "REGION_TRAINER_HILL_1F/MAIN": { + "parent_map": "MAP_TRAINER_HILL_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_TRAINER_HILL_1F:0/MAP_TRAINER_HILL_ENTRANCE:2", + "MAP_TRAINER_HILL_1F:1/MAP_TRAINER_HILL_2F:0" + ] + }, + "REGION_TRAINER_HILL_2F/MAIN": { + "parent_map": "MAP_TRAINER_HILL_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_TRAINER_HILL_2F:0/MAP_TRAINER_HILL_1F:1", + "MAP_TRAINER_HILL_2F:1/MAP_TRAINER_HILL_3F:0" + ] + }, + "REGION_TRAINER_HILL_3F/MAIN": { + "parent_map": "MAP_TRAINER_HILL_3F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_TRAINER_HILL_3F:0/MAP_TRAINER_HILL_2F:1", + "MAP_TRAINER_HILL_3F:1/MAP_TRAINER_HILL_4F:0" + ] + }, + "REGION_TRAINER_HILL_4F/MAIN": { + "parent_map": "MAP_TRAINER_HILL_4F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_TRAINER_HILL_4F:0/MAP_TRAINER_HILL_3F:1", + "MAP_TRAINER_HILL_4F:1/MAP_TRAINER_HILL_ROOF:0" + ] + }, + "REGION_TRAINER_HILL_ROOF/MAIN": { + "parent_map": "MAP_TRAINER_HILL_ROOF", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_TRAINER_HILL_ROOF:0/MAP_TRAINER_HILL_4F:1", + "MAP_TRAINER_HILL_ROOF:1/MAP_TRAINER_HILL_ELEVATOR:1" + ] + }, + "REGION_TRAINER_HILL_ELEVATOR/MAIN": { + "parent_map": "MAP_TRAINER_HILL_ELEVATOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_TRAINER_HILL_ELEVATOR:0,1/MAP_TRAINER_HILL_ROOF:1" + ] + }, + "REGION_FIERY_PATH/MAIN": { + "parent_map": "MAP_FIERY_PATH", + "locations": [], + "events": [], + "exits": [ + "REGION_FIERY_PATH/BEHIND_BOULDER" + ], + "warps": [ + "MAP_FIERY_PATH:0/MAP_ROUTE112:4", + "MAP_FIERY_PATH:1/MAP_ROUTE112:5" + ] + }, + "REGION_FIERY_PATH/BEHIND_BOULDER": { + "parent_map": "MAP_FIERY_PATH", + "locations": [ + "ITEM_FIERY_PATH_TM06", + "ITEM_FIERY_PATH_FIRE_STONE" + ], + "events": [], + "exits": [ + "REGION_FIERY_PATH/MAIN" + ], + "warps": [] + }, + "REGION_MAGMA_HIDEOUT_1F/MAIN": { + "parent_map": "MAP_MAGMA_HIDEOUT_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_MAGMA_HIDEOUT_1F/ENTRANCE" + ], + "warps": [ + "MAP_MAGMA_HIDEOUT_1F:1/MAP_MAGMA_HIDEOUT_2F_1R:1" + ] + }, + "REGION_MAGMA_HIDEOUT_1F/CENTER_EXIT": { + "parent_map": "MAP_MAGMA_HIDEOUT_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_MAGMA_HIDEOUT_1F/MAIN" + ], + "warps": [ + "MAP_MAGMA_HIDEOUT_1F:3/MAP_MAGMA_HIDEOUT_2F_3R:0" + ] + }, + "REGION_MAGMA_HIDEOUT_1F/LEDGE": { + "parent_map": "MAP_MAGMA_HIDEOUT_1F", + "locations": [ + "ITEM_MAGMA_HIDEOUT_1F_RARE_CANDY" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MAGMA_HIDEOUT_1F:2/MAP_MAGMA_HIDEOUT_2F_2R:1" + ] + }, + "REGION_MAGMA_HIDEOUT_1F/ENTRANCE": { + "parent_map": "MAP_MAGMA_HIDEOUT_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_MAGMA_HIDEOUT_1F/MAIN" + ], + "warps": [ + "MAP_MAGMA_HIDEOUT_1F:0/MAP_JAGGED_PASS:4" + ] + }, + "REGION_MAGMA_HIDEOUT_2F_1R/MAIN": { + "parent_map": "MAP_MAGMA_HIDEOUT_2F_1R", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MAGMA_HIDEOUT_2F_1R:0/MAP_MAGMA_HIDEOUT_2F_2R:0", + "MAP_MAGMA_HIDEOUT_2F_1R:1/MAP_MAGMA_HIDEOUT_1F:1", + "MAP_MAGMA_HIDEOUT_2F_1R:2/MAP_MAGMA_HIDEOUT_3F_1R:2" + ] + }, + "REGION_MAGMA_HIDEOUT_2F_2R/MAIN": { + "parent_map": "MAP_MAGMA_HIDEOUT_2F_2R", + "locations": [ + "ITEM_MAGMA_HIDEOUT_2F_2R_MAX_ELIXIR", + "ITEM_MAGMA_HIDEOUT_2F_2R_FULL_RESTORE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MAGMA_HIDEOUT_2F_2R:0/MAP_MAGMA_HIDEOUT_2F_1R:0", + "MAP_MAGMA_HIDEOUT_2F_2R:1/MAP_MAGMA_HIDEOUT_1F:2" + ] + }, + "REGION_MAGMA_HIDEOUT_2F_3R/MAIN": { + "parent_map": "MAP_MAGMA_HIDEOUT_2F_3R", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MAGMA_HIDEOUT_2F_3R:0/MAP_MAGMA_HIDEOUT_1F:3", + "MAP_MAGMA_HIDEOUT_2F_3R:1/MAP_MAGMA_HIDEOUT_3F_3R:0" + ] + }, + "REGION_MAGMA_HIDEOUT_3F_1R/MAIN": { + "parent_map": "MAP_MAGMA_HIDEOUT_3F_1R", + "locations": [ + "ITEM_MAGMA_HIDEOUT_3F_1R_NUGGET" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MAGMA_HIDEOUT_3F_1R:0/MAP_MAGMA_HIDEOUT_4F:0", + "MAP_MAGMA_HIDEOUT_3F_1R:1/MAP_MAGMA_HIDEOUT_3F_2R:0", + "MAP_MAGMA_HIDEOUT_3F_1R:2/MAP_MAGMA_HIDEOUT_2F_1R:2" + ] + }, + "REGION_MAGMA_HIDEOUT_3F_2R/MAIN": { + "parent_map": "MAP_MAGMA_HIDEOUT_3F_2R", + "locations": [ + "ITEM_MAGMA_HIDEOUT_3F_2R_PP_MAX" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MAGMA_HIDEOUT_3F_2R:0/MAP_MAGMA_HIDEOUT_3F_1R:1" + ] + }, + "REGION_MAGMA_HIDEOUT_3F_3R/MAIN": { + "parent_map": "MAP_MAGMA_HIDEOUT_3F_3R", + "locations": [ + "ITEM_MAGMA_HIDEOUT_3F_3R_ECAPE_ROPE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MAGMA_HIDEOUT_3F_3R:0/MAP_MAGMA_HIDEOUT_2F_3R:1", + "MAP_MAGMA_HIDEOUT_3F_3R:1/MAP_MAGMA_HIDEOUT_4F:1" + ] + }, + "REGION_MAGMA_HIDEOUT_4F/MAIN": { + "parent_map": "MAP_MAGMA_HIDEOUT_4F", + "locations": [ + "ITEM_MAGMA_HIDEOUT_4F_MAX_REVIVE" + ], + "events": [ + "EVENT_RELEASE_GROUDON" + ], + "exits": [], + "warps": [ + "MAP_MAGMA_HIDEOUT_4F:0/MAP_MAGMA_HIDEOUT_3F_1R:0", + "MAP_MAGMA_HIDEOUT_4F:1/MAP_MAGMA_HIDEOUT_3F_3R:1" + ] + }, + "REGION_MIRAGE_TOWER_1F/MAIN": { + "parent_map": "MAP_MIRAGE_TOWER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MIRAGE_TOWER_1F:0/MAP_ROUTE111:3", + "MAP_MIRAGE_TOWER_1F:1/MAP_MIRAGE_TOWER_2F:1" + ] + }, + "REGION_MIRAGE_TOWER_2F/TOP": { + "parent_map": "MAP_MIRAGE_TOWER_2F", + "locations": [], + "events": [], + "exits": [ + "REGION_MIRAGE_TOWER_2F/BOTTOM", + "REGION_MIRAGE_TOWER_1F/MAIN" + ], + "warps": [ + "MAP_MIRAGE_TOWER_2F:1/MAP_MIRAGE_TOWER_1F:1" + ] + }, + "REGION_MIRAGE_TOWER_2F/BOTTOM": { + "parent_map": "MAP_MIRAGE_TOWER_2F", + "locations": [], + "events": [], + "exits": [ + "REGION_MIRAGE_TOWER_2F/TOP", + "REGION_MIRAGE_TOWER_1F/MAIN" + ], + "warps": [ + "MAP_MIRAGE_TOWER_2F:0/MAP_MIRAGE_TOWER_3F:0" + ] + }, + "REGION_MIRAGE_TOWER_3F/TOP": { + "parent_map": "MAP_MIRAGE_TOWER_3F", + "locations": [], + "events": [], + "exits": [ + "REGION_MIRAGE_TOWER_3F/BOTTOM" + ], + "warps": [ + "MAP_MIRAGE_TOWER_3F:1/MAP_MIRAGE_TOWER_4F:0" + ] + }, + "REGION_MIRAGE_TOWER_3F/BOTTOM": { + "parent_map": "MAP_MIRAGE_TOWER_3F", + "locations": [], + "events": [], + "exits": [ + "REGION_MIRAGE_TOWER_3F/TOP", + "REGION_MIRAGE_TOWER_2F/TOP" + ], + "warps": [ + "MAP_MIRAGE_TOWER_3F:0/MAP_MIRAGE_TOWER_2F:0" + ] + }, + "REGION_MIRAGE_TOWER_4F/MAIN": { + "parent_map": "MAP_MIRAGE_TOWER_4F", + "locations": [], + "events": [], + "exits": [ + "REGION_MIRAGE_TOWER_4F/FOSSIL_PLATFORM" + ], + "warps": [ + "MAP_MIRAGE_TOWER_4F:0/MAP_MIRAGE_TOWER_3F:1" + ] + }, + "REGION_MIRAGE_TOWER_4F/FOSSIL_PLATFORM": { + "parent_map": "MAP_MIRAGE_TOWER_4F", + "locations": [], + "events": [], + "exits": [], + "warps": [] + }, + "REGION_DESERT_RUINS/MAIN": { + "parent_map": "MAP_DESERT_RUINS", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_DESERT_RUINS:0/MAP_ROUTE111:1", + "MAP_DESERT_RUINS:1/MAP_DESERT_RUINS:2", + "MAP_DESERT_RUINS:2/MAP_DESERT_RUINS:1" + ] + }, + "REGION_METEOR_FALLS_1F_1R/MAIN": { + "parent_map": "MAP_METEOR_FALLS_1F_1R", + "locations": [ + "ITEM_METEOR_FALLS_1F_1R_MOON_STONE", + "ITEM_METEOR_FALLS_1F_1R_FULL_HEAL" + ], + "events": [ + "EVENT_MAGMA_STEALS_METEORITE" + ], + "exits": [ + "REGION_METEOR_FALLS_1F_1R/ABOVE_WATERFALL" + ], + "warps": [ + "MAP_METEOR_FALLS_1F_1R:0/MAP_ROUTE114:0", + "MAP_METEOR_FALLS_1F_1R:1/MAP_ROUTE115:0" + ] + }, + "REGION_METEOR_FALLS_1F_1R/ABOVE_WATERFALL": { + "parent_map": "MAP_METEOR_FALLS_1F_1R", + "locations": [], + "events": [], + "exits": [ + "REGION_METEOR_FALLS_1F_1R/MAIN" + ], + "warps": [ + "MAP_METEOR_FALLS_1F_1R:2/MAP_METEOR_FALLS_1F_2R:0" + ] + }, + "REGION_METEOR_FALLS_1F_1R/TOP": { + "parent_map": "MAP_METEOR_FALLS_1F_1R", + "locations": [ + "ITEM_METEOR_FALLS_1F_1R_TM23" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_METEOR_FALLS_1F_1R:3/MAP_METEOR_FALLS_B1F_1R:4", + "MAP_METEOR_FALLS_1F_1R:5/MAP_METEOR_FALLS_STEVENS_CAVE:0" + ] + }, + "REGION_METEOR_FALLS_1F_1R/BOTTOM": { + "parent_map": "MAP_METEOR_FALLS_1F_1R", + "locations": [ + "ITEM_METEOR_FALLS_1F_1R_PP_UP" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_METEOR_FALLS_1F_1R:4/MAP_METEOR_FALLS_B1F_1R:5" + ] + }, + "REGION_METEOR_FALLS_1F_2R/TOP": { + "parent_map": "MAP_METEOR_FALLS_1F_2R", + "locations": [], + "events": [], + "exits": [ + "REGION_METEOR_FALLS_1F_2R/LEFT_SPLIT", + "REGION_METEOR_FALLS_1F_2R/RIGHT_SPLIT" + ], + "warps": [ + "MAP_METEOR_FALLS_1F_2R:1/MAP_METEOR_FALLS_B1F_1R:0" + ] + }, + "REGION_METEOR_FALLS_1F_2R/LEFT_SPLIT": { + "parent_map": "MAP_METEOR_FALLS_1F_2R", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_METEOR_FALLS_1F_2R:2/MAP_METEOR_FALLS_B1F_1R:1" + ] + }, + "REGION_METEOR_FALLS_1F_2R/RIGHT_SPLIT": { + "parent_map": "MAP_METEOR_FALLS_1F_2R", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_METEOR_FALLS_1F_2R:0/MAP_METEOR_FALLS_1F_1R:2", + "MAP_METEOR_FALLS_1F_2R:3/MAP_METEOR_FALLS_B1F_1R:2" + ] + }, + "REGION_METEOR_FALLS_B1F_1R/UPPER": { + "parent_map": "MAP_METEOR_FALLS_B1F_1R", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_METEOR_FALLS_B1F_1R:0/MAP_METEOR_FALLS_1F_2R:1", + "MAP_METEOR_FALLS_B1F_1R:2/MAP_METEOR_FALLS_1F_2R:3", + "MAP_METEOR_FALLS_B1F_1R:4/MAP_METEOR_FALLS_1F_1R:3" + ] + }, + "REGION_METEOR_FALLS_B1F_1R/HIGHEST_LADDER": { + "parent_map": "MAP_METEOR_FALLS_B1F_1R", + "locations": [], + "events": [], + "exits": [ + "REGION_METEOR_FALLS_B1F_1R/WATER" + ], + "warps": [ + "MAP_METEOR_FALLS_B1F_1R:1/MAP_METEOR_FALLS_1F_2R:2" + ] + }, + "REGION_METEOR_FALLS_B1F_1R/NORTH_SHORE": { + "parent_map": "MAP_METEOR_FALLS_B1F_1R", + "locations": [], + "events": [], + "exits": [ + "REGION_METEOR_FALLS_B1F_1R/WATER" + ], + "warps": [ + "MAP_METEOR_FALLS_B1F_1R:3/MAP_METEOR_FALLS_B1F_2R:0" + ] + }, + "REGION_METEOR_FALLS_B1F_1R/SOUTH_SHORE": { + "parent_map": "MAP_METEOR_FALLS_B1F_1R", + "locations": [], + "events": [], + "exits": [ + "REGION_METEOR_FALLS_B1F_1R/WATER" + ], + "warps": [ + "MAP_METEOR_FALLS_B1F_1R:5/MAP_METEOR_FALLS_1F_1R:4" + ] + }, + "REGION_METEOR_FALLS_B1F_1R/WATER": { + "parent_map": "MAP_METEOR_FALLS_B1F_1R", + "locations": [], + "events": [], + "exits": [ + "REGION_METEOR_FALLS_B1F_1R/SOUTH_SHORE", + "REGION_METEOR_FALLS_B1F_1R/NORTH_SHORE", + "REGION_METEOR_FALLS_B1F_1R/HIGHEST_LADDER" + ], + "warps": [] + }, + "REGION_METEOR_FALLS_B1F_2R/ENTRANCE": { + "parent_map": "MAP_METEOR_FALLS_B1F_2R", + "locations": [], + "events": [], + "exits": [ + "REGION_METEOR_FALLS_B1F_2R/WATER" + ], + "warps": [ + "MAP_METEOR_FALLS_B1F_2R:0/MAP_METEOR_FALLS_B1F_1R:3" + ] + }, + "REGION_METEOR_FALLS_B1F_2R/WATER": { + "parent_map": "MAP_METEOR_FALLS_B1F_2R", + "locations": [ + "ITEM_METEOR_FALLS_B1F_2R_TM02" + ], + "events": [], + "exits": [ + "REGION_METEOR_FALLS_B1F_2R/ENTRANCE" + ], + "warps": [] + }, + "REGION_METEOR_FALLS_STEVENS_CAVE/MAIN": { + "parent_map": "MAP_METEOR_FALLS_STEVENS_CAVE", + "locations": [], + "events": [ + "EVENT_DEFEAT_STEVEN" + ], + "exits": [], + "warps": [ + "MAP_METEOR_FALLS_STEVENS_CAVE:0/MAP_METEOR_FALLS_1F_1R:5" + ] + }, + "REGION_ALTERING_CAVE/MAIN": { + "parent_map": "MAP_ALTERING_CAVE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ALTERING_CAVE:0/MAP_ROUTE103:0" + ] + }, + "REGION_ISLAND_CAVE/MAIN": { + "parent_map": "MAP_ISLAND_CAVE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ISLAND_CAVE:0/MAP_ROUTE105:0", + "MAP_ISLAND_CAVE:1/MAP_ISLAND_CAVE:2", + "MAP_ISLAND_CAVE:2/MAP_ISLAND_CAVE:1" + ] + }, + "REGION_ABANDONED_SHIP_DECK/ENTRANCE": { + "parent_map": "MAP_ABANDONED_SHIP_DECK", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_DECK:0,1/MAP_ROUTE108:0", + "MAP_ABANDONED_SHIP_DECK:2/MAP_ABANDONED_SHIP_CORRIDORS_1F:1" + ] + }, + "REGION_ABANDONED_SHIP_DECK/UPPER": { + "parent_map": "MAP_ABANDONED_SHIP_DECK", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_DECK:3/MAP_ABANDONED_SHIP_CORRIDORS_1F:2", + "MAP_ABANDONED_SHIP_DECK:4/MAP_ABANDONED_SHIP_CAPTAINS_OFFICE:0" + ] + }, + "REGION_ABANDONED_SHIP_CAPTAINS_OFFICE/MAIN": { + "parent_map": "MAP_ABANDONED_SHIP_CAPTAINS_OFFICE", + "locations": [ + "ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_CAPTAINS_OFFICE:0,1/MAP_ABANDONED_SHIP_DECK:4" + ] + }, + "REGION_ABANDONED_SHIP_CORRIDORS_1F/WEST": { + "parent_map": "MAP_ABANDONED_SHIP_CORRIDORS_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_CORRIDORS_1F:2,3/MAP_ABANDONED_SHIP_DECK:3", + "MAP_ABANDONED_SHIP_CORRIDORS_1F:8/MAP_ABANDONED_SHIP_ROOMS2_1F:0", + "MAP_ABANDONED_SHIP_CORRIDORS_1F:10/MAP_ABANDONED_SHIP_CORRIDORS_B1F:6", + "MAP_ABANDONED_SHIP_CORRIDORS_1F:11/MAP_ABANDONED_SHIP_ROOMS2_1F:2" + ] + }, + "REGION_ABANDONED_SHIP_CORRIDORS_1F/EAST": { + "parent_map": "MAP_ABANDONED_SHIP_CORRIDORS_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_CORRIDORS_1F:0,1/MAP_ABANDONED_SHIP_DECK:2", + "MAP_ABANDONED_SHIP_CORRIDORS_1F:4/MAP_ABANDONED_SHIP_ROOMS_1F:0", + "MAP_ABANDONED_SHIP_CORRIDORS_1F:5/MAP_ABANDONED_SHIP_ROOMS_1F:3", + "MAP_ABANDONED_SHIP_CORRIDORS_1F:6/MAP_ABANDONED_SHIP_ROOMS_1F:2", + "MAP_ABANDONED_SHIP_CORRIDORS_1F:7/MAP_ABANDONED_SHIP_ROOMS_1F:4", + "MAP_ABANDONED_SHIP_CORRIDORS_1F:9/MAP_ABANDONED_SHIP_CORRIDORS_B1F:7" + ] + }, + "REGION_ABANDONED_SHIP_ROOMS_1F/MAIN": { + "parent_map": "MAP_ABANDONED_SHIP_ROOMS_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_ROOMS_1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_1F:4", + "MAP_ABANDONED_SHIP_ROOMS_1F:3,5/MAP_ABANDONED_SHIP_CORRIDORS_1F:5", + "MAP_ABANDONED_SHIP_ROOMS_1F:4/MAP_ABANDONED_SHIP_CORRIDORS_1F:7" + ] + }, + "REGION_ABANDONED_SHIP_ROOMS_1F/NORTH_WEST": { + "parent_map": "MAP_ABANDONED_SHIP_ROOMS_1F", + "locations": [ + "ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_ROOMS_1F:2/MAP_ABANDONED_SHIP_CORRIDORS_1F:6" + ] + }, + "REGION_ABANDONED_SHIP_ROOMS2_1F/MAIN": { + "parent_map": "MAP_ABANDONED_SHIP_ROOMS2_1F", + "locations": [ + "ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_ROOMS2_1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_1F:8", + "MAP_ABANDONED_SHIP_ROOMS2_1F:2/MAP_ABANDONED_SHIP_CORRIDORS_1F:11" + ] + }, + "REGION_ABANDONED_SHIP_CORRIDORS_B1F/MAIN": { + "parent_map": "MAP_ABANDONED_SHIP_CORRIDORS_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_CORRIDORS_B1F:0/MAP_ABANDONED_SHIP_ROOMS2_B1F:2", + "MAP_ABANDONED_SHIP_CORRIDORS_B1F:1/MAP_ABANDONED_SHIP_ROOMS2_B1F:0", + "MAP_ABANDONED_SHIP_CORRIDORS_B1F:2/MAP_ABANDONED_SHIP_ROOMS_B1F:0", + "MAP_ABANDONED_SHIP_CORRIDORS_B1F:3/MAP_ABANDONED_SHIP_ROOMS_B1F:1", + "MAP_ABANDONED_SHIP_CORRIDORS_B1F:4/MAP_ABANDONED_SHIP_ROOMS_B1F:2", + "MAP_ABANDONED_SHIP_CORRIDORS_B1F:5/MAP_ABANDONED_SHIP_ROOM_B1F:0", + "MAP_ABANDONED_SHIP_CORRIDORS_B1F:6/MAP_ABANDONED_SHIP_CORRIDORS_1F:10", + "MAP_ABANDONED_SHIP_CORRIDORS_B1F:7/MAP_ABANDONED_SHIP_CORRIDORS_1F:9" + ] + }, + "REGION_ABANDONED_SHIP_ROOMS_B1F/LEFT": { + "parent_map": "MAP_ABANDONED_SHIP_ROOMS_B1F", + "locations": [ + "ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_ROOMS_B1F:0/MAP_ABANDONED_SHIP_CORRIDORS_B1F:2" + ] + }, + "REGION_ABANDONED_SHIP_ROOMS_B1F/CENTER": { + "parent_map": "MAP_ABANDONED_SHIP_ROOMS_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_ABANDONED_SHIP_UNDERWATER1/MAIN" + ], + "warps": [ + "MAP_ABANDONED_SHIP_ROOMS_B1F:1/MAP_ABANDONED_SHIP_CORRIDORS_B1F:3" + ] + }, + "REGION_ABANDONED_SHIP_ROOMS_B1F/RIGHT": { + "parent_map": "MAP_ABANDONED_SHIP_ROOMS_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_ROOMS_B1F:2/MAP_ABANDONED_SHIP_CORRIDORS_B1F:4" + ] + }, + "REGION_ABANDONED_SHIP_ROOMS2_B1F/MAIN": { + "parent_map": "MAP_ABANDONED_SHIP_ROOMS2_B1F", + "locations": [ + "ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_ROOMS2_B1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_B1F:1", + "MAP_ABANDONED_SHIP_ROOMS2_B1F:2,3/MAP_ABANDONED_SHIP_CORRIDORS_B1F:0" + ] + }, + "REGION_ABANDONED_SHIP_ROOM_B1F/MAIN": { + "parent_map": "MAP_ABANDONED_SHIP_ROOM_B1F", + "locations": [ + "ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_ROOM_B1F:0,1/MAP_ABANDONED_SHIP_CORRIDORS_B1F:5" + ] + }, + "REGION_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS/MAIN": { + "parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS", + "locations": [], + "events": [], + "exits": [ + "REGION_ABANDONED_SHIP_UNDERWATER2/MAIN" + ], + "warps": [ + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:0/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:0", + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:3/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:6", + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:1/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:2", + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:4/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:7", + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:2/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:4", + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:5/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:8" + ] + }, + "REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/TOP_LEFT": { + "parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS", + "locations": [ + "HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:6/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:3" + ] + }, + "REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/TOP_CENTER_DOORWAY": { + "parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:7/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:4" + ] + }, + "REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/TOP_RIGHT": { + "parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS", + "locations": [ + "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL", + "HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:8/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:5" + ] + }, + "REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/BOTTOM_LEFT": { + "parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS", + "locations": [ + "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18", + "HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:0,1/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:0" + ] + }, + "REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/BOTTOM_CENTER": { + "parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS", + "locations": [ + "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:2,3/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:1" + ] + }, + "REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/BOTTOM_RIGHT": { + "parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS", + "locations": [ + "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE", + "HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:4,5/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:2" + ] + }, + "REGION_ABANDONED_SHIP_UNDERWATER1/MAIN": { + "parent_map": "MAP_ABANDONED_SHIP_UNDERWATER1", + "locations": [], + "events": [], + "exits": [ + "REGION_ABANDONED_SHIP_ROOMS_B1F/CENTER" + ], + "warps": [ + "MAP_ABANDONED_SHIP_UNDERWATER1:0,1/MAP_ABANDONED_SHIP_UNDERWATER2:0" + ] + }, + "REGION_ABANDONED_SHIP_UNDERWATER2/MAIN": { + "parent_map": "MAP_ABANDONED_SHIP_UNDERWATER2", + "locations": [], + "events": [], + "exits": [ + "REGION_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS/MAIN" + ], + "warps": [ + "MAP_ABANDONED_SHIP_UNDERWATER2:0/MAP_ABANDONED_SHIP_UNDERWATER1:0" + ] + }, + "REGION_NEW_MAUVILLE_ENTRANCE/MAIN": { + "parent_map": "MAP_NEW_MAUVILLE_ENTRANCE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NEW_MAUVILLE_ENTRANCE:0/MAP_ROUTE110:0", + "MAP_NEW_MAUVILLE_ENTRANCE:1/MAP_NEW_MAUVILLE_INSIDE:0" + ] + }, + "REGION_NEW_MAUVILLE_INSIDE/MAIN": { + "parent_map": "MAP_NEW_MAUVILLE_INSIDE", + "locations": [ + "ITEM_NEW_MAUVILLE_ULTRA_BALL", + "ITEM_NEW_MAUVILLE_ESCAPE_ROPE", + "ITEM_NEW_MAUVILLE_THUNDER_STONE", + "ITEM_NEW_MAUVILLE_FULL_HEAL", + "ITEM_NEW_MAUVILLE_PARALYZE_HEAL" + ], + "events": [ + "EVENT_TURN_OFF_GENERATOR" + ], + "exits": [], + "warps": [ + "MAP_NEW_MAUVILLE_INSIDE:0/MAP_NEW_MAUVILLE_ENTRANCE:1" + ] + }, + "REGION_SCORCHED_SLAB/MAIN": { + "parent_map": "MAP_SCORCHED_SLAB", + "locations": [ + "ITEM_SCORCHED_SLAB_TM11" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_SCORCHED_SLAB:0/MAP_ROUTE120:1" + ] + }, + "REGION_ANCIENT_TOMB/MAIN": { + "parent_map": "MAP_ANCIENT_TOMB", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ANCIENT_TOMB:0/MAP_ROUTE120:0", + "MAP_ANCIENT_TOMB:1/MAP_ANCIENT_TOMB:2", + "MAP_ANCIENT_TOMB:2/MAP_ANCIENT_TOMB:1" + ] + }, + "REGION_MT_PYRE_1F/MAIN": { + "parent_map": "MAP_MT_PYRE_1F", + "locations": [ + "NPC_GIFT_RECEIVED_CLEANSE_TAG" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MT_PYRE_1F:0,2/MAP_ROUTE122:0", + "MAP_MT_PYRE_1F:1,3/MAP_MT_PYRE_EXTERIOR:0", + "MAP_MT_PYRE_1F:4/MAP_MT_PYRE_2F:0", + "MAP_MT_PYRE_1F:5/MAP_MT_PYRE_2F:4" + ] + }, + "REGION_MT_PYRE_2F/MAIN": { + "parent_map": "MAP_MT_PYRE_2F", + "locations": [ + "ITEM_MT_PYRE_2F_ULTRA_BALL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MT_PYRE_2F:0/MAP_MT_PYRE_1F:4", + "MAP_MT_PYRE_2F:1/MAP_MT_PYRE_3F:0", + "MAP_MT_PYRE_2F:2/MAP_MT_PYRE_3F:4", + "MAP_MT_PYRE_2F:3/MAP_MT_PYRE_3F:5", + "MAP_MT_PYRE_2F:4/MAP_MT_PYRE_1F:5" + ] + }, + "REGION_MT_PYRE_3F/MAIN": { + "parent_map": "MAP_MT_PYRE_3F", + "locations": [ + "ITEM_MT_PYRE_3F_SUPER_REPEL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MT_PYRE_3F:0/MAP_MT_PYRE_2F:1", + "MAP_MT_PYRE_3F:1/MAP_MT_PYRE_4F:1", + "MAP_MT_PYRE_3F:2/MAP_MT_PYRE_4F:4", + "MAP_MT_PYRE_3F:3/MAP_MT_PYRE_4F:5", + "MAP_MT_PYRE_3F:4/MAP_MT_PYRE_2F:2", + "MAP_MT_PYRE_3F:5/MAP_MT_PYRE_2F:3" + ] + }, + "REGION_MT_PYRE_4F/MAIN": { + "parent_map": "MAP_MT_PYRE_4F", + "locations": [ + "ITEM_MT_PYRE_4F_SEA_INCENSE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MT_PYRE_4F:0/MAP_MT_PYRE_5F:1", + "MAP_MT_PYRE_4F:1/MAP_MT_PYRE_3F:1", + "MAP_MT_PYRE_4F:2/MAP_MT_PYRE_5F:3", + "MAP_MT_PYRE_4F:3/MAP_MT_PYRE_5F:4", + "MAP_MT_PYRE_4F:4/MAP_MT_PYRE_3F:2", + "MAP_MT_PYRE_4F:5/MAP_MT_PYRE_3F:3" + ] + }, + "REGION_MT_PYRE_5F/MAIN": { + "parent_map": "MAP_MT_PYRE_5F", + "locations": [ + "ITEM_MT_PYRE_5F_LAX_INCENSE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MT_PYRE_5F:0/MAP_MT_PYRE_6F:0", + "MAP_MT_PYRE_5F:1/MAP_MT_PYRE_4F:0", + "MAP_MT_PYRE_5F:2/MAP_MT_PYRE_6F:1", + "MAP_MT_PYRE_5F:3/MAP_MT_PYRE_4F:2", + "MAP_MT_PYRE_5F:4/MAP_MT_PYRE_4F:3" + ] + }, + "REGION_MT_PYRE_6F/MAIN": { + "parent_map": "MAP_MT_PYRE_6F", + "locations": [ + "ITEM_MT_PYRE_6F_TM30" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MT_PYRE_6F:0/MAP_MT_PYRE_5F:0", + "MAP_MT_PYRE_6F:1/MAP_MT_PYRE_5F:2" + ] + }, + "REGION_MT_PYRE_EXTERIOR/MAIN": { + "parent_map": "MAP_MT_PYRE_EXTERIOR", + "locations": [ + "ITEM_MT_PYRE_EXTERIOR_MAX_POTION", + "ITEM_MT_PYRE_EXTERIOR_TM48", + "HIDDEN_ITEM_MT_PYRE_EXTERIOR_ULTRA_BALL", + "HIDDEN_ITEM_MT_PYRE_EXTERIOR_MAX_ETHER" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MT_PYRE_EXTERIOR:0/MAP_MT_PYRE_1F:1", + "MAP_MT_PYRE_EXTERIOR:1,2/MAP_MT_PYRE_SUMMIT:1" + ] + }, + "REGION_MT_PYRE_SUMMIT/MAIN": { + "parent_map": "MAP_MT_PYRE_SUMMIT", + "locations": [ + "HIDDEN_ITEM_MT_PYRE_SUMMIT_ZINC", + "HIDDEN_ITEM_MT_PYRE_SUMMIT_RARE_CANDY", + "NPC_GIFT_RECEIVED_MAGMA_EMBLEM" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_MT_PYRE_SUMMIT:0,1,2/MAP_MT_PYRE_EXTERIOR:1" + ] + }, + "REGION_AQUA_HIDEOUT_1F/MAIN": { + "parent_map": "MAP_AQUA_HIDEOUT_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_AQUA_HIDEOUT_1F/WATER" + ], + "warps": [ + "MAP_AQUA_HIDEOUT_1F:2/MAP_AQUA_HIDEOUT_B1F:0" + ] + }, + "REGION_AQUA_HIDEOUT_1F/WATER": { + "parent_map": "MAP_AQUA_HIDEOUT_1F", + "locations": [], + "events": [], + "exits": [ + "REGION_AQUA_HIDEOUT_1F/MAIN" + ], + "warps": [ + "MAP_AQUA_HIDEOUT_1F:0,1/MAP_LILYCOVE_CITY:6" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/WEST_BOTTOM": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:8/MAP_AQUA_HIDEOUT_B1F:5", + "MAP_AQUA_HIDEOUT_B1F:9/MAP_AQUA_HIDEOUT_B1F:12", + "MAP_AQUA_HIDEOUT_B1F:10/MAP_AQUA_HIDEOUT_B1F:6" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/WEST_TOP_LEFT": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:2/MAP_AQUA_HIDEOUT_B2F:1", + "MAP_AQUA_HIDEOUT_B1F:3/MAP_AQUA_HIDEOUT_B2F:2" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/WEST_TOP_CENTER": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:1/MAP_AQUA_HIDEOUT_B2F:0", + "MAP_AQUA_HIDEOUT_B1F:6/MAP_AQUA_HIDEOUT_B1F:10" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/WEST_TOP_RIGHT": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:0/MAP_AQUA_HIDEOUT_1F:2", + "MAP_AQUA_HIDEOUT_B1F:4/MAP_AQUA_HIDEOUT_B1F:7", + "MAP_AQUA_HIDEOUT_B1F:5/MAP_AQUA_HIDEOUT_B1F:8" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/WEST_CENTER_RIGHT": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [ + "ITEM_AQUA_HIDEOUT_B1F_MAX_ELIXIR" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:7/MAP_AQUA_HIDEOUT_B1F:4" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/WEST_CENTER": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [ + "ITEM_AQUA_HIDEOUT_B1F_NUGGET", + "ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:11/MAP_AQUA_HIDEOUT_B1F:22" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/EAST_TOP": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:12/MAP_AQUA_HIDEOUT_B1F:9", + "MAP_AQUA_HIDEOUT_B1F:13/MAP_AQUA_HIDEOUT_B1F:18", + "MAP_AQUA_HIDEOUT_B1F:14/MAP_AQUA_HIDEOUT_B1F:12!", + "MAP_AQUA_HIDEOUT_B1F:15/MAP_AQUA_HIDEOUT_B1F:16" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_RIGHT": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_CENTER" + ], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:18/MAP_AQUA_HIDEOUT_B1F:13" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_CENTER": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_LEFT", + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_RIGHT" + ], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:17/MAP_AQUA_HIDEOUT_B1F:20" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_LEFT": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_CENTER" + ], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:16/MAP_AQUA_HIDEOUT_B1F:15" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_RIGHT": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_CENTER" + ], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:21/MAP_AQUA_HIDEOUT_B1F:12!" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_CENTER": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_LEFT", + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_RIGHT" + ], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:20/MAP_AQUA_HIDEOUT_B1F:17" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_LEFT": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_CENTER" + ], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:19/MAP_AQUA_HIDEOUT_B1F:24" + ] + }, + "REGION_AQUA_HIDEOUT_B1F/EAST_BOTTOM": { + "parent_map": "MAP_AQUA_HIDEOUT_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B1F:22/MAP_AQUA_HIDEOUT_B1F:11", + "MAP_AQUA_HIDEOUT_B1F:23/MAP_AQUA_HIDEOUT_B1F:17!", + "MAP_AQUA_HIDEOUT_B1F:24/MAP_AQUA_HIDEOUT_B1F:19" + ] + }, + "REGION_AQUA_HIDEOUT_B2F/TOP_LEFT": { + "parent_map": "MAP_AQUA_HIDEOUT_B2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B2F:2/MAP_AQUA_HIDEOUT_B1F:3", + "MAP_AQUA_HIDEOUT_B2F:5/MAP_AQUA_HIDEOUT_B2F:3" + ] + }, + "REGION_AQUA_HIDEOUT_B2F/TOP_CENTER": { + "parent_map": "MAP_AQUA_HIDEOUT_B2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B2F:1/MAP_AQUA_HIDEOUT_B1F:2", + "MAP_AQUA_HIDEOUT_B2F:4/MAP_AQUA_HIDEOUT_B2F:8" + ] + }, + "REGION_AQUA_HIDEOUT_B2F/TOP_RIGHT": { + "parent_map": "MAP_AQUA_HIDEOUT_B2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B2F:0/MAP_AQUA_HIDEOUT_B1F:1", + "MAP_AQUA_HIDEOUT_B2F:3/MAP_AQUA_HIDEOUT_B2F:5", + "MAP_AQUA_HIDEOUT_B2F:6/MAP_AQUA_HIDEOUT_B2F:7" + ] + }, + "REGION_AQUA_HIDEOUT_B2F/BOTTOM_LEFT": { + "parent_map": "MAP_AQUA_HIDEOUT_B2F", + "locations": [ + "ITEM_AQUA_HIDEOUT_B2F_NEST_BALL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B2F:7/MAP_AQUA_HIDEOUT_B2F:6" + ] + }, + "REGION_AQUA_HIDEOUT_B2F/BOTTOM_RIGHT": { + "parent_map": "MAP_AQUA_HIDEOUT_B2F", + "locations": [], + "events": [ + "EVENT_CLEAR_AQUA_HIDEOUT" + ], + "exits": [], + "warps": [ + "MAP_AQUA_HIDEOUT_B2F:8/MAP_AQUA_HIDEOUT_B2F:4", + "MAP_AQUA_HIDEOUT_B2F:9/MAP_AQUA_HIDEOUT_B1F:4!" + ] + }, + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/SOUTH": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/LOW_TIDE_LOWER", + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:0/MAP_ROUTE125:0" + ] + }, + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/NORTH_WEST_CORNER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:2/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:6" + ] + }, + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/NORTH_EAST_CORNER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM", + "locations": [ + "ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL" + ], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:3/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:7" + ] + }, + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/SOUTH", + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/NORTH_WEST_CORNER" + ], + "warps": [] + }, + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/LOW_TIDE_LOWER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_ENTRANCE_ROOM/SOUTH" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:0" + ] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_CORNER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:7/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:3" + ] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_CORNER", + "REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_WATER", + "REGION_SHOAL_CAVE_INNER_ROOM/EAST_WATER", + "REGION_SHOAL_CAVE_INNER_ROOM/NORTH_WEST_WATER" + ], + "warps": [] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_EAST_MIDDLE_GROUND": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_SOUTH_EAST_LOWER", + "REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_EAST_LOWER" + ], + "warps": [] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_WEST_CORNER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/NORTH_WEST_WATER" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:6/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:2" + ] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/BRIDGES": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:2/MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:1", + "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:3/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:0" + ] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/RARE_CANDY_PLATFORM": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [ + "ITEM_SHOAL_CAVE_INNER_ROOM_RARE_CANDY" + ], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_WATER" + ], + "warps": [] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_WATER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND", + "REGION_SHOAL_CAVE_INNER_ROOM/RARE_CANDY_PLATFORM" + ], + "warps": [] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/EAST_WATER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND" + ], + "warps": [] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/NORTH_WEST_WATER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND", + "REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_WEST_CORNER" + ], + "warps": [] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_SOUTH_EAST_LOWER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_EAST_MIDDLE_GROUND" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:1", + "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:5/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:2" + ] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_EAST_LOWER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_EAST_MIDDLE_GROUND" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:0" + ] + }, + "REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_NORTH_WEST_LOWER": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:4/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:1" + ] + }, + "REGION_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM/MAIN": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM", + "locations": [ + "ITEM_SHOAL_CAVE_STAIRS_ROOM_ICE_HEAL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:1", + "MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:2" + ] + }, + "REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/NORTH_WEST": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM", + "locations": [ + "NPC_GIFT_RECEIVED_FOCUS_BAND" + ], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/EAST", + "REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/SOUTH" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:3", + "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:1/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:4" + ] + }, + "REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/SOUTH": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:2/MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM:5" + ] + }, + "REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/EAST": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/NORTH_WEST" + ], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:3/MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM:0" + ] + }, + "REGION_SHOAL_CAVE_LOW_TIDE_ICE_ROOM/MAIN": { + "parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM", + "locations": [ + "ITEM_SHOAL_CAVE_ICE_ROOM_TM07", + "ITEM_SHOAL_CAVE_ICE_ROOM_NEVER_MELT_ICE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM:0/MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM:3" + ] + }, + "REGION_UNDERWATER_SEAFLOOR_CAVERN/MAIN": { + "parent_map": "MAP_UNDERWATER_SEAFLOOR_CAVERN", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ENTRANCE/MAIN" + ], + "warps": [ + "MAP_UNDERWATER_SEAFLOOR_CAVERN:0/MAP_UNDERWATER_ROUTE128:0" + ] + }, + "REGION_SEAFLOOR_CAVERN_ENTRANCE/MAIN": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ENTRANCE", + "locations": [], + "events": [], + "exits": [ + "REGION_UNDERWATER_SEAFLOOR_CAVERN/MAIN" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ENTRANCE:0/MAP_UNDERWATER_ROUTE128:0!", + "MAP_SEAFLOOR_CAVERN_ENTRANCE:1/MAP_SEAFLOOR_CAVERN_ROOM1:0" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM1/NORTH": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM1", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM1/SOUTH" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM1:2/MAP_SEAFLOOR_CAVERN_ROOM2:0", + "MAP_SEAFLOOR_CAVERN_ROOM1:1/MAP_SEAFLOOR_CAVERN_ROOM5:0" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM1/SOUTH": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM1", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM1/NORTH" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM1:0/MAP_SEAFLOOR_CAVERN_ENTRANCE:1" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM2", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_WEST", + "REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_EAST" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM2:1/MAP_SEAFLOOR_CAVERN_ROOM4:0" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_WEST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM2", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST", + "REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_EAST", + "REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_EAST" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM2:2/MAP_SEAFLOOR_CAVERN_ROOM6:0" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_EAST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM2", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM2:0/MAP_SEAFLOOR_CAVERN_ROOM1:2" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_EAST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM2", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM2:3/MAP_SEAFLOOR_CAVERN_ROOM7:0" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM3/MAIN": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM3:2/MAP_SEAFLOOR_CAVERN_ROOM6:1", + "MAP_SEAFLOOR_CAVERN_ROOM3:0/MAP_SEAFLOOR_CAVERN_ROOM8:1", + "MAP_SEAFLOOR_CAVERN_ROOM3:1/MAP_SEAFLOOR_CAVERN_ROOM7:1" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM4/NORTH_WEST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM4", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM4/EAST" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM4:1/MAP_SEAFLOOR_CAVERN_ROOM5:1" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM4/EAST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM4", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM4/SOUTH" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM4:2/MAP_SEAFLOOR_CAVERN_ROOM5:2", + "MAP_SEAFLOOR_CAVERN_ROOM4:0/MAP_SEAFLOOR_CAVERN_ROOM2:1" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM4/SOUTH": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM4", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM4:3/MAP_SEAFLOOR_CAVERN_ENTRANCE:1!" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM5/NORTH_WEST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM5", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM5/EAST", + "REGION_SEAFLOOR_CAVERN_ROOM5/SOUTH_WEST" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM5:0/MAP_SEAFLOOR_CAVERN_ROOM1:1" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM5/EAST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM5", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM5/NORTH_WEST" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM5:1/MAP_SEAFLOOR_CAVERN_ROOM4:1" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM5/SOUTH_WEST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM5", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM5/NORTH_WEST" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM5:2/MAP_SEAFLOOR_CAVERN_ROOM4:2" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM6", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM6:1/MAP_SEAFLOOR_CAVERN_ROOM3:2" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM6", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM6:2/MAP_SEAFLOOR_CAVERN_ENTRANCE:1!" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM6/SOUTH": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM6", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST", + "REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM6:0/MAP_SEAFLOOR_CAVERN_ROOM2:2" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM7/NORTH": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM7", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM7/SOUTH" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM7:1/MAP_SEAFLOOR_CAVERN_ROOM3:1" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM7/SOUTH": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM7", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM7/NORTH" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM7:0/MAP_SEAFLOOR_CAVERN_ROOM2:3" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM8/NORTH": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM8", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM8/SOUTH" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM8:0/MAP_SEAFLOOR_CAVERN_ROOM9:0" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM8/SOUTH": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM8", + "locations": [], + "events": [], + "exits": [ + "REGION_SEAFLOOR_CAVERN_ROOM8/NORTH" + ], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM8:1/MAP_SEAFLOOR_CAVERN_ROOM3:0" + ] + }, + "REGION_SEAFLOOR_CAVERN_ROOM9/MAIN": { + "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM9", + "locations": [ + "ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26" + ], + "events": [ + "EVENT_RELEASE_KYOGRE" + ], + "exits": [], + "warps": [ + "MAP_SEAFLOOR_CAVERN_ROOM9:0/MAP_SEAFLOOR_CAVERN_ROOM8:0" + ] + }, + "REGION_CAVE_OF_ORIGIN_ENTRANCE/MAIN": { + "parent_map": "MAP_CAVE_OF_ORIGIN_ENTRANCE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_CAVE_OF_ORIGIN_ENTRANCE:0/MAP_SOOTOPOLIS_CITY:3", + "MAP_CAVE_OF_ORIGIN_ENTRANCE:1/MAP_CAVE_OF_ORIGIN_1F:0" + ] + }, + "REGION_CAVE_OF_ORIGIN_1F/MAIN": { + "parent_map": "MAP_CAVE_OF_ORIGIN_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_CAVE_OF_ORIGIN_1F:0/MAP_CAVE_OF_ORIGIN_ENTRANCE:1", + "MAP_CAVE_OF_ORIGIN_1F:1/MAP_CAVE_OF_ORIGIN_B1F:0" + ] + }, + "REGION_CAVE_OF_ORIGIN_B1F/MAIN": { + "parent_map": "MAP_CAVE_OF_ORIGIN_B1F", + "locations": [], + "events": [ + "EVENT_WALLACE_GOES_TO_SKY_PILLAR" + ], + "exits": [], + "warps": [ + "MAP_CAVE_OF_ORIGIN_B1F:0/MAP_CAVE_OF_ORIGIN_1F:1" + ] + }, + "REGION_SKY_PILLAR_ENTRANCE/MAIN": { + "parent_map": "MAP_SKY_PILLAR_ENTRANCE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SKY_PILLAR_ENTRANCE:0/MAP_ROUTE131:0", + "MAP_SKY_PILLAR_ENTRANCE:1/MAP_SKY_PILLAR_OUTSIDE:0" + ] + }, + "REGION_SKY_PILLAR_OUTSIDE/MAIN": { + "parent_map": "MAP_SKY_PILLAR_OUTSIDE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SKY_PILLAR_OUTSIDE:0/MAP_SKY_PILLAR_ENTRANCE:1", + "MAP_SKY_PILLAR_OUTSIDE:1/MAP_SKY_PILLAR_1F:0" + ] + }, + "REGION_SKY_PILLAR_1F/MAIN": { + "parent_map": "MAP_SKY_PILLAR_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SKY_PILLAR_1F:0,1/MAP_SKY_PILLAR_OUTSIDE:1", + "MAP_SKY_PILLAR_1F:2/MAP_SKY_PILLAR_2F:0" + ] + }, + "REGION_SKY_PILLAR_2F/LEFT": { + "parent_map": "MAP_SKY_PILLAR_2F", + "locations": [], + "events": [], + "exits": [ + "REGION_SKY_PILLAR_2F/RIGHT", + "REGION_SKY_PILLAR_1F/MAIN" + ], + "warps": [ + "MAP_SKY_PILLAR_2F:1/MAP_SKY_PILLAR_3F:0" + ] + }, + "REGION_SKY_PILLAR_2F/RIGHT": { + "parent_map": "MAP_SKY_PILLAR_2F", + "locations": [], + "events": [], + "exits": [ + "REGION_SKY_PILLAR_2F/LEFT", + "REGION_SKY_PILLAR_1F/MAIN" + ], + "warps": [ + "MAP_SKY_PILLAR_2F:0/MAP_SKY_PILLAR_1F:2" + ] + }, + "REGION_SKY_PILLAR_3F/MAIN": { + "parent_map": "MAP_SKY_PILLAR_3F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SKY_PILLAR_3F:0/MAP_SKY_PILLAR_2F:1", + "MAP_SKY_PILLAR_3F:1/MAP_SKY_PILLAR_4F:0" + ] + }, + "REGION_SKY_PILLAR_3F/TOP_CENTER": { + "parent_map": "MAP_SKY_PILLAR_3F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SKY_PILLAR_3F:2/MAP_SKY_PILLAR_4F:1" + ] + }, + "REGION_SKY_PILLAR_4F/MAIN": { + "parent_map": "MAP_SKY_PILLAR_4F", + "locations": [], + "events": [], + "exits": [ + "REGION_SKY_PILLAR_4F/ABOVE_3F_TOP_CENTER", + "REGION_SKY_PILLAR_3F/MAIN" + ], + "warps": [ + "MAP_SKY_PILLAR_4F:0/MAP_SKY_PILLAR_3F:1" + ] + }, + "REGION_SKY_PILLAR_4F/ABOVE_3F_TOP_CENTER": { + "parent_map": "MAP_SKY_PILLAR_4F", + "locations": [], + "events": [], + "exits": [ + "REGION_SKY_PILLAR_3F/TOP_CENTER" + ], + "warps": [] + }, + "REGION_SKY_PILLAR_4F/TOP_LEFT": { + "parent_map": "MAP_SKY_PILLAR_4F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SKY_PILLAR_4F:1/MAP_SKY_PILLAR_3F:2", + "MAP_SKY_PILLAR_4F:2/MAP_SKY_PILLAR_5F:0" + ] + }, + "REGION_SKY_PILLAR_5F/MAIN": { + "parent_map": "MAP_SKY_PILLAR_5F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SKY_PILLAR_5F:0/MAP_SKY_PILLAR_4F:2", + "MAP_SKY_PILLAR_5F:1/MAP_SKY_PILLAR_TOP:0" + ] + }, + "REGION_SKY_PILLAR_TOP/MAIN": { + "parent_map": "MAP_SKY_PILLAR_TOP", + "locations": [], + "events": [ + "EVENT_WAKE_RAYQUAZA" + ], + "exits": [], + "warps": [ + "MAP_SKY_PILLAR_TOP:0/MAP_SKY_PILLAR_5F:1" + ] + }, + "REGION_UNDERWATER_SEALED_CHAMBER/MAIN": { + "parent_map": "MAP_UNDERWATER_SEALED_CHAMBER", + "locations": [], + "events": [], + "exits": [ + "REGION_SEALED_CHAMBER_OUTER_ROOM/MAIN" + ], + "warps": [ + "MAP_UNDERWATER_SEALED_CHAMBER:0/MAP_UNDERWATER_ROUTE134:0" + ] + }, + "REGION_SEALED_CHAMBER_OUTER_ROOM/MAIN": { + "parent_map": "MAP_SEALED_CHAMBER_OUTER_ROOM", + "locations": [], + "events": [], + "exits": [ + "REGION_UNDERWATER_SEALED_CHAMBER/MAIN" + ], + "warps": [ + "MAP_SEALED_CHAMBER_OUTER_ROOM:0/MAP_SEALED_CHAMBER_INNER_ROOM:0" + ] + }, + "REGION_SEALED_CHAMBER_INNER_ROOM/MAIN": { + "parent_map": "MAP_SEALED_CHAMBER_INNER_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SEALED_CHAMBER_INNER_ROOM:0/MAP_SEALED_CHAMBER_OUTER_ROOM:0" + ] + }, + "REGION_VICTORY_ROAD_1F/NORTH_EAST": { + "parent_map": "MAP_VICTORY_ROAD_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_VICTORY_ROAD_1F:1/MAP_EVER_GRANDE_CITY:3", + "MAP_VICTORY_ROAD_1F:2/MAP_VICTORY_ROAD_B1F:5" + ] + }, + "REGION_VICTORY_ROAD_1F/SOUTH_WEST": { + "parent_map": "MAP_VICTORY_ROAD_1F", + "locations": [ + "ITEM_VICTORY_ROAD_1F_MAX_ELIXIR" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_VICTORY_ROAD_1F:0/MAP_EVER_GRANDE_CITY:2", + "MAP_VICTORY_ROAD_1F:4/MAP_VICTORY_ROAD_B1F:4" + ] + }, + "REGION_VICTORY_ROAD_1F/SOUTH_EAST": { + "parent_map": "MAP_VICTORY_ROAD_1F", + "locations": [ + "ITEM_VICTORY_ROAD_1F_PP_UP", + "HIDDEN_ITEM_VICTORY_ROAD_1F_ULTRA_BALL" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_VICTORY_ROAD_1F:3/MAP_VICTORY_ROAD_B1F:2" + ] + }, + "REGION_VICTORY_ROAD_B1F/NORTH_EAST": { + "parent_map": "MAP_VICTORY_ROAD_B1F", + "locations": [ + "ITEM_VICTORY_ROAD_B1F_TM29" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_VICTORY_ROAD_B1F:3/MAP_VICTORY_ROAD_B2F:1" + ] + }, + "REGION_VICTORY_ROAD_B1F/SOUTH_WEST_MAIN": { + "parent_map": "MAP_VICTORY_ROAD_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B1F/SOUTH_WEST_LADDER_UP" + ], + "warps": [ + "MAP_VICTORY_ROAD_B1F:1/MAP_VICTORY_ROAD_B2F:2", + "MAP_VICTORY_ROAD_B1F:6/MAP_VICTORY_ROAD_B2F:3" + ] + }, + "REGION_VICTORY_ROAD_B1F/SOUTH_WEST_LADDER_UP": { + "parent_map": "MAP_VICTORY_ROAD_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B1F/SOUTH_WEST_MAIN" + ], + "warps": [ + "MAP_VICTORY_ROAD_B1F:5/MAP_VICTORY_ROAD_1F:2" + ] + }, + "REGION_VICTORY_ROAD_B1F/MAIN_UPPER": { + "parent_map": "MAP_VICTORY_ROAD_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B1F/MAIN_LOWER_EAST" + ], + "warps": [ + "MAP_VICTORY_ROAD_B1F:2/MAP_VICTORY_ROAD_1F:3" + ] + }, + "REGION_VICTORY_ROAD_B1F/MAIN_LOWER_EAST": { + "parent_map": "MAP_VICTORY_ROAD_B1F", + "locations": [ + "ITEM_VICTORY_ROAD_B1F_FULL_RESTORE" + ], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B1F/MAIN_LOWER_WEST" + ], + "warps": [ + "MAP_VICTORY_ROAD_B1F:0/MAP_VICTORY_ROAD_B2F:0" + ] + }, + "REGION_VICTORY_ROAD_B1F/MAIN_LOWER_WEST": { + "parent_map": "MAP_VICTORY_ROAD_B1F", + "locations": [], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B1F/MAIN_UPPER", + "REGION_VICTORY_ROAD_B1F/MAIN_LOWER_EAST" + ], + "warps": [ + "MAP_VICTORY_ROAD_B1F:4/MAP_VICTORY_ROAD_1F:4" + ] + }, + "REGION_VICTORY_ROAD_B2F/LOWER_WEST": { + "parent_map": "MAP_VICTORY_ROAD_B2F", + "locations": [], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER" + ], + "warps": [ + "MAP_VICTORY_ROAD_B2F:3/MAP_VICTORY_ROAD_B1F:6" + ] + }, + "REGION_VICTORY_ROAD_B2F/LOWER_WEST_ISLAND": { + "parent_map": "MAP_VICTORY_ROAD_B2F", + "locations": [], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER" + ], + "warps": [ + "MAP_VICTORY_ROAD_B2F:2/MAP_VICTORY_ROAD_B1F:1" + ] + }, + "REGION_VICTORY_ROAD_B2F/LOWER_EAST": { + "parent_map": "MAP_VICTORY_ROAD_B2F", + "locations": [], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER" + ], + "warps": [ + "MAP_VICTORY_ROAD_B2F:0/MAP_VICTORY_ROAD_B1F:0" + ] + }, + "REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER": { + "parent_map": "MAP_VICTORY_ROAD_B2F", + "locations": [], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B2F/UPPER_WATER", + "REGION_VICTORY_ROAD_B2F/LOWER_WEST", + "REGION_VICTORY_ROAD_B2F/LOWER_WEST_ISLAND" + ], + "warps": [] + }, + "REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER": { + "parent_map": "MAP_VICTORY_ROAD_B2F", + "locations": [], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B2F/UPPER_WATER", + "REGION_VICTORY_ROAD_B2F/UPPER", + "REGION_VICTORY_ROAD_B2F/LOWER_EAST" + ], + "warps": [] + }, + "REGION_VICTORY_ROAD_B2F/UPPER": { + "parent_map": "MAP_VICTORY_ROAD_B2F", + "locations": [ + "HIDDEN_ITEM_VICTORY_ROAD_B2F_MAX_REPEL" + ], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER", + "REGION_VICTORY_ROAD_B2F/LOWER_EAST", + "REGION_VICTORY_ROAD_B2F/UPPER_WATER" + ], + "warps": [ + "MAP_VICTORY_ROAD_B2F:1/MAP_VICTORY_ROAD_B1F:3" + ] + }, + "REGION_VICTORY_ROAD_B2F/UPPER_WATER": { + "parent_map": "MAP_VICTORY_ROAD_B2F", + "locations": [ + "ITEM_VICTORY_ROAD_B2F_FULL_HEAL", + "HIDDEN_ITEM_VICTORY_ROAD_B2F_ELIXIR" + ], + "events": [], + "exits": [ + "REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER", + "REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER", + "REGION_VICTORY_ROAD_B2F/UPPER" + ], + "warps": [] + } +} diff --git a/worlds/pokemon_emerald/data/regions/routes.json b/worlds/pokemon_emerald/data/regions/routes.json new file mode 100644 index 000000000000..7d2eebee40d4 --- /dev/null +++ b/worlds/pokemon_emerald/data/regions/routes.json @@ -0,0 +1,1871 @@ +{ + "REGION_ROUTE101/MAIN": { + "parent_map": "MAP_ROUTE101", + "locations": [], + "events": [], + "exits": [ + "REGION_LITTLEROOT_TOWN/MAIN", + "REGION_OLDALE_TOWN/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE102/MAIN": { + "parent_map": "MAP_ROUTE102", + "locations": [ + "ITEM_ROUTE_102_POTION" + ], + "events": [], + "exits": [ + "REGION_OLDALE_TOWN/MAIN", + "REGION_PETALBURG_CITY/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE103/WEST": { + "parent_map": "MAP_ROUTE103", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE103/WATER", + "REGION_OLDALE_TOWN/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE103/WATER": { + "parent_map": "MAP_ROUTE103", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE103/WEST", + "REGION_ROUTE103/EAST" + ], + "warps": [] + }, + "REGION_ROUTE103/EAST": { + "parent_map": "MAP_ROUTE103", + "locations": [ + "ITEM_ROUTE_103_GUARD_SPEC", + "ITEM_ROUTE_103_PP_UP" + ], + "events": [], + "exits": [ + "REGION_ROUTE103/WATER", + "REGION_ROUTE110/MAIN" + ], + "warps": [ + "MAP_ROUTE103:0/MAP_ALTERING_CAVE:0" + ] + }, + "REGION_ROUTE104/SOUTH": { + "parent_map": "MAP_ROUTE104", + "locations": [ + "HIDDEN_ITEM_ROUTE_104_POTION", + "HIDDEN_ITEM_ROUTE_104_HEART_SCALE", + "HIDDEN_ITEM_ROUTE_104_ANTIDOTE" + ], + "events": [], + "exits": [ + "REGION_PETALBURG_CITY/MAIN", + "REGION_ROUTE105/MAIN" + ], + "warps": [ + "MAP_ROUTE104:0/MAP_ROUTE104_MR_BRINEYS_HOUSE:0", + "MAP_ROUTE104:4,5/MAP_PETALBURG_WOODS:2,3" + ] + }, + "REGION_ROUTE104/SOUTH_LEDGE": { + "parent_map": "MAP_ROUTE104", + "locations": [ + "ITEM_ROUTE_104_POKE_BALL" + ], + "events": [], + "exits": [ + "REGION_ROUTE104/SOUTH" + ], + "warps": [ + "MAP_ROUTE104:6,7/MAP_PETALBURG_WOODS:4,5" + ] + }, + "REGION_ROUTE104/NORTH": { + "parent_map": "MAP_ROUTE104", + "locations": [ + "ITEM_ROUTE_104_PP_UP", + "ITEM_ROUTE_104_POTION", + "ITEM_ROUTE_104_X_ACCURACY", + "HIDDEN_ITEM_ROUTE_104_SUPER_POTION", + "HIDDEN_ITEM_ROUTE_104_POKE_BALL", + "NPC_GIFT_RECEIVED_TM09", + "NPC_GIFT_RECEIVED_WHITE_HERB", + "NPC_GIFT_RECEIVED_CHESTO_BERRY_ROUTE_104" + ], + "events": [], + "exits": [ + "REGION_RUSTBORO_CITY/MAIN" + ], + "warps": [ + "MAP_ROUTE104:1/MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP:0", + "MAP_ROUTE104:2,3/MAP_PETALBURG_WOODS:0,1" + ] + }, + "REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN": { + "parent_map": "MAP_ROUTE104_MR_BRINEYS_HOUSE", + "locations": [], + "events": [], + "exits": [ + "REGION_DEWFORD_TOWN/MAIN" + ], + "warps": [ + "MAP_ROUTE104_MR_BRINEYS_HOUSE:0,1/MAP_ROUTE104:0" + ] + }, + "REGION_ROUTE104_PRETTY_PETAL_FLOWER_SHOP/MAIN": { + "parent_map": "MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP", + "locations": [ + "NPC_GIFT_RECEIVED_WAILMER_PAIL" + ], + "events": [ + "EVENT_MEET_FLOWER_SHOP_OWNER" + ], + "exits": [], + "warps": [ + "MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP:0,1/MAP_ROUTE104:1" + ] + }, + "REGION_ROUTE105/MAIN": { + "parent_map": "MAP_ROUTE105", + "locations": [ + "ITEM_ROUTE_105_IRON", + "HIDDEN_ITEM_ROUTE_105_HEART_SCALE", + "HIDDEN_ITEM_ROUTE_105_BIG_PEARL" + ], + "events": [], + "exits": [ + "REGION_ROUTE104/SOUTH", + "REGION_ROUTE106/SEA", + "REGION_UNDERWATER_ROUTE105/MAIN" + ], + "warps": [ + "MAP_ROUTE105:0/MAP_ISLAND_CAVE:0" + ] + }, + "REGION_UNDERWATER_ROUTE105/MAIN": { + "parent_map": "MAP_UNDERWATER_ROUTE105", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE105/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE106/WEST": { + "parent_map": "MAP_ROUTE106", + "locations": [ + "ITEM_ROUTE_106_PROTEIN" + ], + "events": [], + "exits": [ + "REGION_ROUTE106/SEA" + ], + "warps": [] + }, + "REGION_ROUTE106/SEA": { + "parent_map": "MAP_ROUTE106", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE105/MAIN", + "REGION_ROUTE106/EAST", + "REGION_ROUTE106/WEST" + ], + "warps": [] + }, + "REGION_ROUTE106/EAST": { + "parent_map": "MAP_ROUTE106", + "locations": [ + "HIDDEN_ITEM_ROUTE_106_POKE_BALL", + "HIDDEN_ITEM_ROUTE_106_STARDUST", + "HIDDEN_ITEM_ROUTE_106_HEART_SCALE" + ], + "events": [], + "exits": [ + "REGION_ROUTE106/SEA", + "REGION_DEWFORD_TOWN/MAIN" + ], + "warps": [ + "MAP_ROUTE106:0/MAP_GRANITE_CAVE_1F:0" + ] + }, + "REGION_ROUTE107/MAIN": { + "parent_map": "MAP_ROUTE107", + "locations": [], + "events": [], + "exits": [ + "REGION_DEWFORD_TOWN/MAIN", + "REGION_ROUTE108/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE108/MAIN": { + "parent_map": "MAP_ROUTE108", + "locations": [ + "ITEM_ROUTE_108_STAR_PIECE", + "HIDDEN_ITEM_ROUTE_108_RARE_CANDY" + ], + "events": [], + "exits": [ + "REGION_ROUTE107/MAIN", + "REGION_ROUTE109/SEA" + ], + "warps": [ + "MAP_ROUTE108:0/MAP_ABANDONED_SHIP_DECK:0" + ] + }, + "REGION_ROUTE109/SEA": { + "parent_map": "MAP_ROUTE109", + "locations": [ + "ITEM_ROUTE_109_PP_UP", + "HIDDEN_ITEM_ROUTE_109_HEART_SCALE_3" + ], + "events": [], + "exits": [ + "REGION_ROUTE109/BEACH", + "REGION_ROUTE108/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE109/BEACH": { + "parent_map": "MAP_ROUTE109", + "locations": [ + "ITEM_ROUTE_109_POTION", + "HIDDEN_ITEM_ROUTE_109_REVIVE", + "HIDDEN_ITEM_ROUTE_109_HEART_SCALE_1", + "HIDDEN_ITEM_ROUTE_109_GREAT_BALL", + "HIDDEN_ITEM_ROUTE_109_ETHER", + "HIDDEN_ITEM_ROUTE_109_HEART_SCALE_2", + "NPC_GIFT_RECEIVED_SOFT_SAND" + ], + "events": [], + "exits": [ + "REGION_ROUTE109/SEA", + "REGION_SLATEPORT_CITY/MAIN", + "REGION_DEWFORD_TOWN/MAIN" + ], + "warps": [ + "MAP_ROUTE109:0/MAP_ROUTE109_SEASHORE_HOUSE:0" + ] + }, + "REGION_ROUTE109_SEASHORE_HOUSE/MAIN": { + "parent_map": "MAP_ROUTE109_SEASHORE_HOUSE", + "locations": [ + "NPC_GIFT_RECEIVED_6_SODA_POP" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE109_SEASHORE_HOUSE:0,1/MAP_ROUTE109:0" + ] + }, + "REGION_ROUTE110/MAIN": { + "parent_map": "MAP_ROUTE110", + "locations": [ + "ITEM_ROUTE_110_DIRE_HIT", + "ITEM_ROUTE_110_ELIXIR", + "HIDDEN_ITEM_ROUTE_110_REVIVE", + "HIDDEN_ITEM_ROUTE_110_GREAT_BALL", + "HIDDEN_ITEM_ROUTE_110_POKE_BALL", + "HIDDEN_ITEM_ROUTE_110_FULL_HEAL", + "NPC_GIFT_RECEIVED_ITEMFINDER" + ], + "events": [], + "exits": [ + "REGION_ROUTE110/SOUTH", + "REGION_ROUTE110/SOUTH_WATER", + "REGION_ROUTE110/NORTH_WATER", + "REGION_MAUVILLE_CITY/MAIN", + "REGION_ROUTE103/EAST" + ], + "warps": [ + "MAP_ROUTE110:1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:0", + "MAP_ROUTE110:2/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:0" + ] + }, + "REGION_ROUTE110/SOUTH": { + "parent_map": "MAP_ROUTE110", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE110/MAIN", + "REGION_SLATEPORT_CITY/MAIN" + ], + "warps": [ + "MAP_ROUTE110:4/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:0" + ] + }, + "REGION_ROUTE110/CYCLING_ROAD": { + "parent_map": "MAP_ROUTE110", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110:3/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:2", + "MAP_ROUTE110:5/MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:2" + ] + }, + "REGION_ROUTE110/SOUTH_WATER": { + "parent_map": "MAP_ROUTE110", + "locations": [ + "ITEM_ROUTE_110_RARE_CANDY" + ], + "events": [], + "exits": [ + "REGION_ROUTE110/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE110/NORTH_WATER": { + "parent_map": "MAP_ROUTE110", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE110/MAIN" + ], + "warps": [ + "MAP_ROUTE110:0/MAP_NEW_MAUVILLE_ENTRANCE:0" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_ENTRANCE/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_ENTRANCE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:0,1/MAP_ROUTE110:1", + "MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_PUZZLE1/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2/MAP_ROUTE110_TRICK_HOUSE_END:0" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_END/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_END", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_END:1/MAP_ROUTE110_TRICK_HOUSE_CORRIDOR:0", + "MAP_ROUTE110_TRICK_HOUSE_END:0/MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:2" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_CORRIDOR/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_CORRIDOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_CORRIDOR:2,3/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_CORRIDOR:0,1/MAP_ROUTE110_TRICK_HOUSE_END:1" + ] + }, + "REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/WEST": { + "parent_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/EAST" + ], + "warps": [ + "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:0,1/MAP_ROUTE110:2" + ] + }, + "REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/EAST": { + "parent_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/WEST" + ], + "warps": [ + "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE:2,3/MAP_ROUTE110:3" + ] + }, + "REGION_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE/WEST": { + "parent_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE/EAST" + ], + "warps": [ + "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:0,1/MAP_ROUTE110:4" + ] + }, + "REGION_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE/EAST": { + "parent_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE/WEST" + ], + "warps": [ + "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE:2,3/MAP_ROUTE110:5" + ] + }, + "REGION_ROUTE111/MIDDLE": { + "parent_map": "MAP_ROUTE111", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE111/DESERT", + "REGION_ROUTE111/SOUTH", + "REGION_ROUTE112/SOUTH_EAST" + ], + "warps": [] + }, + "REGION_ROUTE111/SOUTH": { + "parent_map": "MAP_ROUTE111", + "locations": [ + "ITEM_ROUTE_111_ELIXIR" + ], + "events": [], + "exits": [ + "REGION_ROUTE111/SOUTH_POND", + "REGION_ROUTE111/MIDDLE", + "REGION_MAUVILLE_CITY/MAIN" + ], + "warps": [ + "MAP_ROUTE111:0/MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE:0", + "MAP_ROUTE111:4/MAP_TRAINER_HILL_ENTRANCE:0" + ] + }, + "REGION_ROUTE111/SOUTH_POND": { + "parent_map": "MAP_ROUTE111", + "locations": [ + "ITEM_ROUTE_111_HP_UP" + ], + "events": [], + "exits": [ + "REGION_ROUTE111/SOUTH" + ], + "warps": [] + }, + "REGION_ROUTE111/DESERT": { + "parent_map": "MAP_ROUTE111", + "locations": [ + "ITEM_ROUTE_111_TM37", + "ITEM_ROUTE_111_STARDUST", + "HIDDEN_ITEM_ROUTE_111_STARDUST", + "HIDDEN_ITEM_ROUTE_111_PROTEIN", + "HIDDEN_ITEM_ROUTE_111_RARE_CANDY" + ], + "events": [], + "exits": [ + "REGION_ROUTE111/NORTH", + "REGION_ROUTE111/MIDDLE" + ], + "warps": [ + "MAP_ROUTE111:1/MAP_DESERT_RUINS:0", + "MAP_ROUTE111:3/MAP_MIRAGE_TOWER_1F:0" + ] + }, + "REGION_ROUTE111/NORTH": { + "parent_map": "MAP_ROUTE111", + "locations": [ + "NPC_GIFT_RECEIVED_SECRET_POWER" + ], + "events": [], + "exits": [ + "REGION_ROUTE113/MAIN", + "REGION_ROUTE112/NORTH", + "REGION_ROUTE111/DESERT" + ], + "warps": [ + "MAP_ROUTE111:2/MAP_ROUTE111_OLD_LADYS_REST_STOP:0" + ] + }, + "REGION_ROUTE111_OLD_LADYS_REST_STOP/MAIN": { + "parent_map": "MAP_ROUTE111_OLD_LADYS_REST_STOP", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE111_OLD_LADYS_REST_STOP:0,1/MAP_ROUTE111:2" + ] + }, + "REGION_ROUTE111_WINSTRATE_FAMILYS_HOUSE/MAIN": { + "parent_map": "MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE", + "locations": [ + "NPC_GIFT_RECEIVED_MACHO_BRACE" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE:0,1/MAP_ROUTE111:0" + ] + }, + "REGION_ROUTE112/SOUTH_EAST": { + "parent_map": "MAP_ROUTE112", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE112/CABLE_CAR_STATION_ENTRANCE", + "REGION_ROUTE111/MIDDLE" + ], + "warps": [ + "MAP_ROUTE112:4/MAP_FIERY_PATH:0" + ] + }, + "REGION_ROUTE112/CABLE_CAR_STATION_ENTRANCE": { + "parent_map": "MAP_ROUTE112", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE112/SOUTH_EAST" + ], + "warps": [ + "MAP_ROUTE112:0,1/MAP_ROUTE112_CABLE_CAR_STATION:0,1" + ] + }, + "REGION_ROUTE112/SOUTH_WEST": { + "parent_map": "MAP_ROUTE112", + "locations": [ + "ITEM_ROUTE_112_NUGGET" + ], + "events": [], + "exits": [ + "REGION_ROUTE112/SOUTH_EAST", + "REGION_LAVARIDGE_TOWN/MAIN" + ], + "warps": [ + "MAP_ROUTE112:2,3/MAP_JAGGED_PASS:0,1" + ] + }, + "REGION_ROUTE112/NORTH": { + "parent_map": "MAP_ROUTE112", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE111/NORTH" + ], + "warps": [ + "MAP_ROUTE112:5/MAP_FIERY_PATH:1" + ] + }, + "REGION_ROUTE112_CABLE_CAR_STATION/MAIN": { + "parent_map": "MAP_ROUTE112_CABLE_CAR_STATION", + "locations": [], + "events": [], + "exits": [ + "REGION_MT_CHIMNEY_CABLE_CAR_STATION/MAIN" + ], + "warps": [ + "MAP_ROUTE112_CABLE_CAR_STATION:0,1/MAP_ROUTE112:0,1" + ] + }, + "REGION_MT_CHIMNEY_CABLE_CAR_STATION/MAIN": { + "parent_map": "MAP_MT_CHIMNEY_CABLE_CAR_STATION", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE112_CABLE_CAR_STATION/MAIN" + ], + "warps": [ + "MAP_MT_CHIMNEY_CABLE_CAR_STATION:0,1/MAP_MT_CHIMNEY:0,1" + ] + }, + "REGION_MT_CHIMNEY/MAIN": { + "parent_map": "MAP_MT_CHIMNEY", + "locations": [ + "NPC_GIFT_RECEIVED_METEORITE" + ], + "events": [ + "EVENT_RECOVER_METEORITE" + ], + "exits": [], + "warps": [ + "MAP_MT_CHIMNEY:0,1/MAP_MT_CHIMNEY_CABLE_CAR_STATION:0,1", + "MAP_MT_CHIMNEY:2,3/MAP_JAGGED_PASS:2,3" + ] + }, + "REGION_JAGGED_PASS/TOP": { + "parent_map": "MAP_JAGGED_PASS", + "locations": [ + "HIDDEN_ITEM_JAGGED_PASS_FULL_HEAL" + ], + "events": [], + "exits": [ + "REGION_JAGGED_PASS/MIDDLE" + ], + "warps": [ + "MAP_JAGGED_PASS:2,3/MAP_MT_CHIMNEY:2,3" + ] + }, + "REGION_JAGGED_PASS/MIDDLE": { + "parent_map": "MAP_JAGGED_PASS", + "locations": [ + "ITEM_JAGGED_PASS_BURN_HEAL", + "HIDDEN_ITEM_JAGGED_PASS_GREAT_BALL" + ], + "events": [], + "exits": [ + "REGION_JAGGED_PASS/TOP", + "REGION_JAGGED_PASS/BOTTOM" + ], + "warps": [ + "MAP_JAGGED_PASS:4/MAP_MAGMA_HIDEOUT_1F:0" + ] + }, + "REGION_JAGGED_PASS/BOTTOM": { + "parent_map": "MAP_JAGGED_PASS", + "locations": [], + "events": [], + "exits": [ + "REGION_JAGGED_PASS/MIDDLE" + ], + "warps": [ + "MAP_JAGGED_PASS:0,1/MAP_ROUTE112:2,3" + ] + }, + "REGION_ROUTE113/MAIN": { + "parent_map": "MAP_ROUTE113", + "locations": [ + "ITEM_ROUTE_113_MAX_ETHER", + "ITEM_ROUTE_113_SUPER_REPEL", + "ITEM_ROUTE_113_HYPER_POTION", + "HIDDEN_ITEM_ROUTE_113_ETHER", + "HIDDEN_ITEM_ROUTE_113_TM32", + "HIDDEN_ITEM_ROUTE_113_NUGGET" + ], + "events": [], + "exits": [ + "REGION_FALLARBOR_TOWN/MAIN", + "REGION_ROUTE111/NORTH" + ], + "warps": [ + "MAP_ROUTE113:0/MAP_ROUTE113_GLASS_WORKSHOP:0" + ] + }, + "REGION_ROUTE113_GLASS_WORKSHOP/MAIN": { + "parent_map": "MAP_ROUTE113_GLASS_WORKSHOP", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE113_GLASS_WORKSHOP:0,1/MAP_ROUTE113:0" + ] + }, + "REGION_ROUTE114/MAIN": { + "parent_map": "MAP_ROUTE114", + "locations": [ + "ITEM_ROUTE_114_PROTEIN", + "ITEM_ROUTE_114_ENERGY_POWDER", + "HIDDEN_ITEM_ROUTE_114_REVIVE", + "HIDDEN_ITEM_ROUTE_114_CARBOS", + "NPC_GIFT_RECEIVED_TM05" + ], + "events": [], + "exits": [ + "REGION_ROUTE114/ABOVE_WATERFALL", + "REGION_FALLARBOR_TOWN/MAIN" + ], + "warps": [ + "MAP_ROUTE114:0/MAP_METEOR_FALLS_1F_1R:0", + "MAP_ROUTE114:1/MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:0", + "MAP_ROUTE114:2/MAP_ROUTE114_LANETTES_HOUSE:0" + ] + }, + "REGION_ROUTE114/ABOVE_WATERFALL": { + "parent_map": "MAP_ROUTE114", + "locations": [ + "ITEM_ROUTE_114_RARE_CANDY" + ], + "events": [], + "exits": [ + "REGION_ROUTE114/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE114_FOSSIL_MANIACS_HOUSE/MAIN": { + "parent_map": "MAP_ROUTE114_FOSSIL_MANIACS_HOUSE", + "locations": [ + "NPC_GIFT_RECEIVED_TM28" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:0,1/MAP_ROUTE114:1", + "MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:2/MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:0" + ] + }, + "REGION_ROUTE114_FOSSIL_MANIACS_TUNNEL/MAIN": { + "parent_map": "MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:0,1/MAP_ROUTE114_FOSSIL_MANIACS_HOUSE:2", + "MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:2/MAP_DESERT_UNDERPASS:0" + ] + }, + "REGION_DESERT_UNDERPASS/MAIN": { + "parent_map": "MAP_DESERT_UNDERPASS", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_DESERT_UNDERPASS:0/MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:2" + ] + }, + "REGION_ROUTE114_LANETTES_HOUSE/MAIN": { + "parent_map": "MAP_ROUTE114_LANETTES_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE114_LANETTES_HOUSE:0,1/MAP_ROUTE114:2" + ] + }, + "REGION_ROUTE115/SOUTH_BELOW_LEDGE": { + "parent_map": "MAP_ROUTE115", + "locations": [ + "ITEM_ROUTE_115_SUPER_POTION" + ], + "events": [], + "exits": [ + "REGION_ROUTE115/SEA", + "REGION_RUSTBORO_CITY/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE": { + "parent_map": "MAP_ROUTE115", + "locations": [ + "HIDDEN_ITEM_ROUTE_115_HEART_SCALE" + ], + "events": [], + "exits": [ + "REGION_ROUTE115/SOUTH_ABOVE_LEDGE", + "REGION_ROUTE115/SEA" + ], + "warps": [] + }, + "REGION_ROUTE115/SOUTH_ABOVE_LEDGE": { + "parent_map": "MAP_ROUTE115", + "locations": [ + "ITEM_ROUTE_115_PP_UP" + ], + "events": [], + "exits": [ + "REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE", + "REGION_ROUTE115/SOUTH_BELOW_LEDGE", + "REGION_ROUTE115/SOUTH_BEHIND_ROCK" + ], + "warps": [ + "MAP_ROUTE115:0/MAP_METEOR_FALLS_1F_1R:1" + ] + }, + "REGION_ROUTE115/SOUTH_BEHIND_ROCK": { + "parent_map": "MAP_ROUTE115", + "locations": [ + "ITEM_ROUTE_115_GREAT_BALL" + ], + "events": [], + "exits": [ + "REGION_ROUTE115/SOUTH_ABOVE_LEDGE" + ], + "warps": [] + }, + "REGION_ROUTE115/NORTH_BELOW_SLOPE": { + "parent_map": "MAP_ROUTE115", + "locations": [ + "ITEM_ROUTE_115_HEAL_POWDER", + "ITEM_ROUTE_115_TM01" + ], + "events": [], + "exits": [ + "REGION_ROUTE115/NORTH_ABOVE_SLOPE", + "REGION_ROUTE115/SEA" + ], + "warps": [] + }, + "REGION_ROUTE115/NORTH_ABOVE_SLOPE": { + "parent_map": "MAP_ROUTE115", + "locations": [ + "ITEM_ROUTE_115_IRON" + ], + "events": [], + "exits": [ + "REGION_ROUTE115/NORTH_BELOW_SLOPE" + ], + "warps": [] + }, + "REGION_ROUTE115/SEA": { + "parent_map": "MAP_ROUTE115", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE115/SOUTH_BELOW_LEDGE", + "REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE", + "REGION_ROUTE115/NORTH_BELOW_SLOPE" + ], + "warps": [] + }, + "REGION_ROUTE116/WEST": { + "parent_map": "MAP_ROUTE116", + "locations": [ + "ITEM_ROUTE_116_REPEL", + "ITEM_ROUTE_116_X_SPECIAL", + "NPC_GIFT_RECEIVED_REPEAT_BALL" + ], + "events": [], + "exits": [ + "REGION_ROUTE116/WEST_ABOVE_LEDGE", + "REGION_RUSTBORO_CITY/MAIN" + ], + "warps": [ + "MAP_ROUTE116:0/MAP_RUSTURF_TUNNEL:0", + "MAP_ROUTE116:1/MAP_ROUTE116_TUNNELERS_REST_HOUSE:0" + ] + }, + "REGION_ROUTE116/WEST_ABOVE_LEDGE": { + "parent_map": "MAP_ROUTE116", + "locations": [ + "ITEM_ROUTE_116_ETHER", + "ITEM_ROUTE_116_POTION", + "HIDDEN_ITEM_ROUTE_116_SUPER_POTION" + ], + "events": [], + "exits": [ + "REGION_ROUTE116/WEST" + ], + "warps": [] + }, + "REGION_ROUTE116/EAST": { + "parent_map": "MAP_ROUTE116", + "locations": [ + "ITEM_ROUTE_116_HP_UP", + "HIDDEN_ITEM_ROUTE_116_BLACK_GLASSES" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE116:2/MAP_RUSTURF_TUNNEL:2" + ] + }, + "REGION_ROUTE116_TUNNELERS_REST_HOUSE/MAIN": { + "parent_map": "MAP_ROUTE116_TUNNELERS_REST_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE116_TUNNELERS_REST_HOUSE:0,1/MAP_ROUTE116:1" + ] + }, + "REGION_ROUTE117/MAIN": { + "parent_map": "MAP_ROUTE117", + "locations": [ + "ITEM_ROUTE_117_GREAT_BALL", + "ITEM_ROUTE_117_REVIVE", + "HIDDEN_ITEM_ROUTE_117_REPEL" + ], + "events": [], + "exits": [ + "REGION_VERDANTURF_TOWN/MAIN", + "REGION_MAUVILLE_CITY/MAIN" + ], + "warps": [ + "MAP_ROUTE117:0/MAP_ROUTE117_POKEMON_DAY_CARE:0" + ] + }, + "REGION_ROUTE117_POKEMON_DAY_CARE/MAIN": { + "parent_map": "MAP_ROUTE117_POKEMON_DAY_CARE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE117_POKEMON_DAY_CARE:0,1/MAP_ROUTE117:0" + ] + }, + "REGION_ROUTE118/WEST": { + "parent_map": "MAP_ROUTE118", + "locations": [ + "HIDDEN_ITEM_ROUTE_118_HEART_SCALE" + ], + "events": [], + "exits": [ + "REGION_MAUVILLE_CITY/MAIN", + "REGION_ROUTE118/WATER" + ], + "warps": [] + }, + "REGION_ROUTE118/WATER": { + "parent_map": "MAP_ROUTE118", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE118/WEST", + "REGION_ROUTE118/EAST" + ], + "warps": [] + }, + "REGION_ROUTE118/EAST": { + "parent_map": "MAP_ROUTE118", + "locations": [ + "ITEM_ROUTE_118_HYPER_POTION", + "HIDDEN_ITEM_ROUTE_118_IRON", + "NPC_GIFT_RECEIVED_GOOD_ROD" + ], + "events": [], + "exits": [ + "REGION_ROUTE118/WATER", + "REGION_ROUTE119/LOWER", + "REGION_ROUTE123/WEST" + ], + "warps": [] + }, + "REGION_ROUTE119/LOWER": { + "parent_map": "MAP_ROUTE119", + "locations": [ + "ITEM_ROUTE_119_SUPER_REPEL", + "ITEM_ROUTE_119_HYPER_POTION_1", + "HIDDEN_ITEM_ROUTE_119_FULL_HEAL" + ], + "events": [], + "exits": [ + "REGION_ROUTE119/MIDDLE", + "REGION_ROUTE119/LOWER_ACROSS_WATER", + "REGION_ROUTE119/LOWER_ACROSS_RAILS", + "REGION_ROUTE118/EAST" + ], + "warps": [ + "MAP_ROUTE119:1/MAP_ROUTE119_HOUSE:0" + ] + }, + "REGION_ROUTE119/LOWER_ACROSS_WATER": { + "parent_map": "MAP_ROUTE119", + "locations": [ + "ITEM_ROUTE_119_ZINC" + ], + "events": [], + "exits": [ + "REGION_ROUTE119/LOWER" + ], + "warps": [] + }, + "REGION_ROUTE119/LOWER_ACROSS_RAILS": { + "parent_map": "MAP_ROUTE119", + "locations": [ + "HIDDEN_ITEM_ROUTE_119_CALCIUM" + ], + "events": [], + "exits": [ + "REGION_ROUTE119/LOWER" + ], + "warps": [] + }, + "REGION_ROUTE119/MIDDLE": { + "parent_map": "MAP_ROUTE119", + "locations": [ + "ITEM_ROUTE_119_ELIXIR_1", + "ITEM_ROUTE_119_HYPER_POTION_2" + ], + "events": [], + "exits": [ + "REGION_ROUTE119/LOWER", + "REGION_ROUTE119/UPPER" + ], + "warps": [ + "MAP_ROUTE119:0/MAP_ROUTE119_WEATHER_INSTITUTE_1F:0" + ] + }, + "REGION_ROUTE119/MIDDLE_RIVER": { + "parent_map": "MAP_ROUTE119", + "locations": [ + "ITEM_ROUTE_119_LEAF_STONE", + "HIDDEN_ITEM_ROUTE_119_ULTRA_BALL", + "HIDDEN_ITEM_ROUTE_119_MAX_ETHER" + ], + "events": [], + "exits": [ + "REGION_ROUTE119/UPPER", + "REGION_ROUTE119/ABOVE_WATERFALL" + ], + "warps": [] + }, + "REGION_ROUTE119/UPPER": { + "parent_map": "MAP_ROUTE119", + "locations": [ + "ITEM_ROUTE_119_ELIXIR_2", + "NPC_GIFT_RECEIVED_HM02" + ], + "events": [], + "exits": [ + "REGION_ROUTE119/MIDDLE", + "REGION_ROUTE119/MIDDLE_RIVER", + "REGION_FORTREE_CITY/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE119/ABOVE_WATERFALL": { + "parent_map": "MAP_ROUTE119", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE119/MIDDLE_RIVER", + "REGION_ROUTE119/ABOVE_WATERFALL_ACROSS_RAILS" + ], + "warps": [] + }, + "REGION_ROUTE119/ABOVE_WATERFALL_ACROSS_RAILS": { + "parent_map": "MAP_ROUTE119", + "locations": [ + "ITEM_ROUTE_119_RARE_CANDY", + "ITEM_ROUTE_119_NUGGET" + ], + "events": [], + "exits": [ + "REGION_ROUTE119/ABOVE_WATERFALL" + ], + "warps": [] + }, + "REGION_ROUTE119_WEATHER_INSTITUTE_1F/MAIN": { + "parent_map": "MAP_ROUTE119_WEATHER_INSTITUTE_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE119_WEATHER_INSTITUTE_1F:0,1/MAP_ROUTE119:0", + "MAP_ROUTE119_WEATHER_INSTITUTE_1F:2/MAP_ROUTE119_WEATHER_INSTITUTE_2F:0" + ] + }, + "REGION_ROUTE119_WEATHER_INSTITUTE_2F/MAIN": { + "parent_map": "MAP_ROUTE119_WEATHER_INSTITUTE_2F", + "locations": [], + "events": [ + "EVENT_DEFEAT_SHELLY" + ], + "exits": [], + "warps": [ + "MAP_ROUTE119_WEATHER_INSTITUTE_2F:0/MAP_ROUTE119_WEATHER_INSTITUTE_1F:2" + ] + }, + "REGION_ROUTE119_HOUSE/MAIN": { + "parent_map": "MAP_ROUTE119_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE119_HOUSE:0,1/MAP_ROUTE119:1" + ] + }, + "REGION_ROUTE120/NORTH": { + "parent_map": "MAP_ROUTE120", + "locations": [ + "HIDDEN_ITEM_ROUTE_120_RARE_CANDY_1", + "HIDDEN_ITEM_ROUTE_120_REVIVE", + "NPC_GIFT_RECEIVED_DEVON_SCOPE" + ], + "events": [], + "exits": [ + "REGION_FORTREE_CITY/MAIN", + "REGION_ROUTE120/NORTH_POND", + "REGION_ROUTE120/SOUTH" + ], + "warps": [] + }, + "REGION_ROUTE120/NORTH_POND": { + "parent_map": "MAP_ROUTE120", + "locations": [ + "ITEM_ROUTE_120_NEST_BALL" + ], + "events": [], + "exits": [ + "REGION_ROUTE120/NORTH" + ], + "warps": [ + "MAP_ROUTE120:1/MAP_SCORCHED_SLAB:0" + ] + }, + "REGION_ROUTE120/SOUTH": { + "parent_map": "MAP_ROUTE120", + "locations": [ + "ITEM_ROUTE_120_NUGGET", + "ITEM_ROUTE_120_FULL_HEAL", + "ITEM_ROUTE_120_REVIVE", + "ITEM_ROUTE_120_HYPER_POTION", + "HIDDEN_ITEM_ROUTE_120_RARE_CANDY_2", + "HIDDEN_ITEM_ROUTE_120_ZINC" + ], + "events": [], + "exits": [ + "REGION_ROUTE120/NORTH", + "REGION_ROUTE121/WEST" + ], + "warps": [ + "MAP_ROUTE120:0/MAP_ANCIENT_TOMB:0" + ] + }, + "REGION_ROUTE121/WEST": { + "parent_map": "MAP_ROUTE121", + "locations": [ + "HIDDEN_ITEM_ROUTE_121_HP_UP" + ], + "events": [], + "exits": [ + "REGION_ROUTE121/EAST", + "REGION_ROUTE120/SOUTH" + ], + "warps": [] + }, + "REGION_ROUTE121/EAST": { + "parent_map": "MAP_ROUTE121", + "locations": [ + "ITEM_ROUTE_121_CARBOS", + "ITEM_ROUTE_121_REVIVE", + "ITEM_ROUTE_121_ZINC", + "HIDDEN_ITEM_ROUTE_121_NUGGET", + "HIDDEN_ITEM_ROUTE_121_FULL_HEAL", + "HIDDEN_ITEM_ROUTE_121_MAX_REVIVE" + ], + "events": [], + "exits": [ + "REGION_ROUTE121/WEST", + "REGION_ROUTE122/SEA", + "REGION_LILYCOVE_CITY/MAIN" + ], + "warps": [ + "MAP_ROUTE121:0/MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:2" + ] + }, + "REGION_ROUTE121_SAFARI_ZONE_ENTRANCE/MAIN": { + "parent_map": "MAP_ROUTE121_SAFARI_ZONE_ENTRANCE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:0,1/MAP_SAFARI_ZONE_SOUTH:0", + "MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:2,3/MAP_ROUTE121:0" + ] + }, + "REGION_SAFARI_ZONE_NORTH/MAIN": { + "parent_map": "MAP_SAFARI_ZONE_NORTH", + "locations": [ + "ITEM_SAFARI_ZONE_NORTH_CALCIUM" + ], + "events": [], + "exits": [ + "REGION_SAFARI_ZONE_SOUTH/MAIN" + ], + "warps": [] + }, + "REGION_SAFARI_ZONE_NORTHWEST/MAIN": { + "parent_map": "MAP_SAFARI_ZONE_NORTHWEST", + "locations": [ + "ITEM_SAFARI_ZONE_NORTH_WEST_TM22" + ], + "events": [], + "exits": [ + "REGION_SAFARI_ZONE_SOUTHWEST/MAIN" + ], + "warps": [] + }, + "REGION_SAFARI_ZONE_NORTHEAST/MAIN": { + "parent_map": "MAP_SAFARI_ZONE_NORTHEAST", + "locations": [ + "ITEM_SAFARI_ZONE_NORTH_EAST_NUGGET", + "HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_RARE_CANDY", + "HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_ZINC" + ], + "events": [], + "exits": [ + "REGION_SAFARI_ZONE_SOUTHEAST/MAIN" + ], + "warps": [] + }, + "REGION_SAFARI_ZONE_SOUTH/MAIN": { + "parent_map": "MAP_SAFARI_ZONE_SOUTH", + "locations": [], + "events": [], + "exits": [ + "REGION_SAFARI_ZONE_NORTH/MAIN", + "REGION_SAFARI_ZONE_SOUTHEAST/MAIN", + "REGION_SAFARI_ZONE_SOUTHWEST/MAIN" + ], + "warps": [ + "MAP_SAFARI_ZONE_SOUTH:0/MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:0" + ] + }, + "REGION_SAFARI_ZONE_SOUTHWEST/MAIN": { + "parent_map": "MAP_SAFARI_ZONE_SOUTHWEST", + "locations": [ + "ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE" + ], + "events": [], + "exits": [ + "REGION_SAFARI_ZONE_SOUTH/MAIN", + "REGION_SAFARI_ZONE_NORTHWEST/MAIN" + ], + "warps": [ + "MAP_SAFARI_ZONE_SOUTHWEST:0/MAP_SAFARI_ZONE_REST_HOUSE:0" + ] + }, + "REGION_SAFARI_ZONE_SOUTHEAST/MAIN": { + "parent_map": "MAP_SAFARI_ZONE_SOUTHEAST", + "locations": [ + "ITEM_SAFARI_ZONE_SOUTH_EAST_BIG_PEARL", + "HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_PP_UP", + "HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_FULL_RESTORE" + ], + "events": [], + "exits": [ + "REGION_SAFARI_ZONE_SOUTH/MAIN", + "REGION_SAFARI_ZONE_NORTHEAST/MAIN" + ], + "warps": [] + }, + "REGION_SAFARI_ZONE_REST_HOUSE/MAIN": { + "parent_map": "MAP_SAFARI_ZONE_REST_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SAFARI_ZONE_REST_HOUSE:0,1/MAP_SAFARI_ZONE_SOUTHWEST:0" + ] + }, + "REGION_ROUTE122/SEA": { + "parent_map": "MAP_ROUTE122", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE122/MT_PYRE_ENTRANCE", + "REGION_ROUTE121/EAST", + "REGION_ROUTE123/EAST" + ], + "warps": [] + }, + "REGION_ROUTE122/MT_PYRE_ENTRANCE": { + "parent_map": "MAP_ROUTE122", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE122/SEA" + ], + "warps": [ + "MAP_ROUTE122:0/MAP_MT_PYRE_1F:0" + ] + }, + "REGION_ROUTE123/WEST": { + "parent_map": "MAP_ROUTE123", + "locations": [ + "ITEM_ROUTE_123_ULTRA_BALL", + "HIDDEN_ITEM_ROUTE_123_REVIVE" + ], + "events": [], + "exits": [ + "REGION_ROUTE118/EAST" + ], + "warps": [ + "MAP_ROUTE123:0/MAP_ROUTE123_BERRY_MASTERS_HOUSE:0" + ] + }, + "REGION_ROUTE123/EAST": { + "parent_map": "MAP_ROUTE123", + "locations": [ + "ITEM_ROUTE_123_CALCIUM", + "ITEM_ROUTE_123_ELIXIR", + "ITEM_ROUTE_123_PP_UP", + "ITEM_ROUTE_123_REVIVAL_HERB", + "HIDDEN_ITEM_ROUTE_123_SUPER_REPEL", + "HIDDEN_ITEM_ROUTE_123_HYPER_POTION", + "NPC_GIFT_RECEIVED_TM19" + ], + "events": [], + "exits": [ + "REGION_ROUTE123/WEST", + "REGION_ROUTE123/EAST_BEHIND_TREE", + "REGION_ROUTE122/SEA" + ], + "warps": [] + }, + "REGION_ROUTE123/EAST_BEHIND_TREE": { + "parent_map": "MAP_ROUTE123", + "locations": [ + "HIDDEN_ITEM_ROUTE_123_PP_UP", + "HIDDEN_ITEM_ROUTE_123_RARE_CANDY" + ], + "events": [], + "exits": [ + "REGION_ROUTE123/EAST" + ], + "warps": [] + }, + "REGION_ROUTE123_BERRY_MASTERS_HOUSE/MAIN": { + "parent_map": "MAP_ROUTE123_BERRY_MASTERS_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE123_BERRY_MASTERS_HOUSE:0,1/MAP_ROUTE123:0" + ] + }, + "REGION_ROUTE124/MAIN": { + "parent_map": "MAP_ROUTE124", + "locations": [], + "events": [], + "exits": [ + "REGION_LILYCOVE_CITY/MAIN", + "REGION_MOSSDEEP_CITY/MAIN", + "REGION_UNDERWATER_ROUTE124/BIG_AREA", + "REGION_UNDERWATER_ROUTE124/SMALL_AREA_1", + "REGION_UNDERWATER_ROUTE124/SMALL_AREA_2", + "REGION_UNDERWATER_ROUTE124/SMALL_AREA_3", + "REGION_UNDERWATER_ROUTE124/TUNNEL_1", + "REGION_UNDERWATER_ROUTE124/TUNNEL_2", + "REGION_UNDERWATER_ROUTE124/TUNNEL_3", + "REGION_UNDERWATER_ROUTE124/TUNNEL_4" + ], + "warps": [ + "MAP_ROUTE124:0/MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE:0" + ] + }, + "REGION_ROUTE124/NORTH_ENCLOSED_AREA_1": { + "parent_map": "MAP_ROUTE124", + "locations": [ + "ITEM_ROUTE_124_RED_SHARD" + ], + "events": [], + "exits": [ + "REGION_UNDERWATER_ROUTE124/TUNNEL_1" + ], + "warps": [] + }, + "REGION_ROUTE124/NORTH_ENCLOSED_AREA_2": { + "parent_map": "MAP_ROUTE124", + "locations": [], + "events": [], + "exits": [ + "REGION_UNDERWATER_ROUTE124/TUNNEL_1" + ], + "warps": [] + }, + "REGION_ROUTE124/NORTH_ENCLOSED_AREA_3": { + "parent_map": "MAP_ROUTE124", + "locations": [ + "ITEM_ROUTE_124_YELLOW_SHARD" + ], + "events": [], + "exits": [ + "REGION_UNDERWATER_ROUTE124/TUNNEL_2" + ], + "warps": [] + }, + "REGION_ROUTE124/SOUTH_ENCLOSED_AREA_1": { + "parent_map": "MAP_ROUTE124", + "locations": [ + "ITEM_ROUTE_124_BLUE_SHARD" + ], + "events": [], + "exits": [ + "REGION_UNDERWATER_ROUTE124/TUNNEL_3" + ], + "warps": [] + }, + "REGION_ROUTE124/SOUTH_ENCLOSED_AREA_2": { + "parent_map": "MAP_ROUTE124", + "locations": [], + "events": [], + "exits": [ + "REGION_UNDERWATER_ROUTE124/TUNNEL_3" + ], + "warps": [] + }, + "REGION_ROUTE124/SOUTH_ENCLOSED_AREA_3": { + "parent_map": "MAP_ROUTE124", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE126/NEAR_ROUTE_124", + "REGION_UNDERWATER_ROUTE124/TUNNEL_4" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE124/BIG_AREA": { + "parent_map": "MAP_UNDERWATER_ROUTE124", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_124_GREEN_SHARD" + ], + "events": [], + "exits": [ + "REGION_ROUTE124/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE124/SMALL_AREA_1": { + "parent_map": "MAP_UNDERWATER_ROUTE124", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_124_PEARL" + ], + "events": [], + "exits": [ + "REGION_ROUTE124/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE124/SMALL_AREA_2": { + "parent_map": "MAP_UNDERWATER_ROUTE124", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_124_BIG_PEARL" + ], + "events": [], + "exits": [ + "REGION_ROUTE124/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE124/SMALL_AREA_3": { + "parent_map": "MAP_UNDERWATER_ROUTE124", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_1" + ], + "events": [], + "exits": [ + "REGION_ROUTE124/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE124/TUNNEL_1": { + "parent_map": "MAP_UNDERWATER_ROUTE124", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_124_CALCIUM", + "HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_2" + ], + "events": [], + "exits": [ + "REGION_ROUTE124/NORTH_ENCLOSED_AREA_1", + "REGION_ROUTE124/NORTH_ENCLOSED_AREA_2", + "REGION_ROUTE124/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE124/TUNNEL_2": { + "parent_map": "MAP_UNDERWATER_ROUTE124", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE124/NORTH_ENCLOSED_AREA_3", + "REGION_ROUTE124/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE124/TUNNEL_3": { + "parent_map": "MAP_UNDERWATER_ROUTE124", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_124_CARBOS" + ], + "events": [], + "exits": [ + "REGION_ROUTE124/SOUTH_ENCLOSED_AREA_1", + "REGION_ROUTE124/SOUTH_ENCLOSED_AREA_2", + "REGION_ROUTE124/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE124/TUNNEL_4": { + "parent_map": "MAP_UNDERWATER_ROUTE124", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE124/SOUTH_ENCLOSED_AREA_3", + "REGION_ROUTE124/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE/MAIN": { + "parent_map": "MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE:0,1/MAP_ROUTE124:0" + ] + }, + "REGION_ROUTE125/SEA": { + "parent_map": "MAP_ROUTE125", + "locations": [ + "ITEM_ROUTE_125_BIG_PEARL" + ], + "events": [], + "exits": [ + "REGION_ROUTE125/SHOAL_CAVE_ENTRANCE", + "REGION_MOSSDEEP_CITY/MAIN", + "REGION_UNDERWATER_ROUTE125/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE125/SHOAL_CAVE_ENTRANCE": { + "parent_map": "MAP_ROUTE125", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE125/SEA" + ], + "warps": [ + "MAP_ROUTE125:0/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:0" + ] + }, + "REGION_UNDERWATER_ROUTE125/MAIN": { + "parent_map": "MAP_UNDERWATER_ROUTE125", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE125/SEA" + ], + "warps": [] + }, + "REGION_ROUTE126/MAIN": { + "parent_map": "MAP_ROUTE126", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE127/MAIN", + "REGION_UNDERWATER_ROUTE126/MAIN", + "REGION_UNDERWATER_ROUTE126/SMALL_AREA_2" + ], + "warps": [] + }, + "REGION_ROUTE126/NEAR_ROUTE_124": { + "parent_map": "MAP_ROUTE126", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE124/SOUTH_ENCLOSED_AREA_3", + "REGION_UNDERWATER_ROUTE126/TUNNEL" + ], + "warps": [] + }, + "REGION_ROUTE126/NORTH_WEST_CORNER": { + "parent_map": "MAP_ROUTE126", + "locations": [ + "ITEM_ROUTE_126_GREEN_SHARD" + ], + "events": [], + "exits": [ + "REGION_UNDERWATER_ROUTE126/TUNNEL" + ], + "warps": [] + }, + "REGION_ROUTE126/WEST": { + "parent_map": "MAP_ROUTE126", + "locations": [], + "events": [], + "exits": [ + "REGION_UNDERWATER_ROUTE126/SMALL_AREA_1", + "REGION_UNDERWATER_ROUTE126/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE126/MAIN": { + "parent_map": "MAP_UNDERWATER_ROUTE126", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_126_HEART_SCALE", + "HIDDEN_ITEM_UNDERWATER_126_ULTRA_BALL", + "HIDDEN_ITEM_UNDERWATER_126_STARDUST", + "HIDDEN_ITEM_UNDERWATER_126_BIG_PEARL" + ], + "events": [], + "exits": [ + "REGION_ROUTE126/MAIN", + "REGION_ROUTE126/WEST" + ], + "warps": [ + "MAP_UNDERWATER_ROUTE126:0/MAP_UNDERWATER_SOOTOPOLIS_CITY:0" + ] + }, + "REGION_UNDERWATER_ROUTE126/TUNNEL": { + "parent_map": "MAP_UNDERWATER_ROUTE126", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE126/NORTH_WEST_CORNER", + "REGION_ROUTE126/NEAR_ROUTE_124" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE126/SMALL_AREA_1": { + "parent_map": "MAP_UNDERWATER_ROUTE126", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_126_PEARL", + "HIDDEN_ITEM_UNDERWATER_126_IRON", + "HIDDEN_ITEM_UNDERWATER_126_YELLOW_SHARD" + ], + "events": [], + "exits": [ + "REGION_ROUTE126/WEST" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE126/SMALL_AREA_2": { + "parent_map": "MAP_UNDERWATER_ROUTE126", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_126_BLUE_SHARD" + ], + "events": [], + "exits": [ + "REGION_ROUTE126/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE127/MAIN": { + "parent_map": "MAP_ROUTE127", + "locations": [ + "ITEM_ROUTE_127_ZINC", + "ITEM_ROUTE_127_RARE_CANDY" + ], + "events": [], + "exits": [ + "REGION_ROUTE126/MAIN", + "REGION_MOSSDEEP_CITY/MAIN", + "REGION_ROUTE128/MAIN", + "REGION_UNDERWATER_ROUTE127/MAIN", + "REGION_UNDERWATER_ROUTE127/TUNNEL", + "REGION_UNDERWATER_ROUTE127/AREA_1", + "REGION_UNDERWATER_ROUTE127/AREA_2", + "REGION_UNDERWATER_ROUTE127/AREA_3" + ], + "warps": [] + }, + "REGION_ROUTE127/ENCLOSED_AREA": { + "parent_map": "MAP_ROUTE127", + "locations": [ + "ITEM_ROUTE_127_CARBOS" + ], + "events": [], + "exits": [ + "REGION_UNDERWATER_ROUTE127/TUNNEL" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE127/MAIN": { + "parent_map": "MAP_UNDERWATER_ROUTE127", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_127_HEART_SCALE" + ], + "events": [], + "exits": [ + "REGION_ROUTE127/MAIN", + "REGION_UNDERWATER_ROUTE128/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE127/TUNNEL": { + "parent_map": "MAP_UNDERWATER_ROUTE127", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE127/MAIN", + "REGION_ROUTE127/ENCLOSED_AREA" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE127/AREA_1": { + "parent_map": "MAP_UNDERWATER_ROUTE127", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_127_STAR_PIECE" + ], + "events": [], + "exits": [ + "REGION_ROUTE127/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE127/AREA_2": { + "parent_map": "MAP_UNDERWATER_ROUTE127", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_127_HP_UP" + ], + "events": [], + "exits": [ + "REGION_ROUTE127/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE127/AREA_3": { + "parent_map": "MAP_UNDERWATER_ROUTE127", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_127_RED_SHARD" + ], + "events": [], + "exits": [ + "REGION_ROUTE127/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE128/MAIN": { + "parent_map": "MAP_ROUTE128", + "locations": [ + "HIDDEN_ITEM_ROUTE_128_HEART_SCALE_1", + "HIDDEN_ITEM_ROUTE_128_HEART_SCALE_2", + "HIDDEN_ITEM_ROUTE_128_HEART_SCALE_3" + ], + "events": [], + "exits": [ + "REGION_ROUTE127/MAIN", + "REGION_ROUTE129/MAIN", + "REGION_EVER_GRANDE_CITY/SEA", + "REGION_UNDERWATER_ROUTE128/MAIN", + "REGION_UNDERWATER_ROUTE128/AREA_1", + "REGION_UNDERWATER_ROUTE128/AREA_2" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE128/MAIN": { + "parent_map": "MAP_UNDERWATER_ROUTE128", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE128/MAIN", + "REGION_UNDERWATER_ROUTE127/MAIN" + ], + "warps": [ + "MAP_UNDERWATER_ROUTE128:0/MAP_UNDERWATER_SEAFLOOR_CAVERN:0" + ] + }, + "REGION_UNDERWATER_ROUTE128/AREA_1": { + "parent_map": "MAP_UNDERWATER_ROUTE128", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_128_PROTEIN" + ], + "events": [], + "exits": [ + "REGION_ROUTE128/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE128/AREA_2": { + "parent_map": "MAP_UNDERWATER_ROUTE128", + "locations": [ + "HIDDEN_ITEM_UNDERWATER_128_PEARL" + ], + "events": [], + "exits": [ + "REGION_ROUTE128/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE129/MAIN": { + "parent_map": "MAP_ROUTE129", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE130/MAIN", + "REGION_ROUTE128/MAIN", + "REGION_UNDERWATER_ROUTE129/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE129/MAIN": { + "parent_map": "MAP_UNDERWATER_ROUTE129", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE129/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE130/MAIN": { + "parent_map": "MAP_ROUTE130", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE129/MAIN", + "REGION_ROUTE131/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE131/MAIN": { + "parent_map": "MAP_ROUTE131", + "locations": [], + "events": [], + "exits": [ + "REGION_PACIFIDLOG_TOWN/MAIN", + "REGION_ROUTE130/MAIN" + ], + "warps": [ + "MAP_ROUTE131:0/MAP_SKY_PILLAR_ENTRANCE:0" + ] + }, + "REGION_ROUTE132/EAST": { + "parent_map": "MAP_ROUTE132", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE132/WEST", + "REGION_PACIFIDLOG_TOWN/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE132/WEST": { + "parent_map": "MAP_ROUTE132", + "locations": [ + "ITEM_ROUTE_132_RARE_CANDY", + "ITEM_ROUTE_132_PROTEIN" + ], + "events": [], + "exits": [ + "REGION_ROUTE133/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE133/MAIN": { + "parent_map": "MAP_ROUTE133", + "locations": [ + "ITEM_ROUTE_133_BIG_PEARL", + "ITEM_ROUTE_133_STAR_PIECE", + "ITEM_ROUTE_133_MAX_REVIVE" + ], + "events": [], + "exits": [ + "REGION_ROUTE134/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE134/MAIN": { + "parent_map": "MAP_ROUTE134", + "locations": [ + "ITEM_ROUTE_134_CARBOS", + "ITEM_ROUTE_134_STAR_PIECE" + ], + "events": [], + "exits": [ + "REGION_ROUTE134/WEST", + "REGION_UNDERWATER_ROUTE134/MAIN" + ], + "warps": [] + }, + "REGION_ROUTE134/WEST": { + "parent_map": "MAP_ROUTE134", + "locations": [], + "events": [], + "exits": [ + "REGION_SLATEPORT_CITY/MAIN" + ], + "warps": [] + }, + "REGION_UNDERWATER_ROUTE134/MAIN": { + "parent_map": "MAP_UNDERWATER_ROUTE134", + "locations": [], + "events": [], + "exits": [ + "REGION_ROUTE134/MAIN" + ], + "warps": [ + "MAP_UNDERWATER_ROUTE134:0/MAP_UNDERWATER_SEALED_CHAMBER:0" + ] + } +} \ No newline at end of file diff --git a/worlds/pokemon_emerald/data/regions/unused/battle_frontier.json b/worlds/pokemon_emerald/data/regions/unused/battle_frontier.json new file mode 100644 index 000000000000..3fdab431c22d --- /dev/null +++ b/worlds/pokemon_emerald/data/regions/unused/battle_frontier.json @@ -0,0 +1,396 @@ +{ + "REGION_BATTLE_FRONTIER_RECEPTION_GATE/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_RECEPTION_GATE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_RECEPTION_GATE:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:8", + "MAP_BATTLE_FRONTIER_RECEPTION_GATE:1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:9" + ] + }, + "REGION_BATTLE_FRONTIER_OUTSIDE_WEST/DOCK": { + "parent_map": "MAP_BATTLE_FRONTIER_OUTSIDE_WEST", + "locations": [], + "events": [], + "exits": [ + "REGION_SLATEPORT_CITY_HARBOR/MAIN", + "REGION_LILYCOVE_CITY_HARBOR/MAIN" + ], + "warps": [ + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:8/MAP_BATTLE_FRONTIER_RECEPTION_GATE:0" + ] + }, + "REGION_BATTLE_FRONTIER_OUTSIDE_WEST/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_OUTSIDE_WEST", + "locations": [], + "events": [], + "exits": [ + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/MAIN" + ], + "warps": [ + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:7/MAP_BATTLE_FRONTIER_LOUNGE7:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:2/MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1/MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:9/MAP_BATTLE_FRONTIER_RECEPTION_GATE:1", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:0/MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:5/MAP_BATTLE_FRONTIER_SCOTTS_HOUSE:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:3/MAP_BATTLE_FRONTIER_LOUNGE2:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:4/MAP_BATTLE_FRONTIER_MART:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:6/MAP_BATTLE_FRONTIER_LOUNGE4:0" + ] + }, + "REGION_BATTLE_FRONTIER_OUTSIDE_WEST/WATER": { + "parent_map": "MAP_BATTLE_FRONTIER_OUTSIDE_WEST", + "locations": [], + "events": [], + "exits": [ + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/WATER", + "REGION_BATTLE_FRONTIER_OUTSIDE_WEST/CAVE_ENTRANCE" + ], + "warps": [] + }, + "REGION_BATTLE_FRONTIER_OUTSIDE_WEST/CAVE_ENTRANCE": { + "parent_map": "MAP_BATTLE_FRONTIER_OUTSIDE_WEST", + "locations": [], + "events": [], + "exits": [ + "REGION_BATTLE_FRONTIER_OUTSIDE_WEST/WATER" + ], + "warps": [ + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:10/MAP_ARTISAN_CAVE_B1F:0" + ] + }, + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_OUTSIDE_EAST", + "locations": [], + "events": [], + "exits": [ + "REGION_BATTLE_FRONTIER_OUTSIDE_WEST/MAIN", + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/ABOVE_WATERFALL" + ], + "warps": [ + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:12/MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:5/MAP_BATTLE_FRONTIER_LOUNGE1:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:8/MAP_BATTLE_FRONTIER_LOUNGE6:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:6/MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:10/MAP_BATTLE_FRONTIER_LOUNGE8:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:0/MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:11/MAP_BATTLE_FRONTIER_LOUNGE9:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:7/MAP_BATTLE_FRONTIER_LOUNGE5:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:4/MAP_BATTLE_FRONTIER_RANKING_HALL:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:1/MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:3/MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:9/MAP_BATTLE_FRONTIER_LOUNGE3:0" + ] + }, + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/CAVE_ENTRANCE": { + "parent_map": "MAP_BATTLE_FRONTIER_OUTSIDE_EAST", + "locations": [], + "events": [], + "exits": [ + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/MAIN" + ], + "warps": [ + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:13/MAP_ARTISAN_CAVE_1F:0" + ] + }, + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/ABOVE_WATERFALL": { + "parent_map": "MAP_BATTLE_FRONTIER_OUTSIDE_EAST", + "locations": [], + "events": [], + "exits": [ + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/MAIN", + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/WATER" + ], + "warps": [] + }, + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/WATER": { + "parent_map": "MAP_BATTLE_FRONTIER_OUTSIDE_EAST", + "locations": [], + "events": [], + "exits": [ + "REGION_BATTLE_FRONTIER_OUTSIDE_EAST/ABOVE_WATERFALL", + "REGION_BATTLE_FRONTIER_OUTSIDE_WEST/WATER" + ], + "warps": [] + }, + "REGION_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:2" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY:0,1,2/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:0" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:1" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:3" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_DOME_LOBBY/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1!" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1!" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:0", + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:2" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0", + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:0,1/MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:2", + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:3/MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0!" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:2" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:2/MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM:0", + "MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:0" + ] + }, + "REGION_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:2" + ] + }, + "REGION_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER:0,1,2/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:6" + ] + }, + "REGION_BATTLE_FRONTIER_RANKING_HALL/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_RANKING_HALL", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_RANKING_HALL:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:4" + ] + }, + "REGION_BATTLE_FRONTIER_POKEMON_CENTER_1F/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:2/MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:0", + "MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:12" + ] + }, + "REGION_BATTLE_FRONTIER_POKEMON_CENTER_2F/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:0/MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:2" + ] + }, + "REGION_BATTLE_FRONTIER_MART/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_MART", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_MART:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:4" + ] + }, + "REGION_BATTLE_FRONTIER_SCOTTS_HOUSE/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_SCOTTS_HOUSE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_SCOTTS_HOUSE:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:5" + ] + }, + "REGION_BATTLE_FRONTIER_LOUNGE1/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_LOUNGE1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_LOUNGE1:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:5" + ] + }, + "REGION_BATTLE_FRONTIER_LOUNGE2/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_LOUNGE2", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_LOUNGE2:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:3" + ] + }, + "REGION_BATTLE_FRONTIER_LOUNGE3/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_LOUNGE3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_LOUNGE3:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:9" + ] + }, + "REGION_BATTLE_FRONTIER_LOUNGE4/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_LOUNGE4", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_LOUNGE4:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:6" + ] + }, + "REGION_BATTLE_FRONTIER_LOUNGE5/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_LOUNGE5", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_LOUNGE5:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:7" + ] + }, + "REGION_BATTLE_FRONTIER_LOUNGE6/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_LOUNGE6", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_LOUNGE6:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:8" + ] + }, + "REGION_BATTLE_FRONTIER_LOUNGE7/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_LOUNGE7", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_LOUNGE7:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:7" + ] + }, + "REGION_BATTLE_FRONTIER_LOUNGE8/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_LOUNGE8", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_LOUNGE8:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:10" + ] + }, + "REGION_BATTLE_FRONTIER_LOUNGE9/MAIN": { + "parent_map": "MAP_BATTLE_FRONTIER_LOUNGE9", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BATTLE_FRONTIER_LOUNGE9:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:11" + ] + }, + + "REGION_ARTISAN_CAVE_1F/MAIN": { + "parent_map": "MAP_ARTISAN_CAVE_1F", + "locations": [ + "ITEM_ARTISAN_CAVE_1F_CARBOS" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ARTISAN_CAVE_1F:1/MAP_ARTISAN_CAVE_B1F:1", + "MAP_ARTISAN_CAVE_1F:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:13" + ] + }, + "REGION_ARTISAN_CAVE_B1F/MAIN": { + "parent_map": "MAP_ARTISAN_CAVE_B1F", + "locations": [ + "ITEM_ARTISAN_CAVE_B1F_HP_UP", + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_ZINC", + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_CALCIUM", + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_PROTEIN", + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_IRON" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_ARTISAN_CAVE_B1F:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:10", + "MAP_ARTISAN_CAVE_B1F:1/MAP_ARTISAN_CAVE_1F:1" + ] + } +} diff --git a/worlds/pokemon_emerald/data/regions/unused/dungeons.json b/worlds/pokemon_emerald/data/regions/unused/dungeons.json new file mode 100644 index 000000000000..c176de1b33a9 --- /dev/null +++ b/worlds/pokemon_emerald/data/regions/unused/dungeons.json @@ -0,0 +1,52 @@ +{ + "REGION_TERRA_CAVE_ENTRANCE/MAIN": { + "parent_map": "MAP_TERRA_CAVE_ENTRANCE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!", + "MAP_TERRA_CAVE_ENTRANCE:1/MAP_TERRA_CAVE_END:0" + ] + }, + "REGION_TERRA_CAVE_END/MAIN": { + "parent_map": "MAP_TERRA_CAVE_END", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_TERRA_CAVE_END:0/MAP_TERRA_CAVE_ENTRANCE:1" + ] + }, + "REGION_UNDERWATER_MARINE_CAVE/MAIN": { + "parent_map": "MAP_UNDERWATER_MARINE_CAVE", + "locations": [], + "events": [], + "exits": [ + "REGION_MARINE_CAVE_ENTRANCE/MAIN" + ], + "warps": [ + "MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!" + ] + }, + "REGION_MARINE_CAVE_ENTRANCE/MAIN": { + "parent_map": "MAP_MARINE_CAVE_ENTRANCE", + "locations": [], + "events": [], + "exits": [ + "REGION_UNDERWATER_MARINE_CAVE/MAIN" + ], + "warps": [ + "MAP_MARINE_CAVE_ENTRANCE:0/MAP_MARINE_CAVE_END:0" + ] + }, + "REGION_MARINE_CAVE_END/MAIN": { + "parent_map": "MAP_MARINE_CAVE_END", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_MARINE_CAVE_END:0/MAP_MARINE_CAVE_ENTRANCE:0" + ] + } +} diff --git a/worlds/pokemon_emerald/data/regions/unused/islands.json b/worlds/pokemon_emerald/data/regions/unused/islands.json new file mode 100644 index 000000000000..f7d931d1681c --- /dev/null +++ b/worlds/pokemon_emerald/data/regions/unused/islands.json @@ -0,0 +1,276 @@ +{ + "REGION_SOUTHERN_ISLAND_EXTERIOR/MAIN": { + "parent_map": "MAP_SOUTHERN_ISLAND_EXTERIOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOUTHERN_ISLAND_EXTERIOR:0,1/MAP_SOUTHERN_ISLAND_INTERIOR:0,1" + ] + }, + "REGION_SOUTHERN_ISLAND_INTERIOR/MAIN": { + "parent_map": "MAP_SOUTHERN_ISLAND_INTERIOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_SOUTHERN_ISLAND_INTERIOR:0,1/MAP_SOUTHERN_ISLAND_EXTERIOR:0,1" + ] + }, + "REGION_FARAWAY_ISLAND_ENTRANCE/MAIN": { + "parent_map": "MAP_FARAWAY_ISLAND_ENTRANCE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FARAWAY_ISLAND_ENTRANCE:0,1/MAP_FARAWAY_ISLAND_INTERIOR:0,1" + ] + }, + "REGION_FARAWAY_ISLAND_INTERIOR/MAIN": { + "parent_map": "MAP_FARAWAY_ISLAND_INTERIOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_FARAWAY_ISLAND_INTERIOR:0,1/MAP_FARAWAY_ISLAND_ENTRANCE:0,1" + ] + }, + "REGION_BIRTH_ISLAND_HARBOR/MAIN": { + "parent_map": "MAP_BIRTH_ISLAND_HARBOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BIRTH_ISLAND_HARBOR:0/MAP_BIRTH_ISLAND_EXTERIOR:0" + ] + }, + "REGION_BIRTH_ISLAND_EXTERIOR/MAIN": { + "parent_map": "MAP_BIRTH_ISLAND_EXTERIOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_BIRTH_ISLAND_EXTERIOR:0/MAP_BIRTH_ISLAND_HARBOR:0" + ] + }, + "REGION_NAVEL_ROCK_HARBOR/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_HARBOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_HARBOR:0/MAP_NAVEL_ROCK_EXTERIOR:0" + ] + }, + "REGION_NAVEL_ROCK_EXTERIOR/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_EXTERIOR", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_EXTERIOR:0/MAP_NAVEL_ROCK_HARBOR:0", + "MAP_NAVEL_ROCK_EXTERIOR:1/MAP_NAVEL_ROCK_ENTRANCE:1" + ] + }, + "REGION_NAVEL_ROCK_ENTRANCE/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_ENTRANCE", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_ENTRANCE:0/MAP_NAVEL_ROCK_B1F:0", + "MAP_NAVEL_ROCK_ENTRANCE:1/MAP_NAVEL_ROCK_EXTERIOR:1" + ] + }, + "REGION_NAVEL_ROCK_B1F/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_B1F", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_B1F:0/MAP_NAVEL_ROCK_ENTRANCE:0", + "MAP_NAVEL_ROCK_B1F:1/MAP_NAVEL_ROCK_FORK:1" + ] + }, + "REGION_NAVEL_ROCK_FORK/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_FORK", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_FORK:0/MAP_NAVEL_ROCK_UP1:0", + "MAP_NAVEL_ROCK_FORK:1/MAP_NAVEL_ROCK_B1F:1", + "MAP_NAVEL_ROCK_FORK:2/MAP_NAVEL_ROCK_DOWN01:0" + ] + }, + "REGION_NAVEL_ROCK_DOWN01/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN01", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN01:0/MAP_NAVEL_ROCK_FORK:2", + "MAP_NAVEL_ROCK_DOWN01:1/MAP_NAVEL_ROCK_DOWN02:0" + ] + }, + "REGION_NAVEL_ROCK_DOWN02/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN02", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN02:1/MAP_NAVEL_ROCK_DOWN03:0", + "MAP_NAVEL_ROCK_DOWN02:0/MAP_NAVEL_ROCK_DOWN01:1" + ] + }, + "REGION_NAVEL_ROCK_DOWN03/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN03", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN03:0/MAP_NAVEL_ROCK_DOWN02:1", + "MAP_NAVEL_ROCK_DOWN03:1/MAP_NAVEL_ROCK_DOWN04:0" + ] + }, + "REGION_NAVEL_ROCK_DOWN04/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN04", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN04:1/MAP_NAVEL_ROCK_DOWN05:0", + "MAP_NAVEL_ROCK_DOWN04:0/MAP_NAVEL_ROCK_DOWN03:1" + ] + }, + "REGION_NAVEL_ROCK_DOWN05/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN05", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN05:0/MAP_NAVEL_ROCK_DOWN04:1", + "MAP_NAVEL_ROCK_DOWN05:1/MAP_NAVEL_ROCK_DOWN06:0" + ] + }, + "REGION_NAVEL_ROCK_DOWN06/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN06", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN06:1/MAP_NAVEL_ROCK_DOWN07:0", + "MAP_NAVEL_ROCK_DOWN06:0/MAP_NAVEL_ROCK_DOWN05:1" + ] + }, + "REGION_NAVEL_ROCK_DOWN07/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN07", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN07:0/MAP_NAVEL_ROCK_DOWN06:1", + "MAP_NAVEL_ROCK_DOWN07:1/MAP_NAVEL_ROCK_DOWN08:0" + ] + }, + "REGION_NAVEL_ROCK_DOWN08/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN08", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN08:1/MAP_NAVEL_ROCK_DOWN09:0", + "MAP_NAVEL_ROCK_DOWN08:0/MAP_NAVEL_ROCK_DOWN07:1" + ] + }, + "REGION_NAVEL_ROCK_DOWN09/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN09", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN09:0/MAP_NAVEL_ROCK_DOWN08:1", + "MAP_NAVEL_ROCK_DOWN09:1/MAP_NAVEL_ROCK_DOWN10:0" + ] + }, + "REGION_NAVEL_ROCK_DOWN10/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN10", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN10:1/MAP_NAVEL_ROCK_DOWN11:1", + "MAP_NAVEL_ROCK_DOWN10:0/MAP_NAVEL_ROCK_DOWN09:1" + ] + }, + "REGION_NAVEL_ROCK_DOWN11/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_DOWN11", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_DOWN11:1/MAP_NAVEL_ROCK_DOWN10:1", + "MAP_NAVEL_ROCK_DOWN11:0/MAP_NAVEL_ROCK_BOTTOM:0" + ] + }, + "REGION_NAVEL_ROCK_BOTTOM/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_BOTTOM", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_BOTTOM:0/MAP_NAVEL_ROCK_DOWN11:0" + ] + }, + "REGION_NAVEL_ROCK_UP1/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_UP1", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_UP1:1/MAP_NAVEL_ROCK_UP2:0", + "MAP_NAVEL_ROCK_UP1:0/MAP_NAVEL_ROCK_FORK:0" + ] + }, + "REGION_NAVEL_ROCK_UP2/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_UP2", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_UP2:0/MAP_NAVEL_ROCK_UP1:1", + "MAP_NAVEL_ROCK_UP2:1/MAP_NAVEL_ROCK_UP3:0" + ] + }, + "REGION_NAVEL_ROCK_UP3/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_UP3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_UP3:1/MAP_NAVEL_ROCK_UP4:0", + "MAP_NAVEL_ROCK_UP3:0/MAP_NAVEL_ROCK_UP2:1" + ] + }, + "REGION_NAVEL_ROCK_UP4/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_UP4", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_UP4:0/MAP_NAVEL_ROCK_UP3:1", + "MAP_NAVEL_ROCK_UP4:1/MAP_NAVEL_ROCK_TOP:0" + ] + }, + "REGION_NAVEL_ROCK_TOP/MAIN": { + "parent_map": "MAP_NAVEL_ROCK_TOP", + "locations": [ + "HIDDEN_ITEM_NAVEL_ROCK_TOP_SACRED_ASH" + ], + "events": [], + "exits": [], + "warps": [ + "MAP_NAVEL_ROCK_TOP:0/MAP_NAVEL_ROCK_UP4:1" + ] + } +} diff --git a/worlds/pokemon_emerald/data/regions/unused/routes.json b/worlds/pokemon_emerald/data/regions/unused/routes.json new file mode 100644 index 000000000000..47cfc4541572 --- /dev/null +++ b/worlds/pokemon_emerald/data/regions/unused/routes.json @@ -0,0 +1,82 @@ +{ + "REGION_ROUTE110_TRICK_HOUSE_PUZZLE2/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE2", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE2:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE2:2/MAP_ROUTE110_TRICK_HOUSE_END:0!" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_PUZZLE3/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE3", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE3:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE3:2/MAP_ROUTE110_TRICK_HOUSE_END:0!" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_PUZZLE4/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE4", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE4:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE4:2/MAP_ROUTE110_TRICK_HOUSE_END:0!" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_PUZZLE5/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE5", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE5:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE5:2/MAP_ROUTE110_TRICK_HOUSE_END:0!" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_PUZZLE6/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE6", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE6:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE6:2/MAP_ROUTE110_TRICK_HOUSE_END:0!" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_PUZZLE7/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:8/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:7", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:7/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:8", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:11/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:12", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:9/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:10", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:6/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:5", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:10/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:9", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:4/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:3", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:12/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:11", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:2/MAP_ROUTE110_TRICK_HOUSE_END:0!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:3/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:4", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:5/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:6" + ] + }, + "REGION_ROUTE110_TRICK_HOUSE_PUZZLE8/MAIN": { + "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE8", + "locations": [], + "events": [], + "exits": [], + "warps": [ + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE8:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE8:2/MAP_ROUTE110_TRICK_HOUSE_END:0!" + ] + } +} diff --git a/worlds/pokemon_emerald/docs/en_Pokemon Emerald.md b/worlds/pokemon_emerald/docs/en_Pokemon Emerald.md new file mode 100644 index 000000000000..5d50c37ea95c --- /dev/null +++ b/worlds/pokemon_emerald/docs/en_Pokemon Emerald.md @@ -0,0 +1,78 @@ +# Pokémon Emerald + +## Where is the settings page? + +You can read through all the settings and generate a YAML [here](../player-settings). + +## What does randomization do to this game? + +This randomizer handles both item randomization and pokémon randomization. Badges, HMs, gifts from NPCs, and items on +the ground can all be randomized. There are also many options for randomizing wild pokémon, starters, opponent pokémon, +abilities, types, etc… You can even change a percentage of single battles into double battles. Check the +[settings page](../player-settings) for a more comprehensive list of what can be changed. + +## What items and locations get randomized? + +The most interesting items that can be added to the item pool are badges and HMs, which most affect what locations you +can access. Key items like the Devon Scope or Mach Bike can also be randomized, as well as the many Potions, Revives, +TMs, and other items that you can find on the ground or receive as gifts. + +## What other changes are made to the game? + +There are many quality of life improvements meant to speed up the game a little and improve the experience of playing a +randomizer. Here are some of the more important ones: + +- Shoal Cave switches between high tide and low tide every time you re-enter +- Bag space is greatly expanded (you're all but guaranteed to never need to store items in the PC) +- Trade evolutions have been changed to level or item evolutions +- You can have both bikes simultaneously +- You can run or bike (almost) anywhere +- The Wally catching tutorial is skipped +- All text is instant, and with a setting it can be automatically progressed by holding A +- When a Repel runs out, you will be prompted to use another +- Many more minor improvements… + +## Where is my starting inventory? + +Except for badges, your starting inventory will be in the PC. + +## What does another world's item look like in Pokémon Emerald? + +When you find an item that is not your own, you will instead receive an "ARCHIPELAGO ITEM" which will *not* be added to +your inventory. + +## When the player receives an item, what happens? + +You will only receive items while in the overworld and not during battles. Depending on your `Receive Item Messages` +setting, the received item will either be silently added to your bag or you will be shown a text box with the item's +name and the item will be added to your bag while a fanfare plays. + +## Can I play offline? + +Yes, the client and connector are only necessary for sending and receiving items. If you're playing a solo game, you +don't need to play online unless you want the rest of Archipelago's functionality (like hints and auto-tracking). If +you're playing a multiworld game, the client will sync your game with the server the next time you connect. + +## Will battle mechanics be updated? + +This is something we'd love to see, but it's unlikely. We don't want to force new mechanics on players who would prefer +to play with the classic mechanics, but trying to switch between old and new mechanics based on an option would be a +monumental task, and is probably best solved some other way. + +## Is this randomizer compatible with other mods? + +No, other mods cannot be applied. It would be impossible to generalize this implementation's changes in a way that is +compatible with any other mod or romhack. Romhacks could be added as their own games, but they would have to be +implemented separately. Check out [Archipelago's Discord server](https://discord.gg/8Z65BR2) if you want to make a +suggestion or contribute. + +## Can I use tools like the Universal Pokémon Randomizer? + +No, those tools expect data to be in certain locations and in a certain format, but this randomizer has to shift it +around. Using tools to try to modify the game would only corrupt the ROM. + +We realize this means breaking from established habits when it comes to randomizing Pokémon games, but this randomizer +would be many times more complex to develop if it were constrained by something like UPR. + +The one exception might be PKHeX. You may be able to extract pokémon from your save using PKHeX, but this isn't a +guarantee, and we make no effort to keep our saves compatible with PKHeX. diff --git a/worlds/pokemon_emerald/docs/setup_en.md b/worlds/pokemon_emerald/docs/setup_en.md new file mode 100644 index 000000000000..6a1df8e5c32c --- /dev/null +++ b/worlds/pokemon_emerald/docs/setup_en.md @@ -0,0 +1,72 @@ +# Pokémon Emerald Setup Guide + +## Required Software + +- [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases) +- An English Pokémon Emerald ROM. The Archipelago community cannot provide this. +- [BizHawk](https://tasvideos.org/BizHawk/ReleaseHistory) 2.7 or later + +### Configuring BizHawk + +Once you have installed BizHawk, open `EmuHawk.exe` and change the following settings: + +- If you're using BizHawk 2.7 or 2.8, go to `Config > Customize`. On the Advanced tab, switch the Lua Core from +`NLua+KopiLua` to `Lua+LuaInterface`, then restart EmuHawk. (If you're using BizHawk 2.9, you can skip this step.) +- Under `Config > Customize`, check the "Run in background" option to prevent disconnecting from the client while you're +tabbed out of EmuHawk. +- Open a `.gba` file in EmuHawk and go to `Config > Controllers…` to configure your inputs. If you can't click +`Controllers…`, load any `.gba` ROM first. +- Consider clearing keybinds in `Config > Hotkeys…` if you don't intend to use them. Select the keybind and press Esc to +clear it. + +## Optional Software + +- [Pokémon Emerald AP Tracker](https://github.com/AliceMousie/emerald-ap-tracker/releases/latest), for use with +[PopTracker](https://github.com/black-sliver/PopTracker/releases) + +## Generating and Patching a Game + +1. Create your settings file (YAML). You can make one on the +[Pokémon Emerald settings page](../../../games/Pokemon%20Emerald/player-settings). +2. Follow the general Archipelago instructions for [generating a game](../../Archipelago/setup/en#generating-a-game). +This will generate an output file for you. Your patch file will have the `.apemerald` file extension. +3. Open `ArchipelagoLauncher.exe` +4. Select "Open Patch" on the left side and select your patch file. +5. If this is your first time patching, you will be prompted to locate your vanilla ROM. +6. A patched `.gba` file will be created in the same place as the patch file. +7. On your first time opening a patch with BizHawk Client, you will also be asked to locate `EmuHawk.exe` in your +BizHawk install. + +If you're playing a single-player seed and you don't care about autotracking or hints, you can stop here, close the +client, and load the patched ROM in any emulator. However, for multiworlds and other Archipelago features, continue +below using BizHawk as your emulator. + +## Connecting to a Server + +By default, opening a patch file will do steps 1-5 below for you automatically. Even so, keep them in your memory just +in case you have to close and reopen a window mid-game for some reason. + +1. Pokemon Emerald uses Archipelago's BizHawk Client. If the client isn't still open from when you patched your game, +you can re-open it from the launcher. +2. Ensure EmuHawk is running the patched ROM. +3. In EmuHawk, go to `Tools > Lua Console`. This window must stay open while playing. +4. In the Lua Console window, go to `Script > Open Script…`. +5. Navigate to your Archipelago install folder and open `data/lua/connector_bizhawk_generic.lua`. +6. The emulator may freeze every few seconds until it manages to connect to the client. This is expected. The BizHawk +Client window should indicate that it connected and recognized Pokemon Emerald. +7. To connect the client to the server, enter your room's address and port (e.g. `archipelago.gg:38281`) into the +top text field of the client and click Connect. + +You should now be able to receive and send items. You'll need to do these steps every time you want to reconnect. It is +perfectly safe to make progress offline; everything will re-sync when you reconnect. + +## Auto-Tracking + +Pokémon Emerald has a fully functional map tracker that supports auto-tracking. + +1. Download [Pokémon Emerald AP Tracker](https://github.com/AliceMousie/emerald-ap-tracker/releases/latest) and +[PopTracker](https://github.com/black-sliver/PopTracker/releases). +2. Put the tracker pack into packs/ in your PopTracker install. +3. Open PopTracker, and load the Pokémon Emerald pack. +4. For autotracking, click on the "AP" symbol at the top. +5. Enter the Archipelago server address (the one you connected your client to), slot name, and password. diff --git a/worlds/pokemon_emerald/items.py b/worlds/pokemon_emerald/items.py new file mode 100644 index 000000000000..7963f92384ac --- /dev/null +++ b/worlds/pokemon_emerald/items.py @@ -0,0 +1,77 @@ +""" +Classes and functions related to AP items for Pokemon Emerald +""" +from typing import Dict, FrozenSet, Optional + +from BaseClasses import Item, ItemClassification + +from .data import BASE_OFFSET, data + + +class PokemonEmeraldItem(Item): + game: str = "Pokemon Emerald" + tags: FrozenSet[str] + + def __init__(self, name: str, classification: ItemClassification, code: Optional[int], player: int) -> None: + super().__init__(name, classification, code, player) + + if code is None: + self.tags = frozenset(["Event"]) + else: + self.tags = data.items[reverse_offset_item_value(code)].tags + + +def offset_item_value(item_value: int) -> int: + """ + Returns the AP item id (code) for a given item value + """ + return item_value + BASE_OFFSET + + +def reverse_offset_item_value(item_id: int) -> int: + """ + Returns the item value for a given AP item id (code) + """ + return item_id - BASE_OFFSET + + +def create_item_label_to_code_map() -> Dict[str, int]: + """ + Creates a map from item labels to their AP item id (code) + """ + label_to_code_map: Dict[str, int] = {} + for item_value, attributes in data.items.items(): + label_to_code_map[attributes.label] = offset_item_value(item_value) + + return label_to_code_map + + +ITEM_GROUPS = { + "Badges": { + "Stone Badge", "Knuckle Badge", + "Dynamo Badge", "Heat Badge", + "Balance Badge", "Feather Badge", + "Mind Badge", "Rain Badge" + }, + "HMs": { + "HM01 Cut", "HM02 Fly", + "HM03 Surf", "HM04 Strength", + "HM05 Flash", "HM06 Rock Smash", + "HM07 Waterfall", "HM08 Dive" + }, + "HM01": {"HM01 Cut"}, + "HM02": {"HM02 Fly"}, + "HM03": {"HM03 Surf"}, + "HM04": {"HM04 Strength"}, + "HM05": {"HM05 Flash"}, + "HM06": {"HM06 Rock Smash"}, + "HM07": {"HM07 Waterfall"}, + "HM08": {"HM08 Dive"} +} + + +def get_item_classification(item_code: int) -> ItemClassification: + """ + Returns the item classification for a given AP item id (code) + """ + return data.items[reverse_offset_item_value(item_code)].classification diff --git a/worlds/pokemon_emerald/locations.py b/worlds/pokemon_emerald/locations.py new file mode 100644 index 000000000000..bfe5be754585 --- /dev/null +++ b/worlds/pokemon_emerald/locations.py @@ -0,0 +1,122 @@ +""" +Classes and functions related to AP locations for Pokemon Emerald +""" +from typing import TYPE_CHECKING, Dict, List, Optional, FrozenSet, Iterable + +from BaseClasses import Location, Region + +from .data import BASE_OFFSET, data +from .items import offset_item_value + +if TYPE_CHECKING: + from . import PokemonEmeraldWorld + + +class PokemonEmeraldLocation(Location): + game: str = "Pokemon Emerald" + rom_address: Optional[int] + default_item_code: Optional[int] + tags: FrozenSet[str] + + def __init__( + self, + player: int, + name: str, + flag: Optional[int], + parent: Optional[Region] = None, + rom_address: Optional[int] = None, + default_item_value: Optional[int] = None, + tags: FrozenSet[str] = frozenset()) -> None: + super().__init__(player, name, None if flag is None else offset_flag(flag), parent) + self.default_item_code = None if default_item_value is None else offset_item_value(default_item_value) + self.rom_address = rom_address + self.tags = tags + + +def offset_flag(flag: int) -> int: + """ + Returns the AP location id (address) for a given flag + """ + if flag is None: + return None + return flag + BASE_OFFSET + + +def reverse_offset_flag(location_id: int) -> int: + """ + Returns the flag id for a given AP location id (address) + """ + if location_id is None: + return None + return location_id - BASE_OFFSET + + +def create_locations_with_tags(world: "PokemonEmeraldWorld", regions: Dict[str, Region], tags: Iterable[str]) -> None: + """ + Iterates through region data and adds locations to the multiworld if + those locations include any of the provided tags. + """ + tags = set(tags) + + for region_name, region_data in data.regions.items(): + region = regions[region_name] + filtered_locations = [loc for loc in region_data.locations if len(tags & data.locations[loc].tags) > 0] + + for location_name in filtered_locations: + location_data = data.locations[location_name] + location = PokemonEmeraldLocation( + world.player, + location_data.label, + location_data.flag, + region, + location_data.rom_address, + location_data.default_item, + location_data.tags + ) + region.locations.append(location) + + +def create_location_label_to_id_map() -> Dict[str, int]: + """ + Creates a map from location labels to their AP location id (address) + """ + label_to_id_map: Dict[str, int] = {} + for region_data in data.regions.values(): + for location_name in region_data.locations: + location_data = data.locations[location_name] + label_to_id_map[location_data.label] = offset_flag(location_data.flag) + + return label_to_id_map + + +LOCATION_GROUPS = { + "Badges": { + "Rustboro Gym - Stone Badge", + "Dewford Gym - Knuckle Badge", + "Mauville Gym - Dynamo Badge", + "Lavaridge Gym - Heat Badge", + "Petalburg Gym - Balance Badge", + "Fortree Gym - Feather Badge", + "Mossdeep Gym - Mind Badge", + "Sootopolis Gym - Rain Badge", + }, + "Gym TMs": { + "Rustboro Gym - TM39 from Roxanne", + "Dewford Gym - TM08 from Brawly", + "Mauville Gym - TM34 from Wattson", + "Lavaridge Gym - TM50 from Flannery", + "Petalburg Gym - TM42 from Norman", + "Fortree Gym - TM40 from Winona", + "Mossdeep Gym - TM04 from Tate and Liza", + "Sootopolis Gym - TM03 from Juan", + }, + "Postgame Locations": { + "Littleroot Town - S.S. Ticket from Norman", + "SS Tidal - Hidden Item in Lower Deck Trash Can", + "SS Tidal - TM49 from Thief", + "Safari Zone NE - Hidden Item North", + "Safari Zone NE - Hidden Item East", + "Safari Zone SE - Hidden Item in South Grass 1", + "Safari Zone SE - Hidden Item in South Grass 2", + } +} diff --git a/worlds/pokemon_emerald/options.py b/worlds/pokemon_emerald/options.py new file mode 100644 index 000000000000..655966a2a7b7 --- /dev/null +++ b/worlds/pokemon_emerald/options.py @@ -0,0 +1,606 @@ +""" +Option definitions for Pokemon Emerald +""" +from dataclasses import dataclass +from typing import Dict, Type + +from Options import Choice, DefaultOnToggle, Option, OptionSet, Range, Toggle, FreeText, PerGameCommonOptions + +from .data import data + + +class Goal(Choice): + """ + Determines what your goal is to consider the game beaten + + Champion: Become the champion and enter the hall of fame + Steven: Defeat Steven in Meteor Falls + Norman: Defeat Norman in Petalburg Gym + """ + display_name = "Goal" + default = 0 + option_champion = 0 + option_steven = 1 + option_norman = 2 + + +class RandomizeBadges(Choice): + """ + Adds Badges to the pool + + Vanilla: Gym leaders give their own badge + Shuffle: Gym leaders give a random badge + Completely Random: Badges can be found anywhere + """ + display_name = "Randomize Badges" + default = 2 + option_vanilla = 0 + option_shuffle = 1 + option_completely_random = 2 + + +class RandomizeHms(Choice): + """ + Adds HMs to the pool + + Vanilla: HMs are at their vanilla locations + Shuffle: HMs are shuffled among vanilla HM locations + Completely Random: HMs can be found anywhere + """ + display_name = "Randomize HMs" + default = 2 + option_vanilla = 0 + option_shuffle = 1 + option_completely_random = 2 + + +class RandomizeKeyItems(DefaultOnToggle): + """ + Adds most key items to the pool. These are usually required to unlock + a location or region (e.g. Devon Scope, Letter, Basement Key) + """ + display_name = "Randomize Key Items" + + +class RandomizeBikes(Toggle): + """ + Adds the mach bike and acro bike to the pool + """ + display_name = "Randomize Bikes" + + +class RandomizeRods(Toggle): + """ + Adds fishing rods to the pool + """ + display_name = "Randomize Fishing Rods" + + +class RandomizeOverworldItems(DefaultOnToggle): + """ + Adds items on the ground with a Pokeball sprite to the pool + """ + display_name = "Randomize Overworld Items" + + +class RandomizeHiddenItems(Toggle): + """ + Adds hidden items to the pool + """ + display_name = "Randomize Hidden Items" + + +class RandomizeNpcGifts(Toggle): + """ + Adds most gifts received from NPCs to the pool (not including key items or HMs) + """ + display_name = "Randomize NPC Gifts" + + +class ItemPoolType(Choice): + """ + Determines which non-progression items get put into the item pool + + Shuffled: Item pool consists of shuffled vanilla items + Diverse Balanced: Item pool consists of random items approximately proportioned + according to what they're replacing (i.e. more pokeballs, fewer X items, etc...) + Diverse: Item pool consists of uniformly random (non-unique) items + """ + display_name = "Item Pool Type" + default = 0 + option_shuffled = 0 + option_diverse_balanced = 1 + option_diverse = 2 + + +class HiddenItemsRequireItemfinder(DefaultOnToggle): + """ + The Itemfinder is logically required to pick up hidden items + """ + display_name = "Require Itemfinder" + + +class DarkCavesRequireFlash(DefaultOnToggle): + """ + The lower floors of Granite Cave and Victory Road logically require use of HM05 Flash + """ + display_name = "Require Flash" + + +class EnableFerry(Toggle): + """ + The ferry between Slateport, Lilycove, and the Battle Frontier can be used if you have the S.S. Ticket + """ + display_name = "Enable Ferry" + + +class EliteFourRequirement(Choice): + """ + Sets the requirements to challenge the elite four + + Badges: Obtain some number of badges + Gyms: Defeat some number of gyms + """ + display_name = "Elite Four Requirement" + default = 0 + option_badges = 0 + option_gyms = 1 + + +class EliteFourCount(Range): + """ + Sets the number of badges/gyms required to challenge the elite four + """ + display_name = "Elite Four Count" + range_start = 0 + range_end = 8 + default = 8 + + +class NormanRequirement(Choice): + """ + Sets the requirements to challenge the Petalburg Gym + + Badges: Obtain some number of badges + Gyms: Defeat some number of gyms + """ + display_name = "Norman Requirement" + default = 0 + option_badges = 0 + option_gyms = 1 + + +class NormanCount(Range): + """ + Sets the number of badges/gyms required to challenge the Petalburg Gym + """ + display_name = "Norman Count" + range_start = 0 + range_end = 7 + default = 4 + + +class RandomizeWildPokemon(Choice): + """ + Randomizes wild pokemon encounters (grass, caves, water, fishing) + + Vanilla: Wild encounters are unchanged + Match Base Stats: Wild pokemon are replaced with species with approximately the same bst + Match Type: Wild pokemon are replaced with species that share a type with the original + Match Base Stats and Type: Apply both Match Base Stats and Match Type + Completely Random: There are no restrictions + """ + display_name = "Randomize Wild Pokemon" + default = 0 + option_vanilla = 0 + option_match_base_stats = 1 + option_match_type = 2 + option_match_base_stats_and_type = 3 + option_completely_random = 4 + + +class AllowWildLegendaries(DefaultOnToggle): + """ + Wild encounters can be replaced by legendaries. Only applied if Randomize Wild Pokemon is not Vanilla. + """ + display_name = "Allow Wild Legendaries" + + +class RandomizeStarters(Choice): + """ + Randomizes the starter pokemon in Professor Birch's bag + + Vanilla: Starters are unchanged + Match Base Stats: Starters are replaced with species with approximately the same bst + Match Type: Starters are replaced with species that share a type with the original + Match Base Stats and Type: Apply both Match Base Stats and Match Type + Completely Random: There are no restrictions + """ + display_name = "Randomize Starters" + default = 0 + option_vanilla = 0 + option_match_base_stats = 1 + option_match_type = 2 + option_match_base_stats_and_type = 3 + option_completely_random = 4 + + +class AllowStarterLegendaries(DefaultOnToggle): + """ + Starters can be replaced by legendaries. Only applied if Randomize Starters is not Vanilla. + """ + display_name = "Allow Starter Legendaries" + + +class RandomizeTrainerParties(Choice): + """ + Randomizes the parties of all trainers. + + Vanilla: Parties are unchanged + Match Base Stats: Trainer pokemon are replaced with species with approximately the same bst + Match Type: Trainer pokemon are replaced with species that share a type with the original + Match Base Stats and Type: Apply both Match Base Stats and Match Type + Completely Random: There are no restrictions + """ + display_name = "Randomize Trainer Parties" + default = 0 + option_vanilla = 0 + option_match_base_stats = 1 + option_match_type = 2 + option_match_base_stats_and_type = 3 + option_completely_random = 4 + + +class AllowTrainerLegendaries(DefaultOnToggle): + """ + Enemy trainer pokemon can be replaced by legendaries. Only applied if Randomize Trainer Parties is not Vanilla. + """ + display_name = "Allow Trainer Legendaries" + + +class RandomizeStaticEncounters(Choice): + """ + Randomizes static encounters (Rayquaza, hidden Kekleons, fake Voltorb pokeballs, etc...) + + Vanilla: Static encounters are unchanged + Shuffle: Static encounters are shuffled between each other + Match Base Stats: Static encounters are replaced with species with approximately the same bst + Match Type: Static encounters are replaced with species that share a type with the original + Match Base Stats and Type: Apply both Match Base Stats and Match Type + Completely Random: There are no restrictions + """ + display_name = "Randomize Static Encounters" + default = 0 + option_vanilla = 0 + option_shuffle = 1 + option_match_base_stats = 2 + option_match_type = 3 + option_match_base_stats_and_type = 4 + option_completely_random = 5 + + +class RandomizeTypes(Choice): + """ + Randomizes the type(s) of every pokemon. Each species will have the same number of types. + + Vanilla: Types are unchanged + Shuffle: Types are shuffled globally for all species (e.g. every Water-type pokemon becomes Fire-type) + Completely Random: Each species has its type(s) randomized + Follow Evolutions: Types are randomized per evolution line instead of per species + """ + display_name = "Randomize Types" + default = 0 + option_vanilla = 0 + option_shuffle = 1 + option_completely_random = 2 + option_follow_evolutions = 3 + + +class RandomizeAbilities(Choice): + """ + Randomizes abilities of every species. Each species will have the same number of abilities. + + Vanilla: Abilities are unchanged + Completely Random: Each species has its abilities randomized + Follow Evolutions: Abilities are randomized, but if a pokemon would normally retain its ability + when evolving, the random ability will also be retained + """ + display_name = "Randomize Abilities" + default = 0 + option_vanilla = 0 + option_completely_random = 1 + option_follow_evolutions = 2 + + +class AbilityBlacklist(OptionSet): + """ + A list of abilities which no pokemon should have if abilities are randomized. + For example, you could exclude Wonder Guard and Arena Trap like this: + ["Wonder Guard", "Arena Trap"] + """ + display_name = "Ability Blacklist" + valid_keys = frozenset([ability.label for ability in data.abilities]) + + +class LevelUpMoves(Choice): + """ + Randomizes the moves a pokemon learns when they reach a level where they would learn a move. + Your starter is guaranteed to have a usable damaging move. + + Vanilla: Learnset is unchanged + Randomized: Moves are randomized + Start with Four Moves: Moves are randomized and all Pokemon know 4 moves at level 1 + """ + display_name = "Level Up Moves" + default = 0 + option_vanilla = 0 + option_randomized = 1 + option_start_with_four_moves = 2 + + +class MoveMatchTypeBias(Range): + """ + Sets the probability that a learned move will be forced match one of the types of a pokemon. + + If a move is not forced to match type, it will roll for Normal type bias. + """ + display_name = "Move Match Type Bias" + range_start = 0 + range_end = 100 + default = 0 + + +class MoveNormalTypeBias(Range): + """ + After it has been decided that a move will not be forced to match types, sets the probability that a learned move + will be forced to be the Normal type. + + If a move is not forced to be Normal, it will be completely random. + """ + display_name = "Move Normal Type Bias" + range_start = 0 + range_end = 100 + default = 0 + + +class HmCompatibility(Choice): + """ + Modifies the compatibility of HMs + + Vanilla: Compatibility is unchanged + Fully Compatible: Every species can learn any HM + Completely Random: Compatibility is 50/50 for every HM (does not remain consistent across evolution) + """ + display_name = "HM Compatibility" + default = 1 + option_vanilla = 0 + option_fully_compatible = 1 + option_completely_random = 2 + + +class TmCompatibility(Choice): + """ + Modifies the compatibility of TMs + + Vanilla: Compatibility is unchanged + Fully Compatible: Every species can learn any TM + Completely Random: Compatibility is 50/50 for every TM (does not remain consistent across evolution) + """ + display_name = "TM Compatibility" + default = 0 + option_vanilla = 0 + option_fully_compatible = 1 + option_completely_random = 2 + + +class TmMoves(Toggle): + """ + Randomizes the moves taught by TMs + """ + display_name = "TM Moves" + + +class ReusableTms(Toggle): + """ + Sets TMs to not break after use (they remain sellable) + """ + display_name = "Reusable TMs" + + +class MinCatchRate(Range): + """ + Sets the minimum catch rate a pokemon can have. Any pokemon with a catch rate below this floor will have it raised to this value. + + Legendaries are often in the single digits + Fully evolved pokemon are often double digits + Pidgey is 255 + """ + display_name = "Minimum Catch Rate" + range_start = 3 + range_end = 255 + default = 3 + + +class GuaranteedCatch(Toggle): + """ + Every throw is guaranteed to catch a wild pokemon + """ + display_name = "Guaranteed Catch" + + +class ExpModifier(Range): + """ + Multiplies gained experience by a percentage + + 100 is default + 50 is half + 200 is double + etc... + """ + display_name = "Exp Modifier" + range_start = 0 + range_end = 1000 + default = 100 + + +class BlindTrainers(Toggle): + """ + Causes trainers to not start a battle with you unless you talk to them + """ + display_name = "Blind Trainers" + + +class DoubleBattleChance(Range): + """ + The percent chance that a trainer with more than 1 pokemon will be converted into a double battle. + If these trainers would normally approach you, they will only do so if you have 2 unfainted pokemon. + They can be battled by talking to them no matter what. + """ + display_name = "Double Battle Chance" + range_start = 0 + range_end = 100 + default = 0 + + +class BetterShops(Toggle): + """ + Pokemarts sell every item that can be obtained in a pokemart (except mail, which is still unique to the relevant city) + """ + display_name = "Better Shops" + + +class RemoveRoadblocks(OptionSet): + """ + Removes specific NPCs that normally stand in your way until certain events are completed. + + This can open up the world a bit and make your playthrough less linear, but careful how many you remove; it may make too much of your world accessible upon receiving Surf. + + Possible values are: + "Route 110 Aqua Grunts" + "Route 112 Magma Grunts" + "Route 119 Aqua Grunts" + "Safari Zone Construction Workers" + "Lilycove City Wailmer" + "Aqua Hideout Grunts" + "Seafloor Cavern Aqua Grunt" + """ + display_name = "Remove Roadblocks" + valid_keys = frozenset([ + "Route 110 Aqua Grunts", + "Route 112 Magma Grunts", + "Route 119 Aqua Grunts", + "Safari Zone Construction Workers", + "Lilycove City Wailmer", + "Aqua Hideout Grunts", + "Seafloor Cavern Aqua Grunt" + ]) + + +class ExtraBoulders(Toggle): + """ + Places strength boulders on Route 115 which block access to Meteor Falls from the beach. + This aims to take some power away from Surf as a tool for access. + """ + display_name = "Extra Boulders" + + +class FreeFlyLocation(Toggle): + """ + Enables flying to one random location when Mom gives you the running shoes (excluding cities reachable with no items) + """ + display_name = "Free Fly Location" + + +class FlyWithoutBadge(DefaultOnToggle): + """ + Fly does not require the Feather Badge to use in the field + """ + display_name = "Fly Without Badge" + + +class TurboA(Toggle): + """ + Holding A will advance most text automatically + """ + display_name = "Turbo A" + + +class ReceiveItemMessages(Choice): + """ + Determines whether you receive an in-game notification when receiving an item. Items can still only be received in the overworld. + + All: Every item shows a message + Progression: Only progression items show a message + None: All items are added to your bag silently (badges will still show) + """ + display_name = "Receive Item Messages" + default = 0 + option_all = 0 + option_progression = 1 + option_none = 2 + + +class EasterEgg(FreeText): + """ + ??? + """ + default = "Example Passphrase" + + +@dataclass +class PokemonEmeraldOptions(PerGameCommonOptions): + goal: Goal + + badges: RandomizeBadges + hms: RandomizeHms + key_items: RandomizeKeyItems + bikes: RandomizeBikes + rods: RandomizeRods + overworld_items: RandomizeOverworldItems + hidden_items: RandomizeHiddenItems + npc_gifts: RandomizeNpcGifts + item_pool_type: ItemPoolType + + require_itemfinder: HiddenItemsRequireItemfinder + require_flash: DarkCavesRequireFlash + elite_four_requirement: EliteFourRequirement + elite_four_count: EliteFourCount + norman_requirement: NormanRequirement + norman_count: NormanCount + + wild_pokemon: RandomizeWildPokemon + allow_wild_legendaries: AllowWildLegendaries + starters: RandomizeStarters + allow_starter_legendaries: AllowStarterLegendaries + trainer_parties: RandomizeTrainerParties + allow_trainer_legendaries: AllowTrainerLegendaries + static_encounters: RandomizeStaticEncounters + types: RandomizeTypes + abilities: RandomizeAbilities + ability_blacklist: AbilityBlacklist + + level_up_moves: LevelUpMoves + move_match_type_bias: MoveMatchTypeBias + move_normal_type_bias: MoveNormalTypeBias + tm_compatibility: TmCompatibility + hm_compatibility: HmCompatibility + tm_moves: TmMoves + reusable_tms: ReusableTms + + min_catch_rate: MinCatchRate + guaranteed_catch: GuaranteedCatch + exp_modifier: ExpModifier + blind_trainers: BlindTrainers + double_battle_chance: DoubleBattleChance + better_shops: BetterShops + + enable_ferry: EnableFerry + remove_roadblocks: RemoveRoadblocks + extra_boulders: ExtraBoulders + free_fly_location: FreeFlyLocation + fly_without_badge: FlyWithoutBadge + + turbo_a: TurboA + receive_item_messages: ReceiveItemMessages + + easter_egg: EasterEgg diff --git a/worlds/pokemon_emerald/pokemon.py b/worlds/pokemon_emerald/pokemon.py new file mode 100644 index 000000000000..b461d006a46f --- /dev/null +++ b/worlds/pokemon_emerald/pokemon.py @@ -0,0 +1,196 @@ +""" +Functions related to pokemon species and moves +""" +import time +from typing import TYPE_CHECKING, Dict, List, Set, Optional, Tuple + +from .data import SpeciesData, data + +if TYPE_CHECKING: + from random import Random + + +_damaging_moves = frozenset({ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, + 16, 17, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, + 31, 33, 34, 35, 36, 37, 38, 40, 41, 42, 44, 51, + 52, 53, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 69, 71, 72, 75, 76, 80, 82, 83, 84, 85, + 87, 88, 89, 91, 93, 94, 98, 99, 101, 121, 122, 123, + 124, 125, 126, 128, 129, 130, 131, 132, 136, 140, 141, 143, + 145, 146, 149, 152, 154, 155, 157, 158, 161, 162, 163, 167, + 168, 172, 175, 177, 179, 181, 183, 185, 188, 189, 190, 192, + 196, 198, 200, 202, 205, 209, 210, 211, 216, 217, 218, 221, + 222, 223, 224, 225, 228, 229, 231, 232, 233, 237, 238, 239, + 242, 245, 246, 247, 248, 250, 251, 253, 257, 263, 265, 267, + 276, 279, 280, 282, 284, 290, 292, 295, 296, 299, 301, 302, + 304, 305, 306, 307, 308, 309, 310, 311, 314, 315, 317, 318, + 323, 324, 325, 326, 327, 328, 330, 331, 332, 333, 337, 338, + 340, 341, 342, 343, 344, 345, 348, 350, 351, 352, 353, 354 +}) + +_move_types = [ + 0, 0, 1, 0, 0, 0, 0, 10, 15, 13, 0, 0, 0, 0, 0, + 0, 2, 2, 0, 2, 0, 0, 12, 0, 1, 0, 1, 1, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 6, 6, 0, 17, + 0, 0, 0, 0, 0, 0, 3, 10, 10, 15, 11, 11, 11, 15, 15, + 14, 11, 15, 0, 2, 2, 1, 1, 1, 1, 0, 12, 12, 12, 0, + 12, 12, 3, 12, 12, 12, 6, 16, 10, 13, 13, 13, 13, 5, 4, + 4, 4, 3, 14, 14, 14, 14, 14, 0, 0, 14, 7, 0, 0, 0, + 0, 0, 0, 0, 7, 11, 0, 14, 14, 15, 14, 0, 0, 0, 2, + 0, 0, 7, 3, 3, 4, 10, 11, 11, 0, 0, 0, 0, 14, 14, + 0, 1, 0, 14, 3, 0, 6, 0, 2, 0, 11, 0, 12, 0, 14, + 0, 3, 11, 0, 0, 4, 14, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 17, 6, 0, 7, 10, 0, 9, 0, 0, 2, 12, 1, + 7, 15, 0, 1, 0, 17, 0, 0, 3, 4, 11, 4, 13, 0, 7, + 0, 15, 1, 4, 0, 16, 5, 12, 0, 0, 5, 0, 0, 0, 13, + 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 4, 1, 6, + 16, 0, 0, 17, 0, 0, 8, 8, 1, 0, 12, 0, 0, 1, 16, + 11, 10, 17, 14, 0, 0, 5, 7, 14, 1, 11, 17, 0, 0, 0, + 0, 0, 10, 15, 17, 17, 10, 17, 0, 1, 0, 0, 0, 13, 17, + 0, 14, 14, 0, 0, 12, 1, 14, 0, 1, 1, 0, 17, 0, 10, + 14, 14, 0, 7, 17, 0, 11, 1, 0, 6, 14, 14, 2, 0, 10, + 4, 15, 12, 0, 0, 3, 0, 10, 11, 8, 7, 0, 12, 17, 2, + 10, 0, 5, 6, 8, 12, 0, 14, 11, 6, 7, 14, 1, 4, 15, + 11, 12, 2, 15, 8, 0, 0, 16, 12, 1, 2, 4, 3, 0, 13, + 12, 11, 14, 12, 16, 5, 13, 11, 8, 14 +] + +_moves_by_type: Dict[int, List[int]] = {} +for move, type in enumerate(_move_types): + _moves_by_type.setdefault(type, []).append(move) + +_move_blacklist = frozenset({ + 0, # MOVE_NONE + 165, # Struggle + 15, # Cut + 148, # Flash + 249, # Rock Smash + 70, # Strength + 57, # Surf + 19, # Fly + 291, # Dive + 127 # Waterfall +}) + +_legendary_pokemon = frozenset({ + 'Mew', + 'Mewtwo', + 'Articuno', + 'Zapdos', + 'Moltres', + 'Lugia', + 'Ho-oh', + 'Raikou', + 'Suicune', + 'Entei', + 'Celebi', + 'Groudon', + 'Kyogre', + 'Rayquaza', + 'Latios', + 'Latias', + 'Registeel', + 'Regirock', + 'Regice', + 'Jirachi', + 'Deoxys' +}) + + +def get_random_species( + random: "Random", + candidates: List[Optional[SpeciesData]], + nearby_bst: Optional[int] = None, + species_type: Optional[int] = None, + allow_legendaries: bool = True) -> SpeciesData: + candidates: List[SpeciesData] = [species for species in candidates if species is not None] + + if species_type is not None: + candidates = [species for species in candidates if species_type in species.types] + + if not allow_legendaries: + candidates = [species for species in candidates if species.label not in _legendary_pokemon] + + if nearby_bst is not None: + def has_nearby_bst(species: SpeciesData, max_percent_different: int) -> bool: + return abs(sum(species.base_stats) - nearby_bst) < nearby_bst * (max_percent_different / 100) + + max_percent_different = 10 + bst_filtered_candidates = [species for species in candidates if has_nearby_bst(species, max_percent_different)] + while len(bst_filtered_candidates) == 0: + max_percent_different += 10 + bst_filtered_candidates = [ + species + for species in candidates + if has_nearby_bst(species, max_percent_different) + ] + + candidates = bst_filtered_candidates + + return random.choice(candidates) + + +def get_random_type(random: "Random") -> int: + picked_type = random.randrange(0, 18) + while picked_type == 9: # Don't pick the ??? type + picked_type = random.randrange(0, 18) + + return picked_type + + +def get_random_move( + random: "Random", + blacklist: Optional[Set[int]] = None, + type_bias: int = 0, + normal_bias: int = 0, + type_target: Optional[Tuple[int, int]] = None) -> int: + expanded_blacklist = _move_blacklist | (blacklist if blacklist is not None else set()) + + bias = random.random() * 100 + if bias < type_bias: + pass # Keep type_target unchanged + elif bias < type_bias + ((100 - type_bias) * (normal_bias / 100)): + type_target = (0, 0) + else: + type_target = None + + chosen_move = None + + # The blacklist is relatively small, so if we don't need to restrict + # ourselves to any particular types, it's usually much faster to pick + # a random number and hope it works. Limit this to 5 tries in case the + # blacklist is actually significant enough to make this unlikely to work. + if type_target is None: + remaining_attempts = 5 + while remaining_attempts > 0: + remaining_attempts -= 1 + chosen_move = random.randrange(0, data.constants["MOVES_COUNT"]) + if chosen_move not in expanded_blacklist: + return chosen_move + else: + chosen_move = None + + # We're either matching types or failed to pick a move above + if type_target is None: + possible_moves = [i for i in range(data.constants["MOVE_COUNT"]) if i not in expanded_blacklist] + else: + possible_moves = [move for move in _moves_by_type[type_target[0]] if move not in expanded_blacklist] + \ + [move for move in _moves_by_type[type_target[1]] if move not in expanded_blacklist] + + if len(possible_moves) == 0: + return get_random_move(random, None, type_bias, normal_bias, type_target) + + return random.choice(possible_moves) + + +def get_random_damaging_move(random: "Random", blacklist: Optional[Set[int]] = None) -> int: + expanded_blacklist = _move_blacklist | (blacklist if blacklist is not None else set()) + + move_options = list(_damaging_moves) + + move = random.choice(move_options) + while move in expanded_blacklist: + move = random.choice(move_options) + + return move diff --git a/worlds/pokemon_emerald/regions.py b/worlds/pokemon_emerald/regions.py new file mode 100644 index 000000000000..e8f6d26e08ce --- /dev/null +++ b/worlds/pokemon_emerald/regions.py @@ -0,0 +1,49 @@ +""" +Functions related to AP regions for Pokemon Emerald (see ./data/regions for region definitions) +""" +from typing import TYPE_CHECKING, Dict, List, Tuple + +from BaseClasses import ItemClassification, Region + +from .data import data +from .items import PokemonEmeraldItem +from .locations import PokemonEmeraldLocation + +if TYPE_CHECKING: + from . import PokemonEmeraldWorld + + +def create_regions(world: "PokemonEmeraldWorld") -> Dict[str, Region]: + """ + Iterates through regions created from JSON to create regions and adds them to the multiworld. + Also creates and places events and connects regions via warps and the exits defined in the JSON. + """ + regions: Dict[str, Region] = {} + connections: List[Tuple[str, str, str]] = [] + + for region_name, region_data in data.regions.items(): + new_region = Region(region_name, world.player, world.multiworld) + + for event_data in region_data.events: + event = PokemonEmeraldLocation(world.player, event_data.name, None, new_region) + event.place_locked_item(PokemonEmeraldItem(event_data.name, ItemClassification.progression, None, world.player)) + new_region.locations.append(event) + + for region_exit in region_data.exits: + connections.append((f"{region_name} -> {region_exit}", region_name, region_exit)) + + for warp in region_data.warps: + dest_warp = data.warps[data.warp_map[warp]] + if dest_warp.parent_region is None: + continue + connections.append((warp, region_name, dest_warp.parent_region)) + + regions[region_name] = new_region + + for name, source, dest in connections: + regions[source].connect(regions[dest], name) + + regions["Menu"] = Region("Menu", world.player, world.multiworld) + regions["Menu"].connect(regions["REGION_LITTLEROOT_TOWN/MAIN"], "Start Game") + + return regions diff --git a/worlds/pokemon_emerald/rom.py b/worlds/pokemon_emerald/rom.py new file mode 100644 index 000000000000..156410553cf6 --- /dev/null +++ b/worlds/pokemon_emerald/rom.py @@ -0,0 +1,420 @@ +""" +Classes and functions related to creating a ROM patch +""" +import os +import pkgutil +from typing import TYPE_CHECKING, List, Tuple + +import bsdiff4 + +from worlds.Files import APDeltaPatch +from settings import get_settings + +from .data import PokemonEmeraldData, TrainerPokemonDataTypeEnum, data +from .items import reverse_offset_item_value +from .options import RandomizeWildPokemon, RandomizeTrainerParties, EliteFourRequirement, NormanRequirement +from .pokemon import get_random_species + +if TYPE_CHECKING: + from . import PokemonEmeraldWorld + + +class PokemonEmeraldDeltaPatch(APDeltaPatch): + game = "Pokemon Emerald" + hash = "605b89b67018abcea91e693a4dd25be3" + patch_file_ending = ".apemerald" + result_file_ending = ".gba" + + @classmethod + def get_source_data(cls) -> bytes: + return get_base_rom_as_bytes() + + +location_visited_event_to_id_map = { + "EVENT_VISITED_LITTLEROOT_TOWN": 0, + "EVENT_VISITED_OLDALE_TOWN": 1, + "EVENT_VISITED_PETALBURG_CITY": 2, + "EVENT_VISITED_RUSTBORO_CITY": 3, + "EVENT_VISITED_DEWFORD_TOWN": 4, + "EVENT_VISITED_SLATEPORT_CITY": 5, + "EVENT_VISITED_MAUVILLE_CITY": 6, + "EVENT_VISITED_VERDANTURF_TOWN": 7, + "EVENT_VISITED_FALLARBOR_TOWN": 8, + "EVENT_VISITED_LAVARIDGE_TOWN": 9, + "EVENT_VISITED_FORTREE_CITY": 10, + "EVENT_VISITED_LILYCOVE_CITY": 11, + "EVENT_VISITED_MOSSDEEP_CITY": 12, + "EVENT_VISITED_SOOTOPOLIS_CITY": 13, + "EVENT_VISITED_PACIFIDLOG_TOWN": 14, + "EVENT_VISITED_EVER_GRANDE_CITY": 15, + "EVENT_VISITED_BATTLE_FRONTIER": 16, + "EVENT_VISITED_SOUTHERN_ISLAND": 17 +} + + +def generate_output(world: "PokemonEmeraldWorld", output_directory: str) -> None: + base_rom = get_base_rom_as_bytes() + base_patch = pkgutil.get_data(__name__, "data/base_patch.bsdiff4") + patched_rom = bytearray(bsdiff4.patch(base_rom, base_patch)) + + # Set item values + for location in world.multiworld.get_locations(world.player): + # Set free fly location + if location.address is None: + if world.options.free_fly_location and location.name == "EVENT_VISITED_LITTLEROOT_TOWN": + _set_bytes_little_endian( + patched_rom, + data.rom_addresses["gArchipelagoOptions"] + 0x16, + 1, + world.free_fly_location_id + ) + continue + + if location.item and location.item.player == world.player: + _set_bytes_little_endian( + patched_rom, + location.rom_address, + 2, + reverse_offset_item_value(location.item.code) + ) + else: + _set_bytes_little_endian( + patched_rom, + location.rom_address, + 2, + data.constants["ITEM_ARCHIPELAGO_PROGRESSION"] + ) + + # Set start inventory + start_inventory = world.options.start_inventory.value.copy() + + starting_badges = 0 + if start_inventory.pop("Stone Badge", 0) > 0: + starting_badges |= (1 << 0) + if start_inventory.pop("Knuckle Badge", 0) > 0: + starting_badges |= (1 << 1) + if start_inventory.pop("Dynamo Badge", 0) > 0: + starting_badges |= (1 << 2) + if start_inventory.pop("Heat Badge", 0) > 0: + starting_badges |= (1 << 3) + if start_inventory.pop("Balance Badge", 0) > 0: + starting_badges |= (1 << 4) + if start_inventory.pop("Feather Badge", 0) > 0: + starting_badges |= (1 << 5) + if start_inventory.pop("Mind Badge", 0) > 0: + starting_badges |= (1 << 6) + if start_inventory.pop("Rain Badge", 0) > 0: + starting_badges |= (1 << 7) + + pc_slots: List[Tuple[str, int]] = [] + while any(qty > 0 for qty in start_inventory.values()): + if len(pc_slots) >= 19: + break + + for i, item_name in enumerate(start_inventory.keys()): + if len(pc_slots) >= 19: + break + + quantity = min(start_inventory[item_name], 999) + if quantity == 0: + continue + + start_inventory[item_name] -= quantity + + pc_slots.append((item_name, quantity)) + + pc_slots.sort(reverse=True) + + for i, slot in enumerate(pc_slots): + address = data.rom_addresses["sNewGamePCItems"] + (i * 4) + item = reverse_offset_item_value(world.item_name_to_id[slot[0]]) + _set_bytes_little_endian(patched_rom, address + 0, 2, item) + _set_bytes_little_endian(patched_rom, address + 2, 2, slot[1]) + + # Set species data + _set_species_info(world, patched_rom) + + # Set encounter tables + if world.options.wild_pokemon != RandomizeWildPokemon.option_vanilla: + _set_encounter_tables(world, patched_rom) + + # Set opponent data + if world.options.trainer_parties != RandomizeTrainerParties.option_vanilla: + _set_opponents(world, patched_rom) + + # Set static pokemon + _set_static_encounters(world, patched_rom) + + # Set starters + _set_starters(world, patched_rom) + + # Set TM moves + _set_tm_moves(world, patched_rom) + + # Set TM/HM compatibility + _set_tmhm_compatibility(world, patched_rom) + + # Randomize opponent double or single + _randomize_opponent_battle_type(world, patched_rom) + + # Options + # struct ArchipelagoOptions + # { + # /* 0x00 */ bool8 advanceTextWithHoldA; + # /* 0x01 */ bool8 isFerryEnabled; + # /* 0x02 */ bool8 areTrainersBlind; + # /* 0x03 */ bool8 canFlyWithoutBadge; + # /* 0x04 */ u16 expMultiplierNumerator; + # /* 0x06 */ u16 expMultiplierDenominator; + # /* 0x08 */ u16 birchPokemon; + # /* 0x0A */ bool8 guaranteedCatch; + # /* 0x0B */ bool8 betterShopsEnabled; + # /* 0x0C */ bool8 eliteFourRequiresGyms; + # /* 0x0D */ u8 eliteFourRequiredCount; + # /* 0x0E */ bool8 normanRequiresGyms; + # /* 0x0F */ u8 normanRequiredCount; + # /* 0x10 */ u8 startingBadges; + # /* 0x11 */ u8 receivedItemMessageFilter; // 0 = Show All; 1 = Show Progression Only; 2 = Show None + # /* 0x12 */ bool8 reusableTms; + # /* 0x14 */ u16 removedBlockers; + # /* 0x13 */ bool8 addRoute115Boulders; + # /* 0x14 */ u16 removedBlockers; + # /* 0x14 */ u16 removedBlockers; + # /* 0x16 */ u8 freeFlyLocation; + # }; + options_address = data.rom_addresses["gArchipelagoOptions"] + + # Set hold A to advance text + turbo_a = 1 if world.options.turbo_a else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x00, 1, turbo_a) + + # Set ferry enabled + enable_ferry = 1 if world.options.enable_ferry else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x01, 1, enable_ferry) + + # Set blind trainers + blind_trainers = 1 if world.options.blind_trainers else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x02, 1, blind_trainers) + + # Set fly without badge + fly_without_badge = 1 if world.options.fly_without_badge else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x03, 1, fly_without_badge) + + # Set exp modifier + numerator = min(max(world.options.exp_modifier.value, 0), 2**16 - 1) + _set_bytes_little_endian(patched_rom, options_address + 0x04, 2, numerator) + _set_bytes_little_endian(patched_rom, options_address + 0x06, 2, 100) + + # Set Birch pokemon + _set_bytes_little_endian( + patched_rom, + options_address + 0x08, + 2, + get_random_species(world.random, data.species).species_id + ) + + # Set guaranteed catch + guaranteed_catch = 1 if world.options.guaranteed_catch else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x0A, 1, guaranteed_catch) + + # Set better shops + better_shops = 1 if world.options.better_shops else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x0B, 1, better_shops) + + # Set elite four requirement + elite_four_requires_gyms = 1 if world.options.elite_four_requirement == EliteFourRequirement.option_gyms else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x0C, 1, elite_four_requires_gyms) + + # Set elite four count + elite_four_count = min(max(world.options.elite_four_count.value, 0), 8) + _set_bytes_little_endian(patched_rom, options_address + 0x0D, 1, elite_four_count) + + # Set norman requirement + norman_requires_gyms = 1 if world.options.norman_requirement == NormanRequirement.option_gyms else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x0E, 1, norman_requires_gyms) + + # Set norman count + norman_count = min(max(world.options.norman_count.value, 0), 8) + _set_bytes_little_endian(patched_rom, options_address + 0x0F, 1, norman_count) + + # Set starting badges + _set_bytes_little_endian(patched_rom, options_address + 0x10, 1, starting_badges) + + # Set receive item messages type + receive_item_messages_type = world.options.receive_item_messages.value + _set_bytes_little_endian(patched_rom, options_address + 0x11, 1, receive_item_messages_type) + + # Set reusable TMs + reusable_tms = 1 if world.options.reusable_tms else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x12, 1, reusable_tms) + + # Set route 115 boulders + route_115_boulders = 1 if world.options.extra_boulders else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x13, 1, route_115_boulders) + + # Set removed blockers + removed_roadblocks = world.options.remove_roadblocks.value + removed_roadblocks_bitfield = 0 + removed_roadblocks_bitfield |= (1 << 0) if "Safari Zone Construction Workers" in removed_roadblocks else 0 + removed_roadblocks_bitfield |= (1 << 1) if "Lilycove City Wailmer" in removed_roadblocks else 0 + removed_roadblocks_bitfield |= (1 << 2) if "Route 110 Aqua Grunts" in removed_roadblocks else 0 + removed_roadblocks_bitfield |= (1 << 3) if "Aqua Hideout Grunts" in removed_roadblocks else 0 + removed_roadblocks_bitfield |= (1 << 4) if "Route 119 Aqua Grunts" in removed_roadblocks else 0 + removed_roadblocks_bitfield |= (1 << 5) if "Route 112 Magma Grunts" in removed_roadblocks else 0 + removed_roadblocks_bitfield |= (1 << 6) if "Seafloor Cavern Aqua Grunt" in removed_roadblocks else 0 + _set_bytes_little_endian(patched_rom, options_address + 0x14, 2, removed_roadblocks_bitfield) + + # Set slot name + player_name = world.multiworld.get_player_name(world.player) + for i, byte in enumerate(player_name.encode("utf-8")): + _set_bytes_little_endian(patched_rom, data.rom_addresses["gArchipelagoInfo"] + i, 1, byte) + + # Write Output + out_file_name = world.multiworld.get_out_file_name_base(world.player) + output_path = os.path.join(output_directory, f"{out_file_name}.gba") + with open(output_path, "wb") as out_file: + out_file.write(patched_rom) + patch = PokemonEmeraldDeltaPatch(os.path.splitext(output_path)[0] + ".apemerald", player=world.player, + player_name=player_name, patched_path=output_path) + + patch.write() + os.unlink(output_path) + + +def get_base_rom_as_bytes() -> bytes: + with open(get_settings().pokemon_emerald_settings.rom_file, "rb") as infile: + base_rom_bytes = bytes(infile.read()) + + return base_rom_bytes + + +def _set_bytes_little_endian(byte_array: bytearray, address: int, size: int, value: int) -> None: + offset = 0 + while size > 0: + byte_array[address + offset] = value & 0xFF + value = value >> 8 + offset += 1 + size -= 1 + + +def _set_encounter_tables(world: "PokemonEmeraldWorld", rom: bytearray) -> None: + """ + Encounter tables are lists of + struct { + min_level: 0x01 bytes, + max_level: 0x01 bytes, + species_id: 0x02 bytes + } + """ + + for map_data in world.modified_maps: + tables = [map_data.land_encounters, map_data.water_encounters, map_data.fishing_encounters] + for table in tables: + if table is not None: + for i, species_id in enumerate(table.slots): + address = table.rom_address + 2 + (4 * i) + _set_bytes_little_endian(rom, address, 2, species_id) + + +def _set_species_info(world: "PokemonEmeraldWorld", rom: bytearray) -> None: + for species in world.modified_species: + if species is not None: + _set_bytes_little_endian(rom, species.rom_address + 6, 1, species.types[0]) + _set_bytes_little_endian(rom, species.rom_address + 7, 1, species.types[1]) + _set_bytes_little_endian(rom, species.rom_address + 8, 1, species.catch_rate) + _set_bytes_little_endian(rom, species.rom_address + 22, 1, species.abilities[0]) + _set_bytes_little_endian(rom, species.rom_address + 23, 1, species.abilities[1]) + + for i, learnset_move in enumerate(species.learnset): + level_move = learnset_move.level << 9 | learnset_move.move_id + _set_bytes_little_endian(rom, species.learnset_rom_address + (i * 2), 2, level_move) + + +def _set_opponents(world: "PokemonEmeraldWorld", rom: bytearray) -> None: + for trainer in world.modified_trainers: + party_address = trainer.party.rom_address + + pokemon_data_size: int + if trainer.party.pokemon_data_type in {TrainerPokemonDataTypeEnum.NO_ITEM_DEFAULT_MOVES, TrainerPokemonDataTypeEnum.ITEM_DEFAULT_MOVES}: + pokemon_data_size = 8 + else: # Custom Moves + pokemon_data_size = 16 + + for i, pokemon in enumerate(trainer.party.pokemon): + pokemon_address = party_address + (i * pokemon_data_size) + + # Replace species + _set_bytes_little_endian(rom, pokemon_address + 0x04, 2, pokemon.species_id) + + # Replace custom moves if applicable + if trainer.party.pokemon_data_type == TrainerPokemonDataTypeEnum.NO_ITEM_CUSTOM_MOVES: + _set_bytes_little_endian(rom, pokemon_address + 0x06, 2, pokemon.moves[0]) + _set_bytes_little_endian(rom, pokemon_address + 0x08, 2, pokemon.moves[1]) + _set_bytes_little_endian(rom, pokemon_address + 0x0A, 2, pokemon.moves[2]) + _set_bytes_little_endian(rom, pokemon_address + 0x0C, 2, pokemon.moves[3]) + elif trainer.party.pokemon_data_type == TrainerPokemonDataTypeEnum.ITEM_CUSTOM_MOVES: + _set_bytes_little_endian(rom, pokemon_address + 0x08, 2, pokemon.moves[0]) + _set_bytes_little_endian(rom, pokemon_address + 0x0A, 2, pokemon.moves[1]) + _set_bytes_little_endian(rom, pokemon_address + 0x0C, 2, pokemon.moves[2]) + _set_bytes_little_endian(rom, pokemon_address + 0x0E, 2, pokemon.moves[3]) + + +def _set_static_encounters(world: "PokemonEmeraldWorld", rom: bytearray) -> None: + for encounter in world.modified_static_encounters: + _set_bytes_little_endian(rom, encounter.rom_address, 2, encounter.species_id) + + +def _set_starters(world: "PokemonEmeraldWorld", rom: bytearray) -> None: + address = data.rom_addresses["sStarterMon"] + (starter_1, starter_2, starter_3) = world.modified_starters + + _set_bytes_little_endian(rom, address + 0, 2, starter_1) + _set_bytes_little_endian(rom, address + 2, 2, starter_2) + _set_bytes_little_endian(rom, address + 4, 2, starter_3) + + +def _set_tm_moves(world: "PokemonEmeraldWorld", rom: bytearray) -> None: + tmhm_list_address = data.rom_addresses["sTMHMMoves"] + + for i, move in enumerate(world.modified_tmhm_moves): + # Don't modify HMs + if i >= 50: + break + + _set_bytes_little_endian(rom, tmhm_list_address + (i * 2), 2, move) + + +def _set_tmhm_compatibility(world: "PokemonEmeraldWorld", rom: bytearray) -> None: + learnsets_address = data.rom_addresses["gTMHMLearnsets"] + + for species in world.modified_species: + if species is not None: + _set_bytes_little_endian(rom, learnsets_address + (species.species_id * 8), 8, species.tm_hm_compatibility) + + +def _randomize_opponent_battle_type(world: "PokemonEmeraldWorld", rom: bytearray) -> None: + probability = world.options.double_battle_chance.value / 100 + + battle_type_map = { + 0: 4, + 1: 8, + 2: 6, + 3: 13, + } + + for trainer_data in data.trainers: + if trainer_data.battle_script_rom_address != 0 and len(trainer_data.party.pokemon) > 1: + if world.random.random() < probability: + # Set the trainer to be a double battle + _set_bytes_little_endian(rom, trainer_data.rom_address + 0x18, 1, 1) + + # Swap the battle type in the script for the purpose of loading the right text + # and setting data to the right places + original_battle_type = rom[trainer_data.battle_script_rom_address + 1] + if original_battle_type in battle_type_map: + _set_bytes_little_endian( + rom, + trainer_data.battle_script_rom_address + 1, + 1, + battle_type_map[original_battle_type] + ) diff --git a/worlds/pokemon_emerald/rules.py b/worlds/pokemon_emerald/rules.py new file mode 100644 index 000000000000..57229081fc26 --- /dev/null +++ b/worlds/pokemon_emerald/rules.py @@ -0,0 +1,1368 @@ +""" +Logic rule definitions for Pokemon Emerald +""" +from typing import TYPE_CHECKING + +from BaseClasses import CollectionState +from worlds.generic.Rules import add_rule, set_rule + +from .data import data +from .options import EliteFourRequirement, NormanRequirement, Goal + +if TYPE_CHECKING: + from . import PokemonEmeraldWorld + + +# Rules are organized by town/route/dungeon and ordered approximately +# by when you would first reach that place in a vanilla playthrough. +def set_rules(world: "PokemonEmeraldWorld") -> None: + def can_cut(state: CollectionState): + return state.has("HM01 Cut", world.player) and state.has("Stone Badge", world.player) + + def can_surf(state: CollectionState): + return state.has("HM03 Surf", world.player) and state.has("Balance Badge", world.player) + + def can_strength(state: CollectionState): + return state.has("HM04 Strength", world.player) and state.has("Heat Badge", world.player) + + def can_flash(state: CollectionState): + return state.has("HM05 Flash", world.player) and state.has("Knuckle Badge", world.player) + + def can_rock_smash(state: CollectionState): + return state.has("HM06 Rock Smash", world.player) and state.has("Dynamo Badge", world.player) + + def can_waterfall(state: CollectionState): + return state.has("HM07 Waterfall", world.player) and state.has("Rain Badge", world.player) + + def can_dive(state: CollectionState): + return state.has("HM08 Dive", world.player) and state.has("Mind Badge", world.player) + + def has_acro_bike(state: CollectionState): + return state.has("Acro Bike", world.player) + + def has_mach_bike(state: CollectionState): + return state.has("Mach Bike", world.player) + + def defeated_n_gym_leaders(state: CollectionState, n: int) -> bool: + return sum([state.has(event, world.player) for event in [ + "EVENT_DEFEAT_ROXANNE", + "EVENT_DEFEAT_BRAWLY", + "EVENT_DEFEAT_WATTSON", + "EVENT_DEFEAT_FLANNERY", + "EVENT_DEFEAT_NORMAN", + "EVENT_DEFEAT_WINONA", + "EVENT_DEFEAT_TATE_AND_LIZA", + "EVENT_DEFEAT_JUAN" + ]]) >= n + + def get_entrance(entrance: str): + return world.multiworld.get_entrance(entrance, world.player) + + def get_location(location: str): + if location in data.locations: + location = data.locations[location].label + + return world.multiworld.get_location(location, world.player) + + victory_event_name = "EVENT_DEFEAT_CHAMPION" + if world.options.goal == Goal.option_steven: + victory_event_name = "EVENT_DEFEAT_STEVEN" + elif world.options.goal == Goal.option_norman: + victory_event_name = "EVENT_DEFEAT_NORMAN" + + world.multiworld.completion_condition[world.player] = lambda state: state.has(victory_event_name, world.player) + + # Sky + if world.options.fly_without_badge: + set_rule( + get_entrance("REGION_LITTLEROOT_TOWN/MAIN -> REGION_SKY"), + lambda state: state.has("HM02 Fly", world.player) + ) + else: + set_rule( + get_entrance("REGION_LITTLEROOT_TOWN/MAIN -> REGION_SKY"), + lambda state: state.has("HM02 Fly", world.player) and state.has("Feather Badge", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_LITTLEROOT_TOWN/MAIN"), + lambda state: state.has("EVENT_VISITED_LITTLEROOT_TOWN", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_OLDALE_TOWN/MAIN"), + lambda state: state.has("EVENT_VISITED_OLDALE_TOWN", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_PETALBURG_CITY/MAIN"), + lambda state: state.has("EVENT_VISITED_PETALBURG_CITY", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_RUSTBORO_CITY/MAIN"), + lambda state: state.has("EVENT_VISITED_RUSTBORO_CITY", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_DEWFORD_TOWN/MAIN"), + lambda state: state.has("EVENT_VISITED_DEWFORD_TOWN", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_SLATEPORT_CITY/MAIN"), + lambda state: state.has("EVENT_VISITED_SLATEPORT_CITY", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_MAUVILLE_CITY/MAIN"), + lambda state: state.has("EVENT_VISITED_MAUVILLE_CITY", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_VERDANTURF_TOWN/MAIN"), + lambda state: state.has("EVENT_VISITED_VERDANTURF_TOWN", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_FALLARBOR_TOWN/MAIN"), + lambda state: state.has("EVENT_VISITED_FALLARBOR_TOWN", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_LAVARIDGE_TOWN/MAIN"), + lambda state: state.has("EVENT_VISITED_LAVARIDGE_TOWN", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_FORTREE_CITY/MAIN"), + lambda state: state.has("EVENT_VISITED_FORTREE_CITY", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_LILYCOVE_CITY/MAIN"), + lambda state: state.has("EVENT_VISITED_LILYCOVE_CITY", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_MOSSDEEP_CITY/MAIN"), + lambda state: state.has("EVENT_VISITED_MOSSDEEP_CITY", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_SOOTOPOLIS_CITY/EAST"), + lambda state: state.has("EVENT_VISITED_SOOTOPOLIS_CITY", world.player) + ) + set_rule( + get_entrance("REGION_SKY -> REGION_EVER_GRANDE_CITY/SOUTH"), + lambda state: state.has("EVENT_VISITED_EVER_GRANDE_CITY", world.player) + ) + + # Route 103 + set_rule( + get_entrance("REGION_ROUTE103/EAST -> REGION_ROUTE103/WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE103/WEST -> REGION_ROUTE103/WATER"), + can_surf + ) + + # Petalburg City + set_rule( + get_entrance("REGION_PETALBURG_CITY/MAIN -> REGION_PETALBURG_CITY/SOUTH_POND"), + can_surf + ) + set_rule( + get_entrance("REGION_PETALBURG_CITY/MAIN -> REGION_PETALBURG_CITY/NORTH_POND"), + can_surf + ) + set_rule( + get_location("NPC_GIFT_RECEIVED_HM03"), + lambda state: state.has("EVENT_DEFEAT_NORMAN", world.player) + ) + if world.options.norman_requirement == NormanRequirement.option_badges: + set_rule( + get_entrance("MAP_PETALBURG_CITY_GYM:2/MAP_PETALBURG_CITY_GYM:3"), + lambda state: state.has_group("Badges", world.player, world.options.norman_count.value) + ) + set_rule( + get_entrance("MAP_PETALBURG_CITY_GYM:5/MAP_PETALBURG_CITY_GYM:6"), + lambda state: state.has_group("Badges", world.player, world.options.norman_count.value) + ) + else: + set_rule( + get_entrance("MAP_PETALBURG_CITY_GYM:2/MAP_PETALBURG_CITY_GYM:3"), + lambda state: defeated_n_gym_leaders(state, world.options.norman_count.value) + ) + set_rule( + get_entrance("MAP_PETALBURG_CITY_GYM:5/MAP_PETALBURG_CITY_GYM:6"), + lambda state: defeated_n_gym_leaders(state, world.options.norman_count.value) + ) + + # Route 104 + set_rule( + get_entrance("REGION_ROUTE104/SOUTH -> REGION_ROUTE105/MAIN"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN -> REGION_DEWFORD_TOWN/MAIN"), + lambda state: state.has("EVENT_TALK_TO_MR_STONE", world.player) + ) + + # Petalburg Woods + set_rule( + get_entrance("REGION_PETALBURG_WOODS/WEST_PATH -> REGION_PETALBURG_WOODS/EAST_PATH"), + can_cut + ) + + # Rustboro City + set_rule( + get_location("EVENT_RETURN_DEVON_GOODS"), + lambda state: state.has("EVENT_RECOVER_DEVON_GOODS", world.player) + ) + + # Devon Corp + set_rule( + get_entrance("MAP_RUSTBORO_CITY_DEVON_CORP_1F:2/MAP_RUSTBORO_CITY_DEVON_CORP_2F:0"), + lambda state: state.has("EVENT_RETURN_DEVON_GOODS", world.player) + ) + + # Route 116 + set_rule( + get_entrance("REGION_ROUTE116/WEST -> REGION_ROUTE116/WEST_ABOVE_LEDGE"), + can_cut + ) + + # Rusturf Tunnel + set_rule( + get_entrance("REGION_RUSTURF_TUNNEL/WEST -> REGION_RUSTURF_TUNNEL/EAST"), + can_rock_smash + ) + set_rule( + get_entrance("REGION_RUSTURF_TUNNEL/EAST -> REGION_RUSTURF_TUNNEL/WEST"), + can_rock_smash + ) + set_rule( + get_location("NPC_GIFT_RECEIVED_HM04"), + can_rock_smash + ) + set_rule( + get_location("EVENT_RECOVER_DEVON_GOODS"), + lambda state: state.has("EVENT_DEFEAT_ROXANNE", world.player) + ) + + # Route 115 + set_rule( + get_entrance("REGION_ROUTE115/SOUTH_BELOW_LEDGE -> REGION_ROUTE115/SEA"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE -> REGION_ROUTE115/SEA"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE115/SOUTH_ABOVE_LEDGE -> REGION_ROUTE115/SOUTH_BEHIND_ROCK"), + can_rock_smash + ) + set_rule( + get_entrance("REGION_ROUTE115/NORTH_BELOW_SLOPE -> REGION_ROUTE115/SEA"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE115/NORTH_BELOW_SLOPE -> REGION_ROUTE115/NORTH_ABOVE_SLOPE"), + lambda state: has_mach_bike(state) + ) + if world.options.extra_boulders: + set_rule( + get_entrance("REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE -> REGION_ROUTE115/SOUTH_ABOVE_LEDGE"), + can_strength + ) + set_rule( + get_entrance("REGION_ROUTE115/SOUTH_ABOVE_LEDGE -> REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE"), + can_strength + ) + + # Route 105 + set_rule( + get_entrance("REGION_ROUTE105/MAIN -> REGION_UNDERWATER_ROUTE105/MAIN"), + can_dive + ) + + # Route 106 + set_rule( + get_entrance("REGION_ROUTE106/EAST -> REGION_ROUTE106/SEA"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE106/WEST -> REGION_ROUTE106/SEA"), + can_surf + ) + + # Dewford Town + set_rule( + get_entrance("REGION_DEWFORD_TOWN/MAIN -> REGION_ROUTE109/BEACH"), + lambda state: + state.can_reach("REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN -> REGION_DEWFORD_TOWN/MAIN", "Entrance", world.player) + and state.has("EVENT_TALK_TO_MR_STONE", world.player) + and state.has("EVENT_DELIVER_LETTER", world.player) + ) + set_rule( + get_entrance("REGION_DEWFORD_TOWN/MAIN -> REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN"), + lambda state: + state.can_reach("REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN -> REGION_DEWFORD_TOWN/MAIN", "Entrance", world.player) + and state.has("EVENT_TALK_TO_MR_STONE", world.player) + ) + + # Granite Cave + set_rule( + get_entrance("REGION_GRANITE_CAVE_STEVENS_ROOM/MAIN -> REGION_GRANITE_CAVE_STEVENS_ROOM/LETTER_DELIVERED"), + lambda state: state.has("Letter", world.player) + ) + set_rule( + get_entrance("REGION_GRANITE_CAVE_B1F/LOWER -> REGION_GRANITE_CAVE_B1F/UPPER"), + lambda state: has_mach_bike(state) + ) + + # Route 107 + set_rule( + get_entrance("REGION_DEWFORD_TOWN/MAIN -> REGION_ROUTE107/MAIN"), + can_surf + ) + + # Route 109 + set_rule( + get_entrance("REGION_ROUTE109/BEACH -> REGION_DEWFORD_TOWN/MAIN"), + lambda state: + state.can_reach("REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN -> REGION_DEWFORD_TOWN/MAIN", "Entrance", world.player) + and state.can_reach("REGION_DEWFORD_TOWN/MAIN -> REGION_ROUTE109/BEACH", "Entrance", world.player) + and state.has("EVENT_TALK_TO_MR_STONE", world.player) + and state.has("EVENT_DELIVER_LETTER", world.player) + ) + set_rule( + get_entrance("REGION_ROUTE109/BEACH -> REGION_ROUTE109/SEA"), + can_surf + ) + + # Slateport City + set_rule( + get_entrance("REGION_SLATEPORT_CITY/MAIN -> REGION_ROUTE134/WEST"), + can_surf + ) + set_rule( + get_location("EVENT_TALK_TO_DOCK"), + lambda state: state.has("Devon Goods", world.player) + ) + set_rule( + get_entrance("MAP_SLATEPORT_CITY:5,7/MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F:0,1"), + lambda state: state.has("EVENT_TALK_TO_DOCK", world.player) + ) + set_rule( + get_location("EVENT_AQUA_STEALS_SUBMARINE"), + lambda state: state.has("EVENT_RELEASE_GROUDON", world.player) + ) + set_rule( + get_entrance("REGION_SLATEPORT_CITY_HARBOR/MAIN -> REGION_SS_TIDAL_CORRIDOR/MAIN"), + lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) + ) + + # Route 110 + set_rule( + get_entrance("REGION_ROUTE110/MAIN -> REGION_ROUTE110/SOUTH_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE110/MAIN -> REGION_ROUTE110/NORTH_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/WEST -> REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/EAST"), + lambda state: has_acro_bike(state) or has_mach_bike(state) + ) + set_rule( + get_entrance("REGION_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE/WEST -> REGION_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE/EAST"), + lambda state: has_acro_bike(state) or has_mach_bike(state) + ) + if "Route 110 Aqua Grunts" not in world.options.remove_roadblocks.value: + set_rule( + get_entrance("REGION_ROUTE110/SOUTH -> REGION_ROUTE110/MAIN"), + lambda state: state.has("EVENT_RESCUE_CAPT_STERN", world.player) + ) + set_rule( + get_entrance("REGION_ROUTE110/MAIN -> REGION_ROUTE110/SOUTH"), + lambda state: state.has("EVENT_RESCUE_CAPT_STERN", world.player) + ) + + # Mauville City + set_rule( + get_location("NPC_GIFT_GOT_BASEMENT_KEY_FROM_WATTSON"), + lambda state: state.has("EVENT_DEFEAT_NORMAN", world.player) + ) + + # Route 111 + set_rule( + get_entrance("REGION_ROUTE111/MIDDLE -> REGION_ROUTE111/DESERT"), + lambda state: state.has("Go Goggles", world.player) + ) + set_rule( + get_entrance("REGION_ROUTE111/NORTH -> REGION_ROUTE111/DESERT"), + lambda state: state.has("Go Goggles", world.player) + ) + set_rule( + get_entrance("REGION_ROUTE111/MIDDLE -> REGION_ROUTE111/SOUTH"), + can_rock_smash + ) + set_rule( + get_entrance("REGION_ROUTE111/SOUTH -> REGION_ROUTE111/SOUTH_POND"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE111/SOUTH -> REGION_ROUTE111/MIDDLE"), + can_rock_smash + ) + set_rule( + get_entrance("MAP_ROUTE111:4/MAP_TRAINER_HILL_ENTRANCE:0"), + lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) + ) + + # Route 112 + if "Route 112 Magma Grunts" not in world.options.remove_roadblocks.value: + set_rule( + get_entrance("REGION_ROUTE112/SOUTH_EAST -> REGION_ROUTE112/CABLE_CAR_STATION_ENTRANCE"), + lambda state: state.has("EVENT_MAGMA_STEALS_METEORITE", world.player) + ) + set_rule( + get_entrance("REGION_ROUTE112/CABLE_CAR_STATION_ENTRANCE -> REGION_ROUTE112/SOUTH_EAST"), + lambda state: state.has("EVENT_MAGMA_STEALS_METEORITE", world.player) + ) + + # Fiery Path + set_rule( + get_entrance("REGION_FIERY_PATH/MAIN -> REGION_FIERY_PATH/BEHIND_BOULDER"), + can_strength + ) + + # Route 114 + set_rule( + get_entrance("REGION_ROUTE114/MAIN -> REGION_ROUTE114/ABOVE_WATERFALL"), + lambda state: can_surf(state) and can_waterfall(state) + ) + set_rule( + get_entrance("REGION_ROUTE114/ABOVE_WATERFALL -> REGION_ROUTE114/MAIN"), + lambda state: can_surf(state) and can_waterfall(state) + ) + set_rule( + get_entrance("MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:2/MAP_DESERT_UNDERPASS:0"), + lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) + ) + + # Meteor Falls + set_rule( + get_entrance("REGION_METEOR_FALLS_1F_1R/MAIN -> REGION_METEOR_FALLS_1F_1R/ABOVE_WATERFALL"), + lambda state: can_surf(state) and can_waterfall(state) + ) + set_rule( + get_entrance("REGION_METEOR_FALLS_1F_1R/ABOVE_WATERFALL -> REGION_METEOR_FALLS_1F_1R/MAIN"), + can_surf + ) + set_rule( + get_entrance("MAP_METEOR_FALLS_1F_1R:5/MAP_METEOR_FALLS_STEVENS_CAVE:0"), + lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) + ) + set_rule( + get_entrance("REGION_METEOR_FALLS_B1F_1R/HIGHEST_LADDER -> REGION_METEOR_FALLS_B1F_1R/WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_METEOR_FALLS_B1F_1R/NORTH_SHORE -> REGION_METEOR_FALLS_B1F_1R/WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_METEOR_FALLS_B1F_1R/SOUTH_SHORE -> REGION_METEOR_FALLS_B1F_1R/WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_METEOR_FALLS_B1F_2R/ENTRANCE -> REGION_METEOR_FALLS_B1F_2R/WATER"), + can_surf + ) + + # Jagged Pass + set_rule( + get_entrance("REGION_JAGGED_PASS/BOTTOM -> REGION_JAGGED_PASS/MIDDLE"), + lambda state: has_acro_bike(state) + ) + set_rule( + get_entrance("REGION_JAGGED_PASS/MIDDLE -> REGION_JAGGED_PASS/TOP"), + lambda state: has_acro_bike(state) + ) + set_rule( + get_entrance("MAP_JAGGED_PASS:4/MAP_MAGMA_HIDEOUT_1F:0"), + lambda state: state.has("Magma Emblem", world.player) + ) + + # Lavaridge Town + set_rule( + get_location("NPC_GIFT_RECEIVED_GO_GOGGLES"), + lambda state: state.has("EVENT_DEFEAT_FLANNERY", world.player) + ) + + # Mirage Tower + set_rule( + get_entrance("REGION_MIRAGE_TOWER_2F/TOP -> REGION_MIRAGE_TOWER_2F/BOTTOM"), + lambda state: has_mach_bike(state) + ) + set_rule( + get_entrance("REGION_MIRAGE_TOWER_2F/BOTTOM -> REGION_MIRAGE_TOWER_2F/TOP"), + lambda state: has_mach_bike(state) + ) + set_rule( + get_entrance("REGION_MIRAGE_TOWER_3F/TOP -> REGION_MIRAGE_TOWER_3F/BOTTOM"), + can_rock_smash + ) + set_rule( + get_entrance("REGION_MIRAGE_TOWER_3F/BOTTOM -> REGION_MIRAGE_TOWER_3F/TOP"), + can_rock_smash + ) + set_rule( + get_entrance("REGION_MIRAGE_TOWER_4F/MAIN -> REGION_MIRAGE_TOWER_4F/FOSSIL_PLATFORM"), + can_rock_smash + ) + + # Abandoned Ship + set_rule( + get_entrance("REGION_ABANDONED_SHIP_ROOMS_B1F/CENTER -> REGION_ABANDONED_SHIP_UNDERWATER1/MAIN"), + can_dive + ) + set_rule( + get_entrance("REGION_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS/MAIN -> REGION_ABANDONED_SHIP_UNDERWATER2/MAIN"), + can_dive + ) + set_rule( + get_entrance("MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:0/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:0"), + lambda state: state.has("Room 1 Key", world.player) + ) + set_rule( + get_entrance("MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:1/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:2"), + lambda state: state.has("Room 2 Key", world.player) + ) + set_rule( + get_entrance("MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:3/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:6"), + lambda state: state.has("Room 4 Key", world.player) + ) + set_rule( + get_entrance("MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:5/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:8"), + lambda state: state.has("Room 6 Key", world.player) + ) + set_rule( + get_entrance("MAP_ABANDONED_SHIP_CORRIDORS_B1F:5/MAP_ABANDONED_SHIP_ROOM_B1F:0"), + lambda state: state.has("Storage Key", world.player) + ) + + # New Mauville + set_rule( + get_entrance("MAP_NEW_MAUVILLE_ENTRANCE:1/MAP_NEW_MAUVILLE_INSIDE:0"), + lambda state: state.has("Basement Key", world.player) + ) + + # Route 118 + set_rule( + get_entrance("REGION_ROUTE118/WEST -> REGION_ROUTE118/WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE118/EAST -> REGION_ROUTE118/WATER"), + can_surf + ) + + # Route 119 + set_rule( + get_entrance("REGION_ROUTE119/LOWER -> REGION_ROUTE119/LOWER_ACROSS_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE119/LOWER_ACROSS_WATER -> REGION_ROUTE119/LOWER"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE119/LOWER -> REGION_ROUTE119/LOWER_ACROSS_RAILS"), + lambda state: has_acro_bike(state) + ) + set_rule( + get_entrance("REGION_ROUTE119/LOWER_ACROSS_RAILS -> REGION_ROUTE119/LOWER"), + lambda state: has_acro_bike(state) + ) + set_rule( + get_entrance("REGION_ROUTE119/UPPER -> REGION_ROUTE119/MIDDLE_RIVER"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE119/MIDDLE_RIVER -> REGION_ROUTE119/ABOVE_WATERFALL"), + can_waterfall + ) + set_rule( + get_entrance("REGION_ROUTE119/ABOVE_WATERFALL -> REGION_ROUTE119/MIDDLE_RIVER"), + can_waterfall + ) + set_rule( + get_entrance("REGION_ROUTE119/ABOVE_WATERFALL -> REGION_ROUTE119/ABOVE_WATERFALL_ACROSS_RAILS"), + lambda state: has_acro_bike(state) + ) + if "Route 119 Aqua Grunts" not in world.options.remove_roadblocks.value: + set_rule( + get_entrance("REGION_ROUTE119/MIDDLE -> REGION_ROUTE119/UPPER"), + lambda state: state.has("EVENT_DEFEAT_SHELLY", world.player) + ) + set_rule( + get_entrance("REGION_ROUTE119/UPPER -> REGION_ROUTE119/MIDDLE"), + lambda state: state.has("EVENT_DEFEAT_SHELLY", world.player) + ) + + # Fortree City + set_rule( + get_entrance("REGION_FORTREE_CITY/MAIN -> REGION_FORTREE_CITY/BEFORE_GYM"), + lambda state: state.has("Devon Scope", world.player) + ) + set_rule( + get_entrance("REGION_FORTREE_CITY/BEFORE_GYM -> REGION_FORTREE_CITY/MAIN"), + lambda state: state.has("Devon Scope", world.player) + ) + + # Route 120 + set_rule( + get_entrance("REGION_ROUTE120/NORTH -> REGION_ROUTE120/NORTH_POND"), + lambda state: state.has("Devon Scope", world.player) + ) + set_rule( + get_entrance("REGION_ROUTE120/NORTH_POND -> REGION_ROUTE120/NORTH"), + lambda state: state.has("Devon Scope", world.player) + ) + + # Route 121 + set_rule( + get_entrance("REGION_ROUTE121/EAST -> REGION_ROUTE121/WEST"), + can_cut + ) + set_rule( + get_entrance("REGION_ROUTE121/EAST -> REGION_ROUTE122/SEA"), + can_surf + ) + + # Safari Zone + set_rule( + get_entrance("MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:0,1/MAP_SAFARI_ZONE_SOUTH:0"), + lambda state: state.has("Pokeblock Case", world.player) + ) + set_rule( + get_entrance("REGION_SAFARI_ZONE_SOUTH/MAIN -> REGION_SAFARI_ZONE_NORTH/MAIN"), + lambda state: has_acro_bike(state) + ) + set_rule( + get_entrance("REGION_SAFARI_ZONE_SOUTHWEST/MAIN -> REGION_SAFARI_ZONE_NORTHWEST/MAIN"), + lambda state: has_mach_bike(state) + ) + if "Safari Zone Construction Workers" not in world.options.remove_roadblocks.value: + set_rule( + get_entrance("REGION_SAFARI_ZONE_SOUTH/MAIN -> REGION_SAFARI_ZONE_SOUTHEAST/MAIN"), + lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) + ) + + # Route 122 + set_rule( + get_entrance("REGION_ROUTE122/MT_PYRE_ENTRANCE -> REGION_ROUTE122/SEA"), + can_surf + ) + + # Route 123 + set_rule( + get_entrance("REGION_ROUTE123/EAST -> REGION_ROUTE122/SEA"), + can_surf + ) + set_rule( + get_entrance("REGION_ROUTE123/EAST -> REGION_ROUTE123/EAST_BEHIND_TREE"), + can_cut + ) + + # Lilycove City + set_rule( + get_entrance("REGION_LILYCOVE_CITY/MAIN -> REGION_LILYCOVE_CITY/SEA"), + can_surf + ) + set_rule( + get_entrance("REGION_LILYCOVE_CITY_HARBOR/MAIN -> REGION_SS_TIDAL_CORRIDOR/MAIN"), + lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) + ) + if "Lilycove City Wailmer" not in world.options.remove_roadblocks.value: + set_rule( + get_entrance("REGION_LILYCOVE_CITY/SEA -> REGION_ROUTE124/MAIN"), + lambda state: state.has("EVENT_CLEAR_AQUA_HIDEOUT", world.player) + ) + + # Magma Hideout + set_rule( + get_entrance("REGION_MAGMA_HIDEOUT_1F/ENTRANCE -> REGION_MAGMA_HIDEOUT_1F/MAIN"), + can_strength + ) + set_rule( + get_entrance("REGION_MAGMA_HIDEOUT_1F/MAIN -> REGION_MAGMA_HIDEOUT_1F/ENTRANCE"), + can_strength + ) + + # Aqua Hideout + if "Aqua Hideout Grunts" not in world.options.remove_roadblocks.value: + set_rule( + get_entrance("REGION_AQUA_HIDEOUT_1F/WATER -> REGION_AQUA_HIDEOUT_1F/MAIN"), + lambda state: state.has("EVENT_AQUA_STEALS_SUBMARINE", world.player) + ) + set_rule( + get_entrance("REGION_AQUA_HIDEOUT_1F/MAIN -> REGION_AQUA_HIDEOUT_1F/WATER"), + lambda state: can_surf(state) and state.has("EVENT_AQUA_STEALS_SUBMARINE", world.player) + ) + + # Route 124 + set_rule( + get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/BIG_AREA"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/SMALL_AREA_1"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/SMALL_AREA_2"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/SMALL_AREA_3"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/TUNNEL_1"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/TUNNEL_2"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/TUNNEL_3"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/TUNNEL_4"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/NORTH_ENCLOSED_AREA_1 -> REGION_UNDERWATER_ROUTE124/TUNNEL_1"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/NORTH_ENCLOSED_AREA_2 -> REGION_UNDERWATER_ROUTE124/TUNNEL_1"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/NORTH_ENCLOSED_AREA_3 -> REGION_UNDERWATER_ROUTE124/TUNNEL_2"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/SOUTH_ENCLOSED_AREA_1 -> REGION_UNDERWATER_ROUTE124/TUNNEL_3"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/SOUTH_ENCLOSED_AREA_2 -> REGION_UNDERWATER_ROUTE124/TUNNEL_3"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE124/SOUTH_ENCLOSED_AREA_3 -> REGION_UNDERWATER_ROUTE124/TUNNEL_4"), + can_dive + ) + + # Mossdeep City + set_rule( + get_entrance("REGION_MOSSDEEP_CITY/MAIN -> REGION_ROUTE124/MAIN"), + can_surf + ) + set_rule( + get_entrance("REGION_MOSSDEEP_CITY/MAIN -> REGION_ROUTE125/SEA"), + can_surf + ) + set_rule( + get_entrance("REGION_MOSSDEEP_CITY/MAIN -> REGION_ROUTE127/MAIN"), + can_surf + ) + set_rule( + get_location("EVENT_DEFEAT_MAXIE_AT_SPACE_STATION"), + lambda state: state.has("EVENT_DEFEAT_TATE_AND_LIZA", world.player) + ) + set_rule( + get_location("EVENT_STEVEN_GIVES_DIVE"), + lambda state: state.has("EVENT_DEFEAT_MAXIE_AT_SPACE_STATION", world.player) + ) + set_rule( + get_location("NPC_GIFT_RECEIVED_HM08"), + lambda state: state.has("EVENT_DEFEAT_MAXIE_AT_SPACE_STATION", world.player) + ) + + # Shoal Cave + set_rule( + get_entrance("REGION_SHOAL_CAVE_ENTRANCE_ROOM/SOUTH -> REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SHOAL_CAVE_ENTRANCE_ROOM/NORTH_WEST_CORNER -> REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SHOAL_CAVE_ENTRANCE_ROOM/NORTH_EAST_CORNER -> REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND -> REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND -> REGION_SHOAL_CAVE_INNER_ROOM/EAST_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND -> REGION_SHOAL_CAVE_INNER_ROOM/NORTH_WEST_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_WEST_CORNER -> REGION_SHOAL_CAVE_INNER_ROOM/NORTH_WEST_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SHOAL_CAVE_INNER_ROOM/RARE_CANDY_PLATFORM -> REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/NORTH_WEST -> REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/EAST"), + can_strength + ) + set_rule( + get_entrance("REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/EAST -> REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/NORTH_WEST"), + can_strength + ) + + # Route 126 + set_rule( + get_entrance("REGION_ROUTE126/MAIN -> REGION_UNDERWATER_ROUTE126/MAIN"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE126/MAIN -> REGION_UNDERWATER_ROUTE126/SMALL_AREA_2"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE126/NEAR_ROUTE_124 -> REGION_UNDERWATER_ROUTE126/TUNNEL"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE126/NORTH_WEST_CORNER -> REGION_UNDERWATER_ROUTE126/TUNNEL"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE126/WEST -> REGION_UNDERWATER_ROUTE126/MAIN"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE126/WEST -> REGION_UNDERWATER_ROUTE126/SMALL_AREA_1"), + can_dive + ) + + # Sootopolis City + set_rule( + get_entrance("REGION_SOOTOPOLIS_CITY/WATER -> REGION_UNDERWATER_SOOTOPOLIS_CITY/MAIN"), + can_dive + ) + set_rule( + get_entrance("REGION_SOOTOPOLIS_CITY/EAST -> REGION_SOOTOPOLIS_CITY/WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SOOTOPOLIS_CITY/WEST -> REGION_SOOTOPOLIS_CITY/WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SOOTOPOLIS_CITY/ISLAND -> REGION_SOOTOPOLIS_CITY/WATER"), + can_surf + ) + set_rule( + get_entrance("MAP_SOOTOPOLIS_CITY:3/MAP_CAVE_OF_ORIGIN_ENTRANCE:0"), + lambda state: state.has("EVENT_RELEASE_KYOGRE", world.player) + ) + set_rule( + get_entrance("MAP_SOOTOPOLIS_CITY:2/MAP_SOOTOPOLIS_CITY_GYM_1F:0"), + lambda state: state.has("EVENT_WAKE_RAYQUAZA", world.player) + ) + set_rule( + get_location("NPC_GIFT_RECEIVED_HM07"), + lambda state: state.has("EVENT_WAKE_RAYQUAZA", world.player) + ) + + # Route 127 + set_rule( + get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/MAIN"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/TUNNEL"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/AREA_1"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/AREA_2"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/AREA_3"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE127/ENCLOSED_AREA -> REGION_UNDERWATER_ROUTE127/TUNNEL"), + can_dive + ) + + # Route 128 + set_rule( + get_entrance("REGION_ROUTE128/MAIN -> REGION_UNDERWATER_ROUTE128/MAIN"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE128/MAIN -> REGION_UNDERWATER_ROUTE128/AREA_1"), + can_dive + ) + set_rule( + get_entrance("REGION_ROUTE128/MAIN -> REGION_UNDERWATER_ROUTE128/AREA_2"), + can_dive + ) + + # Seafloor Cavern + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM1/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM1/NORTH"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM1/NORTH -> REGION_SEAFLOOR_CAVERN_ROOM1/SOUTH"), + can_strength + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_WEST"), + can_strength + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST"), + can_strength + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_EAST"), + can_rock_smash + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_EAST -> REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST"), + can_rock_smash + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_EAST"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_EAST"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM5/NORTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM5/EAST"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM5/EAST -> REGION_SEAFLOOR_CAVERN_ROOM5/NORTH_WEST"), + can_strength + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM5/NORTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM5/SOUTH_WEST"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM5/SOUTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM5/NORTH_WEST"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM6/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST"), + can_surf + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM6/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM7/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM7/NORTH"), + can_surf + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM7/NORTH -> REGION_SEAFLOOR_CAVERN_ROOM7/SOUTH"), + can_surf + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM8/NORTH -> REGION_SEAFLOOR_CAVERN_ROOM8/SOUTH"), + can_strength + ) + set_rule( + get_entrance("REGION_SEAFLOOR_CAVERN_ROOM8/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM8/NORTH"), + can_strength + ) + if "Seafloor Cavern Aqua Grunt" not in world.options.remove_roadblocks.value: + set_rule( + get_entrance("MAP_SEAFLOOR_CAVERN_ENTRANCE:1/MAP_SEAFLOOR_CAVERN_ROOM1:0"), + lambda state: state.has("EVENT_STEVEN_GIVES_DIVE", world.player) + ) + + # Pacifidlog Town + set_rule( + get_entrance("REGION_PACIFIDLOG_TOWN/MAIN -> REGION_ROUTE131/MAIN"), + can_surf + ) + set_rule( + get_entrance("REGION_PACIFIDLOG_TOWN/MAIN -> REGION_ROUTE132/EAST"), + can_surf + ) + + # Sky Pillar + set_rule( + get_entrance("MAP_SKY_PILLAR_OUTSIDE:1/MAP_SKY_PILLAR_1F:0"), + lambda state: state.has("EVENT_WALLACE_GOES_TO_SKY_PILLAR", world.player) + ) + # Sky Pillar does not require the mach bike until Rayquaza returns, which means the top + # is only logically locked behind the mach bike after the top has been reached already + # set_rule( + # get_entrance("REGION_SKY_PILLAR_2F/RIGHT -> REGION_SKY_PILLAR_2F/LEFT"), + # lambda state: has_mach_bike(state) + # ) + # set_rule( + # get_entrance("REGION_SKY_PILLAR_2F/LEFT -> REGION_SKY_PILLAR_2F/RIGHT"), + # lambda state: has_mach_bike(state) + # ) + # set_rule( + # get_entrance("REGION_SKY_PILLAR_4F/MAIN -> REGION_SKY_PILLAR_4F/ABOVE_3F_TOP_CENTER"), + # lambda state: has_mach_bike(state) + # ) + + # Route 134 + set_rule( + get_entrance("REGION_ROUTE134/MAIN -> REGION_UNDERWATER_ROUTE134/MAIN"), + can_dive + ) + + # Ever Grande City + set_rule( + get_entrance("REGION_EVER_GRANDE_CITY/SEA -> REGION_EVER_GRANDE_CITY/SOUTH"), + can_waterfall + ) + set_rule( + get_entrance("REGION_EVER_GRANDE_CITY/SOUTH -> REGION_EVER_GRANDE_CITY/SEA"), + can_surf + ) + + # Victory Road + set_rule( + get_entrance("REGION_VICTORY_ROAD_B1F/SOUTH_WEST_MAIN -> REGION_VICTORY_ROAD_B1F/SOUTH_WEST_LADDER_UP"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B1F/SOUTH_WEST_LADDER_UP -> REGION_VICTORY_ROAD_B1F/SOUTH_WEST_MAIN"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B1F/MAIN_UPPER -> REGION_VICTORY_ROAD_B1F/MAIN_LOWER_EAST"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B1F/MAIN_LOWER_EAST -> REGION_VICTORY_ROAD_B1F/MAIN_LOWER_WEST"), + can_rock_smash + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B1F/MAIN_LOWER_WEST -> REGION_VICTORY_ROAD_B1F/MAIN_LOWER_EAST"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B1F/MAIN_LOWER_WEST -> REGION_VICTORY_ROAD_B1F/MAIN_UPPER"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_WEST -> REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_WEST_ISLAND -> REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_EAST -> REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER -> REGION_VICTORY_ROAD_B2F/UPPER_WATER"), + can_waterfall + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER -> REGION_VICTORY_ROAD_B2F/UPPER_WATER"), + can_waterfall + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B2F/UPPER -> REGION_VICTORY_ROAD_B2F/UPPER_WATER"), + can_surf + ) + set_rule( + get_entrance("REGION_VICTORY_ROAD_B2F/UPPER -> REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER"), + can_surf + ) + + # Pokemon League + if world.options.elite_four_requirement == EliteFourRequirement.option_badges: + set_rule( + get_entrance("REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/MAIN -> REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/BEHIND_BADGE_CHECKERS"), + lambda state: state.has_group("Badges", world.player, world.options.elite_four_count.value) + ) + else: + set_rule( + get_entrance("REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/MAIN -> REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/BEHIND_BADGE_CHECKERS"), + lambda state: defeated_n_gym_leaders(state, world.options.elite_four_count.value) + ) + + # Battle Frontier + # set_rule( + # get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_WEST/DOCK -> REGION_LILYCOVE_CITY_HARBOR/MAIN"), + # lambda state: state.has("S.S. Ticket", world.player) and + # (state.has("EVENT_DEFEAT_CHAMPION", world.player) or world.options.enable_ferry.value == Toggle.option_true) + # ) + # set_rule( + # get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_WEST/DOCK -> REGION_SLATEPORT_CITY_HARBOR/MAIN"), + # lambda state: state.has("S.S. Ticket", world.player) and + # (state.has("EVENT_DEFEAT_CHAMPION", world.player) or world.options.enable_ferry.value == Toggle.option_true) + # ) + # set_rule( + # get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_WEST/CAVE_ENTRANCE -> REGION_BATTLE_FRONTIER_OUTSIDE_WEST/WATER"), + # can_surf + # ) + # set_rule( + # get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_EAST/MAIN -> REGION_BATTLE_FRONTIER_OUTSIDE_EAST/ABOVE_WATERFALL"), + # lambda state: state.has("Wailmer Pail", world.player) and can_surf(state) + # ) + # set_rule( + # get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_EAST/ABOVE_WATERFALL -> REGION_BATTLE_FRONTIER_OUTSIDE_EAST/MAIN"), + # lambda state: state.has("ITEM_WAILMER_PAIL", world.player) + # ) + # set_rule( + # get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_EAST/WATER -> REGION_BATTLE_FRONTIER_OUTSIDE_EAST/ABOVE_WATERFALL"), + # can_waterfall + # ) + + # Overworld Items + if world.options.overworld_items: + # Route 103 + set_rule( + get_location("ITEM_ROUTE_103_PP_UP"), + can_cut + ) + set_rule( + get_location("ITEM_ROUTE_103_GUARD_SPEC"), + can_cut + ) + + # Route 104 + set_rule( + get_location("ITEM_ROUTE_104_X_ACCURACY"), + lambda state: can_surf(state) or can_cut(state) + ) + set_rule( + get_location("ITEM_ROUTE_104_PP_UP"), + can_surf + ) + + # Route 117 + set_rule( + get_location("ITEM_ROUTE_117_REVIVE"), + can_cut + ) + + # Route 114 + set_rule( + get_location("ITEM_ROUTE_114_PROTEIN"), + can_rock_smash + ) + + # Safari Zone + set_rule( + get_location("ITEM_SAFARI_ZONE_NORTH_WEST_TM22"), + can_surf + ) + set_rule( + get_location("ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE"), + can_surf + ) + set_rule( + get_location("ITEM_SAFARI_ZONE_SOUTH_EAST_BIG_PEARL"), + can_surf + ) + + # Victory Road + set_rule( + get_location("ITEM_VICTORY_ROAD_B1F_FULL_RESTORE"), + lambda state: can_rock_smash(state) and can_strength(state) + ) + + # Hidden Items + if world.options.hidden_items: + # Route 120 + set_rule( + get_location("HIDDEN_ITEM_ROUTE_120_RARE_CANDY_1"), + can_cut + ) + + # Route 121 + set_rule( + get_location("HIDDEN_ITEM_ROUTE_121_NUGGET"), + can_cut + ) + + # NPC Gifts + if world.options.npc_gifts: + # Littleroot Town + set_rule( + get_location("NPC_GIFT_RECEIVED_AMULET_COIN"), + lambda state: state.has("EVENT_TALK_TO_MR_STONE", world.player) and state.has("Balance Badge", world.player) + ) + + # Petalburg City + set_rule( + get_location("NPC_GIFT_RECEIVED_TM36"), + lambda state: state.has("EVENT_DEFEAT_NORMAN", world.player) + ) + + # Route 104 + set_rule( + get_location("NPC_GIFT_RECEIVED_WHITE_HERB"), + lambda state: state.has("Dynamo Badge", world.player) and state.has("EVENT_MEET_FLOWER_SHOP_OWNER", world.player) + ) + + # Devon Corp + set_rule( + get_location("NPC_GIFT_RECEIVED_EXP_SHARE"), + lambda state: state.has("EVENT_DELIVER_LETTER", world.player) + ) + + # Slateport City + set_rule( + get_location("NPC_GIFT_RECEIVED_DEEP_SEA_TOOTH"), + lambda state: state.has("EVENT_AQUA_STEALS_SUBMARINE", world.player) + and state.has("Scanner", world.player) + and state.has("Mind Badge", world.player) + ) + set_rule( + get_location("NPC_GIFT_RECEIVED_DEEP_SEA_SCALE"), + lambda state: state.has("EVENT_AQUA_STEALS_SUBMARINE", world.player) + and state.has("Scanner", world.player) + and state.has("Mind Badge", world.player) + ) + + # Route 116 + set_rule( + get_location("NPC_GIFT_RECEIVED_REPEAT_BALL"), + lambda state: state.has("EVENT_RESCUE_CAPT_STERN", world.player) + ) + + # Mauville City + set_rule( + get_location("NPC_GIFT_GOT_TM24_FROM_WATTSON"), + lambda state: state.has("EVENT_DEFEAT_NORMAN", world.player) and state.has("EVENT_TURN_OFF_GENERATOR", world.player) + ) + set_rule( + get_location("NPC_GIFT_RECEIVED_COIN_CASE"), + lambda state: state.has("EVENT_BUY_HARBOR_MAIL", world.player) + ) + + # Fallarbor Town + set_rule( + get_location("NPC_GIFT_RECEIVED_TM27"), + lambda state: state.has("EVENT_RECOVER_METEORITE", world.player) and state.has("Meteorite", world.player) + ) + + # Fortree City + set_rule( + get_location("NPC_GIFT_RECEIVED_MENTAL_HERB"), + lambda state: state.has("EVENT_WINGULL_QUEST_2", world.player) + ) + + # Ferry Items + if world.options.enable_ferry: + set_rule( + get_location("NPC_GIFT_RECEIVED_SS_TICKET"), + lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) + ) + set_rule( + get_entrance("REGION_SLATEPORT_CITY_HARBOR/MAIN -> REGION_SS_TIDAL_CORRIDOR/MAIN"), + lambda state: state.has("S.S. Ticket", world.player) + ) + set_rule( + get_entrance("REGION_LILYCOVE_CITY_HARBOR/MAIN -> REGION_SS_TIDAL_CORRIDOR/MAIN"), + lambda state: state.has("S.S. Ticket", world.player) + ) + + # Add Itemfinder requirement to hidden items + if world.options.require_itemfinder: + for location in world.multiworld.get_locations(world.player): + if location.tags is not None and "HiddenItem" in location.tags: + add_rule( + location, + lambda state: state.has("Itemfinder", world.player) + ) + + # Add Flash requirements to dark caves + if world.options.require_flash: + # Granite Cave + add_rule( + get_entrance("MAP_GRANITE_CAVE_1F:2/MAP_GRANITE_CAVE_B1F:1"), + can_flash + ) + add_rule( + get_entrance("MAP_GRANITE_CAVE_B1F:3/MAP_GRANITE_CAVE_B2F:1"), + can_flash + ) + + # Victory Road + add_rule( + get_entrance("MAP_VICTORY_ROAD_1F:2/MAP_VICTORY_ROAD_B1F:5"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_1F:4/MAP_VICTORY_ROAD_B1F:4"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_1F:3/MAP_VICTORY_ROAD_B1F:2"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_B1F:3/MAP_VICTORY_ROAD_B2F:1"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_B1F:1/MAP_VICTORY_ROAD_B2F:2"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_B1F:6/MAP_VICTORY_ROAD_B2F:3"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_B1F:0/MAP_VICTORY_ROAD_B2F:0"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_B2F:3/MAP_VICTORY_ROAD_B1F:6"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_B2F:2/MAP_VICTORY_ROAD_B1F:1"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_B2F:0/MAP_VICTORY_ROAD_B1F:0"), + can_flash + ) + add_rule( + get_entrance("MAP_VICTORY_ROAD_B2F:1/MAP_VICTORY_ROAD_B1F:3"), + can_flash + ) diff --git a/worlds/pokemon_emerald/sanity_check.py b/worlds/pokemon_emerald/sanity_check.py new file mode 100644 index 000000000000..58f9b1ef4d86 --- /dev/null +++ b/worlds/pokemon_emerald/sanity_check.py @@ -0,0 +1,352 @@ +""" +Looks through data object to double-check it makes sense. Will fail for missing or duplicate definitions or +duplicate claims and give warnings for unused and unignored locations or warps. +""" +import logging +from typing import List + +from .data import data + + +_ignorable_locations = { + # Trick House + "HIDDEN_ITEM_TRICK_HOUSE_NUGGET", + "ITEM_TRICK_HOUSE_PUZZLE_1_ORANGE_MAIL", + "ITEM_TRICK_HOUSE_PUZZLE_2_HARBOR_MAIL", + "ITEM_TRICK_HOUSE_PUZZLE_2_WAVE_MAIL", + "ITEM_TRICK_HOUSE_PUZZLE_3_SHADOW_MAIL", + "ITEM_TRICK_HOUSE_PUZZLE_3_WOOD_MAIL", + "ITEM_TRICK_HOUSE_PUZZLE_4_MECH_MAIL", + "ITEM_TRICK_HOUSE_PUZZLE_6_GLITTER_MAIL", + "ITEM_TRICK_HOUSE_PUZZLE_7_TROPIC_MAIL", + "ITEM_TRICK_HOUSE_PUZZLE_8_BEAD_MAIL", + + # Battle Frontier + "ITEM_ARTISAN_CAVE_1F_CARBOS", + "ITEM_ARTISAN_CAVE_B1F_HP_UP", + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_CALCIUM", + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_IRON", + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_PROTEIN", + "HIDDEN_ITEM_ARTISAN_CAVE_B1F_ZINC", + + # Event islands + "HIDDEN_ITEM_NAVEL_ROCK_TOP_SACRED_ASH" +} + +_ignorable_warps = { + # Trick House + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE2:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE2:2/MAP_ROUTE110_TRICK_HOUSE_END:0!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE3:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE3:2/MAP_ROUTE110_TRICK_HOUSE_END:0!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE4:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE4:2/MAP_ROUTE110_TRICK_HOUSE_END:0!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE5:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE5:2/MAP_ROUTE110_TRICK_HOUSE_END:0!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE6:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE6:2/MAP_ROUTE110_TRICK_HOUSE_END:0!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:10/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:9", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:11/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:12", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:12/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:11", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:2/MAP_ROUTE110_TRICK_HOUSE_END:0!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:3/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:4", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:4/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:3", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:5/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:6", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:6/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:5", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:7/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:8", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:8/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:7", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:9/MAP_ROUTE110_TRICK_HOUSE_PUZZLE7:10", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE8:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2!", + "MAP_ROUTE110_TRICK_HOUSE_PUZZLE8:2/MAP_ROUTE110_TRICK_HOUSE_END:0!", + + # Department store elevator + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0,1/MAP_DYNAMIC:-1!", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F:3/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F:2/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!", + "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F:1/MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR:0!", + + # Intro truck + "MAP_INSIDE_OF_TRUCK:0,1,2/MAP_DYNAMIC:-1!", + + # Battle Frontier + "MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:1", + "MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1!", + "MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1", + "MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1!", + "MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:2", + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:2", + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:0,1/MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:2", + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0", + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:3/MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM:0!", + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:2", + "MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR:0", + "MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY:0,1,2/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:0", + "MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:3", + "MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM:0,1/MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:2", + "MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:0", + "MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:2/MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM:0", + "MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER:0,1,2/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:6", + "MAP_BATTLE_FRONTIER_LOUNGE1:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:5", + "MAP_BATTLE_FRONTIER_LOUNGE2:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:3", + "MAP_BATTLE_FRONTIER_LOUNGE3:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:9", + "MAP_BATTLE_FRONTIER_LOUNGE4:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:6", + "MAP_BATTLE_FRONTIER_LOUNGE5:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:7", + "MAP_BATTLE_FRONTIER_LOUNGE6:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:8", + "MAP_BATTLE_FRONTIER_LOUNGE7:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:7", + "MAP_BATTLE_FRONTIER_LOUNGE8:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:10", + "MAP_BATTLE_FRONTIER_LOUNGE9:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:11", + "MAP_BATTLE_FRONTIER_MART:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:4", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:0/MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:1/MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:10/MAP_BATTLE_FRONTIER_LOUNGE8:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:11/MAP_BATTLE_FRONTIER_LOUNGE9:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:12/MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:13/MAP_ARTISAN_CAVE_1F:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:2/MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:3/MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:4/MAP_BATTLE_FRONTIER_RANKING_HALL:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:5/MAP_BATTLE_FRONTIER_LOUNGE1:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:6/MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:7/MAP_BATTLE_FRONTIER_LOUNGE5:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:8/MAP_BATTLE_FRONTIER_LOUNGE6:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_EAST:9/MAP_BATTLE_FRONTIER_LOUNGE3:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:0/MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1/MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:10/MAP_ARTISAN_CAVE_B1F:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:2/MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:3/MAP_BATTLE_FRONTIER_LOUNGE2:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:4/MAP_BATTLE_FRONTIER_MART:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:5/MAP_BATTLE_FRONTIER_SCOTTS_HOUSE:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:6/MAP_BATTLE_FRONTIER_LOUNGE4:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:7/MAP_BATTLE_FRONTIER_LOUNGE7:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:8/MAP_BATTLE_FRONTIER_RECEPTION_GATE:0", + "MAP_BATTLE_FRONTIER_OUTSIDE_WEST:9/MAP_BATTLE_FRONTIER_RECEPTION_GATE:1", + "MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:12", + "MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:2/MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:0", + "MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:0/MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F:2", + "MAP_BATTLE_FRONTIER_RANKING_HALL:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:4", + "MAP_BATTLE_FRONTIER_RECEPTION_GATE:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:8", + "MAP_BATTLE_FRONTIER_RECEPTION_GATE:1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:9", + "MAP_BATTLE_FRONTIER_SCOTTS_HOUSE:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:5", + + "MAP_ARTISAN_CAVE_1F:0/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:13", + "MAP_ARTISAN_CAVE_1F:1/MAP_ARTISAN_CAVE_B1F:1", + "MAP_ARTISAN_CAVE_B1F:0/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:10", + "MAP_ARTISAN_CAVE_B1F:1/MAP_ARTISAN_CAVE_1F:1", + + # Terra Cave and Marine Cave + "MAP_TERRA_CAVE_ENTRANCE:0/MAP_DYNAMIC:-1!", + "MAP_TERRA_CAVE_END:0/MAP_TERRA_CAVE_ENTRANCE:1", + "MAP_TERRA_CAVE_ENTRANCE:1/MAP_TERRA_CAVE_END:0", + "MAP_ROUTE113:1/MAP_TERRA_CAVE_ENTRANCE:0!", + "MAP_ROUTE113:2/MAP_TERRA_CAVE_ENTRANCE:0!", + "MAP_ROUTE114:3/MAP_TERRA_CAVE_ENTRANCE:0!", + "MAP_ROUTE114:4/MAP_TERRA_CAVE_ENTRANCE:0!", + "MAP_ROUTE115:1/MAP_TERRA_CAVE_ENTRANCE:0!", + "MAP_ROUTE115:2/MAP_TERRA_CAVE_ENTRANCE:0!", + "MAP_ROUTE116:3/MAP_TERRA_CAVE_ENTRANCE:0!", + "MAP_ROUTE116:4/MAP_TERRA_CAVE_ENTRANCE:0!", + "MAP_ROUTE118:0/MAP_TERRA_CAVE_ENTRANCE:0!", + "MAP_ROUTE118:1/MAP_TERRA_CAVE_ENTRANCE:0!", + + "MAP_UNDERWATER_MARINE_CAVE:0/MAP_DYNAMIC:-1!", + "MAP_MARINE_CAVE_END:0/MAP_MARINE_CAVE_ENTRANCE:0", + "MAP_MARINE_CAVE_ENTRANCE:0/MAP_MARINE_CAVE_END:0", + "MAP_UNDERWATER_ROUTE105:0/MAP_UNDERWATER_MARINE_CAVE:0!", + "MAP_UNDERWATER_ROUTE105:1/MAP_UNDERWATER_MARINE_CAVE:0!", + "MAP_UNDERWATER_ROUTE125:0/MAP_UNDERWATER_MARINE_CAVE:0!", + "MAP_UNDERWATER_ROUTE125:1/MAP_UNDERWATER_MARINE_CAVE:0!", + "MAP_UNDERWATER_ROUTE127:0/MAP_UNDERWATER_MARINE_CAVE:0!", + "MAP_UNDERWATER_ROUTE127:1/MAP_UNDERWATER_MARINE_CAVE:0!", + "MAP_UNDERWATER_ROUTE129:0/MAP_UNDERWATER_MARINE_CAVE:0!", + "MAP_UNDERWATER_ROUTE129:1/MAP_UNDERWATER_MARINE_CAVE:0!", + + # Event islands + "MAP_BIRTH_ISLAND_EXTERIOR:0/MAP_BIRTH_ISLAND_HARBOR:0", + "MAP_BIRTH_ISLAND_HARBOR:0/MAP_BIRTH_ISLAND_EXTERIOR:0", + + "MAP_FARAWAY_ISLAND_ENTRANCE:0,1/MAP_FARAWAY_ISLAND_INTERIOR:0,1", + "MAP_FARAWAY_ISLAND_INTERIOR:0,1/MAP_FARAWAY_ISLAND_ENTRANCE:0,1", + + "MAP_SOUTHERN_ISLAND_EXTERIOR:0,1/MAP_SOUTHERN_ISLAND_INTERIOR:0,1", + "MAP_SOUTHERN_ISLAND_INTERIOR:0,1/MAP_SOUTHERN_ISLAND_EXTERIOR:0,1", + + "MAP_NAVEL_ROCK_B1F:0/MAP_NAVEL_ROCK_ENTRANCE:0", + "MAP_NAVEL_ROCK_B1F:1/MAP_NAVEL_ROCK_FORK:1", + "MAP_NAVEL_ROCK_BOTTOM:0/MAP_NAVEL_ROCK_DOWN11:0", + "MAP_NAVEL_ROCK_DOWN01:0/MAP_NAVEL_ROCK_FORK:2", + "MAP_NAVEL_ROCK_DOWN01:1/MAP_NAVEL_ROCK_DOWN02:0", + "MAP_NAVEL_ROCK_DOWN02:0/MAP_NAVEL_ROCK_DOWN01:1", + "MAP_NAVEL_ROCK_DOWN02:1/MAP_NAVEL_ROCK_DOWN03:0", + "MAP_NAVEL_ROCK_DOWN03:0/MAP_NAVEL_ROCK_DOWN02:1", + "MAP_NAVEL_ROCK_DOWN03:1/MAP_NAVEL_ROCK_DOWN04:0", + "MAP_NAVEL_ROCK_DOWN04:0/MAP_NAVEL_ROCK_DOWN03:1", + "MAP_NAVEL_ROCK_DOWN04:1/MAP_NAVEL_ROCK_DOWN05:0", + "MAP_NAVEL_ROCK_DOWN05:0/MAP_NAVEL_ROCK_DOWN04:1", + "MAP_NAVEL_ROCK_DOWN05:1/MAP_NAVEL_ROCK_DOWN06:0", + "MAP_NAVEL_ROCK_DOWN06:0/MAP_NAVEL_ROCK_DOWN05:1", + "MAP_NAVEL_ROCK_DOWN06:1/MAP_NAVEL_ROCK_DOWN07:0", + "MAP_NAVEL_ROCK_DOWN07:0/MAP_NAVEL_ROCK_DOWN06:1", + "MAP_NAVEL_ROCK_DOWN07:1/MAP_NAVEL_ROCK_DOWN08:0", + "MAP_NAVEL_ROCK_DOWN08:0/MAP_NAVEL_ROCK_DOWN07:1", + "MAP_NAVEL_ROCK_DOWN08:1/MAP_NAVEL_ROCK_DOWN09:0", + "MAP_NAVEL_ROCK_DOWN09:0/MAP_NAVEL_ROCK_DOWN08:1", + "MAP_NAVEL_ROCK_DOWN09:1/MAP_NAVEL_ROCK_DOWN10:0", + "MAP_NAVEL_ROCK_DOWN10:0/MAP_NAVEL_ROCK_DOWN09:1", + "MAP_NAVEL_ROCK_DOWN10:1/MAP_NAVEL_ROCK_DOWN11:1", + "MAP_NAVEL_ROCK_DOWN11:0/MAP_NAVEL_ROCK_BOTTOM:0", + "MAP_NAVEL_ROCK_DOWN11:1/MAP_NAVEL_ROCK_DOWN10:1", + "MAP_NAVEL_ROCK_ENTRANCE:0/MAP_NAVEL_ROCK_B1F:0", + "MAP_NAVEL_ROCK_ENTRANCE:1/MAP_NAVEL_ROCK_EXTERIOR:1", + "MAP_NAVEL_ROCK_EXTERIOR:0/MAP_NAVEL_ROCK_HARBOR:0", + "MAP_NAVEL_ROCK_EXTERIOR:1/MAP_NAVEL_ROCK_ENTRANCE:1", + "MAP_NAVEL_ROCK_FORK:0/MAP_NAVEL_ROCK_UP1:0", + "MAP_NAVEL_ROCK_FORK:1/MAP_NAVEL_ROCK_B1F:1", + "MAP_NAVEL_ROCK_FORK:2/MAP_NAVEL_ROCK_DOWN01:0", + "MAP_NAVEL_ROCK_HARBOR:0/MAP_NAVEL_ROCK_EXTERIOR:0", + "MAP_NAVEL_ROCK_TOP:0/MAP_NAVEL_ROCK_UP4:1", + "MAP_NAVEL_ROCK_UP1:0/MAP_NAVEL_ROCK_FORK:0", + "MAP_NAVEL_ROCK_UP1:1/MAP_NAVEL_ROCK_UP2:0", + "MAP_NAVEL_ROCK_UP2:0/MAP_NAVEL_ROCK_UP1:1", + "MAP_NAVEL_ROCK_UP2:1/MAP_NAVEL_ROCK_UP3:0", + "MAP_NAVEL_ROCK_UP3:0/MAP_NAVEL_ROCK_UP2:1", + "MAP_NAVEL_ROCK_UP3:1/MAP_NAVEL_ROCK_UP4:0", + "MAP_NAVEL_ROCK_UP4:0/MAP_NAVEL_ROCK_UP3:1", + "MAP_NAVEL_ROCK_UP4:1/MAP_NAVEL_ROCK_TOP:0", + + # Secret bases + "MAP_SECRET_BASE_BROWN_CAVE1:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_BROWN_CAVE2:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_BROWN_CAVE3:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_BROWN_CAVE4:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_BLUE_CAVE1:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_BLUE_CAVE2:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_BLUE_CAVE3:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_BLUE_CAVE4:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_YELLOW_CAVE1:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_YELLOW_CAVE2:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_YELLOW_CAVE3:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_YELLOW_CAVE4:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_RED_CAVE1:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_RED_CAVE2:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_RED_CAVE3:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_RED_CAVE4:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_SHRUB1:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_SHRUB2:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_SHRUB3:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_SHRUB4:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_TREE1:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_TREE2:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_TREE3:0/MAP_DYNAMIC:-2!", + "MAP_SECRET_BASE_TREE4:0/MAP_DYNAMIC:-2!", + + # Multiplayer rooms + "MAP_RECORD_CORNER:0,1,2,3/MAP_DYNAMIC:-1!", + + "MAP_UNION_ROOM:0,1/MAP_DYNAMIC:-1!", + "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_PETALBURG_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:1/MAP_UNION_ROOM:0!", + "MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_OLDALE_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_FORTREE_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + "MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:1/MAP_UNION_ROOM:0!", + + "MAP_TRADE_CENTER:0,1/MAP_DYNAMIC:-1!", + "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_MAUVILLE_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_PETALBURG_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F:2/MAP_TRADE_CENTER:0!", + "MAP_DEWFORD_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_OLDALE_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_SLATEPORT_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_RUSTBORO_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_LILYCOVE_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_FORTREE_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + "MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F:2/MAP_TRADE_CENTER:0!", + + "MAP_BATTLE_COLOSSEUM_2P:0,1/MAP_DYNAMIC:-1!", + "MAP_BATTLE_COLOSSEUM_4P:0,1,2,3/MAP_DYNAMIC:-1!", + + # Unused content + "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1:0/MAP_CAVE_OF_ORIGIN_1F:1!", + "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1:1/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:0", + "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:0/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1:1", + "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:1/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3:0", + "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3:0/MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2:1", + "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3:1/MAP_CAVE_OF_ORIGIN_B1F:0!", + "MAP_LILYCOVE_CITY_UNUSED_MART:0,1/MAP_LILYCOVE_CITY:0!" +} + + +def validate_regions() -> bool: + error_messages: List[str] = [] + warn_messages: List[str] = [] + failed = False + + def error(message: str) -> None: + nonlocal failed + failed = True + error_messages.append(message) + + def warn(message: str) -> None: + warn_messages.append(message) + + # Check regions + for name, region in data.regions.items(): + for region_exit in region.exits: + if region_exit not in data.regions: + error(f"Pokemon Emerald: Region [{region_exit}] referenced by [{name}] was not defined") + + # Check warps + for warp_source, warp_dest in data.warp_map.items(): + if warp_source in _ignorable_warps: + continue + + if warp_dest is None: + error(f"Pokemon Emerald: Warp [{warp_source}] has no destination") + elif not data.warps[warp_dest].connects_to(data.warps[warp_source]) and not data.warps[warp_source].is_one_way: + error(f"Pokemon Emerald: Warp [{warp_source}] appears to be a one-way warp but was not marked as one") + + # Check locations + claimed_locations = [location for region in data.regions.values() for location in region.locations] + claimed_locations_set = set() + for location_name in claimed_locations: + if location_name in claimed_locations_set: + error(f"Pokemon Emerald: Location [{location_name}] was claimed by multiple regions") + claimed_locations_set.add(location_name) + + for location_name in data.locations: + if location_name not in claimed_locations and location_name not in _ignorable_locations: + warn(f"Pokemon Emerald: Location [{location_name}] was not claimed by any region") + + warn_messages.sort() + error_messages.sort() + + for message in warn_messages: + logging.warning(message) + for message in error_messages: + logging.error(message) + + logging.debug("Pokemon Emerald sanity check done. Found %s errors and %s warnings.", len(error_messages), len(warn_messages)) + + return not failed diff --git a/worlds/pokemon_emerald/test/__init__.py b/worlds/pokemon_emerald/test/__init__.py new file mode 100644 index 000000000000..84ce64003d57 --- /dev/null +++ b/worlds/pokemon_emerald/test/__init__.py @@ -0,0 +1,5 @@ +from test.TestBase import WorldTestBase + + +class PokemonEmeraldTestBase(WorldTestBase): + game = "Pokemon Emerald" diff --git a/worlds/pokemon_emerald/test/test_accessibility.py b/worlds/pokemon_emerald/test/test_accessibility.py new file mode 100644 index 000000000000..81e974d58afd --- /dev/null +++ b/worlds/pokemon_emerald/test/test_accessibility.py @@ -0,0 +1,178 @@ +from Options import Toggle + +from . import PokemonEmeraldTestBase +from ..util import location_name_to_label +from ..options import NormanRequirement + + +class TestBasic(PokemonEmeraldTestBase): + def test_always_accessible(self) -> None: + self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_ROUTE_102_POTION"))) + self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_ROUTE_115_SUPER_POTION"))) + + +class TestSurf(PokemonEmeraldTestBase): + options = { + "npc_gifts": Toggle.option_true + } + + def test_inaccessible_with_no_surf(self) -> None: + self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_PETALBURG_CITY_ETHER"))) + self.assertFalse(self.can_reach_location(location_name_to_label("NPC_GIFT_RECEIVED_SOOTHE_BELL"))) + self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_LILYCOVE_CITY_MAX_REPEL"))) + self.assertFalse(self.can_reach_entrance("REGION_ROUTE118/WATER -> REGION_ROUTE118/EAST")) + self.assertFalse(self.can_reach_entrance("REGION_ROUTE119/UPPER -> REGION_FORTREE_CITY/MAIN")) + self.assertFalse(self.can_reach_entrance("MAP_FORTREE_CITY:3/MAP_FORTREE_CITY_MART:0")) + + def test_accessible_with_surf_only(self) -> None: + self.collect_by_name(["HM03 Surf", "Balance Badge"]) + self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_PETALBURG_CITY_ETHER"))) + self.assertTrue(self.can_reach_location(location_name_to_label("NPC_GIFT_RECEIVED_SOOTHE_BELL"))) + self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_LILYCOVE_CITY_MAX_REPEL"))) + self.assertTrue(self.can_reach_entrance("REGION_ROUTE118/WATER -> REGION_ROUTE118/EAST")) + self.assertTrue(self.can_reach_entrance("REGION_ROUTE119/UPPER -> REGION_FORTREE_CITY/MAIN")) + self.assertTrue(self.can_reach_entrance("MAP_FORTREE_CITY:3/MAP_FORTREE_CITY_MART:0")) + self.assertTrue(self.can_reach_location(location_name_to_label("BADGE_4"))) + + +class TestFreeFly(PokemonEmeraldTestBase): + options = { + "npc_gifts": Toggle.option_true, + "free_fly_location": Toggle.option_true + } + + def setUp(self) -> None: + super(PokemonEmeraldTestBase, self).setUp() + + # Swap free fly to Sootopolis + free_fly_location = self.multiworld.get_location("FREE_FLY_LOCATION", 1) + free_fly_location.item = None + free_fly_location.place_locked_item(self.multiworld.worlds[1].create_event("EVENT_VISITED_SOOTOPOLIS_CITY")) + + def test_sootopolis_gift_inaccessible_with_no_surf(self) -> None: + self.collect_by_name(["HM02 Fly", "Feather Badge"]) + self.assertFalse(self.can_reach_location(location_name_to_label("NPC_GIFT_RECEIVED_TM31"))) + + def test_sootopolis_gift_accessible_with_surf(self) -> None: + self.collect_by_name(["HM03 Surf", "Balance Badge", "HM02 Fly", "Feather Badge"]) + self.assertTrue(self.can_reach_location(location_name_to_label("NPC_GIFT_RECEIVED_TM31"))) + + +class TestFerry(PokemonEmeraldTestBase): + options = { + "npc_gifts": Toggle.option_true, + "enable_ferry": Toggle.option_true + } + + def test_inaccessible_with_no_items(self) -> None: + self.assertFalse(self.can_reach_location(location_name_to_label("NPC_GIFT_RECEIVED_SOOTHE_BELL"))) + self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_LILYCOVE_CITY_MAX_REPEL"))) + + def test_inaccessible_with_only_slateport_access(self) -> None: + self.collect_by_name(["HM06 Rock Smash", "Dynamo Badge", "Acro Bike"]) + self.assertTrue(self.can_reach_location(location_name_to_label("NPC_GIFT_RECEIVED_SOOTHE_BELL"))) + self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_LILYCOVE_CITY_MAX_REPEL"))) + + def test_accessible_with_slateport_access_and_ticket(self) -> None: + self.collect_by_name(["HM06 Rock Smash", "Dynamo Badge", "Acro Bike", "S.S. Ticket"]) + self.assertTrue(self.can_reach_location(location_name_to_label("NPC_GIFT_RECEIVED_SOOTHE_BELL"))) + self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_LILYCOVE_CITY_MAX_REPEL"))) + + +class TestExtraBouldersOn(PokemonEmeraldTestBase): + options = { + "extra_boulders": Toggle.option_true + } + + def test_inaccessible_with_no_items(self) -> None: + self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_ROUTE_115_PP_UP"))) + + def test_inaccessible_with_surf_only(self) -> None: + self.collect_by_name(["HM03 Surf", "Balance Badge"]) + self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_ROUTE_115_PP_UP"))) + + def test_accessible_with_surf_and_strength(self) -> None: + self.collect_by_name(["HM03 Surf", "Balance Badge", "HM04 Strength", "Heat Badge"]) + self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_ROUTE_115_PP_UP"))) + + +class TestExtraBouldersOff(PokemonEmeraldTestBase): + options = { + "extra_boulders": Toggle.option_false + } + + def test_inaccessible_with_no_items(self) -> None: + self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_ROUTE_115_PP_UP"))) + + def test_accessible_with_surf_only(self) -> None: + self.collect_by_name(["HM03 Surf", "Balance Badge"]) + self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_ROUTE_115_PP_UP"))) + + +class TestNormanRequirement1(PokemonEmeraldTestBase): + options = { + "norman_requirement": NormanRequirement.option_badges, + "norman_count": 0 + } + + def test_accessible_with_no_items(self) -> None: + self.assertTrue(self.can_reach_location(location_name_to_label("BADGE_5"))) + + +class TestNormanRequirement2(PokemonEmeraldTestBase): + options = { + "norman_requirement": NormanRequirement.option_badges, + "norman_count": 4 + } + + def test_inaccessible_with_no_items(self) -> None: + self.assertFalse(self.can_reach_location(location_name_to_label("BADGE_5"))) + + def test_accessible_with_enough_badges(self) -> None: + self.collect_by_name(["Stone Badge", "Knuckle Badge", "Feather Badge", "Balance Badge"]) + self.assertTrue(self.can_reach_location(location_name_to_label("BADGE_5"))) + + +class TestNormanRequirement3(PokemonEmeraldTestBase): + options = { + "norman_requirement": NormanRequirement.option_gyms, + "norman_count": 0 + } + + def test_accessible_with_no_items(self) -> None: + self.assertTrue(self.can_reach_location(location_name_to_label("BADGE_5"))) + + +class TestNormanRequirement4(PokemonEmeraldTestBase): + options = { + "norman_requirement": NormanRequirement.option_gyms, + "norman_count": 4 + } + + def test_inaccessible_with_no_items(self) -> None: + self.assertFalse(self.can_reach_location(location_name_to_label("BADGE_5"))) + + def test_accessible_with_reachable_gyms(self) -> None: + self.collect_by_name(["HM03 Surf", "Balance Badge"]) # Reaches Roxanne, Brawley, Wattson, and Flannery + self.assertTrue(self.can_reach_location(location_name_to_label("BADGE_5"))) + + +class TestVictoryRoad(PokemonEmeraldTestBase): + options = { + "elite_four_requirement": NormanRequirement.option_badges, + "elite_four_count": 0, + "remove_roadblocks": {"Lilycove City Wailmer"} + } + + def test_accessible_with_specific_hms(self) -> None: + self.assertFalse(self.can_reach_location("EVENT_DEFEAT_CHAMPION")) + self.collect_by_name(["HM03 Surf", "Balance Badge"]) + self.assertFalse(self.can_reach_location("EVENT_DEFEAT_CHAMPION")) + self.collect_by_name(["HM07 Waterfall", "Rain Badge"]) + self.assertFalse(self.can_reach_location("EVENT_DEFEAT_CHAMPION")) + self.collect_by_name(["HM04 Strength", "Heat Badge"]) + self.assertFalse(self.can_reach_location("EVENT_DEFEAT_CHAMPION")) + self.collect_by_name(["HM06 Rock Smash", "Dynamo Badge"]) + self.assertFalse(self.can_reach_location("EVENT_DEFEAT_CHAMPION")) + self.collect_by_name(["HM05 Flash", "Knuckle Badge"]) + self.assertTrue(self.can_reach_location("EVENT_DEFEAT_CHAMPION")) diff --git a/worlds/pokemon_emerald/test/test_warps.py b/worlds/pokemon_emerald/test/test_warps.py new file mode 100644 index 000000000000..75a2417dfbe6 --- /dev/null +++ b/worlds/pokemon_emerald/test/test_warps.py @@ -0,0 +1,21 @@ +from test.TestBase import TestBase +from ..data import Warp + + +class TestWarps(TestBase): + def test_warps_connect_ltr(self) -> None: + # 2-way + self.assertTrue(Warp("FAKE_MAP_A:0/FAKE_MAP_B:0").connects_to(Warp("FAKE_MAP_B:0/FAKE_MAP_A:0"))) + self.assertTrue(Warp("FAKE_MAP_A:0/FAKE_MAP_B:2").connects_to(Warp("FAKE_MAP_B:2/FAKE_MAP_A:0"))) + self.assertTrue(Warp("FAKE_MAP_A:0,1/FAKE_MAP_B:2").connects_to(Warp("FAKE_MAP_B:2/FAKE_MAP_A:0"))) + self.assertTrue(Warp("FAKE_MAP_A:0/FAKE_MAP_B:2").connects_to(Warp("FAKE_MAP_B:2,3/FAKE_MAP_A:0"))) + + # 1-way + self.assertTrue(Warp("FAKE_MAP_A:0/FAKE_MAP_B:2!").connects_to(Warp("FAKE_MAP_B:2/FAKE_MAP_A:3"))) + self.assertTrue(Warp("FAKE_MAP_A:0,1/FAKE_MAP_B:2!").connects_to(Warp("FAKE_MAP_B:2/FAKE_MAP_A:3"))) + self.assertTrue(Warp("FAKE_MAP_A:0/FAKE_MAP_B:2!").connects_to(Warp("FAKE_MAP_B:2,3/FAKE_MAP_A:3"))) + + # Invalid + self.assertFalse(Warp("FAKE_MAP_A:0/FAKE_MAP_B:2").connects_to(Warp("FAKE_MAP_B:4/FAKE_MAP_A:0"))) + self.assertFalse(Warp("FAKE_MAP_A:0,4/FAKE_MAP_B:2").connects_to(Warp("FAKE_MAP_B:4/FAKE_MAP_A:0"))) + self.assertFalse(Warp("FAKE_MAP_A:0,4/FAKE_MAP_B:2").connects_to(Warp("FAKE_MAP_C:2/FAKE_MAP_A:0"))) diff --git a/worlds/pokemon_emerald/util.py b/worlds/pokemon_emerald/util.py new file mode 100644 index 000000000000..781cfd47bc9d --- /dev/null +++ b/worlds/pokemon_emerald/util.py @@ -0,0 +1,19 @@ +from typing import List + +from .data import data + + +def location_name_to_label(name: str) -> str: + return data.locations[name].label + + +def int_to_bool_array(num: int) -> List[bool]: + binary_string = format(num, '064b') + bool_array = [bit == '1' for bit in reversed(binary_string)] + return bool_array + + +def bool_array_to_int(bool_array: List[bool]) -> int: + binary_string = ''.join(['1' if bit else '0' for bit in reversed(bool_array)]) + num = int(binary_string, 2) + return num diff --git a/worlds/raft/__init__.py b/worlds/raft/__init__.py index fec60c3bd51b..8e4eda09e10f 100644 --- a/worlds/raft/__init__.py +++ b/worlds/raft/__init__.py @@ -1,5 +1,4 @@ import typing -import random from .Locations import location_table, lookup_name_to_id as locations_lookup_name_to_id from .Items import (createResourcePackName, item_table, progressive_table, progressive_item_list, @@ -100,7 +99,7 @@ def create_items(self): extraItemNamePool.append(item["name"]) if (len(extraItemNamePool) > 0): - for randomItem in random.choices(extraItemNamePool, k=extras): + for randomItem in self.random.choices(extraItemNamePool, k=extras): raft_item = self.create_item_replaceAsNecessary(randomItem) pool.append(raft_item) @@ -194,7 +193,7 @@ def pre_fill(self): previousLocation = "RadioTower" while (len(availableLocationList) > 0): if (len(availableLocationList) > 1): - currentLocation = availableLocationList[random.randint(0, len(availableLocationList) - 2)] + currentLocation = availableLocationList[self.random.randint(0, len(availableLocationList) - 2)] else: currentLocation = availableLocationList[0] # Utopia (only one left in list) availableLocationList.remove(currentLocation) @@ -212,7 +211,7 @@ def setLocationItem(self, location: str, itemName: str): def setLocationItemFromRegion(self, region: str, itemName: str): itemToUse = next(filter(lambda itm: itm.name == itemName, self.multiworld.raft_frequencyItemsPerPlayer[self.player])) self.multiworld.raft_frequencyItemsPerPlayer[self.player].remove(itemToUse) - location = random.choice(list(loc for loc in location_table if loc["region"] == region)) + location = self.random.choice(list(loc for loc in location_table if loc["region"] == region)) self.multiworld.get_location(location["name"], self.player).place_locked_item(itemToUse) def fill_slot_data(self): diff --git a/worlds/sc2wol/Client.py b/worlds/sc2wol/Client.py index a9bb826b7447..3dbd2047debd 100644 --- a/worlds/sc2wol/Client.py +++ b/worlds/sc2wol/Client.py @@ -9,6 +9,7 @@ import os.path import re import sys +import tempfile import typing import queue import zipfile @@ -286,6 +287,8 @@ async def server_auth(self, password_requested: bool = False): await super(SC2Context, self).server_auth(password_requested) await self.get_username() await self.send_connect() + if self.ui: + self.ui.first_check = True def on_package(self, cmd: str, args: dict): if cmd in {"Connected"}: @@ -1166,10 +1169,12 @@ def download_latest_release_zip(owner: str, repo: str, api_version: str, metadat r2 = requests.get(download_url, headers=headers) if r2.status_code == 200 and zipfile.is_zipfile(io.BytesIO(r2.content)): - with open(f"{repo}.zip", "wb") as fh: + tempdir = tempfile.gettempdir() + file = tempdir + os.sep + f"{repo}.zip" + with open(file, "wb") as fh: fh.write(r2.content) sc2_logger.info(f"Successfully downloaded {repo}.zip.") - return f"{repo}.zip", latest_metadata + return file, latest_metadata else: sc2_logger.warning(f"Status code: {r2.status_code}") sc2_logger.warning("Download failed.") diff --git a/worlds/sc2wol/Locations.py b/worlds/sc2wol/Locations.py index ae31fa8eaadd..fba7051337df 100644 --- a/worlds/sc2wol/Locations.py +++ b/worlds/sc2wol/Locations.py @@ -68,10 +68,10 @@ def get_locations(multiworld: Optional[MultiWorld], player: Optional[int]) -> Tu lambda state: state._sc2wol_has_common_unit(multiworld, player) and (logic_level > 0 and state._sc2wol_has_anti_air(multiworld, player) or state._sc2wol_has_competent_anti_air(multiworld, player))), - LocationData("Evacuation", "Evacuation: First Chrysalis", SC2WOL_LOC_ID_OFFSET + 401, LocationType.BONUS), - LocationData("Evacuation", "Evacuation: Second Chrysalis", SC2WOL_LOC_ID_OFFSET + 402, LocationType.BONUS, + LocationData("Evacuation", "Evacuation: North Chrysalis", SC2WOL_LOC_ID_OFFSET + 401, LocationType.BONUS), + LocationData("Evacuation", "Evacuation: West Chrysalis", SC2WOL_LOC_ID_OFFSET + 402, LocationType.BONUS, lambda state: state._sc2wol_has_common_unit(multiworld, player)), - LocationData("Evacuation", "Evacuation: Third Chrysalis", SC2WOL_LOC_ID_OFFSET + 403, LocationType.BONUS, + LocationData("Evacuation", "Evacuation: East Chrysalis", SC2WOL_LOC_ID_OFFSET + 403, LocationType.BONUS, lambda state: state._sc2wol_has_common_unit(multiworld, player)), LocationData("Evacuation", "Evacuation: Reach Hanson", SC2WOL_LOC_ID_OFFSET + 404, LocationType.MISSION_PROGRESS), LocationData("Evacuation", "Evacuation: Secret Resource Stash", SC2WOL_LOC_ID_OFFSET + 405, LocationType.BONUS), @@ -419,7 +419,7 @@ def get_locations(multiworld: Optional[MultiWorld], player: Optional[int]) -> Tu lambda state: state._sc2wol_has_protoss_medium_units(multiworld, player)), LocationData("A Sinister Turn", "A Sinister Turn: Northeast Base", SC2WOL_LOC_ID_OFFSET + 2304, LocationType.MISSION_PROGRESS, lambda state: state._sc2wol_has_protoss_medium_units(multiworld, player)), - LocationData("A Sinister Turn", "A Sinister Turn: Southeast Base", SC2WOL_LOC_ID_OFFSET + 2305, LocationType.MISSION_PROGRESS, + LocationData("A Sinister Turn", "A Sinister Turn: Southwest Base", SC2WOL_LOC_ID_OFFSET + 2305, LocationType.MISSION_PROGRESS, lambda state: state._sc2wol_has_protoss_medium_units(multiworld, player)), LocationData("A Sinister Turn", "A Sinister Turn: Maar", SC2WOL_LOC_ID_OFFSET + 2306, LocationType.MISSION_PROGRESS, lambda state: logic_level > 0 or state._sc2wol_has_protoss_medium_units(multiworld, player)), diff --git a/worlds/sc2wol/Options.py b/worlds/sc2wol/Options.py index 13b01c42a22c..e4b6a740669a 100644 --- a/worlds/sc2wol/Options.py +++ b/worlds/sc2wol/Options.py @@ -41,6 +41,10 @@ class FinalMap(Choice): Vanilla mission order always ends with All in mission! + Warning: Using All-in with a short mission order (7 or fewer missions) is not recommended, + as there might not be enough locations to place all the required items, + any excess required items will be placed into the player's starting inventory! + This option is short-lived. It may be changed in the future """ display_name = "Final Map" @@ -265,7 +269,6 @@ class MissionProgressLocations(LocationInclusion): Nothing: No rewards for this type of tasks, effectively disabling such locations Note: Individual locations subject to plando are always enabled, so the plando can be placed properly. - Warning: The generation may fail if too many locations are excluded by this way. See also: Excluded Locations, Item Plando (https://archipelago.gg/tutorial/Archipelago/plando/en#item-plando) """ display_name = "Mission Progress Locations" @@ -282,7 +285,6 @@ class BonusLocations(LocationInclusion): Nothing: No rewards for this type of tasks, effectively disabling such locations Note: Individual locations subject to plando are always enabled, so the plando can be placed properly. - Warning: The generation may fail if too many locations are excluded by this way. See also: Excluded Locations, Item Plando (https://archipelago.gg/tutorial/Archipelago/plando/en#item-plando) """ display_name = "Bonus Locations" @@ -300,7 +302,6 @@ class ChallengeLocations(LocationInclusion): Nothing: No rewards for this type of tasks, effectively disabling such locations Note: Individual locations subject to plando are always enabled, so the plando can be placed properly. - Warning: The generation may fail if too many locations are excluded by this way. See also: Excluded Locations, Item Plando (https://archipelago.gg/tutorial/Archipelago/plando/en#item-plando) """ display_name = "Challenge Locations" @@ -317,7 +318,6 @@ class OptionalBossLocations(LocationInclusion): Nothing: No rewards for this type of tasks, effectively disabling such locations Note: Individual locations subject to plando are always enabled, so the plando can be placed properly. - Warning: The generation may fail if too many locations are excluded by this way. See also: Excluded Locations, Item Plando (https://archipelago.gg/tutorial/Archipelago/plando/en#item-plando) """ display_name = "Optional Boss Locations" diff --git a/worlds/sc2wol/PoolFilter.py b/worlds/sc2wol/PoolFilter.py index 4a19e2dbb305..23422a3d1ea5 100644 --- a/worlds/sc2wol/PoolFilter.py +++ b/worlds/sc2wol/PoolFilter.py @@ -1,6 +1,7 @@ from typing import Callable, Dict, List, Set from BaseClasses import MultiWorld, ItemClassification, Item, Location -from .Items import get_full_item_list, spider_mine_sources, second_pass_placeable_items, filler_items +from .Items import get_full_item_list, spider_mine_sources, second_pass_placeable_items, filler_items, \ + progressive_if_nco from .MissionTables import no_build_regions_list, easy_regions_list, medium_regions_list, hard_regions_list,\ mission_orders, MissionInfo, alt_final_mission_locations, MissionPools from .Options import get_option_value, MissionOrder, FinalMap, MissionProgressLocations, LocationInclusion @@ -15,7 +16,7 @@ ] BARRACKS_UNITS = {"Marine", "Medic", "Firebat", "Marauder", "Reaper", "Ghost", "Spectre"} -FACTORY_UNITS = {"Hellion", "Vulture", "Goliath", "Diamondback", "Siege Tank", "Thor", "Predator", "Widow Mine"} +FACTORY_UNITS = {"Hellion", "Vulture", "Goliath", "Diamondback", "Siege Tank", "Thor", "Predator", "Widow Mine", "Cyclone"} STARPORT_UNITS = {"Medivac", "Wraith", "Viking", "Banshee", "Battlecruiser", "Hercules", "Science Vessel", "Raven", "Liberator", "Valkyrie"} PROTOSS_REGIONS = {"A Sinister Turn", "Echoes of the Future", "In Utter Darkness"} @@ -93,7 +94,10 @@ def get_item_upgrades(inventory: List[Item], parent_item: Item or str): ] -def get_item_quantity(item): +def get_item_quantity(item: Item, multiworld: MultiWorld, player: int): + if (not get_option_value(multiworld, player, "nco_items")) \ + and item.name in progressive_if_nco: + return 1 return get_full_item_list()[item.name].quantity @@ -138,13 +142,13 @@ def attempt_removal(item: Item) -> bool: if not all(requirement(self) for requirement in requirements): # If item cannot be removed, lock or revert self.logical_inventory.add(item.name) - for _ in range(get_item_quantity(item)): + for _ in range(get_item_quantity(item, self.multiworld, self.player)): locked_items.append(copy_item(item)) return False return True - + # Limit the maximum number of upgrades - maxUpgrad = get_option_value(self.multiworld, self.player, + maxUpgrad = get_option_value(self.multiworld, self.player, "max_number_of_upgrades") if maxUpgrad != -1: unit_avail_upgrades = {} @@ -197,15 +201,16 @@ def attempt_removal(item: Item) -> bool: # Don't process general upgrades, they may have been pre-locked per-level for item in items_to_lock: if item in inventory: + item_quantity = inventory.count(item) # Unit upgrades, lock all levels - for _ in range(inventory.count(item)): + for _ in range(item_quantity): inventory.remove(item) if item not in locked_items: # Lock all the associated items if not already locked - for _ in range(get_item_quantity(item)): + for _ in range(item_quantity): locked_items.append(copy_item(item)) - if item in existing_items: - existing_items.remove(item) + if item in existing_items: + existing_items.remove(item) if self.min_units_per_structure > 0 and self.has_units_per_structure(): requirements.append(lambda state: state.has_units_per_structure()) @@ -216,7 +221,13 @@ def attempt_removal(item: Item) -> bool: while len(inventory) + len(locked_items) > inventory_size: if len(inventory) == 0: - raise Exception("Reduced item pool generation failed - not enough locations available to place items.") + # There are more items than locations and all of them are already locked due to YAML or logic. + # Random items from locked ones will go to starting items + self.multiworld.random.shuffle(locked_items) + while len(locked_items) > inventory_size: + item: Item = locked_items.pop() + self.multiworld.push_precollected(item) + break # Select random item from removable items item = self.multiworld.random.choice(inventory) # Cascade removals to associated items @@ -245,7 +256,7 @@ def attempt_removal(item: Item) -> bool: for _ in range(inventory.count(transient_item)): inventory.remove(transient_item) if transient_item not in locked_items: - for _ in range(get_item_quantity(transient_item)): + for _ in range(get_item_quantity(transient_item, self.multiworld, self.player)): locked_items.append(copy_item(transient_item)) if transient_item.classification in (ItemClassification.progression, ItemClassification.progression_skip_balancing): self.logical_inventory.add(transient_item.name) diff --git a/worlds/sc2wol/Starcraft2.kv b/worlds/sc2wol/Starcraft2.kv index 9c52d64c4702..f0785b89e428 100644 --- a/worlds/sc2wol/Starcraft2.kv +++ b/worlds/sc2wol/Starcraft2.kv @@ -11,6 +11,6 @@ markup: True halign: 'center' valign: 'middle' - padding_x: 5 + padding: [5,0,5,0] markup: True outline_width: 1 diff --git a/worlds/sc2wol/__init__.py b/worlds/sc2wol/__init__.py index 93aebb7ad15a..5c487f8fee09 100644 --- a/worlds/sc2wol/__init__.py +++ b/worlds/sc2wol/__init__.py @@ -34,7 +34,7 @@ class SC2WoLWorld(World): game = "Starcraft 2 Wings of Liberty" web = Starcraft2WoLWebWorld() - data_version = 4 + data_version = 5 item_name_to_id = {name: data.code for name, data in get_full_item_list().items()} location_name_to_id = {location.name: location.code for location in get_locations(None, None)} @@ -46,7 +46,7 @@ class SC2WoLWorld(World): mission_req_table = {} final_mission_id: int victory_item: str - required_client_version = 0, 3, 6 + required_client_version = 0, 4, 3 def __init__(self, multiworld: MultiWorld, player: int): super(SC2WoLWorld, self).__init__(multiworld, player) diff --git a/worlds/sm/__init__.py b/worlds/sm/__init__.py index e85d79d3ee33..3e9015eab766 100644 --- a/worlds/sm/__init__.py +++ b/worlds/sm/__init__.py @@ -389,7 +389,7 @@ def get_player_ItemLocation(progression_only: bool): escapeTrigger = None if self.variaRando.randoExec.randoSettings.restrictions["EscapeTrigger"]: #used to simulate received items - first_local_collected_loc = next(itemLoc for itemLoc in SMWorld.spheres if itemLoc.player == self.player) + first_local_collected_loc = next(itemLoc for itemLoc in spheres if itemLoc.player == self.player) playerItemsItemLocs = get_player_ItemLocation(False) playerProgItemsItemLocs = get_player_ItemLocation(True) diff --git a/worlds/undertale/Regions.py b/worlds/undertale/Regions.py index ec13b249fa0e..138a6846537a 100644 --- a/worlds/undertale/Regions.py +++ b/worlds/undertale/Regions.py @@ -24,6 +24,7 @@ def link_undertale_areas(world: MultiWorld, player: int): ("True Lab", []), ("Core", ["Core Exit"]), ("New Home", ["New Home Exit"]), + ("Last Corridor", ["Last Corridor Exit"]), ("Barrier", []), ] @@ -40,7 +41,8 @@ def link_undertale_areas(world: MultiWorld, player: int): ("News Show Entrance", "News Show"), ("Lab Elevator", "True Lab"), ("Core Exit", "New Home"), - ("New Home Exit", "Barrier"), + ("New Home Exit", "Last Corridor"), + ("Last Corridor Exit", "Barrier"), ("Snowdin Hub", "Snowdin Forest"), ("Waterfall Hub", "Waterfall"), ("Hotland Hub", "Hotland"), diff --git a/worlds/undertale/Rules.py b/worlds/undertale/Rules.py index 648152c50414..897484b0508f 100644 --- a/worlds/undertale/Rules.py +++ b/worlds/undertale/Rules.py @@ -81,23 +81,27 @@ def set_rules(multiworld: MultiWorld, player: int): set_rule(multiworld.get_entrance("New Home Exit", player), lambda state: (state.has("Left Home Key", player) and state.has("Right Home Key", player)) or - state.has("Key Piece", player, state.multiworld.key_pieces[player])) + state.has("Key Piece", player, state.multiworld.key_pieces[player].value)) if _undertale_is_route(multiworld.state, player, 1): set_rule(multiworld.get_entrance("Papyrus\" Home Entrance", player), lambda state: _undertale_has_plot(state, player, "Complete Skeleton")) set_rule(multiworld.get_entrance("Undyne\"s Home Entrance", player), lambda state: _undertale_has_plot(state, player, "Fish") and state.has("Papyrus Date", player)) set_rule(multiworld.get_entrance("Lab Elevator", player), - lambda state: state.has("Alphys Date", player) and _undertale_has_plot(state, player, "DT Extractor")) + lambda state: state.has("Alphys Date", player) and state.has("DT Extractor", player) and + ((state.has("Left Home Key", player) and state.has("Right Home Key", player)) or + state.has("Key Piece", player, state.multiworld.key_pieces[player].value))) set_rule(multiworld.get_location("Alphys Date", player), - lambda state: state.has("Undyne Letter EX", player) and state.has("Undyne Date", player)) + lambda state: state.can_reach("New Home", "Region", player) and state.has("Undyne Letter EX", player) + and state.has("Undyne Date", player)) set_rule(multiworld.get_location("Papyrus Plot", player), lambda state: state.can_reach("Snowdin Town", "Region", player)) set_rule(multiworld.get_location("Undyne Plot", player), lambda state: state.can_reach("Waterfall", "Region", player)) set_rule(multiworld.get_location("True Lab Plot", player), lambda state: state.can_reach("New Home", "Region", player) - and state.can_reach("Letter Quest", "Location", player)) + and state.can_reach("Letter Quest", "Location", player) + and state.can_reach("Alphys Date", "Location", player)) set_rule(multiworld.get_location("Chisps Machine", player), lambda state: state.can_reach("True Lab", "Region", player)) set_rule(multiworld.get_location("Dog Sale 1", player), @@ -113,7 +117,7 @@ def set_rules(multiworld: MultiWorld, player: int): set_rule(multiworld.get_location("Hush Trade", player), lambda state: state.can_reach("News Show", "Region", player) and state.has("Hot Dog...?", player, 1)) set_rule(multiworld.get_location("Letter Quest", player), - lambda state: state.can_reach("New Home Exit", "Entrance", player) and state.has("Undyne Date", player)) + lambda state: state.can_reach("Last Corridor", "Region", player) and state.has("Undyne Date", player)) if (not _undertale_is_route(multiworld.state, player, 2)) or _undertale_is_route(multiworld.state, player, 3): set_rule(multiworld.get_location("Nicecream Punch Card", player), lambda state: state.has("Punch Card", player, 3) and state.can_reach("Waterfall", "Region", player)) @@ -126,7 +130,7 @@ def set_rules(multiworld: MultiWorld, player: int): set_rule(multiworld.get_location("Apron Hidden", player), lambda state: state.can_reach("Cooking Show", "Region", player)) if _undertale_is_route(multiworld.state, player, 2) and \ - (multiworld.rando_love[player] or multiworld.rando_stats[player]): + (bool(multiworld.rando_love[player].value) or bool(multiworld.rando_stats[player].value)): maxlv = 1 exp = 190 curarea = "Old Home" @@ -304,7 +308,7 @@ def set_rules(multiworld: MultiWorld, player: int): # Sets rules on completion condition def set_completion_rules(multiworld: MultiWorld, player: int): - completion_requirements = lambda state: state.can_reach("New Home Exit", "Entrance", player) + completion_requirements = lambda state: state.can_reach("Barrier", "Region", player) if _undertale_is_route(multiworld.state, player, 1): completion_requirements = lambda state: state.can_reach("True Lab", "Region", player) diff --git a/worlds/undertale/docs/en_Undertale.md b/worlds/undertale/docs/en_Undertale.md index 87011ee16b4d..7ff5d55edad9 100644 --- a/worlds/undertale/docs/en_Undertale.md +++ b/worlds/undertale/docs/en_Undertale.md @@ -56,8 +56,8 @@ If you press `W` while in the save menu, you will teleport back to the flower ro The following commands are only available when using the UndertaleClient to play with Archipelago. - `/resync` Manually trigger a resync. -- `/patch` Patch the game. -- `/savepath` Redirect to proper save data folder. (Use before connecting!) +- `/savepath` Redirect to proper save data folder. This is necessary for Linux users to use before connecting. - `/auto_patch` Patch the game automatically. -- `/online` Makes you no longer able to see other Undertale players. +- `/patch` Patch the game. Only use this command if `/auto_patch` fails. +- `/online` Toggles seeing other Undertale players. - `/deathlink` Toggles deathlink diff --git a/worlds/witness/settings/Disable_Unrandomized.txt b/worlds/witness/settings/Disable_Unrandomized.txt index f7a0fcb7cbd6..3cd7ec1fb5eb 100644 --- a/worlds/witness/settings/Disable_Unrandomized.txt +++ b/worlds/witness/settings/Disable_Unrandomized.txt @@ -9,7 +9,7 @@ Requirement Changes: 0x181B3 - 0x00021 | 0x17D28 | 0x17C71 0x28B39 - True - Reflection 0x17CAB - True - True -0x2779A - True - 0x17CFB | 0x3C12B | 0x17CF7 +0x2779A - 0x17CFB | 0x3C12B | 0x17CF7 Disabled Locations: 0x03505 (Tutorial Gate Close) @@ -125,4 +125,4 @@ Precompleted Locations: 0x035F5 0x000D3 0x33A20 -0x03BE2 \ No newline at end of file +0x03BE2