diff --git a/.github/workflows/analyze-modified-files.yml b/.github/workflows/analyze-modified-files.yml
index d01365745c..c9995fa2d0 100644
--- a/.github/workflows/analyze-modified-files.yml
+++ b/.github/workflows/analyze-modified-files.yml
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: "Determine modified files (pull_request)"
if: github.event_name == 'pull_request'
@@ -50,7 +50,7 @@ jobs:
run: |
echo "diff=." >> $GITHUB_ENV
- - uses: actions/setup-python@v4
+ - uses: actions/setup-python@v5
if: env.diff != ''
with:
python-version: 3.8
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a40084b9ab..80aaf70c21 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -8,11 +8,13 @@ on:
- '.github/workflows/build.yml'
- 'setup.py'
- 'requirements.txt'
+ - '*.iss'
pull_request:
paths:
- '.github/workflows/build.yml'
- 'setup.py'
- 'requirements.txt'
+ - '*.iss'
workflow_dispatch:
env:
@@ -25,9 +27,9 @@ jobs:
build-win-py38: # RCs will still be built and signed by hand
runs-on: windows-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Install python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: '3.8'
- name: Download run-time dependencies
@@ -46,25 +48,42 @@ jobs:
cd build
Rename-Item "exe.$NAME" Archipelago
7z a -mx=9 -mhe=on -ms "../dist/$ZIP_NAME" Archipelago
+ Rename-Item Archipelago "exe.$NAME" # inno_setup.iss expects the original name
- name: Store 7z
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: ${{ env.ZIP_NAME }}
path: dist/${{ env.ZIP_NAME }}
retention-days: 7 # keep for 7 days, should be enough
+ - name: Build Setup
+ run: |
+ & "${env:ProgramFiles(x86)}\Inno Setup 6\iscc.exe" inno_setup.iss /DNO_SIGNTOOL
+ if ( $? -eq $false ) {
+ Write-Error "Building setup failed!"
+ exit 1
+ }
+ $contents = Get-ChildItem -Path setups/*.exe -Force -Recurse
+ $SETUP_NAME=$contents[0].Name
+ echo "SETUP_NAME=$SETUP_NAME" >> $Env:GITHUB_ENV
+ - name: Store Setup
+ uses: actions/upload-artifact@v4
+ with:
+ name: ${{ env.SETUP_NAME }}
+ path: setups/${{ env.SETUP_NAME }}
+ retention-days: 7 # keep for 7 days, should be enough
build-ubuntu2004:
runs-on: ubuntu-20.04
steps:
# - copy code below to release.yml -
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Install base dependencies
run: |
sudo apt update
sudo apt -y install build-essential p7zip xz-utils wget libglib2.0-0
sudo apt -y install python3-gi libgirepository1.0-dev # should pull dependencies for gi installation below
- name: Get a recent python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install build-time dependencies
@@ -100,13 +119,13 @@ jobs:
source venv/bin/activate
python setup.py build_exe --yes
- name: Store AppImage
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: ${{ env.APPIMAGE_NAME }}
path: dist/${{ env.APPIMAGE_NAME }}
retention-days: 7
- name: Store .tar.gz
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: ${{ env.TAR_NAME }}
path: dist/${{ env.TAR_NAME }}
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 6aeb477a22..b0cfe35d2b 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -43,7 +43,7 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v3
+ uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
diff --git a/.github/workflows/label-pull-requests.yml b/.github/workflows/label-pull-requests.yml
index 42881aa49d..bc0f6999b6 100644
--- a/.github/workflows/label-pull-requests.yml
+++ b/.github/workflows/label-pull-requests.yml
@@ -15,9 +15,10 @@ jobs:
steps:
- uses: actions/labeler@v5
with:
- sync-labels: true
+ sync-labels: false
peer_review:
name: 'Apply peer review label'
+ needs: labeler
if: >-
(github.event.action == 'opened' || github.event.action == 'reopened' ||
github.event.action == 'ready_for_review') && !github.event.pull_request.draft
@@ -30,6 +31,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
unblock_draft_prs:
name: 'Remove waiting-on labels'
+ needs: labeler
if: github.event.action == 'converted_to_draft' || github.event.action == 'closed'
runs-on: ubuntu-latest
steps:
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index cc68a88b76..2d7f1253b7 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -18,7 +18,7 @@ jobs:
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV # tag x.y.z will become "Archipelago x.y.z"
- name: Create Release
- uses: softprops/action-gh-release@b7e450da2a4b4cb4bfbae528f788167786cfcedf
+ uses: softprops/action-gh-release@975c1b265e11dd76618af1c374e7981f9a6ff44a
with:
draft: true # don't publish right away, especially since windows build is added by hand
prerelease: false
@@ -35,14 +35,14 @@ jobs:
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
# - code below copied from build.yml -
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Install base dependencies
run: |
sudo apt update
sudo apt -y install build-essential p7zip xz-utils wget libglib2.0-0
sudo apt -y install python3-gi libgirepository1.0-dev # should pull dependencies for gi installation below
- name: Get a recent python
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install build-time dependencies
@@ -74,7 +74,7 @@ jobs:
echo "TAR_NAME=$TAR_NAME" >> $GITHUB_ENV
# - code above copied from build.yml -
- name: Add to Release
- uses: softprops/action-gh-release@b7e450da2a4b4cb4bfbae528f788167786cfcedf
+ uses: softprops/action-gh-release@975c1b265e11dd76618af1c374e7981f9a6ff44a
with:
draft: true # see above
prerelease: false
diff --git a/.github/workflows/unittests.yml b/.github/workflows/unittests.yml
index 1a76a7f471..b2530bd06c 100644
--- a/.github/workflows/unittests.yml
+++ b/.github/workflows/unittests.yml
@@ -46,9 +46,9 @@ jobs:
os: macos-latest
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python.version }}
- uses: actions/setup-python@v4
+ uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python.version }}
- name: Install dependencies
diff --git a/BaseClasses.py b/BaseClasses.py
index 2be9a9820d..24dc074b63 100644
--- a/BaseClasses.py
+++ b/BaseClasses.py
@@ -85,7 +85,7 @@ class MultiWorld():
game: Dict[int, str]
random: random.Random
- per_slot_randoms: Dict[int, random.Random]
+ per_slot_randoms: Utils.DeprecateDict[int, random.Random]
"""Deprecated. Please use `self.random` instead."""
class AttributeProxy():
@@ -217,7 +217,8 @@ class MultiWorld():
set_player_attr('game', "A Link to the Past")
set_player_attr('completion_condition', lambda state: True)
self.worlds = {}
- self.per_slot_randoms = {}
+ self.per_slot_randoms = Utils.DeprecateDict("Using per_slot_randoms is now deprecated. Please use the "
+ "world's random object instead (usually self.random)")
self.plando_options = PlandoOptions.none
def get_all_ids(self) -> Tuple[int, ...]:
@@ -251,14 +252,13 @@ class MultiWorld():
return {group_id for group_id, group in self.groups.items() if player in group["players"]}
def set_seed(self, seed: Optional[int] = None, secure: bool = False, name: Optional[str] = None):
+ assert not self.worlds, "seed needs to be initialized before Worlds"
self.seed = get_seed(seed)
if secure:
self.secure()
else:
self.random.seed(self.seed)
self.seed_name = name if name else str(self.seed)
- self.per_slot_randoms = {player: random.Random(self.random.getrandbits(64)) for player in
- range(1, self.players + 1)}
def set_options(self, args: Namespace) -> None:
# TODO - remove this section once all worlds use options dataclasses
@@ -275,7 +275,6 @@ class MultiWorld():
for player in self.player_ids:
world_type = AutoWorld.AutoWorldRegister.world_types[self.game[player]]
self.worlds[player] = world_type(self, player)
- self.worlds[player].random = self.per_slot_randoms[player]
options_dataclass: typing.Type[Options.PerGameCommonOptions] = world_type.options_dataclass
self.worlds[player].options = options_dataclass(**{option_key: getattr(args, option_key)[player]
for option_key in options_dataclass.type_hints})
@@ -1033,7 +1032,7 @@ class Location:
locked: bool = False
show_in_spoiler: bool = True
progress_type: LocationProgressType = LocationProgressType.DEFAULT
- always_allow = staticmethod(lambda item, state: False)
+ always_allow = staticmethod(lambda state, item: False)
access_rule: Callable[[CollectionState], bool] = staticmethod(lambda state: True)
item_rule = staticmethod(lambda item: True)
item: Optional[Item] = None
diff --git a/CommonClient.py b/CommonClient.py
index c75ca3fd80..a7b7828a1d 100644
--- a/CommonClient.py
+++ b/CommonClient.py
@@ -20,8 +20,8 @@ if __name__ == "__main__":
Utils.init_logging("TextClient", exception_logger="Client")
from MultiServer import CommandProcessor
-from NetUtils import Endpoint, decode, NetworkItem, encode, JSONtoTextParser, \
- ClientStatus, Permission, NetworkSlot, RawJSONtoTextParser
+from NetUtils import (Endpoint, decode, NetworkItem, encode, JSONtoTextParser, ClientStatus, Permission, NetworkSlot,
+ RawJSONtoTextParser, add_json_text, add_json_location, add_json_item, JSONTypes)
from Utils import Version, stream_input, async_start
from worlds import network_data_package, AutoWorldRegister
import os
@@ -72,9 +72,16 @@ class ClientCommandProcessor(CommandProcessor):
def _cmd_received(self) -> bool:
"""List all received items"""
- self.output(f'{len(self.ctx.items_received)} received items:')
+ item: NetworkItem
+ self.output(f'{len(self.ctx.items_received)} received items, sorted by time:')
for index, item in enumerate(self.ctx.items_received, 1):
- self.output(f"{self.ctx.item_names[item.item]} from {self.ctx.player_names[item.player]}")
+ parts = []
+ add_json_item(parts, item.item, self.ctx.slot, item.flags)
+ add_json_text(parts, " from ")
+ add_json_location(parts, item.location, item.player)
+ add_json_text(parts, " by ")
+ add_json_text(parts, item.player, type=JSONTypes.player_id)
+ self.ctx.on_print_json({"data": parts, "cmd": "PrintJSON"})
return True
def _cmd_missing(self, filter_text = "") -> bool:
@@ -115,6 +122,15 @@ class ClientCommandProcessor(CommandProcessor):
for item_name in AutoWorldRegister.world_types[self.ctx.game].item_name_to_id:
self.output(item_name)
+ def _cmd_item_groups(self):
+ """List all item group names for the currently running game."""
+ if not self.ctx.game:
+ self.output("No game set, cannot determine existing item groups.")
+ return False
+ self.output(f"Item Group Names for {self.ctx.game}")
+ for group_name in AutoWorldRegister.world_types[self.ctx.game].item_name_groups:
+ self.output(group_name)
+
def _cmd_locations(self):
"""List all location names for the currently running game."""
if not self.ctx.game:
@@ -124,6 +140,15 @@ class ClientCommandProcessor(CommandProcessor):
for location_name in AutoWorldRegister.world_types[self.ctx.game].location_name_to_id:
self.output(location_name)
+ def _cmd_location_groups(self):
+ """List all location group names for the currently running game."""
+ if not self.ctx.game:
+ self.output("No game set, cannot determine existing location groups.")
+ return False
+ self.output(f"Location Group Names for {self.ctx.game}")
+ for group_name in AutoWorldRegister.world_types[self.ctx.game].location_name_groups:
+ self.output(group_name)
+
def _cmd_ready(self):
"""Send ready status to server."""
self.ctx.ready = not self.ctx.ready
diff --git a/Fill.py b/Fill.py
index ae44710469..2d6257eae3 100644
--- a/Fill.py
+++ b/Fill.py
@@ -208,7 +208,8 @@ def fill_restrictive(multiworld: MultiWorld, base_state: CollectionState, locati
def remaining_fill(multiworld: MultiWorld,
locations: typing.List[Location],
- itempool: typing.List[Item]) -> None:
+ itempool: typing.List[Item],
+ name: str = "Remaining") -> None:
unplaced_items: typing.List[Item] = []
placements: typing.List[Location] = []
swapped_items: typing.Counter[typing.Tuple[int, str]] = Counter()
@@ -265,10 +266,10 @@ def remaining_fill(multiworld: MultiWorld,
placements.append(spot_to_fill)
placed += 1
if not placed % 1000:
- _log_fill_progress("Remaining", placed, total)
+ _log_fill_progress(name, placed, total)
if total > 1000:
- _log_fill_progress("Remaining", placed, total)
+ _log_fill_progress(name, placed, total)
if unplaced_items and locations:
# There are leftover unplaceable items and locations that won't accept them
@@ -466,7 +467,7 @@ def distribute_items_restrictive(multiworld: MultiWorld) -> None:
inaccessible_location_rules(multiworld, multiworld.state, defaultlocations)
- remaining_fill(multiworld, excludedlocations, filleritempool)
+ remaining_fill(multiworld, excludedlocations, filleritempool, "Remaining Excluded")
if excludedlocations:
raise FillError(
f"Not enough filler items for excluded locations. There are {len(excludedlocations)} more locations than items")
diff --git a/Generate.py b/Generate.py
index ecdc81833a..56979334b5 100644
--- a/Generate.py
+++ b/Generate.py
@@ -323,13 +323,29 @@ def roll_percentage(percentage: Union[int, float]) -> bool:
return random.random() < (float(percentage) / 100)
-def update_weights(weights: dict, new_weights: dict, type: str, name: str) -> dict:
+def update_weights(weights: dict, new_weights: dict, update_type: str, name: str) -> dict:
logging.debug(f'Applying {new_weights}')
- new_options = set(new_weights) - set(weights)
- weights.update(new_weights)
+ cleaned_weights = {}
+ for option in new_weights:
+ option_name = option.lstrip("+")
+ if option.startswith("+") and option_name in weights:
+ cleaned_value = weights[option_name]
+ new_value = new_weights[option]
+ if isinstance(new_value, (set, dict)):
+ cleaned_value.update(new_value)
+ elif isinstance(new_value, list):
+ cleaned_value.extend(new_value)
+ else:
+ raise Exception(f"Cannot apply merge to non-dict, set, or list type {option_name},"
+ f" received {type(new_value).__name__}.")
+ cleaned_weights[option_name] = cleaned_value
+ else:
+ cleaned_weights[option_name] = new_weights[option]
+ new_options = set(cleaned_weights) - set(weights)
+ weights.update(cleaned_weights)
if new_options:
for new_option in new_options:
- logging.warning(f'{type} Suboption "{new_option}" of "{name}" did not '
+ logging.warning(f'{update_type} Suboption "{new_option}" of "{name}" did not '
f'overwrite a root option. '
f'This is probably in error.')
return weights
@@ -452,6 +468,10 @@ def roll_settings(weights: dict, plando_options: PlandoOptions = PlandoOptions.b
world_type = AutoWorldRegister.world_types[ret.game]
game_weights = weights[ret.game]
+ if any(weight.startswith("+") for weight in game_weights) or \
+ any(weight.startswith("+") for weight in weights):
+ raise Exception(f"Merge tag cannot be used outside of trigger contexts.")
+
if "triggers" in game_weights:
weights = roll_triggers(weights, game_weights["triggers"])
game_weights = weights[ret.game]
diff --git a/MultiServer.py b/MultiServer.py
index 62dab3298e..395577b663 100644
--- a/MultiServer.py
+++ b/MultiServer.py
@@ -707,15 +707,18 @@ class Context:
self.save() # save goal completion flag
def on_new_hint(self, team: int, slot: int):
- key: str = f"_read_hints_{team}_{slot}"
- targets: typing.Set[Client] = set(self.stored_data_notification_clients[key])
- if targets:
- self.broadcast(targets, [{"cmd": "SetReply", "key": key, "value": self.hints[team, slot]}])
+ self.on_changed_hints(team, slot)
self.broadcast(self.clients[team][slot], [{
"cmd": "RoomUpdate",
"hint_points": get_slot_points(self, team, slot)
}])
+ def on_changed_hints(self, team: int, slot: int):
+ key: str = f"_read_hints_{team}_{slot}"
+ targets: typing.Set[Client] = set(self.stored_data_notification_clients[key])
+ if targets:
+ self.broadcast(targets, [{"cmd": "SetReply", "key": key, "value": self.hints[team, slot]}])
+
def on_client_status_change(self, team: int, slot: int):
key: str = f"_read_client_status_{team}_{slot}"
targets: typing.Set[Client] = set(self.stored_data_notification_clients[key])
@@ -975,7 +978,10 @@ def register_location_checks(ctx: Context, team: int, slot: int, locations: typi
"hint_points": get_slot_points(ctx, team, slot),
"checked_locations": new_locations, # send back new checks only
}])
-
+ old_hints = ctx.hints[team, slot].copy()
+ ctx.recheck_hints(team, slot)
+ if old_hints != ctx.hints[team, slot]:
+ ctx.on_changed_hints(team, slot)
ctx.save()
@@ -1052,17 +1058,19 @@ def get_intended_text(input_text: str, possible_answers) -> typing.Tuple[str, bo
if picks[0][1] == 100:
return picks[0][0], True, "Perfect Match"
elif picks[0][1] < 75:
- return picks[0][0], False, f"Didn't find something that closely matches, " \
- f"did you mean {picks[0][0]}? ({picks[0][1]}% sure)"
+ return picks[0][0], False, f"Didn't find something that closely matches '{input_text}', " \
+ f"did you mean '{picks[0][0]}'? ({picks[0][1]}% sure)"
elif dif > 5:
return picks[0][0], True, "Close Match"
else:
- return picks[0][0], False, f"Too many close matches, did you mean {picks[0][0]}? ({picks[0][1]}% sure)"
+ return picks[0][0], False, f"Too many close matches for '{input_text}', " \
+ f"did you mean '{picks[0][0]}'? ({picks[0][1]}% sure)"
else:
if picks[0][1] > 90:
return picks[0][0], True, "Only Option Match"
else:
- return picks[0][0], False, f"Did you mean {picks[0][0]}? ({picks[0][1]}% sure)"
+ return picks[0][0], False, f"Didn't find something that closely matches '{input_text}', " \
+ f"did you mean '{picks[0][0]}'? ({picks[0][1]}% sure)"
class CommandMeta(type):
@@ -1964,7 +1972,7 @@ class ServerCommandProcessor(CommonCommandProcessor):
@mark_raw
def _cmd_forbid_release(self, player_name: str) -> bool:
- """"Disallow the specified player from using the !release command."""
+ """Disallow the specified player from using the !release command."""
player = self.resolve_player(player_name)
if player:
team, slot, name = player
diff --git a/NetUtils.py b/NetUtils.py
index a2db6a2ac5..8fc3929e60 100644
--- a/NetUtils.py
+++ b/NetUtils.py
@@ -290,8 +290,8 @@ def add_json_item(parts: list, item_id: int, player: int = 0, item_flags: int =
parts.append({"text": str(item_id), "player": player, "flags": item_flags, "type": JSONTypes.item_id, **kwargs})
-def add_json_location(parts: list, item_id: int, player: int = 0, **kwargs) -> None:
- parts.append({"text": str(item_id), "player": player, "type": JSONTypes.location_id, **kwargs})
+def add_json_location(parts: list, location_id: int, player: int = 0, **kwargs) -> None:
+ parts.append({"text": str(location_id), "player": player, "type": JSONTypes.location_id, **kwargs})
class Hint(typing.NamedTuple):
diff --git a/Options.py b/Options.py
index ff8ad11c5a..e1ae339143 100644
--- a/Options.py
+++ b/Options.py
@@ -12,7 +12,7 @@ from dataclasses import dataclass
from schema import And, Optional, Or, Schema
-from Utils import get_fuzzy_results, is_iterable_of_str
+from Utils import get_fuzzy_results, is_iterable_except_str
if typing.TYPE_CHECKING:
from BaseClasses import PlandoOptions
@@ -41,6 +41,11 @@ class AssembleOptions(abc.ABCMeta):
aliases = {name[6:].lower(): option_id for name, option_id in attrs.items() if
name.startswith("alias_")}
+ assert (
+ name in {"Option", "VerifyKeys"} or # base abstract classes don't need default
+ "default" in attrs or
+ any(hasattr(base, "default") for base in bases)
+ ), f"Option class {name} needs default value"
assert "random" not in aliases, "Choice option 'random' cannot be manually assigned."
# auto-alias Off and On being parsed as True and False
@@ -96,7 +101,7 @@ T = typing.TypeVar('T')
class Option(typing.Generic[T], metaclass=AssembleOptions):
value: T
- default = 0
+ default: typing.ClassVar[typing.Any] # something that __init__ will be able to convert to the correct type
# convert option_name_long into Name Long as display_name, otherwise name_long is the result.
# Handled in get_option_name()
@@ -106,8 +111,9 @@ class Option(typing.Generic[T], metaclass=AssembleOptions):
supports_weighting = True
# filled by AssembleOptions:
- name_lookup: typing.Dict[T, str]
- options: typing.Dict[str, int]
+ name_lookup: typing.ClassVar[typing.Dict[T, str]] # type: ignore
+ # https://github.com/python/typing/discussions/1460 the reason for this type: ignore
+ options: typing.ClassVar[typing.Dict[str, int]]
def __repr__(self) -> str:
return f"{self.__class__.__name__}({self.current_option_name})"
@@ -160,6 +166,8 @@ class FreeText(Option[str]):
"""Text option that allows users to enter strings.
Needs to be validated by the world or option definition."""
+ default = ""
+
def __init__(self, value: str):
assert isinstance(value, str), "value of FreeText must be a string"
self.value = value
@@ -180,6 +188,14 @@ class FreeText(Option[str]):
def get_option_name(cls, value: str) -> str:
return value
+ def __eq__(self, other):
+ if isinstance(other, self.__class__):
+ return other.value == self.value
+ elif isinstance(other, str):
+ return other == self.value
+ else:
+ raise TypeError(f"Can't compare {self.__class__.__name__} with {other.__class__.__name__}")
+
class NumericOption(Option[int], numbers.Integral, abc.ABC):
default = 0
@@ -803,7 +819,7 @@ class VerifyKeys(metaclass=FreezeValidKeys):
class OptionDict(Option[typing.Dict[str, typing.Any]], VerifyKeys, typing.Mapping[str, typing.Any]):
- default: typing.Dict[str, typing.Any] = {}
+ default = {}
supports_weighting = False
def __init__(self, value: typing.Dict[str, typing.Any]):
@@ -844,10 +860,10 @@ class OptionList(Option[typing.List[typing.Any]], VerifyKeys):
# If only unique entries are needed and input order of elements does not matter, OptionSet should be used instead.
# Not a docstring so it doesn't get grabbed by the options system.
- default: typing.Union[typing.List[typing.Any], typing.Tuple[typing.Any, ...]] = ()
+ default = ()
supports_weighting = False
- def __init__(self, value: typing.Iterable[str]):
+ def __init__(self, value: typing.Iterable[typing.Any]):
self.value = list(deepcopy(value))
super(OptionList, self).__init__()
@@ -857,7 +873,7 @@ class OptionList(Option[typing.List[typing.Any]], VerifyKeys):
@classmethod
def from_any(cls, data: typing.Any):
- if is_iterable_of_str(data):
+ if is_iterable_except_str(data):
cls.verify_keys(data)
return cls(data)
return cls.from_text(str(data))
@@ -870,7 +886,7 @@ class OptionList(Option[typing.List[typing.Any]], VerifyKeys):
class OptionSet(Option[typing.Set[str]], VerifyKeys):
- default: typing.Union[typing.Set[str], typing.FrozenSet[str]] = frozenset()
+ default = frozenset()
supports_weighting = False
def __init__(self, value: typing.Iterable[str]):
@@ -883,7 +899,7 @@ class OptionSet(Option[typing.Set[str]], VerifyKeys):
@classmethod
def from_any(cls, data: typing.Any):
- if is_iterable_of_str(data):
+ if is_iterable_except_str(data):
cls.verify_keys(data)
return cls(data)
return cls.from_text(str(data))
diff --git a/Utils.py b/Utils.py
index cea6405a38..70decf45d8 100644
--- a/Utils.py
+++ b/Utils.py
@@ -225,6 +225,9 @@ class UniqueKeyLoader(SafeLoader):
if key in mapping:
logging.error(f"YAML duplicates sanity check failed{key_node.start_mark}")
raise KeyError(f"Duplicate key {key} found in YAML. Already found keys: {mapping}.")
+ if (str(key).startswith("+") and (str(key)[1:] in mapping)) or (f"+{key}" in mapping):
+ logging.error(f"YAML merge duplicates sanity check failed{key_node.start_mark}")
+ raise KeyError(f"Equivalent key {key} found in YAML. Already found keys: {mapping}.")
mapping.add(key)
return super().construct_mapping(node, deep)
@@ -713,7 +716,7 @@ def messagebox(title: str, text: str, error: bool = False) -> None:
import ctypes
style = 0x10 if error else 0x0
return ctypes.windll.user32.MessageBoxW(0, text, title, style)
-
+
# fall back to tk
try:
import tkinter
@@ -969,11 +972,8 @@ class RepeatableChain:
return sum(len(iterable) for iterable in self.iterable)
-def is_iterable_of_str(obj: object) -> TypeGuard[typing.Iterable[str]]:
- """ but not a `str` (because technically, `str` is `Iterable[str]`) """
+def is_iterable_except_str(obj: object) -> TypeGuard[typing.Iterable[typing.Any]]:
+ """ `str` is `Iterable`, but that's not what we want """
if isinstance(obj, str):
return False
- if not isinstance(obj, typing.Iterable):
- return False
- obj_it: typing.Iterable[object] = obj
- return all(isinstance(v, str) for v in obj_it)
+ return isinstance(obj, typing.Iterable)
diff --git a/data/client.kv b/data/client.kv
index 3b48d216dd..bf98fa1517 100644
--- a/data/client.kv
+++ b/data/client.kv
@@ -61,36 +61,42 @@
found_text: "Found?"
TooltipLabel:
id: receiving
+ sort_key: 'receiving'
text: root.receiving_text
halign: 'center'
valign: 'center'
pos_hint: {"center_y": 0.5}
TooltipLabel:
id: item
+ sort_key: 'item'
text: root.item_text
halign: 'center'
valign: 'center'
pos_hint: {"center_y": 0.5}
TooltipLabel:
id: finding
+ sort_key: 'finding'
text: root.finding_text
halign: 'center'
valign: 'center'
pos_hint: {"center_y": 0.5}
TooltipLabel:
id: location
+ sort_key: 'location'
text: root.location_text
halign: 'center'
valign: 'center'
pos_hint: {"center_y": 0.5}
TooltipLabel:
id: entrance
+ sort_key: 'entrance'
text: root.entrance_text
halign: 'center'
valign: 'center'
pos_hint: {"center_y": 0.5}
TooltipLabel:
id: found
+ sort_key: 'found'
text: root.found_text
halign: 'center'
valign: 'center'
diff --git a/data/lua/connector_ff1.lua b/data/lua/connector_ff1.lua
index 455b046961..afae5d3c81 100644
--- a/data/lua/connector_ff1.lua
+++ b/data/lua/connector_ff1.lua
@@ -322,7 +322,7 @@ function processBlock(block)
end
end
end
- if #itemsBlock ~= itemIndex then
+ if #itemsBlock > itemIndex then
wU8(ITEM_INDEX, #itemsBlock)
end
diff --git a/inno_setup.iss b/inno_setup.iss
index c1b634292f..5a6d608306 100644
--- a/inno_setup.iss
+++ b/inno_setup.iss
@@ -31,8 +31,11 @@ ArchitecturesAllowed=x64 arm64
AllowNoIcons=yes
SetupIconFile={#MyAppIcon}
UninstallDisplayIcon={app}\{#MyAppExeName}
-; you will likely have to remove the following signtool line when testing/debugging locally. Don't include that change in PRs.
+#ifndef NO_SIGNTOOL
+; You will likely have to remove the SignTool= line when testing/debugging locally or run with iscc.exe /DNO_SIGNTOOL.
+; Don't include that change in PRs.
SignTool= signtool
+#endif
LicenseFile= LICENSE
WizardStyle= modern
SetupLogging=yes
@@ -131,10 +134,10 @@ Root: HKCR; Subkey: "{#MyAppName}l2acpatch"; ValueData: "Arc
Root: HKCR; Subkey: "{#MyAppName}l2acpatch\DefaultIcon"; ValueData: "{app}\ArchipelagoSNIClient.exe,0"; ValueType: string; ValueName: "";
Root: HKCR; Subkey: "{#MyAppName}l2acpatch\shell\open\command"; ValueData: """{app}\ArchipelagoSNIClient.exe"" ""%1"""; ValueType: string; ValueName: "";
-Root: HKCR; Subkey: ".apkdl3"; ValueData: "{#MyAppName}kdl3patch"; Flags: uninsdeletevalue; ValueType: string; ValueName: ""; Components: client/sni
-Root: HKCR; Subkey: "{#MyAppName}kdl3patch"; ValueData: "Archipelago Kirby's Dream Land 3 Patch"; Flags: uninsdeletekey; ValueType: string; ValueName: ""; Components: client/sni
-Root: HKCR; Subkey: "{#MyAppName}kdl3patch\DefaultIcon"; ValueData: "{app}\ArchipelagoSNIClient.exe,0"; ValueType: string; ValueName: ""; Components: client/sni
-Root: HKCR; Subkey: "{#MyAppName}kdl3patch\shell\open\command"; ValueData: """{app}\ArchipelagoSNIClient.exe"" ""%1"""; ValueType: string; ValueName: ""; Components: client/sni
+Root: HKCR; Subkey: ".apkdl3"; ValueData: "{#MyAppName}kdl3patch"; Flags: uninsdeletevalue; ValueType: string; ValueName: "";
+Root: HKCR; Subkey: "{#MyAppName}kdl3patch"; ValueData: "Archipelago Kirby's Dream Land 3 Patch"; Flags: uninsdeletekey; ValueType: string; ValueName: "";
+Root: HKCR; Subkey: "{#MyAppName}kdl3patch\DefaultIcon"; ValueData: "{app}\ArchipelagoSNIClient.exe,0"; ValueType: string; ValueName: "";
+Root: HKCR; Subkey: "{#MyAppName}kdl3patch\shell\open\command"; ValueData: """{app}\ArchipelagoSNIClient.exe"" ""%1"""; ValueType: string; ValueName: "";
Root: HKCR; Subkey: ".apmc"; ValueData: "{#MyAppName}mcdata"; Flags: uninsdeletevalue; ValueType: string; ValueName: "";
Root: HKCR; Subkey: "{#MyAppName}mcdata"; ValueData: "Archipelago Minecraft Data"; Flags: uninsdeletekey; ValueType: string; ValueName: "";
diff --git a/kvui.py b/kvui.py
index 5e1b0fc030..dc8f4f4162 100644
--- a/kvui.py
+++ b/kvui.py
@@ -2,6 +2,7 @@ import os
import logging
import sys
import typing
+import re
if sys.platform == "win32":
import ctypes
@@ -72,6 +73,8 @@ if typing.TYPE_CHECKING:
else:
context_type = object
+remove_between_brackets = re.compile(r"\[.*?]")
+
# I was surprised to find this didn't already exist in kivy :(
class HoverBehavior(object):
@@ -303,7 +306,6 @@ class HintLabel(RecycleDataViewBehavior, BoxLayout):
selected = BooleanProperty(False)
striped = BooleanProperty(False)
index = None
- no_select = []
def __init__(self):
super(HintLabel, self).__init__()
@@ -321,9 +323,7 @@ class HintLabel(RecycleDataViewBehavior, BoxLayout):
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.striped = data.get("striped", False)
self.receiving_text = data["receiving"]["text"]
self.item_text = data["item"]["text"]
self.finding_text = data["finding"]["text"]
@@ -337,24 +337,44 @@ class HintLabel(RecycleDataViewBehavior, BoxLayout):
""" 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.index: # skip header
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 ",
+ 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(), ")"])
+ 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)
+ else:
+ parent = self.parent
+ parent.clear_selection()
+ parent: HintLog = parent.parent
+ # find correct column
+ for child in self.children:
+ if child.collide_point(*touch.pos):
+ key = child.sort_key
+ parent.hint_sorter = lambda element: remove_between_brackets.sub("", element[key]["text"]).lower()
+ if key == parent.sort_key:
+ # second click reverses order
+ parent.reversed = not parent.reversed
+ else:
+ parent.sort_key = key
+ parent.reversed = False
+ break
+ else:
+ logging.warning("Did not find clicked header for sorting.")
+
+ App.get_running_app().update_hints()
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:
+ if self.index:
self.selected = is_selected
@@ -646,20 +666,20 @@ class HintLog(RecycleView):
"entrance": {"text": "[u]Entrance[/u]"},
"found": {"text": "[u]Status[/u]"},
"striped": True,
- "select": False,
}
+ sort_key: str = ""
+ reversed: bool = 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
+ data = []
for hint in hints:
- self.data.append({
- "striped": striped,
+ data.append({
"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"]})},
@@ -672,7 +692,16 @@ class HintLog(RecycleView):
"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
+
+ data.sort(key=self.hint_sorter, reverse=self.reversed)
+ for i in range(0, len(data), 2):
+ data[i]["striped"] = True
+ data.insert(0, self.header)
+ self.data = data
+
+ @staticmethod
+ def hint_sorter(element: dict) -> str:
+ return ""
class E(ExceptionHandler):
@@ -721,8 +750,10 @@ class KivyJSONtoTextParser(JSONtoTextParser):
text = f"Game: {slot_info.game}
" \
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)
+ text += f"
Members:
" + "
".join(
+ escape_markup(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)
diff --git a/setup.py b/setup.py
index 3f9a7f0ba6..68cab1d5e2 100644
--- a/setup.py
+++ b/setup.py
@@ -68,7 +68,6 @@ non_apworlds: set = {
"Archipelago",
"ChecksFinder",
"Clique",
- "DLCQuest",
"Final Fantasy",
"Lufia II Ancient Cave",
"Meritous",
diff --git a/test/bases.py b/test/bases.py
index 2d4111d193..07a3e60086 100644
--- a/test/bases.py
+++ b/test/bases.py
@@ -10,7 +10,7 @@ from worlds import AutoWorld
from worlds.AutoWorld import World, call_all
from BaseClasses import Location, MultiWorld, CollectionState, ItemClassification, Item
-from worlds.alttp.Items import ItemFactory
+from worlds.alttp.Items import item_factory
class TestBase(unittest.TestCase):
@@ -91,15 +91,15 @@ class TestBase(unittest.TestCase):
items = self.multiworld.itempool[:]
items = [item for item in items if
item.name not in all_except and not ("Bottle" in item.name and "AnyBottle" in all_except)]
- items.extend(ItemFactory(item_pool[0], 1))
+ items.extend(item_factory(item_pool[0], self.multiworld.worlds[1]))
else:
- items = ItemFactory(item_pool[0], 1)
+ items = item_factory(item_pool[0], self.multiworld.worlds[1])
return self.get_state(items)
def _get_items_partial(self, item_pool, missing_item):
new_items = item_pool[0].copy()
new_items.remove(missing_item)
- items = ItemFactory(new_items, 1)
+ items = item_factory(new_items, self.multiworld.worlds[1])
return self.get_state(items)
diff --git a/test/general/__init__.py b/test/general/__init__.py
index 5e0f22f4ec..fe890e0b34 100644
--- a/test/general/__init__.py
+++ b/test/general/__init__.py
@@ -1,28 +1,50 @@
from argparse import Namespace
-from typing import Type, Tuple
+from typing import List, Optional, Tuple, Type, Union
-from BaseClasses import MultiWorld, CollectionState
-from worlds.AutoWorld import call_all, World
+from BaseClasses import CollectionState, MultiWorld
+from worlds.AutoWorld import World, call_all
gen_steps = ("generate_early", "create_regions", "create_items", "set_rules", "generate_basic", "pre_fill")
-def setup_solo_multiworld(world_type: Type[World], steps: Tuple[str, ...] = gen_steps) -> MultiWorld:
+def setup_solo_multiworld(
+ world_type: Type[World], steps: Tuple[str, ...] = gen_steps, seed: Optional[int] = None
+) -> MultiWorld:
"""
Creates a multiworld with a single player of `world_type`, sets default options, and calls provided gen steps.
:param world_type: Type of the world to generate a multiworld for
:param steps: The gen steps that should be called on the generated multiworld before returning. Default calls
steps through pre_fill
+ :param seed: The seed to be used when creating this multiworld
"""
- multiworld = MultiWorld(1)
- multiworld.game[1] = world_type.game
- multiworld.player_name = {1: "Tester"}
- multiworld.set_seed()
+ return setup_multiworld(world_type, steps, seed)
+
+
+def setup_multiworld(worlds: Union[List[Type[World]], Type[World]], steps: Tuple[str, ...] = gen_steps,
+ seed: Optional[int] = None) -> MultiWorld:
+ """
+ Creates a multiworld with a player for each provided world type, allowing duplicates, setting default options, and
+ calling the provided gen steps.
+
+ :param worlds: type/s of worlds to generate a multiworld for
+ :param steps: gen steps that should be called before returning. Default calls through pre_fill
+ :param seed: The seed to be used when creating this multiworld
+ """
+ if not isinstance(worlds, list):
+ worlds = [worlds]
+ players = len(worlds)
+ multiworld = MultiWorld(players)
+ multiworld.game = {player: world_type.game for player, world_type in enumerate(worlds, 1)}
+ multiworld.player_name = {player: f"Tester{player}" for player in multiworld.player_ids}
+ multiworld.set_seed(seed)
multiworld.state = CollectionState(multiworld)
args = Namespace()
- for name, option in world_type.options_dataclass.type_hints.items():
- setattr(args, name, {1: option.from_any(option.default)})
+ for player, world_type in enumerate(worlds, 1):
+ for key, option in world_type.options_dataclass.type_hints.items():
+ updated_options = getattr(args, key, {})
+ updated_options[player] = option.from_any(option.default)
+ setattr(args, key, updated_options)
multiworld.set_options(args)
for step in steps:
call_all(multiworld, step)
diff --git a/test/general/test_fill.py b/test/general/test_fill.py
index 489417771d..70e9e822bf 100644
--- a/test/general/test_fill.py
+++ b/test/general/test_fill.py
@@ -13,6 +13,7 @@ from worlds.generic.Rules import CollectionRule, add_item_rule, locality_rules,
def generate_multiworld(players: int = 1) -> MultiWorld:
multiworld = MultiWorld(players)
+ multiworld.set_seed(0)
multiworld.player_name = {}
multiworld.state = CollectionState(multiworld)
for i in range(players):
@@ -32,8 +33,6 @@ def generate_multiworld(players: int = 1) -> MultiWorld:
world.options = world.options_dataclass(**{option_key: getattr(multiworld, option_key)[player_id]
for option_key in world.options_dataclass.type_hints})
- multiworld.set_seed(0)
-
return multiworld
diff --git a/test/general/test_items.py b/test/general/test_items.py
index 1612937225..82b6030379 100644
--- a/test/general/test_items.py
+++ b/test/general/test_items.py
@@ -8,7 +8,7 @@ class TestBase(unittest.TestCase):
def test_create_item(self):
"""Test that a world can successfully create all items in its datapackage"""
for game_name, world_type in AutoWorldRegister.world_types.items():
- proxy_world = world_type(None, 0) # this is identical to MultiServer.py creating worlds
+ proxy_world = setup_solo_multiworld(world_type, ()).worlds[1]
for item_name in world_type.item_name_to_id:
with self.subTest("Create Item", item_name=item_name, game_name=game_name):
item = proxy_world.create_item(item_name)
diff --git a/test/general/test_player_options.py b/test/general/test_player_options.py
new file mode 100644
index 0000000000..9650fbe97a
--- /dev/null
+++ b/test/general/test_player_options.py
@@ -0,0 +1,39 @@
+import unittest
+import Generate
+
+
+class TestPlayerOptions(unittest.TestCase):
+
+ def test_update_weights(self):
+ original_weights = {
+ "scalar_1": 50,
+ "scalar_2": 25,
+ "list_1": ["string"],
+ "dict_1": {"option_a": 50, "option_b": 50},
+ "dict_2": {"option_f": 50},
+ "set_1": {"option_c"}
+ }
+
+ # test that we don't allow +merge syntax on scalar variables
+ with self.assertRaises(BaseException):
+ Generate.update_weights(original_weights, {"+scalar_1": 0}, "Tested", "")
+
+ new_weights = Generate.update_weights(original_weights, {"scalar_2": 0,
+ "+list_1": ["string_2"],
+ "+dict_1": {"option_b": 0, "option_c": 50},
+ "+set_1": {"option_c", "option_d"},
+ "dict_2": {"option_g": 50},
+ "+list_2": ["string_3"]},
+ "Tested", "")
+
+ self.assertEqual(new_weights["scalar_1"], 50)
+ self.assertEqual(new_weights["scalar_2"], 0)
+ self.assertEqual(new_weights["list_2"], ["string_3"])
+ self.assertEqual(new_weights["list_1"], ["string", "string_2"])
+ self.assertEqual(new_weights["dict_1"]["option_a"], 50)
+ self.assertEqual(new_weights["dict_1"]["option_b"], 0)
+ self.assertEqual(new_weights["dict_1"]["option_c"], 50)
+ self.assertNotIn("option_f", new_weights["dict_2"])
+ self.assertEqual(new_weights["dict_2"]["option_g"], 50)
+ self.assertEqual(len(new_weights["set_1"]), 2)
+ self.assertIn("option_d", new_weights["set_1"])
diff --git a/test/multiworld/__init__.py b/test/multiworld/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/test/multiworld/test_multiworlds.py b/test/multiworld/test_multiworlds.py
new file mode 100644
index 0000000000..677f0de829
--- /dev/null
+++ b/test/multiworld/test_multiworlds.py
@@ -0,0 +1,77 @@
+import unittest
+from typing import List, Tuple
+from unittest import TestCase
+
+from BaseClasses import CollectionState, Location, MultiWorld
+from Fill import distribute_items_restrictive
+from Options import Accessibility
+from worlds.AutoWorld import AutoWorldRegister, call_all, call_single
+from ..general import gen_steps, setup_multiworld
+
+
+class MultiworldTestBase(TestCase):
+ multiworld: MultiWorld
+
+ # similar to the implementation in WorldTestBase.test_fill
+ # but for multiple players and doesn't allow minimal accessibility
+ def fulfills_accessibility(self) -> bool:
+ """
+ Checks that the multiworld satisfies locations accessibility requirements, failing if all locations are cleared
+ but not beatable, or some locations are unreachable.
+ """
+ locations = [loc for loc in self.multiworld.get_locations()]
+ state = CollectionState(self.multiworld)
+ while locations:
+ sphere: List[Location] = []
+ for n in range(len(locations) - 1, -1, -1):
+ if locations[n].can_reach(state):
+ sphere.append(locations.pop(n))
+ self.assertTrue(sphere, f"Unreachable locations: {locations}")
+ if not sphere:
+ return False
+ for location in sphere:
+ if location.item:
+ state.collect(location.item, True, location)
+ return self.multiworld.has_beaten_game(state, 1)
+
+ def assertSteps(self, steps: Tuple[str, ...]) -> None:
+ """Calls each step individually, continuing if a step for a specific world step fails."""
+ world_types = {world.__class__ for world in self.multiworld.worlds.values()}
+ for step in steps:
+ for player, world in self.multiworld.worlds.items():
+ with self.subTest(game=world.game, step=step):
+ call_single(self.multiworld, step, player)
+ for world_type in sorted(world_types, key=lambda world: world.__name__):
+ with self.subTest(game=world_type.game, step=f"stage_{step}"):
+ stage_callable = getattr(world_type, f"stage_{step}", None)
+ if stage_callable:
+ stage_callable(self.multiworld)
+
+
+@unittest.skip("too slow for main")
+class TestAllGamesMultiworld(MultiworldTestBase):
+ def test_fills(self) -> None:
+ """Tests that a multiworld with one of every registered game world can generate."""
+ all_worlds = list(AutoWorldRegister.world_types.values())
+ self.multiworld = setup_multiworld(all_worlds, ())
+ for world in self.multiworld.worlds.values():
+ world.options.accessibility.value = Accessibility.option_locations
+ self.assertSteps(gen_steps)
+ with self.subTest("filling multiworld", seed=self.multiworld.seed):
+ distribute_items_restrictive(self.multiworld)
+ call_all(self.multiworld, "post_fill")
+ self.assertTrue(self.fulfills_accessibility(), "Collected all locations, but can't beat the game")
+
+
+class TestTwoPlayerMulti(MultiworldTestBase):
+ def test_two_player_single_game_fills(self) -> None:
+ """Tests that a multiworld of two players for each registered game world can generate."""
+ for world in AutoWorldRegister.world_types.values():
+ self.multiworld = setup_multiworld([world, world], ())
+ for world in self.multiworld.worlds.values():
+ world.options.accessibility.value = Accessibility.option_locations
+ self.assertSteps(gen_steps)
+ with self.subTest("filling multiworld", seed=self.multiworld.seed):
+ distribute_items_restrictive(self.multiworld)
+ call_all(self.multiworld, "post_fill")
+ self.assertTrue(self.fulfills_accessibility(), "Collected all locations, but can't beat the game")
diff --git a/worlds/AutoSNIClient.py b/worlds/AutoSNIClient.py
index a30dbbb46d..2b984d9c88 100644
--- a/worlds/AutoSNIClient.py
+++ b/worlds/AutoSNIClient.py
@@ -1,11 +1,35 @@
from __future__ import annotations
import abc
-from typing import TYPE_CHECKING, ClassVar, Dict, Tuple, Any, Optional
+from typing import TYPE_CHECKING, ClassVar, Dict, Iterable, Tuple, Any, Optional, Union
+
+from typing_extensions import TypeGuard
+
+from worlds.LauncherComponents import Component, SuffixIdentifier, Type, components
if TYPE_CHECKING:
from SNIClient import SNIContext
+component = Component('SNI Client', 'SNIClient', component_type=Type.CLIENT, file_identifier=SuffixIdentifier(".apsoe"))
+components.append(component)
+
+
+def valid_patch_suffix(obj: object) -> TypeGuard[Union[str, Iterable[str]]]:
+ """ make sure this is a valid value for the class variable `patch_suffix` """
+
+ def valid_individual(one: object) -> TypeGuard[str]:
+ """ check an individual suffix """
+ # TODO: decide: len(one) > 3 and one.startswith(".ap") ?
+ # or keep it more general?
+ return isinstance(one, str) and len(one) > 1 and one.startswith(".")
+
+ if isinstance(obj, str):
+ return valid_individual(obj)
+ if not isinstance(obj, Iterable):
+ return False
+ obj_it: Iterable[object] = obj
+ return all(valid_individual(each) for each in obj_it)
+
class AutoSNIClientRegister(abc.ABCMeta):
game_handlers: ClassVar[Dict[str, SNIClient]] = {}
@@ -15,6 +39,22 @@ class AutoSNIClientRegister(abc.ABCMeta):
new_class = super().__new__(cls, name, bases, dct)
if "game" in dct:
AutoSNIClientRegister.game_handlers[dct["game"]] = new_class()
+
+ if "patch_suffix" in dct:
+ patch_suffix = dct["patch_suffix"]
+ assert valid_patch_suffix(patch_suffix), f"class {name} defining invalid {patch_suffix=}"
+
+ existing_identifier = component.file_identifier
+ assert isinstance(existing_identifier, SuffixIdentifier), f"{existing_identifier=}"
+ new_suffixes = [*existing_identifier.suffixes]
+
+ if isinstance(patch_suffix, str):
+ new_suffixes.append(patch_suffix)
+ else:
+ new_suffixes.extend(patch_suffix)
+
+ component.file_identifier = SuffixIdentifier(*new_suffixes)
+
return new_class
@staticmethod
@@ -27,6 +67,9 @@ class AutoSNIClientRegister(abc.ABCMeta):
class SNIClient(abc.ABC, metaclass=AutoSNIClientRegister):
+ patch_suffix: ClassVar[Union[str, Iterable[str]]] = ()
+ """The file extension(s) this client is meant to open and patch (e.g. ".aplttp")"""
+
@abc.abstractmethod
async def validate_rom(self, ctx: SNIContext) -> bool:
""" TODO: interface documentation here """
diff --git a/worlds/AutoWorld.py b/worlds/AutoWorld.py
index dd0f46f6a6..faf14bed18 100644
--- a/worlds/AutoWorld.py
+++ b/worlds/AutoWorld.py
@@ -3,6 +3,7 @@ from __future__ import annotations
import hashlib
import logging
import pathlib
+import random
import re
import sys
import time
@@ -296,8 +297,11 @@ class World(metaclass=AutoWorldRegister):
"""path it was loaded from"""
def __init__(self, multiworld: "MultiWorld", player: int):
+ assert multiworld is not None
self.multiworld = multiworld
self.player = player
+ self.random = random.Random(multiworld.random.getrandbits(64))
+ multiworld.per_slot_randoms[player] = self.random
def __getattr__(self, item: str) -> Any:
if item == "settings":
@@ -306,13 +310,15 @@ class World(metaclass=AutoWorldRegister):
# overridable methods that get called by Main.py, sorted by execution order
# can also be implemented as a classmethod and called "stage_",
- # in that case the MultiWorld object is passed as an argument and it gets called once for the entire multiworld.
+ # in that case the MultiWorld object is passed as an argument, and it gets called once for the entire multiworld.
# An example of this can be found in alttp as stage_pre_fill
@classmethod
def stage_assert_generate(cls, multiworld: "MultiWorld") -> None:
- """Checks that a game is capable of generating, usually checks for some base file like a ROM.
- This gets called once per present world type. Not run for unittests since they don't produce output"""
+ """
+ Checks that a game is capable of generating, such as checking for some base file like a ROM.
+ This gets called once per present world type. Not run for unittests since they don't produce output.
+ """
pass
def generate_early(self) -> None:
@@ -357,16 +363,21 @@ class World(metaclass=AutoWorldRegister):
pass
def post_fill(self) -> None:
- """Optional Method that is called after regular fill. Can be used to do adjustments before output generation.
- This happens before progression balancing, so the items may not be in their final locations yet."""
+ """
+ Optional Method that is called after regular fill. Can be used to do adjustments before output generation.
+ This happens before progression balancing, so the items may not be in their final locations yet.
+ """
def generate_output(self, output_directory: str) -> None:
- """This method gets called from a threadpool, do not use multiworld.random here.
- If you need any last-second randomization, use self.random instead."""
+ """
+ This method gets called from a threadpool, do not use multiworld.random here.
+ If you need any last-second randomization, use self.random instead.
+ """
pass
def fill_slot_data(self) -> Mapping[str, Any]: # json of WebHostLib.models.Slot
- """What is returned from this function will be in the `slot_data` field
+ """
+ What is returned from this function will be in the `slot_data` field
in the `Connected` network package.
It should be a `dict` with `str` keys, and should be serializable with json.
@@ -374,15 +385,18 @@ class World(metaclass=AutoWorldRegister):
The client will receive this as JSON in the `Connected` response.
The generation does not wait for `generate_output` to complete before calling this.
- `threading.Event` can be used if you need to wait for something from `generate_output`."""
+ `threading.Event` can be used if you need to wait for something from `generate_output`.
+ """
# The reason for the `Mapping` type annotation, rather than `dict`
# is so that type checkers won't worry about the mutability of `dict`,
# so you can have more specific typing in your world implementation.
return {}
def extend_hint_information(self, hint_data: Dict[int, Dict[int, str]]):
- """Fill in additional entrance information text into locations, which is displayed when hinted.
- structure is {player_id: {location_id: text}} You will need to insert your own player_id."""
+ """
+ Fill in additional entrance information text into locations, which is displayed when hinted.
+ structure is {player_id: {location_id: text}} You will need to insert your own player_id.
+ """
pass
def modify_multidata(self, multidata: Dict[str, Any]) -> None: # TODO: TypedDict for multidata?
@@ -391,13 +405,17 @@ class World(metaclass=AutoWorldRegister):
# Spoiler writing is optional, these may not get called.
def write_spoiler_header(self, spoiler_handle: TextIO) -> None:
- """Write to the spoiler header. If individual it's right at the end of that player's options,
- if as stage it's right under the common header before per-player options."""
+ """
+ Write to the spoiler header. If individual it's right at the end of that player's options,
+ if as stage it's right under the common header before per-player options.
+ """
pass
def write_spoiler(self, spoiler_handle: TextIO) -> None:
- """Write to the spoiler "middle", this is after the per-player options and before locations,
- meant for useful or interesting info."""
+ """
+ Write to the spoiler "middle", this is after the per-player options and before locations,
+ meant for useful or interesting info.
+ """
pass
def write_spoiler_end(self, spoiler_handle: TextIO) -> None:
@@ -407,8 +425,10 @@ class World(metaclass=AutoWorldRegister):
# end of ordered Main.py calls
def create_item(self, name: str) -> "Item":
- """Create an item for this world type and player.
- Warning: this may be called with self.world = None, for example by MultiServer"""
+ """
+ Create an item for this world type and player.
+ Warning: this may be called with self.world = None, for example by MultiServer
+ """
raise NotImplementedError
def get_filler_item_name(self) -> str:
@@ -418,34 +438,42 @@ class World(metaclass=AutoWorldRegister):
@classmethod
def create_group(cls, multiworld: "MultiWorld", new_player_id: int, players: Set[int]) -> World:
- """Creates a group, which is an instance of World that is responsible for multiple others.
- An example case is ItemLinks creating these."""
+ """
+ Creates a group, which is an instance of World that is responsible for multiple others.
+ An example case is ItemLinks creating these.
+ """
# TODO remove loop when worlds use options dataclass
for option_key, option in cls.options_dataclass.type_hints.items():
- getattr(multiworld, option_key)[new_player_id] = option(option.default)
+ getattr(multiworld, option_key)[new_player_id] = option.from_any(option.default)
group = cls(multiworld, new_player_id)
- group.options = cls.options_dataclass(**{option_key: option(option.default)
+ group.options = cls.options_dataclass(**{option_key: option.from_any(option.default)
for option_key, option in cls.options_dataclass.type_hints.items()})
return group
# decent place to implement progressive items, in most cases can stay as-is
def collect_item(self, state: "CollectionState", item: "Item", remove: bool = False) -> Optional[str]:
- """Collect an item name into state. For speed reasons items that aren't logically useful get skipped.
+ """
+ Collect an item name into state. For speed reasons items that aren't logically useful get skipped.
Collect None to skip item.
:param state: CollectionState to collect into
:param item: Item to decide on if it should be collected into state
- :param remove: indicate if this is meant to remove from state instead of adding."""
+ :param remove: indicate if this is meant to remove from state instead of adding.
+ """
if item.advancement:
return item.name
return None
- # called to create all_state, return Items that are created during pre_fill
def get_pre_fill_items(self) -> List["Item"]:
+ """
+ Used to return items that need to be collected when creating a fresh all_state, but don't exist in the
+ multiworld itempool.
+ """
return []
# these two methods can be extended for pseudo-items on state
def collect(self, state: "CollectionState", item: "Item") -> bool:
+ """Called when an item is collected in to state. Useful for things such as progressive items or currency."""
name = self.collect_item(state, item)
if name:
state.prog_items[self.player][name] += 1
@@ -453,6 +481,7 @@ class World(metaclass=AutoWorldRegister):
return False
def remove(self, state: "CollectionState", item: "Item") -> bool:
+ """Called when an item is removed from to state. Useful for things such as progressive items or currency."""
name = self.collect_item(state, item, True)
if name:
state.prog_items[self.player][name] -= 1
@@ -461,6 +490,7 @@ class World(metaclass=AutoWorldRegister):
return True
return False
+ # following methods should not need to be overridden.
def create_filler(self) -> "Item":
return self.create_item(self.get_filler_item_name())
@@ -509,7 +539,8 @@ def data_package_checksum(data: "GamesPackage") -> str:
def _normalize_description(description):
- """Normalizes a description in item_descriptions or location_descriptions.
+ """
+ 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.
diff --git a/worlds/LauncherComponents.py b/worlds/LauncherComponents.py
index 7814aac5ae..41c0bb8329 100644
--- a/worlds/LauncherComponents.py
+++ b/worlds/LauncherComponents.py
@@ -85,10 +85,6 @@ components: List[Component] = [
file_identifier=SuffixIdentifier('.archipelago', '.zip')),
Component('Generate', 'Generate', cli=True),
Component('Text Client', 'CommonClient', 'ArchipelagoTextClient', func=launch_textclient),
- # SNI
- Component('SNI Client', 'SNIClient',
- file_identifier=SuffixIdentifier('.apz3', '.apm3', '.apsoe', '.aplttp', '.apsm', '.apsmz3', '.apdkc3',
- '.apsmw', '.apl2ac', '.apkdl3')),
Component('Links Awakening DX Client', 'LinksAwakeningClient',
file_identifier=SuffixIdentifier('.apladx')),
Component('LttP Adjuster', 'LttPAdjuster'),
diff --git a/worlds/_bizhawk/context.py b/worlds/_bizhawk/context.py
index 4ee6e24f59..85e2c99097 100644
--- a/worlds/_bizhawk/context.py
+++ b/worlds/_bizhawk/context.py
@@ -7,7 +7,6 @@ checking or launching the client, otherwise it will probably cause circular impo
import asyncio
import enum
import subprocess
-import traceback
from typing import Any, Dict, Optional
from CommonClient import CommonContext, ClientCommandProcessor, get_base_parser, server_loop, logger, gui_enabled
@@ -260,7 +259,7 @@ def launch() -> None:
try:
await watcher_task
except Exception as e:
- logger.error("".join(traceback.format_exception(e)))
+ logger.exception(e)
await ctx.exit_event.wait()
await ctx.shutdown()
diff --git a/worlds/alttp/Client.py b/worlds/alttp/Client.py
index edc68473b9..5b27f559ef 100644
--- a/worlds/alttp/Client.py
+++ b/worlds/alttp/Client.py
@@ -471,6 +471,7 @@ async def track_locations(ctx, roomid, roomdata) -> bool:
class ALTTPSNIClient(SNIClient):
game = "A Link to the Past"
+ patch_suffix = [".aplttp", ".apz3"]
async def deathlink_kill_player(self, ctx):
from SNIClient import DeathState, snes_read, snes_buffered_write, snes_flush_writes
diff --git a/worlds/alttp/Dungeons.py b/worlds/alttp/Dungeons.py
index c886fce920..f0b8c2d971 100644
--- a/worlds/alttp/Dungeons.py
+++ b/worlds/alttp/Dungeons.py
@@ -7,7 +7,7 @@ from BaseClasses import CollectionState, Region, MultiWorld
from Fill import fill_restrictive
from .Bosses import BossFactory, Boss
-from .Items import ItemFactory
+from .Items import item_factory
from .Regions import lookup_boss_drops, key_drop_data
from .Options import small_key_shuffle
@@ -81,90 +81,90 @@ def create_dungeons(world: "ALTTPWorld"):
return dungeon
ES = make_dungeon('Hyrule Castle', None, ['Hyrule Castle', 'Sewers', 'Sewer Drop', 'Sewers (Dark)', 'Sanctuary'],
- ItemFactory('Big Key (Hyrule Castle)', player),
- ItemFactory(['Small Key (Hyrule Castle)'] * 4, player),
- [ItemFactory('Map (Hyrule Castle)', player)])
+ item_factory('Big Key (Hyrule Castle)', world),
+ item_factory(['Small Key (Hyrule Castle)'] * 4, world),
+ [item_factory('Map (Hyrule Castle)', world)])
EP = make_dungeon('Eastern Palace', 'Armos Knights', ['Eastern Palace'],
- ItemFactory('Big Key (Eastern Palace)', player),
- ItemFactory(['Small Key (Eastern Palace)'] * 2, player),
- ItemFactory(['Map (Eastern Palace)', 'Compass (Eastern Palace)'], player))
+ item_factory('Big Key (Eastern Palace)', world),
+ item_factory(['Small Key (Eastern Palace)'] * 2, world),
+ item_factory(['Map (Eastern Palace)', 'Compass (Eastern Palace)'], world))
DP = make_dungeon('Desert Palace', 'Lanmolas',
['Desert Palace North', 'Desert Palace Main (Inner)', 'Desert Palace Main (Outer)',
- 'Desert Palace East'], ItemFactory('Big Key (Desert Palace)', player),
- ItemFactory(['Small Key (Desert Palace)'] * 4, player),
- ItemFactory(['Map (Desert Palace)', 'Compass (Desert Palace)'], player))
+ 'Desert Palace East'], item_factory('Big Key (Desert Palace)', world),
+ item_factory(['Small Key (Desert Palace)'] * 4, world),
+ item_factory(['Map (Desert Palace)', 'Compass (Desert Palace)'], world))
ToH = make_dungeon('Tower of Hera', 'Moldorm',
['Tower of Hera (Bottom)', 'Tower of Hera (Basement)', 'Tower of Hera (Top)'],
- ItemFactory('Big Key (Tower of Hera)', player),
- [ItemFactory('Small Key (Tower of Hera)', player)],
- ItemFactory(['Map (Tower of Hera)', 'Compass (Tower of Hera)'], player))
+ item_factory('Big Key (Tower of Hera)', world),
+ [item_factory('Small Key (Tower of Hera)', world)],
+ item_factory(['Map (Tower of Hera)', 'Compass (Tower of Hera)'], world))
PoD = make_dungeon('Palace of Darkness', 'Helmasaur King',
['Palace of Darkness (Entrance)', 'Palace of Darkness (Center)',
'Palace of Darkness (Big Key Chest)', 'Palace of Darkness (Bonk Section)',
'Palace of Darkness (North)', 'Palace of Darkness (Maze)',
'Palace of Darkness (Harmless Hellway)', 'Palace of Darkness (Final Section)'],
- ItemFactory('Big Key (Palace of Darkness)', player),
- ItemFactory(['Small Key (Palace of Darkness)'] * 6, player),
- ItemFactory(['Map (Palace of Darkness)', 'Compass (Palace of Darkness)'], player))
+ item_factory('Big Key (Palace of Darkness)', world),
+ item_factory(['Small Key (Palace of Darkness)'] * 6, world),
+ item_factory(['Map (Palace of Darkness)', 'Compass (Palace of Darkness)'], world))
TT = make_dungeon('Thieves Town', 'Blind', ['Thieves Town (Entrance)', 'Thieves Town (Deep)', 'Blind Fight'],
- ItemFactory('Big Key (Thieves Town)', player),
- ItemFactory(['Small Key (Thieves Town)'] * 3, player),
- ItemFactory(['Map (Thieves Town)', 'Compass (Thieves Town)'], player))
+ item_factory('Big Key (Thieves Town)', world),
+ item_factory(['Small Key (Thieves Town)'] * 3, world),
+ item_factory(['Map (Thieves Town)', 'Compass (Thieves Town)'], world))
SW = make_dungeon('Skull Woods', 'Mothula', ['Skull Woods Final Section (Entrance)', 'Skull Woods First Section',
'Skull Woods Second Section', 'Skull Woods Second Section (Drop)',
'Skull Woods Final Section (Mothula)',
'Skull Woods First Section (Right)',
'Skull Woods First Section (Left)', 'Skull Woods First Section (Top)'],
- ItemFactory('Big Key (Skull Woods)', player),
- ItemFactory(['Small Key (Skull Woods)'] * 5, player),
- ItemFactory(['Map (Skull Woods)', 'Compass (Skull Woods)'], player))
+ item_factory('Big Key (Skull Woods)', world),
+ item_factory(['Small Key (Skull Woods)'] * 5, world),
+ item_factory(['Map (Skull Woods)', 'Compass (Skull Woods)'], world))
SP = make_dungeon('Swamp Palace', 'Arrghus',
['Swamp Palace (Entrance)', 'Swamp Palace (First Room)', 'Swamp Palace (Starting Area)',
'Swamp Palace (West)', 'Swamp Palace (Center)', 'Swamp Palace (North)'],
- ItemFactory('Big Key (Swamp Palace)', player),
- ItemFactory(['Small Key (Swamp Palace)'] * 6, player),
- ItemFactory(['Map (Swamp Palace)', 'Compass (Swamp Palace)'], player))
+ item_factory('Big Key (Swamp Palace)', world),
+ item_factory(['Small Key (Swamp Palace)'] * 6, world),
+ item_factory(['Map (Swamp Palace)', 'Compass (Swamp Palace)'], world))
IP = make_dungeon('Ice Palace', 'Kholdstare',
['Ice Palace (Entrance)', 'Ice Palace (Second Section)', 'Ice Palace (Main)', 'Ice Palace (East)',
- 'Ice Palace (East Top)', 'Ice Palace (Kholdstare)'], ItemFactory('Big Key (Ice Palace)', player),
- ItemFactory(['Small Key (Ice Palace)'] * 6, player),
- ItemFactory(['Map (Ice Palace)', 'Compass (Ice Palace)'], player))
+ 'Ice Palace (East Top)', 'Ice Palace (Kholdstare)'], item_factory('Big Key (Ice Palace)', world),
+ item_factory(['Small Key (Ice Palace)'] * 6, world),
+ item_factory(['Map (Ice Palace)', 'Compass (Ice Palace)'], world))
MM = make_dungeon('Misery Mire', 'Vitreous',
['Misery Mire (Entrance)', 'Misery Mire (Main)', 'Misery Mire (West)', 'Misery Mire (Final Area)',
- 'Misery Mire (Vitreous)'], ItemFactory('Big Key (Misery Mire)', player),
- ItemFactory(['Small Key (Misery Mire)'] * 6, player),
- ItemFactory(['Map (Misery Mire)', 'Compass (Misery Mire)'], player))
+ 'Misery Mire (Vitreous)'], item_factory('Big Key (Misery Mire)', world),
+ item_factory(['Small Key (Misery Mire)'] * 6, world),
+ item_factory(['Map (Misery Mire)', 'Compass (Misery Mire)'], world))
TR = make_dungeon('Turtle Rock', 'Trinexx',
['Turtle Rock (Entrance)', 'Turtle Rock (First Section)', 'Turtle Rock (Chain Chomp Room)',
'Turtle Rock (Pokey Room)',
'Turtle Rock (Second Section)', 'Turtle Rock (Big Chest)', 'Turtle Rock (Crystaroller Room)',
'Turtle Rock (Dark Room)', 'Turtle Rock (Eye Bridge)', 'Turtle Rock (Trinexx)'],
- ItemFactory('Big Key (Turtle Rock)', player),
- ItemFactory(['Small Key (Turtle Rock)'] * 6, player),
- ItemFactory(['Map (Turtle Rock)', 'Compass (Turtle Rock)'], player))
+ item_factory('Big Key (Turtle Rock)', world),
+ item_factory(['Small Key (Turtle Rock)'] * 6, world),
+ item_factory(['Map (Turtle Rock)', 'Compass (Turtle Rock)'], world))
if multiworld.mode[player] != 'inverted':
AT = make_dungeon('Agahnims Tower', 'Agahnim', ['Agahnims Tower', 'Agahnim 1'], None,
- ItemFactory(['Small Key (Agahnims Tower)'] * 4, player), [])
+ item_factory(['Small Key (Agahnims Tower)'] * 4, world), [])
GT = make_dungeon('Ganons Tower', 'Agahnim2',
['Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)', 'Ganons Tower (Compass Room)',
'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)', 'Ganons Tower (Firesnake Room)',
'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)', 'Ganons Tower (Top)',
'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)', 'Agahnim 2'],
- ItemFactory('Big Key (Ganons Tower)', player),
- ItemFactory(['Small Key (Ganons Tower)'] * 8, player),
- ItemFactory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], player))
+ item_factory('Big Key (Ganons Tower)', world),
+ item_factory(['Small Key (Ganons Tower)'] * 8, world),
+ item_factory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], world))
else:
AT = make_dungeon('Inverted Agahnims Tower', 'Agahnim', ['Inverted Agahnims Tower', 'Agahnim 1'], None,
- ItemFactory(['Small Key (Agahnims Tower)'] * 4, player), [])
+ item_factory(['Small Key (Agahnims Tower)'] * 4, world), [])
GT = make_dungeon('Inverted Ganons Tower', 'Agahnim2',
['Inverted Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)',
'Ganons Tower (Compass Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)',
'Ganons Tower (Firesnake Room)', 'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)',
'Ganons Tower (Top)', 'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)',
- 'Agahnim 2'], ItemFactory('Big Key (Ganons Tower)', player),
- ItemFactory(['Small Key (Ganons Tower)'] * 8, player),
- ItemFactory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], player))
+ 'Agahnim 2'], item_factory('Big Key (Ganons Tower)', world),
+ item_factory(['Small Key (Ganons Tower)'] * 8, world),
+ item_factory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], world))
GT.bosses['bottom'] = BossFactory('Armos Knights', player)
GT.bosses['middle'] = BossFactory('Lanmolas', player)
@@ -259,7 +259,7 @@ def fill_dungeons_restrictive(multiworld: MultiWorld):
if not key_drop_shuffle and player not in multiworld.groups:
for key_loc in key_drop_data:
key_data = key_drop_data[key_loc]
- all_state_base.remove(ItemFactory(key_data[3], player))
+ all_state_base.remove(item_factory(key_data[3], multiworld.worlds[player]))
loc = multiworld.get_location(key_loc, player)
if loc in all_state_base.events:
diff --git a/worlds/alttp/ItemPool.py b/worlds/alttp/ItemPool.py
index bb5bbaa61a..3929342aa5 100644
--- a/worlds/alttp/ItemPool.py
+++ b/worlds/alttp/ItemPool.py
@@ -9,8 +9,8 @@ from .Shops import TakeAny, total_shop_slots, set_up_shops, shop_table_by_locati
from .Bosses import place_bosses
from .Dungeons import get_dungeon_item_pool_player
from .EntranceShuffle import connect_entrance
-from .Items import ItemFactory, GetBeemizerItem, trap_replaceable, item_name_groups
-from .Options import small_key_shuffle, compass_shuffle, big_key_shuffle, map_shuffle, TriforcePiecesMode
+from .Items import item_factory, GetBeemizerItem, trap_replaceable, item_name_groups
+from .Options import small_key_shuffle, compass_shuffle, big_key_shuffle, map_shuffle, TriforcePiecesMode, LTTPBosses
from .StateHelpers import has_triforce_pieces, has_melee_weapon
from .Regions import key_drop_data
@@ -234,15 +234,15 @@ def generate_itempool(world):
raise NotImplementedError(f"Goal {multiworld.goal[player]} for player {player}")
if multiworld.mode[player] not in ('open', 'standard', 'inverted'):
raise NotImplementedError(f"Mode {multiworld.mode[player]} for player {player}")
- if multiworld.timer[player] not in {False, 'display', 'timed', 'timed_ohko', 'ohko', 'timed_countdown'}:
- raise NotImplementedError(f"Timer {multiworld.mode[player]} for player {player}")
+ if multiworld.timer[player] not in (False, 'display', 'timed', 'timed_ohko', 'ohko', 'timed_countdown'):
+ raise NotImplementedError(f"Timer {multiworld.timer[player]} for player {player}")
if multiworld.timer[player] in ['ohko', 'timed_ohko']:
multiworld.can_take_damage[player] = False
if multiworld.goal[player] in ['pedestal', 'triforce_hunt', 'local_triforce_hunt']:
- multiworld.push_item(multiworld.get_location('Ganon', player), ItemFactory('Nothing', player), False)
+ multiworld.push_item(multiworld.get_location('Ganon', player), item_factory('Nothing', world), False)
else:
- multiworld.push_item(multiworld.get_location('Ganon', player), ItemFactory('Triforce', player), False)
+ multiworld.push_item(multiworld.get_location('Ganon', player), item_factory('Triforce', world), False)
if multiworld.goal[player] in ['triforce_hunt', 'local_triforce_hunt']:
region = multiworld.get_region('Light World', player)
@@ -252,7 +252,7 @@ def generate_itempool(world):
region.locations.append(loc)
- multiworld.push_item(loc, ItemFactory('Triforce', player), False)
+ multiworld.push_item(loc, item_factory('Triforce', world), False)
loc.event = True
loc.locked = True
@@ -271,7 +271,7 @@ def generate_itempool(world):
]
for location_name, event_name in event_pairs:
location = multiworld.get_location(location_name, player)
- event = ItemFactory(event_name, player)
+ event = item_factory(event_name, world)
multiworld.push_item(location, event, False)
location.event = location.locked = True
@@ -287,7 +287,7 @@ def generate_itempool(world):
treasure_hunt_icon, additional_triforce_pieces = get_pool_core(multiworld, player)
for item in precollected_items:
- multiworld.push_precollected(ItemFactory(item, player))
+ multiworld.push_precollected(item_factory(item, world))
if multiworld.mode[player] == 'standard' and not has_melee_weapon(multiworld.state, player):
if "Link's Uncle" not in placed_items:
@@ -326,9 +326,9 @@ def generate_itempool(world):
multiworld.escape_assist[player].append('bombs')
for (location, item) in placed_items.items():
- multiworld.get_location(location, player).place_locked_item(ItemFactory(item, player))
+ multiworld.get_location(location, player).place_locked_item(item_factory(item, world))
- items = ItemFactory(pool, player)
+ items = item_factory(pool, world)
# convert one Progressive Bow into Progressive Bow (Alt), in ID only, for ganon silvers hint text
if multiworld.worlds[player].has_progressive_bows:
for item in items:
@@ -349,7 +349,7 @@ def generate_itempool(world):
for key_loc in key_drop_data:
key_data = key_drop_data[key_loc]
- drop_item = ItemFactory(key_data[3], player)
+ drop_item = item_factory(key_data[3], world)
if not multiworld.key_drop_shuffle[player]:
if drop_item in dungeon_items:
dungeon_items.remove(drop_item)
@@ -370,7 +370,7 @@ def generate_itempool(world):
loc.address = None
elif "Small" in key_data[3] and multiworld.small_key_shuffle[player] == small_key_shuffle.option_universal:
# key drop shuffle and universal keys are on. Add universal keys in place of key drop keys.
- multiworld.itempool.append(ItemFactory(GetBeemizerItem(multiworld, player, 'Small Key (Universal)'), player))
+ multiworld.itempool.append(item_factory(GetBeemizerItem(multiworld, player, 'Small Key (Universal)'), world))
dungeon_item_replacements = sum(difficulties[multiworld.difficulty[player]].extras, []) * 2
multiworld.random.shuffle(dungeon_item_replacements)
@@ -382,7 +382,7 @@ def generate_itempool(world):
or (multiworld.map_shuffle[player] == map_shuffle.option_start_with and item.type == 'Map')):
dungeon_items.pop(x)
multiworld.push_precollected(item)
- multiworld.itempool.append(ItemFactory(dungeon_item_replacements.pop(), player))
+ multiworld.itempool.append(item_factory(dungeon_item_replacements.pop(), world))
multiworld.itempool.extend([item for item in dungeon_items])
set_up_shops(multiworld, player)
@@ -394,7 +394,7 @@ def generate_itempool(world):
location.shop_slot is not None]
for location in shop_locations:
if location.shop.inventory[location.shop_slot]["item"] == "Single Arrow":
- location.place_locked_item(ItemFactory("Single Arrow", player))
+ location.place_locked_item(item_factory("Single Arrow", world))
else:
shop_items += 1
else:
@@ -406,9 +406,9 @@ def generate_itempool(world):
multiworld.small_key_shuffle[player] == small_key_shuffle.option_universal) * 0.5
for _ in range(shop_items):
if multiworld.random.random() < chance_100:
- items.append(ItemFactory(GetBeemizerItem(multiworld, player, "Rupees (100)"), player))
+ items.append(item_factory(GetBeemizerItem(multiworld, player, "Rupees (100)"), world))
else:
- items.append(ItemFactory(GetBeemizerItem(multiworld, player, "Rupees (50)"), player))
+ items.append(item_factory(GetBeemizerItem(multiworld, player, "Rupees (50)"), world))
multiworld.random.shuffle(items)
pool_count = len(items)
@@ -431,7 +431,7 @@ def generate_itempool(world):
new_items += ["Arrow Upgrade (+5)"] * 6
new_items.append("Arrow Upgrade (+5)" if progressive else "Arrow Upgrade (+10)")
- items += [ItemFactory(item, player) for item in new_items]
+ items += [item_factory(item, world) for item in new_items]
removed_filler = []
multiworld.random.shuffle(items) # Decide what gets tossed randomly.
@@ -444,22 +444,22 @@ def generate_itempool(world):
else:
# no more junk to remove, condense progressive items
def condense_items(items, small_item, big_item, rem, add):
- small_item = ItemFactory(small_item, player)
+ small_item = item_factory(small_item, world)
# while (len(items) >= pool_count + rem - 1 # minus 1 to account for the replacement item
# and items.count(small_item) >= rem):
if items.count(small_item) >= rem:
for _ in range(rem):
items.remove(small_item)
- removed_filler.append(ItemFactory(small_item.name, player))
- items += [ItemFactory(big_item, player) for _ in range(add)]
+ removed_filler.append(item_factory(small_item.name, world))
+ items += [item_factory(big_item, world) for _ in range(add)]
return True
return False
def cut_item(items, item_to_cut, minimum_items):
- item_to_cut = ItemFactory(item_to_cut, player)
+ item_to_cut = item_factory(item_to_cut, world)
if items.count(item_to_cut) > minimum_items:
items.remove(item_to_cut)
- removed_filler.append(ItemFactory(item_to_cut.name, player))
+ removed_filler.append(item_factory(item_to_cut.name, world))
return True
return False
@@ -551,7 +551,7 @@ def set_up_take_anys(world, player):
if swords:
sword = world.random.choice(swords)
world.itempool.remove(sword)
- world.itempool.append(ItemFactory('Rupees (20)', player))
+ world.itempool.append(item_factory('Rupees (20)', world))
old_man_take_any.shop.add_inventory(0, sword.name, 0, 0)
loc_name = "Old Man Sword Cave"
location = ALttPLocation(player, loc_name, shop_table_by_location[loc_name], parent=old_man_take_any)
@@ -577,7 +577,7 @@ def set_up_take_anys(world, player):
location = ALttPLocation(player, take_any.name, shop_table_by_location[take_any.name], parent=take_any)
location.shop_slot = 1
take_any.locations.append(location)
- location.place_locked_item(ItemFactory("Boss Heart Container", player))
+ location.place_locked_item(item_factory("Boss Heart Container", world))
def get_pool_core(world, player: int):
@@ -605,7 +605,7 @@ def get_pool_core(world, player: int):
placed_items[loc] = item
# provide boots to major glitch dependent seeds
- if logic in {'overworld_glitches', 'hybrid_major_glitches', 'no_logic'} and world.glitch_boots[player]:
+ if logic.current_key in {'overworld_glitches', 'hybrid_major_glitches', 'no_logic'} and world.glitch_boots[player]:
precollected_items.append('Pegasus Boots')
pool.remove('Pegasus Boots')
pool.append('Rupees (20)')
diff --git a/worlds/alttp/Items.py b/worlds/alttp/Items.py
index 8e513552ad..cb44f35d58 100644
--- a/worlds/alttp/Items.py
+++ b/worlds/alttp/Items.py
@@ -1,6 +1,7 @@
import typing
from BaseClasses import ItemClassification as IC
+from worlds.AutoWorld import World
def GetBeemizerItem(world, player: int, item):
@@ -17,13 +18,10 @@ def GetBeemizerItem(world, player: int, item):
if not world.beemizer_trap_chance[player] or world.random.random() > (world.beemizer_trap_chance[player] / 100):
return "Bee" if isinstance(item, str) else world.create_item("Bee", player)
else:
- return "Bee Trap" if isinstance(item, str) else world.create_item("Bee Trap", player)
+ return "Bee Trap" if isinstance(item, str) else world.create_item("Bee Trap", player)
-# should be replaced with direct world.create_item(item) call in the future
-def ItemFactory(items: typing.Union[str, typing.Iterable[str]], player: int):
- from worlds.alttp import ALTTPWorld
- world = ALTTPWorld(None, player)
+def item_factory(items: typing.Union[str, typing.Iterable[str]], world: World):
ret = []
singleton = False
if isinstance(items, str):
diff --git a/worlds/alttp/Options.py b/worlds/alttp/Options.py
index afd5295545..2b23dc341c 100644
--- a/worlds/alttp/Options.py
+++ b/worlds/alttp/Options.py
@@ -156,7 +156,7 @@ class OpenPyramid(Choice):
return world.goal[player].current_key in {'crystals', 'ganon_triforce_hunt', 'local_ganon_triforce_hunt', 'ganon_pedestal'}
elif self.value == self.option_auto:
return world.goal[player].current_key in {'crystals', 'ganon_triforce_hunt', 'local_ganon_triforce_hunt', 'ganon_pedestal'} \
- and (world.entrance_shuffle[player] in {'vanilla', 'dungeons_simple', 'dungeons_full', 'dungeons_crossed'} or not
+ and (world.entrance_shuffle[player].current_key in {'vanilla', 'dungeons_simple', 'dungeons_full', 'dungeons_crossed'} or not
world.shuffle_ganon)
elif self.value == self.option_open:
return True
diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py
index ff4947bb01..6ef1f0db19 100644
--- a/worlds/alttp/Rom.py
+++ b/worlds/alttp/Rom.py
@@ -34,7 +34,7 @@ from .Text import KingsReturn_texts, Sanctuary_texts, Kakariko_texts, Blacksmith
DeathMountain_texts, \
LostWoods_texts, WishingWell_texts, DesertPalace_texts, MountainTower_texts, LinksHouse_texts, Lumberjacks_texts, \
SickKid_texts, FluteBoy_texts, Zora_texts, MagicShop_texts, Sahasrahla_names
-from .Items import ItemFactory, item_table, item_name_groups, progression_items
+from .Items import item_table, item_name_groups, progression_items
from .EntranceShuffle import door_addresses
from .Options import small_key_shuffle
@@ -996,7 +996,7 @@ def patch_rom(world: MultiWorld, rom: LocalRom, player: int, enemized: bool):
rom.write_byte(0x18003A, 0x01 if world.dark_world_light_cone else 0x00)
GREEN_TWENTY_RUPEES = 0x47
- GREEN_CLOCK = ItemFactory('Green Clock', player).code
+ GREEN_CLOCK = item_table["Green Clock"].item_code
rom.write_byte(0x18004F, 0x01) # Byrna Invulnerability: on
@@ -1777,13 +1777,13 @@ def write_custom_shops(rom, world, player):
if item['player'] and world.game[item['player']] != "A Link to the Past": # item not native to ALTTP
item_code = get_nonnative_item_sprite(world.worlds[item['player']].item_name_to_id[item['item']])
else:
- item_code = ItemFactory(item['item'], player).code
+ item_code = item_table[item["item"]].item_code
if item['item'] == 'Single Arrow' and item['player'] == 0 and world.retro_bow[player]:
rom.write_byte(0x186500 + shop.sram_offset + slot, arrow_mask)
item_data = [shop_id, item_code] + price_data + \
- [item['max'], ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF] + \
- replacement_price_data + [0 if item['player'] == player else min(ROM_PLAYER_LIMIT, item['player'])]
+ [item["max"], item_table[item["replacement"]].item_code if item["replacement"] else 0xFF] + \
+ replacement_price_data + [0 if item["player"] == player else min(ROM_PLAYER_LIMIT, item["player"])]
items_data.extend(item_data)
rom.write_bytes(0x184800, shop_data)
diff --git a/worlds/alttp/Rules.py b/worlds/alttp/Rules.py
index b86a793fb9..320f9fe6fd 100644
--- a/worlds/alttp/Rules.py
+++ b/worlds/alttp/Rules.py
@@ -8,7 +8,7 @@ from worlds.generic.Rules import (add_item_rule, add_rule, forbid_item,
from . import OverworldGlitchRules
from .Bosses import GanonDefeatRule
-from .Items import ItemFactory, item_name_groups, item_table, progression_items
+from .Items import item_factory, item_name_groups, item_table, progression_items
from .Options import small_key_shuffle
from .OverworldGlitchRules import no_logic_rules, overworld_glitches_rules
from .Regions import LTTPRegionType, location_table
@@ -89,7 +89,7 @@ def set_rules(world):
if world.mode[player] != 'inverted':
set_big_bomb_rules(world, player)
- if world.glitches_required[player] in {'overworld_glitches', 'hybrid_major_glitches', 'no_logic'} and world.entrance_shuffle[player] not in {'insanity', 'insanity_legacy', 'madness'}:
+ if world.glitches_required[player].current_key in {'overworld_glitches', 'hybrid_major_glitches', 'no_logic'} and world.entrance_shuffle[player].current_key not in {'insanity', 'insanity_legacy', 'madness'}:
path_to_courtyard = mirrorless_path_to_castle_courtyard(world, player)
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.multiworld.get_entrance('Dark Death Mountain Offset Mirror', player).can_reach(state) and all(rule(state) for rule in path_to_courtyard), 'or')
else:
@@ -1181,7 +1181,7 @@ def set_trock_key_rules(world, player):
forbid_item(world.get_location(location, player), 'Big Key (Turtle Rock)', player)
else:
# A key is required in the Big Key Chest to prevent a possible softlock. Place an extra key to ensure 100% locations still works
- item = ItemFactory('Small Key (Turtle Rock)', player)
+ item = item_factory('Small Key (Turtle Rock)', world.worlds[player])
location = world.get_location('Turtle Rock - Big Key Chest', player)
location.place_locked_item(item)
location.event = True
diff --git a/worlds/alttp/__init__.py b/worlds/alttp/__init__.py
index a7ade61c9e..63c53007d8 100644
--- a/worlds/alttp/__init__.py
+++ b/worlds/alttp/__init__.py
@@ -642,17 +642,18 @@ class ALTTPWorld(World):
return ALttPItem(name, self.player, **item_init_table[name])
@classmethod
- def stage_fill_hook(cls, world, progitempool, usefulitempool, filleritempool, fill_locations):
+ def stage_fill_hook(cls, multiworld, progitempool, usefulitempool, filleritempool, fill_locations):
trash_counts = {}
- for player in world.get_game_players("A Link to the Past"):
- if not world.ganonstower_vanilla[player] or \
- world.glitches_required[player] in {'overworld_glitches', 'hybrid_major_glitches', "no_logic"}:
+ for player in multiworld.get_game_players("A Link to the Past"):
+ world = multiworld.worlds[player]
+ if not multiworld.ganonstower_vanilla[player] or \
+ world.options.glitches_required.current_key in {'overworld_glitches', 'hybrid_major_glitches', "no_logic"}:
pass
- elif 'triforce_hunt' in world.goal[player].current_key and ('local' in world.goal[player].current_key or world.players == 1):
- trash_counts[player] = world.random.randint(world.crystals_needed_for_gt[player] * 2,
- world.crystals_needed_for_gt[player] * 4)
+ elif 'triforce_hunt' in world.options.goal.current_key and ('local' in world.options.goal.current_key or world.players == 1):
+ trash_counts[player] = multiworld.random.randint(world.options.crystals_needed_for_gt * 2,
+ world.options.crystals_needed_for_gt * 4)
else:
- trash_counts[player] = world.random.randint(0, world.crystals_needed_for_gt[player] * 2)
+ trash_counts[player] = multiworld.random.randint(0, world.options.crystals_needed_for_gt * 2)
if trash_counts:
locations_mapping = {player: [] for player in trash_counts}
@@ -662,14 +663,14 @@ class ALTTPWorld(World):
for player, trash_count in trash_counts.items():
gtower_locations = locations_mapping[player]
- world.random.shuffle(gtower_locations)
+ multiworld.random.shuffle(gtower_locations)
while gtower_locations and filleritempool and trash_count > 0:
spot_to_fill = gtower_locations.pop()
for index, item in enumerate(filleritempool):
if spot_to_fill.item_rule(item):
filleritempool.pop(index) # remove from outer fill
- world.push_item(spot_to_fill, item, False)
+ multiworld.push_item(spot_to_fill, item, False)
fill_locations.remove(spot_to_fill) # very slow, unfortunately
trash_count -= 1
break
diff --git a/worlds/alttp/docs/multiworld_en.md b/worlds/alttp/docs/multiworld_en.md
index 7521def36e..5d7fc43e31 100644
--- a/worlds/alttp/docs/multiworld_en.md
+++ b/worlds/alttp/docs/multiworld_en.md
@@ -5,11 +5,12 @@
- [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases).
- [SNI](https://github.com/alttpo/sni/releases). This is automatically included with your Archipelago installation above.
- SNI is not compatible with (Q)Usb2Snes.
-- Hardware or software capable of loading and playing SNES ROM files
+- Hardware or software capable of loading and playing SNES ROM files, including:
- An emulator capable of connecting to SNI
- ([snes9x rr](https://github.com/gocha/snes9x-rr/releases),
- [BizHawk](https://tasvideos.org/BizHawk), or
- [RetroArch](https://retroarch.com?page=platforms) 1.10.1 or newer). Or,
+ ([snes9x-nwa](https://github.com/Skarsnik/snes9x-emunwa/releases), [snes9x-rr](https://github.com/gocha/snes9x-rr/releases),
+ [BSNES-plus](https://github.com/black-sliver/bsnes-plus),
+ [BizHawk](http://tasvideos.org/BizHawk.html), or
+ [RetroArch](https://retroarch.com?page=platforms) 1.10.1 or newer)
- An SD2SNES, [FXPak Pro](https://krikzz.com/store/home/54-fxpak-pro.html), or other compatible hardware. **note:
modded SNES minis are currently not supported by SNI. Some users have claimed success with QUsb2Snes for this system,
but it is not supported.**
@@ -47,6 +48,11 @@ client, and will also create your ROM in the same place as your patch file.
When the client launched automatically, SNI should have also automatically launched in the background. If this is its
first time launching, you may be prompted to allow it to communicate through the Windows Firewall.
+#### snes9x-nwa
+
+1. Click on the Network Menu and check **Enable Emu Network Control**
+2. Load your ROM file if it hasn't already been loaded.
+
##### snes9x-rr
1. Load your ROM file if it hasn't already been loaded.
@@ -58,6 +64,11 @@ first time launching, you may be prompted to allow it to communicate through the
6. If you see an error while loading the script that states `socket.dll missing` or similar, navigate to the folder of
the lua you are using in your file explorer and copy the `socket.dll` to the base folder of your snes9x install.
+#### BSNES-Plus
+
+1. Load your ROM file if it hasn't already been loaded.
+2. The emulator should automatically connect while SNI is running.
+
##### BizHawk
1. Ensure you have the BSNES core loaded. This is done with the main menubar, under:
diff --git a/worlds/alttp/test/__init__.py b/worlds/alttp/test/__init__.py
index 5baaa7e88e..49033a6ce3 100644
--- a/worlds/alttp/test/__init__.py
+++ b/worlds/alttp/test/__init__.py
@@ -14,3 +14,4 @@ class LTTPTestBase(unittest.TestCase):
for name, option in AutoWorldRegister.world_types["A Link to the Past"].options_dataclass.type_hints.items():
setattr(args, name, {1: option.from_any(getattr(option, "default"))})
self.multiworld.set_options(args)
+ self.world = self.multiworld.worlds[1]
diff --git a/worlds/alttp/test/dungeons/TestDungeon.py b/worlds/alttp/test/dungeons/TestDungeon.py
index 1f8288ace0..128f8b41b7 100644
--- a/worlds/alttp/test/dungeons/TestDungeon.py
+++ b/worlds/alttp/test/dungeons/TestDungeon.py
@@ -2,7 +2,7 @@ from BaseClasses import CollectionState, ItemClassification
from worlds.alttp.Dungeons import get_dungeon_item_pool
from worlds.alttp.EntranceShuffle import mandatory_connections, connect_simple
from worlds.alttp.ItemPool import difficulties
-from worlds.alttp.Items import ItemFactory
+from worlds.alttp.Items import item_factory
from worlds.alttp.Regions import create_regions
from worlds.alttp.Shops import create_shops
from worlds.alttp.test import LTTPTestBase
@@ -24,10 +24,10 @@ class TestDungeon(LTTPTestBase):
connect_simple(self.multiworld, 'Big Bomb Shop', 'Big Bomb Shop', 1)
self.multiworld.get_region('Menu', 1).exits = []
self.multiworld.swamp_patch_required[1] = True
- self.multiworld.worlds[1].set_rules()
- self.multiworld.worlds[1].create_items()
+ self.world.set_rules()
+ self.world.create_items()
self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
- self.multiworld.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
+ self.multiworld.itempool.extend(item_factory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], self.world))
def run_tests(self, access_pool):
for exit in self.remove_exits:
@@ -40,9 +40,9 @@ class TestDungeon(LTTPTestBase):
if all_except and len(all_except) > 0:
items = self.multiworld.itempool[:]
items = [item for item in items if item.name not in all_except and not ("Bottle" in item.name and "AnyBottle" in all_except)]
- items.extend(ItemFactory(item_pool[0], 1))
+ items.extend(item_factory(item_pool[0], self.world))
else:
- items = ItemFactory(items, 1)
+ items = item_factory(items, self.world)
state = CollectionState(self.multiworld)
state.reachable_regions[1].add(self.multiworld.get_region('Menu', 1))
for region_name in self.starting_regions:
diff --git a/worlds/alttp/test/inverted/TestInverted.py b/worlds/alttp/test/inverted/TestInverted.py
index f2c585e465..069639e81b 100644
--- a/worlds/alttp/test/inverted/TestInverted.py
+++ b/worlds/alttp/test/inverted/TestInverted.py
@@ -2,7 +2,7 @@ from worlds.alttp.Dungeons import create_dungeons, get_dungeon_item_pool
from worlds.alttp.EntranceShuffle import link_inverted_entrances
from worlds.alttp.InvertedRegions import create_inverted_regions
from worlds.alttp.ItemPool import difficulties
-from worlds.alttp.Items import ItemFactory
+from worlds.alttp.Items import item_factory
from worlds.alttp.Regions import mark_light_world_regions
from worlds.alttp.Shops import create_shops
from test.TestBase import TestBase
@@ -18,14 +18,14 @@ class TestInverted(TestBase, LTTPTestBase):
self.multiworld.bombless_start[1].value = True
self.multiworld.shuffle_capacity_upgrades[1].value = True
create_inverted_regions(self.multiworld, 1)
- self.multiworld.worlds[1].create_dungeons()
+ self.world.create_dungeons()
create_shops(self.multiworld, 1)
link_inverted_entrances(self.multiworld, 1)
- self.multiworld.worlds[1].create_items()
+ self.world.create_items()
self.multiworld.required_medallions[1] = ['Ether', 'Quake']
self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
- self.multiworld.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
+ self.multiworld.itempool.extend(item_factory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], self.world))
self.multiworld.get_location('Agahnim 1', 1).item = None
self.multiworld.get_location('Agahnim 2', 1).item = None
mark_light_world_regions(self.multiworld, 1)
- self.multiworld.worlds[1].set_rules()
+ self.world.set_rules()
diff --git a/worlds/alttp/test/inverted_minor_glitches/TestInvertedMinor.py b/worlds/alttp/test/inverted_minor_glitches/TestInvertedMinor.py
index 0219332e07..912cca4390 100644
--- a/worlds/alttp/test/inverted_minor_glitches/TestInvertedMinor.py
+++ b/worlds/alttp/test/inverted_minor_glitches/TestInvertedMinor.py
@@ -1,8 +1,9 @@
-from worlds.alttp.Dungeons import create_dungeons, get_dungeon_item_pool
+from worlds.alttp.Dungeons import get_dungeon_item_pool
from worlds.alttp.EntranceShuffle import link_inverted_entrances
from worlds.alttp.InvertedRegions import create_inverted_regions
from worlds.alttp.ItemPool import difficulties
-from worlds.alttp.Items import ItemFactory
+from worlds.alttp.Items import item_factory
+from worlds.alttp.Options import GlitchesRequired
from worlds.alttp.Regions import mark_light_world_regions
from worlds.alttp.Shops import create_shops
from test.TestBase import TestBase
@@ -14,19 +15,19 @@ class TestInvertedMinor(TestBase, LTTPTestBase):
def setUp(self):
self.world_setup()
self.multiworld.mode[1].value = 2
- self.multiworld.glitches_required[1] = "minor_glitches"
+ self.multiworld.glitches_required[1] = GlitchesRequired.from_any("minor_glitches")
self.multiworld.bombless_start[1].value = True
self.multiworld.shuffle_capacity_upgrades[1].value = True
self.multiworld.difficulty_requirements[1] = difficulties['normal']
create_inverted_regions(self.multiworld, 1)
- self.multiworld.worlds[1].create_dungeons()
+ self.world.create_dungeons()
create_shops(self.multiworld, 1)
link_inverted_entrances(self.multiworld, 1)
- self.multiworld.worlds[1].create_items()
+ self.world.create_items()
self.multiworld.required_medallions[1] = ['Ether', 'Quake']
self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
- self.multiworld.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
+ self.multiworld.itempool.extend(item_factory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], self.world))
self.multiworld.get_location('Agahnim 1', 1).item = None
self.multiworld.get_location('Agahnim 2', 1).item = None
mark_light_world_regions(self.multiworld, 1)
- self.multiworld.worlds[1].set_rules()
+ self.world.set_rules()
diff --git a/worlds/alttp/test/inverted_owg/TestInvertedOWG.py b/worlds/alttp/test/inverted_owg/TestInvertedOWG.py
index 849f06098a..fc38437e3e 100644
--- a/worlds/alttp/test/inverted_owg/TestInvertedOWG.py
+++ b/worlds/alttp/test/inverted_owg/TestInvertedOWG.py
@@ -1,8 +1,9 @@
-from worlds.alttp.Dungeons import create_dungeons, get_dungeon_item_pool
+from worlds.alttp.Dungeons import get_dungeon_item_pool
from worlds.alttp.EntranceShuffle import link_inverted_entrances
from worlds.alttp.InvertedRegions import create_inverted_regions
from worlds.alttp.ItemPool import difficulties
-from worlds.alttp.Items import ItemFactory
+from worlds.alttp.Items import item_factory
+from worlds.alttp.Options import GlitchesRequired
from worlds.alttp.Regions import mark_light_world_regions
from worlds.alttp.Shops import create_shops
from test.TestBase import TestBase
@@ -13,22 +14,22 @@ from worlds.alttp.test import LTTPTestBase
class TestInvertedOWG(TestBase, LTTPTestBase):
def setUp(self):
self.world_setup()
- self.multiworld.glitches_required[1] = "overworld_glitches"
+ self.multiworld.glitches_required[1] = GlitchesRequired.from_any("overworld_glitches")
self.multiworld.mode[1].value = 2
self.multiworld.bombless_start[1].value = True
self.multiworld.shuffle_capacity_upgrades[1].value = True
self.multiworld.difficulty_requirements[1] = difficulties['normal']
create_inverted_regions(self.multiworld, 1)
- self.multiworld.worlds[1].create_dungeons()
+ self.world.create_dungeons()
create_shops(self.multiworld, 1)
link_inverted_entrances(self.multiworld, 1)
- self.multiworld.worlds[1].create_items()
+ self.world.create_items()
self.multiworld.required_medallions[1] = ['Ether', 'Quake']
self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
- self.multiworld.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
+ self.multiworld.itempool.extend(item_factory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], self.world))
self.multiworld.get_location('Agahnim 1', 1).item = None
self.multiworld.get_location('Agahnim 2', 1).item = None
self.multiworld.precollected_items[1].clear()
- self.multiworld.itempool.append(ItemFactory('Pegasus Boots', 1))
+ self.multiworld.itempool.append(item_factory('Pegasus Boots', self.world))
mark_light_world_regions(self.multiworld, 1)
- self.multiworld.worlds[1].set_rules()
+ self.world.set_rules()
diff --git a/worlds/alttp/test/minor_glitches/TestMinor.py b/worlds/alttp/test/minor_glitches/TestMinor.py
index c7de74d3a6..a7b529382e 100644
--- a/worlds/alttp/test/minor_glitches/TestMinor.py
+++ b/worlds/alttp/test/minor_glitches/TestMinor.py
@@ -1,8 +1,9 @@
from worlds.alttp.Dungeons import get_dungeon_item_pool
from worlds.alttp.InvertedRegions import mark_dark_world_regions
from worlds.alttp.ItemPool import difficulties
-from worlds.alttp.Items import ItemFactory
+from worlds.alttp.Items import item_factory
from test.TestBase import TestBase
+from worlds.alttp.Options import GlitchesRequired
from worlds.alttp.test import LTTPTestBase
@@ -10,19 +11,19 @@ from worlds.alttp.test import LTTPTestBase
class TestMinor(TestBase, LTTPTestBase):
def setUp(self):
self.world_setup()
- self.multiworld.glitches_required[1] = "minor_glitches"
+ self.multiworld.glitches_required[1] = GlitchesRequired.from_any("minor_glitches")
self.multiworld.bombless_start[1].value = True
self.multiworld.shuffle_capacity_upgrades[1].value = True
self.multiworld.difficulty_requirements[1] = difficulties['normal']
- self.multiworld.worlds[1].er_seed = 0
- self.multiworld.worlds[1].create_regions()
- self.multiworld.worlds[1].create_items()
+ self.world.er_seed = 0
+ self.world.create_regions()
+ self.world.create_items()
self.multiworld.required_medallions[1] = ['Ether', 'Quake']
self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
- self.multiworld.itempool.extend(ItemFactory(
+ self.multiworld.itempool.extend(item_factory(
['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1',
- 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
+ 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], self.world))
self.multiworld.get_location('Agahnim 1', 1).item = None
self.multiworld.get_location('Agahnim 2', 1).item = None
mark_dark_world_regions(self.multiworld, 1)
- self.multiworld.worlds[1].set_rules()
+ self.world.set_rules()
diff --git a/worlds/alttp/test/options/TestOpenPyramid.py b/worlds/alttp/test/options/TestOpenPyramid.py
index 895ecb95a9..c7912c43d7 100644
--- a/worlds/alttp/test/options/TestOpenPyramid.py
+++ b/worlds/alttp/test/options/TestOpenPyramid.py
@@ -1,5 +1,5 @@
-from test.TestBase import WorldTestBase
-from ...Items import ItemFactory
+from test.bases import WorldTestBase
+from ...Items import item_factory
class PyramidTestBase(WorldTestBase):
@@ -32,6 +32,6 @@ class GoalPyramidTest(PyramidTestBase):
self.assertFalse(self.can_reach_entrance("Pyramid Hole"))
self.collect_by_name(["Hammer", "Progressive Glove", "Moon Pearl"])
self.assertFalse(self.can_reach_entrance("Pyramid Hole"))
- self.multiworld.state.collect(ItemFactory("Beat Agahnim 2", 1))
+ self.collect(item_factory("Beat Agahnim 2", self.multiworld.worlds[1]))
self.assertTrue(self.can_reach_entrance("Pyramid Hole"))
diff --git a/worlds/alttp/test/owg/TestVanillaOWG.py b/worlds/alttp/test/owg/TestVanillaOWG.py
index 1f8f2707ed..3506154587 100644
--- a/worlds/alttp/test/owg/TestVanillaOWG.py
+++ b/worlds/alttp/test/owg/TestVanillaOWG.py
@@ -1,8 +1,9 @@
from worlds.alttp.Dungeons import get_dungeon_item_pool
from worlds.alttp.InvertedRegions import mark_dark_world_regions
from worlds.alttp.ItemPool import difficulties
-from worlds.alttp.Items import ItemFactory
+from worlds.alttp.Items import item_factory
from test.TestBase import TestBase
+from worlds.alttp.Options import GlitchesRequired
from worlds.alttp.test import LTTPTestBase
@@ -11,7 +12,7 @@ class TestVanillaOWG(TestBase, LTTPTestBase):
def setUp(self):
self.world_setup()
self.multiworld.difficulty_requirements[1] = difficulties['normal']
- self.multiworld.glitches_required[1] = "overworld_glitches"
+ self.multiworld.glitches_required[1] = GlitchesRequired.from_any("overworld_glitches")
self.multiworld.bombless_start[1].value = True
self.multiworld.shuffle_capacity_upgrades[1].value = True
self.multiworld.worlds[1].er_seed = 0
@@ -19,10 +20,10 @@ class TestVanillaOWG(TestBase, LTTPTestBase):
self.multiworld.worlds[1].create_items()
self.multiworld.required_medallions[1] = ['Ether', 'Quake']
self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
- self.multiworld.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
+ self.multiworld.itempool.extend(item_factory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], self.world))
self.multiworld.get_location('Agahnim 1', 1).item = None
self.multiworld.get_location('Agahnim 2', 1).item = None
self.multiworld.precollected_items[1].clear()
- self.multiworld.itempool.append(ItemFactory('Pegasus Boots', 1))
+ self.multiworld.itempool.append(item_factory('Pegasus Boots', self.world))
mark_dark_world_regions(self.multiworld, 1)
- self.multiworld.worlds[1].set_rules()
\ No newline at end of file
+ self.world.set_rules()
diff --git a/worlds/alttp/test/vanilla/TestVanilla.py b/worlds/alttp/test/vanilla/TestVanilla.py
index 3f4fbad8c2..5865ddf987 100644
--- a/worlds/alttp/test/vanilla/TestVanilla.py
+++ b/worlds/alttp/test/vanilla/TestVanilla.py
@@ -1,15 +1,16 @@
from worlds.alttp.Dungeons import get_dungeon_item_pool
from worlds.alttp.InvertedRegions import mark_dark_world_regions
from worlds.alttp.ItemPool import difficulties
-from worlds.alttp.Items import ItemFactory
+from worlds.alttp.Items import item_factory
from test.TestBase import TestBase
+from worlds.alttp.Options import GlitchesRequired
from worlds.alttp.test import LTTPTestBase
class TestVanilla(TestBase, LTTPTestBase):
def setUp(self):
self.world_setup()
- self.multiworld.glitches_required[1] = "no_glitches"
+ self.multiworld.glitches_required[1] = GlitchesRequired.from_any("no_glitches")
self.multiworld.difficulty_requirements[1] = difficulties['normal']
self.multiworld.bombless_start[1].value = True
self.multiworld.shuffle_capacity_upgrades[1].value = True
@@ -18,8 +19,8 @@ class TestVanilla(TestBase, LTTPTestBase):
self.multiworld.worlds[1].create_items()
self.multiworld.required_medallions[1] = ['Ether', 'Quake']
self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
- self.multiworld.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
+ self.multiworld.itempool.extend(item_factory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], self.world))
self.multiworld.get_location('Agahnim 1', 1).item = None
self.multiworld.get_location('Agahnim 2', 1).item = None
mark_dark_world_regions(self.multiworld, 1)
- self.multiworld.worlds[1].set_rules()
\ No newline at end of file
+ self.world.set_rules()
diff --git a/worlds/bumpstik/__init__.py b/worlds/bumpstik/__init__.py
index d93b25cda5..9fc9fc214e 100644
--- a/worlds/bumpstik/__init__.py
+++ b/worlds/bumpstik/__init__.py
@@ -116,12 +116,12 @@ class BumpStikWorld(World):
self.multiworld.itempool += item_pool
def set_rules(self):
- for x in range(1, 32):
- self.multiworld.get_location(f"Treasure Bumper {x + 1}", self.player).access_rule = \
- lambda state, x = x: state.has("Treasure Bumper", self.player, x)
- for x in range(1, 5):
- self.multiworld.get_location(f"Bonus Booster {x + 1}", self.player).access_rule = \
- lambda state, x = x: state.has("Booster Bumper", self.player, x)
+ for treasure_count in range(1, 33):
+ self.multiworld.get_location(f"Treasure Bumper {treasure_count}", self.player).access_rule = \
+ lambda state, treasure_held = treasure_count: state.has("Treasure Bumper", self.player, treasure_held)
+ for booster_count in range(1, 6):
+ self.multiworld.get_location(f"Bonus Booster {booster_count}", self.player).access_rule = \
+ lambda state, booster_held = booster_count: state.has("Booster Bumper", self.player, booster_held)
self.multiworld.get_location("Level 5 - Cleared all Hazards", self.player).access_rule = \
lambda state: state.has("Hazard Bumper", self.player, 25)
diff --git a/worlds/bumpstik/test/TestLogic.py b/worlds/bumpstik/test/TestLogic.py
index e374b7b1e9..a252f1e584 100644
--- a/worlds/bumpstik/test/TestLogic.py
+++ b/worlds/bumpstik/test/TestLogic.py
@@ -3,36 +3,38 @@ from . import BumpStikTestBase
class TestRuleLogic(BumpStikTestBase):
def testLogic(self):
- for x in range(1, 33):
- if x == 32:
+ for treasure_bumpers_held in range(1, 33):
+ if treasure_bumpers_held == 32:
self.assertFalse(self.can_reach_location("Level 5 - Cleared all Hazards"))
self.collect(self.get_item_by_name("Treasure Bumper"))
- if x % 8 == 0:
- bb_count = round(x / 8)
+ if treasure_bumpers_held % 8 == 0:
+ bb_count = round(treasure_bumpers_held / 8)
if bb_count < 4:
- self.assertFalse(self.can_reach_location(f"Treasure Bumper {x + 1}"))
+ self.assertFalse(self.can_reach_location(f"Treasure Bumper {treasure_bumpers_held + 1}"))
+ # Can't reach Treasure Bumper 9 check until level 2 is unlocked, etc.
+ # But we don't have enough Treasure Bumpers to reach this check anyway??
elif bb_count == 4:
bb_count += 1
+ # Level 4 has two new Bonus Booster checks; need to check both
- for y in range(self.count("Booster Bumper"), bb_count):
- self.assertTrue(self.can_reach_location(f"Bonus Booster {y + 1}"),
- f"BB {y + 1} check not reachable with {self.count('Booster Bumper')} BBs")
- if y < 4:
- self.assertFalse(self.can_reach_location(f"Bonus Booster {y + 2}"),
- f"BB {y + 2} check reachable with {self.count('Treasure Bumper')} TBs")
- self.collect(self.get_item_by_name("Booster Bumper"))
+ for booster_bumpers_held in range(self.count("Booster Bumper"), bb_count + 1):
+ if booster_bumpers_held > 0:
+ self.assertTrue(self.can_reach_location(f"Bonus Booster {booster_bumpers_held}"),
+ f"Bonus Booster {booster_bumpers_held} check not reachable with {self.count('Booster Bumper')} Booster Bumpers")
+ if booster_bumpers_held < 5:
+ self.assertFalse(self.can_reach_location(f"Bonus Booster {booster_bumpers_held + 1}"),
+ f"Bonus Booster {booster_bumpers_held + 1} check reachable with {self.count('Treasure Bumper')} Treasure Bumpers and {self.count('Booster Bumper')} Booster Bumpers")
+ if booster_bumpers_held < bb_count:
+ self.collect(self.get_item_by_name("Booster Bumper"))
- if x < 31:
- self.assertFalse(self.can_reach_location(f"Treasure Bumper {x + 2}"))
- elif x == 31:
- self.assertFalse(self.can_reach_location("Level 5 - 50,000+ Total Points"))
+ self.assertTrue(self.can_reach_location(f"Treasure Bumper {treasure_bumpers_held}"),
+ f"Treasure Bumper {treasure_bumpers_held} check not reachable with {self.count('Treasure Bumper')} Treasure Bumpers")
- if x < 32:
- self.assertTrue(self.can_reach_location(f"Treasure Bumper {x + 1}"),
- f"TB {x + 1} check not reachable with {self.count('Treasure Bumper')} TBs")
- elif x == 32:
+ if treasure_bumpers_held < 32:
+ self.assertFalse(self.can_reach_location(f"Treasure Bumper {treasure_bumpers_held + 1}"))
+ elif treasure_bumpers_held == 32:
self.assertTrue(self.can_reach_location("Level 5 - 50,000+ Total Points"))
self.assertFalse(self.can_reach_location("Level 5 - Cleared all Hazards"))
self.collect(self.get_items_by_name("Hazard Bumper"))
diff --git a/worlds/dkc3/Client.py b/worlds/dkc3/Client.py
index 77ed51fecb..efa199e1d0 100644
--- a/worlds/dkc3/Client.py
+++ b/worlds/dkc3/Client.py
@@ -24,6 +24,7 @@ DEATH_LINK_ACTIVE_ADDR = DKC3_ROMNAME_START + 0x15 # DKC3_TODO: Find a perma
class DKC3SNIClient(SNIClient):
game = "Donkey Kong Country 3"
+ patch_suffix = ".apdkc3"
async def deathlink_kill_player(self, ctx):
pass
diff --git a/worlds/dlcquest/Items.py b/worlds/dlcquest/Items.py
index e7008f7b12..65b36fe617 100644
--- a/worlds/dlcquest/Items.py
+++ b/worlds/dlcquest/Items.py
@@ -25,6 +25,10 @@ class Group(enum.Enum):
Item = enum.auto()
Coin = enum.auto()
Trap = enum.auto()
+ Twice = enum.auto()
+ Piece = enum.auto()
+ Deprecated = enum.auto()
+
@dataclass(frozen=True)
@@ -85,49 +89,75 @@ initialize_item_table()
initialize_groups()
-def create_trap_items(world, World_Options: Options.DLCQuestOptions, trap_needed: int, random: Random) -> List[Item]:
+def create_trap_items(world, world_options: Options.DLCQuestOptions, trap_needed: int, random: Random) -> List[Item]:
traps = []
for i in range(trap_needed):
trap = random.choice(items_by_group[Group.Trap])
- traps.append(world.create_item(trap))
+ traps.append(world.create_item(trap, ItemClassification.trap))
return traps
-def create_items(world, World_Options: Options.DLCQuestOptions, locations_count: int, random: Random):
+def create_items(world, world_options: Options.DLCQuestOptions, locations_count: int, random: Random):
created_items = []
- if World_Options.campaign == Options.Campaign.option_basic or World_Options.campaign == Options.Campaign.option_both:
- for item in items_by_group[Group.DLCQuest]:
- if item.has_any_group(Group.DLC):
- created_items.append(world.create_item(item))
- if item.has_any_group(Group.Item) and World_Options.item_shuffle == Options.ItemShuffle.option_shuffled:
- created_items.append(world.create_item(item))
- if World_Options.coinsanity == Options.CoinSanity.option_coin:
- coin_bundle_needed = math.floor(825 / World_Options.coinbundlequantity)
- for item in items_by_group[Group.DLCQuest]:
- if item.has_any_group(Group.Coin):
- for i in range(coin_bundle_needed):
- created_items.append(world.create_item(item))
- if 825 % World_Options.coinbundlequantity != 0:
- created_items.append(world.create_item(item))
+ if world_options.campaign == Options.Campaign.option_basic or world_options.campaign == Options.Campaign.option_both:
+ create_items_basic(world_options, created_items, world)
- if (World_Options.campaign == Options.Campaign.option_live_freemium_or_die or
- World_Options.campaign == Options.Campaign.option_both):
- for item in items_by_group[Group.Freemium]:
- if item.has_any_group(Group.DLC):
- created_items.append(world.create_item(item))
- if item.has_any_group(Group.Item) and World_Options.item_shuffle == Options.ItemShuffle.option_shuffled:
- created_items.append(world.create_item(item))
- if World_Options.coinsanity == Options.CoinSanity.option_coin:
- coin_bundle_needed = math.floor(889 / World_Options.coinbundlequantity)
- for item in items_by_group[Group.Freemium]:
- if item.has_any_group(Group.Coin):
- for i in range(coin_bundle_needed):
- created_items.append(world.create_item(item))
- if 889 % World_Options.coinbundlequantity != 0:
- created_items.append(world.create_item(item))
+ if (world_options.campaign == Options.Campaign.option_live_freemium_or_die or
+ world_options.campaign == Options.Campaign.option_both):
+ create_items_lfod(world_options, created_items, world)
- trap_items = create_trap_items(world, World_Options, locations_count - len(created_items), random)
+ trap_items = create_trap_items(world, world_options, locations_count - len(created_items), random)
created_items += trap_items
return created_items
+
+
+def create_items_lfod(world_options, created_items, world):
+ for item in items_by_group[Group.Freemium]:
+ if item.has_any_group(Group.DLC):
+ created_items.append(world.create_item(item))
+ if item.has_any_group(Group.Item) and world_options.item_shuffle == Options.ItemShuffle.option_shuffled:
+ created_items.append(world.create_item(item))
+ if item.has_any_group(Group.Twice):
+ created_items.append(world.create_item(item))
+ if world_options.coinsanity == Options.CoinSanity.option_coin:
+ if world_options.coinbundlequantity == -1:
+ create_coin_piece(created_items, world, 889, 200, Group.Freemium)
+ return
+ create_coin(world_options, created_items, world, 889, 200, Group.Freemium)
+
+
+def create_items_basic(world_options, created_items, world):
+ for item in items_by_group[Group.DLCQuest]:
+ if item.has_any_group(Group.DLC):
+ created_items.append(world.create_item(item))
+ if item.has_any_group(Group.Item) and world_options.item_shuffle == Options.ItemShuffle.option_shuffled:
+ created_items.append(world.create_item(item))
+ if item.has_any_group(Group.Twice):
+ created_items.append(world.create_item(item))
+ if world_options.coinsanity == Options.CoinSanity.option_coin:
+ if world_options.coinbundlequantity == -1:
+ create_coin_piece(created_items, world, 825, 250, Group.DLCQuest)
+ return
+ create_coin(world_options, created_items, world, 825, 250, Group.DLCQuest)
+
+
+def create_coin(world_options, created_items, world, total_coins, required_coins, group):
+ coin_bundle_required = math.ceil(required_coins / world_options.coinbundlequantity)
+ coin_bundle_useful = math.ceil((total_coins - coin_bundle_required * world_options.coinbundlequantity) / world_options.coinbundlequantity)
+ for item in items_by_group[group]:
+ if item.has_any_group(Group.Coin):
+ for i in range(coin_bundle_required):
+ created_items.append(world.create_item(item))
+ for i in range(coin_bundle_useful):
+ created_items.append(world.create_item(item, ItemClassification.useful))
+
+
+def create_coin_piece(created_items, world, total_coins, required_coins, group):
+ for item in items_by_group[group]:
+ if item.has_any_group(Group.Piece):
+ for i in range(required_coins*10):
+ created_items.append(world.create_item(item))
+ for i in range((total_coins - required_coins) * 10):
+ created_items.append(world.create_item(item, ItemClassification.useful))
diff --git a/worlds/dlcquest/Locations.py b/worlds/dlcquest/Locations.py
index a9fdd00a20..dfc5248529 100644
--- a/worlds/dlcquest/Locations.py
+++ b/worlds/dlcquest/Locations.py
@@ -76,3 +76,14 @@ for i in range(1, 826):
for i in range(1, 890):
item_coin_freemium = f"Live Freemium or Die: {i} Coin"
location_table[item_coin_freemium] = offset + 825 + 58 + i
+
+
+offset_special = 3829200000
+
+for i in range(1, 8251):
+ item_coin_piece = f"DLC Quest: {i} Coin Piece"
+ location_table[item_coin_piece] = offset_special + i
+
+for i in range(1, 8891):
+ item_coin_piece_freemium = f"Live Freemium or Die: {i} Coin Piece"
+ location_table[item_coin_piece_freemium] = offset_special + 8250 + i
\ No newline at end of file
diff --git a/worlds/dlcquest/Options.py b/worlds/dlcquest/Options.py
index 769acbec15..067e349b94 100644
--- a/worlds/dlcquest/Options.py
+++ b/worlds/dlcquest/Options.py
@@ -1,4 +1,5 @@
from dataclasses import dataclass
+import datetime
from Options import Choice, DeathLink, NamedRange, PerGameCommonOptions
@@ -48,6 +49,20 @@ class CoinSanityRange(NamedRange):
"normal": 20,
"high": 50,
}
+ if datetime.datetime.today().month == 4:
+ if datetime.datetime.today().day == 1:
+ special_range_names["surprise"] = -1
+ else:
+ special_range_names["coin piece"] = -1
+
+
+class PermanentCoins(Choice):
+ """If purchasing a pack decreases your current coins amounts."""
+ internal_name = "permanent_coins"
+ display_name = "Permanent Coins"
+ option_false = 0
+ option_true = 1
+ default = 0
class EndingChoice(Choice):
@@ -83,6 +98,7 @@ class DLCQuestOptions(PerGameCommonOptions):
double_jump_glitch: DoubleJumpGlitch
coinsanity: CoinSanity
coinbundlequantity: CoinSanityRange
+ permanent_coins: PermanentCoins
time_is_money: TimeIsMoney
ending_choice: EndingChoice
campaign: Campaign
diff --git a/worlds/dlcquest/Regions.py b/worlds/dlcquest/Regions.py
index 6dad9fc10c..5b256afd45 100644
--- a/worlds/dlcquest/Regions.py
+++ b/worlds/dlcquest/Regions.py
@@ -182,9 +182,22 @@ def create_coinsanity_locations_lfod(has_coinsanity: bool, coin_bundle_size: int
def create_coinsanity_locations(has_coinsanity: bool, coin_bundle_size: int, player: int, region: Region, last_coin_number: int, campaign_prefix: str):
if not has_coinsanity:
return
+ if coin_bundle_size == -1:
+ create_coinsanity_piece_locations(player, region, last_coin_number, campaign_prefix)
+ return
+
coin_bundle_needed = math.ceil(last_coin_number / coin_bundle_size)
for i in range(1, coin_bundle_needed + 1):
number_coins = min(last_coin_number, coin_bundle_size * i)
item_coin = f"{campaign_prefix}: {number_coins} Coin"
region.locations += [DLCQuestLocation(player, item_coin, location_table[item_coin], region)]
+
+
+def create_coinsanity_piece_locations(player: int, region: Region, total_coin: int, campaign_prefix:str):
+
+ pieces_needed = total_coin * 10
+ for i in range(1, pieces_needed + 1):
+ number_piece = i
+ item_piece = f"{campaign_prefix}: {number_piece} Coin Piece"
+ region.locations += [DLCQuestLocation(player, item_piece, location_table[item_piece], region)]
diff --git a/worlds/dlcquest/Rules.py b/worlds/dlcquest/Rules.py
index 5792d9c3ab..3461d0633e 100644
--- a/worlds/dlcquest/Rules.py
+++ b/worlds/dlcquest/Rules.py
@@ -1,5 +1,4 @@
import math
-import re
from BaseClasses import ItemClassification
from worlds.generic.Rules import add_rule, item_name_in_locations, set_rule
@@ -19,23 +18,23 @@ def has_enough_coin_freemium(player: int, coin: int):
return lambda state: state.prog_items[player][" coins freemium"] >= coin
-def set_rules(world, player, World_Options: Options.DLCQuestOptions):
- set_basic_rules(World_Options, player, world)
- set_lfod_rules(World_Options, player, world)
- set_completion_condition(World_Options, player, world)
+def set_rules(world, player, world_options: Options.DLCQuestOptions):
+ set_basic_rules(world_options, player, world)
+ set_lfod_rules(world_options, player, world)
+ set_completion_condition(world_options, player, world)
-def set_basic_rules(World_Options, player, world):
- if World_Options.campaign == Options.Campaign.option_live_freemium_or_die:
+def set_basic_rules(world_options, player, world):
+ if world_options.campaign == Options.Campaign.option_live_freemium_or_die:
return
set_basic_entrance_rules(player, world)
- set_basic_self_obtained_items_rules(World_Options, player, world)
- set_basic_shuffled_items_rules(World_Options, player, world)
- set_double_jump_glitchless_rules(World_Options, player, world)
- set_easy_double_jump_glitch_rules(World_Options, player, world)
- self_basic_coinsanity_funded_purchase_rules(World_Options, player, world)
- set_basic_self_funded_purchase_rules(World_Options, player, world)
- self_basic_win_condition(World_Options, player, world)
+ set_basic_self_obtained_items_rules(world_options, player, world)
+ set_basic_shuffled_items_rules(world_options, player, world)
+ set_double_jump_glitchless_rules(world_options, player, world)
+ set_easy_double_jump_glitch_rules(world_options, player, world)
+ self_basic_coinsanity_funded_purchase_rules(world_options, player, world)
+ set_basic_self_funded_purchase_rules(world_options, player, world)
+ self_basic_win_condition(world_options, player, world)
def set_basic_entrance_rules(player, world):
@@ -49,13 +48,13 @@ def set_basic_entrance_rules(player, world):
lambda state: state.has("Double Jump Pack", player))
-def set_basic_self_obtained_items_rules(World_Options, player, world):
- if World_Options.item_shuffle != Options.ItemShuffle.option_disabled:
+def set_basic_self_obtained_items_rules(world_options, player, world):
+ if world_options.item_shuffle != Options.ItemShuffle.option_disabled:
return
set_rule(world.get_entrance("Behind Ogre", player),
lambda state: state.has("Gun Pack", player))
- if World_Options.time_is_money == Options.TimeIsMoney.option_required:
+ if world_options.time_is_money == Options.TimeIsMoney.option_required:
set_rule(world.get_entrance("Tree", player),
lambda state: state.has("Time is Money Pack", player))
set_rule(world.get_entrance("Cave Tree", player),
@@ -70,35 +69,35 @@ def set_basic_self_obtained_items_rules(World_Options, player, world):
lambda state: state.has("Time is Money Pack", player))
-def set_basic_shuffled_items_rules(World_Options, player, world):
- if World_Options.item_shuffle != Options.ItemShuffle.option_shuffled:
+def set_basic_shuffled_items_rules(world_options, player, world):
+ if world_options.item_shuffle != Options.ItemShuffle.option_shuffled:
return
set_rule(world.get_entrance("Behind Ogre", player),
- lambda state: state.has("Gun", player))
+ lambda state: state.has("DLC Quest: Progressive Weapon", player, 2))
set_rule(world.get_entrance("Tree", player),
- lambda state: state.has("Sword", player) or state.has("Gun", player))
+ lambda state: state.has("DLC Quest: Progressive Weapon", player))
set_rule(world.get_entrance("Cave Tree", player),
- lambda state: state.has("Sword", player) or state.has("Gun", player))
+ lambda state: state.has("DLC Quest: Progressive Weapon", player))
set_rule(world.get_entrance("True Double Jump", player),
lambda state: state.has("Double Jump Pack", player))
set_rule(world.get_location("Shepherd Sheep", player),
- lambda state: state.has("Sword", player) or state.has("Gun", player))
+ lambda state: state.has("DLC Quest: Progressive Weapon", player))
set_rule(world.get_location("North West Ceiling Sheep", player),
- lambda state: state.has("Sword", player) or state.has("Gun", player))
+ lambda state: state.has("DLC Quest: Progressive Weapon", player))
set_rule(world.get_location("North West Alcove Sheep", player),
- lambda state: state.has("Sword", player) or state.has("Gun", player))
+ lambda state: state.has("DLC Quest: Progressive Weapon", player))
set_rule(world.get_location("West Cave Sheep", player),
- lambda state: state.has("Sword", player) or state.has("Gun", player))
+ lambda state: state.has("DLC Quest: Progressive Weapon", player))
set_rule(world.get_location("Gun", player),
lambda state: state.has("Gun Pack", player))
- if World_Options.time_is_money == Options.TimeIsMoney.option_required:
+ if world_options.time_is_money == Options.TimeIsMoney.option_required:
set_rule(world.get_location("Sword", player),
lambda state: state.has("Time is Money Pack", player))
-def set_double_jump_glitchless_rules(World_Options, player, world):
- if World_Options.double_jump_glitch != Options.DoubleJumpGlitch.option_none:
+def set_double_jump_glitchless_rules(world_options, player, world):
+ if world_options.double_jump_glitch != Options.DoubleJumpGlitch.option_none:
return
set_rule(world.get_entrance("Cloud Double Jump", player),
lambda state: state.has("Double Jump Pack", player))
@@ -106,8 +105,8 @@ def set_double_jump_glitchless_rules(World_Options, player, world):
lambda state: state.has("Double Jump Pack", player))
-def set_easy_double_jump_glitch_rules(World_Options, player, world):
- if World_Options.double_jump_glitch == Options.DoubleJumpGlitch.option_all:
+def set_easy_double_jump_glitch_rules(world_options, player, world):
+ if world_options.double_jump_glitch == Options.DoubleJumpGlitch.option_all:
return
set_rule(world.get_entrance("Behind Tree Double Jump", player),
lambda state: state.has("Double Jump Pack", player))
@@ -115,71 +114,74 @@ def set_easy_double_jump_glitch_rules(World_Options, player, world):
lambda state: state.has("Double Jump Pack", player))
-def self_basic_coinsanity_funded_purchase_rules(World_Options, player, world):
- if World_Options.coinsanity != Options.CoinSanity.option_coin:
+def self_basic_coinsanity_funded_purchase_rules(world_options, player, world):
+ if world_options.coinsanity != Options.CoinSanity.option_coin:
return
- number_of_bundle = math.floor(825 / World_Options.coinbundlequantity)
+ if world_options.coinbundlequantity == -1:
+ self_basic_coinsanity_piece_rules(player, world)
+ return
+ number_of_bundle = math.floor(825 / world_options.coinbundlequantity)
for i in range(number_of_bundle):
- item_coin = f"DLC Quest: {World_Options.coinbundlequantity * (i + 1)} Coin"
+ item_coin = f"DLC Quest: {world_options.coinbundlequantity * (i + 1)} Coin"
set_rule(world.get_location(item_coin, player),
- has_enough_coin(player, World_Options.coinbundlequantity * (i + 1)))
- if 825 % World_Options.coinbundlequantity != 0:
+ has_enough_coin(player, world_options.coinbundlequantity * (i + 1)))
+ if 825 % world_options.coinbundlequantity != 0:
set_rule(world.get_location("DLC Quest: 825 Coin", player),
has_enough_coin(player, 825))
set_rule(world.get_location("Movement Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(4 / World_Options.coinbundlequantity)))
+ math.ceil(4 / world_options.coinbundlequantity)))
set_rule(world.get_location("Animation Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Audio Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Pause Menu Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Time is Money Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(20 / World_Options.coinbundlequantity)))
+ math.ceil(20 / world_options.coinbundlequantity)))
set_rule(world.get_location("Double Jump Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(100 / World_Options.coinbundlequantity)))
+ math.ceil(100 / world_options.coinbundlequantity)))
set_rule(world.get_location("Pet Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Sexy Outfits Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Top Hat Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Map Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(140 / World_Options.coinbundlequantity)))
+ math.ceil(140 / world_options.coinbundlequantity)))
set_rule(world.get_location("Gun Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(75 / World_Options.coinbundlequantity)))
+ math.ceil(75 / world_options.coinbundlequantity)))
set_rule(world.get_location("The Zombie Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Night Map Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(75 / World_Options.coinbundlequantity)))
+ math.ceil(75 / world_options.coinbundlequantity)))
set_rule(world.get_location("Psychological Warfare Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(50 / World_Options.coinbundlequantity)))
+ math.ceil(50 / world_options.coinbundlequantity)))
set_rule(world.get_location("Armor for your Horse Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(250 / World_Options.coinbundlequantity)))
+ math.ceil(250 / world_options.coinbundlequantity)))
set_rule(world.get_location("Finish the Fight Pack", player),
lambda state: state.has("DLC Quest: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
-def set_basic_self_funded_purchase_rules(World_Options, player, world):
- if World_Options.coinsanity != Options.CoinSanity.option_none:
+def set_basic_self_funded_purchase_rules(world_options, player, world):
+ if world_options.coinsanity != Options.CoinSanity.option_none:
return
set_rule(world.get_location("Movement Pack", player),
has_enough_coin(player, 4))
@@ -215,25 +217,25 @@ def set_basic_self_funded_purchase_rules(World_Options, player, world):
has_enough_coin(player, 5))
-def self_basic_win_condition(World_Options, player, world):
- if World_Options.ending_choice == Options.EndingChoice.option_any:
+def self_basic_win_condition(world_options, player, world):
+ if world_options.ending_choice == Options.EndingChoice.option_any:
set_rule(world.get_location("Winning Basic", player),
lambda state: state.has("Finish the Fight Pack", player))
- if World_Options.ending_choice == Options.EndingChoice.option_true:
+ if world_options.ending_choice == Options.EndingChoice.option_true:
set_rule(world.get_location("Winning Basic", player),
lambda state: state.has("Armor for your Horse Pack", player) and state.has("Finish the Fight Pack",
player))
-def set_lfod_rules(World_Options, player, world):
- if World_Options.campaign == Options.Campaign.option_basic:
+def set_lfod_rules(world_options, player, world):
+ if world_options.campaign == Options.Campaign.option_basic:
return
set_lfod_entrance_rules(player, world)
set_boss_door_requirements_rules(player, world)
- set_lfod_self_obtained_items_rules(World_Options, player, world)
- set_lfod_shuffled_items_rules(World_Options, player, world)
- self_lfod_coinsanity_funded_purchase_rules(World_Options, player, world)
- set_lfod_self_funded_purchase_rules(World_Options, has_enough_coin_freemium, player, world)
+ set_lfod_self_obtained_items_rules(world_options, player, world)
+ set_lfod_shuffled_items_rules(world_options, player, world)
+ self_lfod_coinsanity_funded_purchase_rules(world_options, player, world)
+ set_lfod_self_funded_purchase_rules(world_options, has_enough_coin_freemium, player, world)
def set_lfod_entrance_rules(player, world):
@@ -251,8 +253,6 @@ def set_lfod_entrance_rules(player, world):
lambda state: state.has("Death of Comedy Pack", player))
set_rule(world.get_location("Story is Important", player),
lambda state: state.has("DLC NPC Pack", player))
- set_rule(world.get_entrance("Pickaxe Hard Cave", player),
- lambda state: state.has("Pickaxe", player))
def set_boss_door_requirements_rules(player, world):
@@ -280,8 +280,8 @@ def set_boss_door_requirements_rules(player, world):
set_rule(world.get_entrance("Boss Door", player), has_3_swords)
-def set_lfod_self_obtained_items_rules(World_Options, player, world):
- if World_Options.item_shuffle != Options.ItemShuffle.option_disabled:
+def set_lfod_self_obtained_items_rules(world_options, player, world):
+ if world_options.item_shuffle != Options.ItemShuffle.option_disabled:
return
set_rule(world.get_entrance("Vines", player),
lambda state: state.has("Incredibly Important Pack", player))
@@ -292,13 +292,15 @@ def set_lfod_self_obtained_items_rules(World_Options, player, world):
state.has("Name Change Pack", player))
-def set_lfod_shuffled_items_rules(World_Options, player, world):
- if World_Options.item_shuffle != Options.ItemShuffle.option_shuffled:
+def set_lfod_shuffled_items_rules(world_options, player, world):
+ if world_options.item_shuffle != Options.ItemShuffle.option_shuffled:
return
set_rule(world.get_entrance("Vines", player),
- lambda state: state.has("Wooden Sword", player) or state.has("Pickaxe", player))
+ lambda state: state.has("Live Freemium or Die: Progressive Weapon", player))
set_rule(world.get_entrance("Behind Rocks", player),
- lambda state: state.has("Pickaxe", player))
+ lambda state: state.has("Live Freemium or Die: Progressive Weapon", player, 2))
+ set_rule(world.get_entrance("Pickaxe Hard Cave", player),
+ lambda state: state.has("Live Freemium or Die: Progressive Weapon", player, 2))
set_rule(world.get_location("Wooden Sword", player),
lambda state: state.has("Incredibly Important Pack", player))
@@ -311,83 +313,84 @@ def set_lfod_shuffled_items_rules(World_Options, player, world):
lambda state: state.can_reach("Cut Content", 'region', player))
-def self_lfod_coinsanity_funded_purchase_rules(World_Options, player, world):
- if World_Options.coinsanity != Options.CoinSanity.option_coin:
+def self_lfod_coinsanity_funded_purchase_rules(world_options, player, world):
+ if world_options.coinsanity != Options.CoinSanity.option_coin:
return
- number_of_bundle = math.floor(889 / World_Options.coinbundlequantity)
+ if world_options.coinbundlequantity == -1:
+ self_lfod_coinsanity_piece_rules(player, world)
+ return
+ number_of_bundle = math.floor(889 / world_options.coinbundlequantity)
for i in range(number_of_bundle):
- item_coin_freemium = "Live Freemium or Die: number Coin"
- item_coin_loc_freemium = re.sub("number", str(World_Options.coinbundlequantity * (i + 1)),
- item_coin_freemium)
- set_rule(world.get_location(item_coin_loc_freemium, player),
- has_enough_coin_freemium(player, World_Options.coinbundlequantity * (i + 1)))
- if 889 % World_Options.coinbundlequantity != 0:
+ item_coin_freemium = f"Live Freemium or Die: {world_options.coinbundlequantity * (i + 1)} Coin"
+ set_rule(world.get_location(item_coin_freemium, player),
+ has_enough_coin_freemium(player, world_options.coinbundlequantity * (i + 1)))
+ if 889 % world_options.coinbundlequantity != 0:
set_rule(world.get_location("Live Freemium or Die: 889 Coin", player),
has_enough_coin_freemium(player, 889))
add_rule(world.get_entrance("Boss Door", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(889 / World_Options.coinbundlequantity)))
+ math.ceil(200 / world_options.coinbundlequantity)))
set_rule(world.get_location("Particles Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Day One Patch Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Checkpoint Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Incredibly Important Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(15 / World_Options.coinbundlequantity)))
+ math.ceil(15 / world_options.coinbundlequantity)))
set_rule(world.get_location("Wall Jump Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(35 / World_Options.coinbundlequantity)))
+ math.ceil(35 / world_options.coinbundlequantity)))
set_rule(world.get_location("Health Bar Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Parallax Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(5 / World_Options.coinbundlequantity)))
+ math.ceil(5 / world_options.coinbundlequantity)))
set_rule(world.get_location("Harmless Plants Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(130 / World_Options.coinbundlequantity)))
+ math.ceil(130 / world_options.coinbundlequantity)))
set_rule(world.get_location("Death of Comedy Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(15 / World_Options.coinbundlequantity)))
+ math.ceil(15 / world_options.coinbundlequantity)))
set_rule(world.get_location("Canadian Dialog Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(10 / World_Options.coinbundlequantity)))
+ math.ceil(10 / world_options.coinbundlequantity)))
set_rule(world.get_location("DLC NPC Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(15 / World_Options.coinbundlequantity)))
+ math.ceil(15 / world_options.coinbundlequantity)))
set_rule(world.get_location("Cut Content Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(40 / World_Options.coinbundlequantity)))
+ math.ceil(40 / world_options.coinbundlequantity)))
set_rule(world.get_location("Name Change Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(150 / World_Options.coinbundlequantity)))
+ math.ceil(150 / world_options.coinbundlequantity)))
set_rule(world.get_location("Season Pass", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(199 / World_Options.coinbundlequantity)))
+ math.ceil(199 / world_options.coinbundlequantity)))
set_rule(world.get_location("High Definition Next Gen Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(20 / World_Options.coinbundlequantity)))
+ math.ceil(20 / world_options.coinbundlequantity)))
set_rule(world.get_location("Increased HP Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(10 / World_Options.coinbundlequantity)))
+ math.ceil(10 / world_options.coinbundlequantity)))
set_rule(world.get_location("Remove Ads Pack", player),
lambda state: state.has("Live Freemium or Die: Coin Bundle", player,
- math.ceil(25 / World_Options.coinbundlequantity)))
+ math.ceil(25 / world_options.coinbundlequantity)))
-def set_lfod_self_funded_purchase_rules(World_Options, has_enough_coin_freemium, player, world):
- if World_Options.coinsanity != Options.CoinSanity.option_none:
+def set_lfod_self_funded_purchase_rules(world_options, has_enough_coin_freemium, player, world):
+ if world_options.coinsanity != Options.CoinSanity.option_none:
return
add_rule(world.get_entrance("Boss Door", player),
- has_enough_coin_freemium(player, 889))
+ has_enough_coin_freemium(player, 200))
set_rule(world.get_location("Particles Pack", player),
has_enough_coin_freemium(player, 5))
@@ -425,11 +428,98 @@ def set_lfod_self_funded_purchase_rules(World_Options, has_enough_coin_freemium,
has_enough_coin_freemium(player, 25))
-def set_completion_condition(World_Options, player, world):
- if World_Options.campaign == Options.Campaign.option_basic:
+def set_completion_condition(world_options, player, world):
+ if world_options.campaign == Options.Campaign.option_basic:
world.completion_condition[player] = lambda state: state.has("Victory Basic", player)
- if World_Options.campaign == Options.Campaign.option_live_freemium_or_die:
+ if world_options.campaign == Options.Campaign.option_live_freemium_or_die:
world.completion_condition[player] = lambda state: state.has("Victory Freemium", player)
- if World_Options.campaign == Options.Campaign.option_both:
+ if world_options.campaign == Options.Campaign.option_both:
world.completion_condition[player] = lambda state: state.has("Victory Basic", player) and state.has(
"Victory Freemium", player)
+
+
+def self_basic_coinsanity_piece_rules(player, world):
+ for i in range(1,8251):
+
+ item_coin = f"DLC Quest: {i} Coin Piece"
+ set_rule(world.get_location(item_coin, player),
+ has_enough_coin(player, math.ceil(i / 10)))
+
+ set_rule(world.get_location("Movement Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 40))
+ set_rule(world.get_location("Animation Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 50))
+ set_rule(world.get_location("Audio Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 50))
+ set_rule(world.get_location("Pause Menu Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 50))
+ set_rule(world.get_location("Time is Money Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 200))
+ set_rule(world.get_location("Double Jump Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 100))
+ set_rule(world.get_location("Pet Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 50))
+ set_rule(world.get_location("Sexy Outfits Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 50))
+ set_rule(world.get_location("Top Hat Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 50))
+ set_rule(world.get_location("Map Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 1400))
+ set_rule(world.get_location("Gun Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 750))
+ set_rule(world.get_location("The Zombie Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 50))
+ set_rule(world.get_location("Night Map Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 750))
+ set_rule(world.get_location("Psychological Warfare Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 500))
+ set_rule(world.get_location("Armor for your Horse Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 2500))
+ set_rule(world.get_location("Finish the Fight Pack", player),
+ lambda state: state.has("DLC Quest: Coin Piece", player, 50))
+
+
+def self_lfod_coinsanity_piece_rules(player, world):
+ for i in range(1, 8891):
+
+ item_coin_freemium = f"Live Freemium or Die: {i} Coin Piece"
+ set_rule(world.get_location(item_coin_freemium, player),
+ has_enough_coin_freemium(player, math.ceil(i / 10)))
+
+ add_rule(world.get_entrance("Boss Door", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 2000))
+
+ set_rule(world.get_location("Particles Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 50))
+ set_rule(world.get_location("Day One Patch Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 50))
+ set_rule(world.get_location("Checkpoint Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 50))
+ set_rule(world.get_location("Incredibly Important Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 150))
+ set_rule(world.get_location("Wall Jump Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 350))
+ set_rule(world.get_location("Health Bar Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 50))
+ set_rule(world.get_location("Parallax Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 50))
+ set_rule(world.get_location("Harmless Plants Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 1300))
+ set_rule(world.get_location("Death of Comedy Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 150))
+ set_rule(world.get_location("Canadian Dialog Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 100))
+ set_rule(world.get_location("DLC NPC Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 150))
+ set_rule(world.get_location("Cut Content Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 400))
+ set_rule(world.get_location("Name Change Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 1500))
+ set_rule(world.get_location("Season Pass", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 199))
+ set_rule(world.get_location("High Definition Next Gen Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 20))
+ set_rule(world.get_location("Increased HP Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 100))
+ set_rule(world.get_location("Remove Ads Pack", player),
+ lambda state: state.has("Live Freemium or Die: Coin Piece", player, 250))
diff --git a/worlds/dlcquest/__init__.py b/worlds/dlcquest/__init__.py
index db55b1903b..2200729a32 100644
--- a/worlds/dlcquest/__init__.py
+++ b/worlds/dlcquest/__init__.py
@@ -1,6 +1,6 @@
from typing import Union
-from BaseClasses import Tutorial, CollectionState
+from BaseClasses import Tutorial, CollectionState, ItemClassification
from worlds.AutoWorld import WebWorld, World
from . import Options
from .Items import DLCQuestItem, ItemData, create_items, item_table, items_by_group, Group
@@ -82,11 +82,13 @@ class DLCqworld(World):
if self.options.coinsanity == Options.CoinSanity.option_coin and self.options.coinbundlequantity >= 5:
self.multiworld.push_precollected(self.create_item("Movement Pack"))
- def create_item(self, item: Union[str, ItemData]) -> DLCQuestItem:
+ def create_item(self, item: Union[str, ItemData], classification: ItemClassification = None) -> DLCQuestItem:
if isinstance(item, str):
item = item_table[item]
+ if classification is None:
+ classification = item.classification
- return DLCQuestItem(item.name, item.classification, item.code, self.player)
+ return DLCQuestItem(item.name, classification, item.code, self.player)
def get_filler_item_name(self) -> str:
trap = self.multiworld.random.choice(items_by_group[Group.Trap])
@@ -94,7 +96,7 @@ class DLCqworld(World):
def fill_slot_data(self):
options_dict = self.options.as_dict(
- "death_link", "ending_choice", "campaign", "coinsanity", "item_shuffle"
+ "death_link", "ending_choice", "campaign", "coinsanity", "item_shuffle", "permanent_coins"
)
options_dict.update({
"coinbundlerange": self.options.coinbundlequantity.value,
diff --git a/worlds/dlcquest/data/items.csv b/worlds/dlcquest/data/items.csv
index cc5ac0bbe4..82150254b3 100644
--- a/worlds/dlcquest/data/items.csv
+++ b/worlds/dlcquest/data/items.csv
@@ -27,8 +27,8 @@ id,name,classification,groups
25,Canadian Dialog Pack,filler,"DLC,Freemium"
26,DLC NPC Pack,progression,"DLC,Freemium"
27,Cut Content Pack,progression,"DLC,Freemium"
-28,Name Change Pack,progression,"DLC,Freemium"
-29,Pickaxe,progression,"Item,Freemium"
+28,Name Change Pack,progression,"DLC,Freemium,Trap"
+29,Pickaxe,progression,"Deprecated"
30,Season Pass,progression,"DLC,Freemium"
31,High Definition Next Gen Pack,filler,"DLC,Freemium"
32,Increased HP Pack,useful,"DLC,Freemium"
@@ -36,13 +36,17 @@ id,name,classification,groups
34,Big Sword Pack,progression,"DLC,Freemium"
35,Really Big Sword Pack,progression,"DLC,Freemium"
36,Unfathomable Sword Pack,progression,"DLC,Freemium"
-37,Gun,progression,"Item,DLCQuest"
-38,Sword,progression,"Item,DLCQuest"
-39,Wooden Sword,progression,"Item,Freemium"
+37,Gun,progression,"Deprecated"
+38,Sword,progression,"Deprecated"
+39,Wooden Sword,progression,"Deprecated"
40,Box of Various Supplies,progression,"Item,Freemium"
41,Humble Indie Bindle,progression,"Item,Freemium"
42,DLC Quest: Coin Bundle,progression,"Coin,DLCQuest"
43,Live Freemium or Die: Coin Bundle,progression,"Coin,Freemium"
44,Zombie Sheep,trap,Trap
45,Temporary Spike,trap,Trap
-46,Loading Screen,trap,Trap
\ No newline at end of file
+46,Loading Screen,trap,Trap
+48,DLC Quest: Progressive Weapon,progression,"Item,Twice,DLCQuest"
+49,Live Freemium or Die: Progressive Weapon,progression,"Item,Twice,Freemium"
+50,DLC Quest: Coin Piece,progression,"Piece,DLCQuest"
+51,Live Freemium or Die: Coin Piece,progression,"Piece,Freemium"
\ No newline at end of file
diff --git a/worlds/dlcquest/test/TestItemShuffle.py b/worlds/dlcquest/test/TestItemShuffle.py
index bfe999246a..7a9e5d95ba 100644
--- a/worlds/dlcquest/test/TestItemShuffle.py
+++ b/worlds/dlcquest/test/TestItemShuffle.py
@@ -7,7 +7,10 @@ wooden_sword = "Wooden Sword"
pickaxe = "Pickaxe"
humble_bindle = "Humble Indie Bindle"
box_supplies = "Box of Various Supplies"
-items = [sword, gun, wooden_sword, pickaxe, humble_bindle, box_supplies]
+locations = [sword, gun, wooden_sword, pickaxe, humble_bindle, box_supplies]
+prog_weapon_basic = "DLC Quest: Progressive Weapon"
+prog_weapon_lfod = "Live Freemium or Die: Progressive Weapon"
+items = [prog_weapon_basic, prog_weapon_lfod, humble_bindle, box_supplies]
important_pack = "Incredibly Important Pack"
@@ -22,9 +25,14 @@ class TestItemShuffle(DLCQuestTestBase):
with self.subTest(f"{item}"):
self.assertIn(item, item_names)
+ def test_progressive_weapon_in_pool(self):
+ item_names = [item.name for item in self.multiworld.get_items()]
+ self.assertEqual(item_names.count(prog_weapon_basic), 2)
+ self.assertEqual(item_names.count(prog_weapon_lfod), 2)
+
def test_item_locations_in_pool(self):
location_names = {location.name for location in self.multiworld.get_locations()}
- for item_location in items:
+ for item_location in locations:
with self.subTest(f"{item_location}"):
self.assertIn(item_location, location_names)
@@ -42,7 +50,7 @@ class TestItemShuffle(DLCQuestTestBase):
movement_pack = self.multiworld.create_item("Movement Pack", self.player)
self.collect(movement_pack)
self.assertFalse(self.can_reach_location(gun))
- sword_item = self.multiworld.create_item(sword, self.player)
+ sword_item = self.multiworld.create_item(prog_weapon_basic, self.player)
self.collect(sword_item)
self.assertFalse(self.can_reach_location(gun))
gun_pack = self.multiworld.create_item("Gun Pack", self.player)
@@ -57,7 +65,7 @@ class TestItemShuffle(DLCQuestTestBase):
def test_bindle_location_has_correct_rules(self):
self.assertFalse(self.can_reach_location(humble_bindle))
- wooden_sword_item = self.multiworld.create_item(wooden_sword, self.player)
+ wooden_sword_item = self.multiworld.create_item(prog_weapon_lfod, self.player)
self.collect(wooden_sword_item)
self.assertFalse(self.can_reach_location(humble_bindle))
plants_pack = self.multiworld.create_item("Harmless Plants Pack", self.player)
@@ -78,7 +86,7 @@ class TestItemShuffle(DLCQuestTestBase):
def test_box_supplies_location_has_correct_rules(self):
self.assertFalse(self.can_reach_location(box_supplies))
- wooden_sword_item = self.multiworld.create_item(wooden_sword, self.player)
+ wooden_sword_item = self.multiworld.create_item(prog_weapon_lfod, self.player)
self.collect(wooden_sword_item)
self.assertFalse(self.can_reach_location(box_supplies))
plants_pack = self.multiworld.create_item("Harmless Plants Pack", self.player)
@@ -96,7 +104,7 @@ class TestItemShuffle(DLCQuestTestBase):
def test_pickaxe_location_has_correct_rules(self):
self.assertFalse(self.can_reach_location(pickaxe))
- wooden_sword_item = self.multiworld.create_item(wooden_sword, self.player)
+ wooden_sword_item = self.multiworld.create_item(prog_weapon_lfod, self.player)
self.collect(wooden_sword_item)
self.assertFalse(self.can_reach_location(pickaxe))
plants_pack = self.multiworld.create_item("Harmless Plants Pack", self.player)
@@ -125,6 +133,6 @@ class TestNoItemShuffle(DLCQuestTestBase):
def test_item_locations_not_in_pool(self):
location_names = {location.name for location in self.multiworld.get_locations()}
- for item_location in items:
+ for item_location in locations:
with self.subTest(f"{item_location}"):
self.assertNotIn(item_location, location_names)
\ No newline at end of file
diff --git a/worlds/dlcquest/test/__init__.py b/worlds/dlcquest/test/__init__.py
index e998bd8a5e..8a39b43a2c 100644
--- a/worlds/dlcquest/test/__init__.py
+++ b/worlds/dlcquest/test/__init__.py
@@ -37,8 +37,7 @@ def setup_dlc_quest_solo_multiworld(test_options=None, seed=None, _cache: Dict[F
if frozen_options in _cache:
return _cache[frozen_options]
- multiworld = setup_base_solo_multiworld(DLCqworld, ())
- multiworld.set_seed(seed)
+ multiworld = setup_base_solo_multiworld(DLCqworld, (), seed=seed)
# print(f"Seed: {multiworld.seed}") # Uncomment to print the seed for every test
args = Namespace()
for name, option in DLCqworld.options_dataclass.type_hints.items():
diff --git a/worlds/ffmq/Options.py b/worlds/ffmq/Options.py
index 4b9f4a4a88..af3625f28a 100644
--- a/worlds/ffmq/Options.py
+++ b/worlds/ffmq/Options.py
@@ -207,10 +207,10 @@ class CrestShuffle(Toggle):
class MapShuffleSeed(FreeText):
- """If this is a number, it will be used as a set seed number for Map, Crest, and Battlefield Reward shuffles.
+ """If this is a number, it will be used as a set seed number for Map, Crest, Battlefield Reward, and Companion shuffles.
If this is "random" the seed will be chosen randomly. If it is any other text, it will be used as a seed group name.
All players using the same seed group name will get the same shuffle results, as long as their Map Shuffle,
- Crest Shuffle, and Shuffle Battlefield Rewards settings are the same."""
+ Crest Shuffle, Shuffle Battlefield Rewards, Companion Shuffle, and Kaeli's Mom settings are the same."""
display_name = "Map Shuffle Seed"
default = "random"
diff --git a/worlds/generic/docs/triggers_en.md b/worlds/generic/docs/triggers_en.md
index a9ffebb466..dc5cf5c51e 100644
--- a/worlds/generic/docs/triggers_en.md
+++ b/worlds/generic/docs/triggers_en.md
@@ -121,4 +121,31 @@ For example:
In this example (thanks to @Black-Sliver), if the `pupdunk` option is rolled, then the difficulty values will be rolled
again using the new options `normal`, `pupdunk_hard`, and `pupdunk_mystery`, and the exp modifier will be rerolled using
new weights for 150 and 200. This allows for two more triggers that will only be used for the new `pupdunk_hard`
-and `pupdunk_mystery` options so that they will only be triggered on "pupdunk AND hard/mystery".
\ No newline at end of file
+and `pupdunk_mystery` options so that they will only be triggered on "pupdunk AND hard/mystery".
+
+Options that define a list, set, or dict can additionally have the character `+` added to the start of their name, which applies the contents of
+the activated trigger to the already present equivalents in the game options.
+
+For example:
+```yaml
+Super Metroid:
+ start_location:
+ landing_site: 50
+ aqueduct: 50
+ start_hints:
+ - Morph Ball
+triggers:
+ - option_category: Super Metroid
+ option_name: start_location
+ option_result: aqueduct
+ options:
+ Super Metroid:
+ +start_hints:
+ - Gravity Suit
+```
+
+In this example, if the `start_location` option rolls `landing_site`, only a starting hint for Morph Ball will be created.
+If `aqueduct` is rolled, a starting hint for Gravity Suit will also be created alongside the hint for Morph Ball.
+
+Note that for lists, items can only be added, not removed or replaced. For dicts, defining a value for a present key will
+replace that value within the dict.
\ No newline at end of file
diff --git a/worlds/hk/Items.py b/worlds/hk/Items.py
index def5c32981..72878dfc71 100644
--- a/worlds/hk/Items.py
+++ b/worlds/hk/Items.py
@@ -35,6 +35,7 @@ item_name_groups = ({
"GeoChests": lookup_type_to_names["Geo"],
"GeoRocks": lookup_type_to_names["Rock"],
"GrimmkinFlames": lookup_type_to_names["Flame"],
+ "Grimmchild": {"Grimmchild1", "Grimmchild2"},
"Grubs": lookup_type_to_names["Grub"],
"JournalEntries": lookup_type_to_names["Journal"],
"JunkPitChests": lookup_type_to_names["JunkPitChest"],
diff --git a/worlds/hk/Options.py b/worlds/hk/Options.py
index ef7fbd0dfe..21e8c179e8 100644
--- a/worlds/hk/Options.py
+++ b/worlds/hk/Options.py
@@ -406,6 +406,15 @@ class ExtraPlatforms(DefaultOnToggle):
"""Places additional platforms to make traveling throughout Hallownest more convenient."""
+class AddUnshuffledLocations(Toggle):
+ """Adds non-randomized locations to the location pool, which allows syncing
+ of location state with co-op or automatic collection via collect.
+
+ Note: This will increase the number of location checks required to purchase
+ hints to the total maximum.
+ """
+
+
class DeathLinkShade(Choice):
"""Sets whether to create a shade when you are killed by a DeathLink and how to handle your existing shade, if any.
@@ -488,7 +497,7 @@ hollow_knight_options: typing.Dict[str, type(Option)] = {
**{
option.__name__: option
for option in (
- StartLocation, Goal, WhitePalace, ExtraPlatforms, StartingGeo,
+ StartLocation, Goal, WhitePalace, ExtraPlatforms, AddUnshuffledLocations, StartingGeo,
DeathLink, DeathLinkShade, DeathLinkBreaksFragileCharms,
MinimumGeoPrice, MaximumGeoPrice,
MinimumGrubPrice, MaximumGrubPrice,
diff --git a/worlds/hk/__init__.py b/worlds/hk/__init__.py
index 8b07b34eb0..25337598ec 100644
--- a/worlds/hk/__init__.py
+++ b/worlds/hk/__init__.py
@@ -234,7 +234,7 @@ class HKWorld(World):
randomized_starting_items.update(items)
# noinspection PyShadowingNames
- def _add(item_name: str, location_name: str):
+ def _add(item_name: str, location_name: str, randomized: bool):
"""
Adds a pairing of an item and location, doing appropriate checks to see if it should be vanilla or not.
"""
@@ -252,7 +252,7 @@ class HKWorld(World):
if item_name in junk_replace:
item_name = self.get_filler_item_name()
- item = self.create_item(item_name)
+ item = self.create_item(item_name) if not vanilla or location_name == "Start" or self.multiworld.AddUnshuffledLocations[self.player] else self.create_event(item_name)
if location_name == "Start":
if item_name in randomized_starting_items:
@@ -277,30 +277,35 @@ class HKWorld(World):
for option_key, option in hollow_knight_randomize_options.items():
randomized = getattr(self.multiworld, option_key)[self.player]
+ if all([not randomized, option_key in logicless_options, not self.multiworld.AddUnshuffledLocations[self.player]]):
+ continue
for item_name, location_name in zip(option.items, option.locations):
if item_name in junk_replace:
item_name = self.get_filler_item_name()
if (item_name == "Crystal_Heart" and self.multiworld.SplitCrystalHeart[self.player]) or \
(item_name == "Mothwing_Cloak" and self.multiworld.SplitMothwingCloak[self.player]):
- _add("Left_" + item_name, location_name)
- _add("Right_" + item_name, "Split_" + location_name)
+ _add("Left_" + item_name, location_name, randomized)
+ _add("Right_" + item_name, "Split_" + location_name, randomized)
continue
if item_name == "Mantis_Claw" and self.multiworld.SplitMantisClaw[self.player]:
- _add("Left_" + item_name, "Left_" + location_name)
- _add("Right_" + item_name, "Right_" + location_name)
+ _add("Left_" + item_name, "Left_" + location_name, randomized)
+ _add("Right_" + item_name, "Right_" + location_name, randomized)
continue
if item_name == "Shade_Cloak" and self.multiworld.SplitMothwingCloak[self.player]:
if self.multiworld.random.randint(0, 1):
item_name = "Left_Mothwing_Cloak"
else:
item_name = "Right_Mothwing_Cloak"
+ if item_name == "Grimmchild2" and self.multiworld.RandomizeGrimmkinFlames[self.player] and self.multiworld.RandomizeCharms[self.player]:
+ _add("Grimmchild1", location_name, randomized)
+ continue
- _add(item_name, location_name)
+ _add(item_name, location_name, randomized)
if self.multiworld.RandomizeElevatorPass[self.player]:
randomized = True
- _add("Elevator_Pass", "Elevator_Pass")
+ _add("Elevator_Pass", "Elevator_Pass", randomized)
for shop, locations in self.created_multi_locations.items():
for _ in range(len(locations), getattr(self.multiworld, shop_to_option[shop])[self.player].value):
@@ -475,6 +480,10 @@ class HKWorld(World):
item_data = item_table[name]
return HKItem(name, item_data.advancement, item_data.id, item_data.type, self.player)
+ def create_event(self, name: str) -> HKItem:
+ item_data = item_table[name]
+ return HKItem(name, item_data.advancement, None, item_data.type, self.player)
+
def create_location(self, name: str, vanilla=False) -> HKLocation:
costs = None
basename = name
@@ -493,9 +502,15 @@ class HKWorld(World):
name = f"{name}_{i}"
region = self.multiworld.get_region("Menu", self.player)
- loc = HKLocation(self.player, name,
- self.location_name_to_id[name], region, costs=costs, vanilla=vanilla,
- basename=basename)
+
+ if vanilla and not self.multiworld.AddUnshuffledLocations[self.player]:
+ loc = HKLocation(self.player, name,
+ None, region, costs=costs, vanilla=vanilla,
+ basename=basename)
+ else:
+ loc = HKLocation(self.player, name,
+ self.location_name_to_id[name], region, costs=costs, vanilla=vanilla,
+ basename=basename)
if multi is not None:
multi.append(loc)
diff --git a/worlds/kdl3/Client.py b/worlds/kdl3/Client.py
index 3fef042900..a1e68f8b67 100644
--- a/worlds/kdl3/Client.py
+++ b/worlds/kdl3/Client.py
@@ -97,6 +97,7 @@ def cmd_gift(self: "SNIClientCommandProcessor"):
class KDL3SNIClient(SNIClient):
game = "Kirby's Dream Land 3"
+ patch_suffix = ".apkdl3"
levels = None
consumables = None
stars = None
@@ -308,10 +309,13 @@ class KDL3SNIClient(SNIClient):
if current_bgm[0] in (0x00, 0x21, 0x22, 0x23, 0x25, 0x2A, 0x2B):
return # null, title screen, opening, save select, true and false endings
game_state = await snes_read(ctx, KDL3_GAME_STATE, 1)
- current_hp = await snes_read(ctx, KDL3_KIRBY_HP, 1)
if "DeathLink" in ctx.tags and game_state[0] == 0x00 and ctx.last_death_link + 1 < time.time():
+ current_hp = await snes_read(ctx, KDL3_KIRBY_HP, 1)
+ current_world = struct.unpack("H", await snes_read(ctx, KDL3_CURRENT_WORLD, 2))[0]
+ current_level = struct.unpack("H", await snes_read(ctx, KDL3_CURRENT_LEVEL, 2))[0]
currently_dead = current_hp[0] == 0x00
- await ctx.handle_deathlink_state(currently_dead)
+ message = deathlink_messages[self.levels[current_world][current_level - 1]]
+ await ctx.handle_deathlink_state(currently_dead, f"{ctx.player_names[ctx.slot]}{message}")
recv_count = await snes_read(ctx, KDL3_RECV_COUNT, 2)
recv_amount = unpack("H", recv_count)[0]
@@ -406,7 +410,8 @@ class KDL3SNIClient(SNIClient):
ctx.locations_checked.add(new_check_id)
location = ctx.location_names[new_check_id]
snes_logger.info(
- f'New Check: {location} ({len(ctx.locations_checked)}/{len(ctx.missing_locations) + len(ctx.checked_locations)})')
+ f'New Check: {location} ({len(ctx.locations_checked)}/'
+ f'{len(ctx.missing_locations) + len(ctx.checked_locations)})')
await ctx.send_msgs([{"cmd": 'LocationChecks', "locations": [new_check_id]}])
except Exception as ex:
# we crashed, so print log and clean up
diff --git a/worlds/kdl3/Rules.py b/worlds/kdl3/Rules.py
index 81ad8f1f1f..91abc21d06 100644
--- a/worlds/kdl3/Rules.py
+++ b/worlds/kdl3/Rules.py
@@ -206,13 +206,19 @@ def set_rules(world: "KDL3World") -> None:
lambda state: can_reach_needle(state, world.player))
set_rule(world.multiworld.get_location(LocationName.sand_canyon_5_u2, world.player),
lambda state: can_reach_ice(state, world.player) and
- (can_reach_rick(state, world.player) or can_reach_coo(state, world.player)))
+ (can_reach_rick(state, world.player) or can_reach_coo(state, world.player)
+ or can_reach_chuchu(state, world.player) or can_reach_pitch(state, world.player)
+ or can_reach_nago(state, world.player)))
set_rule(world.multiworld.get_location(LocationName.sand_canyon_5_u3, world.player),
lambda state: can_reach_ice(state, world.player) and
- (can_reach_rick(state, world.player) or can_reach_coo(state, world.player)))
+ (can_reach_rick(state, world.player) or can_reach_coo(state, world.player)
+ or can_reach_chuchu(state, world.player) or can_reach_pitch(state, world.player)
+ or can_reach_nago(state, world.player)))
set_rule(world.multiworld.get_location(LocationName.sand_canyon_5_u4, world.player),
lambda state: can_reach_ice(state, world.player) and
- (can_reach_rick(state, world.player) or can_reach_coo(state, world.player)))
+ (can_reach_rick(state, world.player) or can_reach_coo(state, world.player)
+ or can_reach_chuchu(state, world.player) or can_reach_pitch(state, world.player)
+ or can_reach_nago(state, world.player)))
set_rule(world.multiworld.get_location(LocationName.cloudy_park_6_u1, world.player),
lambda state: can_reach_cutter(state, world.player))
@@ -242,7 +248,9 @@ def set_rules(world: "KDL3World") -> None:
for i in range(12, 18):
set_rule(world.multiworld.get_location(f"Sand Canyon 5 - Star {i}", world.player),
lambda state: can_reach_ice(state, world.player) and
- (can_reach_rick(state, world.player) or can_reach_coo(state, world.player)))
+ (can_reach_rick(state, world.player) or can_reach_coo(state, world.player)
+ or can_reach_chuchu(state, world.player) or can_reach_pitch(state, world.player)
+ or can_reach_nago(state, world.player)))
for i in range(21, 23):
set_rule(world.multiworld.get_location(f"Sand Canyon 5 - Star {i}", world.player),
lambda state: can_reach_chuchu(state, world.player))
@@ -267,32 +275,32 @@ def set_rules(world: "KDL3World") -> None:
# Kirby cannot eat enemies fully submerged in water. Vast majority of cases, the enemy can be brought to the surface
# and eaten by inhaling while falling on top of them
set_rule(world.multiworld.get_location(EnemyAbilities.Ripple_Field_2_E3, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Ripple_Field_3_E6, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
# Ripple Field 4 E5, E7, and E8 are doable, but too strict to leave in logic
set_rule(world.multiworld.get_location(EnemyAbilities.Ripple_Field_4_E5, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Ripple_Field_4_E7, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Ripple_Field_4_E8, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Ripple_Field_5_E1, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Ripple_Field_5_E2, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Ripple_Field_5_E3, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Ripple_Field_5_E4, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Sand_Canyon_4_E7, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Sand_Canyon_4_E8, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Sand_Canyon_4_E9, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
set_rule(world.multiworld.get_location(EnemyAbilities.Sand_Canyon_4_E10, world.player),
- lambda state: can_reach_kine(state, world.player))
+ lambda state: can_reach_kine(state, world.player) or can_reach_chuchu(state, world.player))
for boss_flag, purification, i in zip(["Level 1 Boss - Purified", "Level 2 Boss - Purified",
"Level 3 Boss - Purified", "Level 4 Boss - Purified",
diff --git a/worlds/kdl3/__init__.py b/worlds/kdl3/__init__.py
index 66c9b17b84..6d0c196ab1 100644
--- a/worlds/kdl3/__init__.py
+++ b/worlds/kdl3/__init__.py
@@ -129,6 +129,8 @@ class KDL3World(World):
# randomize copy abilities
valid_abilities = list(copy_ability_access_table.keys())
enemies_to_set = list(self.copy_abilities.keys())
+ unplaced_abilities = set(key for key in copy_ability_access_table.keys()
+ if key not in ("No Ability", "Cutter Ability", "Burning Ability"))
# now for the edge cases
for abilities, enemies in enemy_restrictive:
available_enemies = list()
@@ -143,6 +145,7 @@ class KDL3World(World):
chosen_ability = self.random.choice(abilities)
self.copy_abilities[chosen_enemy] = chosen_ability
enemies_to_set.remove(chosen_enemy)
+ unplaced_abilities.discard(chosen_ability)
# two less restrictive ones, we need to ensure Cutter and Burning appear before their required stages
sand_canyon_5 = self.get_region("Sand Canyon 5 - 9")
# this is primarily for typing, but if this ever hits it's fine to crash
@@ -160,6 +163,13 @@ class KDL3World(World):
if burning_enemy:
self.copy_abilities[burning_enemy] = "Burning Ability"
enemies_to_set.remove(burning_enemy)
+ # ensure we place one of every ability
+ if unplaced_abilities and self.options.accessibility != self.options.accessibility.option_minimal:
+ # failsafe, on non-minimal we need to guarantee every copy ability exists
+ for ability in sorted(unplaced_abilities):
+ enemy = self.random.choice(enemies_to_set)
+ self.copy_abilities[enemy] = ability
+ enemies_to_set.remove(enemy)
# place remaining
for enemy in enemies_to_set:
self.copy_abilities[enemy] = self.random.choice(valid_abilities)
@@ -283,6 +293,8 @@ class KDL3World(World):
self.boss_butch_bosses = [True for _ in range(6)]
else:
self.boss_butch_bosses = [self.random.choice([True, False]) for _ in range(6)]
+ else:
+ self.boss_butch_bosses = [False for _ in range(6)]
def generate_output(self, output_directory: str):
rom_path = ""
diff --git a/worlds/kh2/OpenKH.py b/worlds/kh2/OpenKH.py
index 6b0418c997..c30aeec67f 100644
--- a/worlds/kh2/OpenKH.py
+++ b/worlds/kh2/OpenKH.py
@@ -54,29 +54,30 @@ def patch_kh2(self, output_directory):
formName = None
levelsetting = list()
- if self.multiworld.Keyblade_Minimum[self.player].value > self.multiworld.Keyblade_Maximum[self.player].value:
+ if self.options.Keyblade_Minimum.value > self.options.Keyblade_Maximum.value:
logging.info(
f"{self.multiworld.get_file_safe_player_name(self.player)} has Keyblade Minimum greater than Keyblade Maximum")
- keyblademin = self.multiworld.Keyblade_Maximum[self.player].value
- keyblademax = self.multiworld.Keyblade_Minimum[self.player].value
+ keyblademin = self.options.Keyblade_Maximum.value
+ keyblademax = self.options.Keyblade_Minimum.value
else:
- keyblademin = self.multiworld.Keyblade_Minimum[self.player].value
- keyblademax = self.multiworld.Keyblade_Maximum[self.player].value
+ keyblademin = self.options.Keyblade_Minimum.value
+ keyblademax = self.options.Keyblade_Maximum.value
- if self.multiworld.LevelDepth[self.player] == "level_50":
+ if self.options.LevelDepth == "level_50":
levelsetting.extend(exclusion_table["Level50"])
- elif self.multiworld.LevelDepth[self.player] == "level_99":
+ elif self.options.LevelDepth == "level_99":
levelsetting.extend(exclusion_table["Level99"])
- elif self.multiworld.LevelDepth[self.player] != "level_1":
+ elif self.options.LevelDepth != "level_1":
levelsetting.extend(exclusion_table["Level50Sanity"])
- if self.multiworld.LevelDepth[self.player] == "level_99_sanity":
+ if self.options.LevelDepth == "level_99_sanity":
levelsetting.extend(exclusion_table["Level99Sanity"])
mod_name = f"AP-{self.multiworld.seed_name}-P{self.player}-{self.multiworld.get_file_safe_player_name(self.player)}"
all_valid_locations = {location for location, data in all_locations.items()}
+
for location in self.multiworld.get_filled_locations(self.player):
if location.name in all_valid_locations:
data = all_locations[location.name]
@@ -142,11 +143,11 @@ def patch_kh2(self, output_directory):
if data.locid == 2:
formDict = {1: "Valor", 2: "Wisdom", 3: "Limit", 4: "Master", 5: "Final"}
formDictExp = {
- 1: self.multiworld.Valor_Form_EXP[self.player].value,
- 2: self.multiworld.Wisdom_Form_EXP[self.player].value,
- 3: self.multiworld.Limit_Form_EXP[self.player].value,
- 4: self.multiworld.Master_Form_EXP[self.player].value,
- 5: self.multiworld.Final_Form_EXP[self.player].value
+ 1: self.options.Valor_Form_EXP.value,
+ 2: self.options.Wisdom_Form_EXP.value,
+ 3: self.options.Limit_Form_EXP.value,
+ 4: self.options.Master_Form_EXP.value,
+ 5: self.options.Final_Form_EXP.value
}
formexp = formDictExp[data.charName]
formName = formDict[data.charName]
@@ -172,7 +173,7 @@ def patch_kh2(self, output_directory):
for x in range(1, 7):
self.formattedFmlv["Summon"].append({
"Ability": 123,
- "Experience": int(formExp[0][x] / self.multiworld.Summon_EXP[self.player].value),
+ "Experience": int(formExp[0][x] / self.options.Summon_EXP.value),
"FormId": 0,
"FormLevel": x,
"GrowthAbilityLevel": 0,
@@ -192,7 +193,7 @@ def patch_kh2(self, output_directory):
increaseStat(self.random.randint(0, 3))
itemcode = 0
self.formattedLvup["Sora"][self.i] = {
- "Exp": int(soraExp[self.i] / self.multiworld.Sora_Level_EXP[self.player].value),
+ "Exp": int(soraExp[self.i] / self.options.Sora_Level_EXP.value),
"Strength": self.strength,
"Magic": self.magic,
"Defense": self.defense,
@@ -224,7 +225,7 @@ def patch_kh2(self, output_directory):
"Unknown": 0
})
self.formattedLvup["Sora"][1] = {
- "Exp": int(soraExp[1] / self.multiworld.Sora_Level_EXP[self.player].value),
+ "Exp": int(soraExp[1] / self.options.Sora_Level_EXP.value),
"Strength": 2,
"Magic": 6,
"Defense": 2,
@@ -379,35 +380,35 @@ def patch_kh2(self, output_directory):
}
lucky_emblem_text = {
0: "Your Goal is not Lucky Emblem. It is Hitlist or Three Proofs.",
- 1: f"Lucky Emblem Required: {self.multiworld.LuckyEmblemsRequired[self.player]} out of {self.multiworld.LuckyEmblemsAmount[self.player]}",
+ 1: f"Lucky Emblem Required: {self.options.LuckyEmblemsRequired} out of {self.options.LuckyEmblemsAmount}",
2: "Your Goal is not Lucky Emblem. It is Hitlist or Three Proofs.",
- 3: f"Lucky Emblem Required: {self.multiworld.LuckyEmblemsRequired[self.player]} out of {self.multiworld.LuckyEmblemsAmount[self.player]}"
+ 3: f"Lucky Emblem Required: {self.options.LuckyEmblemsRequired} out of {self.options.LuckyEmblemsAmount}"
}
hitlist_text = {
0: "Your Goal is not Hitlist. It is Lucky Emblem or Three Proofs",
1: "Your Goal is not Hitlist. It is Lucky Emblem or Three Proofs",
- 2: f"Bounties Required: {self.multiworld.BountyRequired[self.player]} out of {self.multiworld.BountyAmount[self.player]}",
- 3: f"Bounties Required: {self.multiworld.BountyRequired[self.player]} out of {self.multiworld.BountyAmount[self.player]}",
+ 2: f"Bounties Required: {self.options.BountyRequired} out of {self.options.BountyAmount}",
+ 3: f"Bounties Required: {self.options.BountyRequired} out of {self.options.BountyAmount}",
}
self.pooh_text = [
{
'id': 18326,
- 'en': f"Your goal is {goal_to_text[self.multiworld.Goal[self.player].value]}"
+ 'en': f"Your goal is {goal_to_text[self.options.Goal.value]}"
},
{
'id': 18327,
- 'en': lucky_emblem_text[self.multiworld.Goal[self.player].value]
+ 'en': lucky_emblem_text[self.options.Goal.value]
},
{
'id': 18328,
- 'en': hitlist_text[self.multiworld.Goal[self.player].value]
+ 'en': hitlist_text[self.options.Goal.value]
}
]
self.level_depth_text = [
{
'id': 0x3BF1,
- 'en': f"Your Level Depth is {self.multiworld.LevelDepth[self.player].current_option_name}"
+ 'en': f"Your Level Depth is {self.options.LevelDepth.current_option_name}"
}
]
mod_dir = os.path.join(output_directory, mod_name + "_" + Utils.__version__)
diff --git a/worlds/kh2/Regions.py b/worlds/kh2/Regions.py
index 235500ec89..7fc2ad8a87 100644
--- a/worlds/kh2/Regions.py
+++ b/worlds/kh2/Regions.py
@@ -935,7 +935,7 @@ def create_regions(self):
for level_region_name in level_region_list:
KH2REGIONS[level_region_name] = []
- if multiworld.LevelDepth[player] == "level_50":
+ if self.options.LevelDepth == "level_50":
KH2REGIONS[RegionName.LevelsVS1] = [LocationName.Lvl2, LocationName.Lvl4, LocationName.Lvl7, LocationName.Lvl9,
LocationName.Lvl10]
KH2REGIONS[RegionName.LevelsVS3] = [LocationName.Lvl12, LocationName.Lvl14, LocationName.Lvl15,
@@ -949,7 +949,7 @@ def create_regions(self):
KH2REGIONS[RegionName.LevelsVS15] = [LocationName.Lvl50]
# level 99
- elif multiworld.LevelDepth[player] == "level_99":
+ elif self.options.LevelDepth == "level_99":
KH2REGIONS[RegionName.LevelsVS1] = [LocationName.Lvl7, LocationName.Lvl9]
KH2REGIONS[RegionName.LevelsVS3] = [LocationName.Lvl12, LocationName.Lvl15, LocationName.Lvl17,
LocationName.Lvl20]
@@ -965,7 +965,7 @@ def create_regions(self):
KH2REGIONS[RegionName.LevelsVS26] = [LocationName.Lvl99]
# level sanity
# has to be [] instead of {} for in
- elif multiworld.LevelDepth[player] in ["level_50_sanity", "level_99_sanity"]:
+ elif self.options.LevelDepth in ["level_50_sanity", "level_99_sanity"]:
KH2REGIONS[RegionName.LevelsVS1] = [LocationName.Lvl2, LocationName.Lvl3, LocationName.Lvl4, LocationName.Lvl5,
LocationName.Lvl6,
LocationName.Lvl7, LocationName.Lvl8, LocationName.Lvl9, LocationName.Lvl10]
@@ -986,7 +986,7 @@ def create_regions(self):
LocationName.Lvl46, LocationName.Lvl47, LocationName.Lvl48,
LocationName.Lvl49, LocationName.Lvl50]
# level 99 sanity
- if multiworld.LevelDepth[player] == "level_99_sanity":
+ if self.options.LevelDepth == "level_99_sanity":
KH2REGIONS[RegionName.LevelsVS15] = [LocationName.Lvl51, LocationName.Lvl52, LocationName.Lvl53,
LocationName.Lvl54,
LocationName.Lvl55, LocationName.Lvl56, LocationName.Lvl57,
@@ -1012,7 +1012,7 @@ def create_regions(self):
LocationName.Lvl95, LocationName.Lvl96, LocationName.Lvl97,
LocationName.Lvl98, LocationName.Lvl99]
KH2REGIONS[RegionName.Summon] = []
- if multiworld.SummonLevelLocationToggle[player]:
+ if self.options.SummonLevelLocationToggle:
KH2REGIONS[RegionName.Summon] = [LocationName.Summonlvl2,
LocationName.Summonlvl3,
LocationName.Summonlvl4,
diff --git a/worlds/kh2/Rules.py b/worlds/kh2/Rules.py
index 1124f8109c..4370ad36b5 100644
--- a/worlds/kh2/Rules.py
+++ b/worlds/kh2/Rules.py
@@ -157,7 +157,7 @@ class KH2Rules:
def form_list_unlock(self, state: CollectionState, parent_form_list, level_required, fight_logic=False) -> bool:
form_access = {parent_form_list}
- if self.multiworld.AutoFormLogic[self.player] and state.has(ItemName.SecondChance, self.player) and not fight_logic:
+ if self.world.options.AutoFormLogic and state.has(ItemName.SecondChance, self.player) and not fight_logic:
if parent_form_list == ItemName.MasterForm:
if state.has(ItemName.DriveConverter, self.player):
form_access.add(auto_form_dict[parent_form_list])
@@ -170,8 +170,8 @@ class KH2Rules:
forms_available = 0
form_list = [ItemName.ValorForm, ItemName.WisdomForm, ItemName.LimitForm, ItemName.MasterForm,
ItemName.FinalForm]
- if self.world.multiworld.FinalFormLogic[self.player] != "no_light_and_darkness":
- if self.world.multiworld.FinalFormLogic[self.player] == "light_and_darkness":
+ if self.world.options.FinalFormLogic != "no_light_and_darkness":
+ if self.world.options.FinalFormLogic == "light_and_darkness":
if state.has(ItemName.LightDarkness, self.player) and state.has_any(set(form_list), self.player):
forms_available += 1
form_list.remove(ItemName.FinalForm)
@@ -273,34 +273,35 @@ class KH2WorldRules(KH2Rules):
def set_kh2_goal(self):
final_xemnas_location = self.multiworld.get_location(LocationName.FinalXemnasEventLocation, self.player)
- if self.multiworld.Goal[self.player] == "three_proofs":
+ if self.world.options.Goal == "three_proofs":
final_xemnas_location.access_rule = lambda state: self.kh2_has_all(three_proofs, state)
- if self.multiworld.FinalXemnas[self.player]:
+ if self.world.options.FinalXemnas:
self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.Victory, self.player, 1)
else:
self.multiworld.completion_condition[self.player] = lambda state: self.kh2_has_all(three_proofs, state)
# lucky emblem hunt
- elif self.multiworld.Goal[self.player] == "lucky_emblem_hunt":
- final_xemnas_location.access_rule = lambda state: state.has(ItemName.LuckyEmblem, self.player, self.multiworld.LuckyEmblemsRequired[self.player].value)
- if self.multiworld.FinalXemnas[self.player]:
+ elif self.world.options.Goal == "lucky_emblem_hunt":
+ final_xemnas_location.access_rule = lambda state: state.has(ItemName.LuckyEmblem, self.player, self.world.options.LuckyEmblemsRequired.value)
+ if self.world.options.FinalXemnas:
self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.Victory, self.player, 1)
else:
- self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.LuckyEmblem, self.player, self.multiworld.LuckyEmblemsRequired[self.player].value)
+ self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.LuckyEmblem, self.player, self.world.options.LuckyEmblemsRequired.value)
# hitlist if == 2
- elif self.multiworld.Goal[self.player] == "hitlist":
- final_xemnas_location.access_rule = lambda state: state.has(ItemName.Bounty, self.player, self.multiworld.BountyRequired[self.player].value)
- if self.multiworld.FinalXemnas[self.player]:
+ elif self.world.options.Goal == "hitlist":
+ final_xemnas_location.access_rule = lambda state: state.has(ItemName.Bounty, self.player, self.world.options.BountyRequired.value)
+ if self.world.options.FinalXemnas:
self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.Victory, self.player, 1)
else:
- self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.Bounty, self.player, self.multiworld.BountyRequired[self.player].value)
+ self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.Bounty, self.player, self.world.options.BountyRequired.value)
else:
- final_xemnas_location.access_rule = lambda state: state.has(ItemName.Bounty, self.player, self.multiworld.BountyRequired[self.player].value) and \
- state.has(ItemName.LuckyEmblem, self.player, self.multiworld.LuckyEmblemsRequired[self.player].value)
- if self.multiworld.FinalXemnas[self.player]:
+
+ final_xemnas_location.access_rule = lambda state: state.has(ItemName.Bounty, self.player, self.world.options.BountyRequired.value) and \
+ state.has(ItemName.LuckyEmblem, self.player, self.world.options.LuckyEmblemsRequired.value)
+ if self.world.options.FinalXemnas:
self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.Victory, self.player, 1)
else:
- self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.Bounty, self.player, self.multiworld.BountyRequired[self.player].value) and \
- state.has(ItemName.LuckyEmblem, self.player, self.multiworld.LuckyEmblemsRequired[self.player].value)
+ self.multiworld.completion_condition[self.player] = lambda state: state.has(ItemName.Bounty, self.player, self.world.options.BountyRequired.value) and \
+ state.has(ItemName.LuckyEmblem, self.player, self.world.options.LuckyEmblemsRequired.value)
class KH2FormRules(KH2Rules):
@@ -409,7 +410,7 @@ class KH2FightRules(KH2Rules):
# if skip rules are of return false
def __init__(self, world: KH2World) -> None:
super().__init__(world)
- self.fight_logic = self.multiworld.FightLogic[self.player].current_key
+ self.fight_logic = world.options.FightLogic.current_key
self.fight_region_rules = {
RegionName.ShanYu: lambda state: self.get_shan_yu_rules(state),
@@ -935,7 +936,7 @@ class KH2FightRules(KH2Rules):
def get_cor_skip_first_rules(self, state: CollectionState) -> bool:
# if option is not allow skips return false else run rules
- if not self.multiworld.CorSkipToggle[self.player]:
+ if not self.world.options.CorSkipToggle:
return False
# easy: aerial dodge 3,master form,fire
# normal: aerial dodge 2, master form,fire
diff --git a/worlds/kh2/__init__.py b/worlds/kh2/__init__.py
index d02614d380..4125bcb24c 100644
--- a/worlds/kh2/__init__.py
+++ b/worlds/kh2/__init__.py
@@ -240,7 +240,7 @@ class KH2World(World):
self.hitlist_verify()
- prio_hitlist = [location for location in self.multiworld.priority_locations[self.player].value if
+ prio_hitlist = [location for location in self.options.priority_locations.value if
location in self.random_super_boss_list]
for bounty in range(self.options.BountyAmount.value):
if prio_hitlist:
@@ -261,11 +261,11 @@ class KH2World(World):
if self.options.WeaponSlotStartHint:
for location in all_weapon_slot:
- self.multiworld.start_location_hints[self.player].value.add(location)
+ self.options.start_location_hints.value.add(location)
if self.options.FillerItemsLocal:
for item in filler_items:
- self.multiworld.local_items[self.player].value.add(item)
+ self.options.local_items.value.add(item)
# By imitating remote this doesn't have to be plandoded filler anymore
# for location in {LocationName.JunkMedal, LocationName.JunkMedal}:
# self.plando_locations[location] = random_stt_item
@@ -325,7 +325,7 @@ class KH2World(World):
self.item_quantity_dict[random_ability] -= 1
self.total_locations -= 1
self.slot_data_donald_weapon = [item_name.name for item_name in self.donald_weapon_abilities]
- if not self.multiworld.DonaldGoofyStatsanity[self.player]:
+ if not self.options.DonaldGoofyStatsanity:
# pre plando donald get bonuses
self.donald_get_bonus_abilities += [self.create_item(random_prog_ability)]
self.total_locations -= 1
@@ -385,7 +385,7 @@ class KH2World(World):
location.place_locked_item(random_ability)
self.goofy_weapon_abilities.remove(random_ability)
- if not self.multiworld.DonaldGoofyStatsanity[self.player]:
+ if not self.options.DonaldGoofyStatsanity:
# plando goofy get bonuses
goofy_get_bonus_location_pool = [self.multiworld.get_location(location, self.player) for location in
Goofy_Checks.keys() if Goofy_Checks[location].yml != "Keyblade"]
@@ -406,7 +406,7 @@ class KH2World(World):
location.place_locked_item(random_ability)
self.donald_weapon_abilities.remove(random_ability)
- if not self.multiworld.DonaldGoofyStatsanity[self.player]:
+ if not self.options.DonaldGoofyStatsanity:
# plando goofy get bonuses
donald_get_bonus_location_pool = [self.multiworld.get_location(location, self.player) for location in
Donald_Checks.keys() if Donald_Checks[location].yml != "Keyblade"]
@@ -428,7 +428,7 @@ class KH2World(World):
"""
Making sure the player doesn't put too many abilities in their starting inventory.
"""
- for item, value in self.multiworld.start_inventory[self.player].value.items():
+ for item, value in self.options.start_inventory.value.items():
if item in ActionAbility_Table \
or item in SupportAbility_Table or exclusion_item_table["StatUps"] \
or item in DonaldAbility_Table or item in GoofyAbility_Table:
@@ -461,7 +461,7 @@ class KH2World(World):
"""
Making sure hitlist have amount>=required.
"""
- for location in self.multiworld.exclude_locations[self.player].value:
+ for location in self.options.exclude_locations.value:
if location in self.random_super_boss_list:
self.random_super_boss_list.remove(location)
@@ -491,7 +491,7 @@ class KH2World(World):
self.options.BountyAmount.value = temp
if self.options.BountyStartingHintToggle:
- self.multiworld.start_hints[self.player].value.add(ItemName.Bounty)
+ self.options.start_hints.value.add(ItemName.Bounty)
if ItemName.ProofofNonexistence in self.item_quantity_dict:
del self.item_quantity_dict[ItemName.ProofofNonexistence]
@@ -503,19 +503,19 @@ class KH2World(World):
# Option to turn off all superbosses. Can do this individually but its like 20+ checks
if not self.options.SuperBosses:
for superboss in exclusion_table["SuperBosses"]:
- self.multiworld.exclude_locations[self.player].value.add(superboss)
+ self.options.exclude_locations.value.add(superboss)
# Option to turn off Olympus Colosseum Cups.
if self.options.Cups == "no_cups":
for cup in exclusion_table["Cups"]:
- self.multiworld.exclude_locations[self.player].value.add(cup)
+ self.options.exclude_locations.value.add(cup)
# exclude only hades paradox. If cups and hades paradox then nothing is excluded
elif self.options.Cups == "cups":
- self.multiworld.exclude_locations[self.player].value.add(LocationName.HadesCupTrophyParadoxCups)
+ self.options.exclude_locations.value.add(LocationName.HadesCupTrophyParadoxCups)
if not self.options.AtlanticaToggle:
for loc in exclusion_table["Atlantica"]:
- self.multiworld.exclude_locations[self.player].value.add(loc)
+ self.options.exclude_locations.value.add(loc)
def level_subtraction(self):
"""
diff --git a/worlds/ladx/Options.py b/worlds/ladx/Options.py
index 117242208b..ec45706407 100644
--- a/worlds/ladx/Options.py
+++ b/worlds/ladx/Options.py
@@ -179,6 +179,22 @@ class ShuffleStoneBeaks(DungeonItemShuffle):
display_name = "Shuffle Stone Beaks"
ladxr_item = "STONE_BEAK"
+class ShuffleInstruments(DungeonItemShuffle):
+ """
+ Shuffle Instruments
+ [Original Dungeon] The item will be within its original dungeon
+ [Own Dungeons] The item will be within a dungeon in your world
+ [Own World] The item will be somewhere in your world
+ [Any World] The item could be anywhere
+ [Different World] The item will be somewhere in another world
+ [Vanilla] The item will be in its vanilla location in your world
+ """
+ display_name = "Shuffle Instruments"
+ ladxr_item = "INSTRUMENT"
+ default = 100
+ option_vanilla = 100
+ alias_false = 100
+
class Goal(Choice, LADXROption):
"""
The Goal of the game
@@ -465,6 +481,7 @@ links_awakening_options: typing.Dict[str, typing.Type[Option]] = {
'shuffle_compasses': ShuffleCompasses,
'shuffle_stone_beaks': ShuffleStoneBeaks,
'music': Music,
+ 'shuffle_instruments': ShuffleInstruments,
'music_change_condition': MusicChangeCondition,
'nag_messages': NagMessages,
'ap_title_screen': APTitleScreen,
diff --git a/worlds/ladx/__init__.py b/worlds/ladx/__init__.py
index 6742dffd30..9de3462ad0 100644
--- a/worlds/ladx/__init__.py
+++ b/worlds/ladx/__init__.py
@@ -23,7 +23,7 @@ from .LADXR.settings import Settings as LADXRSettings
from .LADXR.worldSetup import WorldSetup as LADXRWorldSetup
from .Locations import (LinksAwakeningLocation, LinksAwakeningRegion,
create_regions_from_ladxr, get_locations_to_id)
-from .Options import DungeonItemShuffle, links_awakening_options
+from .Options import DungeonItemShuffle, links_awakening_options, ShuffleInstruments
from .Rom import LADXDeltaPatch
DEVELOPER_MODE = False
@@ -184,7 +184,7 @@ class LinksAwakeningWorld(World):
self.pre_fill_items = []
# For any and different world, set item rule instead
- for option in ["maps", "compasses", "small_keys", "nightmare_keys", "stone_beaks"]:
+ for option in ["maps", "compasses", "small_keys", "nightmare_keys", "stone_beaks", "instruments"]:
option = "shuffle_" + option
option = self.player_options[option]
@@ -224,7 +224,10 @@ class LinksAwakeningWorld(World):
continue
if isinstance(item.item_data, DungeonItemData):
- if item.item_data.dungeon_item_type == DungeonItemType.INSTRUMENT:
+ item_type = item.item_data.ladxr_id[:-1]
+ shuffle_type = dungeon_item_types[item_type]
+
+ if item.item_data.dungeon_item_type == DungeonItemType.INSTRUMENT and shuffle_type == ShuffleInstruments.option_vanilla:
# Find instrument, lock
# TODO: we should be able to pinpoint the region we want, save a lookup table please
found = False
@@ -240,10 +243,8 @@ class LinksAwakeningWorld(World):
found = True
break
if found:
- break
+ break
else:
- item_type = item.item_data.ladxr_id[:-1]
- shuffle_type = dungeon_item_types[item_type]
if shuffle_type == DungeonItemShuffle.option_original_dungeon:
self.prefill_original_dungeon[item.item_data.dungeon_index - 1].append(item)
self.pre_fill_items.append(item)
diff --git a/worlds/lufia2ac/Client.py b/worlds/lufia2ac/Client.py
index ac0de19bfd..9025a1137b 100644
--- a/worlds/lufia2ac/Client.py
+++ b/worlds/lufia2ac/Client.py
@@ -30,6 +30,7 @@ L2AC_RX_ADDR: int = SRAM_START + 0x2800
class L2ACSNIClient(SNIClient):
game: str = "Lufia II Ancient Cave"
+ patch_suffix = ".apl2ac"
async def validate_rom(self, ctx: SNIContext) -> bool:
from SNIClient import snes_read
diff --git a/worlds/messenger/__init__.py b/worlds/messenger/__init__.py
index f4a28729f1..c40ca02f42 100644
--- a/worlds/messenger/__init__.py
+++ b/worlds/messenger/__init__.py
@@ -1,14 +1,33 @@
import logging
-from typing import Any, Dict, List, Optional
+from typing import Any, ClassVar, Dict, List, Optional, TextIO
-from BaseClasses import CollectionState, Item, ItemClassification, Tutorial
+from BaseClasses import CollectionState, Entrance, Item, ItemClassification, MultiWorld, Tutorial
+from Options import Accessibility
+from Utils import output_path
+from settings import FilePath, Group
from worlds.AutoWorld import WebWorld, World
-from .constants import ALL_ITEMS, ALWAYS_LOCATIONS, BOSS_LOCATIONS, FILLER, NOTES, PHOBEKINS
-from .options import Goal, Logic, MessengerOptions, NotesNeeded, PowerSeals
-from .regions import MEGA_SHARDS, REGIONS, REGION_CONNECTIONS, SEALS
+from worlds.LauncherComponents import Component, Type, components
+from .client_setup import launch_game
+from .connections import CONNECTIONS, RANDOMIZED_CONNECTIONS, TRANSITIONS
+from .constants import ALL_ITEMS, ALWAYS_LOCATIONS, BOSS_LOCATIONS, FILLER, NOTES, PHOBEKINS, PROG_ITEMS, USEFUL_ITEMS
+from .options import AvailablePortals, Goal, Logic, MessengerOptions, NotesNeeded, ShuffleTransitions
+from .portals import PORTALS, add_closed_portal_reqs, disconnect_portals, shuffle_portals, validate_portals
+from .regions import LEVELS, MEGA_SHARDS, LOCATIONS, REGION_CONNECTIONS
from .rules import MessengerHardRules, MessengerOOBRules, MessengerRules
-from .shop import FIGURINES, SHOP_ITEMS, shuffle_shop_prices
-from .subclasses import MessengerItem, MessengerRegion
+from .shop import FIGURINES, PROG_SHOP_ITEMS, SHOP_ITEMS, USEFUL_SHOP_ITEMS, shuffle_shop_prices
+from .subclasses import MessengerEntrance, MessengerItem, MessengerRegion, MessengerShopLocation
+
+components.append(
+ Component("The Messenger", component_type=Type.CLIENT, func=launch_game)#, game_name="The Messenger", supports_uri=True)
+)
+
+
+class MessengerSettings(Group):
+ class GamePath(FilePath):
+ description = "The Messenger game executable"
+ is_exe = True
+
+ game_path: GamePath = GamePath("TheMessenger.exe")
class MessengerWeb(WebWorld):
@@ -35,17 +54,10 @@ class MessengerWorld(World):
adventure full of thrills, surprises, and humor.
"""
game = "The Messenger"
-
- item_name_groups = {
- "Notes": set(NOTES),
- "Keys": set(NOTES),
- "Crest": {"Sun Crest", "Moon Crest"},
- "Phobe": set(PHOBEKINS),
- "Phobekin": set(PHOBEKINS),
- }
-
options_dataclass = MessengerOptions
options: MessengerOptions
+ settings_key = "messenger_settings"
+ settings: ClassVar[MessengerSettings]
base_offset = 0xADD_000
item_name_to_id = {item: item_id
@@ -54,58 +66,144 @@ class MessengerWorld(World):
for location_id, location in
enumerate([
*ALWAYS_LOCATIONS,
- *[seal for seals in SEALS.values() for seal in seals],
*[shard for shards in MEGA_SHARDS.values() for shard in shards],
*BOSS_LOCATIONS,
*[f"The Shop - {shop_loc}" for shop_loc in SHOP_ITEMS],
*FIGURINES,
"Money Wrench",
], base_offset)}
+ item_name_groups = {
+ "Notes": set(NOTES),
+ "Keys": set(NOTES),
+ "Crest": {"Sun Crest", "Moon Crest"},
+ "Phobe": set(PHOBEKINS),
+ "Phobekin": set(PHOBEKINS),
+ }
+ location_name_groups = {
+ "Notes": {
+ "Autumn Hills - Key of Hope",
+ "Searing Crags - Key of Strength",
+ "Underworld - Key of Chaos",
+ "Sunken Shrine - Key of Love",
+ "Elemental Skylands - Key of Symbiosis",
+ "Corrupted Future - Key of Courage",
+ },
+ "Keys": {
+ "Autumn Hills - Key of Hope",
+ "Searing Crags - Key of Strength",
+ "Underworld - Key of Chaos",
+ "Sunken Shrine - Key of Love",
+ "Elemental Skylands - Key of Symbiosis",
+ "Corrupted Future - Key of Courage",
+ },
+ "Phobe": {
+ "Catacombs - Necro",
+ "Bamboo Creek - Claustro",
+ "Searing Crags - Pyro",
+ "Cloud Ruins - Acro",
+ },
+ "Phobekin": {
+ "Catacombs - Necro",
+ "Bamboo Creek - Claustro",
+ "Searing Crags - Pyro",
+ "Cloud Ruins - Acro",
+ },
+ }
- required_client_version = (0, 4, 2)
+ required_client_version = (0, 4, 3)
web = MessengerWeb()
total_seals: int = 0
required_seals: int = 0
+ created_seals: int = 0
total_shards: int = 0
shop_prices: Dict[str, int]
figurine_prices: Dict[str, int]
_filler_items: List[str]
+ starting_portals: List[str]
+ plando_portals: List[str]
+ spoiler_portal_mapping: Dict[str, str]
+ portal_mapping: List[int]
+ transitions: List[Entrance]
+ reachable_locs: int = 0
def generate_early(self) -> None:
if self.options.goal == Goal.option_power_seal_hunt:
- self.options.shuffle_seals.value = PowerSeals.option_true
self.total_seals = self.options.total_seals.value
+ if self.options.limited_movement:
+ self.options.accessibility.value = Accessibility.option_minimal
+ if self.options.logic_level < Logic.option_hard:
+ self.options.logic_level.value = Logic.option_hard
+
+ if self.options.early_meditation:
+ self.multiworld.early_items[self.player]["Meditation"] = 1
+
self.shop_prices, self.figurine_prices = shuffle_shop_prices(self)
+ starting_portals = ["Autumn Hills", "Howling Grotto", "Glacial Peak", "Riviere Turquoise", "Sunken Shrine", "Searing Crags"]
+ self.starting_portals = [f"{portal} Portal"
+ for portal in starting_portals[:3] +
+ self.random.sample(starting_portals[3:], k=self.options.available_portals - 3)]
+ # super complicated method for adding searing crags to starting portals if it wasn't chosen
+ # need to add a check for transition shuffle when that gets added back in
+ if not self.options.shuffle_portals and "Searing Crags Portal" not in self.starting_portals:
+ self.starting_portals.append("Searing Crags Portal")
+ if len(self.starting_portals) > 4:
+ portals_to_strip = [portal for portal in ["Riviere Turquoise Portal", "Sunken Shrine Portal"]
+ if portal in self.starting_portals]
+ self.starting_portals.remove(self.random.choice(portals_to_strip))
+
+ self.plando_portals = []
+ self.portal_mapping = []
+ self.spoiler_portal_mapping = {}
+ self.transitions = []
+
def create_regions(self) -> None:
# 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])
+ # create simple regions
+ simple_regions = [MessengerRegion(level, self) for level in LEVELS]
+ # create complex regions that have sub-regions
+ complex_regions = [MessengerRegion(f"{parent} - {reg_name}", self, parent)
+ for parent, sub_region in CONNECTIONS.items()
+ for reg_name in sub_region]
+
+ for region in complex_regions:
+ region_name = region.name.replace(f"{region.parent} - ", "")
+ connection_data = CONNECTIONS[region.parent][region_name]
+ for exit_region in connection_data:
+ region.connect(self.multiworld.get_region(exit_region, self.player))
+
+ # all regions need to be created before i can do these connections so we create and connect the complex first
+ for region in [level for level in simple_regions if level.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
+ main_movement_items = ["Rope Dart", "Wingsuit"]
itempool: List[MessengerItem] = [
self.create_item(item)
for item in self.item_name_to_id
- if item not in
- {
- "Power Seal", *NOTES, *FIGURINES,
+ if "Time Shard" not in item and item not in {
+ "Power Seal", *NOTES, *FIGURINES, *main_movement_items,
*{collected_item.name for collected_item in self.multiworld.precollected_items[self.player]},
- } and "Time Shard" not in item
+ }
]
+ if self.options.limited_movement:
+ itempool.append(self.create_item(self.random.choice(main_movement_items)))
+ else:
+ itempool += [self.create_item(move_item) for move_item in main_movement_items]
+
if self.options.goal == Goal.option_open_music_box:
# make a list of all notes except those in the player's defined starting inventory, and adjust the
# amount we need to put in the itempool and precollect based on that
notes = [note for note in NOTES if note not in self.multiworld.precollected_items[self.player]]
self.random.shuffle(notes)
precollected_notes_amount = NotesNeeded.range_end - \
- self.options.notes_needed - \
- (len(NOTES) - len(notes))
+ self.options.notes_needed - \
+ (len(NOTES) - len(notes))
if precollected_notes_amount:
for note in notes[:precollected_notes_amount]:
self.multiworld.push_precollected(self.create_item(note))
@@ -116,26 +214,27 @@ class MessengerWorld(World):
total_seals = min(len(self.multiworld.get_unfilled_locations(self.player)) - len(itempool),
self.options.total_seals.value)
if total_seals < self.total_seals:
- logging.warning(f"Not enough locations for total seals setting "
- f"({self.options.total_seals}). Adjusting to {total_seals}")
+ logging.warning(
+ f"Not enough locations for total seals setting "
+ f"({self.options.total_seals}). Adjusting to {total_seals}"
+ )
self.total_seals = total_seals
self.required_seals = int(self.options.percent_seals_required.value / 100 * self.total_seals)
seals = [self.create_item("Power Seal") for _ in range(self.total_seals)]
- for i in range(self.required_seals):
- seals[i].classification = ItemClassification.progression_skip_balancing
itempool += seals
+ self.multiworld.itempool += itempool
remaining_fill = len(self.multiworld.get_unfilled_locations(self.player)) - len(itempool)
if remaining_fill < 10:
self._filler_items = self.random.choices(
- list(FILLER)[2:],
- weights=list(FILLER.values())[2:],
- k=remaining_fill
+ list(FILLER)[2:],
+ weights=list(FILLER.values())[2:],
+ k=remaining_fill
)
- itempool += [self.create_filler() for _ in range(remaining_fill)]
+ filler = [self.create_filler() for _ in range(remaining_fill)]
- self.multiworld.itempool += itempool
+ self.multiworld.itempool += filler
def set_rules(self) -> None:
logic = self.options.logic_level
@@ -144,16 +243,59 @@ class MessengerWorld(World):
elif logic == Logic.option_hard:
MessengerHardRules(self).set_messenger_rules()
else:
- MessengerOOBRules(self).set_messenger_rules()
+ raise ValueError(f"Somehow you have a logic option that's currently invalid."
+ f" {logic} for {self.multiworld.get_player_name(self.player)}")
+ # MessengerOOBRules(self).set_messenger_rules()
+
+ add_closed_portal_reqs(self)
+ # i need portal shuffle to happen after rules exist so i can validate it
+ attempts = 5
+ if self.options.shuffle_portals:
+ self.portal_mapping = []
+ self.spoiler_portal_mapping = {}
+ for _ in range(attempts):
+ disconnect_portals(self)
+ shuffle_portals(self)
+ if validate_portals(self):
+ break
+ # failsafe mostly for invalid plandoed portals with no transition shuffle
+ else:
+ raise RuntimeError("Unable to generate valid portal output.")
+
+ def write_spoiler_header(self, spoiler_handle: TextIO) -> None:
+ if self.options.available_portals < 6:
+ spoiler_handle.write(f"\nStarting Portals:\n\n")
+ for portal in self.starting_portals:
+ spoiler_handle.write(f"{portal}\n")
+
+ spoiler = self.multiworld.spoiler
+
+ if self.options.shuffle_portals:
+ # sort the portals as they appear left to right in-game
+ portal_info = sorted(
+ self.spoiler_portal_mapping.items(),
+ key=lambda portal:
+ ["Autumn Hills", "Riviere Turquoise",
+ "Howling Grotto", "Sunken Shrine",
+ "Searing Crags", "Glacial Peak"].index(portal[0]))
+ for portal, output in portal_info:
+ spoiler.set_entrance(f"{portal} Portal", output, "I can write anything I want here lmao", self.player)
def fill_slot_data(self) -> Dict[str, Any]:
- return {
+ slot_data = {
"shop": {SHOP_ITEMS[item].internal_name: price for item, price in self.shop_prices.items()},
"figures": {FIGURINES[item].internal_name: price for item, price in self.figurine_prices.items()},
"max_price": self.total_shards,
"required_seals": self.required_seals,
+ "starting_portals": self.starting_portals,
+ "portal_exits": self.portal_mapping,
+ "transitions": [[TRANSITIONS.index("Corrupted Future") if transition.name == "Artificer's Portal"
+ else TRANSITIONS.index(RANDOMIZED_CONNECTIONS[transition.parent_region.name]),
+ TRANSITIONS.index(transition.connected_region.name)]
+ for transition in self.transitions],
**self.options.as_dict("music_box", "death_link", "logic_level"),
}
+ return slot_data
def get_filler_item_name(self) -> str:
if not getattr(self, "_filler_items", None):
@@ -166,15 +308,35 @@ class MessengerWorld(World):
def create_item(self, name: str) -> MessengerItem:
item_id: Optional[int] = self.item_name_to_id.get(name, None)
- override_prog = getattr(self, "multiworld") is not None and \
- name in {"Windmill Shuriken"} and \
- self.options.logic_level > Logic.option_normal
- count = 0
+ return MessengerItem(
+ name,
+ ItemClassification.progression if item_id is None else self.get_item_classification(name),
+ item_id,
+ self.player
+ )
+
+ def get_item_classification(self, name: str) -> ItemClassification:
if "Time Shard " in name:
count = int(name.strip("Time Shard ()"))
count = count if count >= 100 else 0
self.total_shards += count
- return MessengerItem(name, self.player, item_id, override_prog, count)
+ return ItemClassification.progression_skip_balancing if count else ItemClassification.filler
+
+ if name == "Windmill Shuriken" and getattr(self, "multiworld", None) is not None:
+ return ItemClassification.progression if self.options.logic_level else ItemClassification.filler
+
+ if name == "Power Seal":
+ self.created_seals += 1
+ return ItemClassification.progression_skip_balancing \
+ if self.required_seals >= self.created_seals else ItemClassification.filler
+
+ if name in {*NOTES, *PROG_ITEMS, *PHOBEKINS, *PROG_SHOP_ITEMS}:
+ return ItemClassification.progression
+
+ if name in {*USEFUL_ITEMS, *USEFUL_SHOP_ITEMS}:
+ return ItemClassification.useful
+
+ return ItemClassification.filler
def collect(self, state: "CollectionState", item: "Item") -> bool:
change = super().collect(state, item)
@@ -187,3 +349,25 @@ class MessengerWorld(World):
if change and "Time Shard" in item.name:
state.prog_items[self.player]["Shards"] -= int(item.name.strip("Time Shard ()"))
return change
+
+ @classmethod
+ def stage_generate_output(cls, multiworld: MultiWorld, output_directory: str) -> None:
+ # using stage_generate_output because it doesn't increase the logged player count for players without output
+ # only generate output if there's a single player
+ if multiworld.players > 1:
+ return
+ # the messenger client calls into AP with specific args, so check the out path matches what the client sends
+ out_path = output_path(multiworld.get_out_file_name_base(1) + ".aptm")
+ if "The Messenger\\Archipelago\\output" not in out_path:
+ return
+ import orjson
+ data = {
+ "name": multiworld.get_player_name(1),
+ "slot_data": multiworld.worlds[1].fill_slot_data(),
+ "loc_data": {loc.address: {loc.item.name: [loc.item.code, loc.item.flags]}
+ for loc in multiworld.get_filled_locations() if loc.address},
+ }
+
+ output = orjson.dumps(data, option=orjson.OPT_NON_STR_KEYS)
+ with open(out_path, "wb") as f:
+ f.write(output)
diff --git a/worlds/messenger/client_setup.py b/worlds/messenger/client_setup.py
new file mode 100644
index 0000000000..9fd08e52d8
--- /dev/null
+++ b/worlds/messenger/client_setup.py
@@ -0,0 +1,164 @@
+import io
+import logging
+import os.path
+import subprocess
+import urllib.request
+from shutil import which
+from tkinter.messagebox import askyesnocancel
+from typing import Any, Optional
+from zipfile import ZipFile
+from Utils import open_file
+
+import requests
+
+from Utils import is_windows, messagebox, tuplize_version
+
+
+MOD_URL = "https://api.github.com/repos/alwaysintreble/TheMessengerRandomizerModAP/releases/latest"
+
+
+def launch_game(url: Optional[str] = None) -> None:
+ """Check the game installation, then launch it"""
+ def courier_installed() -> bool:
+ """Check if Courier is installed"""
+ return os.path.exists(os.path.join(game_folder, "TheMessenger_Data", "Managed", "Assembly-CSharp.Courier.mm.dll"))
+
+ def mod_installed() -> bool:
+ """Check if the mod is installed"""
+ return os.path.exists(os.path.join(game_folder, "Mods", "TheMessengerRandomizerAP", "courier.toml"))
+
+ def request_data(request_url: str) -> Any:
+ """Fetches json response from given url"""
+ logging.info(f"requesting {request_url}")
+ response = requests.get(request_url)
+ if response.status_code == 200: # success
+ try:
+ data = response.json()
+ except requests.exceptions.JSONDecodeError:
+ raise RuntimeError(f"Unable to fetch data. (status code {response.status_code})")
+ else:
+ raise RuntimeError(f"Unable to fetch data. (status code {response.status_code})")
+ return data
+
+ def install_courier() -> None:
+ """Installs latest version of Courier"""
+ # can't use latest since courier uses pre-release tags
+ courier_url = "https://api.github.com/repos/Brokemia/Courier/releases"
+ latest_download = request_data(courier_url)[0]["assets"][-1]["browser_download_url"]
+
+ with urllib.request.urlopen(latest_download) as download:
+ with ZipFile(io.BytesIO(download.read()), "r") as zf:
+ for member in zf.infolist():
+ zf.extract(member, path=game_folder)
+
+ os.chdir(game_folder)
+ # linux and mac handling
+ if not is_windows:
+ mono_exe = which("mono")
+ if not mono_exe:
+ # steam deck support but doesn't currently work
+ messagebox("Failure", "Failed to install Courier", True)
+ raise RuntimeError("Failed to install Courier")
+ # # download and use mono kickstart
+ # # this allows steam deck support
+ # mono_kick_url = "https://github.com/flibitijibibo/MonoKickstart/archive/refs/heads/master.zip"
+ # target = os.path.join(folder, "monoKickstart")
+ # os.makedirs(target, exist_ok=True)
+ # with urllib.request.urlopen(mono_kick_url) as download:
+ # with ZipFile(io.BytesIO(download.read()), "r") as zf:
+ # for member in zf.infolist():
+ # zf.extract(member, path=target)
+ # installer = subprocess.Popen([os.path.join(target, "precompiled"),
+ # os.path.join(folder, "MiniInstaller.exe")], shell=False)
+ # os.remove(target)
+ else:
+ installer = subprocess.Popen([mono_exe, os.path.join(game_folder, "MiniInstaller.exe")], shell=False)
+ else:
+ installer = subprocess.Popen(os.path.join(game_folder, "MiniInstaller.exe"), shell=False)
+
+ failure = installer.wait()
+ if failure:
+ messagebox("Failure", "Failed to install Courier", True)
+ os.chdir(working_directory)
+ raise RuntimeError("Failed to install Courier")
+ os.chdir(working_directory)
+
+ if courier_installed():
+ messagebox("Success!", "Courier successfully installed!")
+ return
+ messagebox("Failure", "Failed to install Courier", True)
+ raise RuntimeError("Failed to install Courier")
+
+ def install_mod() -> None:
+ """Installs latest version of the mod"""
+ assets = request_data(MOD_URL)["assets"]
+ if len(assets) == 1:
+ release_url = assets[0]["browser_download_url"]
+ else:
+ for asset in assets:
+ if "TheMessengerRandomizerAP" in asset["name"]:
+ release_url = asset["browser_download_url"]
+ break
+ else:
+ messagebox("Failure", "Failed to find latest mod download", True)
+ raise RuntimeError("Failed to install Mod")
+
+ mod_folder = os.path.join(game_folder, "Mods")
+ os.makedirs(mod_folder, exist_ok=True)
+ with urllib.request.urlopen(release_url) as download:
+ with ZipFile(io.BytesIO(download.read()), "r") as zf:
+ for member in zf.infolist():
+ zf.extract(member, path=mod_folder)
+
+ messagebox("Success!", "Latest mod successfully installed!")
+
+ def available_mod_update(latest_version: str) -> bool:
+ """Check if there's an available update"""
+ latest_version = latest_version.lstrip("v")
+ toml_path = os.path.join(game_folder, "Mods", "TheMessengerRandomizerAP", "courier.toml")
+ with open(toml_path, "r") as f:
+ installed_version = f.read().splitlines()[1].strip("version = \"")
+
+ logging.info(f"Installed version: {installed_version}. Latest version: {latest_version}")
+ # one of the alpha builds
+ return "alpha" in latest_version or tuplize_version(latest_version) > tuplize_version(installed_version)
+
+ from . import MessengerWorld
+ game_folder = os.path.dirname(MessengerWorld.settings.game_path)
+ working_directory = os.getcwd()
+ if not courier_installed():
+ should_install = askyesnocancel("Install Courier",
+ "No Courier installation detected. Would you like to install now?")
+ if not should_install:
+ return
+ logging.info("Installing Courier")
+ install_courier()
+ if not mod_installed():
+ should_install = askyesnocancel("Install Mod",
+ "No randomizer mod detected. Would you like to install now?")
+ if not should_install:
+ return
+ logging.info("Installing Mod")
+ install_mod()
+ else:
+ latest = request_data(MOD_URL)["tag_name"]
+ if available_mod_update(latest):
+ should_update = askyesnocancel("Update Mod",
+ f"New mod version detected. Would you like to update to {latest} now?")
+ if should_update:
+ logging.info("Updating mod")
+ install_mod()
+ elif should_update is None:
+ return
+ if not is_windows:
+ if url:
+ open_file(f"steam://rungameid/764790//{url}/")
+ else:
+ open_file("steam://rungameid/764790")
+ else:
+ os.chdir(game_folder)
+ if url:
+ subprocess.Popen([MessengerWorld.settings.game_path, str(url)])
+ else:
+ subprocess.Popen(MessengerWorld.settings.game_path)
+ os.chdir(working_directory)
diff --git a/worlds/messenger/connections.py b/worlds/messenger/connections.py
new file mode 100644
index 0000000000..5e1871e287
--- /dev/null
+++ b/worlds/messenger/connections.py
@@ -0,0 +1,725 @@
+from typing import Dict, List
+
+CONNECTIONS: Dict[str, Dict[str, List[str]]] = {
+ "Ninja Village": {
+ "Right": [
+ "Autumn Hills - Left",
+ "Ninja Village - Nest",
+ ],
+ "Nest": [
+ "Ninja Village - Right",
+ ],
+ },
+ "Autumn Hills": {
+ "Left": [
+ "Ninja Village - Right",
+ "Autumn Hills - Climbing Claws Shop",
+ ],
+ "Right": [
+ "Forlorn Temple - Left",
+ "Autumn Hills - Leaf Golem Shop",
+ ],
+ "Bottom": [
+ "Catacombs - Bottom Left",
+ "Autumn Hills - Double Swing Checkpoint",
+ ],
+ "Portal": [
+ "Tower HQ",
+ "Autumn Hills - Dimension Climb Shop",
+ ],
+ "Climbing Claws Shop": [
+ "Autumn Hills - Left",
+ "Autumn Hills - Hope Path Shop",
+ "Autumn Hills - Lakeside Checkpoint",
+ "Autumn Hills - Key of Hope Checkpoint",
+ ],
+ "Hope Path Shop": [
+ "Autumn Hills - Climbing Claws Shop",
+ "Autumn Hills - Hope Latch Checkpoint",
+ "Autumn Hills - Lakeside Checkpoint",
+ ],
+ "Dimension Climb Shop": [
+ "Autumn Hills - Lakeside Checkpoint",
+ "Autumn Hills - Portal",
+ "Autumn Hills - Double Swing Checkpoint",
+ ],
+ "Leaf Golem Shop": [
+ "Autumn Hills - Spike Ball Swing Checkpoint",
+ "Autumn Hills - Right",
+ ],
+ "Hope Latch Checkpoint": [
+ "Autumn Hills - Hope Path Shop",
+ "Autumn Hills - Key of Hope Checkpoint",
+ ],
+ "Key of Hope Checkpoint": [
+ "Autumn Hills - Hope Latch Checkpoint",
+ "Autumn Hills - Lakeside Checkpoint",
+ ],
+ "Lakeside Checkpoint": [
+ "Autumn Hills - Climbing Claws Shop",
+ "Autumn Hills - Dimension Climb Shop",
+ ],
+ "Double Swing Checkpoint": [
+ "Autumn Hills - Dimension Climb Shop",
+ "Autumn Hills - Spike Ball Swing Checkpoint",
+ "Autumn Hills - Bottom",
+ ],
+ "Spike Ball Swing Checkpoint": [
+ "Autumn Hills - Double Swing Checkpoint",
+ "Autumn Hills - Leaf Golem Shop",
+ ],
+ },
+ "Forlorn Temple": {
+ "Left": [
+ "Autumn Hills - Right",
+ "Forlorn Temple - Outside Shop",
+ ],
+ "Right": [
+ "Bamboo Creek - Top Left",
+ "Forlorn Temple - Demon King Shop",
+ ],
+ "Bottom": [
+ "Catacombs - Top Left",
+ "Forlorn Temple - Outside Shop",
+ ],
+ "Outside Shop": [
+ "Forlorn Temple - Left",
+ "Forlorn Temple - Bottom",
+ "Forlorn Temple - Entrance Shop",
+ ],
+ "Entrance Shop": [
+ "Forlorn Temple - Outside Shop",
+ "Forlorn Temple - Sunny Day Checkpoint",
+ ],
+ "Climb Shop": [
+ "Forlorn Temple - Rocket Maze Checkpoint",
+ "Forlorn Temple - Rocket Sunset Shop",
+ ],
+ "Rocket Sunset Shop": [
+ "Forlorn Temple - Climb Shop",
+ "Forlorn Temple - Descent Shop",
+ ],
+ "Descent Shop": [
+ "Forlorn Temple - Rocket Sunset Shop",
+ "Forlorn Temple - Saw Gauntlet Shop",
+ ],
+ "Saw Gauntlet Shop": [
+ "Forlorn Temple - Demon King Shop",
+ ],
+ "Demon King Shop": [
+ "Forlorn Temple - Saw Gauntlet Shop",
+ "Forlorn Temple - Right",
+ ],
+ "Sunny Day Checkpoint": [
+ "Forlorn Temple - Rocket Maze Checkpoint",
+ ],
+ "Rocket Maze Checkpoint": [
+ "Forlorn Temple - Sunny Day Checkpoint",
+ "Forlorn Temple - Climb Shop",
+ ],
+ },
+ "Catacombs": {
+ "Top Left": [
+ "Forlorn Temple - Bottom",
+ "Catacombs - Triple Spike Crushers Shop",
+ ],
+ "Bottom Left": [
+ "Autumn Hills - Bottom",
+ "Catacombs - Triple Spike Crushers Shop",
+ "Catacombs - Death Trap Checkpoint",
+ ],
+ "Bottom": [
+ "Dark Cave - Right",
+ "Catacombs - Dirty Pond Checkpoint",
+ ],
+ "Right": [
+ "Bamboo Creek - Bottom Left",
+ "Catacombs - Ruxxtin Shop",
+ ],
+ "Triple Spike Crushers Shop": [
+ "Catacombs - Bottom Left",
+ "Catacombs - Death Trap Checkpoint",
+ ],
+ "Ruxxtin Shop": [
+ "Catacombs - Right",
+ "Catacombs - Dirty Pond Checkpoint",
+ ],
+ "Death Trap Checkpoint": [
+ "Catacombs - Triple Spike Crushers Shop",
+ "Catacombs - Bottom Left",
+ "Catacombs - Dirty Pond Checkpoint",
+ ],
+ "Crusher Gauntlet Checkpoint": [
+ "Catacombs - Dirty Pond Checkpoint",
+ ],
+ "Dirty Pond Checkpoint": [
+ "Catacombs - Bottom",
+ "Catacombs - Death Trap Checkpoint",
+ "Catacombs - Crusher Gauntlet Checkpoint",
+ "Catacombs - Ruxxtin Shop",
+ ],
+ },
+ "Bamboo Creek": {
+ "Bottom Left": [
+ "Catacombs - Right",
+ "Bamboo Creek - Spike Crushers Shop",
+ ],
+ "Top Left": [
+ "Bamboo Creek - Abandoned Shop",
+ "Forlorn Temple - Right",
+ ],
+ "Right": [
+ "Howling Grotto - Left",
+ "Bamboo Creek - Time Loop Shop",
+ ],
+ "Spike Crushers Shop": [
+ "Bamboo Creek - Bottom Left",
+ "Bamboo Creek - Abandoned Shop",
+ ],
+ "Abandoned Shop": [
+ "Bamboo Creek - Spike Crushers Shop",
+ "Bamboo Creek - Spike Doors Checkpoint",
+ ],
+ "Time Loop Shop": [
+ "Bamboo Creek - Right",
+ "Bamboo Creek - Spike Doors Checkpoint",
+ ],
+ "Spike Ball Pits Checkpoint": [
+ "Bamboo Creek - Spike Doors Checkpoint",
+ ],
+ "Spike Doors Checkpoint": [
+ "Bamboo Creek - Abandoned Shop",
+ "Bamboo Creek - Spike Ball Pits Checkpoint",
+ "Bamboo Creek - Time Loop Shop",
+ ],
+ },
+ "Howling Grotto": {
+ "Left": [
+ "Bamboo Creek - Right",
+ "Howling Grotto - Wingsuit Shop",
+ ],
+ "Top": [
+ "Howling Grotto - Crushing Pits Shop",
+ "Quillshroom Marsh - Bottom Left",
+ ],
+ "Right": [
+ "Howling Grotto - Emerald Golem Shop",
+ "Quillshroom Marsh - Top Left",
+ ],
+ "Bottom": [
+ "Howling Grotto - Lost Woods Checkpoint",
+ "Sunken Shrine - Left",
+ ],
+ "Portal": [
+ "Howling Grotto - Crushing Pits Shop",
+ "Tower HQ",
+ ],
+ "Wingsuit Shop": [
+ "Howling Grotto - Left",
+ "Howling Grotto - Lost Woods Checkpoint",
+ ],
+ "Crushing Pits Shop": [
+ "Howling Grotto - Lost Woods Checkpoint",
+ "Howling Grotto - Portal",
+ "Howling Grotto - Breezy Crushers Checkpoint",
+ "Howling Grotto - Top",
+ ],
+ "Emerald Golem Shop": [
+ "Howling Grotto - Breezy Crushers Checkpoint",
+ "Howling Grotto - Right",
+ ],
+ "Lost Woods Checkpoint": [
+ "Howling Grotto - Wingsuit Shop",
+ "Howling Grotto - Crushing Pits Shop",
+ "Howling Grotto - Bottom",
+ ],
+ "Breezy Crushers Checkpoint": [
+ "Howling Grotto - Crushing Pits Shop",
+ "Howling Grotto - Emerald Golem Shop",
+ ],
+ },
+ "Quillshroom Marsh": {
+ "Top Left": [
+ "Howling Grotto - Right",
+ "Quillshroom Marsh - Seashell Checkpoint",
+ "Quillshroom Marsh - Spikey Window Shop",
+ ],
+ "Bottom Left": [
+ "Howling Grotto - Top",
+ "Quillshroom Marsh - Sand Trap Shop",
+ "Quillshroom Marsh - Bottom Right",
+ ],
+ "Top Right": [
+ "Quillshroom Marsh - Queen of Quills Shop",
+ "Searing Crags - Left",
+ ],
+ "Bottom Right": [
+ "Quillshroom Marsh - Bottom Left",
+ "Quillshroom Marsh - Sand Trap Shop",
+ "Searing Crags - Bottom",
+ ],
+ "Spikey Window Shop": [
+ "Quillshroom Marsh - Top Left",
+ "Quillshroom Marsh - Seashell Checkpoint",
+ "Quillshroom Marsh - Quicksand Checkpoint",
+ ],
+ "Sand Trap Shop": [
+ "Quillshroom Marsh - Quicksand Checkpoint",
+ "Quillshroom Marsh - Bottom Left",
+ "Quillshroom Marsh - Bottom Right",
+ "Quillshroom Marsh - Spike Wave Checkpoint",
+ ],
+ "Queen of Quills Shop": [
+ "Quillshroom Marsh - Spike Wave Checkpoint",
+ "Quillshroom Marsh - Top Right",
+ ],
+ "Seashell Checkpoint": [
+ "Quillshroom Marsh - Top Left",
+ "Quillshroom Marsh - Spikey Window Shop",
+ ],
+ "Quicksand Checkpoint": [
+ "Quillshroom Marsh - Spikey Window Shop",
+ "Quillshroom Marsh - Sand Trap Shop",
+ ],
+ "Spike Wave Checkpoint": [
+ "Quillshroom Marsh - Sand Trap Shop",
+ "Quillshroom Marsh - Queen of Quills Shop",
+ ],
+ },
+ "Searing Crags": {
+ "Left": [
+ "Quillshroom Marsh - Top Right",
+ "Searing Crags - Rope Dart Shop",
+ ],
+ "Top": [
+ "Searing Crags - Colossuses Shop",
+ "Glacial Peak - Bottom",
+ ],
+ "Bottom": [
+ "Searing Crags - Portal",
+ "Quillshroom Marsh - Bottom Right",
+ ],
+ "Right": [
+ "Searing Crags - Portal",
+ "Underworld - Left",
+ ],
+ "Portal": [
+ "Searing Crags - Bottom",
+ "Searing Crags - Right",
+ "Searing Crags - Before Final Climb Shop",
+ "Searing Crags - Colossuses Shop",
+ "Tower HQ",
+ ],
+ "Rope Dart Shop": [
+ "Searing Crags - Left",
+ "Searing Crags - Triple Ball Spinner Checkpoint",
+ ],
+ "Falling Rocks Shop": [
+ "Searing Crags - Triple Ball Spinner Checkpoint",
+ "Searing Crags - Searing Mega Shard Shop",
+ ],
+ "Searing Mega Shard Shop": [
+ "Searing Crags - Falling Rocks Shop",
+ "Searing Crags - Before Final Climb Shop",
+ "Searing Crags - Key of Strength Shop",
+ ],
+ "Before Final Climb Shop": [
+ "Searing Crags - Raining Rocks Checkpoint",
+ "Searing Crags - Portal",
+ "Searing Crags - Colossuses Shop",
+ ],
+ "Colossuses Shop": [
+ "Searing Crags - Before Final Climb Shop",
+ "Searing Crags - Key of Strength Shop",
+ "Searing Crags - Portal",
+ "Searing Crags - Top",
+ ],
+ "Key of Strength Shop": [
+ "Searing Crags - Searing Mega Shard Shop",
+ ],
+ "Triple Ball Spinner Checkpoint": [
+ "Searing Crags - Rope Dart Shop",
+ "Searing Crags - Falling Rocks Shop",
+ ],
+ "Raining Rocks Checkpoint": [
+ "Searing Crags - Searing Mega Shard Shop",
+ "Searing Crags - Before Final Climb Shop",
+ ],
+ },
+ "Glacial Peak": {
+ "Bottom": [
+ "Searing Crags - Top",
+ "Glacial Peak - Ice Climbers' Shop",
+ ],
+ "Left": [
+ "Elemental Skylands - Air Shmup",
+ "Glacial Peak - Projectile Spike Pit Checkpoint",
+ "Glacial Peak - Glacial Mega Shard Shop",
+ ],
+ "Top": [
+ "Glacial Peak - Tower Entrance Shop",
+ "Cloud Ruins - Left",
+ ],
+ "Portal": [
+ "Glacial Peak - Tower Entrance Shop",
+ "Tower HQ",
+ ],
+ "Ice Climbers' Shop": [
+ "Glacial Peak - Bottom",
+ "Glacial Peak - Projectile Spike Pit Checkpoint",
+ ],
+ "Glacial Mega Shard Shop": [
+ "Glacial Peak - Left",
+ "Glacial Peak - Air Swag Checkpoint",
+ ],
+ "Tower Entrance Shop": [
+ "Glacial Peak - Top",
+ "Glacial Peak - Free Climbing Checkpoint",
+ "Glacial Peak - Portal",
+ ],
+ "Projectile Spike Pit Checkpoint": [
+ "Glacial Peak - Ice Climbers' Shop",
+ "Glacial Peak - Left",
+ ],
+ "Air Swag Checkpoint": [
+ "Glacial Peak - Glacial Mega Shard Shop",
+ "Glacial Peak - Free Climbing Checkpoint",
+ ],
+ "Free Climbing Checkpoint": [
+ "Glacial Peak - Air Swag Checkpoint",
+ "Glacial Peak - Tower Entrance Shop",
+ ],
+ },
+ "Tower of Time": {
+ "Left": [
+ "Tower of Time - Final Chance Shop",
+ ],
+ "Final Chance Shop": [
+ "Tower of Time - First Checkpoint",
+ ],
+ "Arcane Golem Shop": [
+ "Tower of Time - Sixth Checkpoint",
+ ],
+ "First Checkpoint": [
+ "Tower of Time - Second Checkpoint",
+ ],
+ "Second Checkpoint": [
+ "Tower of Time - Third Checkpoint",
+ ],
+ "Third Checkpoint": [
+ "Tower of Time - Fourth Checkpoint",
+ ],
+ "Fourth Checkpoint": [
+ "Tower of Time - Fifth Checkpoint",
+ ],
+ "Fifth Checkpoint": [
+ "Tower of Time - Sixth Checkpoint",
+ ],
+ "Sixth Checkpoint": [
+ "Tower of Time - Arcane Golem Shop",
+ ],
+ },
+ "Cloud Ruins": {
+ "Left": [
+ "Glacial Peak - Top",
+ "Cloud Ruins - Cloud Entrance Shop",
+ ],
+ "Cloud Entrance Shop": [
+ "Cloud Ruins - Left",
+ "Cloud Ruins - Spike Float Checkpoint",
+ ],
+ "Pillar Glide Shop": [
+ "Cloud Ruins - Spike Float Checkpoint",
+ "Cloud Ruins - Ghost Pit Checkpoint",
+ "Cloud Ruins - Crushers' Descent Shop",
+ ],
+ "Crushers' Descent Shop": [
+ "Cloud Ruins - Pillar Glide Shop",
+ "Cloud Ruins - Toothbrush Alley Checkpoint",
+ ],
+ "Seeing Spikes Shop": [
+ "Cloud Ruins - Toothbrush Alley Checkpoint",
+ "Cloud Ruins - Sliding Spikes Shop",
+ ],
+ "Sliding Spikes Shop": [
+ "Cloud Ruins - Seeing Spikes Shop",
+ "Cloud Ruins - Saw Pit Checkpoint",
+ ],
+ "Final Flight Shop": [
+ "Cloud Ruins - Saw Pit Checkpoint",
+ "Cloud Ruins - Manfred's Shop",
+ ],
+ "Manfred's Shop": [
+ "Cloud Ruins - Final Flight Shop",
+ ],
+ "Spike Float Checkpoint": [
+ "Cloud Ruins - Cloud Entrance Shop",
+ "Cloud Ruins - Pillar Glide Shop",
+ ],
+ "Ghost Pit Checkpoint": [
+ "Cloud Ruins - Pillar Glide Shop",
+ ],
+ "Toothbrush Alley Checkpoint": [
+ "Cloud Ruins - Crushers' Descent Shop",
+ "Cloud Ruins - Seeing Spikes Shop",
+ ],
+ "Saw Pit Checkpoint": [
+ "Cloud Ruins - Sliding Spikes Shop",
+ "Cloud Ruins - Final Flight Shop",
+ ],
+ },
+ "Underworld": {
+ "Left": [
+ "Underworld - Left Shop",
+ "Searing Crags - Right",
+ ],
+ "Left Shop": [
+ "Underworld - Left",
+ "Underworld - Hot Dip Checkpoint",
+ ],
+ "Fireball Wave Shop": [
+ "Underworld - Hot Dip Checkpoint",
+ "Underworld - Long Climb Shop",
+ ],
+ "Long Climb Shop": [
+ "Underworld - Fireball Wave Shop",
+ "Underworld - Hot Tub Checkpoint",
+ ],
+ "Barm'athaziel Shop": [
+ "Underworld - Hot Tub Checkpoint",
+ ],
+ "Key of Chaos Shop": [
+ ],
+ "Hot Dip Checkpoint": [
+ "Underworld - Left Shop",
+ "Underworld - Fireball Wave Shop",
+ "Underworld - Lava Run Checkpoint",
+ ],
+ "Hot Tub Checkpoint": [
+ "Underworld - Long Climb Shop",
+ "Underworld - Barm'athaziel Shop",
+ ],
+ "Lava Run Checkpoint": [
+ "Underworld - Hot Dip Checkpoint",
+ "Underworld - Key of Chaos Shop",
+ ],
+ },
+ "Dark Cave": {
+ "Right": [
+ "Catacombs - Bottom",
+ "Dark Cave - Left",
+ ],
+ "Left": [
+ "Riviere Turquoise - Right",
+ ],
+ },
+ "Riviere Turquoise": {
+ "Right": [
+ "Riviere Turquoise - Portal",
+ ],
+ "Portal": [
+ "Riviere Turquoise - Waterfall Shop",
+ "Tower HQ",
+ ],
+ "Waterfall Shop": [
+ "Riviere Turquoise - Portal",
+ "Riviere Turquoise - Flower Flight Checkpoint",
+ ],
+ "Launch of Faith Shop": [
+ "Riviere Turquoise - Flower Flight Checkpoint",
+ "Riviere Turquoise - Log Flume Shop",
+ ],
+ "Log Flume Shop": [
+ "Riviere Turquoise - Log Climb Shop",
+ ],
+ "Log Climb Shop": [
+ "Riviere Turquoise - Restock Shop",
+ ],
+ "Restock Shop": [
+ "Riviere Turquoise - Butterfly Matriarch Shop",
+ ],
+ "Butterfly Matriarch Shop": [
+ ],
+ "Flower Flight Checkpoint": [
+ "Riviere Turquoise - Waterfall Shop",
+ "Riviere Turquoise - Launch of Faith Shop",
+ ],
+ },
+ "Elemental Skylands": {
+ "Air Shmup": [
+ "Elemental Skylands - Air Intro Shop",
+ ],
+ "Air Intro Shop": [
+ "Elemental Skylands - Air Seal Checkpoint",
+ "Elemental Skylands - Air Generator Shop",
+ ],
+ "Air Seal Checkpoint": [
+ "Elemental Skylands - Air Intro Shop",
+ "Elemental Skylands - Air Generator Shop",
+ ],
+ "Air Generator Shop": [
+ "Elemental Skylands - Earth Shmup",
+ ],
+ "Earth Shmup": [
+ "Elemental Skylands - Earth Intro Shop",
+ ],
+ "Earth Intro Shop": [
+ "Elemental Skylands - Earth Generator Shop",
+ ],
+ "Earth Generator Shop": [
+ "Elemental Skylands - Fire Shmup",
+ ],
+ "Fire Shmup": [
+ "Elemental Skylands - Fire Intro Shop",
+ ],
+ "Fire Intro Shop": [
+ "Elemental Skylands - Fire Generator Shop",
+ ],
+ "Fire Generator Shop": [
+ "Elemental Skylands - Water Shmup",
+ ],
+ "Water Shmup": [
+ "Elemental Skylands - Water Intro Shop",
+ ],
+ "Water Intro Shop": [
+ "Elemental Skylands - Water Generator Shop",
+ ],
+ "Water Generator Shop": [
+ "Elemental Skylands - Right",
+ ],
+ "Right": [
+ "Glacial Peak - Left",
+ ],
+ },
+ "Sunken Shrine": {
+ "Left": [
+ "Howling Grotto - Bottom",
+ "Sunken Shrine - Portal",
+ ],
+ "Portal": [
+ "Sunken Shrine - Left",
+ "Sunken Shrine - Above Portal Shop",
+ "Sunken Shrine - Sun Path Shop",
+ "Sunken Shrine - Moon Path Shop",
+ "Tower HQ",
+ ],
+ "Above Portal Shop": [
+ "Sunken Shrine - Portal",
+ "Sunken Shrine - Lifeguard Shop",
+ ],
+ "Lifeguard Shop": [
+ "Sunken Shrine - Above Portal Shop",
+ "Sunken Shrine - Lightfoot Tabi Checkpoint",
+ ],
+ "Sun Path Shop": [
+ "Sunken Shrine - Portal",
+ "Sunken Shrine - Tabi Gauntlet Shop",
+ ],
+ "Tabi Gauntlet Shop": [
+ "Sunken Shrine - Sun Path Shop",
+ "Sunken Shrine - Sun Crest Checkpoint",
+ ],
+ "Moon Path Shop": [
+ "Sunken Shrine - Portal",
+ "Sunken Shrine - Waterfall Paradise Checkpoint",
+ ],
+ "Lightfoot Tabi Checkpoint": [
+ "Sunken Shrine - Portal",
+ ],
+ "Sun Crest Checkpoint": [
+ "Sunken Shrine - Tabi Gauntlet Shop",
+ "Sunken Shrine - Portal",
+ ],
+ "Waterfall Paradise Checkpoint": [
+ "Sunken Shrine - Moon Path Shop",
+ "Sunken Shrine - Moon Crest Checkpoint",
+ ],
+ "Moon Crest Checkpoint": [
+ "Sunken Shrine - Waterfall Paradise Checkpoint",
+ "Sunken Shrine - Portal",
+ ],
+ },
+}
+
+RANDOMIZED_CONNECTIONS: Dict[str, str] = {
+ "Ninja Village - Right": "Autumn Hills - Left",
+ "Autumn Hills - Left": "Ninja Village - Right",
+ "Autumn Hills - Right": "Forlorn Temple - Left",
+ "Autumn Hills - Bottom": "Catacombs - Bottom Left",
+ "Forlorn Temple - Left": "Autumn Hills - Right",
+ "Forlorn Temple - Right": "Bamboo Creek - Top Left",
+ "Forlorn Temple - Bottom": "Catacombs - Top Left",
+ "Catacombs - Top Left": "Forlorn Temple - Bottom",
+ "Catacombs - Bottom Left": "Autumn Hills - Bottom",
+ "Catacombs - Bottom": "Dark Cave - Right",
+ "Catacombs - Right": "Bamboo Creek - Bottom Left",
+ "Bamboo Creek - Bottom Left": "Catacombs - Right",
+ "Bamboo Creek - Right": "Howling Grotto - Left",
+ "Bamboo Creek - Top Left": "Forlorn Temple - Right",
+ "Howling Grotto - Left": "Bamboo Creek - Right",
+ "Howling Grotto - Top": "Quillshroom Marsh - Bottom Left",
+ "Howling Grotto - Right": "Quillshroom Marsh - Top Left",
+ "Howling Grotto - Bottom": "Sunken Shrine - Left",
+ "Quillshroom Marsh - Top Left": "Howling Grotto - Right",
+ "Quillshroom Marsh - Bottom Left": "Howling Grotto - Top",
+ "Quillshroom Marsh - Top Right": "Searing Crags - Left",
+ "Quillshroom Marsh - Bottom Right": "Searing Crags - Bottom",
+ "Searing Crags - Left": "Quillshroom Marsh - Top Right",
+ "Searing Crags - Top": "Glacial Peak - Bottom",
+ "Searing Crags - Bottom": "Quillshroom Marsh - Bottom Right",
+ "Searing Crags - Right": "Underworld - Left",
+ "Glacial Peak - Bottom": "Searing Crags - Top",
+ "Glacial Peak - Top": "Cloud Ruins - Left",
+ "Glacial Peak - Left": "Elemental Skylands - Air Shmup",
+ "Cloud Ruins - Left": "Glacial Peak - Top",
+ "Elemental Skylands - Right": "Glacial Peak - Left",
+ "Tower HQ": "Tower of Time - Left",
+ "Artificer": "Corrupted Future",
+ "Underworld - Left": "Searing Crags - Right",
+ "Dark Cave - Right": "Catacombs - Bottom",
+ "Dark Cave - Left": "Riviere Turquoise - Right",
+ "Sunken Shrine - Left": "Howling Grotto - Bottom",
+}
+
+TRANSITIONS: List[str] = [
+ "Ninja Village - Right",
+ "Autumn Hills - Left",
+ "Autumn Hills - Right",
+ "Autumn Hills - Bottom",
+ "Forlorn Temple - Left",
+ "Forlorn Temple - Bottom",
+ "Forlorn Temple - Right",
+ "Catacombs - Top Left",
+ "Catacombs - Right",
+ "Catacombs - Bottom",
+ "Catacombs - Bottom Left",
+ "Dark Cave - Right",
+ "Dark Cave - Left",
+ "Riviere Turquoise - Right",
+ "Howling Grotto - Left",
+ "Howling Grotto - Right",
+ "Howling Grotto - Top",
+ "Howling Grotto - Bottom",
+ "Sunken Shrine - Left",
+ "Bamboo Creek - Top Left",
+ "Bamboo Creek - Bottom Left",
+ "Bamboo Creek - Right",
+ "Quillshroom Marsh - Top Left",
+ "Quillshroom Marsh - Bottom Left",
+ "Quillshroom Marsh - Top Right",
+ "Quillshroom Marsh - Bottom Right",
+ "Searing Crags - Left",
+ "Searing Crags - Bottom",
+ "Searing Crags - Right",
+ "Searing Crags - Top",
+ "Glacial Peak - Bottom",
+ "Glacial Peak - Top",
+ "Glacial Peak - Left",
+ "Elemental Skylands - Air Shmup",
+ "Elemental Skylands - Right",
+ "Tower HQ",
+ "Tower of Time - Left",
+ "Corrupted Future",
+ "Cloud Ruins - Left",
+ "Underworld - Left",
+]
diff --git a/worlds/messenger/constants.py b/worlds/messenger/constants.py
index f05d276cea..0c4d6a944c 100644
--- a/worlds/messenger/constants.py
+++ b/worlds/messenger/constants.py
@@ -24,6 +24,8 @@ PROG_ITEMS = [
# "Astral Seed",
# "Astral Tea Leaves",
"Money Wrench",
+ "Candle",
+ "Seashell",
]
PHOBEKINS = [
@@ -103,6 +105,52 @@ ALWAYS_LOCATIONS = [
"Searing Crags - Pyro",
"Bamboo Creek - Claustro",
"Cloud Ruins - Acro",
+ # seals
+ "Ninja Village Seal - Tree House",
+ "Autumn Hills Seal - Trip Saws",
+ "Autumn Hills Seal - Double Swing Saws",
+ "Autumn Hills Seal - Spike Ball Swing",
+ "Autumn Hills Seal - Spike Ball Darts",
+ "Catacombs Seal - Triple Spike Crushers",
+ "Catacombs Seal - Crusher Gauntlet",
+ "Catacombs Seal - Dirty Pond",
+ "Bamboo Creek Seal - Spike Crushers and Doors",
+ "Bamboo Creek Seal - Spike Ball Pits",
+ "Bamboo Creek Seal - Spike Crushers and Doors v2",
+ "Howling Grotto Seal - Windy Saws and Balls",
+ "Howling Grotto Seal - Crushing Pits",
+ "Howling Grotto Seal - Breezy Crushers",
+ "Quillshroom Marsh Seal - Spikey Window",
+ "Quillshroom Marsh Seal - Sand Trap",
+ "Quillshroom Marsh Seal - Do the Spike Wave",
+ "Searing Crags Seal - Triple Ball Spinner",
+ "Searing Crags Seal - Raining Rocks",
+ "Searing Crags Seal - Rhythm Rocks",
+ "Glacial Peak Seal - Ice Climbers",
+ "Glacial Peak Seal - Projectile Spike Pit",
+ "Glacial Peak Seal - Glacial Air Swag",
+ "Tower of Time Seal - Time Waster",
+ "Tower of Time Seal - Lantern Climb",
+ "Tower of Time Seal - Arcane Orbs",
+ "Cloud Ruins Seal - Ghost Pit",
+ "Cloud Ruins Seal - Toothbrush Alley",
+ "Cloud Ruins Seal - Saw Pit",
+ "Cloud Ruins Seal - Money Farm Room",
+ "Underworld Seal - Sharp and Windy Climb",
+ "Underworld Seal - Spike Wall",
+ "Underworld Seal - Fireball Wave",
+ "Underworld Seal - Rising Fanta",
+ "Forlorn Temple Seal - Rocket Maze",
+ "Forlorn Temple Seal - Rocket Sunset",
+ "Sunken Shrine Seal - Ultra Lifeguard",
+ "Sunken Shrine Seal - Waterfall Paradise",
+ "Sunken Shrine Seal - Tabi Gauntlet",
+ "Riviere Turquoise Seal - Bounces and Balls",
+ "Riviere Turquoise Seal - Launch of Faith",
+ "Riviere Turquoise Seal - Flower Power",
+ "Elemental Skylands Seal - Air",
+ "Elemental Skylands Seal - Water",
+ "Elemental Skylands Seal - Fire",
]
BOSS_LOCATIONS = [
diff --git a/worlds/messenger/docs/en_The Messenger.md b/worlds/messenger/docs/en_The Messenger.md
index 374753b487..f071ba1c14 100644
--- a/worlds/messenger/docs/en_The Messenger.md
+++ b/worlds/messenger/docs/en_The Messenger.md
@@ -69,8 +69,8 @@ for it. The groups you can use for The Messenger are:
* Sometimes upon teleporting back to HQ, Ninja will run left and enter a different portal than the one entered by the
player. This may also cause a softlock.
* Text entry menus don't accept controller input
-* Opening the shop chest in power seal hunt mode from the tower of time HQ will softlock the game.
-* If you are unable to reset file slots, load into a save slot, let the game save, and close it.
+* In power seal hunt mode, the chest must be opened by entering the shop from a level. Teleporting to HQ and opening the
+ chest will not work.
## What do I do if I have a problem?
diff --git a/worlds/messenger/docs/setup_en.md b/worlds/messenger/docs/setup_en.md
index 9617baf3e0..d986b70f9c 100644
--- a/worlds/messenger/docs/setup_en.md
+++ b/worlds/messenger/docs/setup_en.md
@@ -9,10 +9,20 @@
## Installation
-1. Read the [Game Info Page](/games/The%20Messenger/info/en) for how the game works, caveats and known issues
-2. Download and install Courier Mod Loader using the instructions on the release page
+Read changes to the base game on the [Game Info Page](/games/The%20Messenger/info/en)
+
+### Automated Installation
+
+1. Download and install the latest [Archipelago release](https://github.com/ArchipelagoMW/Archipelago/releases/latest)
+2. Launch the Archipelago Launcher (ArchipelagoLauncher.exe)
+3. Click on "The Messenger"
+4. Follow the prompts
+
+### Manual Installation
+
+1. Download and install Courier Mod Loader using the instructions on the release page
* [Latest release is currently 0.7.1](https://github.com/Brokemia/Courier/releases)
-3. Download and install the randomizer mod
+2. Download and install the randomizer mod
1. Download the latest TheMessengerRandomizerAP.zip from
[The Messenger Randomizer Mod AP releases page](https://github.com/alwaysintreble/TheMessengerRandomizerModAP/releases)
2. Extract the zip file to `TheMessenger/Mods/` of your game's install location
@@ -32,19 +42,17 @@
## Joining a MultiWorld Game
1. Launch the game
-2. Navigate to `Options > Third Party Mod Options`
-3. Select `Reset Randomizer File Slots`
- * This will set up all of your save slots with new randomizer save files. You can have up to 3 randomizer files at a
- time, but must do this step again to start new runs afterward.
-4. Enter connection info using the relevant option buttons
+2. Navigate to `Options > Archipelago Options`
+3. Enter connection info using the relevant option buttons
* **The game is limited to alphanumerical characters, `.`, and `-`.**
* This defaults to `archipelago.gg` and does not need to be manually changed if connecting to a game hosted on the
website.
* If using a name that cannot be entered in the in game menus, there is a config file (APConfig.toml) in the game
directory. When using this, all connection information must be entered in the file.
-5. Select the `Connect to Archipelago` button
-6. Navigate to save file selection
-7. Select a new valid randomizer save
+4. Select the `Connect to Archipelago` button
+5. Navigate to save file selection
+6. Start a new game
+ * If you're already connected, deleting a save will not disconnect you and is completely safe.
## Continuing a MultiWorld Game
@@ -52,6 +60,5 @@ At any point while playing, it is completely safe to quit. Returning to the titl
disconnect you from the server. To reconnect to an in progress MultiWorld, simply load the correct save file for that
MultiWorld.
-If the reconnection fails, the message on screen will state you are disconnected. If this happens, you can return to the
-main menu and connect to the server as in [Joining a Multiworld Game](#joining-a-multiworld-game), then load the correct
-save file.
+If the reconnection fails, the message on screen will state you are disconnected. If this happens, the game will attempt
+to reconnect in the background. An option will also be added to the in game menu to change the port, if necessary.
diff --git a/worlds/messenger/options.py b/worlds/messenger/options.py
index 6984e21547..c56ee70043 100644
--- a/worlds/messenger/options.py
+++ b/worlds/messenger/options.py
@@ -17,29 +17,78 @@ class Logic(Choice):
"""
The level of logic to use when determining what locations in your world are accessible.
- Normal: can require damage boosts, but otherwise approachable for someone who has beaten the game.
- Hard: has leashing, normal clips, time warps and turtle boosting in logic.
- OoB: places everything with the minimum amount of rules possible. Expect to do OoB. Not guaranteed completable.
+ Normal: Can require damage boosts, but otherwise approachable for someone who has beaten the game.
+ Hard: Expects more knowledge and tighter execution. Has leashing, normal clips and much tighter d-boosting in logic.
"""
display_name = "Logic Level"
option_normal = 0
option_hard = 1
- option_oob = 2
+ alias_oob = 1
alias_challenging = 1
-class PowerSeals(DefaultOnToggle):
- """Whether power seal locations should be randomized."""
- display_name = "Shuffle Seals"
-
-
class MegaShards(Toggle):
"""Whether mega shards should be item locations."""
display_name = "Shuffle Mega Time Shards"
+class LimitedMovement(Toggle):
+ """
+ Removes either rope dart or wingsuit from the itempool. Forces logic to at least hard and accessibility to minimal.
+ """
+ display_name = "Limited Movement"
+
+
+class EarlyMed(Toggle):
+ """Guarantees meditation will be found early"""
+ display_name = "Early Meditation"
+
+
+class AvailablePortals(Range):
+ """Number of portals that are available from the start. Autumn Hills, Howling Grotto, and Glacial Peak are always available. If portal outputs are not randomized, Searing Crags will also be available."""
+ display_name = "Available Starting Portals"
+ range_start = 3
+ range_end = 6
+ default = 6
+
+
+class ShufflePortals(Choice):
+ """
+ Whether the portals lead to random places.
+ Entering a portal from its vanilla area will always lead to HQ, and will unlock it if relevant.
+ Supports plando.
+
+ None: Portals will take you where they're supposed to.
+ Shops: Portals can lead to any area except Music Box and Elemental Skylands, with each portal output guaranteed to not overlap with another portal's. Will only put you at a portal or a shop.
+ Checkpoints: Like Shops except checkpoints without shops are also valid drop points.
+ Anywhere: Like Checkpoints except it's possible for multiple portals to output to the same map.
+ """
+ display_name = "Shuffle Portal Outputs"
+ option_none = 0
+ alias_off = 0
+ option_shops = 1
+ option_checkpoints = 2
+ option_anywhere = 3
+
+
+class ShuffleTransitions(Choice):
+ """
+ Whether the transitions between the levels should be randomized.
+ Supports plando.
+
+ None: Level transitions lead where they should.
+ Coupled: Returning through a transition will take you from whence you came.
+ Decoupled: Any level transition can take you to any other level transition.
+ """
+ display_name = "Shuffle Level Transitions"
+ option_none = 0
+ alias_off = 0
+ option_coupled = 1
+ option_decoupled = 2
+
+
class Goal(Choice):
- """Requirement to finish the game. Power Seal Hunt will force power seal locations to be shuffled."""
+ """Requirement to finish the game."""
display_name = "Goal"
option_open_music_box = 0
option_power_seal_hunt = 1
@@ -137,8 +186,12 @@ class MessengerOptions(DeathLinkMixin, PerGameCommonOptions):
accessibility: MessengerAccessibility
start_inventory: StartInventoryPool
logic_level: Logic
- shuffle_seals: PowerSeals
shuffle_shards: MegaShards
+ limited_movement: LimitedMovement
+ early_meditation: EarlyMed
+ available_portals: AvailablePortals
+ shuffle_portals: ShufflePortals
+ # shuffle_transitions: ShuffleTransitions
goal: Goal
music_box: MusicBox
notes_needed: NotesNeeded
diff --git a/worlds/messenger/portals.py b/worlds/messenger/portals.py
new file mode 100644
index 0000000000..64438b0184
--- /dev/null
+++ b/worlds/messenger/portals.py
@@ -0,0 +1,290 @@
+from typing import List, TYPE_CHECKING
+
+from BaseClasses import CollectionState, PlandoOptions
+from .options import ShufflePortals
+from ..generic import PlandoConnection
+
+if TYPE_CHECKING:
+ from . import MessengerWorld
+
+
+PORTALS = [
+ "Autumn Hills",
+ "Riviere Turquoise",
+ "Howling Grotto",
+ "Sunken Shrine",
+ "Searing Crags",
+ "Glacial Peak",
+]
+
+
+REGION_ORDER = [
+ "Autumn Hills",
+ "Forlorn Temple",
+ "Catacombs",
+ "Bamboo Creek",
+ "Howling Grotto",
+ "Quillshroom Marsh",
+ "Searing Crags",
+ "Glacial Peak",
+ "Tower of Time",
+ "Cloud Ruins",
+ "Underworld",
+ "Riviere Turquoise",
+ "Elemental Skylands",
+ "Sunken Shrine",
+]
+
+
+SHOP_POINTS = {
+ "Autumn Hills": [
+ "Climbing Claws",
+ "Hope Path",
+ "Dimension Climb",
+ "Leaf Golem",
+ ],
+ "Forlorn Temple": [
+ "Outside",
+ "Entrance",
+ "Climb",
+ "Rocket Sunset",
+ "Descent",
+ "Saw Gauntlet",
+ "Demon King",
+ ],
+ "Catacombs": [
+ "Triple Spike Crushers",
+ "Ruxxtin",
+ ],
+ "Bamboo Creek": [
+ "Spike Crushers",
+ "Abandoned",
+ "Time Loop",
+ ],
+ "Howling Grotto": [
+ "Wingsuit",
+ "Crushing Pits",
+ "Emerald Golem",
+ ],
+ "Quillshroom Marsh": [
+ "Spikey Window",
+ "Sand Trap",
+ "Queen of Quills",
+ ],
+ "Searing Crags": [
+ "Rope Dart",
+ "Falling Rocks",
+ "Searing Mega Shard",
+ "Before Final Climb",
+ "Colossuses",
+ "Key of Strength",
+ ],
+ "Glacial Peak": [
+ "Ice Climbers'",
+ "Glacial Mega Shard",
+ "Tower Entrance",
+ ],
+ "Tower of Time": [
+ "Final Chance",
+ "Arcane Golem",
+ ],
+ "Cloud Ruins": [
+ "Cloud Entrance",
+ "Pillar Glide",
+ "Crushers' Descent",
+ "Seeing Spikes",
+ "Final Flight",
+ "Manfred's",
+ ],
+ "Underworld": [
+ "Left",
+ "Fireball Wave",
+ "Long Climb",
+ # "Barm'athaziel", # not currently valid
+ "Key of Chaos",
+ ],
+ "Riviere Turquoise": [
+ "Waterfall",
+ "Launch of Faith",
+ "Log Flume",
+ "Log Climb",
+ "Restock",
+ "Butterfly Matriarch",
+ ],
+ "Elemental Skylands": [
+ "Air Intro",
+ "Air Generator",
+ "Earth Intro",
+ "Earth Generator",
+ "Fire Intro",
+ "Fire Generator",
+ "Water Intro",
+ "Water Generator",
+ ],
+ "Sunken Shrine": [
+ "Above Portal",
+ "Lifeguard",
+ "Sun Path",
+ "Tabi Gauntlet",
+ "Moon Path",
+ ]
+}
+
+
+CHECKPOINTS = {
+ "Autumn Hills": [
+ "Hope Latch",
+ "Key of Hope",
+ "Lakeside",
+ "Double Swing",
+ "Spike Ball Swing",
+ ],
+ "Forlorn Temple": [
+ "Sunny Day",
+ "Rocket Maze",
+ ],
+ "Catacombs": [
+ "Death Trap",
+ "Crusher Gauntlet",
+ "Dirty Pond",
+ ],
+ "Bamboo Creek": [
+ "Spike Ball Pits",
+ "Spike Doors",
+ ],
+ "Howling Grotto": [
+ "Lost Woods",
+ "Breezy Crushers",
+ ],
+ "Quillshroom Marsh": [
+ "Seashell",
+ "Quicksand",
+ "Spike Wave",
+ ],
+ "Searing Crags": [
+ "Triple Ball Spinner",
+ "Raining Rocks",
+ ],
+ "Glacial Peak": [
+ "Projectile Spike Pit",
+ "Air Swag",
+ "Free Climbing",
+ ],
+ "Tower of Time": [
+ "First",
+ "Second",
+ "Third",
+ "Fourth",
+ "Fifth",
+ "Sixth",
+ ],
+ "Cloud Ruins": [
+ "Spike Float",
+ "Ghost Pit",
+ "Toothbrush Alley",
+ "Saw Pit",
+ ],
+ "Underworld": [
+ "Hot Dip",
+ "Hot Tub",
+ "Lava Run",
+ ],
+ "Riviere Turquoise": [
+ "Flower Flight",
+ ],
+ "Elemental Skylands": [
+ "Air Seal",
+ ],
+ "Sunken Shrine": [
+ "Lightfoot Tabi",
+ "Sun Crest",
+ "Waterfall Paradise",
+ "Moon Crest",
+ ]
+}
+
+
+def shuffle_portals(world: "MessengerWorld") -> None:
+ def create_mapping(in_portal: str, warp: str) -> None:
+ nonlocal available_portals
+ parent = out_to_parent[warp]
+ exit_string = f"{parent.strip(' ')} - "
+
+ if "Portal" in warp:
+ exit_string += "Portal"
+ world.portal_mapping.append(int(f"{REGION_ORDER.index(parent)}00"))
+ elif warp_point in SHOP_POINTS[parent]:
+ exit_string += f"{warp_point} Shop"
+ world.portal_mapping.append(int(f"{REGION_ORDER.index(parent)}1{SHOP_POINTS[parent].index(warp_point)}"))
+ else:
+ exit_string += f"{warp_point} Checkpoint"
+ world.portal_mapping.append(int(f"{REGION_ORDER.index(parent)}2{CHECKPOINTS[parent].index(warp_point)}"))
+
+ world.spoiler_portal_mapping[in_portal] = exit_string
+ connect_portal(world, in_portal, exit_string)
+
+ available_portals.remove(warp)
+ if shuffle_type < ShufflePortals.option_anywhere:
+ available_portals = [port for port in available_portals if port not in shop_points[parent]]
+
+ def handle_planned_portals(plando_connections: List[PlandoConnection]) -> None:
+ for connection in plando_connections:
+ if connection.entrance not in PORTALS:
+ continue
+ # let it crash here if input is invalid
+ create_mapping(connection.entrance, connection.exit)
+ world.plando_portals.append(connection.entrance)
+
+ shuffle_type = world.options.shuffle_portals
+ shop_points = SHOP_POINTS.copy()
+ for portal in PORTALS:
+ shop_points[portal].append(f"{portal} Portal")
+ if shuffle_type > ShufflePortals.option_shops:
+ shop_points.update(CHECKPOINTS)
+ out_to_parent = {checkpoint: parent for parent, checkpoints in shop_points.items() for checkpoint in checkpoints}
+ available_portals = [val for zone in shop_points.values() for val in zone]
+
+ plando = world.multiworld.plando_connections[world.player]
+ if plando and world.multiworld.plando_options & PlandoOptions.connections:
+ handle_planned_portals(plando)
+ world.multiworld.plando_connections[world.player] = [connection for connection in plando
+ if connection.entrance not in PORTALS]
+ for portal in PORTALS:
+ warp_point = world.random.choice(available_portals)
+ create_mapping(portal, warp_point)
+
+
+def connect_portal(world: "MessengerWorld", portal: str, out_region: str) -> None:
+ entrance = world.multiworld.get_entrance(f"ToTHQ {portal} Portal", world.player)
+ entrance.connect(world.multiworld.get_region(out_region, world.player))
+
+
+def disconnect_portals(world: "MessengerWorld") -> None:
+ for portal in [port for port in PORTALS if port not in world.plando_portals]:
+ entrance = world.multiworld.get_entrance(f"ToTHQ {portal} Portal", world.player)
+ entrance.connected_region.entrances.remove(entrance)
+ entrance.connected_region = None
+ if portal in world.spoiler_portal_mapping:
+ del world.spoiler_portal_mapping[portal]
+ if len(world.portal_mapping) > len(world.spoiler_portal_mapping):
+ world.portal_mapping = world.portal_mapping[:len(world.spoiler_portal_mapping)]
+
+
+def validate_portals(world: "MessengerWorld") -> bool:
+ # if world.options.shuffle_transitions:
+ # return True
+ new_state = CollectionState(world.multiworld)
+ new_state.update_reachable_regions(world.player)
+ reachable_locs = 0
+ for loc in world.multiworld.get_locations(world.player):
+ reachable_locs += loc.can_reach(new_state)
+ if reachable_locs > 5:
+ return True
+ return False
+
+
+def add_closed_portal_reqs(world: "MessengerWorld") -> None:
+ closed_portals = [entrance for entrance in PORTALS if f"{entrance} Portal" not in world.starting_portals]
+ for portal in closed_portals:
+ tower_exit = world.multiworld.get_entrance(f"ToTHQ {portal} Portal", world.player)
+ tower_exit.access_rule = lambda state: state.has(portal, world.player)
diff --git a/worlds/messenger/regions.py b/worlds/messenger/regions.py
index 43de4dd1f6..153f8510f1 100644
--- a/worlds/messenger/regions.py
+++ b/worlds/messenger/regions.py
@@ -1,103 +1,446 @@
-from typing import Dict, List, Set
+from typing import Dict, List
-REGIONS: Dict[str, List[str]] = {
- "Menu": [],
- "Tower HQ": [],
- "The Shop": [],
- "The Craftsman's Corner": [],
- "Tower of Time": [],
- "Ninja Village": ["Ninja Village - Candle", "Ninja Village - Astral Seed"],
- "Autumn Hills": ["Autumn Hills - Climbing Claws", "Autumn Hills - Key of Hope", "Autumn Hills - Leaf Golem"],
- "Forlorn Temple": ["Forlorn Temple - Demon King"],
- "Catacombs": ["Catacombs - Necro", "Catacombs - Ruxxtin's Amulet", "Catacombs - Ruxxtin"],
- "Bamboo Creek": ["Bamboo Creek - Claustro"],
- "Howling Grotto": ["Howling Grotto - Wingsuit", "Howling Grotto - Emerald Golem"],
- "Quillshroom Marsh": ["Quillshroom Marsh - Seashell", "Quillshroom Marsh - Queen of Quills"],
- "Searing Crags": ["Searing Crags - Rope Dart"],
- "Searing Crags Upper": ["Searing Crags - Power Thistle", "Searing Crags - Key of Strength",
- "Searing Crags - Astral Tea Leaves"],
- "Glacial Peak": [],
- "Cloud Ruins": [],
- "Cloud Ruins Right": ["Cloud Ruins - Acro"],
- "Underworld": ["Searing Crags - Pyro", "Underworld - Key of Chaos"],
- "Dark Cave": [],
- "Riviere Turquoise Entrance": [],
- "Riviere Turquoise": ["Riviere Turquoise - Butterfly Matriarch"],
- "Sunken Shrine": ["Sunken Shrine - Lightfoot Tabi", "Sunken Shrine - Sun Crest", "Sunken Shrine - Moon Crest",
- "Sunken Shrine - Key of Love"],
- "Elemental Skylands": ["Elemental Skylands - Key of Symbiosis"],
+
+LOCATIONS: Dict[str, List[str]] = {
+ "Ninja Village - Nest": [
+ "Ninja Village - Candle",
+ "Ninja Village - Astral Seed",
+ "Ninja Village Seal - Tree House",
+ ],
+ "Autumn Hills - Climbing Claws Shop": [
+ "Autumn Hills - Climbing Claws",
+ "Autumn Hills Seal - Trip Saws",
+ ],
+ "Autumn Hills - Key of Hope Checkpoint": [
+ "Autumn Hills - Key of Hope",
+ ],
+ "Autumn Hills - Double Swing Checkpoint": [
+ "Autumn Hills Seal - Double Swing Saws",
+ ],
+ "Autumn Hills - Spike Ball Swing Checkpoint": [
+ "Autumn Hills Seal - Spike Ball Swing",
+ "Autumn Hills Seal - Spike Ball Darts",
+ ],
+ "Autumn Hills - Leaf Golem Shop": [
+ "Autumn Hills - Leaf Golem",
+ ],
+ "Forlorn Temple - Rocket Maze Checkpoint": [
+ "Forlorn Temple Seal - Rocket Maze",
+ ],
+ "Forlorn Temple - Rocket Sunset Shop": [
+ "Forlorn Temple Seal - Rocket Sunset",
+ ],
+ "Forlorn Temple - Demon King Shop": [
+ "Forlorn Temple - Demon King",
+ ],
+ "Catacombs - Top Left": [
+ "Catacombs - Necro",
+ ],
+ "Catacombs - Triple Spike Crushers Shop": [
+ "Catacombs Seal - Triple Spike Crushers",
+ ],
+ "Catacombs - Dirty Pond Checkpoint": [
+ "Catacombs Seal - Crusher Gauntlet",
+ "Catacombs Seal - Dirty Pond",
+ ],
+ "Catacombs - Ruxxtin Shop": [
+ "Catacombs - Ruxxtin's Amulet",
+ "Catacombs - Ruxxtin",
+ ],
+ "Bamboo Creek - Spike Crushers Shop": [
+ "Bamboo Creek Seal - Spike Crushers and Doors",
+ ],
+ "Bamboo Creek - Spike Ball Pits Checkpoint": [
+ "Bamboo Creek Seal - Spike Ball Pits",
+ ],
+ "Bamboo Creek - Time Loop Shop": [
+ "Bamboo Creek Seal - Spike Crushers and Doors v2",
+ "Bamboo Creek - Claustro",
+ ],
+ "Howling Grotto - Wingsuit Shop": [
+ "Howling Grotto - Wingsuit",
+ "Howling Grotto Seal - Windy Saws and Balls",
+ ],
+ "Howling Grotto - Crushing Pits Shop": [
+ "Howling Grotto Seal - Crushing Pits",
+ ],
+ "Howling Grotto - Breezy Crushers Checkpoint": [
+ "Howling Grotto Seal - Breezy Crushers",
+ ],
+ "Howling Grotto - Emerald Golem Shop": [
+ "Howling Grotto - Emerald Golem",
+ ],
+ "Quillshroom Marsh - Seashell Checkpoint": [
+ "Quillshroom Marsh - Seashell",
+ ],
+ "Quillshroom Marsh - Spikey Window Shop": [
+ "Quillshroom Marsh Seal - Spikey Window",
+ ],
+ "Quillshroom Marsh - Sand Trap Shop": [
+ "Quillshroom Marsh Seal - Sand Trap",
+ ],
+ "Quillshroom Marsh - Spike Wave Checkpoint": [
+ "Quillshroom Marsh Seal - Do the Spike Wave",
+ ],
+ "Quillshroom Marsh - Queen of Quills Shop": [
+ "Quillshroom Marsh - Queen of Quills",
+ ],
+ "Searing Crags - Rope Dart Shop": [
+ "Searing Crags - Rope Dart",
+ ],
+ "Searing Crags - Triple Ball Spinner Checkpoint": [
+ "Searing Crags Seal - Triple Ball Spinner",
+ ],
+ "Searing Crags - Raining Rocks Checkpoint": [
+ "Searing Crags Seal - Raining Rocks",
+ ],
+ "Searing Crags - Colossuses Shop": [
+ "Searing Crags Seal - Rhythm Rocks",
+ "Searing Crags - Power Thistle",
+ "Searing Crags - Astral Tea Leaves",
+ ],
+ "Searing Crags - Key of Strength Shop": [
+ "Searing Crags - Key of Strength",
+ ],
+ "Searing Crags - Portal": [
+ "Searing Crags - Pyro",
+ ],
+ "Glacial Peak - Ice Climbers' Shop": [
+ "Glacial Peak Seal - Ice Climbers",
+ ],
+ "Glacial Peak - Projectile Spike Pit Checkpoint": [
+ "Glacial Peak Seal - Projectile Spike Pit",
+ ],
+ "Glacial Peak - Air Swag Checkpoint": [
+ "Glacial Peak Seal - Glacial Air Swag",
+ ],
+ "Tower of Time - First Checkpoint": [
+ "Tower of Time Seal - Time Waster",
+ ],
+ "Tower of Time - Fourth Checkpoint": [
+ "Tower of Time Seal - Lantern Climb",
+ ],
+ "Tower of Time - Fifth Checkpoint": [
+ "Tower of Time Seal - Arcane Orbs",
+ ],
+ "Cloud Ruins - Ghost Pit Checkpoint": [
+ "Cloud Ruins Seal - Ghost Pit",
+ ],
+ "Cloud Ruins - Toothbrush Alley Checkpoint": [
+ "Cloud Ruins Seal - Toothbrush Alley",
+ ],
+ "Cloud Ruins - Saw Pit Checkpoint": [
+ "Cloud Ruins Seal - Saw Pit",
+ ],
+ "Cloud Ruins - Final Flight Shop": [
+ "Cloud Ruins - Acro",
+ ],
+ "Cloud Ruins - Manfred's Shop": [
+ "Cloud Ruins Seal - Money Farm Room",
+ ],
+ "Underworld - Left Shop": [
+ "Underworld Seal - Sharp and Windy Climb",
+ ],
+ "Underworld - Fireball Wave Shop": [
+ "Underworld Seal - Spike Wall",
+ "Underworld Seal - Fireball Wave",
+ ],
+ "Underworld - Hot Tub Checkpoint": [
+ "Underworld Seal - Rising Fanta",
+ ],
+ "Underworld - Key of Chaos Shop": [
+ "Underworld - Key of Chaos",
+ ],
+ "Riviere Turquoise - Waterfall Shop": [
+ "Riviere Turquoise Seal - Bounces and Balls",
+ ],
+ "Riviere Turquoise - Launch of Faith Shop": [
+ "Riviere Turquoise Seal - Launch of Faith",
+ ],
+ "Riviere Turquoise - Restock Shop": [
+ "Riviere Turquoise Seal - Flower Power",
+ ],
+ "Riviere Turquoise - Butterfly Matriarch Shop": [
+ "Riviere Turquoise - Butterfly Matriarch",
+ ],
+ "Sunken Shrine - Lifeguard Shop": [
+ "Sunken Shrine Seal - Ultra Lifeguard",
+ ],
+ "Sunken Shrine - Lightfoot Tabi Checkpoint": [
+ "Sunken Shrine - Lightfoot Tabi",
+ ],
+ "Sunken Shrine - Portal": [
+ "Sunken Shrine - Key of Love",
+ ],
+ "Sunken Shrine - Tabi Gauntlet Shop": [
+ "Sunken Shrine Seal - Tabi Gauntlet",
+ ],
+ "Sunken Shrine - Sun Crest Checkpoint": [
+ "Sunken Shrine - Sun Crest",
+ ],
+ "Sunken Shrine - Waterfall Paradise Checkpoint": [
+ "Sunken Shrine Seal - Waterfall Paradise",
+ ],
+ "Sunken Shrine - Moon Crest Checkpoint": [
+ "Sunken Shrine - Moon Crest",
+ ],
+ "Elemental Skylands - Air Seal Checkpoint": [
+ "Elemental Skylands Seal - Air",
+ ],
+ "Elemental Skylands - Water Intro Shop": [
+ "Elemental Skylands Seal - Water",
+ ],
+ "Elemental Skylands - Fire Intro Shop": [
+ "Elemental Skylands Seal - Fire",
+ ],
+ "Elemental Skylands - Right": [
+ "Elemental Skylands - Key of Symbiosis",
+ ],
"Corrupted Future": ["Corrupted Future - Key of Courage"],
"Music Box": ["Rescue Phantom"],
}
-SEALS: Dict[str, List[str]] = {
- "Ninja Village": ["Ninja Village Seal - Tree House"],
- "Autumn Hills": ["Autumn Hills Seal - Trip Saws", "Autumn Hills Seal - Double Swing Saws",
- "Autumn Hills Seal - Spike Ball Swing", "Autumn Hills Seal - Spike Ball Darts"],
- "Catacombs": ["Catacombs Seal - Triple Spike Crushers", "Catacombs Seal - Crusher Gauntlet",
- "Catacombs Seal - Dirty Pond"],
- "Bamboo Creek": ["Bamboo Creek Seal - Spike Crushers and Doors", "Bamboo Creek Seal - Spike Ball Pits",
- "Bamboo Creek Seal - Spike Crushers and Doors v2"],
- "Howling Grotto": ["Howling Grotto Seal - Windy Saws and Balls", "Howling Grotto Seal - Crushing Pits",
- "Howling Grotto Seal - Breezy Crushers"],
- "Quillshroom Marsh": ["Quillshroom Marsh Seal - Spikey Window", "Quillshroom Marsh Seal - Sand Trap",
- "Quillshroom Marsh Seal - Do the Spike Wave"],
- "Searing Crags": ["Searing Crags Seal - Triple Ball Spinner"],
- "Searing Crags Upper": ["Searing Crags Seal - Raining Rocks", "Searing Crags Seal - Rhythm Rocks"],
- "Glacial Peak": ["Glacial Peak Seal - Ice Climbers", "Glacial Peak Seal - Projectile Spike Pit",
- "Glacial Peak Seal - Glacial Air Swag"],
- "Tower of Time": ["Tower of Time Seal - Time Waster", "Tower of Time Seal - Lantern Climb",
- "Tower of Time Seal - Arcane Orbs"],
- "Cloud Ruins Right": ["Cloud Ruins Seal - Ghost Pit", "Cloud Ruins Seal - Toothbrush Alley",
- "Cloud Ruins Seal - Saw Pit", "Cloud Ruins Seal - Money Farm Room"],
- "Underworld": ["Underworld Seal - Sharp and Windy Climb", "Underworld Seal - Spike Wall",
- "Underworld Seal - Fireball Wave", "Underworld Seal - Rising Fanta"],
- "Forlorn Temple": ["Forlorn Temple Seal - Rocket Maze", "Forlorn Temple Seal - Rocket Sunset"],
- "Sunken Shrine": ["Sunken Shrine Seal - Ultra Lifeguard", "Sunken Shrine Seal - Waterfall Paradise",
- "Sunken Shrine Seal - Tabi Gauntlet"],
- "Riviere Turquoise Entrance": ["Riviere Turquoise Seal - Bounces and Balls"],
- "Riviere Turquoise": ["Riviere Turquoise Seal - Launch of Faith", "Riviere Turquoise Seal - Flower Power"],
- "Elemental Skylands": ["Elemental Skylands Seal - Air", "Elemental Skylands Seal - Water",
- "Elemental Skylands Seal - Fire"]
+
+SUB_REGIONS: Dict[str, List[str]] = {
+ "Ninja Village": [
+ "Right",
+ ],
+ "Autumn Hills": [
+ "Left",
+ "Right",
+ "Bottom",
+ "Portal",
+ "Climbing Claws Shop",
+ "Hope Path Shop",
+ "Dimension Climb Shop",
+ "Leaf Golem Shop",
+ "Hope Path Checkpoint",
+ "Key of Hope Checkpoint",
+ "Lakeside Checkpoint",
+ "Double Swing Checkpoint",
+ "Spike Ball Swing Checkpoint",
+ ],
+ "Forlorn Temple": [
+ "Left",
+ "Right",
+ "Bottom",
+ "Outside Shop",
+ "Entrance Shop",
+ "Climb Shop",
+ "Rocket Sunset Shop",
+ "Descent Shop",
+ "Final Fall Shop",
+ "Demon King Shop",
+ "Sunny Day Checkpoint",
+ "Rocket Maze Checkpoint",
+ ],
+ "Catacombs": [
+ "Top Left",
+ "Bottom Left",
+ "Bottom",
+ "Right",
+ "Triple Spike Crushers Shop",
+ "Ruxxtin Shop",
+ "Death Trap Checkpoint",
+ "Crusher Gauntlet Checkpoint",
+ "Dirty Pond Checkpoint",
+ ],
+ "Bamboo Creek": [
+ "Bottom Left",
+ "Top Left",
+ "Right",
+ "Spike Crushers Shop",
+ "Abandoned Shop",
+ "Time Loop Shop",
+ "Spike Ball Pits Checkpoint",
+ "Spike Doors Checkpoint",
+ ],
+ "Howling Grotto": [
+ "Left",
+ "Top",
+ "Right",
+ "Bottom",
+ "Portal",
+ "Wingsuit Shop",
+ "Crushing Pits Shop",
+ "Emerald Golem Shop",
+ "Lost Woods Checkpoint",
+ "Breezy Crushers Checkpoint",
+ ],
+ "Quillshroom Marsh": [
+ "Top Left",
+ "Bottom Left",
+ "Top Right",
+ "Bottom Right",
+ "Spikey Window Shop",
+ "Sand Trap Shop",
+ "Queen of Quills Shop",
+ "Seashell Checkpoint",
+ "Quicksand Checkpoint",
+ "Spike Wave Checkpoint",
+ ],
+ "Searing Crags": [
+ "Left",
+ "Top",
+ "Bottom",
+ "Right",
+ "Portal",
+ "Rope Dart Shop",
+ "Falling Rocks Shop",
+ "Searing Mega Shard Shop",
+ "Before Final Climb Shop",
+ "Colossuses Shop",
+ "Key of Strength Shop",
+ "Triple Ball Spinner Checkpoint",
+ "Raining Rocks Checkpoint",
+ ],
+ "Glacial Peak": [
+ "Bottom",
+ "Top",
+ "Portal",
+ "Ice Climbers' Shop",
+ "Glacial Mega Shard Shop",
+ "Tower Entrance Shop",
+ "Projectile Spike Pit Checkpoint",
+ "Air Swag Checkpoint",
+ "Free Climbing Checkpoint",
+ ],
+ "Tower of Time": [
+ "Left",
+ "Entrance Shop",
+ "Arcane Golem Shop",
+ "First Checkpoint",
+ "Second Checkpoint",
+ "Third Checkpoint",
+ "Fourth Checkpoint",
+ "Fifth Checkpoint",
+ "Sixth Checkpoint",
+ ],
+ "Cloud Ruins": [
+ "Left",
+ "Entrance Shop",
+ "Pillar Glide Shop",
+ "Crushers' Descent Shop",
+ "Seeing Spikes Shop",
+ "Sliding Spikes Shop",
+ "Final Flight Shop",
+ "Manfred's Shop",
+ "Spike Float Checkpoint",
+ "Ghost Pit Checkpoint",
+ "Toothbrush Alley Checkpoint",
+ "Saw Pit Checkpoint",
+ ],
+ "Underworld": [
+ "Left",
+ "Entrance Shop",
+ "Fireball Wave Shop",
+ "Long Climb Shop",
+ "Barm'athaziel Shop",
+ "Key of Chaos Shop",
+ "Hot Dip Checkpoint",
+ "Hot Tub Checkpoint",
+ "Lava Run Checkpoint",
+ ],
+ "Riviere Turquoise": [
+ "Right",
+ "Portal",
+ "Waterfall Shop",
+ "Launch of Faith Shop",
+ "Log Flume Shop",
+ "Log Climb Shop",
+ "Restock Shop",
+ "Butterfly Matriarch Shop",
+ "Flower Flight Checkpoint",
+ ],
+ "Elemental Skylands": [
+ "Air Shmup",
+ "Air Intro Shop",
+ "Air Seal Checkpoint",
+ "Air Generator Shop",
+ "Earth Shmup",
+ "Earth Intro Shop",
+ "Earth Generator Shop",
+ "Fire Shmup",
+ "Fire Intro Shop",
+ "Fire Generator Shop",
+ "Water Shmup",
+ "Water Intro Shop",
+ "Water Generator Shop",
+ "Right",
+ ],
+ "Sunken Shrine": [
+ "Left",
+ "Portal",
+ "Entrance Shop",
+ "Lifeguard Shop",
+ "Sun Path Shop",
+ "Tabi Gauntlet Shop",
+ "Moon Path Shop",
+ "Ninja Tabi Checkpoint",
+ "Sun Crest Checkpoint",
+ "Waterfall Paradise Checkpoint",
+ "Moon Crest Checkpoint",
+ ],
}
+
+# order is slightly funky here for back compat
MEGA_SHARDS: Dict[str, List[str]] = {
- "Autumn Hills": ["Autumn Hills Mega Shard", "Hidden Entrance Mega Shard"],
- "Catacombs": ["Catacombs Mega Shard"],
- "Bamboo Creek": ["Above Entrance Mega Shard", "Abandoned Mega Shard", "Time Loop Mega Shard"],
- "Howling Grotto": ["Bottom Left Mega Shard", "Near Portal Mega Shard", "Pie in the Sky Mega Shard"],
- "Quillshroom Marsh": ["Quillshroom Marsh Mega Shard"],
- "Searing Crags Upper": ["Searing Crags Mega Shard"],
- "Glacial Peak": ["Glacial Peak Mega Shard"],
- "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"],
- "Forlorn Temple": ["Sunny Day Mega Shard", "Down Under Mega Shard"],
- "Sunken Shrine": ["Mega Shard of the Moon", "Beginner's Mega Shard", "Mega Shard of the Stars", "Mega Shard of the Sun"],
- "Riviere Turquoise Entrance": ["Waterfall Mega Shard"],
- "Riviere Turquoise": ["Quick Restock Mega Shard 1", "Quick Restock Mega Shard 2"],
- "Elemental Skylands": ["Earth Mega Shard", "Water Mega Shard"],
+ "Autumn Hills - Lakeside Checkpoint": ["Autumn Hills Mega Shard"],
+ "Forlorn Temple - Outside Shop": ["Hidden Entrance Mega Shard"],
+ "Catacombs - Top Left": ["Catacombs Mega Shard"],
+ "Bamboo Creek - Spike Crushers Shop": ["Above Entrance Mega Shard"],
+ "Bamboo Creek - Abandoned Shop": ["Abandoned Mega Shard"],
+ "Bamboo Creek - Time Loop Shop": ["Time Loop Mega Shard"],
+ "Howling Grotto - Lost Woods Checkpoint": ["Bottom Left Mega Shard"],
+ "Howling Grotto - Breezy Crushers Checkpoint": ["Near Portal Mega Shard", "Pie in the Sky Mega Shard"],
+ "Quillshroom Marsh - Spikey Window Shop": ["Quillshroom Marsh Mega Shard"],
+ "Searing Crags - Searing Mega Shard Shop": ["Searing Crags Mega Shard"],
+ "Glacial Peak - Glacial Mega Shard Shop": ["Glacial Peak Mega Shard"],
+ "Cloud Ruins - Cloud Entrance Shop": ["Cloud Entrance Mega Shard", "Time Warp Mega Shard"],
+ "Cloud Ruins - Manfred's Shop": ["Money Farm Room Mega Shard 1", "Money Farm Room Mega Shard 2"],
+ "Underworld - Left Shop": ["Under Entrance Mega Shard"],
+ "Underworld - Hot Tub Checkpoint": ["Hot Tub Mega Shard", "Projectile Pit Mega Shard"],
+ "Forlorn Temple - Sunny Day Checkpoint": ["Sunny Day Mega Shard"],
+ "Forlorn Temple - Demon King Shop": ["Down Under Mega Shard"],
+ "Sunken Shrine - Waterfall Paradise Checkpoint": ["Mega Shard of the Moon"],
+ "Sunken Shrine - Portal": ["Beginner's Mega Shard"],
+ "Sunken Shrine - Above Portal Shop": ["Mega Shard of the Stars"],
+ "Sunken Shrine - Sun Crest Checkpoint": ["Mega Shard of the Sun"],
+ "Riviere Turquoise - Waterfall Shop": ["Waterfall Mega Shard"],
+ "Riviere Turquoise - Restock Shop": ["Quick Restock Mega Shard 1", "Quick Restock Mega Shard 2"],
+ "Elemental Skylands - Earth Intro Shop": ["Earth Mega Shard"],
+ "Elemental Skylands - Water Generator Shop": ["Water Mega Shard"],
}
-REGION_CONNECTIONS: Dict[str, Set[str]] = {
- "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",
- "The Craftsman's Corner", "Music Box"},
- "Autumn Hills": {"Ninja Village", "Forlorn Temple", "Catacombs"},
- "Forlorn Temple": {"Catacombs", "Bamboo Creek"},
- "Catacombs": {"Autumn Hills", "Bamboo Creek", "Dark Cave"},
- "Bamboo Creek": {"Catacombs", "Howling Grotto"},
- "Howling Grotto": {"Bamboo Creek", "Quillshroom Marsh", "Sunken Shrine"},
- "Quillshroom Marsh": {"Howling Grotto", "Searing Crags"},
- "Searing Crags": {"Searing Crags Upper", "Quillshroom Marsh", "Underworld"},
- "Searing Crags Upper": {"Searing Crags", "Glacial Peak"},
- "Glacial Peak": {"Searing Crags Upper", "Tower HQ", "Cloud Ruins", "Elemental Skylands"},
- "Cloud Ruins": {"Cloud Ruins Right"},
- "Cloud Ruins Right": {"Underworld"},
- "Dark Cave": {"Catacombs", "Riviere Turquoise Entrance"},
- "Riviere Turquoise Entrance": {"Riviere Turquoise"},
- "Sunken Shrine": {"Howling Grotto"},
+REGION_CONNECTIONS: Dict[str, Dict[str, str]] = {
+ "Menu": {"Tower HQ": "Start Game"},
+ "Tower HQ": {
+ "Autumn Hills - Portal": "ToTHQ Autumn Hills Portal",
+ "Howling Grotto - Portal": "ToTHQ Howling Grotto Portal",
+ "Searing Crags - Portal": "ToTHQ Searing Crags Portal",
+ "Glacial Peak - Portal": "ToTHQ Glacial Peak Portal",
+ "Tower of Time - Left": "Artificer's Challenge",
+ "Riviere Turquoise - Portal": "ToTHQ Riviere Turquoise Portal",
+ "Sunken Shrine - Portal": "ToTHQ Sunken Shrine Portal",
+ "Corrupted Future": "Artificer's Portal",
+ "The Shop": "Home",
+ "Music Box": "Shrink Down",
+ },
+ "The Shop": {
+ "The Craftsman's Corner": "Money Sink",
+ },
}
-"""Vanilla layout mapping with all Tower HQ portals open. from -> to"""
+"""Vanilla layout mapping with all Tower HQ portals open. format is source[exit_region][entrance_name]"""
+
+
+# regions that don't have sub-regions
+LEVELS: List[str] = [
+ "Menu",
+ "Tower HQ",
+ "The Shop",
+ "The Craftsman's Corner",
+ "Corrupted Future",
+ "Music Box",
+]
diff --git a/worlds/messenger/rules.py b/worlds/messenger/rules.py
index b13a453f7f..ff1b75d70f 100644
--- a/worlds/messenger/rules.py
+++ b/worlds/messenger/rules.py
@@ -1,7 +1,7 @@
from typing import Dict, TYPE_CHECKING
from BaseClasses import CollectionState
-from worlds.generic.Rules import add_rule, allow_self_locking_items, CollectionRule
+from worlds.generic.Rules import CollectionRule, add_rule, allow_self_locking_items
from .constants import NOTES, PHOBEKINS
from .options import MessengerAccessibility
@@ -12,6 +12,7 @@ if TYPE_CHECKING:
class MessengerRules:
player: int
world: "MessengerWorld"
+ connection_rules: Dict[str, CollectionRule]
region_rules: Dict[str, CollectionRule]
location_rules: Dict[str, CollectionRule]
maximum_price: int
@@ -27,83 +28,286 @@ class MessengerRules:
self.maximum_price = min(maximum_price, world.total_shards)
self.required_seals = max(1, world.required_seals)
- self.region_rules = {
- "Ninja Village": self.has_wingsuit,
- "Autumn Hills": self.has_wingsuit,
- "Catacombs": self.has_wingsuit,
- "Bamboo Creek": self.has_wingsuit,
- "Searing Crags Upper": self.has_vertical,
- "Cloud Ruins": lambda state: self.has_vertical(state) and state.has("Ruxxtin's Amulet", self.player),
- "Cloud Ruins Right": lambda state: self.has_wingsuit(state) and
- (self.has_dart(state) or self.can_dboost(state)),
- "Underworld": self.has_tabi,
- "Riviere Turquoise": lambda state: self.has_dart(state) or
- (self.has_wingsuit(state) and self.can_destroy_projectiles(state)),
- "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(NOTES, self.player)
- or self.has_enough_seals(state)) and self.has_dart(state),
- "The Craftsman's Corner": lambda state: state.has("Money Wrench", self.player) and self.can_shop(state),
+ # dict of connection names and requirements to traverse the exit
+ self.connection_rules = {
+ # from ToTHQ
+ "Artificer's Portal":
+ lambda state: state.has_all({"Demon King Crown", "Magic Firefly"}, self.player),
+ "Shrink Down":
+ lambda state: state.has_all(NOTES, self.player) or self.has_enough_seals(state),
+ # the shop
+ "Money Sink":
+ lambda state: state.has("Money Wrench", self.player) and self.can_shop(state),
+ # Autumn Hills
+ "Autumn Hills - Portal -> Autumn Hills - Dimension Climb Shop":
+ lambda state: self.has_wingsuit(state) and self.has_dart(state),
+ "Autumn Hills - Dimension Climb Shop -> Autumn Hills - Portal":
+ self.has_vertical,
+ "Autumn Hills - Climbing Claws Shop -> Autumn Hills - Hope Path Shop":
+ self.has_dart,
+ "Autumn Hills - Climbing Claws Shop -> Autumn Hills - Key of Hope Checkpoint":
+ self.false, # hard logic only
+ "Autumn Hills - Hope Path Shop -> Autumn Hills - Hope Latch Checkpoint":
+ self.has_dart,
+ "Autumn Hills - Hope Path Shop -> Autumn Hills - Climbing Claws Shop":
+ lambda state: self.has_dart(state) and self.can_dboost(state),
+ "Autumn Hills - Hope Path Shop -> Autumn Hills - Lakeside Checkpoint":
+ lambda state: self.has_dart(state) and self.can_dboost(state),
+ "Autumn Hills - Hope Latch Checkpoint -> Autumn Hills - Hope Path Shop":
+ self.can_dboost,
+ "Autumn Hills - Hope Latch Checkpoint -> Autumn Hills - Key of Hope Checkpoint":
+ lambda state: self.has_dart(state) and self.has_wingsuit(state),
+ # Forlorn Temple
+ "Forlorn Temple - Outside Shop -> Forlorn Temple - Entrance Shop":
+ lambda state: state.has_all(PHOBEKINS, self.player),
+ "Forlorn Temple - Entrance Shop -> Forlorn Temple - Outside Shop":
+ lambda state: state.has_all(PHOBEKINS, self.player),
+ "Forlorn Temple - Entrance Shop -> Forlorn Temple - Sunny Day Checkpoint":
+ lambda state: self.has_vertical(state) and self.can_dboost(state),
+ "Forlorn Temple - Sunny Day Checkpoint -> Forlorn Temple - Rocket Maze Checkpoint":
+ self.has_vertical,
+ "Forlorn Temple - Rocket Sunset Shop -> Forlorn Temple - Descent Shop":
+ lambda state: self.has_dart(state) and (self.can_dboost(state) or self.has_wingsuit(state)),
+ "Forlorn Temple - Saw Gauntlet Shop -> Forlorn Temple - Demon King Shop":
+ self.has_vertical,
+ "Forlorn Temple - Demon King Shop -> Forlorn Temple - Saw Gauntlet Shop":
+ self.has_vertical,
+ # Howling Grotto
+ "Howling Grotto - Portal -> Howling Grotto - Crushing Pits Shop":
+ self.has_wingsuit,
+ "Howling Grotto - Wingsuit Shop -> Howling Grotto - Left":
+ self.has_wingsuit,
+ "Howling Grotto - Wingsuit Shop -> Howling Grotto - Lost Woods Checkpoint":
+ self.has_wingsuit,
+ "Howling Grotto - Lost Woods Checkpoint -> Howling Grotto - Bottom":
+ lambda state: state.has("Seashell", self.player),
+ "Howling Grotto - Crushing Pits Shop -> Howling Grotto - Portal":
+ lambda state: self.has_wingsuit(state) or self.can_dboost(state),
+ "Howling Grotto - Breezy Crushers Checkpoint -> Howling Grotto - Emerald Golem Shop":
+ self.has_wingsuit,
+ "Howling Grotto - Breezy Crushers Checkpoint -> Howling Grotto - Crushing Pits Shop":
+ lambda state: (self.has_wingsuit(state) or self.can_dboost(
+ state
+ ) or self.can_destroy_projectiles(state))
+ and state.multiworld.get_region(
+ "Howling Grotto - Emerald Golem Shop", self.player
+ ).can_reach(state),
+ "Howling Grotto - Emerald Golem Shop -> Howling Grotto - Right":
+ self.has_wingsuit,
+ # Searing Crags
+ "Searing Crags - Rope Dart Shop -> Searing Crags - Triple Ball Spinner Checkpoint":
+ self.has_vertical,
+ "Searing Crags - Portal -> Searing Crags - Right":
+ self.has_tabi,
+ "Searing Crags - Portal -> Searing Crags - Before Final Climb Shop":
+ self.has_wingsuit,
+ "Searing Crags - Portal -> Searing Crags - Colossuses Shop":
+ self.has_wingsuit,
+ "Searing Crags - Bottom -> Searing Crags - Portal":
+ self.has_wingsuit,
+ "Searing Crags - Right -> Searing Crags - Portal":
+ lambda state: self.has_tabi(state) and self.has_wingsuit(state),
+ "Searing Crags - Colossuses Shop -> Searing Crags - Key of Strength Shop":
+ lambda state: state.has("Power Thistle", self.player)
+ and (self.has_dart(state)
+ or (self.has_wingsuit(state)
+ and self.can_destroy_projectiles(state))),
+ "Searing Crags - Falling Rocks Shop -> Searing Crags - Searing Mega Shard Shop":
+ self.has_dart,
+ "Searing Crags - Searing Mega Shard Shop -> Searing Crags - Before Final Climb Shop":
+ lambda state: self.has_dart(state) or self.can_destroy_projectiles(state),
+ "Searing Crags - Searing Mega Shard Shop -> Searing Crags - Falling Rocks Shop":
+ self.has_dart,
+ "Searing Crags - Searing Mega Shard Shop -> Searing Crags - Key of Strength Shop":
+ self.false,
+ "Searing Crags - Before Final Climb Shop -> Searing Crags - Colossuses Shop":
+ self.has_dart,
+ # Glacial Peak
+ "Glacial Peak - Portal -> Glacial Peak - Tower Entrance Shop":
+ self.has_vertical,
+ "Glacial Peak - Left -> Elemental Skylands - Air Shmup":
+ lambda state: state.has("Magic Firefly", self.player)
+ and state.multiworld.get_location("Quillshroom Marsh - Queen of Quills", self.player)
+ .can_reach(state),
+ "Glacial Peak - Tower Entrance Shop -> Glacial Peak - Top":
+ lambda state: state.has("Ruxxtin's Amulet", self.player),
+ "Glacial Peak - Projectile Spike Pit Checkpoint -> Glacial Peak - Left":
+ lambda state: self.has_dart(state) or (self.can_dboost(state) and self.has_wingsuit(state)),
+ # Tower of Time
+ "Tower of Time - Left -> Tower of Time - Final Chance Shop":
+ self.has_dart,
+ "Tower of Time - Second Checkpoint -> Tower of Time - Third Checkpoint":
+ lambda state: self.has_wingsuit(state) and (self.has_dart(state) or self.can_dboost(state)),
+ "Tower of Time - Third Checkpoint -> Tower of Time - Fourth Checkpoint":
+ lambda state: self.has_wingsuit(state) or self.can_dboost(state),
+ "Tower of Time - Fourth Checkpoint -> Tower of Time - Fifth Checkpoint":
+ lambda state: self.has_wingsuit(state) and self.has_dart(state),
+ "Tower of Time - Fifth Checkpoint -> Tower of Time - Sixth Checkpoint":
+ self.has_wingsuit,
+ # Cloud Ruins
+ "Cloud Ruins - Cloud Entrance Shop -> Cloud Ruins - Spike Float Checkpoint":
+ self.has_wingsuit,
+ "Cloud Ruins - Spike Float Checkpoint -> Cloud Ruins - Cloud Entrance Shop":
+ lambda state: self.has_vertical(state) or self.can_dboost(state),
+ "Cloud Ruins - Spike Float Checkpoint -> Cloud Ruins - Pillar Glide Shop":
+ lambda state: self.has_vertical(state) or self.can_dboost(state),
+ "Cloud Ruins - Pillar Glide Shop -> Cloud Ruins - Spike Float Checkpoint":
+ lambda state: self.has_vertical(state) and self.can_double_dboost(state),
+ "Cloud Ruins - Pillar Glide Shop -> Cloud Ruins - Ghost Pit Checkpoint":
+ lambda state: self.has_dart(state) and self.has_wingsuit(state),
+ "Cloud Ruins - Pillar Glide Shop -> Cloud Ruins - Crushers' Descent Shop":
+ lambda state: self.has_wingsuit(state) and (self.has_dart(state) or self.can_dboost(state)),
+ "Cloud Ruins - Toothbrush Alley Checkpoint -> Cloud Ruins - Seeing Spikes Shop":
+ self.has_vertical,
+ "Cloud Ruins - Seeing Spikes Shop -> Cloud Ruins - Sliding Spikes Shop":
+ self.has_wingsuit,
+ "Cloud Ruins - Sliding Spikes Shop -> Cloud Ruins - Seeing Spikes Shop":
+ self.has_wingsuit,
+ "Cloud Ruins - Sliding Spikes Shop -> Cloud Ruins - Saw Pit Checkpoint":
+ self.has_vertical,
+ "Cloud Ruins - Final Flight Shop -> Cloud Ruins - Manfred's Shop":
+ lambda state: self.has_wingsuit(state) and self.has_dart(state),
+ "Cloud Ruins - Manfred's Shop -> Cloud Ruins - Final Flight Shop":
+ lambda state: self.has_wingsuit(state) and self.can_dboost(state),
+ # Underworld
+ "Underworld - Left -> Underworld - Left Shop":
+ self.has_tabi,
+ "Underworld - Left Shop -> Underworld - Left":
+ self.has_tabi,
+ "Underworld - Hot Dip Checkpoint -> Underworld - Lava Run Checkpoint":
+ self.has_tabi,
+ "Underworld - Fireball Wave Shop -> Underworld - Long Climb Shop":
+ lambda state: self.can_destroy_projectiles(state) or self.has_tabi(state) or self.has_vertical(state),
+ "Underworld - Long Climb Shop -> Underworld - Hot Tub Checkpoint":
+ lambda state: self.has_tabi(state)
+ and (self.can_destroy_projectiles(state)
+ or self.has_wingsuit(state))
+ or (self.has_wingsuit(state)
+ and (self.has_dart(state)
+ or self.can_dboost(state)
+ or self.can_destroy_projectiles(state))),
+ "Underworld - Hot Tub Checkpoint -> Underworld - Long Climb Shop":
+ lambda state: self.has_tabi(state)
+ or self.can_destroy_projectiles(state)
+ or (self.has_dart(state) and self.has_wingsuit(state)),
+ # Dark Cave
+ "Dark Cave - Right -> Dark Cave - Left":
+ lambda state: state.has("Candle", self.player) and self.has_dart(state),
+ # Riviere Turquoise
+ "Riviere Turquoise - Waterfall Shop -> Riviere Turquoise - Flower Flight Checkpoint":
+ lambda state: self.has_dart(state) or (
+ self.has_wingsuit(state) and self.can_destroy_projectiles(state)),
+ "Riviere Turquoise - Launch of Faith Shop -> Riviere Turquoise - Flower Flight Checkpoint":
+ lambda state: self.has_dart(state) and self.can_dboost(state),
+ "Riviere Turquoise - Flower Flight Checkpoint -> Riviere Turquoise - Waterfall Shop":
+ lambda state: False,
+ # Elemental Skylands
+ "Elemental Skylands - Air Intro Shop -> Elemental Skylands - Air Seal Checkpoint":
+ self.has_wingsuit,
+ "Elemental Skylands - Air Intro Shop -> Elemental Skylands - Air Generator Shop":
+ self.has_wingsuit,
+ # Sunken Shrine
+ "Sunken Shrine - Portal -> Sunken Shrine - Sun Path Shop":
+ self.has_tabi,
+ "Sunken Shrine - Portal -> Sunken Shrine - Moon Path Shop":
+ self.has_tabi,
+ "Sunken Shrine - Moon Path Shop -> Sunken Shrine - Waterfall Paradise Checkpoint":
+ self.has_tabi,
+ "Sunken Shrine - Waterfall Paradise Checkpoint -> Sunken Shrine - Moon Path Shop":
+ self.has_tabi,
+ "Sunken Shrine - Tabi Gauntlet Shop -> Sunken Shrine - Sun Path Shop":
+ lambda state: self.can_dboost(state) or self.has_dart(state),
}
self.location_rules = {
# ninja village
- "Ninja Village Seal - Tree House": self.has_dart,
+ "Ninja Village Seal - Tree House":
+ self.has_dart,
+ "Ninja Village - Candle":
+ lambda state: state.multiworld.get_location("Searing Crags - Astral Tea Leaves", self.player).can_reach(
+ state),
# autumn hills
- "Autumn Hills - Key of Hope": self.has_dart,
- "Autumn Hills Seal - Spike Ball Darts": self.is_aerobatic,
+ "Autumn Hills Seal - Spike Ball Darts":
+ self.is_aerobatic,
+ "Autumn Hills Seal - Trip Saws":
+ self.has_wingsuit,
+ # forlorn temple
+ "Forlorn Temple Seal - Rocket Maze":
+ self.has_vertical,
# bamboo creek
- "Bamboo Creek - Claustro": lambda state: self.has_dart(state) or self.can_dboost(state),
+ "Bamboo Creek - Claustro":
+ lambda state: self.has_wingsuit(state) and (self.has_dart(state) or self.can_dboost(state)),
+ "Above Entrance Mega Shard":
+ lambda state: self.has_dart(state) or self.can_dboost(state),
+ "Bamboo Creek Seal - Spike Ball Pits":
+ self.has_wingsuit,
# howling grotto
- "Howling Grotto Seal - Windy Saws and Balls": self.has_wingsuit,
- "Howling Grotto Seal - Crushing Pits": lambda state: self.has_wingsuit(state) and self.has_dart(state),
- "Howling Grotto - Emerald Golem": self.has_wingsuit,
+ "Howling Grotto Seal - Windy Saws and Balls":
+ self.has_wingsuit,
+ "Howling Grotto Seal - Crushing Pits":
+ lambda state: self.has_wingsuit(state) and self.has_dart(state),
+ "Howling Grotto - Emerald Golem":
+ self.has_wingsuit,
# searing crags
- "Searing Crags Seal - Triple Ball Spinner": self.has_vertical,
"Searing Crags - Astral Tea Leaves":
- lambda state: state.can_reach("Ninja Village - Astral Seed", "Location", self.player),
- "Searing Crags - Key of Strength": lambda state: state.has("Power Thistle", self.player)
- and (self.has_dart(state)
- or (self.has_wingsuit(state)
- and self.can_destroy_projectiles(state))),
+ lambda state: state.multiworld.get_location("Ninja Village - Astral Seed", self.player).can_reach(state),
+ "Searing Crags Seal - Triple Ball Spinner":
+ self.can_dboost,
+ "Searing Crags - Pyro":
+ self.has_tabi,
# glacial peak
- "Glacial Peak Seal - Ice Climbers": self.has_dart,
- "Glacial Peak Seal - Projectile Spike Pit": self.can_destroy_projectiles,
- # cloud ruins
- "Cloud Ruins Seal - Ghost Pit": self.has_dart,
+ "Glacial Peak Seal - Ice Climbers":
+ self.has_dart,
+ "Glacial Peak Seal - Projectile Spike Pit":
+ self.can_destroy_projectiles,
# tower of time
- "Tower of Time Seal - Time Waster": self.has_dart,
- "Tower of Time Seal - Lantern Climb": lambda state: self.has_wingsuit(state) and self.has_dart(state),
- "Tower of Time Seal - Arcane Orbs": lambda state: self.has_wingsuit(state) and self.has_dart(state),
+ "Tower of Time Seal - Time Waster":
+ self.has_dart,
+ # cloud ruins
+ "Time Warp Mega Shard":
+ lambda state: self.has_vertical(state) or self.can_dboost(state),
+ "Cloud Ruins Seal - Ghost Pit":
+ self.has_vertical,
+ "Cloud Ruins Seal - Toothbrush Alley":
+ self.has_dart,
+ "Cloud Ruins Seal - Saw Pit":
+ self.has_vertical,
# underworld
- "Underworld Seal - Sharp and Windy Climb": self.has_wingsuit,
- "Underworld Seal - Fireball Wave": self.is_aerobatic,
- "Underworld Seal - Rising Fanta": self.has_dart,
+ "Underworld Seal - Sharp and Windy Climb":
+ self.has_wingsuit,
+ "Underworld Seal - Fireball Wave":
+ self.is_aerobatic,
+ "Underworld Seal - Rising Fanta":
+ self.has_dart,
+ "Hot Tub Mega Shard":
+ lambda state: self.has_tabi(state) or self.has_dart(state),
# sunken shrine
- "Sunken Shrine - Sun Crest": self.has_tabi,
- "Sunken Shrine - Moon Crest": self.has_tabi,
- "Sunken Shrine - Key of Love": lambda state: state.has_all({"Sun Crest", "Moon Crest"}, self.player),
- "Sunken Shrine Seal - Waterfall Paradise": self.has_tabi,
- "Sunken Shrine Seal - Tabi Gauntlet": self.has_tabi,
- "Mega Shard of the Moon": self.has_tabi,
- "Mega Shard of the Sun": self.has_tabi,
+ "Sunken Shrine - Key of Love":
+ lambda state: state.has_all({"Sun Crest", "Moon Crest"}, self.player),
+ "Sunken Shrine Seal - Waterfall Paradise":
+ self.has_tabi,
+ "Sunken Shrine Seal - Tabi Gauntlet":
+ self.has_tabi,
+ "Mega Shard of the Sun":
+ self.has_tabi,
# riviere turquoise
- "Riviere Turquoise Seal - Bounces and Balls": self.can_dboost,
- "Riviere Turquoise Seal - Launch of Faith": lambda state: self.can_dboost(state) or self.has_dart(state),
+ "Riviere Turquoise Seal - Bounces and Balls":
+ self.can_dboost,
+ "Riviere Turquoise Seal - Launch of Faith":
+ lambda state: self.has_vertical(state),
# elemental skylands
- "Elemental Skylands - Key of Symbiosis": self.has_dart,
- "Elemental Skylands Seal - Air": self.has_wingsuit,
- "Elemental Skylands Seal - Water": lambda state: self.has_dart(state) and
- state.has("Currents Master", self.player),
- "Elemental Skylands Seal - Fire": lambda state: self.has_dart(state) and self.can_destroy_projectiles(state),
- "Earth Mega Shard": self.has_dart,
- "Water Mega Shard": self.has_dart,
- # corrupted future
- "Corrupted Future - Key of Courage": lambda state: state.has_all({"Demon King Crown", "Magic Firefly"},
- self.player),
- # tower hq
- "Money Wrench": self.can_shop,
+ "Elemental Skylands - Key of Symbiosis":
+ self.has_dart,
+ "Elemental Skylands Seal - Air":
+ self.has_wingsuit,
+ "Elemental Skylands Seal - Water":
+ lambda state: self.has_dart(state) and state.has("Currents Master", self.player),
+ "Elemental Skylands Seal - Fire":
+ lambda state: self.has_dart(state) and self.can_destroy_projectiles(state) and self.is_aerobatic(state),
+ "Earth Mega Shard":
+ self.has_dart,
+ "Water Mega Shard":
+ self.has_dart,
}
def has_wingsuit(self, state: CollectionState) -> bool:
@@ -128,6 +332,9 @@ class MessengerRules:
return state.has_any({"Path of Resilience", "Meditation"}, self.player) and \
state.has("Second Wind", self.player)
+ def can_double_dboost(self, state: CollectionState) -> bool:
+ return state.has_all({"Path of Resilience", "Meditation", "Second Wind"}, self.player)
+
def is_aerobatic(self, state: CollectionState) -> bool:
return self.has_wingsuit(state) and state.has("Aerobatics Warrior", self.player)
@@ -135,87 +342,147 @@ class MessengerRules:
"""I know this is stupid, but it's easier to read in the dicts."""
return True
+ def false(self, state: CollectionState) -> bool:
+ """It's a bit easier to just always create the connections that are only possible in hard or higher logic."""
+ return False
+
def can_shop(self, state: CollectionState) -> bool:
return state.has("Shards", self.player, self.maximum_price)
def set_messenger_rules(self) -> None:
multiworld = self.world.multiworld
- for region in multiworld.get_regions(self.player):
- if region.name in self.region_rules:
- for entrance in region.entrances:
- entrance.access_rule = self.region_rules[region.name]
- for loc in region.locations:
- if loc.name in self.location_rules:
- loc.access_rule = self.location_rules[loc.name]
+ for entrance_name, rule in self.connection_rules.items():
+ entrance = multiworld.get_entrance(entrance_name, self.player)
+ entrance.access_rule = rule
+ for loc in multiworld.get_locations(self.player):
+ if loc.name in self.location_rules:
+ loc.access_rule = self.location_rules[loc.name]
- multiworld.completion_condition[self.player] = lambda state: state.has("Rescue Phantom", self.player)
- if multiworld.accessibility[self.player]: # not locations accessibility
+ if self.world.options.music_box and not self.world.options.limited_movement:
+ add_rule(multiworld.get_entrance("Shrink Down", self.player), self.has_dart)
+ multiworld.completion_condition[self.player] = lambda state: state.has("Do the Thing!", self.player)
+ if self.world.options.accessibility: # not locations accessibility
set_self_locking_items(self.world, self.player)
class MessengerHardRules(MessengerRules):
- extra_rules: Dict[str, CollectionRule]
-
def __init__(self, world: "MessengerWorld") -> None:
super().__init__(world)
- self.region_rules.update({
- "Ninja Village": self.has_vertical,
- "Autumn Hills": self.has_vertical,
- "Catacombs": self.has_vertical,
- "Bamboo Creek": self.has_vertical,
- "Riviere Turquoise": self.true,
- "Forlorn Temple": lambda state: self.has_vertical(state) and state.has_all(PHOBEKINS, self.player),
- "Searing Crags Upper": lambda state: self.can_destroy_projectiles(state) or self.has_windmill(state)
- or self.has_vertical(state),
- "Glacial Peak": lambda state: self.can_destroy_projectiles(state) or self.has_windmill(state)
- or self.has_vertical(state),
- "Elemental Skylands": lambda state: state.has("Magic Firefly", self.player) or
- self.has_windmill(state) or
- self.has_dart(state),
- })
+ self.connection_rules.update(
+ {
+ # Autumn Hills
+ "Autumn Hills - Portal -> Autumn Hills - Dimension Climb Shop":
+ self.has_dart,
+ "Autumn Hills - Climbing Claws Shop -> Autumn Hills - Key of Hope Checkpoint":
+ self.true, # super easy normal clip - also possible with moderately difficult cloud stepping
+ # Howling Grotto
+ "Howling Grotto - Portal -> Howling Grotto - Crushing Pits Shop":
+ self.true,
+ "Howling Grotto - Lost Woods Checkpoint -> Howling Grotto - Bottom":
+ self.true, # just memorize the pattern :)
+ "Howling Grotto - Crushing Pits Shop -> Howling Grotto - Portal":
+ self.true,
+ "Howling Grotto - Breezy Crushers Checkpoint -> Howling Grotto - Emerald Golem Shop":
+ lambda state: self.has_wingsuit(state) or # there's a very easy normal clip here but it's 16-bit only
+ "Howling Grotto - Breezy Crushers Checkpoint" in self.world.spoiler_portal_mapping.values(),
+ # Searing Crags
+ "Searing Crags - Rope Dart Shop -> Searing Crags - Triple Ball Spinner Checkpoint":
+ lambda state: self.has_vertical(state) or self.can_destroy_projectiles(state),
+ # it's doable without anything but one jump is pretty hard and time warping is no longer reliable
+ "Searing Crags - Falling Rocks Shop -> Searing Crags - Searing Mega Shard Shop":
+ lambda state: self.has_vertical(state) or self.can_destroy_projectiles(state),
+ "Searing Crags - Searing Mega Shard Shop -> Searing Crags - Falling Rocks Shop":
+ lambda state: self.has_dart(state) or
+ (self.can_destroy_projectiles(state) and
+ (self.has_wingsuit(state) or self.can_dboost(state))),
+ "Searing Crags - Searing Mega Shard Shop -> Searing Crags - Key of Strength Shop":
+ lambda state: self.can_leash(state) or self.has_windmill(state),
+ "Searing Crags - Before Final Climb Shop -> Searing Crags - Colossuses Shop":
+ self.true,
+ # Glacial Peak
+ "Glacial Peak - Left -> Elemental Skylands - Air Shmup":
+ lambda state: self.has_windmill(state) or
+ (state.has("Magic Firefly", self.player) and
+ state.multiworld.get_location(
+ "Quillshroom Marsh - Queen of Quills", self.player).can_reach(state)) or
+ (self.has_dart(state) and self.can_dboost(state)),
+ "Glacial Peak - Projectile Spike Pit Checkpoint -> Glacial Peak - Left":
+ lambda state: self.has_vertical(state) or self.has_windmill(state),
+ # Cloud Ruins
+ "Cloud Ruins - Sliding Spikes Shop -> Cloud Ruins - Saw Pit Checkpoint":
+ self.true,
+ # Elemental Skylands
+ "Elemental Skylands - Air Intro Shop -> Elemental Skylands - Air Generator Shop":
+ self.true,
+ # Riviere Turquoise
+ "Riviere Turquoise - Waterfall Shop -> Riviere Turquoise - Flower Flight Checkpoint":
+ self.true,
+ "Riviere Turquoise - Launch of Faith Shop -> Riviere Turquoise - Flower Flight Checkpoint":
+ self.can_dboost,
+ "Riviere Turquoise - Flower Flight Checkpoint -> Riviere Turquoise - Waterfall Shop":
+ self.can_double_dboost,
+ }
+ )
- self.location_rules.update({
- "Howling Grotto Seal - Windy Saws and Balls": self.true,
- "Searing Crags Seal - Triple Ball Spinner": self.true,
- "Searing Crags Seal - Raining Rocks": lambda state: self.has_vertical(state) or self.can_destroy_projectiles(state),
- "Searing Crags Seal - Rhythm Rocks": lambda state: self.has_vertical(state) or self.can_destroy_projectiles(state),
- "Searing Crags - Power Thistle": lambda state: self.has_vertical(state) or self.can_destroy_projectiles(state),
- "Glacial Peak Seal - Ice Climbers": lambda state: self.has_vertical(state) or self.can_dboost(state),
- "Glacial Peak Seal - Projectile Spike Pit": self.true,
- "Glacial Peak Seal - Glacial Air Swag": lambda state: self.has_windmill(state) or self.has_vertical(state),
- "Glacial Peak Mega Shard": lambda state: self.has_windmill(state) or self.has_vertical(state),
- "Cloud Ruins Seal - Ghost Pit": self.true,
- "Bamboo Creek - Claustro": self.has_wingsuit,
- "Tower of Time Seal - Lantern Climb": self.has_wingsuit,
- "Elemental Skylands Seal - Water": lambda state: self.has_dart(state) or self.can_dboost(state)
- or self.has_windmill(state),
- "Elemental Skylands Seal - Fire": lambda state: (self.has_dart(state) or self.can_dboost(state)
- or self.has_windmill(state)) and
- self.can_destroy_projectiles(state),
- "Earth Mega Shard": lambda state: self.has_dart(state) or self.can_dboost(state) or self.has_windmill(state),
- "Water Mega Shard": lambda state: self.has_dart(state) or self.can_dboost(state) or self.has_windmill(state),
- })
-
- 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) or self.has_windmill(state),
- "Underworld Seal - Fireball Wave": self.has_windmill,
- }
+ self.location_rules.update(
+ {
+ "Autumn Hills Seal - Spike Ball Darts":
+ lambda state: self.has_vertical(state) and self.has_windmill(state) or self.is_aerobatic(state),
+ "Bamboo Creek - Claustro":
+ self.has_wingsuit,
+ "Bamboo Creek Seal - Spike Ball Pits":
+ self.true,
+ "Howling Grotto Seal - Windy Saws and Balls":
+ self.true,
+ "Searing Crags Seal - Triple Ball Spinner":
+ self.true,
+ "Glacial Peak Seal - Ice Climbers":
+ lambda state: self.has_vertical(state) or self.can_dboost(state),
+ "Glacial Peak Seal - Projectile Spike Pit":
+ lambda state: self.can_dboost(state) or self.can_destroy_projectiles(state),
+ "Glacial Peak Seal - Glacial Air Swag":
+ lambda state: self.has_windmill(state) or self.has_vertical(state),
+ "Glacial Peak Mega Shard":
+ lambda state: self.has_windmill(state) or self.has_vertical(state),
+ "Cloud Ruins Seal - Ghost Pit":
+ self.true,
+ "Cloud Ruins Seal - Toothbrush Alley":
+ self.true,
+ "Cloud Ruins Seal - Saw Pit":
+ self.true,
+ "Underworld Seal - Fireball Wave":
+ lambda state: self.is_aerobatic(state) or self.has_windmill(state),
+ "Riviere Turquoise Seal - Bounces and Balls":
+ self.true,
+ "Riviere Turquoise Seal - Launch of Faith":
+ lambda state: self.can_dboost(state) or self.has_vertical(state),
+ "Elemental Skylands - Key of Symbiosis":
+ lambda state: self.has_dart(state) or self.can_dboost(state) or self.has_windmill(state),
+ "Elemental Skylands Seal - Water":
+ lambda state: self.has_dart(state) or self.can_dboost(state) or self.has_windmill(state),
+ "Elemental Skylands Seal - Fire":
+ lambda state: (self.has_dart(state) or self.can_dboost(state) or self.has_windmill(state))
+ and self.can_destroy_projectiles(state),
+ "Earth Mega Shard":
+ lambda state: self.has_dart(state) or self.can_dboost(state) or self.has_windmill(state),
+ "Water Mega Shard":
+ lambda state: self.has_dart(state) or self.can_dboost(state) or self.has_windmill(state),
+ }
+ )
def has_windmill(self, state: CollectionState) -> bool:
return state.has("Windmill Shuriken", self.player)
- def set_messenger_rules(self) -> None:
- super().set_messenger_rules()
- for loc, rule in self.extra_rules.items():
- if not self.world.options.shuffle_seals and "Seal" in loc:
- continue
- if not self.world.options.shuffle_shards and "Shard" in loc:
- continue
- add_rule(self.world.multiworld.get_location(loc, self.player), rule, "or")
+ def can_dboost(self, state: CollectionState) -> bool:
+ return state.has("Second Wind", self.player) # who really needs meditation
+
+ def can_destroy_projectiles(self, state: CollectionState) -> bool:
+ return super().can_destroy_projectiles(state) or self.has_windmill(state)
+
+ def can_leash(self, state: CollectionState) -> bool:
+ return self.has_dart(state) and self.can_dboost(state)
class MessengerOOBRules(MessengerRules):
@@ -226,7 +493,9 @@ class MessengerOOBRules(MessengerRules):
self.required_seals = max(1, world.required_seals)
self.region_rules = {
"Elemental Skylands":
- lambda state: state.has_any({"Windmill Shuriken", "Wingsuit", "Rope Dart", "Magic Firefly"}, self.player),
+ lambda state: state.has_any(
+ {"Windmill Shuriken", "Wingsuit", "Rope Dart", "Magic Firefly"}, self.player
+ ),
"Music Box": lambda state: state.has_all(set(NOTES), self.player) or self.has_enough_seals(state),
}
@@ -240,8 +509,10 @@ class MessengerOOBRules(MessengerRules):
lambda state: state.has_all({"Demon King Crown", "Magic Firefly"}, self.player),
"Autumn Hills Seal - Spike Ball Darts": self.has_dart,
"Ninja Village Seal - Tree House": self.has_dart,
- "Underworld Seal - Fireball Wave": lambda state: state.has_any({"Wingsuit", "Windmill Shuriken"},
- self.player),
+ "Underworld Seal - Fireball Wave": lambda state: state.has_any(
+ {"Wingsuit", "Windmill Shuriken"},
+ self.player
+ ),
"Tower of Time Seal - Time Waster": self.has_dart,
}
@@ -251,18 +522,8 @@ class MessengerOOBRules(MessengerRules):
def set_self_locking_items(world: "MessengerWorld", player: int) -> None:
- multiworld = world.multiworld
-
- # do the ones for seal shuffle on and off first
- allow_self_locking_items(multiworld.get_location("Searing Crags - Key of Strength", player), "Power Thistle")
- allow_self_locking_items(multiworld.get_location("Sunken Shrine - Key of Love", player), "Sun Crest", "Moon Crest")
- allow_self_locking_items(multiworld.get_location("Corrupted Future - Key of Courage", player), "Demon King Crown")
-
- # add these locations when seals are shuffled
- if world.options.shuffle_seals:
- allow_self_locking_items(multiworld.get_location("Elemental Skylands Seal - Water", player), "Currents Master")
- # add these locations when seals and shards aren't shuffled
- elif not world.options.shuffle_shards:
- for entrance in multiworld.get_region("Cloud Ruins", player).entrances:
- entrance.access_rule = lambda state: state.has("Wingsuit", player) or state.has("Rope Dart", player)
- allow_self_locking_items(multiworld.get_region("Forlorn Temple", player), *PHOBEKINS)
+ # locations where these placements are always valid
+ allow_self_locking_items(world.get_location("Searing Crags - Key of Strength").parent_region, "Power Thistle")
+ allow_self_locking_items(world.get_location("Sunken Shrine - Key of Love"), "Sun Crest", "Moon Crest")
+ allow_self_locking_items(world.get_location("Corrupted Future - Key of Courage").parent_region, "Demon King Crown")
+ allow_self_locking_items(world.get_location("Elemental Skylands Seal - Water"), "Currents Master")
diff --git a/worlds/messenger/subclasses.py b/worlds/messenger/subclasses.py
index b6a0b80b21..b60aeb179f 100644
--- a/worlds/messenger/subclasses.py
+++ b/worlds/messenger/subclasses.py
@@ -1,36 +1,48 @@
from functools import cached_property
-from typing import Optional, TYPE_CHECKING, cast
+from typing import Optional, TYPE_CHECKING
-from BaseClasses import CollectionState, Item, ItemClassification, Location, Region
-from .constants import NOTES, PHOBEKINS, PROG_ITEMS, USEFUL_ITEMS
-from .regions import MEGA_SHARDS, REGIONS, SEALS
-from .shop import FIGURINES, PROG_SHOP_ITEMS, SHOP_ITEMS, USEFUL_SHOP_ITEMS
+from BaseClasses import CollectionState, Entrance, Item, ItemClassification, Location, Region
+from .regions import LOCATIONS, MEGA_SHARDS
+from .shop import FIGURINES, SHOP_ITEMS
if TYPE_CHECKING:
from . import MessengerWorld
+class MessengerEntrance(Entrance):
+ world: Optional["MessengerWorld"] = None
+
+
class MessengerRegion(Region):
-
- def __init__(self, name: str, world: "MessengerWorld") -> None:
+ parent: str
+ entrance_type = MessengerEntrance
+
+ def __init__(self, name: str, world: "MessengerWorld", parent: Optional[str] = None) -> None:
super().__init__(name, world.player, world.multiworld)
- locations = [loc for loc in REGIONS[self.name]]
- if self.name == "The Shop":
+ self.parent = parent
+ locations = []
+ if name in LOCATIONS:
+ locations = [loc for loc in LOCATIONS[name]]
+ # portal event locations since portals can be opened from their exit regions
+ if name.endswith("Portal"):
+ locations.append(name.replace(" -", ""))
+
+ if name == "The Shop":
shop_locations = {f"The Shop - {shop_loc}": world.location_name_to_id[f"The Shop - {shop_loc}"]
for shop_loc in SHOP_ITEMS}
self.add_locations(shop_locations, MessengerShopLocation)
- elif self.name == "The Craftsman's Corner":
+ elif name == "The Craftsman's Corner":
self.add_locations({figurine: world.location_name_to_id[figurine] for figurine in FIGURINES},
MessengerLocation)
- elif self.name == "Tower HQ":
+ elif name == "Tower HQ":
locations.append("Money Wrench")
- if world.options.shuffle_seals and self.name in SEALS:
- 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]]
+
+ if world.options.shuffle_shards and name in MEGA_SHARDS:
+ locations += MEGA_SHARDS[name]
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)
+
+ self.multiworld.regions.append(self)
class MessengerLocation(Location):
@@ -39,46 +51,36 @@ class MessengerLocation(Location):
def __init__(self, player: int, name: str, loc_id: Optional[int], parent: MessengerRegion) -> None:
super().__init__(player, name, loc_id, parent)
if loc_id is None:
- self.place_locked_item(MessengerItem(name, parent.player, None))
+ if name == "Rescue Phantom":
+ name = "Do the Thing!"
+ self.place_locked_item(MessengerItem(name, ItemClassification.progression, None, parent.player))
class MessengerShopLocation(MessengerLocation):
@cached_property
def cost(self) -> int:
name = self.name.replace("The Shop - ", "") # TODO use `remove_prefix` when 3.8 finally gets dropped
- world = cast("MessengerWorld", self.parent_region.multiworld.worlds[self.player])
+ world = self.parent_region.multiworld.worlds[self.player]
shop_data = SHOP_ITEMS[name]
if shop_data.prerequisite:
prereq_cost = 0
if isinstance(shop_data.prerequisite, set):
for prereq in shop_data.prerequisite:
- prereq_cost +=\
- cast(MessengerShopLocation,
- world.multiworld.get_location(prereq, self.player)).cost
+ loc = world.multiworld.get_location(prereq, self.player)
+ assert isinstance(loc, MessengerShopLocation)
+ prereq_cost += loc.cost
else:
- prereq_cost +=\
- cast(MessengerShopLocation,
- world.multiworld.get_location(shop_data.prerequisite, self.player)).cost
+ loc = world.multiworld.get_location(shop_data.prerequisite, self.player)
+ assert isinstance(loc, MessengerShopLocation)
+ prereq_cost += loc.cost
return world.shop_prices[name] + prereq_cost
return world.shop_prices[name]
def access_rule(self, state: CollectionState) -> bool:
- world = cast("MessengerWorld", state.multiworld.worlds[self.player])
+ world = state.multiworld.worlds[self.player]
can_afford = state.has("Shards", self.player, min(self.cost, world.total_shards))
return can_afford
class MessengerItem(Item):
game = "The Messenger"
-
- def __init__(self, name: str, player: int, item_id: Optional[int] = None, override_progression: bool = False,
- count: int = 0) -> None:
- if count:
- item_class = ItemClassification.progression_skip_balancing
- elif item_id is None or override_progression or name in {*NOTES, *PROG_ITEMS, *PHOBEKINS, *PROG_SHOP_ITEMS}:
- item_class = ItemClassification.progression
- elif name in {*USEFUL_ITEMS, *USEFUL_SHOP_ITEMS}:
- item_class = ItemClassification.useful
- else:
- item_class = ItemClassification.filler
- super().__init__(name, item_class, item_id, player)
diff --git a/worlds/messenger/test/__init__.py b/worlds/messenger/test/__init__.py
index f3fcd4ae2d..83bb248d64 100644
--- a/worlds/messenger/test/__init__.py
+++ b/worlds/messenger/test/__init__.py
@@ -1,4 +1,4 @@
-from test.TestBase import WorldTestBase
+from test.bases import WorldTestBase
from .. import MessengerWorld
diff --git a/worlds/messenger/test/test_access.py b/worlds/messenger/test/test_access.py
index 7a77a9b066..ad2265ffa0 100644
--- a/worlds/messenger/test/test_access.py
+++ b/worlds/messenger/test/test_access.py
@@ -1,3 +1,5 @@
+import typing
+
from . import MessengerTestBase
from ..constants import NOTES, PHOBEKINS
@@ -22,11 +24,27 @@ class AccessTest(MessengerTestBase):
def test_dart(self) -> None:
"""locations that hard require the Rope Dart"""
locations = [
- "Ninja Village Seal - Tree House", "Autumn Hills - Key of Hope", "Howling Grotto Seal - Crushing Pits",
- "Glacial Peak Seal - Ice Climbers", "Tower of Time Seal - Time Waster", "Tower of Time Seal - Lantern Climb",
- "Tower of Time Seal - Arcane Orbs", "Cloud Ruins Seal - Ghost Pit", "Underworld Seal - Rising Fanta",
- "Elemental Skylands - Key of Symbiosis", "Elemental Skylands Seal - Water",
- "Elemental Skylands Seal - Fire", "Earth Mega Shard", "Water Mega Shard", "Rescue Phantom",
+ "Ninja Village Seal - Tree House",
+ "Autumn Hills - Key of Hope",
+ "Forlorn Temple - Demon King",
+ "Down Under Mega Shard",
+ "Howling Grotto Seal - Crushing Pits",
+ "Glacial Peak Seal - Ice Climbers",
+ "Tower of Time Seal - Time Waster",
+ "Tower of Time Seal - Lantern Climb",
+ "Tower of Time Seal - Arcane Orbs",
+ "Cloud Ruins Seal - Ghost Pit",
+ "Cloud Ruins Seal - Money Farm Room",
+ "Cloud Ruins Seal - Toothbrush Alley",
+ "Money Farm Room Mega Shard 1",
+ "Money Farm Room Mega Shard 2",
+ "Underworld Seal - Rising Fanta",
+ "Elemental Skylands - Key of Symbiosis",
+ "Elemental Skylands Seal - Water",
+ "Elemental Skylands Seal - Fire",
+ "Earth Mega Shard",
+ "Water Mega Shard",
+ "Rescue Phantom",
]
items = [["Rope Dart"]]
self.assertAccessDependency(locations, items)
@@ -136,11 +154,37 @@ class AccessTest(MessengerTestBase):
items = [["Demon King Crown"]]
self.assertAccessDependency(locations, items)
+ def test_dboost(self) -> None:
+ """
+ short for damage boosting, d-boosting is a technique in video games where the player intentionally or
+ unintentionally takes damage and uses the several following frames of invincibility to defeat or get past an
+ enemy or obstacle, most commonly used in platformers such as the Super Mario games
+ """
+ locations = [
+ "Riviere Turquoise Seal - Bounces and Balls", "Searing Crags Seal - Triple Ball Spinner",
+ "Forlorn Temple - Demon King", "Forlorn Temple Seal - Rocket Maze", "Forlorn Temple Seal - Rocket Sunset",
+ "Sunny Day Mega Shard", "Down Under Mega Shard",
+ ]
+ items = [["Path of Resilience", "Meditation", "Second Wind"]]
+ self.assertAccessDependency(locations, items)
+
+ def test_currents(self) -> None:
+ """there's one of these but oh man look at it go"""
+ self.assertAccessDependency(["Elemental Skylands Seal - Water"], [["Currents Master"]])
+
+ def test_strike(self) -> None:
+ """strike is pretty cool but it doesn't block much"""
+ locations = [
+ "Glacial Peak Seal - Projectile Spike Pit", "Elemental Skylands Seal - Fire",
+ ]
+ items = [["Strike of the Ninja"]]
+ self.assertAccessDependency(locations, items)
+
def test_goal(self) -> None:
"""Test some different states to verify goal requires the correct items"""
- self.collect_all_but([*NOTES, "Rescue Phantom"])
+ self.collect_all_but([*NOTES, "Do the Thing!"])
self.assertEqual(self.can_reach_location("Rescue Phantom"), False)
- self.collect_all_but(["Key of Love", "Rescue Phantom"])
+ self.collect_all_but(["Key of Love", "Do the Thing!"])
self.assertBeatable(False)
self.collect_by_name(["Key of Love"])
self.assertEqual(self.can_reach_location("Rescue Phantom"), True)
@@ -159,14 +203,15 @@ class ItemsAccessTest(MessengerTestBase):
"Searing Crags - Key of Strength": ["Power Thistle"],
"Sunken Shrine - Key of Love": ["Sun Crest", "Moon Crest"],
"Corrupted Future - Key of Courage": ["Demon King Crown"],
- "Cloud Ruins - Acro": ["Ruxxtin's Amulet"],
- "Forlorn Temple - Demon King": PHOBEKINS
}
- self.multiworld.state = self.multiworld.get_all_state(True)
- self.remove_by_name(location_lock_pairs.values())
+ self.collect_all_but([item for items in location_lock_pairs.values() for item in items])
for loc in location_lock_pairs:
for item_name in location_lock_pairs[loc]:
item = self.get_item_by_name(item_name)
with self.subTest("Fulfills Accessibility", location=loc, item=item_name):
- self.assertTrue(self.multiworld.get_location(loc, self.player).can_fill(self.multiworld.state, item, True))
+ location = self.multiworld.get_location(loc, self.player)
+ self.assertTrue(location.can_fill(self.multiworld.state, item, True))
+ location.item = item
+ self.multiworld.state.update_reachable_regions(self.player)
+ self.assertTrue(self.can_reach_location(loc))
diff --git a/worlds/messenger/test/test_logic.py b/worlds/messenger/test/test_logic.py
index 15df89b920..c13bd5c5a0 100644
--- a/worlds/messenger/test/test_logic.py
+++ b/worlds/messenger/test/test_logic.py
@@ -41,7 +41,7 @@ class HardLogicTest(MessengerTestBase):
# cloud ruins
"Cloud Ruins - Acro", "Cloud Ruins Seal - Ghost Pit",
"Cloud Ruins Seal - Toothbrush Alley", "Cloud Ruins Seal - Saw Pit", "Cloud Ruins Seal - Money Farm Room",
- "Cloud Entrance Mega Shard", "Time Warp Mega Shard", "Money Farm Room Mega Shard 1", "Money Farm Room Mega Shard 2",
+ "Money Farm Room Mega Shard 1", "Money Farm Room Mega Shard 2",
# underworld
"Underworld Seal - Rising Fanta", "Underworld Seal - Sharp and Windy Climb",
# elemental skylands
@@ -80,18 +80,6 @@ class HardLogicTest(MessengerTestBase):
self.collect(item)
self.assertTrue(self.can_reach_location(special_loc))
- def test_glacial(self) -> None:
- """Test Glacial Peak locations."""
- self.assertAccessDependency(["Glacial Peak Seal - Ice Climbers"],
- [["Second Wind", "Meditation"], ["Rope Dart"], ["Wingsuit"]],
- True)
- self.assertAccessDependency(["Glacial Peak Seal - Projectile Spike Pit"],
- [["Strike of the Ninja"], ["Windmill Shuriken"], ["Rope Dart"], ["Wingsuit"]],
- True)
- self.assertAccessDependency(["Glacial Peak Seal - Glacial Air Swag", "Glacial Peak Mega Shard"],
- [["Windmill Shuriken"], ["Wingsuit"], ["Rope Dart"]],
- True)
-
class NoLogicTest(MessengerTestBase):
options = {
diff --git a/worlds/messenger/test/test_notes.py b/worlds/messenger/test/test_notes.py
index 46cec5f3c8..fdb1cef1df 100644
--- a/worlds/messenger/test/test_notes.py
+++ b/worlds/messenger/test/test_notes.py
@@ -2,29 +2,19 @@ from . import MessengerTestBase
from ..constants import NOTES
-class TwoNoteGoalTest(MessengerTestBase):
- options = {
- "notes_needed": 2,
- }
+class PrecollectedNotesTestBase(MessengerTestBase):
+ starting_notes: int = 0
+
+ @property
+ def run_default_tests(self) -> bool:
+ return False
def test_precollected_notes(self) -> None:
- self.assertEqual(self.multiworld.state.count_group("Notes", self.player), 4)
-
-
-class FourNoteGoalTest(MessengerTestBase):
- options = {
- "notes_needed": 4,
- }
-
- def test_precollected_notes(self) -> None:
- self.assertEqual(self.multiworld.state.count_group("Notes", self.player), 2)
-
-
-class DefaultGoalTest(MessengerTestBase):
- def test_precollected_notes(self) -> None:
- self.assertEqual(self.multiworld.state.count_group("Notes", self.player), 0)
+ self.assertEqual(self.multiworld.state.count_group("Notes", self.player), self.starting_notes)
def test_goal(self) -> None:
+ if self.__class__ is not PrecollectedNotesTestBase:
+ return
self.assertBeatable(False)
self.collect_by_name(NOTES)
rope_dart = self.get_item_by_name("Rope Dart")
@@ -33,3 +23,17 @@ class DefaultGoalTest(MessengerTestBase):
self.remove(rope_dart)
self.collect_by_name("Wingsuit")
self.assertBeatable(True)
+
+
+class TwoNoteGoalTest(PrecollectedNotesTestBase):
+ options = {
+ "notes_needed": 2,
+ }
+ starting_notes = 4
+
+
+class FourNoteGoalTest(PrecollectedNotesTestBase):
+ options = {
+ "notes_needed": 4,
+ }
+ starting_notes = 2
diff --git a/worlds/messenger/test/test_options.py b/worlds/messenger/test/test_options.py
new file mode 100644
index 0000000000..ea84af8038
--- /dev/null
+++ b/worlds/messenger/test/test_options.py
@@ -0,0 +1,35 @@
+from BaseClasses import CollectionState
+from Fill import distribute_items_restrictive
+from . import MessengerTestBase
+from .. import MessengerWorld
+from ..options import Logic
+
+
+class LimitedMovementTest(MessengerTestBase):
+ options = {
+ "limited_movement": "true",
+ "shuffle_shards": "true",
+ }
+
+ @property
+ def run_default_tests(self) -> bool:
+ # This test base fails reachability tests. Not sure if the core tests should change to support that
+ return False
+
+ def test_options(self) -> None:
+ """Tests that options were correctly changed."""
+ assert isinstance(self.multiworld.worlds[self.player], MessengerWorld)
+ self.assertEqual(Logic.option_hard, self.world.options.logic_level)
+
+
+class EarlyMeditationTest(MessengerTestBase):
+ options = {
+ "early_meditation": "true",
+ }
+
+ def test_option(self) -> None:
+ """Checks that Meditation gets placed early"""
+ distribute_items_restrictive(self.multiworld)
+ sphere1 = self.multiworld.get_reachable_locations(CollectionState(self.multiworld))
+ items = [loc.item.name for loc in sphere1]
+ self.assertIn("Meditation", items)
diff --git a/worlds/messenger/test/test_portals.py b/worlds/messenger/test/test_portals.py
new file mode 100644
index 0000000000..6ebb183813
--- /dev/null
+++ b/worlds/messenger/test/test_portals.py
@@ -0,0 +1,33 @@
+from BaseClasses import CollectionState
+from . import MessengerTestBase
+from ..portals import PORTALS
+
+
+class PortalTestBase(MessengerTestBase):
+ def test_portal_reqs(self) -> None:
+ """tests the paths to open a portal if only that portal is closed with vanilla connections."""
+ # portal and requirements to reach it if it's the only closed portal
+ portal_requirements = {
+ "Autumn Hills Portal": [["Wingsuit"]], # grotto -> bamboo -> catacombs -> hills
+ "Riviere Turquoise Portal": [["Candle", "Wingsuit", "Rope Dart"]], # hills -> catacombs -> dark cave -> riviere
+ "Howling Grotto Portal": [["Wingsuit"], ["Meditation", "Second Wind"]], # crags -> quillshroom -> grotto
+ "Sunken Shrine Portal": [["Seashell"]], # crags -> quillshroom -> grotto -> shrine
+ "Searing Crags Portal": [["Wingsuit"], ["Rope Dart"]], # grotto -> quillshroom -> crags there's two separate paths
+ "Glacial Peak Portal": [["Wingsuit", "Second Wind", "Meditation"], ["Rope Dart"]], # grotto -> quillshroom -> crags -> peak or crags -> peak
+ }
+
+ for portal in PORTALS:
+ name = f"{portal} Portal"
+ entrance_name = f"ToTHQ {name}"
+ with self.subTest(portal=name, entrance_name=entrance_name):
+ entrance = self.multiworld.get_entrance(entrance_name, self.player)
+ # this emulates the portal being initially closed
+ entrance.access_rule = lambda state: state.has(name, self.player)
+ for grouping in portal_requirements[name]:
+ test_state = CollectionState(self.multiworld)
+ self.assertFalse(entrance.can_reach(test_state), "reachable with nothing")
+ items = self.get_items_by_name(grouping)
+ for item in items:
+ test_state.collect(item)
+ self.assertTrue(entrance.can_reach(test_state), grouping)
+ entrance.access_rule = lambda state: True
diff --git a/worlds/messenger/test/test_shop.py b/worlds/messenger/test/test_shop.py
index ee7e82d6cd..971ff1763b 100644
--- a/worlds/messenger/test/test_shop.py
+++ b/worlds/messenger/test/test_shop.py
@@ -24,25 +24,6 @@ class ShopCostTest(MessengerTestBase):
self.assertTrue(loc in SHOP_ITEMS)
self.assertEqual(len(prices), len(SHOP_ITEMS))
- def test_dboost(self) -> None:
- locations = [
- "Riviere Turquoise Seal - Bounces and Balls",
- "Forlorn Temple - Demon King", "Forlorn Temple Seal - Rocket Maze", "Forlorn Temple Seal - Rocket Sunset",
- "Sunny Day Mega Shard", "Down Under Mega Shard",
- ]
- items = [["Path of Resilience", "Meditation", "Second Wind"]]
- self.assertAccessDependency(locations, items)
-
- def test_currents(self) -> None:
- self.assertAccessDependency(["Elemental Skylands Seal - Water"], [["Currents Master"]])
-
- def test_strike(self) -> None:
- locations = [
- "Glacial Peak Seal - Projectile Spike Pit", "Elemental Skylands Seal - Fire",
- ]
- items = [["Strike of the Ninja"]]
- self.assertAccessDependency(locations, items)
-
class ShopCostMinTest(ShopCostTest):
options = {
diff --git a/worlds/messenger/test/test_shop_chest.py b/worlds/messenger/test/test_shop_chest.py
index f2030c63de..2ac3069726 100644
--- a/worlds/messenger/test/test_shop_chest.py
+++ b/worlds/messenger/test/test_shop_chest.py
@@ -4,19 +4,14 @@ from . import MessengerTestBase
class AllSealsRequired(MessengerTestBase):
options = {
- "shuffle_seals": "false",
"goal": "power_seal_hunt",
}
- def test_seals_shuffled(self) -> None:
- """Shuffle seals should be forced on when shop chest is the goal so test it."""
- self.assertTrue(self.multiworld.shuffle_seals[self.player])
-
def test_chest_access(self) -> None:
"""Defaults to a total of 45 power seals in the pool and required."""
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])
+ self.world.options.total_seals)
locations = ["Rescue Phantom"]
items = [["Power Seal"]]
self.assertAccessDependency(locations, items)
@@ -24,7 +19,7 @@ class AllSealsRequired(MessengerTestBase):
self.assertEqual(self.can_reach_location("Rescue Phantom"), False)
self.assertBeatable(False)
- self.collect_all_but(["Power Seal", "Rescue Phantom"])
+ self.collect_all_but(["Power Seal", "Do the Thing!"])
self.assertEqual(self.can_reach_location("Rescue Phantom"), False)
self.assertBeatable(False)
self.collect_by_name("Power Seal")
@@ -40,7 +35,7 @@ class HalfSealsRequired(MessengerTestBase):
def test_seals_amount(self) -> None:
"""Should have 45 power seals in the item pool and half that required"""
- self.assertEqual(self.multiworld.total_seals[self.player], 45)
+ self.assertEqual(self.world.options.total_seals, 45)
self.assertEqual(self.world.total_seals, 45)
self.assertEqual(self.world.required_seals, 22)
total_seals = [seal for seal in self.multiworld.itempool if seal.name == "Power Seal"]
@@ -59,7 +54,7 @@ class ThirtyThirtySeals(MessengerTestBase):
def test_seals_amount(self) -> None:
"""Should have 30 power seals in the pool and 33 percent of that required."""
- self.assertEqual(self.multiworld.total_seals[self.player], 30)
+ self.assertEqual(self.world.options.total_seals, 30)
self.assertEqual(self.world.total_seals, 30)
self.assertEqual(self.world.required_seals, 10)
total_seals = [seal for seal in self.multiworld.itempool if seal.name == "Power Seal"]
@@ -77,7 +72,7 @@ class MaxSealsNoShards(MessengerTestBase):
def test_seals_amount(self) -> None:
"""Should set total seals to 70 since shards aren't shuffled."""
- self.assertEqual(self.multiworld.total_seals[self.player], 85)
+ self.assertEqual(self.world.options.total_seals, 85)
self.assertEqual(self.world.total_seals, 70)
@@ -90,7 +85,7 @@ class MaxSealsWithShards(MessengerTestBase):
def test_seals_amount(self) -> None:
"""Should have 85 seals in the pool with all required and be a valid seed."""
- self.assertEqual(self.multiworld.total_seals[self.player], 85)
+ self.assertEqual(self.world.options.total_seals, 85)
self.assertEqual(self.world.total_seals, 85)
self.assertEqual(self.world.required_seals, 85)
total_seals = [seal for seal in self.multiworld.itempool if seal.name == "Power Seal"]
diff --git a/worlds/minecraft/docs/en_Minecraft.md b/worlds/minecraft/docs/en_Minecraft.md
index 1ef347983b..c700f59a51 100644
--- a/worlds/minecraft/docs/en_Minecraft.md
+++ b/worlds/minecraft/docs/en_Minecraft.md
@@ -11,9 +11,9 @@ Some recipes are locked from being able to be crafted and shuffled into the item
structures appear in each dimension. Crafting recipes are re-learned when they are received from other players as item
checks, and occasionally when completing your own achievements. See below for which recipes are shuffled.
-## What is considered a location check in minecraft?
+## What is considered a location check in Minecraft?
-Location checks in are completed when the player completes various Minecraft achievements. Opening the advancements menu
+Location checks are completed when the player completes various Minecraft achievements. Opening the advancements menu
in-game by pressing "L" will display outstanding achievements.
## When the player receives an item, what happens?
@@ -24,7 +24,7 @@ inventory directly.
## What is the victory condition?
Victory is achieved when the player kills the Ender Dragon, enters the portal in The End, and completes the credits
-sequence either by skipping it or watching hit play out.
+sequence either by skipping it or watching it play out.
## Which recipes are locked?
@@ -64,12 +64,15 @@ sequence either by skipping it or watching hit play out.
* Diamond Axe
* Progessive Tools
* Tier I
+ * Stone Pickaxe
* Stone Shovel
* Stone Hoe
* Tier II
+ * Iron Pickaxe
* Iron Shovel
* Iron Hoe
* Tier III
+ * Diamond Pickaxe
* Diamond Shovel
* Diamond Hoe
* Netherite Ingot
diff --git a/worlds/pokemon_emerald/CHANGELOG.md b/worlds/pokemon_emerald/CHANGELOG.md
new file mode 100644
index 0000000000..dbc1123b77
--- /dev/null
+++ b/worlds/pokemon_emerald/CHANGELOG.md
@@ -0,0 +1,186 @@
+# 2.0.0
+
+### Features
+- Picking up items for other players will display the actual item name and receiving player in-game instead of
+"ARCHIPELAGO ITEM". (This does have a limit, but you're unlikely to reach it in all but the largest multiworlds.)
+- New goal `legendary_hunt`. Your goal is to catch/defeat some number of legendary encounters. That is, the static
+encounters themselves, whatever species they may be. Legendary species found in the wild don't count.
+ - You can force the goal to require captures with `legendary_hunt_catch`. If you accidentally faint a legendary, you
+ can respawn it by beating the champion.
+ - The number of legendaries needed is controlled by the `legendary_hunt_count` option.
+ - The caves containing Kyogre and Groudon are fixed to one location per seed. You need to go to the weather
+ institute to trigger a permanent weather event at the corresponding locations. Only one weather event can be active
+ at a time.
+ - The move tutor for the move Sleep Talk has been changed to Dig and is unlimited use (for Sealed Chamber).
+ - Relicanth and Wailord are guaranteed to be reachable in the wild (for Sealed Chamber). Interacting with the Sealed
+ Chamber wall will give you dex info for Wailord and Relicanth.
+ - Event legendaries are included for this goal (see below for new ferry behavior and event tickets).
+ - The roamer is included in this count. It will _always_ be Latios no matter what your options are. Otherwise you
+ might not have any way of knowing which species is roaming to be able to track it. In legendary hunt, Latios will
+ never appear as a wild pokemon to make tracking it easier. The television broadcast that creates the roamer will
+ give you dex info for Latios.
+ - You can set which encounters are considered for this goal with the `allowed_legendary_hunt_encounters` option.
+- New option `dexsanity`. Adds pokedex entries as locations.
+ - Added locations contribute either a Poke Ball, Great Ball, or Ultra Ball to the item pool, based on the evolution
+ stage.
+ - Logic uses only wild encounters for now.
+ - Defeating a gym leader awards "seen" info on 1/8th of the pokedex.
+- New option `trainersanity`. Defeating a trainer awards a random item.
+ - Trainers no longer award money upon defeat. Instead they add a sellable item to the item pool.
+ - Missable trainers are prevented from disappearing when this is enabled.
+ - Gym trainers remain active after their leader is defeated.
+ - Does not include trainers in the Trick House.
+- New option `berry_trees`. Adds berry trees as locations.
+ - All soil patches start with a fully grown berry tree that gives one item.
+ - There are 88 berry trees.
+ - Berries cannot be planted in soil with this option enabled.
+ - Soil that doesn't start with a tree on a fresh save contributes a Sitrus Berry to the item pool.
+- New option `death_link`. Forgive me, Figment.
+- Added Artisan Cave locations
+ - Requires Wailmer Pail and the ability to Surf to access.
+- Added Trick House locations. The Trick Master is finally here!
+ - He will make new layouts only if you have the corresponding badge (or beat the game) and have completed the
+ previous layout (all vanilla behavior).
+ - If you neglect to pick up an item in a puzzle before completing it, the Trick Master will give the item to you
+ alongside the prize.
+ - Locations are enabled or disabled with their broader categories (npc gifts, overworld items, etc...)
+- Added daily berry gift locations. There are a half dozen or so NPCs that give you one or two berries per day.
+ - All these locations are considered NPC gifts.
+ - The NPCs have been reworked to give this gift once permanently so they can be added as locations.
+- New option `remote_items`. All randomized items are sent from the server instead of being patched into your game
+(except for start inventory, which remains in the PC)
+ - As a side effect, when you pick up your own item, there will be a gap between the item disappearing from the
+ overworld and your game actually receiving it. It also causes gifts from NPCs which contain your own items to not
+ show up until after their text box closes. It can feel odd, but there should be no danger to it.
+ - If the seed is in race mode, this is forcibly enabled.
+ - Benefits include:
+ - Two players can play the same slot and both receive items that slot picks up for itself (as long as it was
+ randomized)
+ - You receive items you picked up for yourself if you lose progress on your save
+ - Competitive integrity; the patch file no longer has any knowledge of item placement
+- New option `match_trainer_levels`. This is a sort of pseudo level cap for a randomizer context.
+ - When you start a trainer fight, all your pokemon have their levels temporarily set to the highest level in the
+ opponent's party.
+ - During the battle, all earned exp is set to 0 (EVs are still gained during battle as normal). When the outcome of
+ the battle is decided, your pokemon have their levels reset to what they were before the fight and exp is awarded as
+ it would have been without this option. Think of it as holding earned exp in reserve and awarding it at the end
+ instead, even giving it to fainted pokemon if they earned any before fainting.
+ - Exp gain is based on _your_ party's average level to moderate exp over the course of a seed. Wild battles are
+ entirely unchanged by this option.
+- New option `match_trainer_levels_bonus`. A flat bonus to apply to your party's levels when using
+`match_trainer_levels`. In case you want to give yourself a nerf or buff while still approximately matching your
+opponent.
+- New option `force_fully_evolved`. Define a level at which trainers will stop using pokemon that have further evolution
+stages.
+- New option `move_blacklist`. Define a list of moves that should not be given randomly to learnsets or TMs. Move names
+are accurate to Gen 3 except for capitalization.
+- New option `extra_bumpy_slope`. Adds a "bumpy slope" to Route 115 that lets you hop up the ledge with the Acro Bike.
+- New option `modify_118`. Changes Route 118 so that it must be crossed with the Acro Bike, and cannot be crossed by
+surfing.
+- Changed `require_flash` option to a choice between none, only granite cave, only victory road, or both caves.
+- Removed `static_encounters` option.
+- New option `legendary_encounters`. Replaces `static_encounters`, but only concerns legendaries.
+- New option `misc_pokemon`. Replaces `static_encounters`, but only concerns non-legendaries.
+- Removed `fly_without_badge` option. (Don't worry)
+- New option `hm_requirements`. Will eventually be able to give you more control over the badge requirements for all
+HMs. For now, only includes the presets `vanilla` and `fly_without_badge`.
+- Removed `allow_wild_legendaries`, `allow_starter_legendaries`, and `allow_trainer_legendaries` options.
+- New options `wild_encounter_blacklist`, `starter_blacklist`, and `trainer_party_blacklist`.
+ - These take lists of species and prevent them from randomizing into the corresponding categories
+ - If adhering to your blacklist would make it impossible to choose a random species, your blacklist is ignored in
+ that case
+ - All three include a shorthand for excluding legendaries
+- Removed `enable_ferry` option.
+ - The ferry is now always present.
+ - The S.S. Ticket item/location is now part of `key_items`.
+- Added event tickets and islands.
+ - All event tickets are given to the player by Norman after defeating the Champion alongside the S.S. Ticket.
+ - As in vanilla, these tickets are only usable from Lilycove. Not Slateport or the Battle Frontier.
+- New option `event_tickets`. Randomizes the above-mentioned tickets into the item pool.
+- New option `enable_wonder_trading`. You can participate in Wonder Trading by interacting with the center receptionist
+on the second floor of Pokemon Centers.
+ - Why is this an option instead of just being enabled? You might want to disable wonder trading in a meta yaml to
+ make sure certain rules can't be broken. Or you may want to turn it off for yourself to definitively prevent being
+ asked for help if you prefer to keep certain walls up between your game and others. Trades _do_ include items and
+ known moves, which means there is potential for an extra level of cooperation and even ways to go out of logic. But
+ that's not a boundary everyone wants broken down all the time. Please be respectful of someone's choice to not
+ participate if that's their preference.
+ - A lot of time was spent trying to make this all work without having to touch your client. Hopefully it goes
+ smoothly, but there's room for jank. Anything you decide to give to her you should consider gone forever, whether
+ because it was traded away or because something "went wrong in transit" and the pokemon's data got lost after being
+ removed from the server.
+ - Wonder Trading is _not_ resistant to save scumming in either direction. You _could_ abuse it to dupe pokemon,
+ because there's not realistically a way for me to prevent it, but I'd urge you to stick to the spirit of the design
+ unless everyone involved doesn't mind.
+ - The wonder trades you receive are stored in your save data even before you pick them up, so if you save after the
+ client tells you that you received a wonder trade, it's safe. You don't need to retrieve it from a poke center for
+ it to persist. However, if you reset your game to a point in time before your client popped the "Wonder trade
+ received" message, that pokemon is lost forever.
+- New `easter_egg` passphrase system.
+ - All valid easter egg passphrases will be a phrase that it's possible to submit as a trendy phrase in Dewford Town.
+ Changing the trendy phrase does ***not*** trigger easter eggs. Only the phrase you put in your YAML can trigger an
+ easter egg.
+ - There may be other ways to learn more information.
+ - Phrases are case insensitive. Here are a couple examples of possible phrases: `"GET FOE"`,
+ `"HERE GOES GRANDMOTHER"`, `"late eh?"` (None of those do anything, but I'd love to hear what you think they would.)
+- Added three new easter egg effects.
+- Changed the original easter egg phrase to use the new system.
+- Renamed `tm_moves` to `tm_tutor_moves`. Move tutors are also affected by this option (except the new Dig tutor).
+- Renamed `tm_compatibility` to `tm_tutor_compatibility`. Move tutors are also affected by this option.
+- Changed `tm_tutor_compatibility` to be a percent chance instead of a choice. Use `-1` for vanilla.
+- Changed `hm_compatibility` to be a percent chance instead of a choice. Use `-1` for vanilla.
+- New option `music`. Shuffles all looping music. Includes FRLG tracks and possibly some unused stuff.
+- New option `fanfares`. Shuffles all fanfares. Includes FRLG tracks. When this is enabled, pressing B will interrupt
+most fanfares.
+- New option `purge_spinners`. Trainers that change which direction they face will do so predictably, and will no longer
+turn to face you when you run.
+- New option `normalize_encounter_rates`. Sets every encounter slot to (almost) equal probability. Does NOT make every
+species equally likely to appear, but makes rare encounters less rare.
+- Added `Trick House` location group.
+- Removed `Postgame Locations` location group.
+
+### QoL
+
+- Can teach moves over HM moves.
+- Fishing is much less random; pokemon will always bite if there's an encounter there.
+- Mirage Island is now always present.
+- Waking Rayquaza is no longer required. After releasing Kyogre, going to Sootopolis will immediately trigger the
+Rayquaza cutscene.
+- Renamed some locations to be more accurate.
+- Most trainers will no longer ask to be registered in your Pokegear after battle. Also removed most step-based match
+calls.
+- Removed a ledge on Route 123. With careful routing, it's now possible to check every location without having to save
+scum or go back around.
+- Added "GO HOME" button on the start menu where "EXIT" used to be. Will teleport you to Littleroot.
+- Some locations which are directly blocked by completing your goal are automatically excluded.
+ - For example, the S.S. Ticket and a Champion goal, or the Sludge Bomb TM and the Norman goal.
+ - Your particular options might still result in locations that can't be reached until after your goal. For example,
+ setting a Norman goal and setting your E4 requirement to 8 gyms means that post-Champion locations will not be
+ reachable before defeating Norman, but they are NOT excluded by this modification. That's one of the simpler
+ examples. It is extremely tedious to try to detect these sorts of situations, so I'll instead leave it to you to be
+ aware of your own options.
+- Species in the pokedex are searchable by type even if you haven't caught that species yet
+
+### Fixes
+
+- Mt. Pyre summit state no longer changes when you finish the Sootopolis events, which would lock you out of one or two
+locations.
+- Whiting out under certain conditions no longer softlocks you by moving Mr. Briney to an inaccessible area.
+- It's no longer possible to join a room using the wrong patch file, even if the slot names match.
+- NPCs now stop moving while you're receiving an item.
+- Creating a secret base no longer triggers sending the Secret Power TM location.
+- Hopefully fix bug where receiving an item while walking over a trigger can skip that trigger (the Moving
+Truck/Petalburg wrong warp)
+
+## Easter Eggs
+
+There are plenty among you who are capable of ~~cheating~~ finding information about the easter egg phrases by reading
+source code, writing brute force scripts, and inspecting memory for clues and answers. By all means, go ahead, that can
+be your version of this puzzle and I don't intend to stand in your way. **However**, I would ask that any information
+you come up with by doing this, you keep entirely to yourself until the community as a whole has figured out what you
+know. There was not previously a way to reasonably learn about or make guesses at the easter egg, but that has changed.
+There are mechanisms by which solutions can be found or guessed over the course of multiple games by multiple people,
+and I'd rather the fun not get spoiled immediately.
+
+Once a solution has been found I'd _still_ prefer discussion about hints and effects remain behind spoiler tags just in
+case there are people who want to do the hunt on their own. Thank you all, and good luck.
diff --git a/worlds/pokemon_emerald/README.md b/worlds/pokemon_emerald/README.md
index 2c1e9e3560..8441afc56a 100644
--- a/worlds/pokemon_emerald/README.md
+++ b/worlds/pokemon_emerald/README.md
@@ -1,58 +1,3 @@
# Pokemon Emerald
-Version 1.2.1
-
-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.
+Version 2.0.0
diff --git a/worlds/pokemon_emerald/__init__.py b/worlds/pokemon_emerald/__init__.py
index 4d40dd1966..c17fd1bc19 100644
--- a/worlds/pokemon_emerald/__init__.py
+++ b/worlds/pokemon_emerald/__init__.py
@@ -5,7 +5,7 @@ from collections import Counter
import copy
import logging
import os
-from typing import Any, Set, List, Dict, Optional, Tuple, ClassVar
+from typing import Any, Set, List, Dict, Optional, Tuple, ClassVar, TextIO, Union
from BaseClasses import ItemClassification, MultiWorld, Tutorial, LocationProgressType
from Fill import FillError, fill_restrictive
@@ -14,21 +14,18 @@ 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 .data import LEGENDARY_POKEMON, MapData, SpeciesData, 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 (Goal, 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
+ create_locations_with_tags, set_free_fly, set_legendary_cave_entrances)
+from .opponents import randomize_opponent_parties
+from .options import (Goal, DarkCavesRequireFlash, HmRequirements, ItemPoolType, PokemonEmeraldOptions,
+ RandomizeWildPokemon, RandomizeBadges, RandomizeHms, NormanRequirement)
+from .pokemon import (get_random_move, get_species_id_by_label, randomize_abilities, randomize_learnsets,
+ randomize_legendary_encounters, randomize_misc_pokemon, randomize_starters,
+ randomize_tm_hm_compatibility,randomize_types, randomize_wild_encounters)
+from .rom import PokemonEmeraldDeltaPatch, create_patch
class PokemonEmeraldWebWorld(WebWorld):
@@ -89,22 +86,46 @@ class PokemonEmeraldWorld(World):
item_name_groups = ITEM_GROUPS
location_name_groups = LOCATION_GROUPS
- data_version = 1
+ data_version = 2
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
+ badge_shuffle_info: Optional[List[Tuple[PokemonEmeraldLocation, PokemonEmeraldItem]]]
+ hm_shuffle_info: Optional[List[Tuple[PokemonEmeraldLocation, PokemonEmeraldItem]]]
+ free_fly_location_id: int
+ blacklisted_moves: Set[int]
+ blacklisted_wilds: Set[int]
+ blacklisted_starters: Set[int]
+ blacklisted_opponent_pokemon: Set[int]
+ hm_requirements: Dict[str, Union[int, List[str]]]
+ auth: bytes
- modified_species: List[Optional[SpeciesData]]
- modified_maps: List[MapData]
+ modified_species: Dict[int, SpeciesData]
+ modified_maps: Dict[str, MapData]
modified_tmhm_moves: List[int]
- modified_static_encounters: List[int]
+ modified_legendary_encounters: List[int]
modified_starters: Tuple[int, int, int]
modified_trainers: List[TrainerData]
+ def __init__(self, multiworld, player):
+ super(PokemonEmeraldWorld, self).__init__(multiworld, player)
+ self.badge_shuffle_info = None
+ self.hm_shuffle_info = None
+ self.free_fly_location_id = 0
+ self.blacklisted_moves = set()
+ self.blacklisted_wilds = set()
+ self.blacklisted_starters = set()
+ self.blacklisted_opponent_pokemon = set()
+ self.modified_maps = copy.deepcopy(emerald_data.maps)
+ self.modified_species = copy.deepcopy(emerald_data.species)
+ self.modified_tmhm_moves = []
+ self.modified_starters = emerald_data.starters
+ self.modified_trainers = []
+ self.modified_legendary_encounters = []
+
@classmethod
def stage_assert_generate(cls, multiworld: MultiWorld) -> None:
+ from .sanity_check import validate_regions
+
if not os.path.exists(cls.settings.rom_file):
raise FileNotFoundError(cls.settings.rom_file)
@@ -114,15 +135,83 @@ class PokemonEmeraldWorld(World):
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.
+ self.hm_requirements = {
+ "HM01 Cut": ["Stone Badge"],
+ "HM02 Fly": ["Feather Badge"],
+ "HM03 Surf": ["Balance Badge"],
+ "HM04 Strength": ["Heat Badge"],
+ "HM05 Flash": ["Knuckle Badge"],
+ "HM06 Rock Smash": ["Dynamo Badge"],
+ "HM07 Waterfall": ["Rain Badge"],
+ "HM08 Dive": ["Mind Badge"],
+ }
+ if self.options.hm_requirements == HmRequirements.option_fly_without_badge:
+ self.hm_requirements["HM02 Fly"] = 0
+
+ self.blacklisted_moves = {emerald_data.move_labels[label] for label in self.options.move_blacklist.value}
+
+ self.blacklisted_wilds = {
+ get_species_id_by_label(species_name)
+ for species_name in self.options.wild_encounter_blacklist.value
+ if species_name != "_Legendaries"
+ }
+ if "_Legendaries" in self.options.wild_encounter_blacklist.value:
+ self.blacklisted_wilds |= LEGENDARY_POKEMON
+
+ self.blacklisted_starters = {
+ get_species_id_by_label(species_name)
+ for species_name in self.options.starter_blacklist.value
+ if species_name != "_Legendaries"
+ }
+ if "_Legendaries" in self.options.starter_blacklist.value:
+ self.blacklisted_starters |= LEGENDARY_POKEMON
+
+ self.blacklisted_opponent_pokemon = {
+ get_species_id_by_label(species_name)
+ for species_name in self.options.trainer_party_blacklist.value
+ if species_name != "_Legendaries"
+ }
+ if "_Legendaries" in self.options.starter_blacklist.value:
+ self.blacklisted_opponent_pokemon |= LEGENDARY_POKEMON
+
+ # In race mode we don't patch any item location information into the ROM
+ if self.multiworld.is_race and not self.options.remote_items:
+ logging.warning("Pokemon Emerald: Forcing Player %s (%s) to use remote items due to race mode.",
+ self.player, self.multiworld.player_name[self.player])
+ self.options.remote_items.value = Toggle.option_true
+
+ if self.options.goal == Goal.option_legendary_hunt:
+ # Prevent turning off all legendary encounters
+ if len(self.options.allowed_legendary_hunt_encounters.value) == 0:
+ raise ValueError(f"Pokemon Emerald: Player {self.player} ({self.multiworld.player_name[self.player]}) "
+ "needs to allow at least one legendary encounter when goal is legendary hunt.")
+
+ # Prevent setting the number of required legendaries higher than the number of enabled legendaries
+ if self.options.legendary_hunt_count.value > len(self.options.allowed_legendary_hunt_encounters.value):
+ logging.warning("Pokemon Emerald: Legendary hunt count for Player %s (%s) higher than number of allowed "
+ "legendary encounters. Reducing to number of allowed encounters.", self.player,
+ self.multiworld.player_name[self.player])
+ self.options.legendary_hunt_count.value = len(self.options.allowed_legendary_hunt_encounters.value)
+
+ # Require random wild encounters if dexsanity is enabled
+ if self.options.dexsanity and self.options.wild_pokemon == RandomizeWildPokemon.option_vanilla:
+ raise ValueError(f"Pokemon Emerald: Player {self.player} ({self.multiworld.player_name[self.player]}) must "
+ "not leave wild encounters vanilla if enabling dexsanity.")
+
+ # 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:
@@ -141,17 +230,22 @@ class PokemonEmeraldWorld(World):
self.options.norman_count.value = max_norman_count
def create_regions(self) -> None:
+ from .regions import create_regions
regions = create_regions(self)
- tags = {"Badge", "HM", "KeyItem", "Rod", "Bike"}
+ tags = {"Badge", "HM", "KeyItem", "Rod", "Bike", "EventTicket"} # Tags with progression items always included
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")
+ if self.options.berry_trees:
+ tags.add("BerryTree")
+ if self.options.dexsanity:
+ tags.add("Pokedex")
+ if self.options.trainersanity:
+ tags.add("Trainer")
create_locations_with_tags(self, regions, tags)
self.multiworld.regions.extend(regions.values())
@@ -166,18 +260,18 @@ class PokemonEmeraldWorld(World):
continue # Location not in multiworld
if self.options.goal == Goal.option_champion:
- # Always required to beat champion before receiving this
+ # Always required to beat champion before receiving these
exclude_locations([
- "Littleroot Town - S.S. Ticket from Norman"
+ "Littleroot Town - S.S. Ticket from Norman",
+ "Littleroot Town - Aurora Ticket from Norman",
+ "Littleroot Town - Eon Ticket from Norman",
+ "Littleroot Town - Mystic Ticket from Norman",
+ "Littleroot Town - Old Sea Map from Norman",
+ "Ever Grande City - Champion Wallace",
+ "Meteor Falls 1F - Rival Steven",
+ "Trick House Puzzle 8 - Item",
])
- # S.S. Ticket requires beating champion, so ferry is not accessible until after goal
- if not self.options.enable_ferry:
- exclude_locations([
- "SS Tidal - Hidden Item in Lower Deck Trash Can",
- "SS Tidal - TM49 from Thief"
- ])
-
# Construction workers don't move until champion is defeated
if "Safari Zone Construction Workers" not in self.options.remove_roadblocks.value:
exclude_locations([
@@ -186,8 +280,12 @@ class PokemonEmeraldWorld(World):
"Safari Zone NE - Item on Ledge",
"Safari Zone SE - Hidden Item in South Grass 1",
"Safari Zone SE - Hidden Item in South Grass 2",
- "Safari Zone SE - Item in Grass"
+ "Safari Zone SE - Item in Grass",
])
+ elif self.options.goal == Goal.option_steven:
+ exclude_locations([
+ "Meteor Falls 1F - Rival Steven",
+ ])
elif self.options.goal == Goal.option_norman:
# If the player sets their options such that Surf or the Balance
# Badge is vanilla, a very large number of locations become
@@ -207,7 +305,7 @@ class PokemonEmeraldWorld(World):
"Petalburg City - HM03 from Wally's Uncle",
"Dewford Town - TM36 from Sludge Bomb Man",
"Mauville City - Basement Key from Wattson",
- "Mauville City - TM24 from Wattson"
+ "Mauville City - TM24 from Wattson",
])
def create_items(self) -> None:
@@ -217,8 +315,9 @@ class PokemonEmeraldWorld(World):
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 progression items which shouldn't be shuffled into the itempool.
+ # Their locations will still exist, but event items will be placed and
+ # locked at their vanilla locations instead.
filter_tags = set()
if not self.options.key_items:
@@ -227,12 +326,17 @@ class PokemonEmeraldWorld(World):
filter_tags.add("Rod")
if not self.options.bikes:
filter_tags.add("Bike")
+ if not self.options.event_tickets:
+ filter_tags.add("EventTicket")
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 Badges and HMs are set to the `shuffle` option, don't add them to
+ # the normal item pool, but do create their items and save them and
+ # their locations for use in `pre_fill` later.
if self.options.badges == RandomizeBadges.option_shuffle:
self.badge_shuffle_info = [
(location, self.create_item_by_code(location.default_item_code))
@@ -244,14 +348,18 @@ class PokemonEmeraldWorld(World):
for location in [l for l in item_locations if "HM" in l.tags]
]
+ # Filter down locations to actual items that will be filled and create
+ # the itempool.
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]
+ # Take the itempool as-is
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"]
+ # Recreate the itempool from random items
+ elif self.options.item_pool_type in (ItemPoolType.option_diverse, ItemPoolType.option_diverse_balanced):
+ item_categories = ["Ball", "Heal", "Candy", "Vitamin", "EvoStone", "Money", "TM", "Held", "Misc", "Berry"]
# Count occurrences of types of vanilla items in pool
item_category_counter = Counter()
@@ -306,38 +414,23 @@ class PokemonEmeraldWorld(World):
self.multiworld.itempool.append(item)
def set_rules(self) -> None:
+ from .rules import set_rules
set_rules(self)
def generate_basic(self) -> None:
- locations: List[PokemonEmeraldLocation] = self.multiworld.get_locations(self.player)
+ # Create auth
+ # self.auth = self.random.randbytes(16) # Requires >=3.9
+ self.auth = self.random.getrandbits(16 * 8).to_bytes(16, "little")
- # 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))
+ randomize_types(self)
+ randomize_wild_encounters(self)
+ set_free_fly(self)
+ set_legendary_cave_entrances(self)
# 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:
+ for location in self.multiworld.get_locations(self.player):
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.progress_type = LocationProgressType.DEFAULT
@@ -351,30 +444,36 @@ class PokemonEmeraldWorld(World):
convert_unrandomized_items_to_events("Rod")
if not self.options.bikes:
convert_unrandomized_items_to_events("Bike")
+ if not self.options.event_tickets:
+ convert_unrandomized_items_to_events("EventTicket")
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
+ # Badges and HMs that are set to shuffle need to be placed at
+ # their own subset of 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,
+ "Knuckle Badge": 3,
"Balance Badge": 1,
"Dynamo Badge": 1,
"Mind Badge": 2,
"Heat Badge": 2,
"Rain Badge": 3,
"Stone Badge": 4,
- "Feather Badge": 5
+ "Feather Badge": 5,
}
+ # 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.
+ if self.options.hms == RandomizeHms.option_vanilla and \
+ self.options.require_flash in (DarkCavesRequireFlash.option_both, DarkCavesRequireFlash.option_only_granite_cave):
+ badge_priority["Knuckle Badge"] = 0
badge_items.sort(key=lambda item: badge_priority.get(item.name, 0))
# Un-exclude badge locations, since we need to put progression items on them
@@ -384,6 +483,11 @@ class PokemonEmeraldWorld(World):
else location.progress_type
collection_state = self.multiworld.get_all_state(False)
+
+ # If HM shuffle is on, HMs are not placed and not in the pool, so
+ # `get_all_state` did not contain them. Collect them manually for
+ # this fill. We know that they will be included in all state after
+ # this stage.
if self.hm_shuffle_info is not None:
for _, item in self.hm_shuffle_info:
collection_state.collect(item)
@@ -406,25 +510,29 @@ class PokemonEmeraldWorld(World):
logging.debug(f"Failed to shuffle badges for player {self.player}. Retrying.")
continue
+ # Badges are guaranteed to be either placed or in the multiworld's itempool now
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,
+ "HM05 Flash": 3,
"HM03 Surf": 1,
"HM06 Rock Smash": 1,
"HM08 Dive": 2,
"HM04 Strength": 2,
"HM07 Waterfall": 3,
"HM01 Cut": 4,
- "HM02 Fly": 5
+ "HM02 Fly": 5,
}
+ # 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.
+ if self.options.badges == RandomizeBadges.option_vanilla and \
+ self.options.require_flash in (DarkCavesRequireFlash.option_both, DarkCavesRequireFlash.option_only_granite_cave):
+ hm_priority["HM05 Flash"] = 0
hm_items.sort(key=lambda item: hm_priority.get(item.name, 0))
# Un-exclude HM locations, since we need to put progression items on them
@@ -454,465 +562,110 @@ class PokemonEmeraldWorld(World):
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}
+ self.modified_trainers = copy.deepcopy(emerald_data.trainers)
+ self.modified_tmhm_moves = copy.deepcopy(emerald_data.tmhm_moves)
+ self.modified_legendary_encounters = copy.deepcopy(emerald_data.legendary_encounters)
+ self.modified_misc_pokemon = copy.deepcopy(emerald_data.misc_pokemon)
+ self.modified_starters = copy.deepcopy(emerald_data.starters)
- 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}
+ randomize_abilities(self)
+ randomize_learnsets(self)
+ randomize_tm_hm_compatibility(self)
+ randomize_legendary_encounters(self)
+ randomize_misc_pokemon(self)
+ randomize_opponent_parties(self)
+ randomize_starters(self)
- 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]
+ # Modify catch rate
+ min_catch_rate = min(self.options.min_catch_rate.value, 255)
+ for species in self.modified_species.values():
+ species.catch_rate = max(species.catch_rate, min_catch_rate)
- 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:
+ # Modify TM moves
+ if self.options.tm_tutor_moves:
new_moves: Set[int] = set()
for i in range(50):
- new_move = get_random_move(self.random, new_moves)
+ new_move = get_random_move(self.random, new_moves | self.blacklisted_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
+ create_patch(self, output_directory)
+
+ del self.modified_trainers
+ del self.modified_tmhm_moves
+ del self.modified_legendary_encounters
+ del self.modified_misc_pokemon
+ del self.modified_starters
+ del self.modified_species
+
+ def write_spoiler(self, spoiler_handle: TextIO):
+ if self.options.dexsanity:
+ from collections import defaultdict
+
+ spoiler_handle.write(f"\n\nWild Pokemon ({self.multiworld.player_name[self.player]}):\n\n")
+
+ species_maps = defaultdict(set)
+ for map in self.modified_maps.values():
+ if map.land_encounters is not None:
+ for encounter in map.land_encounters.slots:
+ species_maps[encounter].add(map.name[4:])
+
+ if map.water_encounters is not None:
+ for encounter in map.water_encounters.slots:
+ species_maps[encounter].add(map.name[4:])
+
+ if map.fishing_encounters is not None:
+ for encounter in map.fishing_encounters.slots:
+ species_maps[encounter].add(map.name[4:])
+
+ lines = [f"{emerald_data.species[species].label}: {', '.join(maps)}\n"
+ for species, maps in species_maps.items()]
+ lines.sort()
+ for line in lines:
+ spoiler_handle.write(line)
+
+ del self.modified_maps
+
+ def extend_hint_information(self, hint_data):
+ if self.options.dexsanity:
+ from collections import defaultdict
+
+ slot_to_rod = {
+ 0: "_OLD_ROD",
+ 1: "_OLD_ROD",
+ 2: "_GOOD_ROD",
+ 3: "_GOOD_ROD",
+ 4: "_GOOD_ROD",
+ 5: "_SUPER_ROD",
+ 6: "_SUPER_ROD",
+ 7: "_SUPER_ROD",
+ 8: "_SUPER_ROD",
+ 9: "_SUPER_ROD",
}
- should_match_type = self.options.wild_pokemon in {
- RandomizeWildPokemon.option_match_type,
- RandomizeWildPokemon.option_match_base_stats_and_type
+
+ species_maps = defaultdict(set)
+ for map in self.modified_maps.values():
+ if map.land_encounters is not None:
+ for encounter in map.land_encounters.slots:
+ species_maps[encounter].add(map.name[4:] + "_GRASS")
+
+ if map.water_encounters is not None:
+ for encounter in map.water_encounters.slots:
+ species_maps[encounter].add(map.name[4:] + "_WATER")
+
+ if map.fishing_encounters is not None:
+ for slot, encounter in enumerate(map.fishing_encounters.slots):
+ species_maps[encounter].add(map.name[4:] + slot_to_rod[slot])
+
+ hint_data[self.player] = {
+ self.location_name_to_id[f"Pokedex - {emerald_data.species[species].label}"]: ", ".join(maps)
+ for species, maps in species_maps.items()
}
- 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.move_id != 0 and 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 modify_multidata(self, multidata: Dict[str, Any]):
+ import base64
+ multidata["connect_names"][base64.b64encode(self.auth).decode("ascii")] = multidata["connect_names"][self.multiworld.player_name[self.player]]
def fill_slot_data(self) -> Dict[str, Any]:
slot_data = self.options.as_dict(
@@ -921,23 +674,33 @@ class PokemonEmeraldWorld(World):
"hms",
"key_items",
"bikes",
+ "event_tickets",
"rods",
"overworld_items",
"hidden_items",
"npc_gifts",
+ "berry_trees",
"require_itemfinder",
"require_flash",
- "enable_ferry",
"elite_four_requirement",
"elite_four_count",
"norman_requirement",
"norman_count",
+ "legendary_hunt_catch",
+ "legendary_hunt_count",
"extra_boulders",
"remove_roadblocks",
+ "allowed_legendary_hunt_encounters",
+ "extra_bumpy_slope",
"free_fly_location",
- "fly_without_badge",
+ "remote_items",
+ "dexsanity",
+ "trainersanity",
+ "modify_118",
+ "death_link",
)
slot_data["free_fly_location_id"] = self.free_fly_location_id
+ slot_data["hm_requirements"] = self.hm_requirements
return slot_data
def create_item(self, name: str) -> PokemonEmeraldItem:
diff --git a/worlds/pokemon_emerald/client.py b/worlds/pokemon_emerald/client.py
index d8b4b8d587..0dccc1fe17 100644
--- a/worlds/pokemon_emerald/client.py
+++ b/worlds/pokemon_emerald/client.py
@@ -1,19 +1,28 @@
-from typing import TYPE_CHECKING, Dict, Set
+import asyncio
+import copy
+import orjson
+import random
+import time
+from typing import TYPE_CHECKING, Optional, Dict, Set, Tuple
+import uuid
from NetUtils import ClientStatus
+from Options import Toggle
+import Utils
import worlds._bizhawk as bizhawk
from worlds._bizhawk.client import BizHawkClient
-from .data import BASE_OFFSET, data
-from .options import Goal
+from .data import BASE_OFFSET, POKEDEX_OFFSET, data
+from .options import Goal, RemoteItems
+from .util import pokemon_data_to_json, json_to_pokemon_data
if TYPE_CHECKING:
from worlds._bizhawk.context import BizHawkClientContext
-EXPECTED_ROM_NAME = "pokemon emerald version / AP 2"
+EXPECTED_ROM_NAME = "pokemon emerald version / AP 5"
-IS_CHAMPION_FLAG = data.constants["FLAG_IS_CHAMPION"]
+DEFEATED_WALLACE_FLAG = data.constants["TRAINER_FLAGS_START"] + data.constants["TRAINER_WALLACE"]
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"]
@@ -31,7 +40,7 @@ TRACKER_EVENT_FLAGS = [
"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_HIDE_ROUTE_119_TEAM_AQUA_SHELLY", # 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
@@ -41,19 +50,19 @@ TRACKER_EVENT_FLAGS = [
"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"
+ "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_HM_CUT",
+ "NPC_GIFT_RECEIVED_HM_FLY",
+ "NPC_GIFT_RECEIVED_HM_SURF",
+ "NPC_GIFT_RECEIVED_HM_STRENGTH",
+ "NPC_GIFT_RECEIVED_HM_FLASH",
+ "NPC_GIFT_RECEIVED_HM_ROCK_SMASH",
+ "NPC_GIFT_RECEIVED_HM_WATERFALL",
+ "NPC_GIFT_RECEIVED_HM_DIVE",
"NPC_GIFT_RECEIVED_ACRO_BIKE",
"NPC_GIFT_RECEIVED_WAILMER_PAIL",
"NPC_GIFT_RECEIVED_DEVON_GOODS_RUSTURF_TUNNEL",
@@ -70,7 +79,7 @@ KEY_LOCATION_FLAGS = [
"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_HIDDEN_FLOOR_ROOM_2_SCANNER",
"ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY",
"NPC_GIFT_RECEIVED_OLD_ROD",
"NPC_GIFT_RECEIVED_GOOD_ROD",
@@ -78,6 +87,24 @@ KEY_LOCATION_FLAGS = [
]
KEY_LOCATION_FLAG_MAP = {data.locations[location_name].flag: location_name for location_name in KEY_LOCATION_FLAGS}
+LEGENDARY_NAMES = {
+ "Groudon": "GROUDON",
+ "Kyogre": "KYOGRE",
+ "Rayquaza": "RAYQUAZA",
+ "Latias": "LATIAS",
+ "Latios": "LATIOS",
+ "Regirock": "REGIROCK",
+ "Regice": "REGICE",
+ "Registeel": "REGISTEEL",
+ "Mew": "MEW",
+ "Deoxys": "DEOXYS",
+ "Ho-oh": "HO_OH",
+ "Lugia": "LUGIA",
+}
+
+DEFEATED_LEGENDARY_FLAG_MAP = {data.constants[f"FLAG_DEFEATED_{name}"]: name for name in LEGENDARY_NAMES.values()}
+CAUGHT_LEGENDARY_FLAG_MAP = {data.constants[f"FLAG_CAUGHT_{name}"]: name for name in LEGENDARY_NAMES.values()}
+
class PokemonEmeraldClient(BizHawkClient):
game = "Pokemon Emerald"
@@ -86,14 +113,31 @@ class PokemonEmeraldClient(BizHawkClient):
local_checked_locations: Set[int]
local_set_events: Dict[str, bool]
local_found_key_items: Dict[str, bool]
- goal_flag: int
+ local_defeated_legendaries: Dict[str, bool]
+ goal_flag: Optional[int]
+
+ wonder_trade_update_event: asyncio.Event
+ latest_wonder_trade_reply: dict
+ wonder_trade_cooldown: int
+ wonder_trade_cooldown_timer: int
+
+ death_counter: Optional[int]
+ previous_death_link: float
+ ignore_next_death_link: bool
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
+ self.local_defeated_legendaries = {}
+ self.goal_flag = None
+ self.wonder_trade_update_event = asyncio.Event()
+ self.wonder_trade_cooldown = 5000
+ self.wonder_trade_cooldown_timer = 0
+ self.death_counter = None
+ self.previous_death_link = 0
+ self.ignore_next_death_link = False
async def validate_rom(self, ctx: "BizHawkClientContext") -> bool:
from CommonClient import logger
@@ -123,88 +167,103 @@ class PokemonEmeraldClient(BizHawkClient):
ctx.want_slot_data = True
ctx.watcher_timeout = 0.125
+ self.death_counter = None
+ self.previous_death_link = 0
+ self.ignore_next_death_link = False
+
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")
+ import base64
+ auth_raw = (await bizhawk.read(ctx.bizhawk_ctx, [(data.rom_addresses["gArchipelagoInfo"], 16, "ROM")]))[0]
+ ctx.auth = base64.b64encode(auth_raw).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
+ if ctx.server is None or ctx.server.socket.closed or ctx.slot_data is None:
+ return
+
+ if ctx.slot_data["goal"] == Goal.option_champion:
+ self.goal_flag = DEFEATED_WALLACE_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
+ elif ctx.slot_data["goal"] == Goal.option_legendary_hunt:
+ self.goal_flag = None
+
+ if ctx.slot_data["remote_items"] == RemoteItems.option_true and not ctx.items_handling & 0b010:
+ ctx.items_handling = 0b011
+ Utils.async_start(ctx.send_msgs([{
+ "cmd": "ConnectUpdate",
+ "items_handling": ctx.items_handling
+ }]))
try:
+ guards: Dict[str, Tuple[int, bytes, str]] = {}
+
# 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]
+ guards["IN OVERWORLD"] = (
+ data.ram_addresses["gMain"] + 4,
+ (data.ram_addresses["CB2_Overworld"] + 1).to_bytes(4, "little"),
+ "System Bus"
)
- 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(
+ # Read save block addresses
+ read_result = await bizhawk.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]
+ (data.ram_addresses["gSaveBlock1Ptr"], 4, "System Bus"),
+ (data.ram_addresses["gSaveBlock2Ptr"], 4, "System Bus"),
+ ]
)
- 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
+ # Checks that the save data hasn't moved
+ guards["SAVE BLOCK 1"] = (data.ram_addresses["gSaveBlock1Ptr"], read_result[0], "System Bus")
+ guards["SAVE BLOCK 2"] = (data.ram_addresses["gSaveBlock2Ptr"], read_result[1], "System Bus")
- # 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"),
- ])
+ sb1_address = int.from_bytes(guards["SAVE BLOCK 1"][1], "little")
+ sb2_address = int.from_bytes(guards["SAVE BLOCK 2"][1], "little")
+
+ await self.handle_death_link(ctx, guards)
+ await self.handle_received_items(ctx, guards)
+ await self.handle_wonder_trade(ctx, guards)
# 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]
+ [(sb1_address + 0x1450, 0x96, "System Bus")], # Flags
+ [guards["IN OVERWORLD"], guards["SAVE BLOCK 1"]]
)
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]
+ [(sb1_address + 0x14E6, 0x96, "System Bus")], # Flags continued
+ [guards["IN OVERWORLD"], guards["SAVE BLOCK 1"]]
)
if read_result is not None:
flag_bytes += read_result[0]
+ # Read pokedex flags
+ pokedex_caught_bytes = bytes(0)
+ if ctx.slot_data["dexsanity"] == Toggle.option_true:
+ # Read pokedex flags
+ read_result = await bizhawk.guarded_read(
+ ctx.bizhawk_ctx,
+ [(sb2_address + 0x28, 0x34, "System Bus")],
+ [guards["IN OVERWORLD"], guards["SAVE BLOCK 2"]]
+ )
+ if read_result is not None:
+ pokedex_caught_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}
+ defeated_legendaries = {legendary_name: False for legendary_name in LEGENDARY_NAMES.values()}
+ caught_legendaries = {legendary_name: False for legendary_name in LEGENDARY_NAMES.values()}
# Check set flags
for byte_i, byte in enumerate(flag_bytes):
@@ -219,12 +278,45 @@ class PokemonEmeraldClient(BizHawkClient):
if flag_id == self.goal_flag:
game_clear = True
+ if flag_id in DEFEATED_LEGENDARY_FLAG_MAP:
+ defeated_legendaries[DEFEATED_LEGENDARY_FLAG_MAP[flag_id]] = True
+
+ if flag_id in CAUGHT_LEGENDARY_FLAG_MAP:
+ caught_legendaries[CAUGHT_LEGENDARY_FLAG_MAP[flag_id]] = 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
+ # Check pokedex
+ if ctx.slot_data["dexsanity"] == Toggle.option_true:
+ for byte_i, byte in enumerate(pokedex_caught_bytes):
+ for i in range(8):
+ if byte & (1 << i) != 0:
+ dex_number = (byte_i * 8 + i) + 1
+
+ location_id = dex_number + BASE_OFFSET + POKEDEX_OFFSET
+ if location_id in ctx.server_locations:
+ local_checked_locations.add(location_id)
+
+ # Count legendary hunt flags
+ if ctx.slot_data["goal"] == Goal.option_legendary_hunt:
+ # If legendary hunt doesn't require catching, add defeated legendaries to caught_legendaries
+ if ctx.slot_data["legendary_hunt_catch"] == Toggle.option_false:
+ for legendary, is_defeated in defeated_legendaries.items():
+ if is_defeated:
+ caught_legendaries[legendary] = True
+
+ num_caught = 0
+ for legendary, is_caught in caught_legendaries.items():
+ if is_caught and legendary in [LEGENDARY_NAMES[name] for name in ctx.slot_data["allowed_legendary_hunt_encounters"]]:
+ num_caught += 1
+
+ if num_caught >= ctx.slot_data["legendary_hunt_count"]:
+ game_clear = True
+
# Send locations
if local_checked_locations != self.local_checked_locations:
self.local_checked_locations = local_checked_locations
@@ -232,14 +324,14 @@ class PokemonEmeraldClient(BizHawkClient):
if local_checked_locations is not None:
await ctx.send_msgs([{
"cmd": "LocationChecks",
- "locations": list(local_checked_locations)
+ "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
+ "status": ClientStatus.CLIENT_GOAL,
}])
# Send tracker event flags
@@ -254,7 +346,7 @@ class PokemonEmeraldClient(BizHawkClient):
"key": f"pokemon_emerald_events_{ctx.team}_{ctx.slot}",
"default": 0,
"want_reply": False,
- "operations": [{"operation": "or", "value": event_bitfield}]
+ "operations": [{"operation": "or", "value": event_bitfield}],
}])
self.local_set_events = local_set_events
@@ -269,9 +361,313 @@ class PokemonEmeraldClient(BizHawkClient):
"key": f"pokemon_emerald_keys_{ctx.team}_{ctx.slot}",
"default": 0,
"want_reply": False,
- "operations": [{"operation": "or", "value": key_bitfield}]
+ "operations": [{"operation": "or", "value": key_bitfield}],
}])
self.local_found_key_items = local_found_key_items
+
+ if ctx.slot_data["goal"] == Goal.option_legendary_hunt:
+ if caught_legendaries != self.local_defeated_legendaries and ctx.slot is not None:
+ legendary_bitfield = 0
+ for i, legendary_name in enumerate(LEGENDARY_NAMES.values()):
+ if caught_legendaries[legendary_name]:
+ legendary_bitfield |= 1 << i
+
+ await ctx.send_msgs([{
+ "cmd": "Set",
+ "key": f"pokemon_emerald_legendaries_{ctx.team}_{ctx.slot}",
+ "default": 0,
+ "want_reply": False,
+ "operations": [{"operation": "or", "value": legendary_bitfield}],
+ }])
+ self.local_defeated_legendaries = caught_legendaries
except bizhawk.RequestFailedError:
# Exit handler and return to main loop to reconnect
pass
+
+ async def handle_death_link(self, ctx: "BizHawkClientContext", guards: Dict[str, Tuple[int, bytes, str]]) -> None:
+ """
+ Checks whether the player has died while connected and sends a death link if so. Queues a death link in the game
+ if a new one has been received.
+ """
+ if ctx.slot_data.get("death_link", Toggle.option_false) == Toggle.option_true:
+ if "DeathLink" not in ctx.tags:
+ await ctx.update_death_link(True)
+ self.previous_death_link = ctx.last_death_link
+
+ sb1_address = int.from_bytes(guards["SAVE BLOCK 1"][1], "little")
+ sb2_address = int.from_bytes(guards["SAVE BLOCK 2"][1], "little")
+
+ read_result = await bizhawk.guarded_read(
+ ctx.bizhawk_ctx, [
+ (sb1_address + 0x177C + (52 * 4), 4, "System Bus"), # White out stat
+ (sb1_address + 0x177C + (22 * 4), 4, "System Bus"), # Canary stat
+ (sb2_address + 0xAC, 4, "System Bus"), # Encryption key
+ ],
+ [guards["SAVE BLOCK 1"], guards["SAVE BLOCK 2"]]
+ )
+ if read_result is None: # Save block moved
+ return
+
+ encryption_key = int.from_bytes(read_result[2], "little")
+ times_whited_out = int.from_bytes(read_result[0], "little") ^ encryption_key
+
+ # Canary is an unused stat that will always be 0. There is a low chance that we've done this read on
+ # a frame where the user has just entered a battle and the encryption key has been changed, but the data
+ # has not yet been encrypted with the new key. If `canary` is 0, `times_whited_out` is correct.
+ canary = int.from_bytes(read_result[1], "little") ^ encryption_key
+
+ # Skip all deathlink code if save is not yet loaded (encryption key is zero) or white out stat not yet
+ # initialized (starts at 100 as a safety for subtracting values from an unsigned int).
+ if canary == 0 and encryption_key != 0 and times_whited_out >= 100:
+ if self.previous_death_link != ctx.last_death_link:
+ self.previous_death_link = ctx.last_death_link
+ if self.ignore_next_death_link:
+ self.ignore_next_death_link = False
+ else:
+ await bizhawk.write(
+ ctx.bizhawk_ctx,
+ [(data.ram_addresses["gArchipelagoDeathLinkQueued"], [1], "System Bus")]
+ )
+
+ if self.death_counter is None:
+ self.death_counter = times_whited_out
+ elif times_whited_out > self.death_counter:
+ await ctx.send_death(f"{ctx.player_names[ctx.slot]} is out of usable POKéMON! "
+ f"{ctx.player_names[ctx.slot]} whited out!")
+ self.ignore_next_death_link = True
+ self.death_counter = times_whited_out
+
+ async def handle_received_items(self, ctx: "BizHawkClientContext", guards: Dict[str, Tuple[int, bytes, str]]) -> None:
+ """
+ Checks the index of the most recently received item and whether the item queue is full. Writes the next item
+ into the game if necessary.
+ """
+ received_item_address = data.ram_addresses["gArchipelagoReceivedItem"]
+
+ sb1_address = int.from_bytes(guards["SAVE BLOCK 1"][1], "little")
+
+ read_result = await bizhawk.guarded_read(
+ ctx.bizhawk_ctx,
+ [
+ (sb1_address + 0x3778, 2, "System Bus"), # Number of received items
+ (received_item_address + 4, 1, "System Bus") # Received item struct full?
+ ],
+ [guards["IN OVERWORLD"], guards["SAVE BLOCK 1"]]
+ )
+ 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]
+ should_display = 1 if next_item.flags & 1 or next_item.player == ctx.slot else 0
+ await bizhawk.write(ctx.bizhawk_ctx, [
+ (received_item_address + 0, (next_item.item - BASE_OFFSET).to_bytes(2, "little"), "System Bus"),
+ (received_item_address + 2, (num_received_items + 1).to_bytes(2, "little"), "System Bus"),
+ (received_item_address + 4, [1], "System Bus"),
+ (received_item_address + 5, [should_display], "System Bus"),
+ ])
+
+ async def handle_wonder_trade(self, ctx: "BizHawkClientContext", guards: Dict[str, Tuple[int, bytes, str]]) -> None:
+ """
+ Read wonder trade status from save data and either send a queued pokemon to data storage or attempt to retrieve
+ one from data storage and write it into the save.
+ """
+ from CommonClient import logger
+
+ sb1_address = int.from_bytes(guards["SAVE BLOCK 1"][1], "little")
+
+ read_result = await bizhawk.guarded_read(
+ ctx.bizhawk_ctx,
+ [
+ (sb1_address + 0x377C, 0x50, "System Bus"), # Wonder trade data
+ (sb1_address + 0x37CC, 1, "System Bus"), # Is wonder trade sent
+ ],
+ [guards["IN OVERWORLD"], guards["SAVE BLOCK 1"]]
+ )
+
+ if read_result is not None:
+ wonder_trade_pokemon_data = read_result[0]
+ trade_is_sent = read_result[1][0]
+
+ if trade_is_sent == 0 and wonder_trade_pokemon_data[19] == 2:
+ # Game has wonder trade data to send. Send it to data storage, remove it from the game's memory,
+ # and mark that the game is waiting on receiving a trade
+ Utils.async_start(self.wonder_trade_send(ctx, pokemon_data_to_json(wonder_trade_pokemon_data)))
+ await bizhawk.write(ctx.bizhawk_ctx, [
+ (sb1_address + 0x377C, bytes(0x50), "System Bus"),
+ (sb1_address + 0x37CC, [1], "System Bus"),
+ ])
+ elif trade_is_sent != 0 and wonder_trade_pokemon_data[19] != 2:
+ # Game is waiting on receiving a trade. See if there are any available trades that were not
+ # sent by this player, and if so, try to receive one.
+ if self.wonder_trade_cooldown_timer <= 0 and f"pokemon_wonder_trades_{ctx.team}" in ctx.stored_data:
+ if any(item[0] != ctx.slot
+ for key, item in ctx.stored_data.get(f"pokemon_wonder_trades_{ctx.team}", {}).items()
+ if key != "_lock" and orjson.loads(item[1])["species"] <= 386):
+ received_trade = await self.wonder_trade_receive(ctx)
+ if received_trade is None:
+ self.wonder_trade_cooldown_timer = self.wonder_trade_cooldown
+ self.wonder_trade_cooldown *= 2
+ self.wonder_trade_cooldown += random.randrange(0, 500)
+ else:
+ await bizhawk.write(ctx.bizhawk_ctx, [
+ (sb1_address + 0x377C, json_to_pokemon_data(received_trade), "System Bus"),
+ ])
+ logger.info("Wonder trade received!")
+ self.wonder_trade_cooldown = 5000
+
+ else:
+ # Very approximate "time since last loop", but extra delay is fine for this
+ self.wonder_trade_cooldown_timer -= int(ctx.watcher_timeout * 1000)
+
+ async def wonder_trade_acquire(self, ctx: "BizHawkClientContext", keep_trying: bool = False) -> Optional[dict]:
+ """
+ Acquires a lock on the `pokemon_wonder_trades_{ctx.team}` key in
+ datastorage. Locking the key means you have exclusive access
+ to modifying the value until you unlock it or the key expires (5
+ seconds).
+
+ If `keep_trying` is `True`, it will keep trying to acquire the lock
+ until successful. Otherwise it will return `None` if it fails to
+ acquire the lock.
+ """
+ while not ctx.exit_event.is_set():
+ lock = int(time.time_ns() / 1000000)
+ message_uuid = str(uuid.uuid4())
+ await ctx.send_msgs([{
+ "cmd": "Set",
+ "key": f"pokemon_wonder_trades_{ctx.team}",
+ "default": {"_lock": 0},
+ "want_reply": True,
+ "operations": [{"operation": "update", "value": {"_lock": lock}}],
+ "uuid": message_uuid,
+ }])
+
+ self.wonder_trade_update_event.clear()
+ try:
+ await asyncio.wait_for(self.wonder_trade_update_event.wait(), 5)
+ except asyncio.TimeoutError:
+ if not keep_trying:
+ return None
+ continue
+
+ reply = copy.deepcopy(self.latest_wonder_trade_reply)
+
+ # Make sure the most recently received update was triggered by our lock attempt
+ if reply.get("uuid", None) != message_uuid:
+ if not keep_trying:
+ return None
+ await asyncio.sleep(self.wonder_trade_cooldown)
+ continue
+
+ # Make sure the current value of the lock is what we set it to
+ # (I think this should theoretically never run)
+ if reply["value"]["_lock"] != lock:
+ if not keep_trying:
+ return None
+ await asyncio.sleep(self.wonder_trade_cooldown)
+ continue
+
+ # Make sure that the lock value we replaced is at least 5 seconds old
+ # If it was unlocked before our change, its value was 0 and it will look decades old
+ if lock - reply["original_value"]["_lock"] < 5000:
+ # Multiple clients trying to lock the key may get stuck in a loop of checking the lock
+ # by trying to set it, which will extend its expiration. So if we see that the lock was
+ # too new when we replaced it, we should wait for increasingly longer periods so that
+ # eventually the lock will expire and a client will acquire it.
+ self.wonder_trade_cooldown *= 2
+ self.wonder_trade_cooldown += random.randrange(0, 500)
+
+ if not keep_trying:
+ self.wonder_trade_cooldown_timer = self.wonder_trade_cooldown
+ return None
+ await asyncio.sleep(self.wonder_trade_cooldown)
+ continue
+
+ # We have the lock, reset the cooldown and return
+ self.wonder_trade_cooldown = 5000
+ return reply
+
+ async def wonder_trade_send(self, ctx: "BizHawkClientContext", data: str) -> None:
+ """
+ Sends a wonder trade pokemon to data storage
+ """
+ from CommonClient import logger
+
+ reply = await self.wonder_trade_acquire(ctx, True)
+
+ wonder_trade_slot = 0
+ while str(wonder_trade_slot) in reply["value"]:
+ wonder_trade_slot += 1
+
+ await ctx.send_msgs([{
+ "cmd": "Set",
+ "key": f"pokemon_wonder_trades_{ctx.team}",
+ "default": {"_lock": 0},
+ "operations": [{"operation": "update", "value": {
+ "_lock": 0,
+ str(wonder_trade_slot): (ctx.slot, data),
+ }}],
+ }])
+
+ logger.info("Wonder trade sent! We'll notify you here when a trade has been found.")
+
+ async def wonder_trade_receive(self, ctx: "BizHawkClientContext") -> Optional[str]:
+ """
+ Tries to pop a pokemon out of the wonder trades. Returns `None` if
+ for some reason it can't immediately remove a compatible pokemon.
+ """
+ reply = await self.wonder_trade_acquire(ctx)
+
+ if reply is None:
+ return None
+
+ candidate_slots = [
+ int(slot)
+ for slot in reply["value"]
+ if slot != "_lock" \
+ and reply["value"][slot][0] != ctx.slot \
+ and orjson.loads(reply["value"][slot][1])["species"] <= 386
+ ]
+
+ if len(candidate_slots) == 0:
+ await ctx.send_msgs([{
+ "cmd": "Set",
+ "key": f"pokemon_wonder_trades_{ctx.team}",
+ "default": {"_lock": 0},
+ "operations": [{"operation": "update", "value": {"_lock": 0}}],
+ }])
+ return None
+
+ wonder_trade_slot = max(candidate_slots)
+
+ await ctx.send_msgs([{
+ "cmd": "Set",
+ "key": f"pokemon_wonder_trades_{ctx.team}",
+ "default": {"_lock": 0},
+ "operations": [
+ {"operation": "update", "value": {"_lock": 0}},
+ {"operation": "pop", "value": str(wonder_trade_slot)},
+ ]
+ }])
+
+ return reply["value"][str(wonder_trade_slot)][1]
+
+ def on_package(self, ctx: "BizHawkClientContext", cmd: str, args: dict) -> None:
+ if cmd == "Connected":
+ Utils.async_start(ctx.send_msgs([{
+ "cmd": "SetNotify",
+ "keys": [f"pokemon_wonder_trades_{ctx.team}"],
+ }, {
+ "cmd": "Get",
+ "keys": [f"pokemon_wonder_trades_{ctx.team}"],
+ }]))
+ elif cmd == "SetReply":
+ if args.get("key", "") == f"pokemon_wonder_trades_{ctx.team}":
+ self.latest_wonder_trade_reply = args
+ self.wonder_trade_update_event.set()
diff --git a/worlds/pokemon_emerald/data.py b/worlds/pokemon_emerald/data.py
index bc51d84963..c4f7d7711c 100644
--- a/worlds/pokemon_emerald/data.py
+++ b/worlds/pokemon_emerald/data.py
@@ -5,7 +5,6 @@ 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
@@ -16,6 +15,25 @@ from BaseClasses import ItemClassification
BASE_OFFSET = 3860000
+POKEDEX_OFFSET = 10000
+
+IGNORABLE_MAPS = {
+ "MAP_ALTERING_CAVE",
+ "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1",
+ "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2",
+ "MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3",
+}
+"""These maps exist but don't show up in the rando or are unused, and so should be discarded"""
+
+POSTGAME_MAPS = {
+ "MAP_DESERT_UNDERPASS",
+ "MAP_SAFARI_ZONE_NORTHEAST",
+ "MAP_SAFARI_ZONE_SOUTHEAST",
+ "MAP_METEOR_FALLS_STEVENS_CAVE",
+}
+"""These maps have encounters and are locked behind beating the champion. Those encounter slots should be ignored for logical access to a species."""
+
+NUM_REAL_SPECIES = 386
class Warp:
@@ -55,14 +73,14 @@ class Warp:
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:
+ 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':
+ def decode(encoded_string: str) -> "Warp":
"""
Create a Warp object from an encoded string
"""
@@ -87,6 +105,7 @@ class Warp:
class ItemData(NamedTuple):
label: str
item_id: int
+ modern_id: Optional[int]
classification: ItemClassification
tags: FrozenSet[str]
@@ -96,11 +115,25 @@ class LocationData(NamedTuple):
label: str
parent_region: str
default_item: int
- rom_address: int
+ address: Union[int, List[int]]
flag: int
tags: FrozenSet[str]
+class EncounterTableData(NamedTuple):
+ slots: List[int]
+ address: int
+
+
+@dataclass
+class MapData:
+ name: str
+ header_address: int
+ land_encounters: Optional[EncounterTableData]
+ water_encounters: Optional[EncounterTableData]
+ fishing_encounters: Optional[EncounterTableData]
+
+
class EventData(NamedTuple):
name: str
parent_region: str
@@ -108,13 +141,21 @@ class EventData(NamedTuple):
class RegionData:
name: str
+ parent_map: MapData
+ has_grass: bool
+ has_water: bool
+ has_fishing: bool
exits: List[str]
warps: List[str]
locations: List[str]
events: List[EventData]
- def __init__(self, name: str):
+ def __init__(self, name: str, parent_map: MapData, has_grass: bool, has_water: bool, has_fishing: bool):
self.name = name
+ self.parent_map = parent_map
+ self.has_grass = has_grass
+ self.has_water = has_water
+ self.has_fishing = has_fishing
self.exits = []
self.warps = []
self.locations = []
@@ -181,9 +222,9 @@ class EvolutionData(NamedTuple):
species_id: int
-class StaticEncounterData(NamedTuple):
+class MiscPokemonData(NamedTuple):
species_id: int
- rom_address: int
+ address: int
@dataclass
@@ -191,16 +232,18 @@ class SpeciesData:
name: str
label: str
species_id: int
+ national_dex_number: int
base_stats: BaseStats
types: Tuple[int, int]
abilities: Tuple[int, int]
evolutions: List[EvolutionData]
pre_evolution: Optional[int]
catch_rate: int
+ friendship: int
learnset: List[LearnsetMove]
tm_hm_compatibility: int
- learnset_rom_address: int
- rom_address: int
+ learnset_address: int
+ address: int
class AbilityData(NamedTuple):
@@ -208,19 +251,6 @@ class AbilityData(NamedTuple):
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
@@ -250,15 +280,15 @@ class TrainerPokemonData:
class TrainerPartyData:
pokemon: List[TrainerPokemonData]
pokemon_data_type: TrainerPokemonDataTypeEnum
- rom_address: int
+ address: int
@dataclass
class TrainerData:
trainer_id: int
party: TrainerPartyData
- rom_address: int
- battle_script_rom_address: int
+ address: int
+ script_address: int
class PokemonEmeraldData:
@@ -269,11 +299,13 @@ class PokemonEmeraldData:
regions: Dict[str, RegionData]
locations: Dict[str, LocationData]
items: Dict[int, ItemData]
- species: List[Optional[SpeciesData]]
- static_encounters: List[StaticEncounterData]
+ species: Dict[int, SpeciesData]
+ legendary_encounters: List[MiscPokemonData]
+ misc_pokemon: List[MiscPokemonData]
tmhm_moves: List[int]
abilities: List[AbilityData]
- maps: List[MapData]
+ move_labels: Dict[str, int]
+ maps: Dict[str, MapData]
warps: Dict[str, Warp]
warp_map: Dict[str, Optional[str]]
trainers: List[TrainerData]
@@ -286,29 +318,20 @@ class PokemonEmeraldData:
self.regions = {}
self.locations = {}
self.items = {}
- self.species = []
- self.static_encounters = []
+ self.species = {}
+ self.legendary_encounters = []
+ self.misc_pokemon = []
self.tmhm_moves = []
self.abilities = []
- self.maps = []
+ self.move_labels = {}
+ 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)
+ return orjson.loads(pkgutil.get_data(__name__, "data/" + data_name).decode("utf-8-sig"))
def _init() -> None:
@@ -319,6 +342,39 @@ def _init() -> None:
location_attributes_json = load_json_data("locations.json")
+ # Create map data
+ for map_name, map_json in extracted_data["maps"].items():
+ if map_name in IGNORABLE_MAPS:
+ continue
+
+ land_encounters = None
+ water_encounters = None
+ fishing_encounters = None
+
+ if "land_encounters" in map_json:
+ land_encounters = EncounterTableData(
+ map_json["land_encounters"]["slots"],
+ map_json["land_encounters"]["address"]
+ )
+ if "water_encounters" in map_json:
+ water_encounters = EncounterTableData(
+ map_json["water_encounters"]["slots"],
+ map_json["water_encounters"]["address"]
+ )
+ if "fishing_encounters" in map_json:
+ fishing_encounters = EncounterTableData(
+ map_json["fishing_encounters"]["slots"],
+ map_json["fishing_encounters"]["address"]
+ )
+
+ data.maps[map_name] = MapData(
+ map_name,
+ map_json["header_address"],
+ land_encounters,
+ water_encounters,
+ fishing_encounters
+ )
+
# Load/merge region json files
region_json_list = []
for file in pkg_resources.resource_listdir(__name__, "data/regions"):
@@ -338,7 +394,13 @@ def _init() -> None:
data.regions = {}
for region_name, region_json in regions_json.items():
- new_region = RegionData(region_name)
+ new_region = RegionData(
+ region_name,
+ data.maps[region_json["parent_map"]],
+ region_json["has_grass"],
+ region_json["has_water"],
+ region_json["has_fishing"]
+ )
# Locations
for location_name in region_json["locations"]:
@@ -346,15 +408,35 @@ def _init() -> None:
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"])
- )
+ if location_name.startswith("TRAINER_BRENDAN_") or location_name.startswith("TRAINER_MAY_"):
+ import re
+ locale = re.match("TRAINER_BRENDAN_([A-Z0-9_]+)_MUDKIP_REWARD", location_name).group(1)
+ alternate_rival_jsons = [extracted_data["locations"][alternate] for alternate in [
+ f"TRAINER_BRENDAN_{locale}_TORCHIC_REWARD",
+ f"TRAINER_BRENDAN_{locale}_TREECKO_REWARD",
+ f"TRAINER_MAY_{locale}_MUDKIP_REWARD",
+ f"TRAINER_MAY_{locale}_TORCHIC_REWARD",
+ f"TRAINER_MAY_{locale}_TREECKO_REWARD",
+ ]]
+ new_location = LocationData(
+ location_name,
+ location_attributes_json[location_name]["label"],
+ region_name,
+ location_json["default_item"],
+ [location_json["address"]] + [j["address"] for j in alternate_rival_jsons],
+ location_json["flag"],
+ frozenset(location_attributes_json[location_name]["tags"])
+ )
+ else:
+ new_location = LocationData(
+ location_name,
+ location_attributes_json[location_name]["label"],
+ region_name,
+ location_json["default_item"],
+ location_json["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)
@@ -401,6 +483,7 @@ def _init() -> None:
data.items[data.constants[item_constant_name]] = ItemData(
attributes["label"],
data.constants[item_constant_name],
+ attributes["modern_id"],
item_classification,
frozenset(attributes["tags"])
)
@@ -408,408 +491,408 @@ def _init() -> None:
# 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")
+ all_species: List[Tuple[str, str, int]] = [
+ ("SPECIES_BULBASAUR", "Bulbasaur", 1),
+ ("SPECIES_IVYSAUR", "Ivysaur", 2),
+ ("SPECIES_VENUSAUR", "Venusaur", 3),
+ ("SPECIES_CHARMANDER", "Charmander", 4),
+ ("SPECIES_CHARMELEON", "Charmeleon", 5),
+ ("SPECIES_CHARIZARD", "Charizard", 6),
+ ("SPECIES_SQUIRTLE", "Squirtle", 7),
+ ("SPECIES_WARTORTLE", "Wartortle", 8),
+ ("SPECIES_BLASTOISE", "Blastoise", 9),
+ ("SPECIES_CATERPIE", "Caterpie", 10),
+ ("SPECIES_METAPOD", "Metapod", 11),
+ ("SPECIES_BUTTERFREE", "Butterfree", 12),
+ ("SPECIES_WEEDLE", "Weedle", 13),
+ ("SPECIES_KAKUNA", "Kakuna", 14),
+ ("SPECIES_BEEDRILL", "Beedrill", 15),
+ ("SPECIES_PIDGEY", "Pidgey", 16),
+ ("SPECIES_PIDGEOTTO", "Pidgeotto", 17),
+ ("SPECIES_PIDGEOT", "Pidgeot", 18),
+ ("SPECIES_RATTATA", "Rattata", 19),
+ ("SPECIES_RATICATE", "Raticate", 20),
+ ("SPECIES_SPEAROW", "Spearow", 21),
+ ("SPECIES_FEAROW", "Fearow", 22),
+ ("SPECIES_EKANS", "Ekans", 23),
+ ("SPECIES_ARBOK", "Arbok", 24),
+ ("SPECIES_PIKACHU", "Pikachu", 25),
+ ("SPECIES_RAICHU", "Raichu", 26),
+ ("SPECIES_SANDSHREW", "Sandshrew", 27),
+ ("SPECIES_SANDSLASH", "Sandslash", 28),
+ ("SPECIES_NIDORAN_F", "Nidoran Female", 29),
+ ("SPECIES_NIDORINA", "Nidorina", 30),
+ ("SPECIES_NIDOQUEEN", "Nidoqueen", 31),
+ ("SPECIES_NIDORAN_M", "Nidoran Male", 32),
+ ("SPECIES_NIDORINO", "Nidorino", 33),
+ ("SPECIES_NIDOKING", "Nidoking", 34),
+ ("SPECIES_CLEFAIRY", "Clefairy", 35),
+ ("SPECIES_CLEFABLE", "Clefable", 36),
+ ("SPECIES_VULPIX", "Vulpix", 37),
+ ("SPECIES_NINETALES", "Ninetales", 38),
+ ("SPECIES_JIGGLYPUFF", "Jigglypuff", 39),
+ ("SPECIES_WIGGLYTUFF", "Wigglytuff", 40),
+ ("SPECIES_ZUBAT", "Zubat", 41),
+ ("SPECIES_GOLBAT", "Golbat", 42),
+ ("SPECIES_ODDISH", "Oddish", 43),
+ ("SPECIES_GLOOM", "Gloom", 44),
+ ("SPECIES_VILEPLUME", "Vileplume", 45),
+ ("SPECIES_PARAS", "Paras", 46),
+ ("SPECIES_PARASECT", "Parasect", 47),
+ ("SPECIES_VENONAT", "Venonat", 48),
+ ("SPECIES_VENOMOTH", "Venomoth", 49),
+ ("SPECIES_DIGLETT", "Diglett", 50),
+ ("SPECIES_DUGTRIO", "Dugtrio", 51),
+ ("SPECIES_MEOWTH", "Meowth", 52),
+ ("SPECIES_PERSIAN", "Persian", 53),
+ ("SPECIES_PSYDUCK", "Psyduck", 54),
+ ("SPECIES_GOLDUCK", "Golduck", 55),
+ ("SPECIES_MANKEY", "Mankey", 56),
+ ("SPECIES_PRIMEAPE", "Primeape", 57),
+ ("SPECIES_GROWLITHE", "Growlithe", 58),
+ ("SPECIES_ARCANINE", "Arcanine", 59),
+ ("SPECIES_POLIWAG", "Poliwag", 60),
+ ("SPECIES_POLIWHIRL", "Poliwhirl", 61),
+ ("SPECIES_POLIWRATH", "Poliwrath", 62),
+ ("SPECIES_ABRA", "Abra", 63),
+ ("SPECIES_KADABRA", "Kadabra", 64),
+ ("SPECIES_ALAKAZAM", "Alakazam", 65),
+ ("SPECIES_MACHOP", "Machop", 66),
+ ("SPECIES_MACHOKE", "Machoke", 67),
+ ("SPECIES_MACHAMP", "Machamp", 68),
+ ("SPECIES_BELLSPROUT", "Bellsprout", 69),
+ ("SPECIES_WEEPINBELL", "Weepinbell", 70),
+ ("SPECIES_VICTREEBEL", "Victreebel", 71),
+ ("SPECIES_TENTACOOL", "Tentacool", 72),
+ ("SPECIES_TENTACRUEL", "Tentacruel", 73),
+ ("SPECIES_GEODUDE", "Geodude", 74),
+ ("SPECIES_GRAVELER", "Graveler", 75),
+ ("SPECIES_GOLEM", "Golem", 76),
+ ("SPECIES_PONYTA", "Ponyta", 77),
+ ("SPECIES_RAPIDASH", "Rapidash", 78),
+ ("SPECIES_SLOWPOKE", "Slowpoke", 79),
+ ("SPECIES_SLOWBRO", "Slowbro", 80),
+ ("SPECIES_MAGNEMITE", "Magnemite", 81),
+ ("SPECIES_MAGNETON", "Magneton", 82),
+ ("SPECIES_FARFETCHD", "Farfetch'd", 83),
+ ("SPECIES_DODUO", "Doduo", 84),
+ ("SPECIES_DODRIO", "Dodrio", 85),
+ ("SPECIES_SEEL", "Seel", 86),
+ ("SPECIES_DEWGONG", "Dewgong", 87),
+ ("SPECIES_GRIMER", "Grimer", 88),
+ ("SPECIES_MUK", "Muk", 89),
+ ("SPECIES_SHELLDER", "Shellder", 90),
+ ("SPECIES_CLOYSTER", "Cloyster", 91),
+ ("SPECIES_GASTLY", "Gastly", 92),
+ ("SPECIES_HAUNTER", "Haunter", 93),
+ ("SPECIES_GENGAR", "Gengar", 94),
+ ("SPECIES_ONIX", "Onix", 95),
+ ("SPECIES_DROWZEE", "Drowzee", 96),
+ ("SPECIES_HYPNO", "Hypno", 97),
+ ("SPECIES_KRABBY", "Krabby", 98),
+ ("SPECIES_KINGLER", "Kingler", 99),
+ ("SPECIES_VOLTORB", "Voltorb", 100),
+ ("SPECIES_ELECTRODE", "Electrode", 101),
+ ("SPECIES_EXEGGCUTE", "Exeggcute", 102),
+ ("SPECIES_EXEGGUTOR", "Exeggutor", 103),
+ ("SPECIES_CUBONE", "Cubone", 104),
+ ("SPECIES_MAROWAK", "Marowak", 105),
+ ("SPECIES_HITMONLEE", "Hitmonlee", 106),
+ ("SPECIES_HITMONCHAN", "Hitmonchan", 107),
+ ("SPECIES_LICKITUNG", "Lickitung", 108),
+ ("SPECIES_KOFFING", "Koffing", 109),
+ ("SPECIES_WEEZING", "Weezing", 110),
+ ("SPECIES_RHYHORN", "Rhyhorn", 111),
+ ("SPECIES_RHYDON", "Rhydon", 112),
+ ("SPECIES_CHANSEY", "Chansey", 113),
+ ("SPECIES_TANGELA", "Tangela", 114),
+ ("SPECIES_KANGASKHAN", "Kangaskhan", 115),
+ ("SPECIES_HORSEA", "Horsea", 116),
+ ("SPECIES_SEADRA", "Seadra", 117),
+ ("SPECIES_GOLDEEN", "Goldeen", 118),
+ ("SPECIES_SEAKING", "Seaking", 119),
+ ("SPECIES_STARYU", "Staryu", 120),
+ ("SPECIES_STARMIE", "Starmie", 121),
+ ("SPECIES_MR_MIME", "Mr. Mime", 122),
+ ("SPECIES_SCYTHER", "Scyther", 123),
+ ("SPECIES_JYNX", "Jynx", 124),
+ ("SPECIES_ELECTABUZZ", "Electabuzz", 125),
+ ("SPECIES_MAGMAR", "Magmar", 126),
+ ("SPECIES_PINSIR", "Pinsir", 127),
+ ("SPECIES_TAUROS", "Tauros", 128),
+ ("SPECIES_MAGIKARP", "Magikarp", 129),
+ ("SPECIES_GYARADOS", "Gyarados", 130),
+ ("SPECIES_LAPRAS", "Lapras", 131),
+ ("SPECIES_DITTO", "Ditto", 132),
+ ("SPECIES_EEVEE", "Eevee", 133),
+ ("SPECIES_VAPOREON", "Vaporeon", 134),
+ ("SPECIES_JOLTEON", "Jolteon", 135),
+ ("SPECIES_FLAREON", "Flareon", 136),
+ ("SPECIES_PORYGON", "Porygon", 137),
+ ("SPECIES_OMANYTE", "Omanyte", 138),
+ ("SPECIES_OMASTAR", "Omastar", 139),
+ ("SPECIES_KABUTO", "Kabuto", 140),
+ ("SPECIES_KABUTOPS", "Kabutops", 141),
+ ("SPECIES_AERODACTYL", "Aerodactyl", 142),
+ ("SPECIES_SNORLAX", "Snorlax", 143),
+ ("SPECIES_ARTICUNO", "Articuno", 144),
+ ("SPECIES_ZAPDOS", "Zapdos", 145),
+ ("SPECIES_MOLTRES", "Moltres", 146),
+ ("SPECIES_DRATINI", "Dratini", 147),
+ ("SPECIES_DRAGONAIR", "Dragonair", 148),
+ ("SPECIES_DRAGONITE", "Dragonite", 149),
+ ("SPECIES_MEWTWO", "Mewtwo", 150),
+ ("SPECIES_MEW", "Mew", 151),
+ ("SPECIES_CHIKORITA", "Chikorita", 152),
+ ("SPECIES_BAYLEEF", "Bayleef", 153),
+ ("SPECIES_MEGANIUM", "Meganium", 154),
+ ("SPECIES_CYNDAQUIL", "Cindaquil", 155),
+ ("SPECIES_QUILAVA", "Quilava", 156),
+ ("SPECIES_TYPHLOSION", "Typhlosion", 157),
+ ("SPECIES_TOTODILE", "Totodile", 158),
+ ("SPECIES_CROCONAW", "Croconaw", 159),
+ ("SPECIES_FERALIGATR", "Feraligatr", 160),
+ ("SPECIES_SENTRET", "Sentret", 161),
+ ("SPECIES_FURRET", "Furret", 162),
+ ("SPECIES_HOOTHOOT", "Hoothoot", 163),
+ ("SPECIES_NOCTOWL", "Noctowl", 164),
+ ("SPECIES_LEDYBA", "Ledyba", 165),
+ ("SPECIES_LEDIAN", "Ledian", 166),
+ ("SPECIES_SPINARAK", "Spinarak", 167),
+ ("SPECIES_ARIADOS", "Ariados", 168),
+ ("SPECIES_CROBAT", "Crobat", 169),
+ ("SPECIES_CHINCHOU", "Chinchou", 170),
+ ("SPECIES_LANTURN", "Lanturn", 171),
+ ("SPECIES_PICHU", "Pichu", 172),
+ ("SPECIES_CLEFFA", "Cleffa", 173),
+ ("SPECIES_IGGLYBUFF", "Igglybuff", 174),
+ ("SPECIES_TOGEPI", "Togepi", 175),
+ ("SPECIES_TOGETIC", "Togetic", 176),
+ ("SPECIES_NATU", "Natu", 177),
+ ("SPECIES_XATU", "Xatu", 178),
+ ("SPECIES_MAREEP", "Mareep", 179),
+ ("SPECIES_FLAAFFY", "Flaaffy", 180),
+ ("SPECIES_AMPHAROS", "Ampharos", 181),
+ ("SPECIES_BELLOSSOM", "Bellossom", 182),
+ ("SPECIES_MARILL", "Marill", 183),
+ ("SPECIES_AZUMARILL", "Azumarill", 184),
+ ("SPECIES_SUDOWOODO", "Sudowoodo", 185),
+ ("SPECIES_POLITOED", "Politoed", 186),
+ ("SPECIES_HOPPIP", "Hoppip", 187),
+ ("SPECIES_SKIPLOOM", "Skiploom", 188),
+ ("SPECIES_JUMPLUFF", "Jumpluff", 189),
+ ("SPECIES_AIPOM", "Aipom", 190),
+ ("SPECIES_SUNKERN", "Sunkern", 191),
+ ("SPECIES_SUNFLORA", "Sunflora", 192),
+ ("SPECIES_YANMA", "Yanma", 193),
+ ("SPECIES_WOOPER", "Wooper", 194),
+ ("SPECIES_QUAGSIRE", "Quagsire", 195),
+ ("SPECIES_ESPEON", "Espeon", 196),
+ ("SPECIES_UMBREON", "Umbreon", 197),
+ ("SPECIES_MURKROW", "Murkrow", 198),
+ ("SPECIES_SLOWKING", "Slowking", 199),
+ ("SPECIES_MISDREAVUS", "Misdreavus", 200),
+ ("SPECIES_UNOWN", "Unown", 201),
+ ("SPECIES_WOBBUFFET", "Wobbuffet", 202),
+ ("SPECIES_GIRAFARIG", "Girafarig", 203),
+ ("SPECIES_PINECO", "Pineco", 204),
+ ("SPECIES_FORRETRESS", "Forretress", 205),
+ ("SPECIES_DUNSPARCE", "Dunsparce", 206),
+ ("SPECIES_GLIGAR", "Gligar", 207),
+ ("SPECIES_STEELIX", "Steelix", 208),
+ ("SPECIES_SNUBBULL", "Snubbull", 209),
+ ("SPECIES_GRANBULL", "Granbull", 210),
+ ("SPECIES_QWILFISH", "Qwilfish", 211),
+ ("SPECIES_SCIZOR", "Scizor", 212),
+ ("SPECIES_SHUCKLE", "Shuckle", 213),
+ ("SPECIES_HERACROSS", "Heracross", 214),
+ ("SPECIES_SNEASEL", "Sneasel", 215),
+ ("SPECIES_TEDDIURSA", "Teddiursa", 216),
+ ("SPECIES_URSARING", "Ursaring", 217),
+ ("SPECIES_SLUGMA", "Slugma", 218),
+ ("SPECIES_MAGCARGO", "Magcargo", 219),
+ ("SPECIES_SWINUB", "Swinub", 220),
+ ("SPECIES_PILOSWINE", "Piloswine", 221),
+ ("SPECIES_CORSOLA", "Corsola", 222),
+ ("SPECIES_REMORAID", "Remoraid", 223),
+ ("SPECIES_OCTILLERY", "Octillery", 224),
+ ("SPECIES_DELIBIRD", "Delibird", 225),
+ ("SPECIES_MANTINE", "Mantine", 226),
+ ("SPECIES_SKARMORY", "Skarmory", 227),
+ ("SPECIES_HOUNDOUR", "Houndour", 228),
+ ("SPECIES_HOUNDOOM", "Houndoom", 229),
+ ("SPECIES_KINGDRA", "Kingdra", 230),
+ ("SPECIES_PHANPY", "Phanpy", 231),
+ ("SPECIES_DONPHAN", "Donphan", 232),
+ ("SPECIES_PORYGON2", "Porygon2", 233),
+ ("SPECIES_STANTLER", "Stantler", 234),
+ ("SPECIES_SMEARGLE", "Smeargle", 235),
+ ("SPECIES_TYROGUE", "Tyrogue", 236),
+ ("SPECIES_HITMONTOP", "Hitmontop", 237),
+ ("SPECIES_SMOOCHUM", "Smoochum", 238),
+ ("SPECIES_ELEKID", "Elekid", 239),
+ ("SPECIES_MAGBY", "Magby", 240),
+ ("SPECIES_MILTANK", "Miltank", 241),
+ ("SPECIES_BLISSEY", "Blissey", 242),
+ ("SPECIES_RAIKOU", "Raikou", 243),
+ ("SPECIES_ENTEI", "Entei", 244),
+ ("SPECIES_SUICUNE", "Suicune", 245),
+ ("SPECIES_LARVITAR", "Larvitar", 246),
+ ("SPECIES_PUPITAR", "Pupitar", 247),
+ ("SPECIES_TYRANITAR", "Tyranitar", 248),
+ ("SPECIES_LUGIA", "Lugia", 249),
+ ("SPECIES_HO_OH", "Ho-oh", 250),
+ ("SPECIES_CELEBI", "Celebi", 251),
+ ("SPECIES_TREECKO", "Treecko", 252),
+ ("SPECIES_GROVYLE", "Grovyle", 253),
+ ("SPECIES_SCEPTILE", "Sceptile", 254),
+ ("SPECIES_TORCHIC", "Torchic", 255),
+ ("SPECIES_COMBUSKEN", "Combusken", 256),
+ ("SPECIES_BLAZIKEN", "Blaziken", 257),
+ ("SPECIES_MUDKIP", "Mudkip", 258),
+ ("SPECIES_MARSHTOMP", "Marshtomp", 259),
+ ("SPECIES_SWAMPERT", "Swampert", 260),
+ ("SPECIES_POOCHYENA", "Poochyena", 261),
+ ("SPECIES_MIGHTYENA", "Mightyena", 262),
+ ("SPECIES_ZIGZAGOON", "Zigzagoon", 263),
+ ("SPECIES_LINOONE", "Linoone", 264),
+ ("SPECIES_WURMPLE", "Wurmple", 265),
+ ("SPECIES_SILCOON", "Silcoon", 266),
+ ("SPECIES_BEAUTIFLY", "Beautifly", 267),
+ ("SPECIES_CASCOON", "Cascoon", 268),
+ ("SPECIES_DUSTOX", "Dustox", 269),
+ ("SPECIES_LOTAD", "Lotad", 270),
+ ("SPECIES_LOMBRE", "Lombre", 271),
+ ("SPECIES_LUDICOLO", "Ludicolo", 272),
+ ("SPECIES_SEEDOT", "Seedot", 273),
+ ("SPECIES_NUZLEAF", "Nuzleaf", 274),
+ ("SPECIES_SHIFTRY", "Shiftry", 275),
+ ("SPECIES_NINCADA", "Nincada", 290),
+ ("SPECIES_NINJASK", "Ninjask", 291),
+ ("SPECIES_SHEDINJA", "Shedinja", 292),
+ ("SPECIES_TAILLOW", "Taillow", 276),
+ ("SPECIES_SWELLOW", "Swellow", 277),
+ ("SPECIES_SHROOMISH", "Shroomish", 285),
+ ("SPECIES_BRELOOM", "Breloom", 286),
+ ("SPECIES_SPINDA", "Spinda", 327),
+ ("SPECIES_WINGULL", "Wingull", 278),
+ ("SPECIES_PELIPPER", "Pelipper", 279),
+ ("SPECIES_SURSKIT", "Surskit", 283),
+ ("SPECIES_MASQUERAIN", "Masquerain", 284),
+ ("SPECIES_WAILMER", "Wailmer", 320),
+ ("SPECIES_WAILORD", "Wailord", 321),
+ ("SPECIES_SKITTY", "Skitty", 300),
+ ("SPECIES_DELCATTY", "Delcatty", 301),
+ ("SPECIES_KECLEON", "Kecleon", 352),
+ ("SPECIES_BALTOY", "Baltoy", 343),
+ ("SPECIES_CLAYDOL", "Claydol", 344),
+ ("SPECIES_NOSEPASS", "Nosepass", 299),
+ ("SPECIES_TORKOAL", "Torkoal", 324),
+ ("SPECIES_SABLEYE", "Sableye", 302),
+ ("SPECIES_BARBOACH", "Barboach", 339),
+ ("SPECIES_WHISCASH", "Whiscash", 340),
+ ("SPECIES_LUVDISC", "Luvdisc", 370),
+ ("SPECIES_CORPHISH", "Corphish", 341),
+ ("SPECIES_CRAWDAUNT", "Crawdaunt", 342),
+ ("SPECIES_FEEBAS", "Feebas", 349),
+ ("SPECIES_MILOTIC", "Milotic", 350),
+ ("SPECIES_CARVANHA", "Carvanha", 318),
+ ("SPECIES_SHARPEDO", "Sharpedo", 319),
+ ("SPECIES_TRAPINCH", "Trapinch", 328),
+ ("SPECIES_VIBRAVA", "Vibrava", 329),
+ ("SPECIES_FLYGON", "Flygon", 330),
+ ("SPECIES_MAKUHITA", "Makuhita", 296),
+ ("SPECIES_HARIYAMA", "Hariyama", 297),
+ ("SPECIES_ELECTRIKE", "Electrike", 309),
+ ("SPECIES_MANECTRIC", "Manectric", 310),
+ ("SPECIES_NUMEL", "Numel", 322),
+ ("SPECIES_CAMERUPT", "Camerupt", 323),
+ ("SPECIES_SPHEAL", "Spheal", 363),
+ ("SPECIES_SEALEO", "Sealeo", 364),
+ ("SPECIES_WALREIN", "Walrein", 365),
+ ("SPECIES_CACNEA", "Cacnea", 331),
+ ("SPECIES_CACTURNE", "Cacturne", 332),
+ ("SPECIES_SNORUNT", "Snorunt", 361),
+ ("SPECIES_GLALIE", "Glalie", 362),
+ ("SPECIES_LUNATONE", "Lunatone", 337),
+ ("SPECIES_SOLROCK", "Solrock", 338),
+ ("SPECIES_AZURILL", "Azurill", 298),
+ ("SPECIES_SPOINK", "Spoink", 325),
+ ("SPECIES_GRUMPIG", "Grumpig", 326),
+ ("SPECIES_PLUSLE", "Plusle", 311),
+ ("SPECIES_MINUN", "Minun", 312),
+ ("SPECIES_MAWILE", "Mawile", 303),
+ ("SPECIES_MEDITITE", "Meditite", 307),
+ ("SPECIES_MEDICHAM", "Medicham", 308),
+ ("SPECIES_SWABLU", "Swablu", 333),
+ ("SPECIES_ALTARIA", "Altaria", 334),
+ ("SPECIES_WYNAUT", "Wynaut", 360),
+ ("SPECIES_DUSKULL", "Duskull", 355),
+ ("SPECIES_DUSCLOPS", "Dusclops", 356),
+ ("SPECIES_ROSELIA", "Roselia", 315),
+ ("SPECIES_SLAKOTH", "Slakoth", 287),
+ ("SPECIES_VIGOROTH", "Vigoroth", 288),
+ ("SPECIES_SLAKING", "Slaking", 289),
+ ("SPECIES_GULPIN", "Gulpin", 316),
+ ("SPECIES_SWALOT", "Swalot", 317),
+ ("SPECIES_TROPIUS", "Tropius", 357),
+ ("SPECIES_WHISMUR", "Whismur", 293),
+ ("SPECIES_LOUDRED", "Loudred", 294),
+ ("SPECIES_EXPLOUD", "Exploud", 295),
+ ("SPECIES_CLAMPERL", "Clamperl", 366),
+ ("SPECIES_HUNTAIL", "Huntail", 367),
+ ("SPECIES_GOREBYSS", "Gorebyss", 368),
+ ("SPECIES_ABSOL", "Absol", 359),
+ ("SPECIES_SHUPPET", "Shuppet", 353),
+ ("SPECIES_BANETTE", "Banette", 354),
+ ("SPECIES_SEVIPER", "Seviper", 336),
+ ("SPECIES_ZANGOOSE", "Zangoose", 335),
+ ("SPECIES_RELICANTH", "Relicanth", 369),
+ ("SPECIES_ARON", "Aron", 304),
+ ("SPECIES_LAIRON", "Lairon", 305),
+ ("SPECIES_AGGRON", "Aggron", 306),
+ ("SPECIES_CASTFORM", "Castform", 351),
+ ("SPECIES_VOLBEAT", "Volbeat", 313),
+ ("SPECIES_ILLUMISE", "Illumise", 314),
+ ("SPECIES_LILEEP", "Lileep", 345),
+ ("SPECIES_CRADILY", "Cradily", 346),
+ ("SPECIES_ANORITH", "Anorith", 347),
+ ("SPECIES_ARMALDO", "Armaldo", 348),
+ ("SPECIES_RALTS", "Ralts", 280),
+ ("SPECIES_KIRLIA", "Kirlia", 281),
+ ("SPECIES_GARDEVOIR", "Gardevoir", 282),
+ ("SPECIES_BAGON", "Bagon", 371),
+ ("SPECIES_SHELGON", "Shelgon", 372),
+ ("SPECIES_SALAMENCE", "Salamence", 373),
+ ("SPECIES_BELDUM", "Beldum", 374),
+ ("SPECIES_METANG", "Metang", 375),
+ ("SPECIES_METAGROSS", "Metagross", 376),
+ ("SPECIES_REGIROCK", "Regirock", 377),
+ ("SPECIES_REGICE", "Regice", 378),
+ ("SPECIES_REGISTEEL", "Registeel", 379),
+ ("SPECIES_KYOGRE", "Kyogre", 382),
+ ("SPECIES_GROUDON", "Groudon", 383),
+ ("SPECIES_RAYQUAZA", "Rayquaza", 384),
+ ("SPECIES_LATIAS", "Latias", 380),
+ ("SPECIES_LATIOS", "Latios", 381),
+ ("SPECIES_JIRACHI", "Jirachi", 385),
+ ("SPECIES_DEOXYS", "Deoxys", 386),
+ ("SPECIES_CHIMECHO", "Chimecho", 358),
]
- species_list: List[SpeciesData] = []
max_species_id = 0
- for species_name, species_label in all_species:
+ for species_name, species_label, species_dex_number 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(
+ data.species[species_id] = SpeciesData(
species_name,
species_label,
species_id,
+ species_dex_number,
BaseStats(
species_data["base_stats"][0],
species_data["base_stats"][1],
@@ -827,27 +910,52 @@ def _init() -> None:
) for evolution_json in species_data["evolutions"]],
None,
species_data["catch_rate"],
+ species_data["friendship"],
learnset,
int(species_data["tmhm_learnset"], 16),
- species_data["learnset"]["rom_address"],
- species_data["rom_address"]
+ species_data["learnset"]["address"],
+ species_data["address"]
+ )
+
+ for species in data.species.values():
+ for evolution in species.evolutions:
+ data.species[evolution.species_id].pre_evolution = species.species_id
+
+ # Replace default item for dex entry locations based on evo stage of species
+ evo_stage_to_ball_map = {
+ 0: data.constants["ITEM_POKE_BALL"],
+ 1: data.constants["ITEM_GREAT_BALL"],
+ 2: data.constants["ITEM_ULTRA_BALL"],
+ }
+ for species in data.species.values():
+ evo_stage = 0
+ pre_evolution = species.pre_evolution
+ while pre_evolution is not None:
+ evo_stage += 1
+ pre_evolution = data.species[pre_evolution].pre_evolution
+
+ dex_location_name = f"POKEDEX_REWARD_{str(species.national_dex_number).zfill(3)}"
+ data.locations[dex_location_name] = LocationData(
+ data.locations[dex_location_name].name,
+ data.locations[dex_location_name].label,
+ data.locations[dex_location_name].parent_region,
+ evo_stage_to_ball_map[evo_stage],
+ data.locations[dex_location_name].address,
+ data.locations[dex_location_name].flag,
+ data.locations[dex_location_name].tags
+ )
+
+ # Create legendary encounter data
+ for legendary_encounter_json in extracted_data["legendary_encounters"]:
+ data.legendary_encounters.append(MiscPokemonData(
+ legendary_encounter_json["species"],
+ legendary_encounter_json["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"]
+ for misc_pokemon_json in extracted_data["misc_pokemon"]:
+ data.misc_pokemon.append(MiscPokemonData(
+ misc_pokemon_json["species"],
+ misc_pokemon_json["address"]
))
# TM moves
@@ -868,7 +976,7 @@ def _init() -> None:
("ABILITY_WATER_ABSORB", "Water Absorb"),
("ABILITY_OBLIVIOUS", "Oblivious"),
("ABILITY_CLOUD_NINE", "Cloud Nine"),
- ("ABILITY_COMPOUND_EYES", "Compound Eyes"),
+ ("ABILITY_COMPOUND_EYES", "Compoundeyes"),
("ABILITY_INSOMNIA", "Insomnia"),
("ABILITY_COLOR_CHANGE", "Color Change"),
("ABILITY_IMMUNITY", "Immunity"),
@@ -885,7 +993,7 @@ def _init() -> None:
("ABILITY_SYNCHRONIZE", "Synchronize"),
("ABILITY_CLEAR_BODY", "Clear Body"),
("ABILITY_NATURAL_CURE", "Natural Cure"),
- ("ABILITY_LIGHTNING_ROD", "Lightning Rod"),
+ ("ABILITY_LIGHTNING_ROD", "Lightningrod"),
("ABILITY_SERENE_GRACE", "Serene Grace"),
("ABILITY_SWIFT_SWIM", "Swift Swim"),
("ABILITY_CHLOROPHYLL", "Chlorophyll"),
@@ -934,36 +1042,362 @@ def _init() -> None:
("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)
+ # Move labels
+ data.move_labels = {r: data.constants[l] for l, r in [
+ ("MOVE_POUND", "Pound"),
+ ("MOVE_KARATE_CHOP", "Karate Chop"),
+ ("MOVE_DOUBLE_SLAP", "Doubleslap"),
+ ("MOVE_COMET_PUNCH", "Comet Punch"),
+ ("MOVE_MEGA_PUNCH", "Mega Punch"),
+ ("MOVE_PAY_DAY", "Pay Day"),
+ ("MOVE_FIRE_PUNCH", "Fire Punch"),
+ ("MOVE_ICE_PUNCH", "Ice Punch"),
+ ("MOVE_THUNDER_PUNCH", "Thunderpunch"),
+ ("MOVE_SCRATCH", "Scratch"),
+ ("MOVE_VICE_GRIP", "Vicegrip"),
+ ("MOVE_GUILLOTINE", "Guillotine"),
+ ("MOVE_RAZOR_WIND", "Razor Wind"),
+ ("MOVE_SWORDS_DANCE", "Swords Dance"),
+ ("MOVE_CUT", "Cut"),
+ ("MOVE_GUST", "Gust"),
+ ("MOVE_WING_ATTACK", "Wing Attack"),
+ ("MOVE_WHIRLWIND", "Whirlwind"),
+ ("MOVE_FLY", "Fly"),
+ ("MOVE_BIND", "Bind"),
+ ("MOVE_SLAM", "Slam"),
+ ("MOVE_VINE_WHIP", "Vine Whip"),
+ ("MOVE_STOMP", "Stomp"),
+ ("MOVE_DOUBLE_KICK", "Double Kick"),
+ ("MOVE_MEGA_KICK", "Mega Kick"),
+ ("MOVE_JUMP_KICK", "Jump Kick"),
+ ("MOVE_ROLLING_KICK", "Rolling Kick"),
+ ("MOVE_SAND_ATTACK", "Sand-Attack"),
+ ("MOVE_HEADBUTT", "Headbutt"),
+ ("MOVE_HORN_ATTACK", "Horn Attack"),
+ ("MOVE_FURY_ATTACK", "Fury Attack"),
+ ("MOVE_HORN_DRILL", "Horn Drill"),
+ ("MOVE_TACKLE", "Tackle"),
+ ("MOVE_BODY_SLAM", "Body Slam"),
+ ("MOVE_WRAP", "Wrap"),
+ ("MOVE_TAKE_DOWN", "Take Down"),
+ ("MOVE_THRASH", "Thrash"),
+ ("MOVE_DOUBLE_EDGE", "Double-Edge"),
+ ("MOVE_TAIL_WHIP", "Tail Whip"),
+ ("MOVE_POISON_STING", "Poison Sting"),
+ ("MOVE_TWINEEDLE", "Twineedle"),
+ ("MOVE_PIN_MISSILE", "Pin Missile"),
+ ("MOVE_LEER", "Leer"),
+ ("MOVE_BITE", "Bite"),
+ ("MOVE_GROWL", "Growl"),
+ ("MOVE_ROAR", "Roar"),
+ ("MOVE_SING", "Sing"),
+ ("MOVE_SUPERSONIC", "Supersonic"),
+ ("MOVE_SONIC_BOOM", "Sonicboom"),
+ ("MOVE_DISABLE", "Disable"),
+ ("MOVE_ACID", "Acid"),
+ ("MOVE_EMBER", "Ember"),
+ ("MOVE_FLAMETHROWER", "Flamethrower"),
+ ("MOVE_MIST", "Mist"),
+ ("MOVE_WATER_GUN", "Water Gun"),
+ ("MOVE_HYDRO_PUMP", "Hydro Pump"),
+ ("MOVE_SURF", "Surf"),
+ ("MOVE_ICE_BEAM", "Ice Beam"),
+ ("MOVE_BLIZZARD", "Blizzard"),
+ ("MOVE_PSYBEAM", "Psybeam"),
+ ("MOVE_BUBBLE_BEAM", "Bubblebeam"),
+ ("MOVE_AURORA_BEAM", "Aurora Beam"),
+ ("MOVE_HYPER_BEAM", "Hyper Beam"),
+ ("MOVE_PECK", "Peck"),
+ ("MOVE_DRILL_PECK", "Drill Peck"),
+ ("MOVE_SUBMISSION", "Submission"),
+ ("MOVE_LOW_KICK", "Low Kick"),
+ ("MOVE_COUNTER", "Counter"),
+ ("MOVE_SEISMIC_TOSS", "Seismic Toss"),
+ ("MOVE_STRENGTH", "Strength"),
+ ("MOVE_ABSORB", "Absorb"),
+ ("MOVE_MEGA_DRAIN", "Mega Drain"),
+ ("MOVE_LEECH_SEED", "Leech Seed"),
+ ("MOVE_GROWTH", "Growth"),
+ ("MOVE_RAZOR_LEAF", "Razor Leaf"),
+ ("MOVE_SOLAR_BEAM", "Solarbeam"),
+ ("MOVE_POISON_POWDER", "Poisonpowder"),
+ ("MOVE_STUN_SPORE", "Stun Spore"),
+ ("MOVE_SLEEP_POWDER", "Sleep Powder"),
+ ("MOVE_PETAL_DANCE", "Petal Dance"),
+ ("MOVE_STRING_SHOT", "String Shot"),
+ ("MOVE_DRAGON_RAGE", "Dragon Rage"),
+ ("MOVE_FIRE_SPIN", "Fire Spin"),
+ ("MOVE_THUNDER_SHOCK", "Thundershock"),
+ ("MOVE_THUNDERBOLT", "Thunderbolt"),
+ ("MOVE_THUNDER_WAVE", "Thunder Wave"),
+ ("MOVE_THUNDER", "Thunder"),
+ ("MOVE_ROCK_THROW", "Rock Throw"),
+ ("MOVE_EARTHQUAKE", "Earthquake"),
+ ("MOVE_FISSURE", "Fissure"),
+ ("MOVE_DIG", "Dig"),
+ ("MOVE_TOXIC", "Toxic"),
+ ("MOVE_CONFUSION", "Confusion"),
+ ("MOVE_PSYCHIC", "Psychic"),
+ ("MOVE_HYPNOSIS", "Hypnosis"),
+ ("MOVE_MEDITATE", "Meditate"),
+ ("MOVE_AGILITY", "Agility"),
+ ("MOVE_QUICK_ATTACK", "Quick Attack"),
+ ("MOVE_RAGE", "Rage"),
+ ("MOVE_TELEPORT", "Teleport"),
+ ("MOVE_NIGHT_SHADE", "Night Shade"),
+ ("MOVE_MIMIC", "Mimic"),
+ ("MOVE_SCREECH", "Screech"),
+ ("MOVE_DOUBLE_TEAM", "Double Team"),
+ ("MOVE_RECOVER", "Recover"),
+ ("MOVE_HARDEN", "Harden"),
+ ("MOVE_MINIMIZE", "Minimize"),
+ ("MOVE_SMOKESCREEN", "Smokescreen"),
+ ("MOVE_CONFUSE_RAY", "Confuse Ray"),
+ ("MOVE_WITHDRAW", "Withdraw"),
+ ("MOVE_DEFENSE_CURL", "Defense Curl"),
+ ("MOVE_BARRIER", "Barrier"),
+ ("MOVE_LIGHT_SCREEN", "Light Screen"),
+ ("MOVE_HAZE", "Haze"),
+ ("MOVE_REFLECT", "Reflect"),
+ ("MOVE_FOCUS_ENERGY", "Focus Energy"),
+ ("MOVE_BIDE", "Bide"),
+ ("MOVE_METRONOME", "Metronome"),
+ ("MOVE_MIRROR_MOVE", "Mirror Move"),
+ ("MOVE_SELF_DESTRUCT", "Selfdestruct"),
+ ("MOVE_EGG_BOMB", "Egg Bomb"),
+ ("MOVE_LICK", "Lick"),
+ ("MOVE_SMOG", "Smog"),
+ ("MOVE_SLUDGE", "Sludge"),
+ ("MOVE_BONE_CLUB", "Bone Club"),
+ ("MOVE_FIRE_BLAST", "Fire Blast"),
+ ("MOVE_WATERFALL", "Waterfall"),
+ ("MOVE_CLAMP", "Clamp"),
+ ("MOVE_SWIFT", "Swift"),
+ ("MOVE_SKULL_BASH", "Skull Bash"),
+ ("MOVE_SPIKE_CANNON", "Spike Cannon"),
+ ("MOVE_CONSTRICT", "Constrict"),
+ ("MOVE_AMNESIA", "Amnesia"),
+ ("MOVE_KINESIS", "Kinesis"),
+ ("MOVE_SOFT_BOILED", "Softboiled"),
+ ("MOVE_HI_JUMP_KICK", "Hi Jump Kick"),
+ ("MOVE_GLARE", "Glare"),
+ ("MOVE_DREAM_EATER", "Dream Eater"),
+ ("MOVE_POISON_GAS", "Poison Gas"),
+ ("MOVE_BARRAGE", "Barrage"),
+ ("MOVE_LEECH_LIFE", "Leech Life"),
+ ("MOVE_LOVELY_KISS", "Lovely Kiss"),
+ ("MOVE_SKY_ATTACK", "Sky Attack"),
+ ("MOVE_TRANSFORM", "Transform"),
+ ("MOVE_BUBBLE", "Bubble"),
+ ("MOVE_DIZZY_PUNCH", "Dizzy Punch"),
+ ("MOVE_SPORE", "Spore"),
+ ("MOVE_FLASH", "Flash"),
+ ("MOVE_PSYWAVE", "Psywave"),
+ ("MOVE_SPLASH", "Splash"),
+ ("MOVE_ACID_ARMOR", "Acid Armor"),
+ ("MOVE_CRABHAMMER", "Crabhammer"),
+ ("MOVE_EXPLOSION", "Explosion"),
+ ("MOVE_FURY_SWIPES", "Fury Swipes"),
+ ("MOVE_BONEMERANG", "Bonemerang"),
+ ("MOVE_REST", "Rest"),
+ ("MOVE_ROCK_SLIDE", "Rock Slide"),
+ ("MOVE_HYPER_FANG", "Hyper Fang"),
+ ("MOVE_SHARPEN", "Sharpen"),
+ ("MOVE_CONVERSION", "Conversion"),
+ ("MOVE_TRI_ATTACK", "Tri Attack"),
+ ("MOVE_SUPER_FANG", "Super Fang"),
+ ("MOVE_SLASH", "Slash"),
+ ("MOVE_SUBSTITUTE", "Substitute"),
+ ("MOVE_SKETCH", "Sketch"),
+ ("MOVE_TRIPLE_KICK", "Triple Kick"),
+ ("MOVE_THIEF", "Thief"),
+ ("MOVE_SPIDER_WEB", "Spider Web"),
+ ("MOVE_MIND_READER", "Mind Reader"),
+ ("MOVE_NIGHTMARE", "Nightmare"),
+ ("MOVE_FLAME_WHEEL", "Flame Wheel"),
+ ("MOVE_SNORE", "Snore"),
+ ("MOVE_CURSE", "Curse"),
+ ("MOVE_FLAIL", "Flail"),
+ ("MOVE_CONVERSION_2", "Conversion 2"),
+ ("MOVE_AEROBLAST", "Aeroblast"),
+ ("MOVE_COTTON_SPORE", "Cotton Spore"),
+ ("MOVE_REVERSAL", "Reversal"),
+ ("MOVE_SPITE", "Spite"),
+ ("MOVE_POWDER_SNOW", "Powder Snow"),
+ ("MOVE_PROTECT", "Protect"),
+ ("MOVE_MACH_PUNCH", "Mach Punch"),
+ ("MOVE_SCARY_FACE", "Scary Face"),
+ ("MOVE_FAINT_ATTACK", "Faint Attack"),
+ ("MOVE_SWEET_KISS", "Sweet Kiss"),
+ ("MOVE_BELLY_DRUM", "Belly Drum"),
+ ("MOVE_SLUDGE_BOMB", "Sludge Bomb"),
+ ("MOVE_MUD_SLAP", "Mud-Slap"),
+ ("MOVE_OCTAZOOKA", "Octazooka"),
+ ("MOVE_SPIKES", "Spikes"),
+ ("MOVE_ZAP_CANNON", "Zap Cannon"),
+ ("MOVE_FORESIGHT", "Foresight"),
+ ("MOVE_DESTINY_BOND", "Destiny Bond"),
+ ("MOVE_PERISH_SONG", "Perish Song"),
+ ("MOVE_ICY_WIND", "Icy Wind"),
+ ("MOVE_DETECT", "Detect"),
+ ("MOVE_BONE_RUSH", "Bone Rush"),
+ ("MOVE_LOCK_ON", "Lock-On"),
+ ("MOVE_OUTRAGE", "Outrage"),
+ ("MOVE_SANDSTORM", "Sandstorm"),
+ ("MOVE_GIGA_DRAIN", "Giga Drain"),
+ ("MOVE_ENDURE", "Endure"),
+ ("MOVE_CHARM", "Charm"),
+ ("MOVE_ROLLOUT", "Rollout"),
+ ("MOVE_FALSE_SWIPE", "False Swipe"),
+ ("MOVE_SWAGGER", "Swagger"),
+ ("MOVE_MILK_DRINK", "Milk Drink"),
+ ("MOVE_SPARK", "Spark"),
+ ("MOVE_FURY_CUTTER", "Fury Cutter"),
+ ("MOVE_STEEL_WING", "Steel Wing"),
+ ("MOVE_MEAN_LOOK", "Mean Look"),
+ ("MOVE_ATTRACT", "Attract"),
+ ("MOVE_SLEEP_TALK", "Sleep Talk"),
+ ("MOVE_HEAL_BELL", "Heal Bell"),
+ ("MOVE_RETURN", "Return"),
+ ("MOVE_PRESENT", "Present"),
+ ("MOVE_FRUSTRATION", "Frustration"),
+ ("MOVE_SAFEGUARD", "Safeguard"),
+ ("MOVE_PAIN_SPLIT", "Pain Split"),
+ ("MOVE_SACRED_FIRE", "Sacred Fire"),
+ ("MOVE_MAGNITUDE", "Magnitude"),
+ ("MOVE_DYNAMIC_PUNCH", "Dynamicpunch"),
+ ("MOVE_MEGAHORN", "Megahorn"),
+ ("MOVE_DRAGON_BREATH", "Dragonbreath"),
+ ("MOVE_BATON_PASS", "Baton Pass"),
+ ("MOVE_ENCORE", "Encore"),
+ ("MOVE_PURSUIT", "Pursuit"),
+ ("MOVE_RAPID_SPIN", "Rapid Spin"),
+ ("MOVE_SWEET_SCENT", "Sweet Scent"),
+ ("MOVE_IRON_TAIL", "Iron Tail"),
+ ("MOVE_METAL_CLAW", "Metal Claw"),
+ ("MOVE_VITAL_THROW", "Vital Throw"),
+ ("MOVE_MORNING_SUN", "Morning Sun"),
+ ("MOVE_SYNTHESIS", "Synthesis"),
+ ("MOVE_MOONLIGHT", "Moonlight"),
+ ("MOVE_HIDDEN_POWER", "Hidden Power"),
+ ("MOVE_CROSS_CHOP", "Cross Chop"),
+ ("MOVE_TWISTER", "Twister"),
+ ("MOVE_RAIN_DANCE", "Rain Dance"),
+ ("MOVE_SUNNY_DAY", "Sunny Day"),
+ ("MOVE_CRUNCH", "Crunch"),
+ ("MOVE_MIRROR_COAT", "Mirror Coat"),
+ ("MOVE_PSYCH_UP", "Psych Up"),
+ ("MOVE_EXTREME_SPEED", "Extremespeed"),
+ ("MOVE_ANCIENT_POWER", "Ancientpower"),
+ ("MOVE_SHADOW_BALL", "Shadow Ball"),
+ ("MOVE_FUTURE_SIGHT", "Future Sight"),
+ ("MOVE_ROCK_SMASH", "Rock Smash"),
+ ("MOVE_WHIRLPOOL", "Whirlpool"),
+ ("MOVE_BEAT_UP", "Beat Up"),
+ ("MOVE_FAKE_OUT", "Fake Out"),
+ ("MOVE_UPROAR", "Uproar"),
+ ("MOVE_STOCKPILE", "Stockpile"),
+ ("MOVE_SPIT_UP", "Spit Up"),
+ ("MOVE_SWALLOW", "Swallow"),
+ ("MOVE_HEAT_WAVE", "Heat Wave"),
+ ("MOVE_HAIL", "Hail"),
+ ("MOVE_TORMENT", "Torment"),
+ ("MOVE_FLATTER", "Flatter"),
+ ("MOVE_WILL_O_WISP", "Will-O-Wisp"),
+ ("MOVE_MEMENTO", "Memento"),
+ ("MOVE_FACADE", "Facade"),
+ ("MOVE_FOCUS_PUNCH", "Focus Punch"),
+ ("MOVE_SMELLING_SALT", "Smellingsalt"),
+ ("MOVE_FOLLOW_ME", "Follow Me"),
+ ("MOVE_NATURE_POWER", "Nature Power"),
+ ("MOVE_CHARGE", "Charge"),
+ ("MOVE_TAUNT", "Taunt"),
+ ("MOVE_HELPING_HAND", "Helping Hand"),
+ ("MOVE_TRICK", "Trick"),
+ ("MOVE_ROLE_PLAY", "Role Play"),
+ ("MOVE_WISH", "Wish"),
+ ("MOVE_ASSIST", "Assist"),
+ ("MOVE_INGRAIN", "Ingrain"),
+ ("MOVE_SUPERPOWER", "Superpower"),
+ ("MOVE_MAGIC_COAT", "Magic Coat"),
+ ("MOVE_RECYCLE", "Recycle"),
+ ("MOVE_REVENGE", "Revenge"),
+ ("MOVE_BRICK_BREAK", "Brick Break"),
+ ("MOVE_YAWN", "Yawn"),
+ ("MOVE_KNOCK_OFF", "Knock Off"),
+ ("MOVE_ENDEAVOR", "Endeavor"),
+ ("MOVE_ERUPTION", "Eruption"),
+ ("MOVE_SKILL_SWAP", "Skill Swap"),
+ ("MOVE_IMPRISON", "Imprison"),
+ ("MOVE_REFRESH", "Refresh"),
+ ("MOVE_GRUDGE", "Grudge"),
+ ("MOVE_SNATCH", "Snatch"),
+ ("MOVE_SECRET_POWER", "Secret Power"),
+ ("MOVE_DIVE", "Dive"),
+ ("MOVE_ARM_THRUST", "Arm Thrust"),
+ ("MOVE_CAMOUFLAGE", "Camouflage"),
+ ("MOVE_TAIL_GLOW", "Tail Glow"),
+ ("MOVE_LUSTER_PURGE", "Luster Purge"),
+ ("MOVE_MIST_BALL", "Mist Ball"),
+ ("MOVE_FEATHER_DANCE", "Featherdance"),
+ ("MOVE_TEETER_DANCE", "Teeter Dance"),
+ ("MOVE_BLAZE_KICK", "Blaze Kick"),
+ ("MOVE_MUD_SPORT", "Mud Sport"),
+ ("MOVE_ICE_BALL", "Ice Ball"),
+ ("MOVE_NEEDLE_ARM", "Needle Arm"),
+ ("MOVE_SLACK_OFF", "Slack Off"),
+ ("MOVE_HYPER_VOICE", "Hyper Voice"),
+ ("MOVE_POISON_FANG", "Poison Fang"),
+ ("MOVE_CRUSH_CLAW", "Crush Claw"),
+ ("MOVE_BLAST_BURN", "Blast Burn"),
+ ("MOVE_HYDRO_CANNON", "Hydro Cannon"),
+ ("MOVE_METEOR_MASH", "Meteor Mash"),
+ ("MOVE_ASTONISH", "Astonish"),
+ ("MOVE_WEATHER_BALL", "Weather Ball"),
+ ("MOVE_AROMATHERAPY", "Aromatherapy"),
+ ("MOVE_FAKE_TEARS", "Fake Tears"),
+ ("MOVE_AIR_CUTTER", "Air Cutter"),
+ ("MOVE_OVERHEAT", "Overheat"),
+ ("MOVE_ODOR_SLEUTH", "Odor Sleuth"),
+ ("MOVE_ROCK_TOMB", "Rock Tomb"),
+ ("MOVE_SILVER_WIND", "Silver Wind"),
+ ("MOVE_METAL_SOUND", "Metal Sound"),
+ ("MOVE_GRASS_WHISTLE", "Grasswhistle"),
+ ("MOVE_TICKLE", "Tickle"),
+ ("MOVE_COSMIC_POWER", "Cosmic Power"),
+ ("MOVE_WATER_SPOUT", "Water Spout"),
+ ("MOVE_SIGNAL_BEAM", "Signal Beam"),
+ ("MOVE_SHADOW_PUNCH", "Shadow Punch"),
+ ("MOVE_EXTRASENSORY", "Extrasensory"),
+ ("MOVE_SKY_UPPERCUT", "Sky Uppercut"),
+ ("MOVE_SAND_TOMB", "Sand Tomb"),
+ ("MOVE_SHEER_COLD", "Sheer Cold"),
+ ("MOVE_MUDDY_WATER", "Muddy Water"),
+ ("MOVE_BULLET_SEED", "Bullet Seed"),
+ ("MOVE_AERIAL_ACE", "Aerial Ace"),
+ ("MOVE_ICICLE_SPEAR", "Icicle Spear"),
+ ("MOVE_IRON_DEFENSE", "Iron Defense"),
+ ("MOVE_BLOCK", "Block"),
+ ("MOVE_HOWL", "Howl"),
+ ("MOVE_DRAGON_CLAW", "Dragon Claw"),
+ ("MOVE_FRENZY_PLANT", "Frenzy Plant"),
+ ("MOVE_BULK_UP", "Bulk Up"),
+ ("MOVE_BOUNCE", "Bounce"),
+ ("MOVE_MUD_SHOT", "Mud Shot"),
+ ("MOVE_POISON_TAIL", "Poison Tail"),
+ ("MOVE_COVET", "Covet"),
+ ("MOVE_VOLT_TACKLE", "Volt Tackle"),
+ ("MOVE_MAGICAL_LEAF", "Magical Leaf"),
+ ("MOVE_WATER_SPORT", "Water Sport"),
+ ("MOVE_CALM_MIND", "Calm Mind"),
+ ("MOVE_LEAF_BLADE", "Leaf Blade"),
+ ("MOVE_DRAGON_DANCE", "Dragon Dance"),
+ ("MOVE_ROCK_BLAST", "Rock Blast"),
+ ("MOVE_SHOCK_WAVE", "Shock Wave"),
+ ("MOVE_WATER_PULSE", "Water Pulse"),
+ ("MOVE_DOOM_DESIRE", "Doom Desire"),
+ ("MOVE_PSYCHO_BOOST", "Psycho Boost"),
+ ]}
# Create warp map
for warp, destination in extracted_data["warps"].items():
@@ -975,21 +1409,56 @@ def _init() -> 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"])
+ pokemon_data_type = _str_to_pokemon_data_type(trainer_json["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])
+ (p["moves"][0], p["moves"][1], p["moves"][2], p["moves"][3]) if "moves" in p else None
) for p in party_json],
pokemon_data_type,
- trainer_json["party_rom_address"]
+ trainer_json["party_address"]
),
- trainer_json["rom_address"],
- trainer_json["battle_script_rom_address"]
+ trainer_json["address"],
+ trainer_json["script_address"]
))
+data = PokemonEmeraldData()
_init()
+
+LEGENDARY_POKEMON = frozenset([data.constants[species] for species in [
+ "SPECIES_ARTICUNO",
+ "SPECIES_ZAPDOS",
+ "SPECIES_MOLTRES",
+ "SPECIES_MEWTWO",
+ "SPECIES_MEW",
+ "SPECIES_RAIKOU",
+ "SPECIES_ENTEI",
+ "SPECIES_SUICUNE",
+ "SPECIES_LUGIA",
+ "SPECIES_HO_OH",
+ "SPECIES_CELEBI",
+ "SPECIES_REGIROCK",
+ "SPECIES_REGICE",
+ "SPECIES_REGISTEEL",
+ "SPECIES_LATIAS",
+ "SPECIES_LATIOS",
+ "SPECIES_KYOGRE",
+ "SPECIES_GROUDON",
+ "SPECIES_RAYQUAZA",
+ "SPECIES_JIRACHI",
+ "SPECIES_DEOXYS",
+]])
+"""Species IDs of legendary pokemon"""
+
+UNEVOLVED_POKEMON = frozenset({
+ species.species_id
+ for species in data.species.values()
+ if len(species.evolutions) > 0
+})
+"""Species IDs of pokemon which have further evolution stages in the vanilla game"""
+
+NATIONAL_ID_TO_SPECIES_ID = {species.national_dex_number: i for i, species in data.species.items()}
diff --git a/worlds/pokemon_emerald/data/base_patch.bsdiff4 b/worlds/pokemon_emerald/data/base_patch.bsdiff4
index c1843904a9..0da226f617 100644
Binary files a/worlds/pokemon_emerald/data/base_patch.bsdiff4 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
index 6174cd4885..e12620683c 100644
--- a/worlds/pokemon_emerald/data/extracted_data.json
+++ b/worlds/pokemon_emerald/data/extracted_data.json
@@ -1 +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"}}
+{"_comment":"DO NOT MODIFY. This file was auto-generated. Your changes will likely be overwritten.","_rom_name":"pokemon emerald version / AP 5","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,"BERRY_FIRMNESS_HARD":3,"BERRY_FIRMNESS_SOFT":2,"BERRY_FIRMNESS_SUPER_HARD":5,"BERRY_FIRMNESS_UNKNOWN":0,"BERRY_FIRMNESS_VERY_HARD":4,"BERRY_FIRMNESS_VERY_SOFT":1,"BERRY_NONE":0,"BERRY_STAGE_BERRIES":5,"BERRY_STAGE_FLOWERING":4,"BERRY_STAGE_NO_BERRY":0,"BERRY_STAGE_PLANTED":1,"BERRY_STAGE_SPARKLING":255,"BERRY_STAGE_SPROUTED":2,"BERRY_STAGE_TALLER":3,"BERRY_TREES_COUNT":128,"BERRY_TREE_ROUTE_102_ORAN":2,"BERRY_TREE_ROUTE_102_PECHA":1,"BERRY_TREE_ROUTE_103_CHERI_1":5,"BERRY_TREE_ROUTE_103_CHERI_2":7,"BERRY_TREE_ROUTE_103_LEPPA":6,"BERRY_TREE_ROUTE_104_CHERI_1":8,"BERRY_TREE_ROUTE_104_CHERI_2":76,"BERRY_TREE_ROUTE_104_LEPPA":10,"BERRY_TREE_ROUTE_104_ORAN_1":4,"BERRY_TREE_ROUTE_104_ORAN_2":11,"BERRY_TREE_ROUTE_104_PECHA":13,"BERRY_TREE_ROUTE_104_SOIL_1":3,"BERRY_TREE_ROUTE_104_SOIL_2":9,"BERRY_TREE_ROUTE_104_SOIL_3":12,"BERRY_TREE_ROUTE_104_SOIL_4":75,"BERRY_TREE_ROUTE_110_NANAB_1":16,"BERRY_TREE_ROUTE_110_NANAB_2":17,"BERRY_TREE_ROUTE_110_NANAB_3":18,"BERRY_TREE_ROUTE_111_ORAN_1":80,"BERRY_TREE_ROUTE_111_ORAN_2":81,"BERRY_TREE_ROUTE_111_RAZZ_1":19,"BERRY_TREE_ROUTE_111_RAZZ_2":20,"BERRY_TREE_ROUTE_112_PECHA_1":22,"BERRY_TREE_ROUTE_112_PECHA_2":23,"BERRY_TREE_ROUTE_112_RAWST_1":21,"BERRY_TREE_ROUTE_112_RAWST_2":24,"BERRY_TREE_ROUTE_114_PERSIM_1":68,"BERRY_TREE_ROUTE_114_PERSIM_2":77,"BERRY_TREE_ROUTE_114_PERSIM_3":78,"BERRY_TREE_ROUTE_115_BLUK_1":55,"BERRY_TREE_ROUTE_115_BLUK_2":56,"BERRY_TREE_ROUTE_115_KELPSY_1":69,"BERRY_TREE_ROUTE_115_KELPSY_2":70,"BERRY_TREE_ROUTE_115_KELPSY_3":71,"BERRY_TREE_ROUTE_116_CHESTO_1":26,"BERRY_TREE_ROUTE_116_CHESTO_2":66,"BERRY_TREE_ROUTE_116_PINAP_1":25,"BERRY_TREE_ROUTE_116_PINAP_2":67,"BERRY_TREE_ROUTE_117_WEPEAR_1":27,"BERRY_TREE_ROUTE_117_WEPEAR_2":28,"BERRY_TREE_ROUTE_117_WEPEAR_3":29,"BERRY_TREE_ROUTE_118_SITRUS_1":31,"BERRY_TREE_ROUTE_118_SITRUS_2":33,"BERRY_TREE_ROUTE_118_SOIL":32,"BERRY_TREE_ROUTE_119_HONDEW_1":83,"BERRY_TREE_ROUTE_119_HONDEW_2":84,"BERRY_TREE_ROUTE_119_LEPPA":86,"BERRY_TREE_ROUTE_119_POMEG_1":34,"BERRY_TREE_ROUTE_119_POMEG_2":35,"BERRY_TREE_ROUTE_119_POMEG_3":36,"BERRY_TREE_ROUTE_119_SITRUS":85,"BERRY_TREE_ROUTE_120_ASPEAR_1":37,"BERRY_TREE_ROUTE_120_ASPEAR_2":38,"BERRY_TREE_ROUTE_120_ASPEAR_3":39,"BERRY_TREE_ROUTE_120_NANAB":44,"BERRY_TREE_ROUTE_120_PECHA_1":40,"BERRY_TREE_ROUTE_120_PECHA_2":41,"BERRY_TREE_ROUTE_120_PECHA_3":42,"BERRY_TREE_ROUTE_120_PINAP":45,"BERRY_TREE_ROUTE_120_RAZZ":43,"BERRY_TREE_ROUTE_120_WEPEAR":46,"BERRY_TREE_ROUTE_121_ASPEAR":48,"BERRY_TREE_ROUTE_121_CHESTO":50,"BERRY_TREE_ROUTE_121_NANAB_1":52,"BERRY_TREE_ROUTE_121_NANAB_2":53,"BERRY_TREE_ROUTE_121_PERSIM":47,"BERRY_TREE_ROUTE_121_RAWST":49,"BERRY_TREE_ROUTE_121_SOIL_1":51,"BERRY_TREE_ROUTE_121_SOIL_2":54,"BERRY_TREE_ROUTE_123_GREPA_1":60,"BERRY_TREE_ROUTE_123_GREPA_2":61,"BERRY_TREE_ROUTE_123_GREPA_3":65,"BERRY_TREE_ROUTE_123_GREPA_4":72,"BERRY_TREE_ROUTE_123_LEPPA_1":62,"BERRY_TREE_ROUTE_123_LEPPA_2":64,"BERRY_TREE_ROUTE_123_PECHA":87,"BERRY_TREE_ROUTE_123_POMEG_1":15,"BERRY_TREE_ROUTE_123_POMEG_2":30,"BERRY_TREE_ROUTE_123_POMEG_3":58,"BERRY_TREE_ROUTE_123_POMEG_4":59,"BERRY_TREE_ROUTE_123_QUALOT_1":14,"BERRY_TREE_ROUTE_123_QUALOT_2":73,"BERRY_TREE_ROUTE_123_QUALOT_3":74,"BERRY_TREE_ROUTE_123_QUALOT_4":79,"BERRY_TREE_ROUTE_123_RAWST":57,"BERRY_TREE_ROUTE_123_SITRUS":88,"BERRY_TREE_ROUTE_123_SOIL":63,"BERRY_TREE_ROUTE_130_LIECHI":82,"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_BATTLE_FRONTIER_TRADE_DONE":156,"FLAG_BEAT_MAGMA_GRUNT_JAGGED_PASS":313,"FLAG_BEAUTY_PAINTING_MADE":161,"FLAG_BERRY_MASTERS_WIFE":1197,"FLAG_BERRY_MASTER_RECEIVED_BERRY_1":1195,"FLAG_BERRY_MASTER_RECEIVED_BERRY_2":1196,"FLAG_BERRY_TREES_START":612,"FLAG_BERRY_TREE_01":612,"FLAG_BERRY_TREE_02":613,"FLAG_BERRY_TREE_03":614,"FLAG_BERRY_TREE_04":615,"FLAG_BERRY_TREE_05":616,"FLAG_BERRY_TREE_06":617,"FLAG_BERRY_TREE_07":618,"FLAG_BERRY_TREE_08":619,"FLAG_BERRY_TREE_09":620,"FLAG_BERRY_TREE_10":621,"FLAG_BERRY_TREE_11":622,"FLAG_BERRY_TREE_12":623,"FLAG_BERRY_TREE_13":624,"FLAG_BERRY_TREE_14":625,"FLAG_BERRY_TREE_15":626,"FLAG_BERRY_TREE_16":627,"FLAG_BERRY_TREE_17":628,"FLAG_BERRY_TREE_18":629,"FLAG_BERRY_TREE_19":630,"FLAG_BERRY_TREE_20":631,"FLAG_BERRY_TREE_21":632,"FLAG_BERRY_TREE_22":633,"FLAG_BERRY_TREE_23":634,"FLAG_BERRY_TREE_24":635,"FLAG_BERRY_TREE_25":636,"FLAG_BERRY_TREE_26":637,"FLAG_BERRY_TREE_27":638,"FLAG_BERRY_TREE_28":639,"FLAG_BERRY_TREE_29":640,"FLAG_BERRY_TREE_30":641,"FLAG_BERRY_TREE_31":642,"FLAG_BERRY_TREE_32":643,"FLAG_BERRY_TREE_33":644,"FLAG_BERRY_TREE_34":645,"FLAG_BERRY_TREE_35":646,"FLAG_BERRY_TREE_36":647,"FLAG_BERRY_TREE_37":648,"FLAG_BERRY_TREE_38":649,"FLAG_BERRY_TREE_39":650,"FLAG_BERRY_TREE_40":651,"FLAG_BERRY_TREE_41":652,"FLAG_BERRY_TREE_42":653,"FLAG_BERRY_TREE_43":654,"FLAG_BERRY_TREE_44":655,"FLAG_BERRY_TREE_45":656,"FLAG_BERRY_TREE_46":657,"FLAG_BERRY_TREE_47":658,"FLAG_BERRY_TREE_48":659,"FLAG_BERRY_TREE_49":660,"FLAG_BERRY_TREE_50":661,"FLAG_BERRY_TREE_51":662,"FLAG_BERRY_TREE_52":663,"FLAG_BERRY_TREE_53":664,"FLAG_BERRY_TREE_54":665,"FLAG_BERRY_TREE_55":666,"FLAG_BERRY_TREE_56":667,"FLAG_BERRY_TREE_57":668,"FLAG_BERRY_TREE_58":669,"FLAG_BERRY_TREE_59":670,"FLAG_BERRY_TREE_60":671,"FLAG_BERRY_TREE_61":672,"FLAG_BERRY_TREE_62":673,"FLAG_BERRY_TREE_63":674,"FLAG_BERRY_TREE_64":675,"FLAG_BERRY_TREE_65":676,"FLAG_BERRY_TREE_66":677,"FLAG_BERRY_TREE_67":678,"FLAG_BERRY_TREE_68":679,"FLAG_BERRY_TREE_69":680,"FLAG_BERRY_TREE_70":681,"FLAG_BERRY_TREE_71":682,"FLAG_BERRY_TREE_72":683,"FLAG_BERRY_TREE_73":684,"FLAG_BERRY_TREE_74":685,"FLAG_BERRY_TREE_75":686,"FLAG_BERRY_TREE_76":687,"FLAG_BERRY_TREE_77":688,"FLAG_BERRY_TREE_78":689,"FLAG_BERRY_TREE_79":690,"FLAG_BERRY_TREE_80":691,"FLAG_BERRY_TREE_81":692,"FLAG_BERRY_TREE_82":693,"FLAG_BERRY_TREE_83":694,"FLAG_BERRY_TREE_84":695,"FLAG_BERRY_TREE_85":696,"FLAG_BERRY_TREE_86":697,"FLAG_BERRY_TREE_87":698,"FLAG_BERRY_TREE_88":699,"FLAG_BETTER_SHOPS_ENABLED":206,"FLAG_BIRCH_AIDE_MET":88,"FLAG_CANCEL_BATTLE_ROOM_CHALLENGE":119,"FLAG_CAUGHT_DEOXYS":429,"FLAG_CAUGHT_GROUDON":480,"FLAG_CAUGHT_HO_OH":146,"FLAG_CAUGHT_KYOGRE":479,"FLAG_CAUGHT_LATIAS":457,"FLAG_CAUGHT_LATIOS":482,"FLAG_CAUGHT_LUGIA":145,"FLAG_CAUGHT_MEW":458,"FLAG_CAUGHT_RAYQUAZA":478,"FLAG_CAUGHT_REGICE":427,"FLAG_CAUGHT_REGIROCK":426,"FLAG_CAUGHT_REGISTEEL":483,"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_KECLEON_1_ROUTE_119":989,"FLAG_DEFEATED_KECLEON_1_ROUTE_120":982,"FLAG_DEFEATED_KECLEON_2_ROUTE_119":990,"FLAG_DEFEATED_KECLEON_2_ROUTE_120":985,"FLAG_DEFEATED_KECLEON_3_ROUTE_120":986,"FLAG_DEFEATED_KECLEON_4_ROUTE_120":987,"FLAG_DEFEATED_KECLEON_5_ROUTE_120":988,"FLAG_DEFEATED_KEKLEON_ROUTE_120_BRIDGE":970,"FLAG_DEFEATED_KYOGRE":446,"FLAG_DEFEATED_LATIAS":456,"FLAG_DEFEATED_LATIOS":481,"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_IS_RECOVERING":1258,"FLAG_DEOXYS_ROCK_COMPLETE":2260,"FLAG_DEVON_GOODS_STOLEN":142,"FLAG_DOCK_REJECTED_DEVON_GOODS":148,"FLAG_DONT_TRANSITION_MUSIC":16385,"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_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_FLOWER_SHOP_RECEIVED_BERRY":1207,"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_TM_THUNDERBOLT_FROM_WATTSON":209,"FLAG_GROUDON_AWAKENED_MAGMA_HIDEOUT":111,"FLAG_GROUDON_IS_RECOVERING":1274,"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_TM_DOUBLE_TEAM":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_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_MAGMA_HIDEOUT_MAXIE":867,"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_TEAM_MAGMA_BATTLEABLE":981,"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":825,"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_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_119_TEAM_AQUA_SHELLY":915,"FLAG_HIDE_ROUTE_120_GABBY_AND_TY_1":798,"FLAG_HIDE_ROUTE_120_GABBY_AND_TY_2":902,"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_HO_OH_IS_RECOVERING":1256,"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_TM_RAIN_DANCE":1102,"FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER":1078,"FLAG_ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE":1101,"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_TM_ICE_BEAM":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_TM_TOXIC":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_TM_IRON_TAIL":1044,"FLAG_ITEM_METEOR_FALLS_B1F_2R_TM_DRAGON_CLAW":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_TM_SHADOW_BALL":1089,"FLAG_ITEM_MT_PYRE_EXTERIOR_MAX_POTION":1073,"FLAG_ITEM_MT_PYRE_EXTERIOR_TM_SKILL_SWAP":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_TM_SANDSTORM":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_TM_FOCUS_PUNCH":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_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_TM_SOLAR_BEAM":1094,"FLAG_ITEM_SAFARI_ZONE_SOUTH_EAST_BIG_PEARL":1170,"FLAG_ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE":1131,"FLAG_ITEM_SCORCHED_SLAB_TM_SUNNY_DAY":1079,"FLAG_ITEM_SEAFLOOR_CAVERN_ROOM_9_TM_EARTHQUAKE":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_TM_HAIL":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_TM_PSYCHIC":1086,"FLAG_ITEM_VICTORY_ROAD_B2F_FULL_HEAL":1088,"FLAG_KECLEON_FLED_FORTREE":295,"FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN":129,"FLAG_KYOGRE_IS_RECOVERING":1273,"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_LATIAS_IS_RECOVERING":1263,"FLAG_LATIOS_IS_RECOVERING":1255,"FLAG_LATIOS_OR_LATIAS_ROAMING":255,"FLAG_LEGENDARIES_IN_SOOTOPOLIS":83,"FLAG_LILYCOVE_RECEIVED_BERRY":1208,"FLAG_LUGIA_IS_RECOVERING":1257,"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_MEW_IS_RECOVERING":1259,"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_RAYQUAZA_IS_RECOVERING":1279,"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_EON_TICKET":474,"FLAG_RECEIVED_EXP_SHARE":272,"FLAG_RECEIVED_FANCLUB_TM_THIS_WEEK":299,"FLAG_RECEIVED_FIRST_POKEBALLS":233,"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_HM_CUT":137,"FLAG_RECEIVED_HM_DIVE":123,"FLAG_RECEIVED_HM_FLASH":109,"FLAG_RECEIVED_HM_FLY":110,"FLAG_RECEIVED_HM_ROCK_SMASH":107,"FLAG_RECEIVED_HM_STRENGTH":106,"FLAG_RECEIVED_HM_SURF":122,"FLAG_RECEIVED_HM_WATERFALL":312,"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_SOOT_SACK":1033,"FLAG_RECEIVED_SPECIAL_PHRASE_HINT":85,"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_TM_AERIAL_ACE":170,"FLAG_RECEIVED_TM_ATTRACT":235,"FLAG_RECEIVED_TM_BRICK_BREAK":121,"FLAG_RECEIVED_TM_BULK_UP":166,"FLAG_RECEIVED_TM_BULLET_SEED":262,"FLAG_RECEIVED_TM_CALM_MIND":171,"FLAG_RECEIVED_TM_DIG":261,"FLAG_RECEIVED_TM_FACADE":169,"FLAG_RECEIVED_TM_FRUSTRATION":1179,"FLAG_RECEIVED_TM_GIGA_DRAIN":232,"FLAG_RECEIVED_TM_HIDDEN_POWER":264,"FLAG_RECEIVED_TM_OVERHEAT":168,"FLAG_RECEIVED_TM_REST":234,"FLAG_RECEIVED_TM_RETURN":229,"FLAG_RECEIVED_TM_RETURN_2":1178,"FLAG_RECEIVED_TM_ROAR":231,"FLAG_RECEIVED_TM_ROCK_TOMB":165,"FLAG_RECEIVED_TM_SHOCK_WAVE":167,"FLAG_RECEIVED_TM_SLUDGE_BOMB":230,"FLAG_RECEIVED_TM_SNATCH":260,"FLAG_RECEIVED_TM_STEEL_WING":1175,"FLAG_RECEIVED_TM_THIEF":269,"FLAG_RECEIVED_TM_TORMENT":265,"FLAG_RECEIVED_TM_WATER_PULSE":172,"FLAG_RECEIVED_TRICK_HOUSE_REWARD_1":1200,"FLAG_RECEIVED_TRICK_HOUSE_REWARD_2":1201,"FLAG_RECEIVED_TRICK_HOUSE_REWARD_3":1202,"FLAG_RECEIVED_TRICK_HOUSE_REWARD_4":1203,"FLAG_RECEIVED_TRICK_HOUSE_REWARD_5":1204,"FLAG_RECEIVED_TRICK_HOUSE_REWARD_6":1205,"FLAG_RECEIVED_TRICK_HOUSE_REWARD_7":1206,"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_REGICE_IS_RECOVERING":1260,"FLAG_REGIROCK_IS_RECOVERING":1261,"FLAG_REGISTEEL_IS_RECOVERING":1262,"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_ROUTE_111_RECEIVED_BERRY":1192,"FLAG_ROUTE_114_RECEIVED_BERRY":1193,"FLAG_ROUTE_120_RECEIVED_BERRY":1194,"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_SOOTOPOLIS_RECEIVED_BERRY_1":1198,"FLAG_SOOTOPOLIS_RECEIVED_BERRY_2":1199,"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_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_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE":17,"FLAG_TEMP_REGICE_PUZZLE_FAILED":3,"FLAG_TEMP_REGICE_PUZZLE_STARTED":2,"FLAG_TEMP_SKIP_GABBY_INTERVIEW":1,"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_UNLOCKED_TRENDY_SAYINGS":2150,"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,"FLAVOR_BITTER":3,"FLAVOR_COUNT":5,"FLAVOR_DRY":1,"FLAVOR_SOUR":4,"FLAVOR_SPICY":0,"FLAVOR_SWEET":2,"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_HM02":340,"ITEM_HM03":341,"ITEM_HM04":342,"ITEM_HM05":343,"ITEM_HM06":344,"ITEM_HM07":345,"ITEM_HM08":346,"ITEM_HM_CUT":339,"ITEM_HM_DIVE":346,"ITEM_HM_FLASH":343,"ITEM_HM_FLY":340,"ITEM_HM_ROCK_SMASH":344,"ITEM_HM_STRENGTH":342,"ITEM_HM_SURF":341,"ITEM_HM_WATERFALL":345,"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_TM02":290,"ITEM_TM03":291,"ITEM_TM04":292,"ITEM_TM05":293,"ITEM_TM06":294,"ITEM_TM07":295,"ITEM_TM08":296,"ITEM_TM09":297,"ITEM_TM10":298,"ITEM_TM11":299,"ITEM_TM12":300,"ITEM_TM13":301,"ITEM_TM14":302,"ITEM_TM15":303,"ITEM_TM16":304,"ITEM_TM17":305,"ITEM_TM18":306,"ITEM_TM19":307,"ITEM_TM20":308,"ITEM_TM21":309,"ITEM_TM22":310,"ITEM_TM23":311,"ITEM_TM24":312,"ITEM_TM25":313,"ITEM_TM26":314,"ITEM_TM27":315,"ITEM_TM28":316,"ITEM_TM29":317,"ITEM_TM30":318,"ITEM_TM31":319,"ITEM_TM32":320,"ITEM_TM33":321,"ITEM_TM34":322,"ITEM_TM35":323,"ITEM_TM36":324,"ITEM_TM37":325,"ITEM_TM38":326,"ITEM_TM39":327,"ITEM_TM40":328,"ITEM_TM41":329,"ITEM_TM42":330,"ITEM_TM43":331,"ITEM_TM44":332,"ITEM_TM45":333,"ITEM_TM46":334,"ITEM_TM47":335,"ITEM_TM48":336,"ITEM_TM49":337,"ITEM_TM50":338,"ITEM_TM_AERIAL_ACE":328,"ITEM_TM_ATTRACT":333,"ITEM_TM_BLIZZARD":302,"ITEM_TM_BRICK_BREAK":319,"ITEM_TM_BULK_UP":296,"ITEM_TM_BULLET_SEED":297,"ITEM_TM_CALM_MIND":292,"ITEM_TM_CASE":364,"ITEM_TM_DIG":316,"ITEM_TM_DOUBLE_TEAM":320,"ITEM_TM_DRAGON_CLAW":290,"ITEM_TM_EARTHQUAKE":314,"ITEM_TM_FACADE":330,"ITEM_TM_FIRE_BLAST":326,"ITEM_TM_FLAMETHROWER":323,"ITEM_TM_FOCUS_PUNCH":289,"ITEM_TM_FRUSTRATION":309,"ITEM_TM_GIGA_DRAIN":307,"ITEM_TM_HAIL":295,"ITEM_TM_HIDDEN_POWER":298,"ITEM_TM_HYPER_BEAM":303,"ITEM_TM_ICE_BEAM":301,"ITEM_TM_IRON_TAIL":311,"ITEM_TM_LIGHT_SCREEN":304,"ITEM_TM_OVERHEAT":338,"ITEM_TM_PROTECT":305,"ITEM_TM_PSYCHIC":317,"ITEM_TM_RAIN_DANCE":306,"ITEM_TM_REFLECT":321,"ITEM_TM_REST":332,"ITEM_TM_RETURN":315,"ITEM_TM_ROAR":293,"ITEM_TM_ROCK_TOMB":327,"ITEM_TM_SAFEGUARD":308,"ITEM_TM_SANDSTORM":325,"ITEM_TM_SECRET_POWER":331,"ITEM_TM_SHADOW_BALL":318,"ITEM_TM_SHOCK_WAVE":322,"ITEM_TM_SKILL_SWAP":336,"ITEM_TM_SLUDGE_BOMB":324,"ITEM_TM_SNATCH":337,"ITEM_TM_SOLAR_BEAM":310,"ITEM_TM_STEEL_WING":335,"ITEM_TM_SUNNY_DAY":299,"ITEM_TM_TAUNT":300,"ITEM_TM_THIEF":334,"ITEM_TM_THUNDER":313,"ITEM_TM_THUNDERBOLT":312,"ITEM_TM_TORMENT":329,"ITEM_TM_TOXIC":294,"ITEM_TM_WATER_PULSE":291,"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,"MUS_ABANDONED_SHIP":381,"MUS_ABNORMAL_WEATHER":443,"MUS_AQUA_MAGMA_HIDEOUT":430,"MUS_AWAKEN_LEGEND":388,"MUS_BIRCH_LAB":383,"MUS_B_ARENA":458,"MUS_B_DOME":467,"MUS_B_DOME_LOBBY":473,"MUS_B_FACTORY":469,"MUS_B_FRONTIER":457,"MUS_B_PALACE":463,"MUS_B_PIKE":468,"MUS_B_PYRAMID":461,"MUS_B_PYRAMID_TOP":462,"MUS_B_TOWER":465,"MUS_B_TOWER_RS":384,"MUS_CABLE_CAR":425,"MUS_CAUGHT":352,"MUS_CAVE_OF_ORIGIN":386,"MUS_CONTEST":440,"MUS_CONTEST_LOBBY":452,"MUS_CONTEST_RESULTS":446,"MUS_CONTEST_WINNER":439,"MUS_CREDITS":455,"MUS_CYCLING":403,"MUS_C_COMM_CENTER":356,"MUS_C_VS_LEGEND_BEAST":358,"MUS_DESERT":409,"MUS_DEWFORD":427,"MUS_DUMMY":0,"MUS_ENCOUNTER_AQUA":419,"MUS_ENCOUNTER_BRENDAN":421,"MUS_ENCOUNTER_CHAMPION":454,"MUS_ENCOUNTER_COOL":417,"MUS_ENCOUNTER_ELITE_FOUR":450,"MUS_ENCOUNTER_FEMALE":407,"MUS_ENCOUNTER_GIRL":379,"MUS_ENCOUNTER_HIKER":451,"MUS_ENCOUNTER_INTENSE":416,"MUS_ENCOUNTER_INTERVIEWER":453,"MUS_ENCOUNTER_MAGMA":441,"MUS_ENCOUNTER_MALE":380,"MUS_ENCOUNTER_MAY":415,"MUS_ENCOUNTER_RICH":397,"MUS_ENCOUNTER_SUSPICIOUS":423,"MUS_ENCOUNTER_SWIMMER":385,"MUS_ENCOUNTER_TWINS":449,"MUS_END":456,"MUS_EVER_GRANDE":422,"MUS_EVOLUTION":377,"MUS_EVOLUTION_INTRO":376,"MUS_EVOLVED":371,"MUS_FALLARBOR":437,"MUS_FOLLOW_ME":420,"MUS_FORTREE":382,"MUS_GAME_CORNER":426,"MUS_GSC_PEWTER":357,"MUS_GSC_ROUTE38":351,"MUS_GYM":364,"MUS_HALL_OF_FAME":436,"MUS_HALL_OF_FAME_ROOM":447,"MUS_HEAL":368,"MUS_HELP":410,"MUS_INTRO":414,"MUS_INTRO_BATTLE":442,"MUS_LEVEL_UP":367,"MUS_LILYCOVE":408,"MUS_LILYCOVE_MUSEUM":373,"MUS_LINK_CONTEST_P1":393,"MUS_LINK_CONTEST_P2":394,"MUS_LINK_CONTEST_P3":395,"MUS_LINK_CONTEST_P4":396,"MUS_LITTLEROOT":405,"MUS_LITTLEROOT_TEST":350,"MUS_MOVE_DELETED":378,"MUS_MT_CHIMNEY":406,"MUS_MT_PYRE":432,"MUS_MT_PYRE_EXTERIOR":434,"MUS_NONE":65535,"MUS_OBTAIN_BADGE":369,"MUS_OBTAIN_BERRY":387,"MUS_OBTAIN_B_POINTS":459,"MUS_OBTAIN_ITEM":370,"MUS_OBTAIN_SYMBOL":466,"MUS_OBTAIN_TMHM":372,"MUS_OCEANIC_MUSEUM":375,"MUS_OLDALE":363,"MUS_PETALBURG":362,"MUS_PETALBURG_WOODS":366,"MUS_POKE_CENTER":400,"MUS_POKE_MART":404,"MUS_RAYQUAZA_APPEARS":464,"MUS_REGISTER_MATCH_CALL":460,"MUS_RG_BERRY_PICK":542,"MUS_RG_CAUGHT":534,"MUS_RG_CAUGHT_INTRO":531,"MUS_RG_CELADON":521,"MUS_RG_CINNABAR":491,"MUS_RG_CREDITS":502,"MUS_RG_CYCLING":494,"MUS_RG_DEX_RATING":529,"MUS_RG_ENCOUNTER_BOY":497,"MUS_RG_ENCOUNTER_DEOXYS":555,"MUS_RG_ENCOUNTER_GIRL":496,"MUS_RG_ENCOUNTER_GYM_LEADER":554,"MUS_RG_ENCOUNTER_RIVAL":527,"MUS_RG_ENCOUNTER_ROCKET":495,"MUS_RG_FOLLOW_ME":484,"MUS_RG_FUCHSIA":520,"MUS_RG_GAME_CORNER":485,"MUS_RG_GAME_FREAK":533,"MUS_RG_GYM":487,"MUS_RG_HALL_OF_FAME":498,"MUS_RG_HEAL":493,"MUS_RG_INTRO_FIGHT":489,"MUS_RG_JIGGLYPUFF":488,"MUS_RG_LAVENDER":492,"MUS_RG_MT_MOON":500,"MUS_RG_MYSTERY_GIFT":541,"MUS_RG_NET_CENTER":540,"MUS_RG_NEW_GAME_EXIT":537,"MUS_RG_NEW_GAME_INSTRUCT":535,"MUS_RG_NEW_GAME_INTRO":536,"MUS_RG_OAK":514,"MUS_RG_OAK_LAB":513,"MUS_RG_OBTAIN_KEY_ITEM":530,"MUS_RG_PALLET":512,"MUS_RG_PEWTER":526,"MUS_RG_PHOTO":532,"MUS_RG_POKE_CENTER":515,"MUS_RG_POKE_FLUTE":550,"MUS_RG_POKE_JUMP":538,"MUS_RG_POKE_MANSION":501,"MUS_RG_POKE_TOWER":518,"MUS_RG_RIVAL_EXIT":528,"MUS_RG_ROCKET_HIDEOUT":486,"MUS_RG_ROUTE1":503,"MUS_RG_ROUTE11":506,"MUS_RG_ROUTE24":504,"MUS_RG_ROUTE3":505,"MUS_RG_SEVII_123":547,"MUS_RG_SEVII_45":548,"MUS_RG_SEVII_67":549,"MUS_RG_SEVII_CAVE":543,"MUS_RG_SEVII_DUNGEON":546,"MUS_RG_SEVII_ROUTE":545,"MUS_RG_SILPH":519,"MUS_RG_SLOW_PALLET":557,"MUS_RG_SS_ANNE":516,"MUS_RG_SURF":517,"MUS_RG_TEACHY_TV_MENU":558,"MUS_RG_TEACHY_TV_SHOW":544,"MUS_RG_TITLE":490,"MUS_RG_TRAINER_TOWER":556,"MUS_RG_UNION_ROOM":539,"MUS_RG_VERMILLION":525,"MUS_RG_VICTORY_GYM_LEADER":524,"MUS_RG_VICTORY_ROAD":507,"MUS_RG_VICTORY_TRAINER":522,"MUS_RG_VICTORY_WILD":523,"MUS_RG_VIRIDIAN_FOREST":499,"MUS_RG_VS_CHAMPION":511,"MUS_RG_VS_DEOXYS":551,"MUS_RG_VS_GYM_LEADER":508,"MUS_RG_VS_LEGEND":553,"MUS_RG_VS_MEWTWO":552,"MUS_RG_VS_TRAINER":509,"MUS_RG_VS_WILD":510,"MUS_ROULETTE":392,"MUS_ROUTE101":359,"MUS_ROUTE104":401,"MUS_ROUTE110":360,"MUS_ROUTE113":418,"MUS_ROUTE118":32767,"MUS_ROUTE119":402,"MUS_ROUTE120":361,"MUS_ROUTE122":374,"MUS_RUSTBORO":399,"MUS_SAFARI_ZONE":428,"MUS_SAILING":431,"MUS_SCHOOL":435,"MUS_SEALED_CHAMBER":438,"MUS_SLATEPORT":433,"MUS_SLOTS_JACKPOT":389,"MUS_SLOTS_WIN":390,"MUS_SOOTOPOLIS":445,"MUS_SURF":365,"MUS_TITLE":413,"MUS_TOO_BAD":391,"MUS_TRICK_HOUSE":448,"MUS_UNDERWATER":411,"MUS_VERDANTURF":398,"MUS_VICTORY_AQUA_MAGMA":424,"MUS_VICTORY_GYM_LEADER":354,"MUS_VICTORY_LEAGUE":355,"MUS_VICTORY_ROAD":429,"MUS_VICTORY_TRAINER":412,"MUS_VICTORY_WILD":353,"MUS_VS_AQUA_MAGMA":475,"MUS_VS_AQUA_MAGMA_LEADER":483,"MUS_VS_CHAMPION":478,"MUS_VS_ELITE_FOUR":482,"MUS_VS_FRONTIER_BRAIN":471,"MUS_VS_GYM_LEADER":477,"MUS_VS_KYOGRE_GROUDON":480,"MUS_VS_MEW":472,"MUS_VS_RAYQUAZA":470,"MUS_VS_REGI":479,"MUS_VS_RIVAL":481,"MUS_VS_TRAINER":476,"MUS_VS_WILD":474,"MUS_WEATHER_GROUDON":444,"NUM_BADGES":8,"NUM_BERRY_MASTER_BERRIES":10,"NUM_BERRY_MASTER_BERRIES_SKIPPED":20,"NUM_BERRY_MASTER_WIFE_BERRIES":10,"NUM_DAILY_FLAGS":64,"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_SPECIAL_FLAGS":128,"NUM_SPECIES":412,"NUM_TECHNICAL_MACHINES":50,"NUM_TEMP_FLAGS":32,"NUM_WATER_STAGES":4,"NUM_WONDER_CARD_FLAGS":20,"OLD_ROD":0,"PH_CHOICE_BLEND":589,"PH_CHOICE_HELD":590,"PH_CHOICE_SOLO":591,"PH_CLOTH_BLEND":565,"PH_CLOTH_HELD":566,"PH_CLOTH_SOLO":567,"PH_CURE_BLEND":604,"PH_CURE_HELD":605,"PH_CURE_SOLO":606,"PH_DRESS_BLEND":568,"PH_DRESS_HELD":569,"PH_DRESS_SOLO":570,"PH_FACE_BLEND":562,"PH_FACE_HELD":563,"PH_FACE_SOLO":564,"PH_FLEECE_BLEND":571,"PH_FLEECE_HELD":572,"PH_FLEECE_SOLO":573,"PH_FOOT_BLEND":595,"PH_FOOT_HELD":596,"PH_FOOT_SOLO":597,"PH_GOAT_BLEND":583,"PH_GOAT_HELD":584,"PH_GOAT_SOLO":585,"PH_GOOSE_BLEND":598,"PH_GOOSE_HELD":599,"PH_GOOSE_SOLO":600,"PH_KIT_BLEND":574,"PH_KIT_HELD":575,"PH_KIT_SOLO":576,"PH_LOT_BLEND":580,"PH_LOT_HELD":581,"PH_LOT_SOLO":582,"PH_MOUTH_BLEND":592,"PH_MOUTH_HELD":593,"PH_MOUTH_SOLO":594,"PH_NURSE_BLEND":607,"PH_NURSE_HELD":608,"PH_NURSE_SOLO":609,"PH_PRICE_BLEND":577,"PH_PRICE_HELD":578,"PH_PRICE_SOLO":579,"PH_STRUT_BLEND":601,"PH_STRUT_HELD":602,"PH_STRUT_SOLO":603,"PH_THOUGHT_BLEND":586,"PH_THOUGHT_HELD":587,"PH_THOUGHT_SOLO":588,"PH_TRAP_BLEND":559,"PH_TRAP_HELD":560,"PH_TRAP_SOLO":561,"SE_A":25,"SE_APPLAUSE":105,"SE_ARENA_TIMEUP1":265,"SE_ARENA_TIMEUP2":266,"SE_BALL":23,"SE_BALLOON_BLUE":75,"SE_BALLOON_RED":74,"SE_BALLOON_YELLOW":76,"SE_BALL_BOUNCE_1":56,"SE_BALL_BOUNCE_2":57,"SE_BALL_BOUNCE_3":58,"SE_BALL_BOUNCE_4":59,"SE_BALL_OPEN":15,"SE_BALL_THROW":61,"SE_BALL_TRADE":60,"SE_BALL_TRAY_BALL":115,"SE_BALL_TRAY_ENTER":114,"SE_BALL_TRAY_EXIT":116,"SE_BANG":20,"SE_BERRY_BLENDER":53,"SE_BIKE_BELL":11,"SE_BIKE_HOP":34,"SE_BOO":22,"SE_BREAKABLE_DOOR":77,"SE_BRIDGE_WALK":71,"SE_CARD":54,"SE_CLICK":36,"SE_CONTEST_CONDITION_LOSE":38,"SE_CONTEST_CURTAIN_FALL":98,"SE_CONTEST_CURTAIN_RISE":97,"SE_CONTEST_HEART":96,"SE_CONTEST_ICON_CHANGE":99,"SE_CONTEST_ICON_CLEAR":100,"SE_CONTEST_MONS_TURN":101,"SE_CONTEST_PLACE":24,"SE_DEX_PAGE":109,"SE_DEX_SCROLL":108,"SE_DEX_SEARCH":112,"SE_DING_DONG":73,"SE_DOOR":8,"SE_DOWNPOUR":83,"SE_DOWNPOUR_STOP":84,"SE_E":28,"SE_EFFECTIVE":13,"SE_EGG_HATCH":113,"SE_ELEVATOR":89,"SE_ESCALATOR":80,"SE_EXIT":9,"SE_EXP":33,"SE_EXP_MAX":91,"SE_FAILURE":32,"SE_FAINT":16,"SE_FALL":43,"SE_FIELD_POISON":79,"SE_FLEE":17,"SE_FU_ZAKU":37,"SE_GLASS_FLUTE":117,"SE_I":26,"SE_ICE_BREAK":41,"SE_ICE_CRACK":42,"SE_ICE_STAIRS":40,"SE_INTRO_BLAST":103,"SE_ITEMFINDER":72,"SE_LAVARIDGE_FALL_WARP":39,"SE_LEDGE":10,"SE_LOW_HEALTH":90,"SE_MUD_BALL":78,"SE_MUGSHOT":104,"SE_M_ABSORB":180,"SE_M_ABSORB_2":179,"SE_M_ACID_ARMOR":218,"SE_M_ATTRACT":226,"SE_M_ATTRACT2":227,"SE_M_BARRIER":208,"SE_M_BATON_PASS":224,"SE_M_BELLY_DRUM":185,"SE_M_BIND":170,"SE_M_BITE":161,"SE_M_BLIZZARD":153,"SE_M_BLIZZARD2":154,"SE_M_BONEMERANG":187,"SE_M_BRICK_BREAK":198,"SE_M_BUBBLE":124,"SE_M_BUBBLE2":125,"SE_M_BUBBLE3":126,"SE_M_BUBBLE_BEAM":182,"SE_M_BUBBLE_BEAM2":183,"SE_M_CHARGE":213,"SE_M_CHARM":212,"SE_M_COMET_PUNCH":139,"SE_M_CONFUSE_RAY":196,"SE_M_COSMIC_POWER":243,"SE_M_CRABHAMMER":142,"SE_M_CUT":128,"SE_M_DETECT":209,"SE_M_DIG":175,"SE_M_DIVE":233,"SE_M_DIZZY_PUNCH":176,"SE_M_DOUBLE_SLAP":134,"SE_M_DOUBLE_TEAM":135,"SE_M_DRAGON_RAGE":171,"SE_M_EARTHQUAKE":234,"SE_M_EMBER":151,"SE_M_ENCORE":222,"SE_M_ENCORE2":223,"SE_M_EXPLOSION":178,"SE_M_FAINT_ATTACK":190,"SE_M_FIRE_PUNCH":147,"SE_M_FLAMETHROWER":146,"SE_M_FLAME_WHEEL":144,"SE_M_FLAME_WHEEL2":145,"SE_M_FLATTER":229,"SE_M_FLY":158,"SE_M_GIGA_DRAIN":199,"SE_M_GRASSWHISTLE":231,"SE_M_GUST":132,"SE_M_GUST2":133,"SE_M_HAIL":242,"SE_M_HARDEN":120,"SE_M_HAZE":246,"SE_M_HEADBUTT":162,"SE_M_HEAL_BELL":195,"SE_M_HEAT_WAVE":240,"SE_M_HORN_ATTACK":166,"SE_M_HYDRO_PUMP":164,"SE_M_HYPER_BEAM":215,"SE_M_HYPER_BEAM2":247,"SE_M_ICY_WIND":137,"SE_M_JUMP_KICK":143,"SE_M_LEER":192,"SE_M_LICK":188,"SE_M_LOCK_ON":210,"SE_M_MEGA_KICK":140,"SE_M_MEGA_KICK2":141,"SE_M_METRONOME":186,"SE_M_MILK_DRINK":225,"SE_M_MINIMIZE":204,"SE_M_MIST":168,"SE_M_MOONLIGHT":211,"SE_M_MORNING_SUN":228,"SE_M_NIGHTMARE":121,"SE_M_PAY_DAY":174,"SE_M_PERISH_SONG":173,"SE_M_PETAL_DANCE":202,"SE_M_POISON_POWDER":169,"SE_M_PSYBEAM":189,"SE_M_PSYBEAM2":200,"SE_M_RAIN_DANCE":127,"SE_M_RAZOR_WIND":136,"SE_M_RAZOR_WIND2":160,"SE_M_REFLECT":207,"SE_M_REVERSAL":217,"SE_M_ROCK_THROW":131,"SE_M_SACRED_FIRE":149,"SE_M_SACRED_FIRE2":150,"SE_M_SANDSTORM":219,"SE_M_SAND_ATTACK":159,"SE_M_SAND_TOMB":230,"SE_M_SCRATCH":155,"SE_M_SCREECH":181,"SE_M_SELF_DESTRUCT":177,"SE_M_SING":172,"SE_M_SKETCH":205,"SE_M_SKY_UPPERCUT":238,"SE_M_SNORE":197,"SE_M_SOLAR_BEAM":201,"SE_M_SPIT_UP":232,"SE_M_STAT_DECREASE":245,"SE_M_STAT_INCREASE":239,"SE_M_STRENGTH":214,"SE_M_STRING_SHOT":129,"SE_M_STRING_SHOT2":130,"SE_M_SUPERSONIC":184,"SE_M_SURF":163,"SE_M_SWAGGER":193,"SE_M_SWAGGER2":194,"SE_M_SWEET_SCENT":236,"SE_M_SWIFT":206,"SE_M_SWORDS_DANCE":191,"SE_M_TAIL_WHIP":167,"SE_M_TAKE_DOWN":152,"SE_M_TEETER_DANCE":244,"SE_M_TELEPORT":203,"SE_M_THUNDERBOLT":118,"SE_M_THUNDERBOLT2":119,"SE_M_THUNDER_WAVE":138,"SE_M_TOXIC":148,"SE_M_TRI_ATTACK":220,"SE_M_TRI_ATTACK2":221,"SE_M_TWISTER":235,"SE_M_UPROAR":241,"SE_M_VICEGRIP":156,"SE_M_VITAL_THROW":122,"SE_M_VITAL_THROW2":123,"SE_M_WATERFALL":216,"SE_M_WHIRLPOOL":165,"SE_M_WING_ATTACK":157,"SE_M_YAWN":237,"SE_N":30,"SE_NOTE_A":67,"SE_NOTE_B":68,"SE_NOTE_C":62,"SE_NOTE_C_HIGH":69,"SE_NOTE_D":63,"SE_NOTE_E":64,"SE_NOTE_F":65,"SE_NOTE_G":66,"SE_NOT_EFFECTIVE":12,"SE_O":29,"SE_ORB":107,"SE_PC_LOGIN":2,"SE_PC_OFF":3,"SE_PC_ON":4,"SE_PIKE_CURTAIN_CLOSE":267,"SE_PIKE_CURTAIN_OPEN":268,"SE_PIN":21,"SE_POKENAV_CALL":263,"SE_POKENAV_HANG_UP":264,"SE_POKENAV_OFF":111,"SE_POKENAV_ON":110,"SE_PUDDLE":70,"SE_RAIN":85,"SE_RAIN_STOP":86,"SE_REPEL":47,"SE_RG_BAG_CURSOR":252,"SE_RG_BAG_POCKET":253,"SE_RG_BALL_CLICK":254,"SE_RG_CARD_FLIP":249,"SE_RG_CARD_FLIPPING":250,"SE_RG_CARD_OPEN":251,"SE_RG_DEOXYS_MOVE":260,"SE_RG_DOOR":248,"SE_RG_HELP_CLOSE":258,"SE_RG_HELP_ERROR":259,"SE_RG_HELP_OPEN":257,"SE_RG_POKE_JUMP_FAILURE":262,"SE_RG_POKE_JUMP_SUCCESS":261,"SE_RG_SHOP":255,"SE_RG_SS_ANNE_HORN":256,"SE_ROTATING_GATE":48,"SE_ROULETTE_BALL":92,"SE_ROULETTE_BALL2":93,"SE_SAVE":55,"SE_SELECT":5,"SE_SHINY":102,"SE_SHIP":19,"SE_SHOP":95,"SE_SLIDING_DOOR":18,"SE_SUCCESS":31,"SE_SUDOWOODO_SHAKE":269,"SE_SUPER_EFFECTIVE":14,"SE_SWITCH":35,"SE_TAILLOW_WING_FLAP":94,"SE_THUNDER":87,"SE_THUNDER2":88,"SE_THUNDERSTORM":81,"SE_THUNDERSTORM_STOP":82,"SE_TRUCK_DOOR":52,"SE_TRUCK_MOVE":49,"SE_TRUCK_STOP":50,"SE_TRUCK_UNLOAD":51,"SE_U":27,"SE_UNLOCK":44,"SE_USE_ITEM":1,"SE_VEND":106,"SE_WALL_HIT":7,"SE_WARP_IN":45,"SE_WARP_OUT":46,"SE_WIN_OPEN":6,"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},"legendary_encounters":[{"address":2538600,"catch_flag":429,"defeat_flag":428,"level":30,"species":410},{"address":2354334,"catch_flag":480,"defeat_flag":447,"level":70,"species":405},{"address":2543160,"catch_flag":146,"defeat_flag":476,"level":70,"species":250},{"address":2354112,"catch_flag":479,"defeat_flag":446,"level":70,"species":404},{"address":2385623,"catch_flag":457,"defeat_flag":456,"level":50,"species":407},{"address":2385687,"catch_flag":482,"defeat_flag":481,"level":50,"species":408},{"address":2543443,"catch_flag":145,"defeat_flag":477,"level":70,"species":249},{"address":2538177,"catch_flag":458,"defeat_flag":455,"level":30,"species":151},{"address":2347488,"catch_flag":478,"defeat_flag":448,"level":70,"species":406},{"address":2345460,"catch_flag":427,"defeat_flag":444,"level":40,"species":402},{"address":2298183,"catch_flag":426,"defeat_flag":443,"level":40,"species":401},{"address":2345731,"catch_flag":483,"defeat_flag":445,"level":40,"species":403}],"locations":{"BADGE_1":{"address":2188036,"default_item":226,"flag":1182},"BADGE_2":{"address":2095131,"default_item":227,"flag":1183},"BADGE_3":{"address":2167252,"default_item":228,"flag":1184},"BADGE_4":{"address":2103246,"default_item":229,"flag":1185},"BADGE_5":{"address":2129781,"default_item":230,"flag":1186},"BADGE_6":{"address":2202122,"default_item":231,"flag":1187},"BADGE_7":{"address":2243964,"default_item":232,"flag":1188},"BADGE_8":{"address":2262314,"default_item":233,"flag":1189},"BERRY_TREE_01":{"address":5843562,"default_item":135,"flag":612},"BERRY_TREE_02":{"address":5843564,"default_item":139,"flag":613},"BERRY_TREE_03":{"address":5843566,"default_item":142,"flag":614},"BERRY_TREE_04":{"address":5843568,"default_item":139,"flag":615},"BERRY_TREE_05":{"address":5843570,"default_item":133,"flag":616},"BERRY_TREE_06":{"address":5843572,"default_item":138,"flag":617},"BERRY_TREE_07":{"address":5843574,"default_item":133,"flag":618},"BERRY_TREE_08":{"address":5843576,"default_item":133,"flag":619},"BERRY_TREE_09":{"address":5843578,"default_item":142,"flag":620},"BERRY_TREE_10":{"address":5843580,"default_item":138,"flag":621},"BERRY_TREE_11":{"address":5843582,"default_item":139,"flag":622},"BERRY_TREE_12":{"address":5843584,"default_item":142,"flag":623},"BERRY_TREE_13":{"address":5843586,"default_item":135,"flag":624},"BERRY_TREE_14":{"address":5843588,"default_item":155,"flag":625},"BERRY_TREE_15":{"address":5843590,"default_item":153,"flag":626},"BERRY_TREE_16":{"address":5843592,"default_item":150,"flag":627},"BERRY_TREE_17":{"address":5843594,"default_item":150,"flag":628},"BERRY_TREE_18":{"address":5843596,"default_item":150,"flag":629},"BERRY_TREE_19":{"address":5843598,"default_item":148,"flag":630},"BERRY_TREE_20":{"address":5843600,"default_item":148,"flag":631},"BERRY_TREE_21":{"address":5843602,"default_item":136,"flag":632},"BERRY_TREE_22":{"address":5843604,"default_item":135,"flag":633},"BERRY_TREE_23":{"address":5843606,"default_item":135,"flag":634},"BERRY_TREE_24":{"address":5843608,"default_item":136,"flag":635},"BERRY_TREE_25":{"address":5843610,"default_item":152,"flag":636},"BERRY_TREE_26":{"address":5843612,"default_item":134,"flag":637},"BERRY_TREE_27":{"address":5843614,"default_item":151,"flag":638},"BERRY_TREE_28":{"address":5843616,"default_item":151,"flag":639},"BERRY_TREE_29":{"address":5843618,"default_item":151,"flag":640},"BERRY_TREE_30":{"address":5843620,"default_item":153,"flag":641},"BERRY_TREE_31":{"address":5843622,"default_item":142,"flag":642},"BERRY_TREE_32":{"address":5843624,"default_item":142,"flag":643},"BERRY_TREE_33":{"address":5843626,"default_item":142,"flag":644},"BERRY_TREE_34":{"address":5843628,"default_item":153,"flag":645},"BERRY_TREE_35":{"address":5843630,"default_item":153,"flag":646},"BERRY_TREE_36":{"address":5843632,"default_item":153,"flag":647},"BERRY_TREE_37":{"address":5843634,"default_item":137,"flag":648},"BERRY_TREE_38":{"address":5843636,"default_item":137,"flag":649},"BERRY_TREE_39":{"address":5843638,"default_item":137,"flag":650},"BERRY_TREE_40":{"address":5843640,"default_item":135,"flag":651},"BERRY_TREE_41":{"address":5843642,"default_item":135,"flag":652},"BERRY_TREE_42":{"address":5843644,"default_item":135,"flag":653},"BERRY_TREE_43":{"address":5843646,"default_item":148,"flag":654},"BERRY_TREE_44":{"address":5843648,"default_item":150,"flag":655},"BERRY_TREE_45":{"address":5843650,"default_item":152,"flag":656},"BERRY_TREE_46":{"address":5843652,"default_item":151,"flag":657},"BERRY_TREE_47":{"address":5843654,"default_item":140,"flag":658},"BERRY_TREE_48":{"address":5843656,"default_item":137,"flag":659},"BERRY_TREE_49":{"address":5843658,"default_item":136,"flag":660},"BERRY_TREE_50":{"address":5843660,"default_item":134,"flag":661},"BERRY_TREE_51":{"address":5843662,"default_item":142,"flag":662},"BERRY_TREE_52":{"address":5843664,"default_item":150,"flag":663},"BERRY_TREE_53":{"address":5843666,"default_item":150,"flag":664},"BERRY_TREE_54":{"address":5843668,"default_item":142,"flag":665},"BERRY_TREE_55":{"address":5843670,"default_item":149,"flag":666},"BERRY_TREE_56":{"address":5843672,"default_item":149,"flag":667},"BERRY_TREE_57":{"address":5843674,"default_item":136,"flag":668},"BERRY_TREE_58":{"address":5843676,"default_item":153,"flag":669},"BERRY_TREE_59":{"address":5843678,"default_item":153,"flag":670},"BERRY_TREE_60":{"address":5843680,"default_item":157,"flag":671},"BERRY_TREE_61":{"address":5843682,"default_item":157,"flag":672},"BERRY_TREE_62":{"address":5843684,"default_item":138,"flag":673},"BERRY_TREE_63":{"address":5843686,"default_item":142,"flag":674},"BERRY_TREE_64":{"address":5843688,"default_item":138,"flag":675},"BERRY_TREE_65":{"address":5843690,"default_item":157,"flag":676},"BERRY_TREE_66":{"address":5843692,"default_item":134,"flag":677},"BERRY_TREE_67":{"address":5843694,"default_item":152,"flag":678},"BERRY_TREE_68":{"address":5843696,"default_item":140,"flag":679},"BERRY_TREE_69":{"address":5843698,"default_item":154,"flag":680},"BERRY_TREE_70":{"address":5843700,"default_item":154,"flag":681},"BERRY_TREE_71":{"address":5843702,"default_item":154,"flag":682},"BERRY_TREE_72":{"address":5843704,"default_item":157,"flag":683},"BERRY_TREE_73":{"address":5843706,"default_item":155,"flag":684},"BERRY_TREE_74":{"address":5843708,"default_item":155,"flag":685},"BERRY_TREE_75":{"address":5843710,"default_item":142,"flag":686},"BERRY_TREE_76":{"address":5843712,"default_item":133,"flag":687},"BERRY_TREE_77":{"address":5843714,"default_item":140,"flag":688},"BERRY_TREE_78":{"address":5843716,"default_item":140,"flag":689},"BERRY_TREE_79":{"address":5843718,"default_item":155,"flag":690},"BERRY_TREE_80":{"address":5843720,"default_item":139,"flag":691},"BERRY_TREE_81":{"address":5843722,"default_item":139,"flag":692},"BERRY_TREE_82":{"address":5843724,"default_item":168,"flag":693},"BERRY_TREE_83":{"address":5843726,"default_item":156,"flag":694},"BERRY_TREE_84":{"address":5843728,"default_item":156,"flag":695},"BERRY_TREE_85":{"address":5843730,"default_item":142,"flag":696},"BERRY_TREE_86":{"address":5843732,"default_item":138,"flag":697},"BERRY_TREE_87":{"address":5843734,"default_item":135,"flag":698},"BERRY_TREE_88":{"address":5843736,"default_item":142,"flag":699},"HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY":{"address":5497200,"default_item":281,"flag":531},"HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY":{"address":5497212,"default_item":282,"flag":532},"HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY":{"address":5497224,"default_item":283,"flag":533},"HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY":{"address":5497236,"default_item":284,"flag":534},"HIDDEN_ITEM_ARTISAN_CAVE_B1F_CALCIUM":{"address":5500100,"default_item":67,"flag":601},"HIDDEN_ITEM_ARTISAN_CAVE_B1F_IRON":{"address":5500124,"default_item":65,"flag":604},"HIDDEN_ITEM_ARTISAN_CAVE_B1F_PROTEIN":{"address":5500112,"default_item":64,"flag":603},"HIDDEN_ITEM_ARTISAN_CAVE_B1F_ZINC":{"address":5500088,"default_item":70,"flag":602},"HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET":{"address":5435924,"default_item":110,"flag":528},"HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_1":{"address":5487372,"default_item":195,"flag":548},"HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_2":{"address":5487384,"default_item":195,"flag":549},"HIDDEN_ITEM_JAGGED_PASS_FULL_HEAL":{"address":5489116,"default_item":23,"flag":577},"HIDDEN_ITEM_JAGGED_PASS_GREAT_BALL":{"address":5489128,"default_item":3,"flag":576},"HIDDEN_ITEM_LAVARIDGE_TOWN_ICE_HEAL":{"address":5435672,"default_item":16,"flag":500},"HIDDEN_ITEM_LILYCOVE_CITY_HEART_SCALE":{"address":5432608,"default_item":111,"flag":527},"HIDDEN_ITEM_LILYCOVE_CITY_POKE_BALL":{"address":5432632,"default_item":4,"flag":575},"HIDDEN_ITEM_LILYCOVE_CITY_PP_UP":{"address":5432620,"default_item":69,"flag":543},"HIDDEN_ITEM_MT_PYRE_EXTERIOR_MAX_ETHER":{"address":5490440,"default_item":35,"flag":578},"HIDDEN_ITEM_MT_PYRE_EXTERIOR_ULTRA_BALL":{"address":5490428,"default_item":2,"flag":529},"HIDDEN_ITEM_MT_PYRE_SUMMIT_RARE_CANDY":{"address":5490796,"default_item":68,"flag":580},"HIDDEN_ITEM_MT_PYRE_SUMMIT_ZINC":{"address":5490784,"default_item":70,"flag":579},"HIDDEN_ITEM_NAVEL_ROCK_TOP_SACRED_ASH":{"address":5525804,"default_item":45,"flag":609},"HIDDEN_ITEM_PETALBURG_CITY_RARE_CANDY":{"address":5428972,"default_item":68,"flag":595},"HIDDEN_ITEM_PETALBURG_WOODS_POKE_BALL":{"address":5487908,"default_item":4,"flag":561},"HIDDEN_ITEM_PETALBURG_WOODS_POTION":{"address":5487872,"default_item":13,"flag":558},"HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_1":{"address":5487884,"default_item":103,"flag":559},"HIDDEN_ITEM_PETALBURG_WOODS_TINY_MUSHROOM_2":{"address":5487896,"default_item":103,"flag":560},"HIDDEN_ITEM_ROUTE_104_ANTIDOTE":{"address":5438492,"default_item":14,"flag":585},"HIDDEN_ITEM_ROUTE_104_HEART_SCALE":{"address":5438504,"default_item":111,"flag":588},"HIDDEN_ITEM_ROUTE_104_POKE_BALL":{"address":5438468,"default_item":4,"flag":562},"HIDDEN_ITEM_ROUTE_104_POTION":{"address":5438480,"default_item":13,"flag":537},"HIDDEN_ITEM_ROUTE_104_SUPER_POTION":{"address":5438456,"default_item":22,"flag":544},"HIDDEN_ITEM_ROUTE_105_BIG_PEARL":{"address":5438748,"default_item":107,"flag":611},"HIDDEN_ITEM_ROUTE_105_HEART_SCALE":{"address":5438736,"default_item":111,"flag":589},"HIDDEN_ITEM_ROUTE_106_HEART_SCALE":{"address":5438932,"default_item":111,"flag":547},"HIDDEN_ITEM_ROUTE_106_POKE_BALL":{"address":5438908,"default_item":4,"flag":563},"HIDDEN_ITEM_ROUTE_106_STARDUST":{"address":5438920,"default_item":108,"flag":546},"HIDDEN_ITEM_ROUTE_108_RARE_CANDY":{"address":5439340,"default_item":68,"flag":586},"HIDDEN_ITEM_ROUTE_109_ETHER":{"address":5440016,"default_item":34,"flag":564},"HIDDEN_ITEM_ROUTE_109_GREAT_BALL":{"address":5440004,"default_item":3,"flag":551},"HIDDEN_ITEM_ROUTE_109_HEART_SCALE_1":{"address":5439992,"default_item":111,"flag":552},"HIDDEN_ITEM_ROUTE_109_HEART_SCALE_2":{"address":5440028,"default_item":111,"flag":590},"HIDDEN_ITEM_ROUTE_109_HEART_SCALE_3":{"address":5440040,"default_item":111,"flag":591},"HIDDEN_ITEM_ROUTE_109_REVIVE":{"address":5439980,"default_item":24,"flag":550},"HIDDEN_ITEM_ROUTE_110_FULL_HEAL":{"address":5441308,"default_item":23,"flag":555},"HIDDEN_ITEM_ROUTE_110_GREAT_BALL":{"address":5441284,"default_item":3,"flag":553},"HIDDEN_ITEM_ROUTE_110_POKE_BALL":{"address":5441296,"default_item":4,"flag":565},"HIDDEN_ITEM_ROUTE_110_REVIVE":{"address":5441272,"default_item":24,"flag":554},"HIDDEN_ITEM_ROUTE_111_PROTEIN":{"address":5443220,"default_item":64,"flag":556},"HIDDEN_ITEM_ROUTE_111_RARE_CANDY":{"address":5443232,"default_item":68,"flag":557},"HIDDEN_ITEM_ROUTE_111_STARDUST":{"address":5443160,"default_item":108,"flag":502},"HIDDEN_ITEM_ROUTE_113_ETHER":{"address":5444488,"default_item":34,"flag":503},"HIDDEN_ITEM_ROUTE_113_NUGGET":{"address":5444512,"default_item":110,"flag":598},"HIDDEN_ITEM_ROUTE_113_TM_DOUBLE_TEAM":{"address":5444500,"default_item":320,"flag":530},"HIDDEN_ITEM_ROUTE_114_CARBOS":{"address":5445340,"default_item":66,"flag":504},"HIDDEN_ITEM_ROUTE_114_REVIVE":{"address":5445364,"default_item":24,"flag":542},"HIDDEN_ITEM_ROUTE_115_HEART_SCALE":{"address":5446176,"default_item":111,"flag":597},"HIDDEN_ITEM_ROUTE_116_BLACK_GLASSES":{"address":5447056,"default_item":206,"flag":596},"HIDDEN_ITEM_ROUTE_116_SUPER_POTION":{"address":5447044,"default_item":22,"flag":545},"HIDDEN_ITEM_ROUTE_117_REPEL":{"address":5447708,"default_item":86,"flag":572},"HIDDEN_ITEM_ROUTE_118_HEART_SCALE":{"address":5448404,"default_item":111,"flag":566},"HIDDEN_ITEM_ROUTE_118_IRON":{"address":5448392,"default_item":65,"flag":567},"HIDDEN_ITEM_ROUTE_119_CALCIUM":{"address":5449972,"default_item":67,"flag":505},"HIDDEN_ITEM_ROUTE_119_FULL_HEAL":{"address":5450056,"default_item":23,"flag":568},"HIDDEN_ITEM_ROUTE_119_MAX_ETHER":{"address":5450068,"default_item":35,"flag":587},"HIDDEN_ITEM_ROUTE_119_ULTRA_BALL":{"address":5449984,"default_item":2,"flag":506},"HIDDEN_ITEM_ROUTE_120_RARE_CANDY_1":{"address":5451596,"default_item":68,"flag":571},"HIDDEN_ITEM_ROUTE_120_RARE_CANDY_2":{"address":5451620,"default_item":68,"flag":569},"HIDDEN_ITEM_ROUTE_120_REVIVE":{"address":5451608,"default_item":24,"flag":584},"HIDDEN_ITEM_ROUTE_120_ZINC":{"address":5451632,"default_item":70,"flag":570},"HIDDEN_ITEM_ROUTE_121_FULL_HEAL":{"address":5452540,"default_item":23,"flag":573},"HIDDEN_ITEM_ROUTE_121_HP_UP":{"address":5452516,"default_item":63,"flag":539},"HIDDEN_ITEM_ROUTE_121_MAX_REVIVE":{"address":5452552,"default_item":25,"flag":600},"HIDDEN_ITEM_ROUTE_121_NUGGET":{"address":5452528,"default_item":110,"flag":540},"HIDDEN_ITEM_ROUTE_123_HYPER_POTION":{"address":5454100,"default_item":21,"flag":574},"HIDDEN_ITEM_ROUTE_123_PP_UP":{"address":5454112,"default_item":69,"flag":599},"HIDDEN_ITEM_ROUTE_123_RARE_CANDY":{"address":5454124,"default_item":68,"flag":610},"HIDDEN_ITEM_ROUTE_123_REVIVE":{"address":5454088,"default_item":24,"flag":541},"HIDDEN_ITEM_ROUTE_123_SUPER_REPEL":{"address":5454052,"default_item":83,"flag":507},"HIDDEN_ITEM_ROUTE_128_HEART_SCALE_1":{"address":5455620,"default_item":111,"flag":592},"HIDDEN_ITEM_ROUTE_128_HEART_SCALE_2":{"address":5455632,"default_item":111,"flag":593},"HIDDEN_ITEM_ROUTE_128_HEART_SCALE_3":{"address":5455644,"default_item":111,"flag":594},"HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_RARE_CANDY":{"address":5517256,"default_item":68,"flag":606},"HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_ZINC":{"address":5517268,"default_item":70,"flag":607},"HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_FULL_RESTORE":{"address":5517432,"default_item":19,"flag":605},"HIDDEN_ITEM_SAFARI_ZONE_SOUTH_EAST_PP_UP":{"address":5517420,"default_item":69,"flag":608},"HIDDEN_ITEM_SS_TIDAL_LOWER_DECK_LEFTOVERS":{"address":5511292,"default_item":200,"flag":535},"HIDDEN_ITEM_TRICK_HOUSE_NUGGET":{"address":5526716,"default_item":110,"flag":501},"HIDDEN_ITEM_UNDERWATER_124_BIG_PEARL":{"address":5456992,"default_item":107,"flag":511},"HIDDEN_ITEM_UNDERWATER_124_CALCIUM":{"address":5457016,"default_item":67,"flag":536},"HIDDEN_ITEM_UNDERWATER_124_CARBOS":{"address":5456956,"default_item":66,"flag":508},"HIDDEN_ITEM_UNDERWATER_124_GREEN_SHARD":{"address":5456968,"default_item":51,"flag":509},"HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_1":{"address":5457004,"default_item":111,"flag":513},"HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_2":{"address":5457028,"default_item":111,"flag":538},"HIDDEN_ITEM_UNDERWATER_124_PEARL":{"address":5456980,"default_item":106,"flag":510},"HIDDEN_ITEM_UNDERWATER_126_BIG_PEARL":{"address":5457140,"default_item":107,"flag":520},"HIDDEN_ITEM_UNDERWATER_126_BLUE_SHARD":{"address":5457152,"default_item":49,"flag":512},"HIDDEN_ITEM_UNDERWATER_126_HEART_SCALE":{"address":5457068,"default_item":111,"flag":514},"HIDDEN_ITEM_UNDERWATER_126_IRON":{"address":5457116,"default_item":65,"flag":519},"HIDDEN_ITEM_UNDERWATER_126_PEARL":{"address":5457104,"default_item":106,"flag":517},"HIDDEN_ITEM_UNDERWATER_126_STARDUST":{"address":5457092,"default_item":108,"flag":516},"HIDDEN_ITEM_UNDERWATER_126_ULTRA_BALL":{"address":5457080,"default_item":2,"flag":515},"HIDDEN_ITEM_UNDERWATER_126_YELLOW_SHARD":{"address":5457128,"default_item":50,"flag":518},"HIDDEN_ITEM_UNDERWATER_127_HEART_SCALE":{"address":5457224,"default_item":111,"flag":523},"HIDDEN_ITEM_UNDERWATER_127_HP_UP":{"address":5457212,"default_item":63,"flag":522},"HIDDEN_ITEM_UNDERWATER_127_RED_SHARD":{"address":5457236,"default_item":48,"flag":524},"HIDDEN_ITEM_UNDERWATER_127_STAR_PIECE":{"address":5457200,"default_item":109,"flag":521},"HIDDEN_ITEM_UNDERWATER_128_PEARL":{"address":5457288,"default_item":106,"flag":526},"HIDDEN_ITEM_UNDERWATER_128_PROTEIN":{"address":5457276,"default_item":64,"flag":525},"HIDDEN_ITEM_VICTORY_ROAD_1F_ULTRA_BALL":{"address":5493932,"default_item":2,"flag":581},"HIDDEN_ITEM_VICTORY_ROAD_B2F_ELIXIR":{"address":5494744,"default_item":36,"flag":582},"HIDDEN_ITEM_VICTORY_ROAD_B2F_MAX_REPEL":{"address":5494756,"default_item":84,"flag":583},"ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY":{"address":2709805,"default_item":285,"flag":1100},"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_RAIN_DANCE":{"address":2709857,"default_item":306,"flag":1102},"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER":{"address":2709831,"default_item":278,"flag":1078},"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE":{"address":2709844,"default_item":97,"flag":1101},"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL":{"address":2709818,"default_item":11,"flag":1077},"ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL":{"address":2709740,"default_item":122,"flag":1095},"ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE":{"address":2709792,"default_item":24,"flag":1099},"ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL":{"address":2709766,"default_item":7,"flag":1097},"ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE":{"address":2709753,"default_item":85,"flag":1096},"ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_ICE_BEAM":{"address":2709779,"default_item":301,"flag":1098},"ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL":{"address":2710039,"default_item":1,"flag":1124},"ITEM_AQUA_HIDEOUT_B1F_MAX_ELIXIR":{"address":2710065,"default_item":37,"flag":1071},"ITEM_AQUA_HIDEOUT_B1F_NUGGET":{"address":2710052,"default_item":110,"flag":1132},"ITEM_AQUA_HIDEOUT_B2F_NEST_BALL":{"address":2710078,"default_item":8,"flag":1072},"ITEM_ARTISAN_CAVE_1F_CARBOS":{"address":2710416,"default_item":66,"flag":1163},"ITEM_ARTISAN_CAVE_B1F_HP_UP":{"address":2710403,"default_item":63,"flag":1162},"ITEM_FIERY_PATH_FIRE_STONE":{"address":2709584,"default_item":95,"flag":1111},"ITEM_FIERY_PATH_TM_TOXIC":{"address":2709597,"default_item":294,"flag":1091},"ITEM_GRANITE_CAVE_1F_ESCAPE_ROPE":{"address":2709519,"default_item":85,"flag":1050},"ITEM_GRANITE_CAVE_B1F_POKE_BALL":{"address":2709532,"default_item":4,"flag":1051},"ITEM_GRANITE_CAVE_B2F_RARE_CANDY":{"address":2709558,"default_item":68,"flag":1054},"ITEM_GRANITE_CAVE_B2F_REPEL":{"address":2709545,"default_item":86,"flag":1053},"ITEM_JAGGED_PASS_BURN_HEAL":{"address":2709571,"default_item":15,"flag":1070},"ITEM_LILYCOVE_CITY_MAX_REPEL":{"address":2709415,"default_item":84,"flag":1042},"ITEM_MAGMA_HIDEOUT_1F_RARE_CANDY":{"address":2710429,"default_item":68,"flag":1151},"ITEM_MAGMA_HIDEOUT_2F_2R_FULL_RESTORE":{"address":2710455,"default_item":19,"flag":1165},"ITEM_MAGMA_HIDEOUT_2F_2R_MAX_ELIXIR":{"address":2710442,"default_item":37,"flag":1164},"ITEM_MAGMA_HIDEOUT_3F_1R_NUGGET":{"address":2710468,"default_item":110,"flag":1166},"ITEM_MAGMA_HIDEOUT_3F_2R_PP_MAX":{"address":2710481,"default_item":71,"flag":1167},"ITEM_MAGMA_HIDEOUT_3F_3R_ECAPE_ROPE":{"address":2710507,"default_item":85,"flag":1059},"ITEM_MAGMA_HIDEOUT_4F_MAX_REVIVE":{"address":2710494,"default_item":25,"flag":1168},"ITEM_MAUVILLE_CITY_X_SPEED":{"address":2709389,"default_item":77,"flag":1116},"ITEM_METEOR_FALLS_1F_1R_FULL_HEAL":{"address":2709623,"default_item":23,"flag":1045},"ITEM_METEOR_FALLS_1F_1R_MOON_STONE":{"address":2709636,"default_item":94,"flag":1046},"ITEM_METEOR_FALLS_1F_1R_PP_UP":{"address":2709649,"default_item":69,"flag":1047},"ITEM_METEOR_FALLS_1F_1R_TM_IRON_TAIL":{"address":2709610,"default_item":311,"flag":1044},"ITEM_METEOR_FALLS_B1F_2R_TM_DRAGON_CLAW":{"address":2709662,"default_item":290,"flag":1080},"ITEM_MOSSDEEP_CITY_NET_BALL":{"address":2709428,"default_item":6,"flag":1043},"ITEM_MT_PYRE_2F_ULTRA_BALL":{"address":2709948,"default_item":2,"flag":1129},"ITEM_MT_PYRE_3F_SUPER_REPEL":{"address":2709961,"default_item":83,"flag":1120},"ITEM_MT_PYRE_4F_SEA_INCENSE":{"address":2709974,"default_item":220,"flag":1130},"ITEM_MT_PYRE_5F_LAX_INCENSE":{"address":2709987,"default_item":221,"flag":1052},"ITEM_MT_PYRE_6F_TM_SHADOW_BALL":{"address":2710000,"default_item":318,"flag":1089},"ITEM_MT_PYRE_EXTERIOR_MAX_POTION":{"address":2710013,"default_item":20,"flag":1073},"ITEM_MT_PYRE_EXTERIOR_TM_SKILL_SWAP":{"address":2710026,"default_item":336,"flag":1074},"ITEM_NEW_MAUVILLE_ESCAPE_ROPE":{"address":2709688,"default_item":85,"flag":1076},"ITEM_NEW_MAUVILLE_FULL_HEAL":{"address":2709714,"default_item":23,"flag":1122},"ITEM_NEW_MAUVILLE_PARALYZE_HEAL":{"address":2709727,"default_item":18,"flag":1123},"ITEM_NEW_MAUVILLE_THUNDER_STONE":{"address":2709701,"default_item":96,"flag":1110},"ITEM_NEW_MAUVILLE_ULTRA_BALL":{"address":2709675,"default_item":2,"flag":1075},"ITEM_PETALBURG_CITY_ETHER":{"address":2709376,"default_item":34,"flag":1040},"ITEM_PETALBURG_CITY_MAX_REVIVE":{"address":2709363,"default_item":25,"flag":1039},"ITEM_PETALBURG_WOODS_ETHER":{"address":2709467,"default_item":34,"flag":1058},"ITEM_PETALBURG_WOODS_GREAT_BALL":{"address":2709454,"default_item":3,"flag":1056},"ITEM_PETALBURG_WOODS_PARALYZE_HEAL":{"address":2709480,"default_item":18,"flag":1117},"ITEM_PETALBURG_WOODS_X_ATTACK":{"address":2709441,"default_item":75,"flag":1055},"ITEM_ROUTE_102_POTION":{"address":2708375,"default_item":13,"flag":1000},"ITEM_ROUTE_103_GUARD_SPEC":{"address":2708388,"default_item":73,"flag":1114},"ITEM_ROUTE_103_PP_UP":{"address":2708401,"default_item":69,"flag":1137},"ITEM_ROUTE_104_POKE_BALL":{"address":2708427,"default_item":4,"flag":1057},"ITEM_ROUTE_104_POTION":{"address":2708453,"default_item":13,"flag":1135},"ITEM_ROUTE_104_PP_UP":{"address":2708414,"default_item":69,"flag":1002},"ITEM_ROUTE_104_X_ACCURACY":{"address":2708440,"default_item":78,"flag":1115},"ITEM_ROUTE_105_IRON":{"address":2708466,"default_item":65,"flag":1003},"ITEM_ROUTE_106_PROTEIN":{"address":2708479,"default_item":64,"flag":1004},"ITEM_ROUTE_108_STAR_PIECE":{"address":2708492,"default_item":109,"flag":1139},"ITEM_ROUTE_109_POTION":{"address":2708518,"default_item":13,"flag":1140},"ITEM_ROUTE_109_PP_UP":{"address":2708505,"default_item":69,"flag":1005},"ITEM_ROUTE_110_DIRE_HIT":{"address":2708544,"default_item":74,"flag":1007},"ITEM_ROUTE_110_ELIXIR":{"address":2708557,"default_item":36,"flag":1141},"ITEM_ROUTE_110_RARE_CANDY":{"address":2708531,"default_item":68,"flag":1006},"ITEM_ROUTE_111_ELIXIR":{"address":2708609,"default_item":36,"flag":1142},"ITEM_ROUTE_111_HP_UP":{"address":2708596,"default_item":63,"flag":1010},"ITEM_ROUTE_111_STARDUST":{"address":2708583,"default_item":108,"flag":1009},"ITEM_ROUTE_111_TM_SANDSTORM":{"address":2708570,"default_item":325,"flag":1008},"ITEM_ROUTE_112_NUGGET":{"address":2708622,"default_item":110,"flag":1011},"ITEM_ROUTE_113_HYPER_POTION":{"address":2708661,"default_item":21,"flag":1143},"ITEM_ROUTE_113_MAX_ETHER":{"address":2708635,"default_item":35,"flag":1012},"ITEM_ROUTE_113_SUPER_REPEL":{"address":2708648,"default_item":83,"flag":1013},"ITEM_ROUTE_114_ENERGY_POWDER":{"address":2708700,"default_item":30,"flag":1160},"ITEM_ROUTE_114_PROTEIN":{"address":2708687,"default_item":64,"flag":1015},"ITEM_ROUTE_114_RARE_CANDY":{"address":2708674,"default_item":68,"flag":1014},"ITEM_ROUTE_115_GREAT_BALL":{"address":2708752,"default_item":3,"flag":1118},"ITEM_ROUTE_115_HEAL_POWDER":{"address":2708765,"default_item":32,"flag":1144},"ITEM_ROUTE_115_IRON":{"address":2708739,"default_item":65,"flag":1018},"ITEM_ROUTE_115_PP_UP":{"address":2708778,"default_item":69,"flag":1161},"ITEM_ROUTE_115_SUPER_POTION":{"address":2708713,"default_item":22,"flag":1016},"ITEM_ROUTE_115_TM_FOCUS_PUNCH":{"address":2708726,"default_item":289,"flag":1017},"ITEM_ROUTE_116_ETHER":{"address":2708804,"default_item":34,"flag":1019},"ITEM_ROUTE_116_HP_UP":{"address":2708830,"default_item":63,"flag":1021},"ITEM_ROUTE_116_POTION":{"address":2708843,"default_item":13,"flag":1146},"ITEM_ROUTE_116_REPEL":{"address":2708817,"default_item":86,"flag":1020},"ITEM_ROUTE_116_X_SPECIAL":{"address":2708791,"default_item":79,"flag":1001},"ITEM_ROUTE_117_GREAT_BALL":{"address":2708856,"default_item":3,"flag":1022},"ITEM_ROUTE_117_REVIVE":{"address":2708869,"default_item":24,"flag":1023},"ITEM_ROUTE_118_HYPER_POTION":{"address":2708882,"default_item":21,"flag":1121},"ITEM_ROUTE_119_ELIXIR_1":{"address":2708921,"default_item":36,"flag":1026},"ITEM_ROUTE_119_ELIXIR_2":{"address":2708986,"default_item":36,"flag":1147},"ITEM_ROUTE_119_HYPER_POTION_1":{"address":2708960,"default_item":21,"flag":1029},"ITEM_ROUTE_119_HYPER_POTION_2":{"address":2708973,"default_item":21,"flag":1106},"ITEM_ROUTE_119_LEAF_STONE":{"address":2708934,"default_item":98,"flag":1027},"ITEM_ROUTE_119_NUGGET":{"address":2710104,"default_item":110,"flag":1134},"ITEM_ROUTE_119_RARE_CANDY":{"address":2708947,"default_item":68,"flag":1028},"ITEM_ROUTE_119_SUPER_REPEL":{"address":2708895,"default_item":83,"flag":1024},"ITEM_ROUTE_119_ZINC":{"address":2708908,"default_item":70,"flag":1025},"ITEM_ROUTE_120_FULL_HEAL":{"address":2709012,"default_item":23,"flag":1031},"ITEM_ROUTE_120_HYPER_POTION":{"address":2709025,"default_item":21,"flag":1107},"ITEM_ROUTE_120_NEST_BALL":{"address":2709038,"default_item":8,"flag":1108},"ITEM_ROUTE_120_NUGGET":{"address":2708999,"default_item":110,"flag":1030},"ITEM_ROUTE_120_REVIVE":{"address":2709051,"default_item":24,"flag":1148},"ITEM_ROUTE_121_CARBOS":{"address":2709064,"default_item":66,"flag":1103},"ITEM_ROUTE_121_REVIVE":{"address":2709077,"default_item":24,"flag":1149},"ITEM_ROUTE_121_ZINC":{"address":2709090,"default_item":70,"flag":1150},"ITEM_ROUTE_123_CALCIUM":{"address":2709103,"default_item":67,"flag":1032},"ITEM_ROUTE_123_ELIXIR":{"address":2709129,"default_item":36,"flag":1109},"ITEM_ROUTE_123_PP_UP":{"address":2709142,"default_item":69,"flag":1152},"ITEM_ROUTE_123_REVIVAL_HERB":{"address":2709155,"default_item":33,"flag":1153},"ITEM_ROUTE_123_ULTRA_BALL":{"address":2709116,"default_item":2,"flag":1104},"ITEM_ROUTE_124_BLUE_SHARD":{"address":2709181,"default_item":49,"flag":1093},"ITEM_ROUTE_124_RED_SHARD":{"address":2709168,"default_item":48,"flag":1092},"ITEM_ROUTE_124_YELLOW_SHARD":{"address":2709194,"default_item":50,"flag":1066},"ITEM_ROUTE_125_BIG_PEARL":{"address":2709207,"default_item":107,"flag":1154},"ITEM_ROUTE_126_GREEN_SHARD":{"address":2709220,"default_item":51,"flag":1105},"ITEM_ROUTE_127_CARBOS":{"address":2709246,"default_item":66,"flag":1035},"ITEM_ROUTE_127_RARE_CANDY":{"address":2709259,"default_item":68,"flag":1155},"ITEM_ROUTE_127_ZINC":{"address":2709233,"default_item":70,"flag":1034},"ITEM_ROUTE_132_PROTEIN":{"address":2709285,"default_item":64,"flag":1156},"ITEM_ROUTE_132_RARE_CANDY":{"address":2709272,"default_item":68,"flag":1036},"ITEM_ROUTE_133_BIG_PEARL":{"address":2709298,"default_item":107,"flag":1037},"ITEM_ROUTE_133_MAX_REVIVE":{"address":2709324,"default_item":25,"flag":1157},"ITEM_ROUTE_133_STAR_PIECE":{"address":2709311,"default_item":109,"flag":1038},"ITEM_ROUTE_134_CARBOS":{"address":2709337,"default_item":66,"flag":1158},"ITEM_ROUTE_134_STAR_PIECE":{"address":2709350,"default_item":109,"flag":1159},"ITEM_RUSTBORO_CITY_X_DEFEND":{"address":2709402,"default_item":76,"flag":1041},"ITEM_RUSTURF_TUNNEL_MAX_ETHER":{"address":2709506,"default_item":35,"flag":1049},"ITEM_RUSTURF_TUNNEL_POKE_BALL":{"address":2709493,"default_item":4,"flag":1048},"ITEM_SAFARI_ZONE_NORTH_CALCIUM":{"address":2709896,"default_item":67,"flag":1119},"ITEM_SAFARI_ZONE_NORTH_EAST_NUGGET":{"address":2709922,"default_item":110,"flag":1169},"ITEM_SAFARI_ZONE_NORTH_WEST_TM_SOLAR_BEAM":{"address":2709883,"default_item":310,"flag":1094},"ITEM_SAFARI_ZONE_SOUTH_EAST_BIG_PEARL":{"address":2709935,"default_item":107,"flag":1170},"ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE":{"address":2709909,"default_item":25,"flag":1131},"ITEM_SCORCHED_SLAB_TM_SUNNY_DAY":{"address":2709870,"default_item":299,"flag":1079},"ITEM_SEAFLOOR_CAVERN_ROOM_9_TM_EARTHQUAKE":{"address":2710208,"default_item":314,"flag":1090},"ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL":{"address":2710143,"default_item":107,"flag":1081},"ITEM_SHOAL_CAVE_ICE_ROOM_NEVER_MELT_ICE":{"address":2710195,"default_item":212,"flag":1113},"ITEM_SHOAL_CAVE_ICE_ROOM_TM_HAIL":{"address":2710182,"default_item":295,"flag":1112},"ITEM_SHOAL_CAVE_INNER_ROOM_RARE_CANDY":{"address":2710156,"default_item":68,"flag":1082},"ITEM_SHOAL_CAVE_STAIRS_ROOM_ICE_HEAL":{"address":2710169,"default_item":16,"flag":1083},"ITEM_TRICK_HOUSE_PUZZLE_1_ORANGE_MAIL":{"address":[2710221,2551006],"default_item":121,"flag":1060},"ITEM_TRICK_HOUSE_PUZZLE_2_HARBOR_MAIL":{"address":[2710234,2551032],"default_item":122,"flag":1061},"ITEM_TRICK_HOUSE_PUZZLE_2_WAVE_MAIL":{"address":[2710247,2551058],"default_item":126,"flag":1062},"ITEM_TRICK_HOUSE_PUZZLE_3_SHADOW_MAIL":{"address":[2710260,2551084],"default_item":128,"flag":1063},"ITEM_TRICK_HOUSE_PUZZLE_3_WOOD_MAIL":{"address":[2710273,2551110],"default_item":125,"flag":1064},"ITEM_TRICK_HOUSE_PUZZLE_4_MECH_MAIL":{"address":[2710286,2551136],"default_item":124,"flag":1065},"ITEM_TRICK_HOUSE_PUZZLE_6_GLITTER_MAIL":{"address":[2710299,2551162],"default_item":123,"flag":1067},"ITEM_TRICK_HOUSE_PUZZLE_7_TROPIC_MAIL":{"address":[2710312,2551188],"default_item":129,"flag":1068},"ITEM_TRICK_HOUSE_PUZZLE_8_BEAD_MAIL":{"address":[2710325,2551214],"default_item":127,"flag":1069},"ITEM_VICTORY_ROAD_1F_MAX_ELIXIR":{"address":2710338,"default_item":37,"flag":1084},"ITEM_VICTORY_ROAD_1F_PP_UP":{"address":2710351,"default_item":69,"flag":1085},"ITEM_VICTORY_ROAD_B1F_FULL_RESTORE":{"address":2710377,"default_item":19,"flag":1087},"ITEM_VICTORY_ROAD_B1F_TM_PSYCHIC":{"address":2710364,"default_item":317,"flag":1086},"ITEM_VICTORY_ROAD_B2F_FULL_HEAL":{"address":2710390,"default_item":23,"flag":1088},"NPC_GIFT_BERRY_MASTERS_WIFE":{"address":2570453,"default_item":133,"flag":1197},"NPC_GIFT_BERRY_MASTER_RECEIVED_BERRY_1":{"address":2570263,"default_item":153,"flag":1195},"NPC_GIFT_BERRY_MASTER_RECEIVED_BERRY_2":{"address":2570315,"default_item":154,"flag":1196},"NPC_GIFT_FLOWER_SHOP_RECEIVED_BERRY":{"address":2284375,"default_item":133,"flag":1207},"NPC_GIFT_GOT_BASEMENT_KEY_FROM_WATTSON":{"address":1971718,"default_item":271,"flag":208},"NPC_GIFT_GOT_TM_THUNDERBOLT_FROM_WATTSON":{"address":1971754,"default_item":312,"flag":209},"NPC_GIFT_LILYCOVE_RECEIVED_BERRY":{"address":1985277,"default_item":141,"flag":1208},"NPC_GIFT_RECEIVED_6_SODA_POP":{"address":2543767,"default_item":27,"flag":140},"NPC_GIFT_RECEIVED_ACRO_BIKE":{"address":2170570,"default_item":272,"flag":1181},"NPC_GIFT_RECEIVED_AMULET_COIN":{"address":2716248,"default_item":189,"flag":133},"NPC_GIFT_RECEIVED_AURORA_TICKET":{"address":2716523,"default_item":371,"flag":314},"NPC_GIFT_RECEIVED_CHARCOAL":{"address":2102559,"default_item":215,"flag":254},"NPC_GIFT_RECEIVED_CHESTO_BERRY_ROUTE_104":{"address":2028703,"default_item":134,"flag":246},"NPC_GIFT_RECEIVED_CLEANSE_TAG":{"address":2312109,"default_item":190,"flag":282},"NPC_GIFT_RECEIVED_COIN_CASE":{"address":2179054,"default_item":260,"flag":258},"NPC_GIFT_RECEIVED_DEEP_SEA_SCALE":{"address":2162572,"default_item":193,"flag":1190},"NPC_GIFT_RECEIVED_DEEP_SEA_TOOTH":{"address":2162555,"default_item":192,"flag":1191},"NPC_GIFT_RECEIVED_DEVON_GOODS_RUSTURF_TUNNEL":{"address":2295814,"default_item":269,"flag":1172},"NPC_GIFT_RECEIVED_DEVON_SCOPE":{"address":2065146,"default_item":288,"flag":285},"NPC_GIFT_RECEIVED_EON_TICKET":{"address":2716574,"default_item":275,"flag":474},"NPC_GIFT_RECEIVED_EXP_SHARE":{"address":2185525,"default_item":182,"flag":272},"NPC_GIFT_RECEIVED_FIRST_POKEBALLS":{"address":2085751,"default_item":4,"flag":233},"NPC_GIFT_RECEIVED_FOCUS_BAND":{"address":2337807,"default_item":196,"flag":283},"NPC_GIFT_RECEIVED_GOOD_ROD":{"address":2058408,"default_item":263,"flag":227},"NPC_GIFT_RECEIVED_GO_GOGGLES":{"address":2017746,"default_item":279,"flag":221},"NPC_GIFT_RECEIVED_GREAT_BALL_PETALBURG_WOODS":{"address":2300119,"default_item":3,"flag":1171},"NPC_GIFT_RECEIVED_GREAT_BALL_RUSTBORO_CITY":{"address":1977146,"default_item":3,"flag":1173},"NPC_GIFT_RECEIVED_HM_CUT":{"address":2199532,"default_item":339,"flag":137},"NPC_GIFT_RECEIVED_HM_DIVE":{"address":2252095,"default_item":346,"flag":123},"NPC_GIFT_RECEIVED_HM_FLASH":{"address":2298287,"default_item":343,"flag":109},"NPC_GIFT_RECEIVED_HM_FLY":{"address":2060636,"default_item":340,"flag":110},"NPC_GIFT_RECEIVED_HM_ROCK_SMASH":{"address":2174128,"default_item":344,"flag":107},"NPC_GIFT_RECEIVED_HM_STRENGTH":{"address":2295305,"default_item":342,"flag":106},"NPC_GIFT_RECEIVED_HM_SURF":{"address":2126671,"default_item":341,"flag":122},"NPC_GIFT_RECEIVED_HM_WATERFALL":{"address":1999854,"default_item":345,"flag":312},"NPC_GIFT_RECEIVED_ITEMFINDER":{"address":2039874,"default_item":261,"flag":1176},"NPC_GIFT_RECEIVED_KINGS_ROCK":{"address":1993670,"default_item":187,"flag":276},"NPC_GIFT_RECEIVED_LETTER":{"address":2185301,"default_item":274,"flag":1174},"NPC_GIFT_RECEIVED_MACHO_BRACE":{"address":2284472,"default_item":181,"flag":277},"NPC_GIFT_RECEIVED_MACH_BIKE":{"address":2170553,"default_item":259,"flag":1180},"NPC_GIFT_RECEIVED_MAGMA_EMBLEM":{"address":2316671,"default_item":375,"flag":1177},"NPC_GIFT_RECEIVED_MENTAL_HERB":{"address":2208103,"default_item":185,"flag":223},"NPC_GIFT_RECEIVED_METEORITE":{"address":2304222,"default_item":280,"flag":115},"NPC_GIFT_RECEIVED_MIRACLE_SEED":{"address":2300337,"default_item":205,"flag":297},"NPC_GIFT_RECEIVED_MYSTIC_TICKET":{"address":2716540,"default_item":370,"flag":315},"NPC_GIFT_RECEIVED_OLD_ROD":{"address":2012541,"default_item":262,"flag":257},"NPC_GIFT_RECEIVED_OLD_SEA_MAP":{"address":2716557,"default_item":376,"flag":316},"NPC_GIFT_RECEIVED_POKEBLOCK_CASE":{"address":2614193,"default_item":273,"flag":95},"NPC_GIFT_RECEIVED_POTION_OLDALE":{"address":2010888,"default_item":13,"flag":132},"NPC_GIFT_RECEIVED_POWDER_JAR":{"address":1962504,"default_item":372,"flag":337},"NPC_GIFT_RECEIVED_PREMIER_BALL_RUSTBORO":{"address":2200571,"default_item":12,"flag":213},"NPC_GIFT_RECEIVED_QUICK_CLAW":{"address":2192227,"default_item":183,"flag":275},"NPC_GIFT_RECEIVED_REPEAT_BALL":{"address":2053722,"default_item":9,"flag":256},"NPC_GIFT_RECEIVED_SECRET_POWER":{"address":2598914,"default_item":331,"flag":96},"NPC_GIFT_RECEIVED_SILK_SCARF":{"address":2101830,"default_item":217,"flag":289},"NPC_GIFT_RECEIVED_SOFT_SAND":{"address":2035664,"default_item":203,"flag":280},"NPC_GIFT_RECEIVED_SOOTHE_BELL":{"address":2151278,"default_item":184,"flag":278},"NPC_GIFT_RECEIVED_SOOT_SACK":{"address":2567245,"default_item":270,"flag":1033},"NPC_GIFT_RECEIVED_SS_TICKET":{"address":2716506,"default_item":265,"flag":291},"NPC_GIFT_RECEIVED_SUN_STONE_MOSSDEEP":{"address":2254406,"default_item":93,"flag":192},"NPC_GIFT_RECEIVED_SUPER_ROD":{"address":2251560,"default_item":264,"flag":152},"NPC_GIFT_RECEIVED_TM_AERIAL_ACE":{"address":2202201,"default_item":328,"flag":170},"NPC_GIFT_RECEIVED_TM_ATTRACT":{"address":2116413,"default_item":333,"flag":235},"NPC_GIFT_RECEIVED_TM_BRICK_BREAK":{"address":2269085,"default_item":319,"flag":121},"NPC_GIFT_RECEIVED_TM_BULK_UP":{"address":2095210,"default_item":296,"flag":166},"NPC_GIFT_RECEIVED_TM_BULLET_SEED":{"address":2028910,"default_item":297,"flag":262},"NPC_GIFT_RECEIVED_TM_CALM_MIND":{"address":2244066,"default_item":292,"flag":171},"NPC_GIFT_RECEIVED_TM_DIG":{"address":2286669,"default_item":316,"flag":261},"NPC_GIFT_RECEIVED_TM_FACADE":{"address":2129909,"default_item":330,"flag":169},"NPC_GIFT_RECEIVED_TM_FRUSTRATION":{"address":2124110,"default_item":309,"flag":1179},"NPC_GIFT_RECEIVED_TM_GIGA_DRAIN":{"address":2068012,"default_item":307,"flag":232},"NPC_GIFT_RECEIVED_TM_HIDDEN_POWER":{"address":2206905,"default_item":298,"flag":264},"NPC_GIFT_RECEIVED_TM_OVERHEAT":{"address":2103328,"default_item":338,"flag":168},"NPC_GIFT_RECEIVED_TM_REST":{"address":2236966,"default_item":332,"flag":234},"NPC_GIFT_RECEIVED_TM_RETURN":{"address":2113546,"default_item":315,"flag":229},"NPC_GIFT_RECEIVED_TM_RETURN_2":{"address":2124055,"default_item":315,"flag":1178},"NPC_GIFT_RECEIVED_TM_ROAR":{"address":2051750,"default_item":293,"flag":231},"NPC_GIFT_RECEIVED_TM_ROCK_TOMB":{"address":2188088,"default_item":327,"flag":165},"NPC_GIFT_RECEIVED_TM_SHOCK_WAVE":{"address":2167340,"default_item":322,"flag":167},"NPC_GIFT_RECEIVED_TM_SLUDGE_BOMB":{"address":2099189,"default_item":324,"flag":230},"NPC_GIFT_RECEIVED_TM_SNATCH":{"address":2360766,"default_item":337,"flag":260},"NPC_GIFT_RECEIVED_TM_STEEL_WING":{"address":2298866,"default_item":335,"flag":1175},"NPC_GIFT_RECEIVED_TM_THIEF":{"address":2154698,"default_item":334,"flag":269},"NPC_GIFT_RECEIVED_TM_TORMENT":{"address":2145260,"default_item":329,"flag":265},"NPC_GIFT_RECEIVED_TM_WATER_PULSE":{"address":2262402,"default_item":291,"flag":172},"NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_1":{"address":2550316,"default_item":68,"flag":1200},"NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_2":{"address":2550390,"default_item":10,"flag":1201},"NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_3":{"address":2550473,"default_item":204,"flag":1202},"NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_4":{"address":2550556,"default_item":194,"flag":1203},"NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_5":{"address":2550630,"default_item":300,"flag":1204},"NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_6":{"address":2550695,"default_item":208,"flag":1205},"NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_7":{"address":2550769,"default_item":71,"flag":1206},"NPC_GIFT_RECEIVED_WAILMER_PAIL":{"address":2284320,"default_item":268,"flag":94},"NPC_GIFT_RECEIVED_WHITE_HERB":{"address":2028770,"default_item":180,"flag":279},"NPC_GIFT_ROUTE_111_RECEIVED_BERRY":{"address":2045493,"default_item":148,"flag":1192},"NPC_GIFT_ROUTE_114_RECEIVED_BERRY":{"address":2051680,"default_item":149,"flag":1193},"NPC_GIFT_ROUTE_120_RECEIVED_BERRY":{"address":2064727,"default_item":143,"flag":1194},"NPC_GIFT_SOOTOPOLIS_RECEIVED_BERRY_1":{"address":1998521,"default_item":153,"flag":1198},"NPC_GIFT_SOOTOPOLIS_RECEIVED_BERRY_2":{"address":1998566,"default_item":143,"flag":1199},"POKEDEX_REWARD_001":{"address":5729368,"default_item":3,"flag":0},"POKEDEX_REWARD_002":{"address":5729370,"default_item":3,"flag":0},"POKEDEX_REWARD_003":{"address":5729372,"default_item":3,"flag":0},"POKEDEX_REWARD_004":{"address":5729374,"default_item":3,"flag":0},"POKEDEX_REWARD_005":{"address":5729376,"default_item":3,"flag":0},"POKEDEX_REWARD_006":{"address":5729378,"default_item":3,"flag":0},"POKEDEX_REWARD_007":{"address":5729380,"default_item":3,"flag":0},"POKEDEX_REWARD_008":{"address":5729382,"default_item":3,"flag":0},"POKEDEX_REWARD_009":{"address":5729384,"default_item":3,"flag":0},"POKEDEX_REWARD_010":{"address":5729386,"default_item":3,"flag":0},"POKEDEX_REWARD_011":{"address":5729388,"default_item":3,"flag":0},"POKEDEX_REWARD_012":{"address":5729390,"default_item":3,"flag":0},"POKEDEX_REWARD_013":{"address":5729392,"default_item":3,"flag":0},"POKEDEX_REWARD_014":{"address":5729394,"default_item":3,"flag":0},"POKEDEX_REWARD_015":{"address":5729396,"default_item":3,"flag":0},"POKEDEX_REWARD_016":{"address":5729398,"default_item":3,"flag":0},"POKEDEX_REWARD_017":{"address":5729400,"default_item":3,"flag":0},"POKEDEX_REWARD_018":{"address":5729402,"default_item":3,"flag":0},"POKEDEX_REWARD_019":{"address":5729404,"default_item":3,"flag":0},"POKEDEX_REWARD_020":{"address":5729406,"default_item":3,"flag":0},"POKEDEX_REWARD_021":{"address":5729408,"default_item":3,"flag":0},"POKEDEX_REWARD_022":{"address":5729410,"default_item":3,"flag":0},"POKEDEX_REWARD_023":{"address":5729412,"default_item":3,"flag":0},"POKEDEX_REWARD_024":{"address":5729414,"default_item":3,"flag":0},"POKEDEX_REWARD_025":{"address":5729416,"default_item":3,"flag":0},"POKEDEX_REWARD_026":{"address":5729418,"default_item":3,"flag":0},"POKEDEX_REWARD_027":{"address":5729420,"default_item":3,"flag":0},"POKEDEX_REWARD_028":{"address":5729422,"default_item":3,"flag":0},"POKEDEX_REWARD_029":{"address":5729424,"default_item":3,"flag":0},"POKEDEX_REWARD_030":{"address":5729426,"default_item":3,"flag":0},"POKEDEX_REWARD_031":{"address":5729428,"default_item":3,"flag":0},"POKEDEX_REWARD_032":{"address":5729430,"default_item":3,"flag":0},"POKEDEX_REWARD_033":{"address":5729432,"default_item":3,"flag":0},"POKEDEX_REWARD_034":{"address":5729434,"default_item":3,"flag":0},"POKEDEX_REWARD_035":{"address":5729436,"default_item":3,"flag":0},"POKEDEX_REWARD_036":{"address":5729438,"default_item":3,"flag":0},"POKEDEX_REWARD_037":{"address":5729440,"default_item":3,"flag":0},"POKEDEX_REWARD_038":{"address":5729442,"default_item":3,"flag":0},"POKEDEX_REWARD_039":{"address":5729444,"default_item":3,"flag":0},"POKEDEX_REWARD_040":{"address":5729446,"default_item":3,"flag":0},"POKEDEX_REWARD_041":{"address":5729448,"default_item":3,"flag":0},"POKEDEX_REWARD_042":{"address":5729450,"default_item":3,"flag":0},"POKEDEX_REWARD_043":{"address":5729452,"default_item":3,"flag":0},"POKEDEX_REWARD_044":{"address":5729454,"default_item":3,"flag":0},"POKEDEX_REWARD_045":{"address":5729456,"default_item":3,"flag":0},"POKEDEX_REWARD_046":{"address":5729458,"default_item":3,"flag":0},"POKEDEX_REWARD_047":{"address":5729460,"default_item":3,"flag":0},"POKEDEX_REWARD_048":{"address":5729462,"default_item":3,"flag":0},"POKEDEX_REWARD_049":{"address":5729464,"default_item":3,"flag":0},"POKEDEX_REWARD_050":{"address":5729466,"default_item":3,"flag":0},"POKEDEX_REWARD_051":{"address":5729468,"default_item":3,"flag":0},"POKEDEX_REWARD_052":{"address":5729470,"default_item":3,"flag":0},"POKEDEX_REWARD_053":{"address":5729472,"default_item":3,"flag":0},"POKEDEX_REWARD_054":{"address":5729474,"default_item":3,"flag":0},"POKEDEX_REWARD_055":{"address":5729476,"default_item":3,"flag":0},"POKEDEX_REWARD_056":{"address":5729478,"default_item":3,"flag":0},"POKEDEX_REWARD_057":{"address":5729480,"default_item":3,"flag":0},"POKEDEX_REWARD_058":{"address":5729482,"default_item":3,"flag":0},"POKEDEX_REWARD_059":{"address":5729484,"default_item":3,"flag":0},"POKEDEX_REWARD_060":{"address":5729486,"default_item":3,"flag":0},"POKEDEX_REWARD_061":{"address":5729488,"default_item":3,"flag":0},"POKEDEX_REWARD_062":{"address":5729490,"default_item":3,"flag":0},"POKEDEX_REWARD_063":{"address":5729492,"default_item":3,"flag":0},"POKEDEX_REWARD_064":{"address":5729494,"default_item":3,"flag":0},"POKEDEX_REWARD_065":{"address":5729496,"default_item":3,"flag":0},"POKEDEX_REWARD_066":{"address":5729498,"default_item":3,"flag":0},"POKEDEX_REWARD_067":{"address":5729500,"default_item":3,"flag":0},"POKEDEX_REWARD_068":{"address":5729502,"default_item":3,"flag":0},"POKEDEX_REWARD_069":{"address":5729504,"default_item":3,"flag":0},"POKEDEX_REWARD_070":{"address":5729506,"default_item":3,"flag":0},"POKEDEX_REWARD_071":{"address":5729508,"default_item":3,"flag":0},"POKEDEX_REWARD_072":{"address":5729510,"default_item":3,"flag":0},"POKEDEX_REWARD_073":{"address":5729512,"default_item":3,"flag":0},"POKEDEX_REWARD_074":{"address":5729514,"default_item":3,"flag":0},"POKEDEX_REWARD_075":{"address":5729516,"default_item":3,"flag":0},"POKEDEX_REWARD_076":{"address":5729518,"default_item":3,"flag":0},"POKEDEX_REWARD_077":{"address":5729520,"default_item":3,"flag":0},"POKEDEX_REWARD_078":{"address":5729522,"default_item":3,"flag":0},"POKEDEX_REWARD_079":{"address":5729524,"default_item":3,"flag":0},"POKEDEX_REWARD_080":{"address":5729526,"default_item":3,"flag":0},"POKEDEX_REWARD_081":{"address":5729528,"default_item":3,"flag":0},"POKEDEX_REWARD_082":{"address":5729530,"default_item":3,"flag":0},"POKEDEX_REWARD_083":{"address":5729532,"default_item":3,"flag":0},"POKEDEX_REWARD_084":{"address":5729534,"default_item":3,"flag":0},"POKEDEX_REWARD_085":{"address":5729536,"default_item":3,"flag":0},"POKEDEX_REWARD_086":{"address":5729538,"default_item":3,"flag":0},"POKEDEX_REWARD_087":{"address":5729540,"default_item":3,"flag":0},"POKEDEX_REWARD_088":{"address":5729542,"default_item":3,"flag":0},"POKEDEX_REWARD_089":{"address":5729544,"default_item":3,"flag":0},"POKEDEX_REWARD_090":{"address":5729546,"default_item":3,"flag":0},"POKEDEX_REWARD_091":{"address":5729548,"default_item":3,"flag":0},"POKEDEX_REWARD_092":{"address":5729550,"default_item":3,"flag":0},"POKEDEX_REWARD_093":{"address":5729552,"default_item":3,"flag":0},"POKEDEX_REWARD_094":{"address":5729554,"default_item":3,"flag":0},"POKEDEX_REWARD_095":{"address":5729556,"default_item":3,"flag":0},"POKEDEX_REWARD_096":{"address":5729558,"default_item":3,"flag":0},"POKEDEX_REWARD_097":{"address":5729560,"default_item":3,"flag":0},"POKEDEX_REWARD_098":{"address":5729562,"default_item":3,"flag":0},"POKEDEX_REWARD_099":{"address":5729564,"default_item":3,"flag":0},"POKEDEX_REWARD_100":{"address":5729566,"default_item":3,"flag":0},"POKEDEX_REWARD_101":{"address":5729568,"default_item":3,"flag":0},"POKEDEX_REWARD_102":{"address":5729570,"default_item":3,"flag":0},"POKEDEX_REWARD_103":{"address":5729572,"default_item":3,"flag":0},"POKEDEX_REWARD_104":{"address":5729574,"default_item":3,"flag":0},"POKEDEX_REWARD_105":{"address":5729576,"default_item":3,"flag":0},"POKEDEX_REWARD_106":{"address":5729578,"default_item":3,"flag":0},"POKEDEX_REWARD_107":{"address":5729580,"default_item":3,"flag":0},"POKEDEX_REWARD_108":{"address":5729582,"default_item":3,"flag":0},"POKEDEX_REWARD_109":{"address":5729584,"default_item":3,"flag":0},"POKEDEX_REWARD_110":{"address":5729586,"default_item":3,"flag":0},"POKEDEX_REWARD_111":{"address":5729588,"default_item":3,"flag":0},"POKEDEX_REWARD_112":{"address":5729590,"default_item":3,"flag":0},"POKEDEX_REWARD_113":{"address":5729592,"default_item":3,"flag":0},"POKEDEX_REWARD_114":{"address":5729594,"default_item":3,"flag":0},"POKEDEX_REWARD_115":{"address":5729596,"default_item":3,"flag":0},"POKEDEX_REWARD_116":{"address":5729598,"default_item":3,"flag":0},"POKEDEX_REWARD_117":{"address":5729600,"default_item":3,"flag":0},"POKEDEX_REWARD_118":{"address":5729602,"default_item":3,"flag":0},"POKEDEX_REWARD_119":{"address":5729604,"default_item":3,"flag":0},"POKEDEX_REWARD_120":{"address":5729606,"default_item":3,"flag":0},"POKEDEX_REWARD_121":{"address":5729608,"default_item":3,"flag":0},"POKEDEX_REWARD_122":{"address":5729610,"default_item":3,"flag":0},"POKEDEX_REWARD_123":{"address":5729612,"default_item":3,"flag":0},"POKEDEX_REWARD_124":{"address":5729614,"default_item":3,"flag":0},"POKEDEX_REWARD_125":{"address":5729616,"default_item":3,"flag":0},"POKEDEX_REWARD_126":{"address":5729618,"default_item":3,"flag":0},"POKEDEX_REWARD_127":{"address":5729620,"default_item":3,"flag":0},"POKEDEX_REWARD_128":{"address":5729622,"default_item":3,"flag":0},"POKEDEX_REWARD_129":{"address":5729624,"default_item":3,"flag":0},"POKEDEX_REWARD_130":{"address":5729626,"default_item":3,"flag":0},"POKEDEX_REWARD_131":{"address":5729628,"default_item":3,"flag":0},"POKEDEX_REWARD_132":{"address":5729630,"default_item":3,"flag":0},"POKEDEX_REWARD_133":{"address":5729632,"default_item":3,"flag":0},"POKEDEX_REWARD_134":{"address":5729634,"default_item":3,"flag":0},"POKEDEX_REWARD_135":{"address":5729636,"default_item":3,"flag":0},"POKEDEX_REWARD_136":{"address":5729638,"default_item":3,"flag":0},"POKEDEX_REWARD_137":{"address":5729640,"default_item":3,"flag":0},"POKEDEX_REWARD_138":{"address":5729642,"default_item":3,"flag":0},"POKEDEX_REWARD_139":{"address":5729644,"default_item":3,"flag":0},"POKEDEX_REWARD_140":{"address":5729646,"default_item":3,"flag":0},"POKEDEX_REWARD_141":{"address":5729648,"default_item":3,"flag":0},"POKEDEX_REWARD_142":{"address":5729650,"default_item":3,"flag":0},"POKEDEX_REWARD_143":{"address":5729652,"default_item":3,"flag":0},"POKEDEX_REWARD_144":{"address":5729654,"default_item":3,"flag":0},"POKEDEX_REWARD_145":{"address":5729656,"default_item":3,"flag":0},"POKEDEX_REWARD_146":{"address":5729658,"default_item":3,"flag":0},"POKEDEX_REWARD_147":{"address":5729660,"default_item":3,"flag":0},"POKEDEX_REWARD_148":{"address":5729662,"default_item":3,"flag":0},"POKEDEX_REWARD_149":{"address":5729664,"default_item":3,"flag":0},"POKEDEX_REWARD_150":{"address":5729666,"default_item":3,"flag":0},"POKEDEX_REWARD_151":{"address":5729668,"default_item":3,"flag":0},"POKEDEX_REWARD_152":{"address":5729670,"default_item":3,"flag":0},"POKEDEX_REWARD_153":{"address":5729672,"default_item":3,"flag":0},"POKEDEX_REWARD_154":{"address":5729674,"default_item":3,"flag":0},"POKEDEX_REWARD_155":{"address":5729676,"default_item":3,"flag":0},"POKEDEX_REWARD_156":{"address":5729678,"default_item":3,"flag":0},"POKEDEX_REWARD_157":{"address":5729680,"default_item":3,"flag":0},"POKEDEX_REWARD_158":{"address":5729682,"default_item":3,"flag":0},"POKEDEX_REWARD_159":{"address":5729684,"default_item":3,"flag":0},"POKEDEX_REWARD_160":{"address":5729686,"default_item":3,"flag":0},"POKEDEX_REWARD_161":{"address":5729688,"default_item":3,"flag":0},"POKEDEX_REWARD_162":{"address":5729690,"default_item":3,"flag":0},"POKEDEX_REWARD_163":{"address":5729692,"default_item":3,"flag":0},"POKEDEX_REWARD_164":{"address":5729694,"default_item":3,"flag":0},"POKEDEX_REWARD_165":{"address":5729696,"default_item":3,"flag":0},"POKEDEX_REWARD_166":{"address":5729698,"default_item":3,"flag":0},"POKEDEX_REWARD_167":{"address":5729700,"default_item":3,"flag":0},"POKEDEX_REWARD_168":{"address":5729702,"default_item":3,"flag":0},"POKEDEX_REWARD_169":{"address":5729704,"default_item":3,"flag":0},"POKEDEX_REWARD_170":{"address":5729706,"default_item":3,"flag":0},"POKEDEX_REWARD_171":{"address":5729708,"default_item":3,"flag":0},"POKEDEX_REWARD_172":{"address":5729710,"default_item":3,"flag":0},"POKEDEX_REWARD_173":{"address":5729712,"default_item":3,"flag":0},"POKEDEX_REWARD_174":{"address":5729714,"default_item":3,"flag":0},"POKEDEX_REWARD_175":{"address":5729716,"default_item":3,"flag":0},"POKEDEX_REWARD_176":{"address":5729718,"default_item":3,"flag":0},"POKEDEX_REWARD_177":{"address":5729720,"default_item":3,"flag":0},"POKEDEX_REWARD_178":{"address":5729722,"default_item":3,"flag":0},"POKEDEX_REWARD_179":{"address":5729724,"default_item":3,"flag":0},"POKEDEX_REWARD_180":{"address":5729726,"default_item":3,"flag":0},"POKEDEX_REWARD_181":{"address":5729728,"default_item":3,"flag":0},"POKEDEX_REWARD_182":{"address":5729730,"default_item":3,"flag":0},"POKEDEX_REWARD_183":{"address":5729732,"default_item":3,"flag":0},"POKEDEX_REWARD_184":{"address":5729734,"default_item":3,"flag":0},"POKEDEX_REWARD_185":{"address":5729736,"default_item":3,"flag":0},"POKEDEX_REWARD_186":{"address":5729738,"default_item":3,"flag":0},"POKEDEX_REWARD_187":{"address":5729740,"default_item":3,"flag":0},"POKEDEX_REWARD_188":{"address":5729742,"default_item":3,"flag":0},"POKEDEX_REWARD_189":{"address":5729744,"default_item":3,"flag":0},"POKEDEX_REWARD_190":{"address":5729746,"default_item":3,"flag":0},"POKEDEX_REWARD_191":{"address":5729748,"default_item":3,"flag":0},"POKEDEX_REWARD_192":{"address":5729750,"default_item":3,"flag":0},"POKEDEX_REWARD_193":{"address":5729752,"default_item":3,"flag":0},"POKEDEX_REWARD_194":{"address":5729754,"default_item":3,"flag":0},"POKEDEX_REWARD_195":{"address":5729756,"default_item":3,"flag":0},"POKEDEX_REWARD_196":{"address":5729758,"default_item":3,"flag":0},"POKEDEX_REWARD_197":{"address":5729760,"default_item":3,"flag":0},"POKEDEX_REWARD_198":{"address":5729762,"default_item":3,"flag":0},"POKEDEX_REWARD_199":{"address":5729764,"default_item":3,"flag":0},"POKEDEX_REWARD_200":{"address":5729766,"default_item":3,"flag":0},"POKEDEX_REWARD_201":{"address":5729768,"default_item":3,"flag":0},"POKEDEX_REWARD_202":{"address":5729770,"default_item":3,"flag":0},"POKEDEX_REWARD_203":{"address":5729772,"default_item":3,"flag":0},"POKEDEX_REWARD_204":{"address":5729774,"default_item":3,"flag":0},"POKEDEX_REWARD_205":{"address":5729776,"default_item":3,"flag":0},"POKEDEX_REWARD_206":{"address":5729778,"default_item":3,"flag":0},"POKEDEX_REWARD_207":{"address":5729780,"default_item":3,"flag":0},"POKEDEX_REWARD_208":{"address":5729782,"default_item":3,"flag":0},"POKEDEX_REWARD_209":{"address":5729784,"default_item":3,"flag":0},"POKEDEX_REWARD_210":{"address":5729786,"default_item":3,"flag":0},"POKEDEX_REWARD_211":{"address":5729788,"default_item":3,"flag":0},"POKEDEX_REWARD_212":{"address":5729790,"default_item":3,"flag":0},"POKEDEX_REWARD_213":{"address":5729792,"default_item":3,"flag":0},"POKEDEX_REWARD_214":{"address":5729794,"default_item":3,"flag":0},"POKEDEX_REWARD_215":{"address":5729796,"default_item":3,"flag":0},"POKEDEX_REWARD_216":{"address":5729798,"default_item":3,"flag":0},"POKEDEX_REWARD_217":{"address":5729800,"default_item":3,"flag":0},"POKEDEX_REWARD_218":{"address":5729802,"default_item":3,"flag":0},"POKEDEX_REWARD_219":{"address":5729804,"default_item":3,"flag":0},"POKEDEX_REWARD_220":{"address":5729806,"default_item":3,"flag":0},"POKEDEX_REWARD_221":{"address":5729808,"default_item":3,"flag":0},"POKEDEX_REWARD_222":{"address":5729810,"default_item":3,"flag":0},"POKEDEX_REWARD_223":{"address":5729812,"default_item":3,"flag":0},"POKEDEX_REWARD_224":{"address":5729814,"default_item":3,"flag":0},"POKEDEX_REWARD_225":{"address":5729816,"default_item":3,"flag":0},"POKEDEX_REWARD_226":{"address":5729818,"default_item":3,"flag":0},"POKEDEX_REWARD_227":{"address":5729820,"default_item":3,"flag":0},"POKEDEX_REWARD_228":{"address":5729822,"default_item":3,"flag":0},"POKEDEX_REWARD_229":{"address":5729824,"default_item":3,"flag":0},"POKEDEX_REWARD_230":{"address":5729826,"default_item":3,"flag":0},"POKEDEX_REWARD_231":{"address":5729828,"default_item":3,"flag":0},"POKEDEX_REWARD_232":{"address":5729830,"default_item":3,"flag":0},"POKEDEX_REWARD_233":{"address":5729832,"default_item":3,"flag":0},"POKEDEX_REWARD_234":{"address":5729834,"default_item":3,"flag":0},"POKEDEX_REWARD_235":{"address":5729836,"default_item":3,"flag":0},"POKEDEX_REWARD_236":{"address":5729838,"default_item":3,"flag":0},"POKEDEX_REWARD_237":{"address":5729840,"default_item":3,"flag":0},"POKEDEX_REWARD_238":{"address":5729842,"default_item":3,"flag":0},"POKEDEX_REWARD_239":{"address":5729844,"default_item":3,"flag":0},"POKEDEX_REWARD_240":{"address":5729846,"default_item":3,"flag":0},"POKEDEX_REWARD_241":{"address":5729848,"default_item":3,"flag":0},"POKEDEX_REWARD_242":{"address":5729850,"default_item":3,"flag":0},"POKEDEX_REWARD_243":{"address":5729852,"default_item":3,"flag":0},"POKEDEX_REWARD_244":{"address":5729854,"default_item":3,"flag":0},"POKEDEX_REWARD_245":{"address":5729856,"default_item":3,"flag":0},"POKEDEX_REWARD_246":{"address":5729858,"default_item":3,"flag":0},"POKEDEX_REWARD_247":{"address":5729860,"default_item":3,"flag":0},"POKEDEX_REWARD_248":{"address":5729862,"default_item":3,"flag":0},"POKEDEX_REWARD_249":{"address":5729864,"default_item":3,"flag":0},"POKEDEX_REWARD_250":{"address":5729866,"default_item":3,"flag":0},"POKEDEX_REWARD_251":{"address":5729868,"default_item":3,"flag":0},"POKEDEX_REWARD_252":{"address":5729870,"default_item":3,"flag":0},"POKEDEX_REWARD_253":{"address":5729872,"default_item":3,"flag":0},"POKEDEX_REWARD_254":{"address":5729874,"default_item":3,"flag":0},"POKEDEX_REWARD_255":{"address":5729876,"default_item":3,"flag":0},"POKEDEX_REWARD_256":{"address":5729878,"default_item":3,"flag":0},"POKEDEX_REWARD_257":{"address":5729880,"default_item":3,"flag":0},"POKEDEX_REWARD_258":{"address":5729882,"default_item":3,"flag":0},"POKEDEX_REWARD_259":{"address":5729884,"default_item":3,"flag":0},"POKEDEX_REWARD_260":{"address":5729886,"default_item":3,"flag":0},"POKEDEX_REWARD_261":{"address":5729888,"default_item":3,"flag":0},"POKEDEX_REWARD_262":{"address":5729890,"default_item":3,"flag":0},"POKEDEX_REWARD_263":{"address":5729892,"default_item":3,"flag":0},"POKEDEX_REWARD_264":{"address":5729894,"default_item":3,"flag":0},"POKEDEX_REWARD_265":{"address":5729896,"default_item":3,"flag":0},"POKEDEX_REWARD_266":{"address":5729898,"default_item":3,"flag":0},"POKEDEX_REWARD_267":{"address":5729900,"default_item":3,"flag":0},"POKEDEX_REWARD_268":{"address":5729902,"default_item":3,"flag":0},"POKEDEX_REWARD_269":{"address":5729904,"default_item":3,"flag":0},"POKEDEX_REWARD_270":{"address":5729906,"default_item":3,"flag":0},"POKEDEX_REWARD_271":{"address":5729908,"default_item":3,"flag":0},"POKEDEX_REWARD_272":{"address":5729910,"default_item":3,"flag":0},"POKEDEX_REWARD_273":{"address":5729912,"default_item":3,"flag":0},"POKEDEX_REWARD_274":{"address":5729914,"default_item":3,"flag":0},"POKEDEX_REWARD_275":{"address":5729916,"default_item":3,"flag":0},"POKEDEX_REWARD_276":{"address":5729918,"default_item":3,"flag":0},"POKEDEX_REWARD_277":{"address":5729920,"default_item":3,"flag":0},"POKEDEX_REWARD_278":{"address":5729922,"default_item":3,"flag":0},"POKEDEX_REWARD_279":{"address":5729924,"default_item":3,"flag":0},"POKEDEX_REWARD_280":{"address":5729926,"default_item":3,"flag":0},"POKEDEX_REWARD_281":{"address":5729928,"default_item":3,"flag":0},"POKEDEX_REWARD_282":{"address":5729930,"default_item":3,"flag":0},"POKEDEX_REWARD_283":{"address":5729932,"default_item":3,"flag":0},"POKEDEX_REWARD_284":{"address":5729934,"default_item":3,"flag":0},"POKEDEX_REWARD_285":{"address":5729936,"default_item":3,"flag":0},"POKEDEX_REWARD_286":{"address":5729938,"default_item":3,"flag":0},"POKEDEX_REWARD_287":{"address":5729940,"default_item":3,"flag":0},"POKEDEX_REWARD_288":{"address":5729942,"default_item":3,"flag":0},"POKEDEX_REWARD_289":{"address":5729944,"default_item":3,"flag":0},"POKEDEX_REWARD_290":{"address":5729946,"default_item":3,"flag":0},"POKEDEX_REWARD_291":{"address":5729948,"default_item":3,"flag":0},"POKEDEX_REWARD_292":{"address":5729950,"default_item":3,"flag":0},"POKEDEX_REWARD_293":{"address":5729952,"default_item":3,"flag":0},"POKEDEX_REWARD_294":{"address":5729954,"default_item":3,"flag":0},"POKEDEX_REWARD_295":{"address":5729956,"default_item":3,"flag":0},"POKEDEX_REWARD_296":{"address":5729958,"default_item":3,"flag":0},"POKEDEX_REWARD_297":{"address":5729960,"default_item":3,"flag":0},"POKEDEX_REWARD_298":{"address":5729962,"default_item":3,"flag":0},"POKEDEX_REWARD_299":{"address":5729964,"default_item":3,"flag":0},"POKEDEX_REWARD_300":{"address":5729966,"default_item":3,"flag":0},"POKEDEX_REWARD_301":{"address":5729968,"default_item":3,"flag":0},"POKEDEX_REWARD_302":{"address":5729970,"default_item":3,"flag":0},"POKEDEX_REWARD_303":{"address":5729972,"default_item":3,"flag":0},"POKEDEX_REWARD_304":{"address":5729974,"default_item":3,"flag":0},"POKEDEX_REWARD_305":{"address":5729976,"default_item":3,"flag":0},"POKEDEX_REWARD_306":{"address":5729978,"default_item":3,"flag":0},"POKEDEX_REWARD_307":{"address":5729980,"default_item":3,"flag":0},"POKEDEX_REWARD_308":{"address":5729982,"default_item":3,"flag":0},"POKEDEX_REWARD_309":{"address":5729984,"default_item":3,"flag":0},"POKEDEX_REWARD_310":{"address":5729986,"default_item":3,"flag":0},"POKEDEX_REWARD_311":{"address":5729988,"default_item":3,"flag":0},"POKEDEX_REWARD_312":{"address":5729990,"default_item":3,"flag":0},"POKEDEX_REWARD_313":{"address":5729992,"default_item":3,"flag":0},"POKEDEX_REWARD_314":{"address":5729994,"default_item":3,"flag":0},"POKEDEX_REWARD_315":{"address":5729996,"default_item":3,"flag":0},"POKEDEX_REWARD_316":{"address":5729998,"default_item":3,"flag":0},"POKEDEX_REWARD_317":{"address":5730000,"default_item":3,"flag":0},"POKEDEX_REWARD_318":{"address":5730002,"default_item":3,"flag":0},"POKEDEX_REWARD_319":{"address":5730004,"default_item":3,"flag":0},"POKEDEX_REWARD_320":{"address":5730006,"default_item":3,"flag":0},"POKEDEX_REWARD_321":{"address":5730008,"default_item":3,"flag":0},"POKEDEX_REWARD_322":{"address":5730010,"default_item":3,"flag":0},"POKEDEX_REWARD_323":{"address":5730012,"default_item":3,"flag":0},"POKEDEX_REWARD_324":{"address":5730014,"default_item":3,"flag":0},"POKEDEX_REWARD_325":{"address":5730016,"default_item":3,"flag":0},"POKEDEX_REWARD_326":{"address":5730018,"default_item":3,"flag":0},"POKEDEX_REWARD_327":{"address":5730020,"default_item":3,"flag":0},"POKEDEX_REWARD_328":{"address":5730022,"default_item":3,"flag":0},"POKEDEX_REWARD_329":{"address":5730024,"default_item":3,"flag":0},"POKEDEX_REWARD_330":{"address":5730026,"default_item":3,"flag":0},"POKEDEX_REWARD_331":{"address":5730028,"default_item":3,"flag":0},"POKEDEX_REWARD_332":{"address":5730030,"default_item":3,"flag":0},"POKEDEX_REWARD_333":{"address":5730032,"default_item":3,"flag":0},"POKEDEX_REWARD_334":{"address":5730034,"default_item":3,"flag":0},"POKEDEX_REWARD_335":{"address":5730036,"default_item":3,"flag":0},"POKEDEX_REWARD_336":{"address":5730038,"default_item":3,"flag":0},"POKEDEX_REWARD_337":{"address":5730040,"default_item":3,"flag":0},"POKEDEX_REWARD_338":{"address":5730042,"default_item":3,"flag":0},"POKEDEX_REWARD_339":{"address":5730044,"default_item":3,"flag":0},"POKEDEX_REWARD_340":{"address":5730046,"default_item":3,"flag":0},"POKEDEX_REWARD_341":{"address":5730048,"default_item":3,"flag":0},"POKEDEX_REWARD_342":{"address":5730050,"default_item":3,"flag":0},"POKEDEX_REWARD_343":{"address":5730052,"default_item":3,"flag":0},"POKEDEX_REWARD_344":{"address":5730054,"default_item":3,"flag":0},"POKEDEX_REWARD_345":{"address":5730056,"default_item":3,"flag":0},"POKEDEX_REWARD_346":{"address":5730058,"default_item":3,"flag":0},"POKEDEX_REWARD_347":{"address":5730060,"default_item":3,"flag":0},"POKEDEX_REWARD_348":{"address":5730062,"default_item":3,"flag":0},"POKEDEX_REWARD_349":{"address":5730064,"default_item":3,"flag":0},"POKEDEX_REWARD_350":{"address":5730066,"default_item":3,"flag":0},"POKEDEX_REWARD_351":{"address":5730068,"default_item":3,"flag":0},"POKEDEX_REWARD_352":{"address":5730070,"default_item":3,"flag":0},"POKEDEX_REWARD_353":{"address":5730072,"default_item":3,"flag":0},"POKEDEX_REWARD_354":{"address":5730074,"default_item":3,"flag":0},"POKEDEX_REWARD_355":{"address":5730076,"default_item":3,"flag":0},"POKEDEX_REWARD_356":{"address":5730078,"default_item":3,"flag":0},"POKEDEX_REWARD_357":{"address":5730080,"default_item":3,"flag":0},"POKEDEX_REWARD_358":{"address":5730082,"default_item":3,"flag":0},"POKEDEX_REWARD_359":{"address":5730084,"default_item":3,"flag":0},"POKEDEX_REWARD_360":{"address":5730086,"default_item":3,"flag":0},"POKEDEX_REWARD_361":{"address":5730088,"default_item":3,"flag":0},"POKEDEX_REWARD_362":{"address":5730090,"default_item":3,"flag":0},"POKEDEX_REWARD_363":{"address":5730092,"default_item":3,"flag":0},"POKEDEX_REWARD_364":{"address":5730094,"default_item":3,"flag":0},"POKEDEX_REWARD_365":{"address":5730096,"default_item":3,"flag":0},"POKEDEX_REWARD_366":{"address":5730098,"default_item":3,"flag":0},"POKEDEX_REWARD_367":{"address":5730100,"default_item":3,"flag":0},"POKEDEX_REWARD_368":{"address":5730102,"default_item":3,"flag":0},"POKEDEX_REWARD_369":{"address":5730104,"default_item":3,"flag":0},"POKEDEX_REWARD_370":{"address":5730106,"default_item":3,"flag":0},"POKEDEX_REWARD_371":{"address":5730108,"default_item":3,"flag":0},"POKEDEX_REWARD_372":{"address":5730110,"default_item":3,"flag":0},"POKEDEX_REWARD_373":{"address":5730112,"default_item":3,"flag":0},"POKEDEX_REWARD_374":{"address":5730114,"default_item":3,"flag":0},"POKEDEX_REWARD_375":{"address":5730116,"default_item":3,"flag":0},"POKEDEX_REWARD_376":{"address":5730118,"default_item":3,"flag":0},"POKEDEX_REWARD_377":{"address":5730120,"default_item":3,"flag":0},"POKEDEX_REWARD_378":{"address":5730122,"default_item":3,"flag":0},"POKEDEX_REWARD_379":{"address":5730124,"default_item":3,"flag":0},"POKEDEX_REWARD_380":{"address":5730126,"default_item":3,"flag":0},"POKEDEX_REWARD_381":{"address":5730128,"default_item":3,"flag":0},"POKEDEX_REWARD_382":{"address":5730130,"default_item":3,"flag":0},"POKEDEX_REWARD_383":{"address":5730132,"default_item":3,"flag":0},"POKEDEX_REWARD_384":{"address":5730134,"default_item":3,"flag":0},"POKEDEX_REWARD_385":{"address":5730136,"default_item":3,"flag":0},"POKEDEX_REWARD_386":{"address":5730138,"default_item":3,"flag":0},"TRAINER_AARON_REWARD":{"address":5602878,"default_item":104,"flag":1677},"TRAINER_ABIGAIL_1_REWARD":{"address":5602800,"default_item":106,"flag":1638},"TRAINER_AIDAN_REWARD":{"address":5603432,"default_item":104,"flag":1954},"TRAINER_AISHA_REWARD":{"address":5603598,"default_item":106,"flag":2037},"TRAINER_ALBERTO_REWARD":{"address":5602108,"default_item":108,"flag":1292},"TRAINER_ALBERT_REWARD":{"address":5602244,"default_item":104,"flag":1360},"TRAINER_ALEXA_REWARD":{"address":5603424,"default_item":104,"flag":1950},"TRAINER_ALEXIA_REWARD":{"address":5602264,"default_item":104,"flag":1370},"TRAINER_ALEX_REWARD":{"address":5602910,"default_item":104,"flag":1693},"TRAINER_ALICE_REWARD":{"address":5602980,"default_item":103,"flag":1728},"TRAINER_ALIX_REWARD":{"address":5603584,"default_item":106,"flag":2030},"TRAINER_ALLEN_REWARD":{"address":5602750,"default_item":103,"flag":1613},"TRAINER_ALLISON_REWARD":{"address":5602858,"default_item":104,"flag":1667},"TRAINER_ALYSSA_REWARD":{"address":5603486,"default_item":106,"flag":1981},"TRAINER_AMY_AND_LIV_1_REWARD":{"address":5603046,"default_item":103,"flag":1761},"TRAINER_ANDREA_REWARD":{"address":5603310,"default_item":106,"flag":1893},"TRAINER_ANDRES_1_REWARD":{"address":5603558,"default_item":104,"flag":2017},"TRAINER_ANDREW_REWARD":{"address":5602756,"default_item":106,"flag":1616},"TRAINER_ANGELICA_REWARD":{"address":5602956,"default_item":104,"flag":1716},"TRAINER_ANGELINA_REWARD":{"address":5603508,"default_item":106,"flag":1992},"TRAINER_ANGELO_REWARD":{"address":5603688,"default_item":104,"flag":2082},"TRAINER_ANNA_AND_MEG_1_REWARD":{"address":5602658,"default_item":106,"flag":1567},"TRAINER_ANNIKA_REWARD":{"address":5603088,"default_item":107,"flag":1782},"TRAINER_ANTHONY_REWARD":{"address":5602788,"default_item":106,"flag":1632},"TRAINER_ARCHIE_REWARD":{"address":5602152,"default_item":107,"flag":1314},"TRAINER_ASHLEY_REWARD":{"address":5603394,"default_item":106,"flag":1935},"TRAINER_ATHENA_REWARD":{"address":5603238,"default_item":104,"flag":1857},"TRAINER_ATSUSHI_REWARD":{"address":5602464,"default_item":104,"flag":1470},"TRAINER_AURON_REWARD":{"address":5603096,"default_item":104,"flag":1786},"TRAINER_AUSTINA_REWARD":{"address":5602200,"default_item":103,"flag":1338},"TRAINER_AUTUMN_REWARD":{"address":5602518,"default_item":106,"flag":1497},"TRAINER_AXLE_REWARD":{"address":5602490,"default_item":108,"flag":1483},"TRAINER_BARNY_REWARD":{"address":5602770,"default_item":104,"flag":1623},"TRAINER_BARRY_REWARD":{"address":5602410,"default_item":106,"flag":1443},"TRAINER_BEAU_REWARD":{"address":5602508,"default_item":106,"flag":1492},"TRAINER_BECKY_REWARD":{"address":5603024,"default_item":106,"flag":1750},"TRAINER_BECK_REWARD":{"address":5602912,"default_item":104,"flag":1694},"TRAINER_BENJAMIN_1_REWARD":{"address":5602790,"default_item":106,"flag":1633},"TRAINER_BEN_REWARD":{"address":5602730,"default_item":106,"flag":1603},"TRAINER_BERKE_REWARD":{"address":5602232,"default_item":104,"flag":1354},"TRAINER_BERNIE_1_REWARD":{"address":5602496,"default_item":106,"flag":1486},"TRAINER_BETHANY_REWARD":{"address":5602686,"default_item":107,"flag":1581},"TRAINER_BETH_REWARD":{"address":5602974,"default_item":103,"flag":1725},"TRAINER_BEVERLY_REWARD":{"address":5602966,"default_item":103,"flag":1721},"TRAINER_BIANCA_REWARD":{"address":5603496,"default_item":106,"flag":1986},"TRAINER_BILLY_REWARD":{"address":5602722,"default_item":103,"flag":1599},"TRAINER_BLAKE_REWARD":{"address":5602554,"default_item":108,"flag":1515},"TRAINER_BRANDEN_REWARD":{"address":5603574,"default_item":106,"flag":2025},"TRAINER_BRANDI_REWARD":{"address":5603596,"default_item":106,"flag":2036},"TRAINER_BRAWLY_1_REWARD":{"address":5602616,"default_item":104,"flag":1546},"TRAINER_BRAXTON_REWARD":{"address":5602234,"default_item":104,"flag":1355},"TRAINER_BRENDAN_LILYCOVE_MUDKIP_REWARD":{"address":5603406,"default_item":104,"flag":1941},"TRAINER_BRENDAN_LILYCOVE_TORCHIC_REWARD":{"address":5603410,"default_item":104,"flag":1943},"TRAINER_BRENDAN_LILYCOVE_TREECKO_REWARD":{"address":5603408,"default_item":104,"flag":1942},"TRAINER_BRENDAN_ROUTE_103_MUDKIP_REWARD":{"address":5603124,"default_item":106,"flag":1800},"TRAINER_BRENDAN_ROUTE_103_TORCHIC_REWARD":{"address":5603136,"default_item":106,"flag":1806},"TRAINER_BRENDAN_ROUTE_103_TREECKO_REWARD":{"address":5603130,"default_item":106,"flag":1803},"TRAINER_BRENDAN_ROUTE_110_MUDKIP_REWARD":{"address":5603126,"default_item":104,"flag":1801},"TRAINER_BRENDAN_ROUTE_110_TORCHIC_REWARD":{"address":5603138,"default_item":104,"flag":1807},"TRAINER_BRENDAN_ROUTE_110_TREECKO_REWARD":{"address":5603132,"default_item":104,"flag":1804},"TRAINER_BRENDAN_ROUTE_119_MUDKIP_REWARD":{"address":5603128,"default_item":104,"flag":1802},"TRAINER_BRENDAN_ROUTE_119_TORCHIC_REWARD":{"address":5603140,"default_item":104,"flag":1808},"TRAINER_BRENDAN_ROUTE_119_TREECKO_REWARD":{"address":5603134,"default_item":104,"flag":1805},"TRAINER_BRENDAN_RUSTBORO_MUDKIP_REWARD":{"address":5603270,"default_item":108,"flag":1873},"TRAINER_BRENDAN_RUSTBORO_TORCHIC_REWARD":{"address":5603282,"default_item":108,"flag":1879},"TRAINER_BRENDAN_RUSTBORO_TREECKO_REWARD":{"address":5603268,"default_item":108,"flag":1872},"TRAINER_BRENDA_REWARD":{"address":5602992,"default_item":106,"flag":1734},"TRAINER_BRENDEN_REWARD":{"address":5603228,"default_item":106,"flag":1852},"TRAINER_BRENT_REWARD":{"address":5602530,"default_item":104,"flag":1503},"TRAINER_BRIANNA_REWARD":{"address":5602320,"default_item":110,"flag":1398},"TRAINER_BRICE_REWARD":{"address":5603336,"default_item":106,"flag":1906},"TRAINER_BRIDGET_REWARD":{"address":5602342,"default_item":107,"flag":1409},"TRAINER_BROOKE_1_REWARD":{"address":5602272,"default_item":108,"flag":1374},"TRAINER_BRYANT_REWARD":{"address":5603576,"default_item":106,"flag":2026},"TRAINER_BRYAN_REWARD":{"address":5603572,"default_item":104,"flag":2024},"TRAINER_CALE_REWARD":{"address":5603612,"default_item":104,"flag":2044},"TRAINER_CALLIE_REWARD":{"address":5603610,"default_item":106,"flag":2043},"TRAINER_CALVIN_1_REWARD":{"address":5602720,"default_item":103,"flag":1598},"TRAINER_CAMDEN_REWARD":{"address":5602832,"default_item":104,"flag":1654},"TRAINER_CAMERON_1_REWARD":{"address":5602560,"default_item":108,"flag":1518},"TRAINER_CAMRON_REWARD":{"address":5603562,"default_item":104,"flag":2019},"TRAINER_CARLEE_REWARD":{"address":5603012,"default_item":106,"flag":1744},"TRAINER_CAROLINA_REWARD":{"address":5603566,"default_item":104,"flag":2021},"TRAINER_CAROLINE_REWARD":{"address":5602282,"default_item":104,"flag":1379},"TRAINER_CAROL_REWARD":{"address":5603026,"default_item":106,"flag":1751},"TRAINER_CARTER_REWARD":{"address":5602774,"default_item":104,"flag":1625},"TRAINER_CATHERINE_1_REWARD":{"address":5603202,"default_item":104,"flag":1839},"TRAINER_CEDRIC_REWARD":{"address":5603034,"default_item":108,"flag":1755},"TRAINER_CELIA_REWARD":{"address":5603570,"default_item":106,"flag":2023},"TRAINER_CELINA_REWARD":{"address":5603494,"default_item":108,"flag":1985},"TRAINER_CHAD_REWARD":{"address":5602432,"default_item":106,"flag":1454},"TRAINER_CHANDLER_REWARD":{"address":5603480,"default_item":103,"flag":1978},"TRAINER_CHARLIE_REWARD":{"address":5602216,"default_item":103,"flag":1346},"TRAINER_CHARLOTTE_REWARD":{"address":5603512,"default_item":106,"flag":1994},"TRAINER_CHASE_REWARD":{"address":5602840,"default_item":104,"flag":1658},"TRAINER_CHESTER_REWARD":{"address":5602900,"default_item":108,"flag":1688},"TRAINER_CHIP_REWARD":{"address":5602174,"default_item":104,"flag":1325},"TRAINER_CHRIS_REWARD":{"address":5603470,"default_item":108,"flag":1973},"TRAINER_CINDY_1_REWARD":{"address":5602312,"default_item":104,"flag":1394},"TRAINER_CLARENCE_REWARD":{"address":5603244,"default_item":106,"flag":1860},"TRAINER_CLARISSA_REWARD":{"address":5602954,"default_item":104,"flag":1715},"TRAINER_CLARK_REWARD":{"address":5603346,"default_item":106,"flag":1911},"TRAINER_CLAUDE_REWARD":{"address":5602760,"default_item":108,"flag":1618},"TRAINER_CLIFFORD_REWARD":{"address":5603252,"default_item":107,"flag":1864},"TRAINER_COBY_REWARD":{"address":5603502,"default_item":106,"flag":1989},"TRAINER_COLE_REWARD":{"address":5602486,"default_item":108,"flag":1481},"TRAINER_COLIN_REWARD":{"address":5602894,"default_item":108,"flag":1685},"TRAINER_COLTON_REWARD":{"address":5602672,"default_item":107,"flag":1574},"TRAINER_CONNIE_REWARD":{"address":5602340,"default_item":107,"flag":1408},"TRAINER_CONOR_REWARD":{"address":5603106,"default_item":104,"flag":1791},"TRAINER_CORY_1_REWARD":{"address":5603564,"default_item":108,"flag":2020},"TRAINER_CRISSY_REWARD":{"address":5603312,"default_item":106,"flag":1894},"TRAINER_CRISTIAN_REWARD":{"address":5603232,"default_item":106,"flag":1854},"TRAINER_CRISTIN_1_REWARD":{"address":5603618,"default_item":104,"flag":2047},"TRAINER_CYNDY_1_REWARD":{"address":5602938,"default_item":106,"flag":1707},"TRAINER_DAISUKE_REWARD":{"address":5602462,"default_item":106,"flag":1469},"TRAINER_DAISY_REWARD":{"address":5602156,"default_item":106,"flag":1316},"TRAINER_DALE_REWARD":{"address":5602766,"default_item":106,"flag":1621},"TRAINER_DALTON_1_REWARD":{"address":5602476,"default_item":106,"flag":1476},"TRAINER_DANA_REWARD":{"address":5603000,"default_item":106,"flag":1738},"TRAINER_DANIELLE_REWARD":{"address":5603384,"default_item":106,"flag":1930},"TRAINER_DAPHNE_REWARD":{"address":5602314,"default_item":110,"flag":1395},"TRAINER_DARCY_REWARD":{"address":5603550,"default_item":104,"flag":2013},"TRAINER_DARIAN_REWARD":{"address":5603476,"default_item":106,"flag":1976},"TRAINER_DARIUS_REWARD":{"address":5603690,"default_item":108,"flag":2083},"TRAINER_DARRIN_REWARD":{"address":5602392,"default_item":103,"flag":1434},"TRAINER_DAVID_REWARD":{"address":5602400,"default_item":103,"flag":1438},"TRAINER_DAVIS_REWARD":{"address":5603162,"default_item":106,"flag":1819},"TRAINER_DAWSON_REWARD":{"address":5603472,"default_item":104,"flag":1974},"TRAINER_DAYTON_REWARD":{"address":5603604,"default_item":108,"flag":2040},"TRAINER_DEANDRE_REWARD":{"address":5603514,"default_item":103,"flag":1995},"TRAINER_DEAN_REWARD":{"address":5602412,"default_item":103,"flag":1444},"TRAINER_DEBRA_REWARD":{"address":5603004,"default_item":106,"flag":1740},"TRAINER_DECLAN_REWARD":{"address":5602114,"default_item":106,"flag":1295},"TRAINER_DEMETRIUS_REWARD":{"address":5602834,"default_item":106,"flag":1655},"TRAINER_DENISE_REWARD":{"address":5602972,"default_item":103,"flag":1724},"TRAINER_DEREK_REWARD":{"address":5602538,"default_item":108,"flag":1507},"TRAINER_DEVAN_REWARD":{"address":5603590,"default_item":106,"flag":2033},"TRAINER_DEZ_AND_LUKE_REWARD":{"address":5603364,"default_item":108,"flag":1920},"TRAINER_DIANA_1_REWARD":{"address":5603032,"default_item":106,"flag":1754},"TRAINER_DIANNE_REWARD":{"address":5602918,"default_item":104,"flag":1697},"TRAINER_DILLON_REWARD":{"address":5602738,"default_item":106,"flag":1607},"TRAINER_DOMINIK_REWARD":{"address":5602388,"default_item":103,"flag":1432},"TRAINER_DONALD_REWARD":{"address":5602532,"default_item":104,"flag":1504},"TRAINER_DONNY_REWARD":{"address":5602852,"default_item":104,"flag":1664},"TRAINER_DOUGLAS_REWARD":{"address":5602390,"default_item":103,"flag":1433},"TRAINER_DOUG_REWARD":{"address":5603320,"default_item":106,"flag":1898},"TRAINER_DRAKE_REWARD":{"address":5602612,"default_item":110,"flag":1544},"TRAINER_DREW_REWARD":{"address":5602506,"default_item":106,"flag":1491},"TRAINER_DUNCAN_REWARD":{"address":5603076,"default_item":108,"flag":1776},"TRAINER_DUSTY_1_REWARD":{"address":5602172,"default_item":104,"flag":1324},"TRAINER_DWAYNE_REWARD":{"address":5603070,"default_item":106,"flag":1773},"TRAINER_DYLAN_1_REWARD":{"address":5602812,"default_item":106,"flag":1644},"TRAINER_EDGAR_REWARD":{"address":5602242,"default_item":104,"flag":1359},"TRAINER_EDMOND_REWARD":{"address":5603066,"default_item":106,"flag":1771},"TRAINER_EDWARDO_REWARD":{"address":5602892,"default_item":108,"flag":1684},"TRAINER_EDWARD_REWARD":{"address":5602548,"default_item":106,"flag":1512},"TRAINER_EDWIN_1_REWARD":{"address":5603108,"default_item":108,"flag":1792},"TRAINER_ED_REWARD":{"address":5602110,"default_item":104,"flag":1293},"TRAINER_ELIJAH_REWARD":{"address":5603568,"default_item":108,"flag":2022},"TRAINER_ELI_REWARD":{"address":5603086,"default_item":108,"flag":1781},"TRAINER_ELLIOT_1_REWARD":{"address":5602762,"default_item":106,"flag":1619},"TRAINER_ERIC_REWARD":{"address":5603348,"default_item":108,"flag":1912},"TRAINER_ERNEST_1_REWARD":{"address":5603068,"default_item":104,"flag":1772},"TRAINER_ETHAN_1_REWARD":{"address":5602516,"default_item":106,"flag":1496},"TRAINER_FABIAN_REWARD":{"address":5603602,"default_item":108,"flag":2039},"TRAINER_FELIX_REWARD":{"address":5602160,"default_item":104,"flag":1318},"TRAINER_FERNANDO_1_REWARD":{"address":5602474,"default_item":108,"flag":1475},"TRAINER_FLANNERY_1_REWARD":{"address":5602620,"default_item":107,"flag":1548},"TRAINER_FLINT_REWARD":{"address":5603392,"default_item":106,"flag":1934},"TRAINER_FOSTER_REWARD":{"address":5602176,"default_item":104,"flag":1326},"TRAINER_FRANKLIN_REWARD":{"address":5602424,"default_item":106,"flag":1450},"TRAINER_FREDRICK_REWARD":{"address":5602142,"default_item":104,"flag":1309},"TRAINER_GABRIELLE_1_REWARD":{"address":5602102,"default_item":104,"flag":1289},"TRAINER_GARRET_REWARD":{"address":5602360,"default_item":110,"flag":1418},"TRAINER_GARRISON_REWARD":{"address":5603178,"default_item":104,"flag":1827},"TRAINER_GEORGE_REWARD":{"address":5602230,"default_item":104,"flag":1353},"TRAINER_GERALD_REWARD":{"address":5603380,"default_item":104,"flag":1928},"TRAINER_GILBERT_REWARD":{"address":5602422,"default_item":106,"flag":1449},"TRAINER_GINA_AND_MIA_1_REWARD":{"address":5603050,"default_item":103,"flag":1763},"TRAINER_GLACIA_REWARD":{"address":5602610,"default_item":110,"flag":1543},"TRAINER_GRACE_REWARD":{"address":5602984,"default_item":106,"flag":1730},"TRAINER_GREG_REWARD":{"address":5603322,"default_item":106,"flag":1899},"TRAINER_GRUNT_AQUA_HIDEOUT_1_REWARD":{"address":5602088,"default_item":106,"flag":1282},"TRAINER_GRUNT_AQUA_HIDEOUT_2_REWARD":{"address":5602090,"default_item":106,"flag":1283},"TRAINER_GRUNT_AQUA_HIDEOUT_3_REWARD":{"address":5602092,"default_item":106,"flag":1284},"TRAINER_GRUNT_AQUA_HIDEOUT_4_REWARD":{"address":5602094,"default_item":106,"flag":1285},"TRAINER_GRUNT_AQUA_HIDEOUT_5_REWARD":{"address":5602138,"default_item":106,"flag":1307},"TRAINER_GRUNT_AQUA_HIDEOUT_6_REWARD":{"address":5602140,"default_item":106,"flag":1308},"TRAINER_GRUNT_AQUA_HIDEOUT_7_REWARD":{"address":5602468,"default_item":106,"flag":1472},"TRAINER_GRUNT_AQUA_HIDEOUT_8_REWARD":{"address":5602470,"default_item":106,"flag":1473},"TRAINER_GRUNT_MAGMA_HIDEOUT_10_REWARD":{"address":5603534,"default_item":106,"flag":2005},"TRAINER_GRUNT_MAGMA_HIDEOUT_11_REWARD":{"address":5603536,"default_item":106,"flag":2006},"TRAINER_GRUNT_MAGMA_HIDEOUT_12_REWARD":{"address":5603538,"default_item":106,"flag":2007},"TRAINER_GRUNT_MAGMA_HIDEOUT_13_REWARD":{"address":5603540,"default_item":106,"flag":2008},"TRAINER_GRUNT_MAGMA_HIDEOUT_14_REWARD":{"address":5603542,"default_item":106,"flag":2009},"TRAINER_GRUNT_MAGMA_HIDEOUT_15_REWARD":{"address":5603544,"default_item":106,"flag":2010},"TRAINER_GRUNT_MAGMA_HIDEOUT_16_REWARD":{"address":5603546,"default_item":106,"flag":2011},"TRAINER_GRUNT_MAGMA_HIDEOUT_1_REWARD":{"address":5603516,"default_item":106,"flag":1996},"TRAINER_GRUNT_MAGMA_HIDEOUT_2_REWARD":{"address":5603518,"default_item":106,"flag":1997},"TRAINER_GRUNT_MAGMA_HIDEOUT_3_REWARD":{"address":5603520,"default_item":106,"flag":1998},"TRAINER_GRUNT_MAGMA_HIDEOUT_4_REWARD":{"address":5603522,"default_item":106,"flag":1999},"TRAINER_GRUNT_MAGMA_HIDEOUT_5_REWARD":{"address":5603524,"default_item":106,"flag":2000},"TRAINER_GRUNT_MAGMA_HIDEOUT_6_REWARD":{"address":5603526,"default_item":106,"flag":2001},"TRAINER_GRUNT_MAGMA_HIDEOUT_7_REWARD":{"address":5603528,"default_item":106,"flag":2002},"TRAINER_GRUNT_MAGMA_HIDEOUT_8_REWARD":{"address":5603530,"default_item":106,"flag":2003},"TRAINER_GRUNT_MAGMA_HIDEOUT_9_REWARD":{"address":5603532,"default_item":106,"flag":2004},"TRAINER_GRUNT_MT_CHIMNEY_1_REWARD":{"address":5602376,"default_item":106,"flag":1426},"TRAINER_GRUNT_MT_CHIMNEY_2_REWARD":{"address":5603242,"default_item":106,"flag":1859},"TRAINER_GRUNT_MT_PYRE_1_REWARD":{"address":5602130,"default_item":106,"flag":1303},"TRAINER_GRUNT_MT_PYRE_2_REWARD":{"address":5602132,"default_item":106,"flag":1304},"TRAINER_GRUNT_MT_PYRE_3_REWARD":{"address":5602134,"default_item":106,"flag":1305},"TRAINER_GRUNT_MT_PYRE_4_REWARD":{"address":5603222,"default_item":106,"flag":1849},"TRAINER_GRUNT_MUSEUM_1_REWARD":{"address":5602124,"default_item":106,"flag":1300},"TRAINER_GRUNT_MUSEUM_2_REWARD":{"address":5602126,"default_item":106,"flag":1301},"TRAINER_GRUNT_PETALBURG_WOODS_REWARD":{"address":5602104,"default_item":103,"flag":1290},"TRAINER_GRUNT_RUSTURF_TUNNEL_REWARD":{"address":5602116,"default_item":103,"flag":1296},"TRAINER_GRUNT_SEAFLOOR_CAVERN_1_REWARD":{"address":5602096,"default_item":108,"flag":1286},"TRAINER_GRUNT_SEAFLOOR_CAVERN_2_REWARD":{"address":5602098,"default_item":108,"flag":1287},"TRAINER_GRUNT_SEAFLOOR_CAVERN_3_REWARD":{"address":5602100,"default_item":108,"flag":1288},"TRAINER_GRUNT_SEAFLOOR_CAVERN_4_REWARD":{"address":5602112,"default_item":108,"flag":1294},"TRAINER_GRUNT_SEAFLOOR_CAVERN_5_REWARD":{"address":5603218,"default_item":108,"flag":1847},"TRAINER_GRUNT_SPACE_CENTER_1_REWARD":{"address":5602128,"default_item":106,"flag":1302},"TRAINER_GRUNT_SPACE_CENTER_2_REWARD":{"address":5602316,"default_item":106,"flag":1396},"TRAINER_GRUNT_SPACE_CENTER_3_REWARD":{"address":5603256,"default_item":106,"flag":1866},"TRAINER_GRUNT_SPACE_CENTER_4_REWARD":{"address":5603258,"default_item":106,"flag":1867},"TRAINER_GRUNT_SPACE_CENTER_5_REWARD":{"address":5603260,"default_item":106,"flag":1868},"TRAINER_GRUNT_SPACE_CENTER_6_REWARD":{"address":5603262,"default_item":106,"flag":1869},"TRAINER_GRUNT_SPACE_CENTER_7_REWARD":{"address":5603264,"default_item":106,"flag":1870},"TRAINER_GRUNT_WEATHER_INST_1_REWARD":{"address":5602118,"default_item":106,"flag":1297},"TRAINER_GRUNT_WEATHER_INST_2_REWARD":{"address":5602120,"default_item":106,"flag":1298},"TRAINER_GRUNT_WEATHER_INST_3_REWARD":{"address":5602122,"default_item":106,"flag":1299},"TRAINER_GRUNT_WEATHER_INST_4_REWARD":{"address":5602136,"default_item":106,"flag":1306},"TRAINER_GRUNT_WEATHER_INST_5_REWARD":{"address":5603276,"default_item":106,"flag":1876},"TRAINER_GWEN_REWARD":{"address":5602202,"default_item":103,"flag":1339},"TRAINER_HAILEY_REWARD":{"address":5603478,"default_item":103,"flag":1977},"TRAINER_HALEY_1_REWARD":{"address":5603292,"default_item":103,"flag":1884},"TRAINER_HALLE_REWARD":{"address":5603176,"default_item":104,"flag":1826},"TRAINER_HANNAH_REWARD":{"address":5602572,"default_item":108,"flag":1524},"TRAINER_HARRISON_REWARD":{"address":5603240,"default_item":106,"flag":1858},"TRAINER_HAYDEN_REWARD":{"address":5603498,"default_item":106,"flag":1987},"TRAINER_HECTOR_REWARD":{"address":5603110,"default_item":104,"flag":1793},"TRAINER_HEIDI_REWARD":{"address":5603022,"default_item":106,"flag":1749},"TRAINER_HELENE_REWARD":{"address":5603586,"default_item":106,"flag":2031},"TRAINER_HENRY_REWARD":{"address":5603420,"default_item":104,"flag":1948},"TRAINER_HERMAN_REWARD":{"address":5602418,"default_item":106,"flag":1447},"TRAINER_HIDEO_REWARD":{"address":5603386,"default_item":106,"flag":1931},"TRAINER_HITOSHI_REWARD":{"address":5602444,"default_item":104,"flag":1460},"TRAINER_HOPE_REWARD":{"address":5602276,"default_item":104,"flag":1376},"TRAINER_HUDSON_REWARD":{"address":5603104,"default_item":104,"flag":1790},"TRAINER_HUEY_REWARD":{"address":5603064,"default_item":106,"flag":1770},"TRAINER_HUGH_REWARD":{"address":5602882,"default_item":108,"flag":1679},"TRAINER_HUMBERTO_REWARD":{"address":5602888,"default_item":108,"flag":1682},"TRAINER_IMANI_REWARD":{"address":5602968,"default_item":103,"flag":1722},"TRAINER_IRENE_REWARD":{"address":5603036,"default_item":106,"flag":1756},"TRAINER_ISAAC_1_REWARD":{"address":5603160,"default_item":106,"flag":1818},"TRAINER_ISABELLA_REWARD":{"address":5603274,"default_item":104,"flag":1875},"TRAINER_ISABELLE_REWARD":{"address":5603556,"default_item":103,"flag":2016},"TRAINER_ISABEL_1_REWARD":{"address":5602688,"default_item":104,"flag":1582},"TRAINER_ISAIAH_1_REWARD":{"address":5602836,"default_item":104,"flag":1656},"TRAINER_ISOBEL_REWARD":{"address":5602850,"default_item":104,"flag":1663},"TRAINER_IVAN_REWARD":{"address":5602758,"default_item":106,"flag":1617},"TRAINER_JACE_REWARD":{"address":5602492,"default_item":108,"flag":1484},"TRAINER_JACKI_1_REWARD":{"address":5602582,"default_item":108,"flag":1529},"TRAINER_JACKSON_1_REWARD":{"address":5603188,"default_item":104,"flag":1832},"TRAINER_JACK_REWARD":{"address":5602428,"default_item":106,"flag":1452},"TRAINER_JACLYN_REWARD":{"address":5602570,"default_item":106,"flag":1523},"TRAINER_JACOB_REWARD":{"address":5602786,"default_item":106,"flag":1631},"TRAINER_JAIDEN_REWARD":{"address":5603582,"default_item":106,"flag":2029},"TRAINER_JAMES_1_REWARD":{"address":5603326,"default_item":103,"flag":1901},"TRAINER_JANICE_REWARD":{"address":5603294,"default_item":103,"flag":1885},"TRAINER_JANI_REWARD":{"address":5602920,"default_item":103,"flag":1698},"TRAINER_JARED_REWARD":{"address":5602886,"default_item":108,"flag":1681},"TRAINER_JASMINE_REWARD":{"address":5602802,"default_item":103,"flag":1639},"TRAINER_JAYLEN_REWARD":{"address":5602736,"default_item":106,"flag":1606},"TRAINER_JAZMYN_REWARD":{"address":5603090,"default_item":106,"flag":1783},"TRAINER_JEFFREY_1_REWARD":{"address":5602536,"default_item":104,"flag":1506},"TRAINER_JEFF_REWARD":{"address":5602488,"default_item":108,"flag":1482},"TRAINER_JENNA_REWARD":{"address":5603204,"default_item":104,"flag":1840},"TRAINER_JENNIFER_REWARD":{"address":5602274,"default_item":104,"flag":1375},"TRAINER_JENNY_1_REWARD":{"address":5602982,"default_item":106,"flag":1729},"TRAINER_JEROME_REWARD":{"address":5602396,"default_item":103,"flag":1436},"TRAINER_JERRY_1_REWARD":{"address":5602630,"default_item":103,"flag":1553},"TRAINER_JESSICA_1_REWARD":{"address":5602338,"default_item":104,"flag":1407},"TRAINER_JOCELYN_REWARD":{"address":5602934,"default_item":106,"flag":1705},"TRAINER_JODY_REWARD":{"address":5602266,"default_item":104,"flag":1371},"TRAINER_JOEY_REWARD":{"address":5602728,"default_item":103,"flag":1602},"TRAINER_JOHANNA_REWARD":{"address":5603378,"default_item":104,"flag":1927},"TRAINER_JOHNSON_REWARD":{"address":5603592,"default_item":103,"flag":2034},"TRAINER_JOHN_AND_JAY_1_REWARD":{"address":5603446,"default_item":104,"flag":1961},"TRAINER_JONAH_REWARD":{"address":5603418,"default_item":104,"flag":1947},"TRAINER_JONAS_REWARD":{"address":5603092,"default_item":106,"flag":1784},"TRAINER_JONATHAN_REWARD":{"address":5603280,"default_item":104,"flag":1878},"TRAINER_JOSEPH_REWARD":{"address":5603484,"default_item":106,"flag":1980},"TRAINER_JOSE_REWARD":{"address":5603318,"default_item":103,"flag":1897},"TRAINER_JOSH_REWARD":{"address":5602724,"default_item":103,"flag":1600},"TRAINER_JOSUE_REWARD":{"address":5603560,"default_item":108,"flag":2018},"TRAINER_JUAN_1_REWARD":{"address":5602628,"default_item":109,"flag":1552},"TRAINER_JULIE_REWARD":{"address":5602284,"default_item":104,"flag":1380},"TRAINER_JULIO_REWARD":{"address":5603216,"default_item":108,"flag":1846},"TRAINER_KAI_REWARD":{"address":5603510,"default_item":108,"flag":1993},"TRAINER_KALEB_REWARD":{"address":5603482,"default_item":104,"flag":1979},"TRAINER_KARA_REWARD":{"address":5602998,"default_item":106,"flag":1737},"TRAINER_KAREN_1_REWARD":{"address":5602644,"default_item":103,"flag":1560},"TRAINER_KATELYNN_REWARD":{"address":5602734,"default_item":104,"flag":1605},"TRAINER_KATELYN_1_REWARD":{"address":5602856,"default_item":104,"flag":1666},"TRAINER_KATE_AND_JOY_REWARD":{"address":5602656,"default_item":106,"flag":1566},"TRAINER_KATHLEEN_REWARD":{"address":5603250,"default_item":108,"flag":1863},"TRAINER_KATIE_REWARD":{"address":5602994,"default_item":106,"flag":1735},"TRAINER_KAYLA_REWARD":{"address":5602578,"default_item":106,"flag":1527},"TRAINER_KAYLEY_REWARD":{"address":5603094,"default_item":104,"flag":1785},"TRAINER_KEEGAN_REWARD":{"address":5602494,"default_item":108,"flag":1485},"TRAINER_KEIGO_REWARD":{"address":5603388,"default_item":106,"flag":1932},"TRAINER_KELVIN_REWARD":{"address":5603098,"default_item":104,"flag":1787},"TRAINER_KENT_REWARD":{"address":5603324,"default_item":106,"flag":1900},"TRAINER_KEVIN_REWARD":{"address":5602426,"default_item":106,"flag":1451},"TRAINER_KIM_AND_IRIS_REWARD":{"address":5603440,"default_item":106,"flag":1958},"TRAINER_KINDRA_REWARD":{"address":5602296,"default_item":108,"flag":1386},"TRAINER_KIRA_AND_DAN_1_REWARD":{"address":5603368,"default_item":108,"flag":1922},"TRAINER_KIRK_REWARD":{"address":5602466,"default_item":106,"flag":1471},"TRAINER_KIYO_REWARD":{"address":5602446,"default_item":104,"flag":1461},"TRAINER_KOICHI_REWARD":{"address":5602448,"default_item":108,"flag":1462},"TRAINER_KOJI_1_REWARD":{"address":5603428,"default_item":104,"flag":1952},"TRAINER_KYLA_REWARD":{"address":5602970,"default_item":103,"flag":1723},"TRAINER_KYRA_REWARD":{"address":5603580,"default_item":104,"flag":2028},"TRAINER_LAO_1_REWARD":{"address":5602922,"default_item":103,"flag":1699},"TRAINER_LARRY_REWARD":{"address":5602510,"default_item":106,"flag":1493},"TRAINER_LAURA_REWARD":{"address":5602936,"default_item":106,"flag":1706},"TRAINER_LAUREL_REWARD":{"address":5603010,"default_item":106,"flag":1743},"TRAINER_LAWRENCE_REWARD":{"address":5603504,"default_item":106,"flag":1990},"TRAINER_LEAH_REWARD":{"address":5602154,"default_item":108,"flag":1315},"TRAINER_LEA_AND_JED_REWARD":{"address":5603366,"default_item":104,"flag":1921},"TRAINER_LENNY_REWARD":{"address":5603340,"default_item":108,"flag":1908},"TRAINER_LEONARDO_REWARD":{"address":5603236,"default_item":106,"flag":1856},"TRAINER_LEONARD_REWARD":{"address":5603074,"default_item":104,"flag":1775},"TRAINER_LEONEL_REWARD":{"address":5603608,"default_item":104,"flag":2042},"TRAINER_LILA_AND_ROY_1_REWARD":{"address":5603458,"default_item":106,"flag":1967},"TRAINER_LILITH_REWARD":{"address":5603230,"default_item":106,"flag":1853},"TRAINER_LINDA_REWARD":{"address":5603006,"default_item":106,"flag":1741},"TRAINER_LISA_AND_RAY_REWARD":{"address":5603468,"default_item":106,"flag":1972},"TRAINER_LOLA_1_REWARD":{"address":5602198,"default_item":103,"flag":1337},"TRAINER_LORENZO_REWARD":{"address":5603190,"default_item":104,"flag":1833},"TRAINER_LUCAS_1_REWARD":{"address":5603342,"default_item":108,"flag":1909},"TRAINER_LUIS_REWARD":{"address":5602386,"default_item":103,"flag":1431},"TRAINER_LUNG_REWARD":{"address":5602924,"default_item":103,"flag":1700},"TRAINER_LYDIA_1_REWARD":{"address":5603174,"default_item":106,"flag":1825},"TRAINER_LYLE_REWARD":{"address":5603316,"default_item":103,"flag":1896},"TRAINER_MACEY_REWARD":{"address":5603266,"default_item":108,"flag":1871},"TRAINER_MADELINE_1_REWARD":{"address":5602952,"default_item":108,"flag":1714},"TRAINER_MAKAYLA_REWARD":{"address":5603600,"default_item":104,"flag":2038},"TRAINER_MARCEL_REWARD":{"address":5602106,"default_item":104,"flag":1291},"TRAINER_MARCOS_REWARD":{"address":5603488,"default_item":106,"flag":1982},"TRAINER_MARC_REWARD":{"address":5603226,"default_item":106,"flag":1851},"TRAINER_MARIA_1_REWARD":{"address":5602822,"default_item":106,"flag":1649},"TRAINER_MARK_REWARD":{"address":5602374,"default_item":104,"flag":1425},"TRAINER_MARLENE_REWARD":{"address":5603588,"default_item":106,"flag":2032},"TRAINER_MARLEY_REWARD":{"address":5603100,"default_item":104,"flag":1788},"TRAINER_MARY_REWARD":{"address":5602262,"default_item":104,"flag":1369},"TRAINER_MATTHEW_REWARD":{"address":5602398,"default_item":103,"flag":1437},"TRAINER_MATT_REWARD":{"address":5602144,"default_item":104,"flag":1310},"TRAINER_MAURA_REWARD":{"address":5602576,"default_item":108,"flag":1526},"TRAINER_MAXIE_MAGMA_HIDEOUT_REWARD":{"address":5603286,"default_item":107,"flag":1881},"TRAINER_MAXIE_MT_CHIMNEY_REWARD":{"address":5603288,"default_item":104,"flag":1882},"TRAINER_MAY_LILYCOVE_MUDKIP_REWARD":{"address":5603412,"default_item":104,"flag":1944},"TRAINER_MAY_LILYCOVE_TORCHIC_REWARD":{"address":5603416,"default_item":104,"flag":1946},"TRAINER_MAY_LILYCOVE_TREECKO_REWARD":{"address":5603414,"default_item":104,"flag":1945},"TRAINER_MAY_ROUTE_103_MUDKIP_REWARD":{"address":5603142,"default_item":106,"flag":1809},"TRAINER_MAY_ROUTE_103_TORCHIC_REWARD":{"address":5603154,"default_item":106,"flag":1815},"TRAINER_MAY_ROUTE_103_TREECKO_REWARD":{"address":5603148,"default_item":106,"flag":1812},"TRAINER_MAY_ROUTE_110_MUDKIP_REWARD":{"address":5603144,"default_item":104,"flag":1810},"TRAINER_MAY_ROUTE_110_TORCHIC_REWARD":{"address":5603156,"default_item":104,"flag":1816},"TRAINER_MAY_ROUTE_110_TREECKO_REWARD":{"address":5603150,"default_item":104,"flag":1813},"TRAINER_MAY_ROUTE_119_MUDKIP_REWARD":{"address":5603146,"default_item":104,"flag":1811},"TRAINER_MAY_ROUTE_119_TORCHIC_REWARD":{"address":5603158,"default_item":104,"flag":1817},"TRAINER_MAY_ROUTE_119_TREECKO_REWARD":{"address":5603152,"default_item":104,"flag":1814},"TRAINER_MAY_RUSTBORO_MUDKIP_REWARD":{"address":5603284,"default_item":108,"flag":1880},"TRAINER_MAY_RUSTBORO_TORCHIC_REWARD":{"address":5603622,"default_item":108,"flag":2049},"TRAINER_MAY_RUSTBORO_TREECKO_REWARD":{"address":5603620,"default_item":108,"flag":2048},"TRAINER_MELINA_REWARD":{"address":5603594,"default_item":106,"flag":2035},"TRAINER_MELISSA_REWARD":{"address":5602332,"default_item":104,"flag":1404},"TRAINER_MEL_AND_PAUL_REWARD":{"address":5603444,"default_item":108,"flag":1960},"TRAINER_MICAH_REWARD":{"address":5602594,"default_item":107,"flag":1535},"TRAINER_MICHELLE_REWARD":{"address":5602280,"default_item":104,"flag":1378},"TRAINER_MIGUEL_1_REWARD":{"address":5602670,"default_item":104,"flag":1573},"TRAINER_MIKE_2_REWARD":{"address":5603354,"default_item":106,"flag":1915},"TRAINER_MISSY_REWARD":{"address":5602978,"default_item":103,"flag":1727},"TRAINER_MITCHELL_REWARD":{"address":5603164,"default_item":104,"flag":1820},"TRAINER_MIU_AND_YUKI_REWARD":{"address":5603052,"default_item":106,"flag":1764},"TRAINER_MOLLIE_REWARD":{"address":5602358,"default_item":104,"flag":1417},"TRAINER_MYLES_REWARD":{"address":5603614,"default_item":104,"flag":2045},"TRAINER_NANCY_REWARD":{"address":5603028,"default_item":106,"flag":1752},"TRAINER_NAOMI_REWARD":{"address":5602322,"default_item":110,"flag":1399},"TRAINER_NATE_REWARD":{"address":5603248,"default_item":107,"flag":1862},"TRAINER_NED_REWARD":{"address":5602764,"default_item":106,"flag":1620},"TRAINER_NICHOLAS_REWARD":{"address":5603254,"default_item":108,"flag":1865},"TRAINER_NICOLAS_1_REWARD":{"address":5602868,"default_item":104,"flag":1672},"TRAINER_NIKKI_REWARD":{"address":5602990,"default_item":106,"flag":1733},"TRAINER_NOB_1_REWARD":{"address":5602450,"default_item":106,"flag":1463},"TRAINER_NOLAN_REWARD":{"address":5602768,"default_item":108,"flag":1622},"TRAINER_NOLEN_REWARD":{"address":5602406,"default_item":106,"flag":1441},"TRAINER_NORMAN_1_REWARD":{"address":5602622,"default_item":107,"flag":1549},"TRAINER_OLIVIA_REWARD":{"address":5602344,"default_item":107,"flag":1410},"TRAINER_OWEN_REWARD":{"address":5602250,"default_item":104,"flag":1363},"TRAINER_PABLO_1_REWARD":{"address":5602838,"default_item":104,"flag":1657},"TRAINER_PARKER_REWARD":{"address":5602228,"default_item":104,"flag":1352},"TRAINER_PAT_REWARD":{"address":5603616,"default_item":104,"flag":2046},"TRAINER_PAXTON_REWARD":{"address":5603272,"default_item":104,"flag":1874},"TRAINER_PERRY_REWARD":{"address":5602880,"default_item":108,"flag":1678},"TRAINER_PETE_REWARD":{"address":5603554,"default_item":103,"flag":2015},"TRAINER_PHILLIP_REWARD":{"address":5603072,"default_item":104,"flag":1774},"TRAINER_PHIL_REWARD":{"address":5602884,"default_item":108,"flag":1680},"TRAINER_PHOEBE_REWARD":{"address":5602608,"default_item":110,"flag":1542},"TRAINER_PRESLEY_REWARD":{"address":5602890,"default_item":104,"flag":1683},"TRAINER_PRESTON_REWARD":{"address":5602550,"default_item":108,"flag":1513},"TRAINER_QUINCY_REWARD":{"address":5602732,"default_item":104,"flag":1604},"TRAINER_RACHEL_REWARD":{"address":5603606,"default_item":104,"flag":2041},"TRAINER_RANDALL_REWARD":{"address":5602226,"default_item":104,"flag":1351},"TRAINER_REED_REWARD":{"address":5603434,"default_item":106,"flag":1955},"TRAINER_RELI_AND_IAN_REWARD":{"address":5603456,"default_item":106,"flag":1966},"TRAINER_REYNA_REWARD":{"address":5603102,"default_item":108,"flag":1789},"TRAINER_RHETT_REWARD":{"address":5603490,"default_item":106,"flag":1983},"TRAINER_RICHARD_REWARD":{"address":5602416,"default_item":106,"flag":1446},"TRAINER_RICKY_1_REWARD":{"address":5602212,"default_item":103,"flag":1344},"TRAINER_RICK_REWARD":{"address":5603314,"default_item":103,"flag":1895},"TRAINER_RILEY_REWARD":{"address":5603390,"default_item":106,"flag":1933},"TRAINER_ROBERT_1_REWARD":{"address":5602896,"default_item":108,"flag":1686},"TRAINER_RODNEY_REWARD":{"address":5602414,"default_item":106,"flag":1445},"TRAINER_ROGER_REWARD":{"address":5603422,"default_item":104,"flag":1949},"TRAINER_ROLAND_REWARD":{"address":5602404,"default_item":106,"flag":1440},"TRAINER_RONALD_REWARD":{"address":5602784,"default_item":104,"flag":1630},"TRAINER_ROSE_1_REWARD":{"address":5602158,"default_item":106,"flag":1317},"TRAINER_ROXANNE_1_REWARD":{"address":5602614,"default_item":104,"flag":1545},"TRAINER_RUBEN_REWARD":{"address":5603426,"default_item":104,"flag":1951},"TRAINER_SAMANTHA_REWARD":{"address":5602574,"default_item":108,"flag":1525},"TRAINER_SAMUEL_REWARD":{"address":5602246,"default_item":104,"flag":1361},"TRAINER_SANTIAGO_REWARD":{"address":5602420,"default_item":106,"flag":1448},"TRAINER_SARAH_REWARD":{"address":5603474,"default_item":104,"flag":1975},"TRAINER_SAWYER_1_REWARD":{"address":5602086,"default_item":108,"flag":1281},"TRAINER_SHANE_REWARD":{"address":5602512,"default_item":106,"flag":1494},"TRAINER_SHANNON_REWARD":{"address":5602278,"default_item":104,"flag":1377},"TRAINER_SHARON_REWARD":{"address":5602988,"default_item":106,"flag":1732},"TRAINER_SHAWN_REWARD":{"address":5602472,"default_item":106,"flag":1474},"TRAINER_SHAYLA_REWARD":{"address":5603578,"default_item":108,"flag":2027},"TRAINER_SHEILA_REWARD":{"address":5602334,"default_item":104,"flag":1405},"TRAINER_SHELBY_1_REWARD":{"address":5602710,"default_item":108,"flag":1593},"TRAINER_SHELLY_SEAFLOOR_CAVERN_REWARD":{"address":5602150,"default_item":104,"flag":1313},"TRAINER_SHELLY_WEATHER_INSTITUTE_REWARD":{"address":5602148,"default_item":104,"flag":1312},"TRAINER_SHIRLEY_REWARD":{"address":5602336,"default_item":104,"flag":1406},"TRAINER_SIDNEY_REWARD":{"address":5602606,"default_item":110,"flag":1541},"TRAINER_SIENNA_REWARD":{"address":5603002,"default_item":106,"flag":1739},"TRAINER_SIMON_REWARD":{"address":5602214,"default_item":103,"flag":1345},"TRAINER_SOPHIE_REWARD":{"address":5603500,"default_item":106,"flag":1988},"TRAINER_SPENCER_REWARD":{"address":5602402,"default_item":106,"flag":1439},"TRAINER_STAN_REWARD":{"address":5602408,"default_item":106,"flag":1442},"TRAINER_STEVEN_REWARD":{"address":5603692,"default_item":109,"flag":2084},"TRAINER_STEVE_1_REWARD":{"address":5602370,"default_item":104,"flag":1423},"TRAINER_SUSIE_REWARD":{"address":5602996,"default_item":106,"flag":1736},"TRAINER_SYLVIA_REWARD":{"address":5603234,"default_item":108,"flag":1855},"TRAINER_TABITHA_MAGMA_HIDEOUT_REWARD":{"address":5603548,"default_item":104,"flag":2012},"TRAINER_TABITHA_MT_CHIMNEY_REWARD":{"address":5603278,"default_item":108,"flag":1877},"TRAINER_TAKAO_REWARD":{"address":5602442,"default_item":106,"flag":1459},"TRAINER_TAKASHI_REWARD":{"address":5602916,"default_item":106,"flag":1696},"TRAINER_TALIA_REWARD":{"address":5602854,"default_item":104,"flag":1665},"TRAINER_TAMMY_REWARD":{"address":5602298,"default_item":106,"flag":1387},"TRAINER_TANYA_REWARD":{"address":5602986,"default_item":106,"flag":1731},"TRAINER_TARA_REWARD":{"address":5602976,"default_item":103,"flag":1726},"TRAINER_TASHA_REWARD":{"address":5602302,"default_item":108,"flag":1389},"TRAINER_TATE_AND_LIZA_1_REWARD":{"address":5602626,"default_item":109,"flag":1551},"TRAINER_TAYLOR_REWARD":{"address":5602534,"default_item":104,"flag":1505},"TRAINER_THALIA_1_REWARD":{"address":5602372,"default_item":104,"flag":1424},"TRAINER_THOMAS_REWARD":{"address":5602596,"default_item":107,"flag":1536},"TRAINER_TIANA_REWARD":{"address":5603290,"default_item":103,"flag":1883},"TRAINER_TIFFANY_REWARD":{"address":5602346,"default_item":107,"flag":1411},"TRAINER_TIMMY_REWARD":{"address":5602752,"default_item":103,"flag":1614},"TRAINER_TIMOTHY_1_REWARD":{"address":5602698,"default_item":104,"flag":1587},"TRAINER_TISHA_REWARD":{"address":5603436,"default_item":106,"flag":1956},"TRAINER_TOMMY_REWARD":{"address":5602726,"default_item":103,"flag":1601},"TRAINER_TONY_1_REWARD":{"address":5602394,"default_item":103,"flag":1435},"TRAINER_TORI_AND_TIA_REWARD":{"address":5603438,"default_item":103,"flag":1957},"TRAINER_TRAVIS_REWARD":{"address":5602520,"default_item":106,"flag":1498},"TRAINER_TRENT_1_REWARD":{"address":5603338,"default_item":106,"flag":1907},"TRAINER_TYRA_AND_IVY_REWARD":{"address":5603442,"default_item":106,"flag":1959},"TRAINER_TYRON_REWARD":{"address":5603492,"default_item":106,"flag":1984},"TRAINER_VALERIE_1_REWARD":{"address":5602300,"default_item":108,"flag":1388},"TRAINER_VANESSA_REWARD":{"address":5602684,"default_item":104,"flag":1580},"TRAINER_VICKY_REWARD":{"address":5602708,"default_item":108,"flag":1592},"TRAINER_VICTORIA_REWARD":{"address":5602682,"default_item":106,"flag":1579},"TRAINER_VICTOR_REWARD":{"address":5602668,"default_item":106,"flag":1572},"TRAINER_VIOLET_REWARD":{"address":5602162,"default_item":104,"flag":1319},"TRAINER_VIRGIL_REWARD":{"address":5602552,"default_item":108,"flag":1514},"TRAINER_VITO_REWARD":{"address":5602248,"default_item":104,"flag":1362},"TRAINER_VIVIAN_REWARD":{"address":5603382,"default_item":106,"flag":1929},"TRAINER_VIVI_REWARD":{"address":5603296,"default_item":106,"flag":1886},"TRAINER_WADE_REWARD":{"address":5602772,"default_item":106,"flag":1624},"TRAINER_WALLACE_REWARD":{"address":5602754,"default_item":110,"flag":1615},"TRAINER_WALLY_MAUVILLE_REWARD":{"address":5603396,"default_item":108,"flag":1936},"TRAINER_WALLY_VR_1_REWARD":{"address":5603122,"default_item":107,"flag":1799},"TRAINER_WALTER_1_REWARD":{"address":5602592,"default_item":104,"flag":1534},"TRAINER_WARREN_REWARD":{"address":5602260,"default_item":104,"flag":1368},"TRAINER_WATTSON_1_REWARD":{"address":5602618,"default_item":104,"flag":1547},"TRAINER_WAYNE_REWARD":{"address":5603430,"default_item":104,"flag":1953},"TRAINER_WENDY_REWARD":{"address":5602268,"default_item":104,"flag":1372},"TRAINER_WILLIAM_REWARD":{"address":5602556,"default_item":106,"flag":1516},"TRAINER_WILTON_1_REWARD":{"address":5602240,"default_item":108,"flag":1358},"TRAINER_WINONA_1_REWARD":{"address":5602624,"default_item":107,"flag":1550},"TRAINER_WINSTON_1_REWARD":{"address":5602356,"default_item":104,"flag":1416},"TRAINER_WYATT_REWARD":{"address":5603506,"default_item":104,"flag":1991},"TRAINER_YASU_REWARD":{"address":5602914,"default_item":106,"flag":1695},"TRAINER_ZANDER_REWARD":{"address":5602146,"default_item":108,"flag":1311}},"maps":{"MAP_ABANDONED_SHIP_CAPTAINS_OFFICE":{"header_address":4766420,"warp_table_address":5496844},"MAP_ABANDONED_SHIP_CORRIDORS_1F":{"header_address":4766196,"warp_table_address":5495920},"MAP_ABANDONED_SHIP_CORRIDORS_B1F":{"header_address":4766252,"warp_table_address":5496248},"MAP_ABANDONED_SHIP_DECK":{"header_address":4766168,"warp_table_address":5495812},"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS":{"fishing_encounters":{"address":5609088,"slots":[129,72,129,72,72,72,72,73,73,73]},"header_address":4766476,"warp_table_address":5496908,"water_encounters":{"address":5609060,"slots":[72,72,72,72,73]}},"MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS":{"header_address":4766504,"warp_table_address":5497120},"MAP_ABANDONED_SHIP_ROOMS2_1F":{"header_address":4766392,"warp_table_address":5496752},"MAP_ABANDONED_SHIP_ROOMS2_B1F":{"header_address":4766308,"warp_table_address":5496484},"MAP_ABANDONED_SHIP_ROOMS_1F":{"header_address":4766224,"warp_table_address":5496132},"MAP_ABANDONED_SHIP_ROOMS_B1F":{"fishing_encounters":{"address":5606324,"slots":[129,72,129,72,72,72,72,73,73,73]},"header_address":4766280,"warp_table_address":5496392,"water_encounters":{"address":5606296,"slots":[72,72,72,72,73]}},"MAP_ABANDONED_SHIP_ROOM_B1F":{"header_address":4766364,"warp_table_address":5496596},"MAP_ABANDONED_SHIP_UNDERWATER1":{"header_address":4766336,"warp_table_address":5496536},"MAP_ABANDONED_SHIP_UNDERWATER2":{"header_address":4766448,"warp_table_address":5496880},"MAP_ALTERING_CAVE":{"header_address":4767624,"land_encounters":{"address":5613400,"slots":[41,41,41,41,41,41,41,41,41,41,41,41]},"warp_table_address":5500436},"MAP_ANCIENT_TOMB":{"header_address":4766560,"warp_table_address":5497460},"MAP_AQUA_HIDEOUT_1F":{"header_address":4765300,"warp_table_address":5490892},"MAP_AQUA_HIDEOUT_B1F":{"header_address":4765328,"warp_table_address":5491152},"MAP_AQUA_HIDEOUT_B2F":{"header_address":4765356,"warp_table_address":5491516},"MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP1":{"header_address":4766728,"warp_table_address":4160749568},"MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP2":{"header_address":4766756,"warp_table_address":4160749568},"MAP_AQUA_HIDEOUT_UNUSED_RUBY_MAP3":{"header_address":4766784,"warp_table_address":4160749568},"MAP_ARTISAN_CAVE_1F":{"header_address":4767456,"land_encounters":{"address":5613344,"slots":[235,235,235,235,235,235,235,235,235,235,235,235]},"warp_table_address":5500172},"MAP_ARTISAN_CAVE_B1F":{"header_address":4767428,"land_encounters":{"address":5613288,"slots":[235,235,235,235,235,235,235,235,235,235,235,235]},"warp_table_address":5500064},"MAP_BATTLE_COLOSSEUM_2P":{"header_address":4768352,"warp_table_address":5509852},"MAP_BATTLE_COLOSSEUM_4P":{"header_address":4768436,"warp_table_address":5510152},"MAP_BATTLE_FRONTIER_BATTLE_ARENA_BATTLE_ROOM":{"header_address":4770228,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR":{"header_address":4770200,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_ARENA_LOBBY":{"header_address":4770172,"warp_table_address":5520908},"MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM":{"header_address":4769976,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR":{"header_address":4769920,"warp_table_address":5519076},"MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY":{"header_address":4769892,"warp_table_address":5518968},"MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM":{"header_address":4769948,"warp_table_address":5519136},"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_BATTLE_ROOM":{"header_address":4770312,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_LOBBY":{"header_address":4770256,"warp_table_address":5521384},"MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM":{"header_address":4770284,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM":{"header_address":4770060,"warp_table_address":5520116},"MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR":{"header_address":4770032,"warp_table_address":5519944},"MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY":{"header_address":4770004,"warp_table_address":5519696},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR":{"header_address":4770368,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_LOBBY":{"header_address":4770340,"warp_table_address":5521808},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_FINAL":{"header_address":4770452,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_NORMAL":{"header_address":4770424,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_ROOM_WILD_MONS":{"header_address":4770480,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_PIKE_THREE_PATH_ROOM":{"header_address":4770396,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR":{"header_address":4770116,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_LOBBY":{"header_address":4770088,"warp_table_address":5520248},"MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_TOP":{"header_address":4770144,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_BATTLE_ROOM":{"header_address":4769612,"warp_table_address":5516696},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_CORRIDOR":{"header_address":4769584,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR":{"header_address":4769556,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY":{"header_address":4769528,"warp_table_address":5516432},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM":{"header_address":4769864,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_CORRIDOR":{"header_address":4769836,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_BATTLE_TOWER_MULTI_PARTNER_ROOM":{"header_address":4769808,"warp_table_address":4160749568},"MAP_BATTLE_FRONTIER_EXCHANGE_SERVICE_CORNER":{"header_address":4770564,"warp_table_address":5523056},"MAP_BATTLE_FRONTIER_LOUNGE1":{"header_address":4770536,"warp_table_address":5522812},"MAP_BATTLE_FRONTIER_LOUNGE2":{"header_address":4770592,"warp_table_address":5523220},"MAP_BATTLE_FRONTIER_LOUNGE3":{"header_address":4770620,"warp_table_address":5523376},"MAP_BATTLE_FRONTIER_LOUNGE4":{"header_address":4770648,"warp_table_address":5523476},"MAP_BATTLE_FRONTIER_LOUNGE5":{"header_address":4770704,"warp_table_address":5523660},"MAP_BATTLE_FRONTIER_LOUNGE6":{"header_address":4770732,"warp_table_address":5523720},"MAP_BATTLE_FRONTIER_LOUNGE7":{"header_address":4770760,"warp_table_address":5523844},"MAP_BATTLE_FRONTIER_LOUNGE8":{"header_address":4770816,"warp_table_address":5524100},"MAP_BATTLE_FRONTIER_LOUNGE9":{"header_address":4770844,"warp_table_address":5524152},"MAP_BATTLE_FRONTIER_MART":{"header_address":4770928,"warp_table_address":5524588},"MAP_BATTLE_FRONTIER_OUTSIDE_EAST":{"header_address":4769780,"warp_table_address":5518080},"MAP_BATTLE_FRONTIER_OUTSIDE_WEST":{"header_address":4769500,"warp_table_address":5516048},"MAP_BATTLE_FRONTIER_POKEMON_CENTER_1F":{"header_address":4770872,"warp_table_address":5524308},"MAP_BATTLE_FRONTIER_POKEMON_CENTER_2F":{"header_address":4770900,"warp_table_address":5524448},"MAP_BATTLE_FRONTIER_RANKING_HALL":{"header_address":4770508,"warp_table_address":5522560},"MAP_BATTLE_FRONTIER_RECEPTION_GATE":{"header_address":4770788,"warp_table_address":5523992},"MAP_BATTLE_FRONTIER_SCOTTS_HOUSE":{"header_address":4770676,"warp_table_address":5523528},"MAP_BATTLE_PYRAMID_SQUARE01":{"header_address":4768912,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE02":{"header_address":4768940,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE03":{"header_address":4768968,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE04":{"header_address":4768996,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE05":{"header_address":4769024,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE06":{"header_address":4769052,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE07":{"header_address":4769080,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE08":{"header_address":4769108,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE09":{"header_address":4769136,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE10":{"header_address":4769164,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE11":{"header_address":4769192,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE12":{"header_address":4769220,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE13":{"header_address":4769248,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE14":{"header_address":4769276,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE15":{"header_address":4769304,"warp_table_address":4160749568},"MAP_BATTLE_PYRAMID_SQUARE16":{"header_address":4769332,"warp_table_address":4160749568},"MAP_BIRTH_ISLAND_EXTERIOR":{"header_address":4771012,"warp_table_address":5524876},"MAP_BIRTH_ISLAND_HARBOR":{"header_address":4771040,"warp_table_address":5524952},"MAP_CAVE_OF_ORIGIN_1F":{"header_address":4765720,"land_encounters":{"address":5609868,"slots":[41,41,41,322,322,322,41,41,42,42,42,42]},"warp_table_address":5493440},"MAP_CAVE_OF_ORIGIN_B1F":{"header_address":4765832,"warp_table_address":5493608},"MAP_CAVE_OF_ORIGIN_ENTRANCE":{"header_address":4765692,"land_encounters":{"address":5609812,"slots":[41,41,41,41,41,41,41,41,42,42,42,42]},"warp_table_address":5493404},"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP1":{"header_address":4765748,"land_encounters":{"address":5609924,"slots":[41,41,41,322,322,322,41,41,42,42,42,42]},"warp_table_address":5493476},"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP2":{"header_address":4765776,"land_encounters":{"address":5609980,"slots":[41,41,41,322,322,322,41,41,42,42,42,42]},"warp_table_address":5493512},"MAP_CAVE_OF_ORIGIN_UNUSED_RUBY_SAPPHIRE_MAP3":{"header_address":4765804,"land_encounters":{"address":5610036,"slots":[41,41,41,322,322,322,41,41,42,42,42,42]},"warp_table_address":5493548},"MAP_CONTEST_HALL":{"header_address":4768464,"warp_table_address":4160749568},"MAP_CONTEST_HALL_BEAUTY":{"header_address":4768660,"warp_table_address":4160749568},"MAP_CONTEST_HALL_COOL":{"header_address":4768716,"warp_table_address":4160749568},"MAP_CONTEST_HALL_CUTE":{"header_address":4768772,"warp_table_address":4160749568},"MAP_CONTEST_HALL_SMART":{"header_address":4768744,"warp_table_address":4160749568},"MAP_CONTEST_HALL_TOUGH":{"header_address":4768688,"warp_table_address":4160749568},"MAP_DESERT_RUINS":{"header_address":4764824,"warp_table_address":5486828},"MAP_DESERT_UNDERPASS":{"header_address":4767400,"land_encounters":{"address":5613232,"slots":[132,370,132,371,132,370,371,132,370,132,371,132]},"warp_table_address":5500012},"MAP_DEWFORD_TOWN":{"fishing_encounters":{"address":5611588,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4758300,"warp_table_address":5435180,"water_encounters":{"address":5611560,"slots":[72,309,309,310,310]}},"MAP_DEWFORD_TOWN_GYM":{"header_address":4759952,"warp_table_address":5460340},"MAP_DEWFORD_TOWN_HALL":{"header_address":4759980,"warp_table_address":5460640},"MAP_DEWFORD_TOWN_HOUSE1":{"header_address":4759868,"warp_table_address":5459856},"MAP_DEWFORD_TOWN_HOUSE2":{"header_address":4760008,"warp_table_address":5460748},"MAP_DEWFORD_TOWN_POKEMON_CENTER_1F":{"header_address":4759896,"warp_table_address":5459964},"MAP_DEWFORD_TOWN_POKEMON_CENTER_2F":{"header_address":4759924,"warp_table_address":5460104},"MAP_EVER_GRANDE_CITY":{"fishing_encounters":{"address":5611892,"slots":[129,72,129,325,313,325,313,222,313,313]},"header_address":4758216,"warp_table_address":5434048,"water_encounters":{"address":5611864,"slots":[72,309,309,310,310]}},"MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM":{"header_address":4764012,"warp_table_address":5483720},"MAP_EVER_GRANDE_CITY_DRAKES_ROOM":{"header_address":4763984,"warp_table_address":5483612},"MAP_EVER_GRANDE_CITY_GLACIAS_ROOM":{"header_address":4763956,"warp_table_address":5483552},"MAP_EVER_GRANDE_CITY_HALL1":{"header_address":4764040,"warp_table_address":5483756},"MAP_EVER_GRANDE_CITY_HALL2":{"header_address":4764068,"warp_table_address":5483808},"MAP_EVER_GRANDE_CITY_HALL3":{"header_address":4764096,"warp_table_address":5483860},"MAP_EVER_GRANDE_CITY_HALL4":{"header_address":4764124,"warp_table_address":5483912},"MAP_EVER_GRANDE_CITY_HALL5":{"header_address":4764152,"warp_table_address":5483948},"MAP_EVER_GRANDE_CITY_HALL_OF_FAME":{"header_address":4764208,"warp_table_address":5484180},"MAP_EVER_GRANDE_CITY_PHOEBES_ROOM":{"header_address":4763928,"warp_table_address":5483492},"MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F":{"header_address":4764236,"warp_table_address":5484304},"MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F":{"header_address":4764264,"warp_table_address":5484444},"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F":{"header_address":4764180,"warp_table_address":5484096},"MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F":{"header_address":4764292,"warp_table_address":5484584},"MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM":{"header_address":4763900,"warp_table_address":5483432},"MAP_FALLARBOR_TOWN":{"header_address":4758356,"warp_table_address":5435792},"MAP_FALLARBOR_TOWN_BATTLE_TENT_BATTLE_ROOM":{"header_address":4760316,"warp_table_address":4160749568},"MAP_FALLARBOR_TOWN_BATTLE_TENT_CORRIDOR":{"header_address":4760288,"warp_table_address":4160749568},"MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY":{"header_address":4760260,"warp_table_address":5462376},"MAP_FALLARBOR_TOWN_COZMOS_HOUSE":{"header_address":4760400,"warp_table_address":5462888},"MAP_FALLARBOR_TOWN_MART":{"header_address":4760232,"warp_table_address":5462220},"MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE":{"header_address":4760428,"warp_table_address":5462948},"MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F":{"header_address":4760344,"warp_table_address":5462656},"MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F":{"header_address":4760372,"warp_table_address":5462796},"MAP_FARAWAY_ISLAND_ENTRANCE":{"header_address":4770956,"warp_table_address":5524672},"MAP_FARAWAY_ISLAND_INTERIOR":{"header_address":4770984,"warp_table_address":5524792},"MAP_FIERY_PATH":{"header_address":4765048,"land_encounters":{"address":5606456,"slots":[339,109,339,66,321,218,109,66,321,321,88,88]},"warp_table_address":5489344},"MAP_FORTREE_CITY":{"header_address":4758104,"warp_table_address":5431676},"MAP_FORTREE_CITY_DECORATION_SHOP":{"header_address":4762444,"warp_table_address":5473936},"MAP_FORTREE_CITY_GYM":{"header_address":4762220,"warp_table_address":5472984},"MAP_FORTREE_CITY_HOUSE1":{"header_address":4762192,"warp_table_address":5472756},"MAP_FORTREE_CITY_HOUSE2":{"header_address":4762332,"warp_table_address":5473504},"MAP_FORTREE_CITY_HOUSE3":{"header_address":4762360,"warp_table_address":5473588},"MAP_FORTREE_CITY_HOUSE4":{"header_address":4762388,"warp_table_address":5473696},"MAP_FORTREE_CITY_HOUSE5":{"header_address":4762416,"warp_table_address":5473804},"MAP_FORTREE_CITY_MART":{"header_address":4762304,"warp_table_address":5473420},"MAP_FORTREE_CITY_POKEMON_CENTER_1F":{"header_address":4762248,"warp_table_address":5473140},"MAP_FORTREE_CITY_POKEMON_CENTER_2F":{"header_address":4762276,"warp_table_address":5473280},"MAP_GRANITE_CAVE_1F":{"header_address":4764852,"land_encounters":{"address":5605988,"slots":[41,335,335,41,335,63,335,335,74,74,74,74]},"warp_table_address":5486956},"MAP_GRANITE_CAVE_B1F":{"header_address":4764880,"land_encounters":{"address":5606044,"slots":[41,382,382,382,41,63,335,335,322,322,322,322]},"warp_table_address":5487032},"MAP_GRANITE_CAVE_B2F":{"header_address":4764908,"land_encounters":{"address":5606372,"slots":[41,382,382,41,382,63,322,322,322,322,322,322]},"warp_table_address":5487324},"MAP_GRANITE_CAVE_STEVENS_ROOM":{"header_address":4764936,"land_encounters":{"address":5608188,"slots":[41,335,335,41,335,63,335,335,382,382,382,382]},"warp_table_address":5487432},"MAP_INSIDE_OF_TRUCK":{"header_address":4768800,"warp_table_address":5510720},"MAP_ISLAND_CAVE":{"header_address":4766532,"warp_table_address":5497356},"MAP_JAGGED_PASS":{"header_address":4765020,"land_encounters":{"address":5606644,"slots":[339,339,66,339,351,66,351,66,339,351,339,351]},"warp_table_address":5488908},"MAP_LAVARIDGE_TOWN":{"header_address":4758328,"warp_table_address":5435516},"MAP_LAVARIDGE_TOWN_GYM_1F":{"header_address":4760064,"warp_table_address":5461036},"MAP_LAVARIDGE_TOWN_GYM_B1F":{"header_address":4760092,"warp_table_address":5461384},"MAP_LAVARIDGE_TOWN_HERB_SHOP":{"header_address":4760036,"warp_table_address":5460856},"MAP_LAVARIDGE_TOWN_HOUSE":{"header_address":4760120,"warp_table_address":5461668},"MAP_LAVARIDGE_TOWN_MART":{"header_address":4760148,"warp_table_address":5461776},"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F":{"header_address":4760176,"warp_table_address":5461908},"MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F":{"header_address":4760204,"warp_table_address":5462056},"MAP_LILYCOVE_CITY":{"fishing_encounters":{"address":5611512,"slots":[129,72,129,72,313,313,313,120,313,313]},"header_address":4758132,"warp_table_address":5432368,"water_encounters":{"address":5611484,"slots":[72,309,309,310,310]}},"MAP_LILYCOVE_CITY_CONTEST_HALL":{"header_address":4762612,"warp_table_address":5476560},"MAP_LILYCOVE_CITY_CONTEST_LOBBY":{"header_address":4762584,"warp_table_address":5475596},"MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F":{"header_address":4762472,"warp_table_address":5473996},"MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F":{"header_address":4762500,"warp_table_address":5474224},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F":{"header_address":4762920,"warp_table_address":5478044},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F":{"header_address":4762948,"warp_table_address":5478228},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F":{"header_address":4762976,"warp_table_address":5478392},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F":{"header_address":4763004,"warp_table_address":5478556},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F":{"header_address":4763032,"warp_table_address":5478768},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR":{"header_address":4763088,"warp_table_address":5478984},"MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP":{"header_address":4763060,"warp_table_address":5478908},"MAP_LILYCOVE_CITY_HARBOR":{"header_address":4762752,"warp_table_address":5477396},"MAP_LILYCOVE_CITY_HOUSE1":{"header_address":4762808,"warp_table_address":5477540},"MAP_LILYCOVE_CITY_HOUSE2":{"header_address":4762836,"warp_table_address":5477600},"MAP_LILYCOVE_CITY_HOUSE3":{"header_address":4762864,"warp_table_address":5477780},"MAP_LILYCOVE_CITY_HOUSE4":{"header_address":4762892,"warp_table_address":5477864},"MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F":{"header_address":4762528,"warp_table_address":5474492},"MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F":{"header_address":4762556,"warp_table_address":5474824},"MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE":{"header_address":4762780,"warp_table_address":5477456},"MAP_LILYCOVE_CITY_POKEMON_CENTER_1F":{"header_address":4762640,"warp_table_address":5476804},"MAP_LILYCOVE_CITY_POKEMON_CENTER_2F":{"header_address":4762668,"warp_table_address":5476944},"MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB":{"header_address":4762724,"warp_table_address":5477240},"MAP_LILYCOVE_CITY_UNUSED_MART":{"header_address":4762696,"warp_table_address":5476988},"MAP_LITTLEROOT_TOWN":{"header_address":4758244,"warp_table_address":5434528},"MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F":{"header_address":4759588,"warp_table_address":5457588},"MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F":{"header_address":4759616,"warp_table_address":5458080},"MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F":{"header_address":4759644,"warp_table_address":5458324},"MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F":{"header_address":4759672,"warp_table_address":5458816},"MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB":{"header_address":4759700,"warp_table_address":5459036},"MAP_MAGMA_HIDEOUT_1F":{"header_address":4767064,"land_encounters":{"address":5612560,"slots":[74,321,74,321,74,74,74,75,75,75,75,75]},"warp_table_address":5498844},"MAP_MAGMA_HIDEOUT_2F_1R":{"header_address":4767092,"land_encounters":{"address":5612616,"slots":[74,321,74,321,74,74,74,75,75,75,75,75]},"warp_table_address":5498992},"MAP_MAGMA_HIDEOUT_2F_2R":{"header_address":4767120,"land_encounters":{"address":5612672,"slots":[74,321,74,321,74,74,74,75,75,75,75,75]},"warp_table_address":5499180},"MAP_MAGMA_HIDEOUT_2F_3R":{"header_address":4767260,"land_encounters":{"address":5612952,"slots":[74,321,74,321,74,74,74,75,75,75,75,75]},"warp_table_address":5499696},"MAP_MAGMA_HIDEOUT_3F_1R":{"header_address":4767148,"land_encounters":{"address":5612728,"slots":[74,321,74,321,74,74,74,75,75,75,75,75]},"warp_table_address":5499288},"MAP_MAGMA_HIDEOUT_3F_2R":{"header_address":4767176,"land_encounters":{"address":5612784,"slots":[74,321,74,321,74,74,74,75,75,75,75,75]},"warp_table_address":5499380},"MAP_MAGMA_HIDEOUT_3F_3R":{"header_address":4767232,"land_encounters":{"address":5612896,"slots":[74,321,74,321,74,74,74,75,75,75,75,75]},"warp_table_address":5499660},"MAP_MAGMA_HIDEOUT_4F":{"header_address":4767204,"land_encounters":{"address":5612840,"slots":[74,321,74,321,74,74,74,75,75,75,75,75]},"warp_table_address":5499600},"MAP_MARINE_CAVE_END":{"header_address":4767540,"warp_table_address":5500288},"MAP_MARINE_CAVE_ENTRANCE":{"header_address":4767512,"warp_table_address":5500236},"MAP_MAUVILLE_CITY":{"header_address":4758048,"warp_table_address":5430380},"MAP_MAUVILLE_CITY_BIKE_SHOP":{"header_address":4761520,"warp_table_address":5469232},"MAP_MAUVILLE_CITY_GAME_CORNER":{"header_address":4761576,"warp_table_address":5469640},"MAP_MAUVILLE_CITY_GYM":{"header_address":4761492,"warp_table_address":5469060},"MAP_MAUVILLE_CITY_HOUSE1":{"header_address":4761548,"warp_table_address":5469316},"MAP_MAUVILLE_CITY_HOUSE2":{"header_address":4761604,"warp_table_address":5469988},"MAP_MAUVILLE_CITY_MART":{"header_address":4761688,"warp_table_address":5470424},"MAP_MAUVILLE_CITY_POKEMON_CENTER_1F":{"header_address":4761632,"warp_table_address":5470144},"MAP_MAUVILLE_CITY_POKEMON_CENTER_2F":{"header_address":4761660,"warp_table_address":5470308},"MAP_METEOR_FALLS_1F_1R":{"fishing_encounters":{"address":5610796,"slots":[129,118,129,118,323,323,323,323,323,323]},"header_address":4764656,"land_encounters":{"address":5610712,"slots":[41,41,41,41,41,349,349,349,41,41,41,41]},"warp_table_address":5486052,"water_encounters":{"address":5610768,"slots":[41,41,349,349,349]}},"MAP_METEOR_FALLS_1F_2R":{"fishing_encounters":{"address":5610928,"slots":[129,118,129,118,323,323,323,324,324,324]},"header_address":4764684,"land_encounters":{"address":5610844,"slots":[42,42,42,349,349,349,42,349,42,42,42,42]},"warp_table_address":5486220,"water_encounters":{"address":5610900,"slots":[42,42,349,349,349]}},"MAP_METEOR_FALLS_B1F_1R":{"fishing_encounters":{"address":5611060,"slots":[129,118,129,118,323,323,323,324,324,324]},"header_address":4764712,"land_encounters":{"address":5610976,"slots":[42,42,42,349,349,349,42,349,42,42,42,42]},"warp_table_address":5486284,"water_encounters":{"address":5611032,"slots":[42,42,349,349,349]}},"MAP_METEOR_FALLS_B1F_2R":{"fishing_encounters":{"address":5606596,"slots":[129,118,129,118,323,323,323,324,324,324]},"header_address":4764740,"land_encounters":{"address":5606512,"slots":[42,42,395,349,395,349,395,349,42,42,42,42]},"warp_table_address":5486376,"water_encounters":{"address":5606568,"slots":[42,42,349,349,349]}},"MAP_METEOR_FALLS_STEVENS_CAVE":{"header_address":4767652,"land_encounters":{"address":5613904,"slots":[42,42,42,349,349,349,42,349,42,42,42,42]},"warp_table_address":5500488},"MAP_MIRAGE_TOWER_1F":{"header_address":4767288,"land_encounters":{"address":5613008,"slots":[27,332,27,332,27,332,27,332,27,332,27,332]},"warp_table_address":5499732},"MAP_MIRAGE_TOWER_2F":{"header_address":4767316,"land_encounters":{"address":5613064,"slots":[27,332,27,332,27,332,27,332,27,332,27,332]},"warp_table_address":5499768},"MAP_MIRAGE_TOWER_3F":{"header_address":4767344,"land_encounters":{"address":5613120,"slots":[27,332,27,332,27,332,27,332,27,332,27,332]},"warp_table_address":5499852},"MAP_MIRAGE_TOWER_4F":{"header_address":4767372,"land_encounters":{"address":5613176,"slots":[27,332,27,332,27,332,27,332,27,332,27,332]},"warp_table_address":5499960},"MAP_MOSSDEEP_CITY":{"fishing_encounters":{"address":5611740,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4758160,"warp_table_address":5433064,"water_encounters":{"address":5611712,"slots":[72,309,309,310,310]}},"MAP_MOSSDEEP_CITY_GAME_CORNER_1F":{"header_address":4763424,"warp_table_address":5481712},"MAP_MOSSDEEP_CITY_GAME_CORNER_B1F":{"header_address":4763452,"warp_table_address":5481816},"MAP_MOSSDEEP_CITY_GYM":{"header_address":4763116,"warp_table_address":5479884},"MAP_MOSSDEEP_CITY_HOUSE1":{"header_address":4763144,"warp_table_address":5480232},"MAP_MOSSDEEP_CITY_HOUSE2":{"header_address":4763172,"warp_table_address":5480340},"MAP_MOSSDEEP_CITY_HOUSE3":{"header_address":4763284,"warp_table_address":5480812},"MAP_MOSSDEEP_CITY_HOUSE4":{"header_address":4763340,"warp_table_address":5481076},"MAP_MOSSDEEP_CITY_MART":{"header_address":4763256,"warp_table_address":5480752},"MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F":{"header_address":4763200,"warp_table_address":5480448},"MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F":{"header_address":4763228,"warp_table_address":5480612},"MAP_MOSSDEEP_CITY_SPACE_CENTER_1F":{"header_address":4763368,"warp_table_address":5481376},"MAP_MOSSDEEP_CITY_SPACE_CENTER_2F":{"header_address":4763396,"warp_table_address":5481636},"MAP_MOSSDEEP_CITY_STEVENS_HOUSE":{"header_address":4763312,"warp_table_address":5480920},"MAP_MT_CHIMNEY":{"header_address":4764992,"warp_table_address":5488664},"MAP_MT_CHIMNEY_CABLE_CAR_STATION":{"header_address":4764460,"warp_table_address":5485144},"MAP_MT_PYRE_1F":{"header_address":4765076,"land_encounters":{"address":5606100,"slots":[377,377,377,377,377,377,377,377,377,377,377,377]},"warp_table_address":5489452},"MAP_MT_PYRE_2F":{"header_address":4765104,"land_encounters":{"address":5607796,"slots":[377,377,377,377,377,377,377,377,377,377,377,377]},"warp_table_address":5489712},"MAP_MT_PYRE_3F":{"header_address":4765132,"land_encounters":{"address":5607852,"slots":[377,377,377,377,377,377,377,377,377,377,377,377]},"warp_table_address":5489868},"MAP_MT_PYRE_4F":{"header_address":4765160,"land_encounters":{"address":5607908,"slots":[377,377,377,377,377,377,377,377,361,361,361,361]},"warp_table_address":5489984},"MAP_MT_PYRE_5F":{"header_address":4765188,"land_encounters":{"address":5607964,"slots":[377,377,377,377,377,377,377,377,361,361,361,361]},"warp_table_address":5490100},"MAP_MT_PYRE_6F":{"header_address":4765216,"land_encounters":{"address":5608020,"slots":[377,377,377,377,377,377,377,377,361,361,361,361]},"warp_table_address":5490232},"MAP_MT_PYRE_EXTERIOR":{"header_address":4765244,"land_encounters":{"address":5608076,"slots":[377,377,377,377,37,37,37,37,309,309,309,309]},"warp_table_address":5490316},"MAP_MT_PYRE_SUMMIT":{"header_address":4765272,"land_encounters":{"address":5608132,"slots":[377,377,377,377,377,377,377,361,361,361,411,411]},"warp_table_address":5490656},"MAP_NAVEL_ROCK_B1F":{"header_address":4771320,"warp_table_address":5525524},"MAP_NAVEL_ROCK_BOTTOM":{"header_address":4771824,"warp_table_address":5526248},"MAP_NAVEL_ROCK_DOWN01":{"header_address":4771516,"warp_table_address":5525828},"MAP_NAVEL_ROCK_DOWN02":{"header_address":4771544,"warp_table_address":5525864},"MAP_NAVEL_ROCK_DOWN03":{"header_address":4771572,"warp_table_address":5525900},"MAP_NAVEL_ROCK_DOWN04":{"header_address":4771600,"warp_table_address":5525936},"MAP_NAVEL_ROCK_DOWN05":{"header_address":4771628,"warp_table_address":5525972},"MAP_NAVEL_ROCK_DOWN06":{"header_address":4771656,"warp_table_address":5526008},"MAP_NAVEL_ROCK_DOWN07":{"header_address":4771684,"warp_table_address":5526044},"MAP_NAVEL_ROCK_DOWN08":{"header_address":4771712,"warp_table_address":5526080},"MAP_NAVEL_ROCK_DOWN09":{"header_address":4771740,"warp_table_address":5526116},"MAP_NAVEL_ROCK_DOWN10":{"header_address":4771768,"warp_table_address":5526152},"MAP_NAVEL_ROCK_DOWN11":{"header_address":4771796,"warp_table_address":5526188},"MAP_NAVEL_ROCK_ENTRANCE":{"header_address":4771292,"warp_table_address":5525488},"MAP_NAVEL_ROCK_EXTERIOR":{"header_address":4771236,"warp_table_address":5525376},"MAP_NAVEL_ROCK_FORK":{"header_address":4771348,"warp_table_address":5525560},"MAP_NAVEL_ROCK_HARBOR":{"header_address":4771264,"warp_table_address":5525460},"MAP_NAVEL_ROCK_TOP":{"header_address":4771488,"warp_table_address":5525772},"MAP_NAVEL_ROCK_UP1":{"header_address":4771376,"warp_table_address":5525604},"MAP_NAVEL_ROCK_UP2":{"header_address":4771404,"warp_table_address":5525640},"MAP_NAVEL_ROCK_UP3":{"header_address":4771432,"warp_table_address":5525676},"MAP_NAVEL_ROCK_UP4":{"header_address":4771460,"warp_table_address":5525712},"MAP_NEW_MAUVILLE_ENTRANCE":{"header_address":4766112,"land_encounters":{"address":5610092,"slots":[100,81,100,81,100,81,100,81,100,81,100,81]},"warp_table_address":5495284},"MAP_NEW_MAUVILLE_INSIDE":{"header_address":4766140,"land_encounters":{"address":5607136,"slots":[100,81,100,81,100,81,100,81,100,81,101,82]},"warp_table_address":5495528},"MAP_OLDALE_TOWN":{"header_address":4758272,"warp_table_address":5434860},"MAP_OLDALE_TOWN_HOUSE1":{"header_address":4759728,"warp_table_address":5459276},"MAP_OLDALE_TOWN_HOUSE2":{"header_address":4759756,"warp_table_address":5459360},"MAP_OLDALE_TOWN_MART":{"header_address":4759840,"warp_table_address":5459748},"MAP_OLDALE_TOWN_POKEMON_CENTER_1F":{"header_address":4759784,"warp_table_address":5459492},"MAP_OLDALE_TOWN_POKEMON_CENTER_2F":{"header_address":4759812,"warp_table_address":5459632},"MAP_PACIFIDLOG_TOWN":{"fishing_encounters":{"address":5611816,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4758412,"warp_table_address":5436288,"water_encounters":{"address":5611788,"slots":[72,309,309,310,310]}},"MAP_PACIFIDLOG_TOWN_HOUSE1":{"header_address":4760764,"warp_table_address":5464400},"MAP_PACIFIDLOG_TOWN_HOUSE2":{"header_address":4760792,"warp_table_address":5464508},"MAP_PACIFIDLOG_TOWN_HOUSE3":{"header_address":4760820,"warp_table_address":5464592},"MAP_PACIFIDLOG_TOWN_HOUSE4":{"header_address":4760848,"warp_table_address":5464700},"MAP_PACIFIDLOG_TOWN_HOUSE5":{"header_address":4760876,"warp_table_address":5464784},"MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F":{"header_address":4760708,"warp_table_address":5464168},"MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F":{"header_address":4760736,"warp_table_address":5464308},"MAP_PETALBURG_CITY":{"fishing_encounters":{"address":5611968,"slots":[129,118,129,118,326,326,326,326,326,326]},"header_address":4757992,"warp_table_address":5428704,"water_encounters":{"address":5611940,"slots":[183,183,183,183,183]}},"MAP_PETALBURG_CITY_GYM":{"header_address":4760932,"warp_table_address":5465168},"MAP_PETALBURG_CITY_HOUSE1":{"header_address":4760960,"warp_table_address":5465708},"MAP_PETALBURG_CITY_HOUSE2":{"header_address":4760988,"warp_table_address":5465792},"MAP_PETALBURG_CITY_MART":{"header_address":4761072,"warp_table_address":5466228},"MAP_PETALBURG_CITY_POKEMON_CENTER_1F":{"header_address":4761016,"warp_table_address":5465948},"MAP_PETALBURG_CITY_POKEMON_CENTER_2F":{"header_address":4761044,"warp_table_address":5466088},"MAP_PETALBURG_CITY_WALLYS_HOUSE":{"header_address":4760904,"warp_table_address":5464868},"MAP_PETALBURG_WOODS":{"header_address":4764964,"land_encounters":{"address":5605876,"slots":[286,290,306,286,291,293,290,306,304,364,304,364]},"warp_table_address":5487772},"MAP_RECORD_CORNER":{"header_address":4768408,"warp_table_address":5510036},"MAP_ROUTE101":{"header_address":4758440,"land_encounters":{"address":5604388,"slots":[290,286,290,290,286,286,290,286,288,288,288,288]},"warp_table_address":4160749568},"MAP_ROUTE102":{"fishing_encounters":{"address":5604528,"slots":[129,118,129,118,326,326,326,326,326,326]},"header_address":4758468,"land_encounters":{"address":5604444,"slots":[286,290,286,290,295,295,288,288,288,392,288,298]},"warp_table_address":4160749568,"water_encounters":{"address":5604500,"slots":[183,183,183,183,118]}},"MAP_ROUTE103":{"fishing_encounters":{"address":5604660,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4758496,"land_encounters":{"address":5604576,"slots":[286,286,286,286,309,288,288,288,309,309,309,309]},"warp_table_address":5437452,"water_encounters":{"address":5604632,"slots":[72,309,309,310,310]}},"MAP_ROUTE104":{"fishing_encounters":{"address":5604792,"slots":[129,129,129,129,129,129,129,129,129,129]},"header_address":4758524,"land_encounters":{"address":5604708,"slots":[286,290,286,183,183,286,304,304,309,309,309,309]},"warp_table_address":5438308,"water_encounters":{"address":5604764,"slots":[309,309,309,310,310]}},"MAP_ROUTE104_MR_BRINEYS_HOUSE":{"header_address":4764320,"warp_table_address":5484676},"MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP":{"header_address":4764348,"warp_table_address":5484784},"MAP_ROUTE104_PROTOTYPE":{"header_address":4771880,"warp_table_address":4160749568},"MAP_ROUTE104_PROTOTYPE_PRETTY_PETAL_FLOWER_SHOP":{"header_address":4771908,"warp_table_address":4160749568},"MAP_ROUTE105":{"fishing_encounters":{"address":5604868,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4758552,"warp_table_address":5438720,"water_encounters":{"address":5604840,"slots":[72,309,309,310,310]}},"MAP_ROUTE106":{"fishing_encounters":{"address":5606728,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4758580,"warp_table_address":5438892,"water_encounters":{"address":5606700,"slots":[72,309,309,310,310]}},"MAP_ROUTE107":{"fishing_encounters":{"address":5606804,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4758608,"warp_table_address":4160749568,"water_encounters":{"address":5606776,"slots":[72,309,309,310,310]}},"MAP_ROUTE108":{"fishing_encounters":{"address":5606880,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4758636,"warp_table_address":5439324,"water_encounters":{"address":5606852,"slots":[72,309,309,310,310]}},"MAP_ROUTE109":{"fishing_encounters":{"address":5606956,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4758664,"warp_table_address":5439940,"water_encounters":{"address":5606928,"slots":[72,309,309,310,310]}},"MAP_ROUTE109_SEASHORE_HOUSE":{"header_address":4771936,"warp_table_address":5526472},"MAP_ROUTE110":{"fishing_encounters":{"address":5605000,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4758692,"land_encounters":{"address":5604916,"slots":[286,337,367,337,354,43,354,367,309,309,353,353]},"warp_table_address":5440928,"water_encounters":{"address":5604972,"slots":[72,309,309,310,310]}},"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE":{"header_address":4772272,"warp_table_address":5529400},"MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE":{"header_address":4772300,"warp_table_address":5529508},"MAP_ROUTE110_TRICK_HOUSE_CORRIDOR":{"header_address":4772020,"warp_table_address":5526740},"MAP_ROUTE110_TRICK_HOUSE_END":{"header_address":4771992,"warp_table_address":5526676},"MAP_ROUTE110_TRICK_HOUSE_ENTRANCE":{"header_address":4771964,"warp_table_address":5526532},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE1":{"header_address":4772048,"warp_table_address":5527152},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE2":{"header_address":4772076,"warp_table_address":5527328},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE3":{"header_address":4772104,"warp_table_address":5527616},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE4":{"header_address":4772132,"warp_table_address":5528072},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE5":{"header_address":4772160,"warp_table_address":5528248},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE6":{"header_address":4772188,"warp_table_address":5528752},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE7":{"header_address":4772216,"warp_table_address":5529024},"MAP_ROUTE110_TRICK_HOUSE_PUZZLE8":{"header_address":4772244,"warp_table_address":5529320},"MAP_ROUTE111":{"fishing_encounters":{"address":5605160,"slots":[129,118,129,118,323,323,323,323,323,323]},"header_address":4758720,"land_encounters":{"address":5605048,"slots":[27,332,27,332,318,318,27,332,318,344,344,344]},"warp_table_address":5442448,"water_encounters":{"address":5605104,"slots":[183,183,183,183,118]}},"MAP_ROUTE111_OLD_LADYS_REST_STOP":{"header_address":4764404,"warp_table_address":5484976},"MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE":{"header_address":4764376,"warp_table_address":5484916},"MAP_ROUTE112":{"header_address":4758748,"land_encounters":{"address":5605208,"slots":[339,339,183,339,339,183,339,183,339,339,339,339]},"warp_table_address":5443604},"MAP_ROUTE112_CABLE_CAR_STATION":{"header_address":4764432,"warp_table_address":5485060},"MAP_ROUTE113":{"header_address":4758776,"land_encounters":{"address":5605264,"slots":[308,308,218,308,308,218,308,218,308,227,308,227]},"warp_table_address":5444092},"MAP_ROUTE113_GLASS_WORKSHOP":{"header_address":4772328,"warp_table_address":5529640},"MAP_ROUTE114":{"fishing_encounters":{"address":5605432,"slots":[129,118,129,118,323,323,323,323,323,323]},"header_address":4758804,"land_encounters":{"address":5605320,"slots":[358,295,358,358,295,296,296,296,379,379,379,299]},"warp_table_address":5445184,"water_encounters":{"address":5605376,"slots":[183,183,183,183,118]}},"MAP_ROUTE114_FOSSIL_MANIACS_HOUSE":{"header_address":4764488,"warp_table_address":5485204},"MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL":{"header_address":4764516,"warp_table_address":5485320},"MAP_ROUTE114_LANETTES_HOUSE":{"header_address":4764544,"warp_table_address":5485420},"MAP_ROUTE115":{"fishing_encounters":{"address":5607088,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4758832,"land_encounters":{"address":5607004,"slots":[358,304,358,304,304,305,39,39,309,309,309,309]},"warp_table_address":5445988,"water_encounters":{"address":5607060,"slots":[72,309,309,310,310]}},"MAP_ROUTE116":{"header_address":4758860,"land_encounters":{"address":5605480,"slots":[286,370,301,63,301,304,304,304,286,286,315,315]},"warp_table_address":5446872},"MAP_ROUTE116_TUNNELERS_REST_HOUSE":{"header_address":4764572,"warp_table_address":5485564},"MAP_ROUTE117":{"fishing_encounters":{"address":5605620,"slots":[129,118,129,118,326,326,326,326,326,326]},"header_address":4758888,"land_encounters":{"address":5605536,"slots":[286,43,286,43,183,43,387,387,387,387,386,298]},"warp_table_address":5447656,"water_encounters":{"address":5605592,"slots":[183,183,183,183,118]}},"MAP_ROUTE117_POKEMON_DAY_CARE":{"header_address":4764600,"warp_table_address":5485624},"MAP_ROUTE118":{"fishing_encounters":{"address":5605752,"slots":[129,72,129,72,330,331,330,330,330,330]},"header_address":4758916,"land_encounters":{"address":5605668,"slots":[288,337,288,337,289,338,309,309,309,309,309,317]},"warp_table_address":5448236,"water_encounters":{"address":5605724,"slots":[72,309,309,310,310]}},"MAP_ROUTE119":{"fishing_encounters":{"address":5607276,"slots":[129,72,129,72,330,330,330,330,330,330]},"header_address":4758944,"land_encounters":{"address":5607192,"slots":[288,289,288,43,289,43,43,43,369,369,369,317]},"warp_table_address":5449460,"water_encounters":{"address":5607248,"slots":[72,309,309,310,310]}},"MAP_ROUTE119_HOUSE":{"header_address":4772440,"warp_table_address":5530360},"MAP_ROUTE119_WEATHER_INSTITUTE_1F":{"header_address":4772384,"warp_table_address":5529880},"MAP_ROUTE119_WEATHER_INSTITUTE_2F":{"header_address":4772412,"warp_table_address":5530164},"MAP_ROUTE120":{"fishing_encounters":{"address":5607408,"slots":[129,118,129,118,323,323,323,323,323,323]},"header_address":4758972,"land_encounters":{"address":5607324,"slots":[286,287,287,43,183,43,43,183,376,376,317,298]},"warp_table_address":5451160,"water_encounters":{"address":5607380,"slots":[183,183,183,183,118]}},"MAP_ROUTE121":{"fishing_encounters":{"address":5607540,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4759000,"land_encounters":{"address":5607456,"slots":[286,377,287,377,287,43,43,44,309,309,309,317]},"warp_table_address":5452364,"water_encounters":{"address":5607512,"slots":[72,309,309,310,310]}},"MAP_ROUTE121_SAFARI_ZONE_ENTRANCE":{"header_address":4764628,"warp_table_address":5485732},"MAP_ROUTE122":{"fishing_encounters":{"address":5607616,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4759028,"warp_table_address":5452576,"water_encounters":{"address":5607588,"slots":[72,309,309,310,310]}},"MAP_ROUTE123":{"fishing_encounters":{"address":5607748,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4759056,"land_encounters":{"address":5607664,"slots":[286,377,287,377,287,43,43,44,309,309,309,317]},"warp_table_address":5453636,"water_encounters":{"address":5607720,"slots":[72,309,309,310,310]}},"MAP_ROUTE123_BERRY_MASTERS_HOUSE":{"header_address":4772356,"warp_table_address":5529724},"MAP_ROUTE124":{"fishing_encounters":{"address":5605828,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4759084,"warp_table_address":5454436,"water_encounters":{"address":5605800,"slots":[72,309,309,310,310]}},"MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE":{"header_address":4772468,"warp_table_address":5530420},"MAP_ROUTE125":{"fishing_encounters":{"address":5608272,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4759112,"warp_table_address":5454716,"water_encounters":{"address":5608244,"slots":[72,309,309,310,310]}},"MAP_ROUTE126":{"fishing_encounters":{"address":5608348,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4759140,"warp_table_address":4160749568,"water_encounters":{"address":5608320,"slots":[72,309,309,310,310]}},"MAP_ROUTE127":{"fishing_encounters":{"address":5608424,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4759168,"warp_table_address":4160749568,"water_encounters":{"address":5608396,"slots":[72,309,309,310,310]}},"MAP_ROUTE128":{"fishing_encounters":{"address":5608500,"slots":[129,72,129,325,313,325,313,222,313,313]},"header_address":4759196,"warp_table_address":4160749568,"water_encounters":{"address":5608472,"slots":[72,309,309,310,310]}},"MAP_ROUTE129":{"fishing_encounters":{"address":5608576,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4759224,"warp_table_address":4160749568,"water_encounters":{"address":5608548,"slots":[72,309,309,310,314]}},"MAP_ROUTE130":{"fishing_encounters":{"address":5608708,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4759252,"land_encounters":{"address":5608624,"slots":[360,360,360,360,360,360,360,360,360,360,360,360]},"warp_table_address":4160749568,"water_encounters":{"address":5608680,"slots":[72,309,309,310,310]}},"MAP_ROUTE131":{"fishing_encounters":{"address":5608784,"slots":[129,72,129,72,313,331,313,313,313,313]},"header_address":4759280,"warp_table_address":5456116,"water_encounters":{"address":5608756,"slots":[72,309,309,310,310]}},"MAP_ROUTE132":{"fishing_encounters":{"address":5608860,"slots":[129,72,129,72,313,331,313,116,313,313]},"header_address":4759308,"warp_table_address":4160749568,"water_encounters":{"address":5608832,"slots":[72,309,309,310,310]}},"MAP_ROUTE133":{"fishing_encounters":{"address":5608936,"slots":[129,72,129,72,313,331,313,116,313,313]},"header_address":4759336,"warp_table_address":4160749568,"water_encounters":{"address":5608908,"slots":[72,309,309,310,310]}},"MAP_ROUTE134":{"fishing_encounters":{"address":5609012,"slots":[129,72,129,72,313,331,313,116,313,313]},"header_address":4759364,"warp_table_address":4160749568,"water_encounters":{"address":5608984,"slots":[72,309,309,310,310]}},"MAP_RUSTBORO_CITY":{"header_address":4758076,"warp_table_address":5430936},"MAP_RUSTBORO_CITY_CUTTERS_HOUSE":{"header_address":4762024,"warp_table_address":5472204},"MAP_RUSTBORO_CITY_DEVON_CORP_1F":{"header_address":4761716,"warp_table_address":5470532},"MAP_RUSTBORO_CITY_DEVON_CORP_2F":{"header_address":4761744,"warp_table_address":5470744},"MAP_RUSTBORO_CITY_DEVON_CORP_3F":{"header_address":4761772,"warp_table_address":5470852},"MAP_RUSTBORO_CITY_FLAT1_1F":{"header_address":4761940,"warp_table_address":5471808},"MAP_RUSTBORO_CITY_FLAT1_2F":{"header_address":4761968,"warp_table_address":5472044},"MAP_RUSTBORO_CITY_FLAT2_1F":{"header_address":4762080,"warp_table_address":5472372},"MAP_RUSTBORO_CITY_FLAT2_2F":{"header_address":4762108,"warp_table_address":5472464},"MAP_RUSTBORO_CITY_FLAT2_3F":{"header_address":4762136,"warp_table_address":5472548},"MAP_RUSTBORO_CITY_GYM":{"header_address":4761800,"warp_table_address":5471024},"MAP_RUSTBORO_CITY_HOUSE1":{"header_address":4761996,"warp_table_address":5472120},"MAP_RUSTBORO_CITY_HOUSE2":{"header_address":4762052,"warp_table_address":5472288},"MAP_RUSTBORO_CITY_HOUSE3":{"header_address":4762164,"warp_table_address":5472648},"MAP_RUSTBORO_CITY_MART":{"header_address":4761912,"warp_table_address":5471724},"MAP_RUSTBORO_CITY_POKEMON_CENTER_1F":{"header_address":4761856,"warp_table_address":5471444},"MAP_RUSTBORO_CITY_POKEMON_CENTER_2F":{"header_address":4761884,"warp_table_address":5471584},"MAP_RUSTBORO_CITY_POKEMON_SCHOOL":{"header_address":4761828,"warp_table_address":5471252},"MAP_RUSTURF_TUNNEL":{"header_address":4764768,"land_encounters":{"address":5605932,"slots":[370,370,370,370,370,370,370,370,370,370,370,370]},"warp_table_address":5486644},"MAP_SAFARI_ZONE_NORTH":{"header_address":4769416,"land_encounters":{"address":5610280,"slots":[231,43,231,43,177,44,44,177,178,214,178,214]},"warp_table_address":4160749568},"MAP_SAFARI_ZONE_NORTHEAST":{"header_address":4769724,"land_encounters":{"address":5612476,"slots":[190,216,190,216,191,165,163,204,228,241,228,241]},"warp_table_address":4160749568},"MAP_SAFARI_ZONE_NORTHWEST":{"fishing_encounters":{"address":5610448,"slots":[129,118,129,118,118,118,118,119,119,119]},"header_address":4769388,"land_encounters":{"address":5610364,"slots":[111,43,111,43,84,44,44,84,85,127,85,127]},"warp_table_address":4160749568,"water_encounters":{"address":5610420,"slots":[54,54,54,55,55]}},"MAP_SAFARI_ZONE_REST_HOUSE":{"header_address":4769696,"warp_table_address":5516996},"MAP_SAFARI_ZONE_SOUTH":{"header_address":4769472,"land_encounters":{"address":5606212,"slots":[43,43,203,203,177,84,44,202,25,202,25,202]},"warp_table_address":5515444},"MAP_SAFARI_ZONE_SOUTHEAST":{"fishing_encounters":{"address":5612428,"slots":[129,118,129,118,223,118,223,223,223,224]},"header_address":4769752,"land_encounters":{"address":5612344,"slots":[191,179,191,179,190,167,163,209,234,207,234,207]},"warp_table_address":4160749568,"water_encounters":{"address":5612400,"slots":[194,183,183,183,195]}},"MAP_SAFARI_ZONE_SOUTHWEST":{"fishing_encounters":{"address":5610232,"slots":[129,118,129,118,118,118,118,119,119,119]},"header_address":4769444,"land_encounters":{"address":5610148,"slots":[43,43,203,203,177,84,44,202,25,202,25,202]},"warp_table_address":5515260,"water_encounters":{"address":5610204,"slots":[54,54,54,54,54]}},"MAP_SCORCHED_SLAB":{"header_address":4766700,"warp_table_address":5498144},"MAP_SEAFLOOR_CAVERN_ENTRANCE":{"fishing_encounters":{"address":5609764,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4765412,"warp_table_address":5491796,"water_encounters":{"address":5609736,"slots":[72,41,41,42,42]}},"MAP_SEAFLOOR_CAVERN_ROOM1":{"header_address":4765440,"land_encounters":{"address":5609136,"slots":[41,41,41,41,41,41,41,41,42,42,42,42]},"warp_table_address":5491952},"MAP_SEAFLOOR_CAVERN_ROOM2":{"header_address":4765468,"land_encounters":{"address":5609192,"slots":[41,41,41,41,41,41,41,41,42,42,42,42]},"warp_table_address":5492188},"MAP_SEAFLOOR_CAVERN_ROOM3":{"header_address":4765496,"land_encounters":{"address":5609248,"slots":[41,41,41,41,41,41,41,41,42,42,42,42]},"warp_table_address":5492456},"MAP_SEAFLOOR_CAVERN_ROOM4":{"header_address":4765524,"land_encounters":{"address":5609304,"slots":[41,41,41,41,41,41,41,41,42,42,42,42]},"warp_table_address":5492548},"MAP_SEAFLOOR_CAVERN_ROOM5":{"header_address":4765552,"land_encounters":{"address":5609360,"slots":[41,41,41,41,41,41,41,41,42,42,42,42]},"warp_table_address":5492744},"MAP_SEAFLOOR_CAVERN_ROOM6":{"fishing_encounters":{"address":5609500,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4765580,"land_encounters":{"address":5609416,"slots":[41,41,41,41,41,41,41,41,42,42,42,42]},"warp_table_address":5492788,"water_encounters":{"address":5609472,"slots":[72,41,41,42,42]}},"MAP_SEAFLOOR_CAVERN_ROOM7":{"fishing_encounters":{"address":5609632,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4765608,"land_encounters":{"address":5609548,"slots":[41,41,41,41,41,41,41,41,42,42,42,42]},"warp_table_address":5492832,"water_encounters":{"address":5609604,"slots":[72,41,41,42,42]}},"MAP_SEAFLOOR_CAVERN_ROOM8":{"header_address":4765636,"land_encounters":{"address":5609680,"slots":[41,41,41,41,41,41,41,41,42,42,42,42]},"warp_table_address":5493156},"MAP_SEAFLOOR_CAVERN_ROOM9":{"header_address":4765664,"warp_table_address":5493360},"MAP_SEALED_CHAMBER_INNER_ROOM":{"header_address":4766672,"warp_table_address":5497984},"MAP_SEALED_CHAMBER_OUTER_ROOM":{"header_address":4766644,"warp_table_address":5497608},"MAP_SECRET_BASE_BLUE_CAVE1":{"header_address":4767736,"warp_table_address":5501652},"MAP_SECRET_BASE_BLUE_CAVE2":{"header_address":4767904,"warp_table_address":5503980},"MAP_SECRET_BASE_BLUE_CAVE3":{"header_address":4768072,"warp_table_address":5506308},"MAP_SECRET_BASE_BLUE_CAVE4":{"header_address":4768240,"warp_table_address":5508636},"MAP_SECRET_BASE_BROWN_CAVE1":{"header_address":4767708,"warp_table_address":5501264},"MAP_SECRET_BASE_BROWN_CAVE2":{"header_address":4767876,"warp_table_address":5503592},"MAP_SECRET_BASE_BROWN_CAVE3":{"header_address":4768044,"warp_table_address":5505920},"MAP_SECRET_BASE_BROWN_CAVE4":{"header_address":4768212,"warp_table_address":5508248},"MAP_SECRET_BASE_RED_CAVE1":{"header_address":4767680,"warp_table_address":5500876},"MAP_SECRET_BASE_RED_CAVE2":{"header_address":4767848,"warp_table_address":5503204},"MAP_SECRET_BASE_RED_CAVE3":{"header_address":4768016,"warp_table_address":5505532},"MAP_SECRET_BASE_RED_CAVE4":{"header_address":4768184,"warp_table_address":5507860},"MAP_SECRET_BASE_SHRUB1":{"header_address":4767820,"warp_table_address":5502816},"MAP_SECRET_BASE_SHRUB2":{"header_address":4767988,"warp_table_address":5505144},"MAP_SECRET_BASE_SHRUB3":{"header_address":4768156,"warp_table_address":5507472},"MAP_SECRET_BASE_SHRUB4":{"header_address":4768324,"warp_table_address":5509800},"MAP_SECRET_BASE_TREE1":{"header_address":4767792,"warp_table_address":5502428},"MAP_SECRET_BASE_TREE2":{"header_address":4767960,"warp_table_address":5504756},"MAP_SECRET_BASE_TREE3":{"header_address":4768128,"warp_table_address":5507084},"MAP_SECRET_BASE_TREE4":{"header_address":4768296,"warp_table_address":5509412},"MAP_SECRET_BASE_YELLOW_CAVE1":{"header_address":4767764,"warp_table_address":5502040},"MAP_SECRET_BASE_YELLOW_CAVE2":{"header_address":4767932,"warp_table_address":5504368},"MAP_SECRET_BASE_YELLOW_CAVE3":{"header_address":4768100,"warp_table_address":5506696},"MAP_SECRET_BASE_YELLOW_CAVE4":{"header_address":4768268,"warp_table_address":5509024},"MAP_SHOAL_CAVE_HIGH_TIDE_ENTRANCE_ROOM":{"header_address":4766056,"warp_table_address":4160749568},"MAP_SHOAL_CAVE_HIGH_TIDE_INNER_ROOM":{"header_address":4766084,"warp_table_address":4160749568},"MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM":{"fishing_encounters":{"address":5611436,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4765944,"land_encounters":{"address":5611352,"slots":[41,341,41,341,41,341,41,341,42,341,42,341]},"warp_table_address":5494828,"water_encounters":{"address":5611408,"slots":[72,41,341,341,341]}},"MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM":{"header_address":4766980,"land_encounters":{"address":5612044,"slots":[41,341,41,341,41,341,346,341,42,346,42,346]},"warp_table_address":5498544},"MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM":{"fishing_encounters":{"address":5611304,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4765972,"land_encounters":{"address":5611220,"slots":[41,341,41,341,41,341,41,341,42,341,42,341]},"warp_table_address":5494904,"water_encounters":{"address":5611276,"slots":[72,41,341,341,341]}},"MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM":{"header_address":4766028,"land_encounters":{"address":5611164,"slots":[41,341,41,341,41,341,41,341,42,341,42,341]},"warp_table_address":5495180},"MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM":{"header_address":4766000,"land_encounters":{"address":5611108,"slots":[41,341,41,341,41,341,41,341,42,341,42,341]},"warp_table_address":5495084},"MAP_SKY_PILLAR_1F":{"header_address":4766868,"land_encounters":{"address":5612100,"slots":[322,42,42,322,319,378,378,319,319,319,319,319]},"warp_table_address":5498328},"MAP_SKY_PILLAR_2F":{"header_address":4766896,"warp_table_address":5498372},"MAP_SKY_PILLAR_3F":{"header_address":4766924,"land_encounters":{"address":5612232,"slots":[322,42,42,322,319,378,378,319,319,319,319,319]},"warp_table_address":5498408},"MAP_SKY_PILLAR_4F":{"header_address":4766952,"warp_table_address":5498452},"MAP_SKY_PILLAR_5F":{"header_address":4767008,"land_encounters":{"address":5612288,"slots":[322,42,42,322,319,378,378,319,319,359,359,359]},"warp_table_address":5498572},"MAP_SKY_PILLAR_ENTRANCE":{"header_address":4766812,"warp_table_address":5498232},"MAP_SKY_PILLAR_OUTSIDE":{"header_address":4766840,"warp_table_address":5498292},"MAP_SKY_PILLAR_TOP":{"header_address":4767036,"warp_table_address":5498656},"MAP_SLATEPORT_CITY":{"fishing_encounters":{"address":5611664,"slots":[129,72,129,72,313,313,313,313,313,313]},"header_address":4758020,"warp_table_address":5429836,"water_encounters":{"address":5611636,"slots":[72,309,309,310,310]}},"MAP_SLATEPORT_CITY_BATTLE_TENT_BATTLE_ROOM":{"header_address":4761212,"warp_table_address":4160749568},"MAP_SLATEPORT_CITY_BATTLE_TENT_CORRIDOR":{"header_address":4761184,"warp_table_address":4160749568},"MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY":{"header_address":4761156,"warp_table_address":5466624},"MAP_SLATEPORT_CITY_HARBOR":{"header_address":4761352,"warp_table_address":5468328},"MAP_SLATEPORT_CITY_HOUSE":{"header_address":4761380,"warp_table_address":5468492},"MAP_SLATEPORT_CITY_MART":{"header_address":4761464,"warp_table_address":5468856},"MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE":{"header_address":4761240,"warp_table_address":5466832},"MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F":{"header_address":4761296,"warp_table_address":5467456},"MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F":{"header_address":4761324,"warp_table_address":5467856},"MAP_SLATEPORT_CITY_POKEMON_CENTER_1F":{"header_address":4761408,"warp_table_address":5468600},"MAP_SLATEPORT_CITY_POKEMON_CENTER_2F":{"header_address":4761436,"warp_table_address":5468740},"MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB":{"header_address":4761268,"warp_table_address":5467084},"MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F":{"header_address":4761100,"warp_table_address":5466360},"MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F":{"header_address":4761128,"warp_table_address":5466476},"MAP_SOOTOPOLIS_CITY":{"fishing_encounters":{"address":5612184,"slots":[129,72,129,129,129,129,129,130,130,130]},"header_address":4758188,"warp_table_address":5433852,"water_encounters":{"address":5612156,"slots":[129,129,129,129,129]}},"MAP_SOOTOPOLIS_CITY_GYM_1F":{"header_address":4763480,"warp_table_address":5481892},"MAP_SOOTOPOLIS_CITY_GYM_B1F":{"header_address":4763508,"warp_table_address":5482200},"MAP_SOOTOPOLIS_CITY_HOUSE1":{"header_address":4763620,"warp_table_address":5482664},"MAP_SOOTOPOLIS_CITY_HOUSE2":{"header_address":4763648,"warp_table_address":5482724},"MAP_SOOTOPOLIS_CITY_HOUSE3":{"header_address":4763676,"warp_table_address":5482808},"MAP_SOOTOPOLIS_CITY_HOUSE4":{"header_address":4763704,"warp_table_address":5482916},"MAP_SOOTOPOLIS_CITY_HOUSE5":{"header_address":4763732,"warp_table_address":5483000},"MAP_SOOTOPOLIS_CITY_HOUSE6":{"header_address":4763760,"warp_table_address":5483060},"MAP_SOOTOPOLIS_CITY_HOUSE7":{"header_address":4763788,"warp_table_address":5483144},"MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE":{"header_address":4763816,"warp_table_address":5483228},"MAP_SOOTOPOLIS_CITY_MART":{"header_address":4763592,"warp_table_address":5482580},"MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F":{"header_address":4763844,"warp_table_address":5483312},"MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F":{"header_address":4763872,"warp_table_address":5483380},"MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F":{"header_address":4763536,"warp_table_address":5482324},"MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F":{"header_address":4763564,"warp_table_address":5482464},"MAP_SOUTHERN_ISLAND_EXTERIOR":{"header_address":4769640,"warp_table_address":5516780},"MAP_SOUTHERN_ISLAND_INTERIOR":{"header_address":4769668,"warp_table_address":5516876},"MAP_SS_TIDAL_CORRIDOR":{"header_address":4768828,"warp_table_address":5510992},"MAP_SS_TIDAL_LOWER_DECK":{"header_address":4768856,"warp_table_address":5511276},"MAP_SS_TIDAL_ROOMS":{"header_address":4768884,"warp_table_address":5511508},"MAP_TERRA_CAVE_END":{"header_address":4767596,"warp_table_address":5500392},"MAP_TERRA_CAVE_ENTRANCE":{"header_address":4767568,"warp_table_address":5500332},"MAP_TRADE_CENTER":{"header_address":4768380,"warp_table_address":5509944},"MAP_TRAINER_HILL_1F":{"header_address":4771096,"warp_table_address":5525172},"MAP_TRAINER_HILL_2F":{"header_address":4771124,"warp_table_address":5525208},"MAP_TRAINER_HILL_3F":{"header_address":4771152,"warp_table_address":5525244},"MAP_TRAINER_HILL_4F":{"header_address":4771180,"warp_table_address":5525280},"MAP_TRAINER_HILL_ELEVATOR":{"header_address":4771852,"warp_table_address":5526300},"MAP_TRAINER_HILL_ENTRANCE":{"header_address":4771068,"warp_table_address":5525100},"MAP_TRAINER_HILL_ROOF":{"header_address":4771208,"warp_table_address":5525340},"MAP_UNDERWATER_MARINE_CAVE":{"header_address":4767484,"warp_table_address":5500208},"MAP_UNDERWATER_ROUTE105":{"header_address":4759532,"warp_table_address":5457348},"MAP_UNDERWATER_ROUTE124":{"header_address":4759392,"warp_table_address":4160749568,"water_encounters":{"address":5612016,"slots":[373,170,373,381,381]}},"MAP_UNDERWATER_ROUTE125":{"header_address":4759560,"warp_table_address":5457384},"MAP_UNDERWATER_ROUTE126":{"header_address":4759420,"warp_table_address":5457052,"water_encounters":{"address":5606268,"slots":[373,170,373,381,381]}},"MAP_UNDERWATER_ROUTE127":{"header_address":4759448,"warp_table_address":5457176},"MAP_UNDERWATER_ROUTE128":{"header_address":4759476,"warp_table_address":5457260},"MAP_UNDERWATER_ROUTE129":{"header_address":4759504,"warp_table_address":5457312},"MAP_UNDERWATER_ROUTE134":{"header_address":4766588,"warp_table_address":5497540},"MAP_UNDERWATER_SEAFLOOR_CAVERN":{"header_address":4765384,"warp_table_address":5491744},"MAP_UNDERWATER_SEALED_CHAMBER":{"header_address":4766616,"warp_table_address":5497568},"MAP_UNDERWATER_SOOTOPOLIS_CITY":{"header_address":4764796,"warp_table_address":5486768},"MAP_UNION_ROOM":{"header_address":4769360,"warp_table_address":5514872},"MAP_UNUSED_CONTEST_HALL1":{"header_address":4768492,"warp_table_address":4160749568},"MAP_UNUSED_CONTEST_HALL2":{"header_address":4768520,"warp_table_address":4160749568},"MAP_UNUSED_CONTEST_HALL3":{"header_address":4768548,"warp_table_address":4160749568},"MAP_UNUSED_CONTEST_HALL4":{"header_address":4768576,"warp_table_address":4160749568},"MAP_UNUSED_CONTEST_HALL5":{"header_address":4768604,"warp_table_address":4160749568},"MAP_UNUSED_CONTEST_HALL6":{"header_address":4768632,"warp_table_address":4160749568},"MAP_VERDANTURF_TOWN":{"header_address":4758384,"warp_table_address":5436044},"MAP_VERDANTURF_TOWN_BATTLE_TENT_BATTLE_ROOM":{"header_address":4760512,"warp_table_address":4160749568},"MAP_VERDANTURF_TOWN_BATTLE_TENT_CORRIDOR":{"header_address":4760484,"warp_table_address":4160749568},"MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY":{"header_address":4760456,"warp_table_address":5463128},"MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE":{"header_address":4760652,"warp_table_address":5463928},"MAP_VERDANTURF_TOWN_HOUSE":{"header_address":4760680,"warp_table_address":5464012},"MAP_VERDANTURF_TOWN_MART":{"header_address":4760540,"warp_table_address":5463408},"MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F":{"header_address":4760568,"warp_table_address":5463540},"MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F":{"header_address":4760596,"warp_table_address":5463680},"MAP_VERDANTURF_TOWN_WANDAS_HOUSE":{"header_address":4760624,"warp_table_address":5463844},"MAP_VICTORY_ROAD_1F":{"header_address":4765860,"land_encounters":{"address":5606156,"slots":[42,336,383,371,41,335,42,336,382,370,382,370]},"warp_table_address":5493852},"MAP_VICTORY_ROAD_B1F":{"header_address":4765888,"land_encounters":{"address":5610496,"slots":[42,336,383,383,42,336,42,336,383,355,383,355]},"warp_table_address":5494460},"MAP_VICTORY_ROAD_B2F":{"fishing_encounters":{"address":5610664,"slots":[129,118,129,118,323,323,323,324,324,324]},"header_address":4765916,"land_encounters":{"address":5610580,"slots":[42,322,383,383,42,322,42,322,383,355,383,355]},"warp_table_address":5494704,"water_encounters":{"address":5610636,"slots":[42,42,42,42,42]}}},"misc_pokemon":[{"address":2572358,"species":385},{"address":2018148,"species":360},{"address":2323175,"species":101},{"address":2323252,"species":101},{"address":2581669,"species":317},{"address":2581574,"species":317},{"address":2581688,"species":317},{"address":2581593,"species":317},{"address":2581612,"species":317},{"address":2581631,"species":317},{"address":2581650,"species":317},{"address":2065036,"species":317},{"address":2386223,"species":185},{"address":2339323,"species":100},{"address":2339400,"species":100},{"address":2339477,"species":100}],"misc_ram_addresses":{"CB2_Overworld":134768624,"gArchipelagoDeathLinkQueued":33804824,"gArchipelagoReceivedItem":33804776,"gMain":50340544,"gPlayerParty":33703196,"gSaveBlock1Ptr":50355596,"gSaveBlock2Ptr":50355600},"misc_rom_addresses":{"gArchipelagoInfo":5912960,"gArchipelagoItemNames":5896457,"gArchipelagoNameTable":5905457,"gArchipelagoOptions":5895556,"gArchipelagoPlayerNames":5895607,"gBattleMoves":3281380,"gEvolutionTable":3318404,"gLevelUpLearnsets":3334884,"gRandomizedBerryTreeItems":5843560,"gRandomizedSoundTable":10155508,"gSpeciesInfo":3296744,"gTMHMLearnsets":3289780,"gTrainers":3230072,"gTutorMoves":6428060,"sFanfares":5422580,"sNewGamePCItems":6210444,"sStarterMon":6021752,"sTMHMMoves":6432208,"sTutorLearnsets":6428120},"species":[{"abilities":[0,0],"address":3296744,"base_stats":[0,0,0,0,0,0],"catch_rate":0,"evolutions":[],"friendship":0,"id":0,"learnset":{"address":3308280,"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}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[65,0],"address":3296772,"base_stats":[45,49,49,45,65,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":2}],"friendship":70,"id":1,"learnset":{"address":3308280,"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}]},"tmhm_learnset":"00E41E0884350720","types":[12,3]},{"abilities":[65,0],"address":3296800,"base_stats":[60,62,63,60,80,80],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":32,"species":3}],"friendship":70,"id":2,"learnset":{"address":3308308,"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}]},"tmhm_learnset":"00E41E0884350720","types":[12,3]},{"abilities":[65,0],"address":3296828,"base_stats":[80,82,83,80,100,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":3,"learnset":{"address":3308338,"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}]},"tmhm_learnset":"00E41E0886354730","types":[12,3]},{"abilities":[66,0],"address":3296856,"base_stats":[39,52,43,65,60,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":5}],"friendship":70,"id":4,"learnset":{"address":3308368,"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}]},"tmhm_learnset":"00A61EA4CC510623","types":[10,10]},{"abilities":[66,0],"address":3296884,"base_stats":[58,64,58,80,80,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":6}],"friendship":70,"id":5,"learnset":{"address":3308394,"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}]},"tmhm_learnset":"00A61EA4CC510623","types":[10,10]},{"abilities":[66,0],"address":3296912,"base_stats":[78,84,78,100,109,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":6,"learnset":{"address":3308420,"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}]},"tmhm_learnset":"00AE5EA4CE514633","types":[10,2]},{"abilities":[67,0],"address":3296940,"base_stats":[44,48,65,43,50,64],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":8}],"friendship":70,"id":7,"learnset":{"address":3308448,"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}]},"tmhm_learnset":"03B01E00CC533265","types":[11,11]},{"abilities":[67,0],"address":3296968,"base_stats":[59,63,80,58,65,80],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":9}],"friendship":70,"id":8,"learnset":{"address":3308478,"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}]},"tmhm_learnset":"03B01E00CC533265","types":[11,11]},{"abilities":[67,0],"address":3296996,"base_stats":[79,83,100,78,85,105],"catch_rate":45,"evolutions":[],"friendship":70,"id":9,"learnset":{"address":3308508,"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}]},"tmhm_learnset":"03B01E00CE537275","types":[11,11]},{"abilities":[19,0],"address":3297024,"base_stats":[45,30,35,45,20,20],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":7,"species":11}],"friendship":70,"id":10,"learnset":{"address":3308538,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33},{"level":1,"move_id":81}]},"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[61,0],"address":3297052,"base_stats":[50,20,55,30,25,25],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":10,"species":12}],"friendship":70,"id":11,"learnset":{"address":3308548,"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}]},"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[14,0],"address":3297080,"base_stats":[60,45,50,70,80,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":12,"learnset":{"address":3308560,"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}]},"tmhm_learnset":"0040BE80B43F4620","types":[6,2]},{"abilities":[19,0],"address":3297108,"base_stats":[40,35,30,50,20,20],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":7,"species":14}],"friendship":70,"id":13,"learnset":{"address":3308590,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":40},{"level":1,"move_id":81}]},"tmhm_learnset":"0000000000000000","types":[6,3]},{"abilities":[61,0],"address":3297136,"base_stats":[45,25,50,35,25,25],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":10,"species":15}],"friendship":70,"id":14,"learnset":{"address":3308600,"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}]},"tmhm_learnset":"0000000000000000","types":[6,3]},{"abilities":[68,0],"address":3297164,"base_stats":[65,80,40,75,45,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":15,"learnset":{"address":3308612,"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}]},"tmhm_learnset":"00843E88C4354620","types":[6,3]},{"abilities":[51,0],"address":3297192,"base_stats":[40,45,40,56,35,35],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":17}],"friendship":70,"id":16,"learnset":{"address":3308638,"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}]},"tmhm_learnset":"00087E8084130620","types":[0,2]},{"abilities":[51,0],"address":3297220,"base_stats":[63,60,55,71,50,50],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":36,"species":18}],"friendship":70,"id":17,"learnset":{"address":3308664,"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}]},"tmhm_learnset":"00087E8084130620","types":[0,2]},{"abilities":[51,0],"address":3297248,"base_stats":[83,80,75,91,70,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":18,"learnset":{"address":3308690,"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}]},"tmhm_learnset":"00087E8084134620","types":[0,2]},{"abilities":[50,62],"address":3297276,"base_stats":[30,56,35,72,25,35],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":20}],"friendship":70,"id":19,"learnset":{"address":3308716,"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}]},"tmhm_learnset":"00843E02ADD33E20","types":[0,0]},{"abilities":[50,62],"address":3297304,"base_stats":[55,81,60,97,50,70],"catch_rate":127,"evolutions":[],"friendship":70,"id":20,"learnset":{"address":3308738,"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}]},"tmhm_learnset":"00A43E02ADD37E30","types":[0,0]},{"abilities":[51,0],"address":3297332,"base_stats":[40,60,30,70,31,31],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":22}],"friendship":70,"id":21,"learnset":{"address":3308760,"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}]},"tmhm_learnset":"00087E8084130620","types":[0,2]},{"abilities":[51,0],"address":3297360,"base_stats":[65,90,65,100,61,61],"catch_rate":90,"evolutions":[],"friendship":70,"id":22,"learnset":{"address":3308784,"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}]},"tmhm_learnset":"00087E8084134620","types":[0,2]},{"abilities":[22,61],"address":3297388,"base_stats":[35,60,44,55,40,54],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":22,"species":24}],"friendship":70,"id":23,"learnset":{"address":3308806,"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}]},"tmhm_learnset":"00213F088E570620","types":[3,3]},{"abilities":[22,61],"address":3297416,"base_stats":[60,85,69,80,65,79],"catch_rate":90,"evolutions":[],"friendship":70,"id":24,"learnset":{"address":3308834,"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}]},"tmhm_learnset":"00213F088E574620","types":[3,3]},{"abilities":[9,0],"address":3297444,"base_stats":[35,55,30,90,50,40],"catch_rate":190,"evolutions":[{"method":"ITEM","param":96,"species":26}],"friendship":70,"id":25,"learnset":{"address":3308862,"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}]},"tmhm_learnset":"00E01E02CDD38221","types":[13,13]},{"abilities":[9,0],"address":3297472,"base_stats":[60,90,55,100,90,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":26,"learnset":{"address":3308890,"moves":[{"level":1,"move_id":84},{"level":1,"move_id":39},{"level":1,"move_id":98},{"level":1,"move_id":85}]},"tmhm_learnset":"00E03E02CDD3C221","types":[13,13]},{"abilities":[8,0],"address":3297500,"base_stats":[50,75,85,40,20,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":22,"species":28}],"friendship":70,"id":27,"learnset":{"address":3308900,"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}]},"tmhm_learnset":"00A43ED0CE510621","types":[4,4]},{"abilities":[8,0],"address":3297528,"base_stats":[75,100,110,65,45,55],"catch_rate":90,"evolutions":[],"friendship":70,"id":28,"learnset":{"address":3308926,"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}]},"tmhm_learnset":"00A43ED0CE514621","types":[4,4]},{"abilities":[38,0],"address":3297556,"base_stats":[55,47,52,41,40,40],"catch_rate":235,"evolutions":[{"method":"LEVEL","param":16,"species":30}],"friendship":70,"id":29,"learnset":{"address":3308952,"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}]},"tmhm_learnset":"00A43E8A8DD33624","types":[3,3]},{"abilities":[38,0],"address":3297584,"base_stats":[70,62,67,56,55,55],"catch_rate":120,"evolutions":[{"method":"ITEM","param":94,"species":31}],"friendship":70,"id":30,"learnset":{"address":3308978,"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}]},"tmhm_learnset":"00A43E8A8DD33624","types":[3,3]},{"abilities":[38,0],"address":3297612,"base_stats":[90,82,87,76,75,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":31,"learnset":{"address":3309004,"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}]},"tmhm_learnset":"00B43FFEEFD37E35","types":[3,4]},{"abilities":[38,0],"address":3297640,"base_stats":[46,57,40,50,40,40],"catch_rate":235,"evolutions":[{"method":"LEVEL","param":16,"species":33}],"friendship":70,"id":32,"learnset":{"address":3309016,"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}]},"tmhm_learnset":"00A43E0A8DD33624","types":[3,3]},{"abilities":[38,0],"address":3297668,"base_stats":[61,72,57,65,55,55],"catch_rate":120,"evolutions":[{"method":"ITEM","param":94,"species":34}],"friendship":70,"id":33,"learnset":{"address":3309042,"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}]},"tmhm_learnset":"00A43E0A8DD33624","types":[3,3]},{"abilities":[38,0],"address":3297696,"base_stats":[81,92,77,85,85,75],"catch_rate":45,"evolutions":[],"friendship":70,"id":34,"learnset":{"address":3309068,"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}]},"tmhm_learnset":"00B43F7EEFD37E35","types":[3,4]},{"abilities":[56,0],"address":3297724,"base_stats":[70,45,48,35,60,65],"catch_rate":150,"evolutions":[{"method":"ITEM","param":94,"species":36}],"friendship":140,"id":35,"learnset":{"address":3309080,"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}]},"tmhm_learnset":"00611E27FDFBB62D","types":[0,0]},{"abilities":[56,0],"address":3297752,"base_stats":[95,70,73,60,85,90],"catch_rate":25,"evolutions":[],"friendship":140,"id":36,"learnset":{"address":3309112,"moves":[{"level":1,"move_id":47},{"level":1,"move_id":3},{"level":1,"move_id":107},{"level":1,"move_id":118}]},"tmhm_learnset":"00611E27FDFBF62D","types":[0,0]},{"abilities":[18,0],"address":3297780,"base_stats":[38,41,40,65,50,65],"catch_rate":190,"evolutions":[{"method":"ITEM","param":95,"species":38}],"friendship":70,"id":37,"learnset":{"address":3309122,"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}]},"tmhm_learnset":"00021E248C590630","types":[10,10]},{"abilities":[18,0],"address":3297808,"base_stats":[73,76,75,100,81,100],"catch_rate":75,"evolutions":[],"friendship":70,"id":38,"learnset":{"address":3309152,"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}]},"tmhm_learnset":"00021E248C594630","types":[10,10]},{"abilities":[56,0],"address":3297836,"base_stats":[115,45,20,20,45,25],"catch_rate":170,"evolutions":[{"method":"ITEM","param":94,"species":40}],"friendship":70,"id":39,"learnset":{"address":3309164,"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}]},"tmhm_learnset":"00611E27FDBBB625","types":[0,0]},{"abilities":[56,0],"address":3297864,"base_stats":[140,70,45,45,75,50],"catch_rate":50,"evolutions":[],"friendship":70,"id":40,"learnset":{"address":3309194,"moves":[{"level":1,"move_id":47},{"level":1,"move_id":50},{"level":1,"move_id":111},{"level":1,"move_id":3}]},"tmhm_learnset":"00611E27FDBBF625","types":[0,0]},{"abilities":[39,0],"address":3297892,"base_stats":[40,45,35,55,30,40],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":22,"species":42}],"friendship":70,"id":41,"learnset":{"address":3309204,"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}]},"tmhm_learnset":"00017F88A4170E20","types":[3,2]},{"abilities":[39,0],"address":3297920,"base_stats":[75,80,70,90,65,75],"catch_rate":90,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":169}],"friendship":70,"id":42,"learnset":{"address":3309232,"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}]},"tmhm_learnset":"00017F88A4174E20","types":[3,2]},{"abilities":[34,0],"address":3297948,"base_stats":[45,50,55,30,75,65],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":21,"species":44}],"friendship":70,"id":43,"learnset":{"address":3309260,"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}]},"tmhm_learnset":"00441E0884350720","types":[12,3]},{"abilities":[34,0],"address":3297976,"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":{"address":3309284,"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}]},"tmhm_learnset":"00441E0884350720","types":[12,3]},{"abilities":[34,0],"address":3298004,"base_stats":[75,80,85,50,100,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":45,"learnset":{"address":3309308,"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}]},"tmhm_learnset":"00441E0884354720","types":[12,3]},{"abilities":[27,0],"address":3298032,"base_stats":[35,70,55,25,45,55],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":24,"species":47}],"friendship":70,"id":46,"learnset":{"address":3309320,"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}]},"tmhm_learnset":"00C43E888C350720","types":[6,12]},{"abilities":[27,0],"address":3298060,"base_stats":[60,95,80,30,60,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":47,"learnset":{"address":3309346,"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}]},"tmhm_learnset":"00C43E888C354720","types":[6,12]},{"abilities":[14,0],"address":3298088,"base_stats":[60,55,50,45,40,55],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":31,"species":49}],"friendship":70,"id":48,"learnset":{"address":3309372,"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}]},"tmhm_learnset":"0040BE0894350620","types":[6,3]},{"abilities":[19,0],"address":3298116,"base_stats":[70,65,60,90,90,75],"catch_rate":75,"evolutions":[],"friendship":70,"id":49,"learnset":{"address":3309398,"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}]},"tmhm_learnset":"0040BE8894354620","types":[6,3]},{"abilities":[8,71],"address":3298144,"base_stats":[10,55,25,95,35,45],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":26,"species":51}],"friendship":70,"id":50,"learnset":{"address":3309428,"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}]},"tmhm_learnset":"00843EC88E110620","types":[4,4]},{"abilities":[8,71],"address":3298172,"base_stats":[35,80,50,120,50,70],"catch_rate":50,"evolutions":[],"friendship":70,"id":51,"learnset":{"address":3309452,"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}]},"tmhm_learnset":"00843EC88E114620","types":[4,4]},{"abilities":[53,0],"address":3298200,"base_stats":[40,45,35,90,40,40],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":28,"species":53}],"friendship":70,"id":52,"learnset":{"address":3309478,"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}]},"tmhm_learnset":"00453F82ADD30E24","types":[0,0]},{"abilities":[7,0],"address":3298228,"base_stats":[65,70,60,115,65,65],"catch_rate":90,"evolutions":[],"friendship":70,"id":53,"learnset":{"address":3309502,"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}]},"tmhm_learnset":"00453F82ADD34E34","types":[0,0]},{"abilities":[6,13],"address":3298256,"base_stats":[50,52,48,55,65,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":33,"species":55}],"friendship":70,"id":54,"learnset":{"address":3309526,"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}]},"tmhm_learnset":"03F01E80CC53326D","types":[11,11]},{"abilities":[6,13],"address":3298284,"base_stats":[80,82,78,85,95,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":55,"learnset":{"address":3309550,"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}]},"tmhm_learnset":"03F01E80CC53726D","types":[11,11]},{"abilities":[72,0],"address":3298312,"base_stats":[40,80,35,70,35,45],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":28,"species":57}],"friendship":70,"id":56,"learnset":{"address":3309574,"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}]},"tmhm_learnset":"00A23EC0CFD30EA1","types":[1,1]},{"abilities":[72,0],"address":3298340,"base_stats":[65,105,60,95,60,70],"catch_rate":75,"evolutions":[],"friendship":70,"id":57,"learnset":{"address":3309600,"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}]},"tmhm_learnset":"00A23EC0CFD34EA1","types":[1,1]},{"abilities":[22,18],"address":3298368,"base_stats":[55,70,45,60,70,50],"catch_rate":190,"evolutions":[{"method":"ITEM","param":95,"species":59}],"friendship":70,"id":58,"learnset":{"address":3309628,"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}]},"tmhm_learnset":"00A23EA48C510630","types":[10,10]},{"abilities":[22,18],"address":3298396,"base_stats":[90,110,80,95,100,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":59,"learnset":{"address":3309654,"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}]},"tmhm_learnset":"00A23EA48C514630","types":[10,10]},{"abilities":[11,6],"address":3298424,"base_stats":[40,50,40,90,40,40],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":25,"species":61}],"friendship":70,"id":60,"learnset":{"address":3309666,"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}]},"tmhm_learnset":"03103E009C133264","types":[11,11]},{"abilities":[11,6],"address":3298452,"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":{"address":3309690,"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}]},"tmhm_learnset":"03B03E00DE133265","types":[11,11]},{"abilities":[11,6],"address":3298480,"base_stats":[90,85,95,70,70,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":62,"learnset":{"address":3309714,"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}]},"tmhm_learnset":"03B03E40DE1372E5","types":[11,1]},{"abilities":[28,39],"address":3298508,"base_stats":[25,20,15,90,105,55],"catch_rate":200,"evolutions":[{"method":"LEVEL","param":16,"species":64}],"friendship":70,"id":63,"learnset":{"address":3309728,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":93},{"level":1,"move_id":100}]},"tmhm_learnset":"0041BF03B45B8E29","types":[14,14]},{"abilities":[28,39],"address":3298536,"base_stats":[40,35,30,105,120,70],"catch_rate":100,"evolutions":[{"method":"LEVEL","param":37,"species":65}],"friendship":70,"id":64,"learnset":{"address":3309738,"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}]},"tmhm_learnset":"0041BF03B45B8E29","types":[14,14]},{"abilities":[28,39],"address":3298564,"base_stats":[55,50,45,120,135,85],"catch_rate":50,"evolutions":[],"friendship":70,"id":65,"learnset":{"address":3309766,"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}]},"tmhm_learnset":"0041BF03B45BCE29","types":[14,14]},{"abilities":[62,0],"address":3298592,"base_stats":[70,80,50,35,35,35],"catch_rate":180,"evolutions":[{"method":"LEVEL","param":28,"species":67}],"friendship":70,"id":66,"learnset":{"address":3309794,"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}]},"tmhm_learnset":"00A03E64CE1306A1","types":[1,1]},{"abilities":[62,0],"address":3298620,"base_stats":[80,100,70,45,50,60],"catch_rate":90,"evolutions":[{"method":"LEVEL","param":37,"species":68}],"friendship":70,"id":67,"learnset":{"address":3309824,"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}]},"tmhm_learnset":"00A03E64CE1306A1","types":[1,1]},{"abilities":[62,0],"address":3298648,"base_stats":[90,130,80,55,65,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":68,"learnset":{"address":3309854,"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}]},"tmhm_learnset":"00A03E64CE1346A1","types":[1,1]},{"abilities":[34,0],"address":3298676,"base_stats":[50,75,35,40,70,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":21,"species":70}],"friendship":70,"id":69,"learnset":{"address":3309884,"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}]},"tmhm_learnset":"00443E0884350720","types":[12,3]},{"abilities":[34,0],"address":3298704,"base_stats":[65,90,50,55,85,45],"catch_rate":120,"evolutions":[{"method":"ITEM","param":98,"species":71}],"friendship":70,"id":70,"learnset":{"address":3309912,"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}]},"tmhm_learnset":"00443E0884350720","types":[12,3]},{"abilities":[34,0],"address":3298732,"base_stats":[80,105,65,70,100,60],"catch_rate":45,"evolutions":[],"friendship":70,"id":71,"learnset":{"address":3309940,"moves":[{"level":1,"move_id":22},{"level":1,"move_id":79},{"level":1,"move_id":230},{"level":1,"move_id":75}]},"tmhm_learnset":"00443E0884354720","types":[12,3]},{"abilities":[29,64],"address":3298760,"base_stats":[40,40,35,70,50,100],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":30,"species":73}],"friendship":70,"id":72,"learnset":{"address":3309950,"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}]},"tmhm_learnset":"03143E0884173264","types":[11,3]},{"abilities":[29,64],"address":3298788,"base_stats":[80,70,65,100,80,120],"catch_rate":60,"evolutions":[],"friendship":70,"id":73,"learnset":{"address":3309976,"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}]},"tmhm_learnset":"03143E0884177264","types":[11,3]},{"abilities":[69,5],"address":3298816,"base_stats":[40,80,100,20,30,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":25,"species":75}],"friendship":70,"id":74,"learnset":{"address":3310002,"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}]},"tmhm_learnset":"00A01E74CE110621","types":[5,4]},{"abilities":[69,5],"address":3298844,"base_stats":[55,95,115,35,45,45],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":37,"species":76}],"friendship":70,"id":75,"learnset":{"address":3310030,"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}]},"tmhm_learnset":"00A01E74CE110621","types":[5,4]},{"abilities":[69,5],"address":3298872,"base_stats":[80,110,130,45,55,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":76,"learnset":{"address":3310058,"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}]},"tmhm_learnset":"00A01E74CE114631","types":[5,4]},{"abilities":[50,18],"address":3298900,"base_stats":[50,85,55,90,65,65],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":40,"species":78}],"friendship":70,"id":77,"learnset":{"address":3310086,"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}]},"tmhm_learnset":"00221E2484710620","types":[10,10]},{"abilities":[50,18],"address":3298928,"base_stats":[65,100,70,105,80,80],"catch_rate":60,"evolutions":[],"friendship":70,"id":78,"learnset":{"address":3310114,"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}]},"tmhm_learnset":"00221E2484714620","types":[10,10]},{"abilities":[12,20],"address":3298956,"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":{"address":3310144,"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}]},"tmhm_learnset":"02709E24BE5B366C","types":[11,14]},{"abilities":[12,20],"address":3298984,"base_stats":[95,75,110,30,100,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":80,"learnset":{"address":3310168,"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}]},"tmhm_learnset":"02F09E24FE5B766D","types":[11,14]},{"abilities":[42,5],"address":3299012,"base_stats":[25,35,70,45,95,55],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":30,"species":82}],"friendship":70,"id":81,"learnset":{"address":3310194,"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}]},"tmhm_learnset":"00400E0385930620","types":[13,8]},{"abilities":[42,5],"address":3299040,"base_stats":[50,60,95,70,120,70],"catch_rate":60,"evolutions":[],"friendship":70,"id":82,"learnset":{"address":3310222,"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}]},"tmhm_learnset":"00400E0385934620","types":[13,8]},{"abilities":[51,39],"address":3299068,"base_stats":[52,65,55,60,58,62],"catch_rate":45,"evolutions":[],"friendship":70,"id":83,"learnset":{"address":3310250,"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}]},"tmhm_learnset":"000C7E8084510620","types":[0,2]},{"abilities":[50,48],"address":3299096,"base_stats":[35,85,45,75,35,35],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":31,"species":85}],"friendship":70,"id":84,"learnset":{"address":3310278,"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}]},"tmhm_learnset":"00087E8084110620","types":[0,2]},{"abilities":[50,48],"address":3299124,"base_stats":[60,110,70,100,60,60],"catch_rate":45,"evolutions":[],"friendship":70,"id":85,"learnset":{"address":3310302,"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}]},"tmhm_learnset":"00087F8084114E20","types":[0,2]},{"abilities":[47,0],"address":3299152,"base_stats":[65,45,55,45,45,70],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":34,"species":87}],"friendship":70,"id":86,"learnset":{"address":3310326,"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}]},"tmhm_learnset":"03103E00841B3264","types":[11,11]},{"abilities":[47,0],"address":3299180,"base_stats":[90,70,80,70,70,95],"catch_rate":75,"evolutions":[],"friendship":70,"id":87,"learnset":{"address":3310350,"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}]},"tmhm_learnset":"03103E00841B7264","types":[11,15]},{"abilities":[1,60],"address":3299208,"base_stats":[80,80,50,25,40,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":38,"species":89}],"friendship":70,"id":88,"learnset":{"address":3310376,"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}]},"tmhm_learnset":"00003F6E8D970E20","types":[3,3]},{"abilities":[1,60],"address":3299236,"base_stats":[105,105,75,50,65,100],"catch_rate":75,"evolutions":[],"friendship":70,"id":89,"learnset":{"address":3310402,"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}]},"tmhm_learnset":"00A03F6ECD974E21","types":[3,3]},{"abilities":[75,0],"address":3299264,"base_stats":[30,65,100,40,45,25],"catch_rate":190,"evolutions":[{"method":"ITEM","param":97,"species":91}],"friendship":70,"id":90,"learnset":{"address":3310428,"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}]},"tmhm_learnset":"02101E0084133264","types":[11,11]},{"abilities":[75,0],"address":3299292,"base_stats":[50,95,180,70,85,45],"catch_rate":60,"evolutions":[],"friendship":70,"id":91,"learnset":{"address":3310450,"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}]},"tmhm_learnset":"02101F0084137264","types":[11,15]},{"abilities":[26,0],"address":3299320,"base_stats":[30,35,30,80,100,35],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":25,"species":93}],"friendship":70,"id":92,"learnset":{"address":3310464,"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}]},"tmhm_learnset":"0001BF08B4970E20","types":[7,3]},{"abilities":[26,0],"address":3299348,"base_stats":[45,50,45,95,115,55],"catch_rate":90,"evolutions":[{"method":"LEVEL","param":37,"species":94}],"friendship":70,"id":93,"learnset":{"address":3310488,"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}]},"tmhm_learnset":"0001BF08B4970E20","types":[7,3]},{"abilities":[26,0],"address":3299376,"base_stats":[60,65,60,110,130,75],"catch_rate":45,"evolutions":[],"friendship":70,"id":94,"learnset":{"address":3310514,"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}]},"tmhm_learnset":"00A1BF08F5974E21","types":[7,3]},{"abilities":[69,5],"address":3299404,"base_stats":[35,45,160,70,30,45],"catch_rate":45,"evolutions":[{"method":"ITEM","param":199,"species":208}],"friendship":70,"id":95,"learnset":{"address":3310540,"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}]},"tmhm_learnset":"00A01F508E510E30","types":[5,4]},{"abilities":[15,0],"address":3299432,"base_stats":[60,48,45,42,43,90],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":26,"species":97}],"friendship":70,"id":96,"learnset":{"address":3310568,"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}]},"tmhm_learnset":"0041BF01F41B8E29","types":[14,14]},{"abilities":[15,0],"address":3299460,"base_stats":[85,73,70,67,73,115],"catch_rate":75,"evolutions":[],"friendship":70,"id":97,"learnset":{"address":3310594,"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}]},"tmhm_learnset":"0041BF01F41BCE29","types":[14,14]},{"abilities":[52,75],"address":3299488,"base_stats":[30,105,90,50,25,25],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":28,"species":99}],"friendship":70,"id":98,"learnset":{"address":3310620,"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}]},"tmhm_learnset":"02B43E408C133264","types":[11,11]},{"abilities":[52,75],"address":3299516,"base_stats":[55,130,115,75,50,50],"catch_rate":60,"evolutions":[],"friendship":70,"id":99,"learnset":{"address":3310646,"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}]},"tmhm_learnset":"02B43E408C137264","types":[11,11]},{"abilities":[43,9],"address":3299544,"base_stats":[40,30,50,100,55,55],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":30,"species":101}],"friendship":70,"id":100,"learnset":{"address":3310672,"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}]},"tmhm_learnset":"00402F0285938A20","types":[13,13]},{"abilities":[43,9],"address":3299572,"base_stats":[60,50,70,140,80,80],"catch_rate":60,"evolutions":[],"friendship":70,"id":101,"learnset":{"address":3310700,"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}]},"tmhm_learnset":"00402F028593CA20","types":[13,13]},{"abilities":[34,0],"address":3299600,"base_stats":[60,40,80,40,60,45],"catch_rate":90,"evolutions":[{"method":"ITEM","param":98,"species":103}],"friendship":70,"id":102,"learnset":{"address":3310728,"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}]},"tmhm_learnset":"0060BE0994358720","types":[12,14]},{"abilities":[34,0],"address":3299628,"base_stats":[95,95,85,55,125,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":103,"learnset":{"address":3310752,"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}]},"tmhm_learnset":"0060BE099435C720","types":[12,14]},{"abilities":[69,31],"address":3299656,"base_stats":[50,50,95,35,40,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":28,"species":105}],"friendship":70,"id":104,"learnset":{"address":3310766,"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}]},"tmhm_learnset":"00A03EF4CE513621","types":[4,4]},{"abilities":[69,31],"address":3299684,"base_stats":[60,80,110,45,50,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":105,"learnset":{"address":3310798,"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}]},"tmhm_learnset":"00A03EF4CE517621","types":[4,4]},{"abilities":[7,0],"address":3299712,"base_stats":[50,120,53,87,35,110],"catch_rate":45,"evolutions":[],"friendship":70,"id":106,"learnset":{"address":3310830,"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}]},"tmhm_learnset":"00A03E40C61306A1","types":[1,1]},{"abilities":[51,0],"address":3299740,"base_stats":[50,105,79,76,35,110],"catch_rate":45,"evolutions":[],"friendship":70,"id":107,"learnset":{"address":3310862,"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}]},"tmhm_learnset":"00A03E40C61306A1","types":[1,1]},{"abilities":[20,12],"address":3299768,"base_stats":[90,55,75,30,60,75],"catch_rate":45,"evolutions":[],"friendship":70,"id":108,"learnset":{"address":3310892,"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}]},"tmhm_learnset":"00B43E76EFF37625","types":[0,0]},{"abilities":[26,0],"address":3299796,"base_stats":[40,65,95,35,60,45],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":35,"species":110}],"friendship":70,"id":109,"learnset":{"address":3310920,"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}]},"tmhm_learnset":"00403F2EA5930E20","types":[3,3]},{"abilities":[26,0],"address":3299824,"base_stats":[65,90,120,60,85,70],"catch_rate":60,"evolutions":[],"friendship":70,"id":110,"learnset":{"address":3310946,"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}]},"tmhm_learnset":"00403F2EA5934E20","types":[3,3]},{"abilities":[31,69],"address":3299852,"base_stats":[80,85,95,25,30,30],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":42,"species":112}],"friendship":70,"id":111,"learnset":{"address":3310972,"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}]},"tmhm_learnset":"00A03E768FD33630","types":[4,5]},{"abilities":[31,69],"address":3299880,"base_stats":[105,130,120,40,45,45],"catch_rate":60,"evolutions":[],"friendship":70,"id":112,"learnset":{"address":3310998,"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}]},"tmhm_learnset":"00B43E76CFD37631","types":[4,5]},{"abilities":[30,32],"address":3299908,"base_stats":[250,5,5,50,35,105],"catch_rate":30,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":242}],"friendship":140,"id":113,"learnset":{"address":3311024,"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}]},"tmhm_learnset":"00E19E76F7FBF66D","types":[0,0]},{"abilities":[34,0],"address":3299936,"base_stats":[65,55,115,60,100,40],"catch_rate":45,"evolutions":[],"friendship":70,"id":114,"learnset":{"address":3311054,"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}]},"tmhm_learnset":"00C43E0884354720","types":[12,12]},{"abilities":[48,0],"address":3299964,"base_stats":[105,95,80,90,40,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":115,"learnset":{"address":3311084,"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}]},"tmhm_learnset":"00B43EF6EFF37675","types":[0,0]},{"abilities":[33,0],"address":3299992,"base_stats":[30,40,70,60,70,25],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":32,"species":117}],"friendship":70,"id":116,"learnset":{"address":3311110,"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}]},"tmhm_learnset":"03101E0084133264","types":[11,11]},{"abilities":[38,0],"address":3300020,"base_stats":[55,65,95,85,95,45],"catch_rate":75,"evolutions":[{"method":"ITEM","param":201,"species":230}],"friendship":70,"id":117,"learnset":{"address":3311134,"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}]},"tmhm_learnset":"03101E0084137264","types":[11,11]},{"abilities":[33,41],"address":3300048,"base_stats":[45,67,60,63,35,50],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":33,"species":119}],"friendship":70,"id":118,"learnset":{"address":3311158,"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}]},"tmhm_learnset":"03101E0084133264","types":[11,11]},{"abilities":[33,41],"address":3300076,"base_stats":[80,92,65,68,65,80],"catch_rate":60,"evolutions":[],"friendship":70,"id":119,"learnset":{"address":3311182,"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}]},"tmhm_learnset":"03101E0084137264","types":[11,11]},{"abilities":[35,30],"address":3300104,"base_stats":[30,45,55,85,70,55],"catch_rate":225,"evolutions":[{"method":"ITEM","param":97,"species":121}],"friendship":70,"id":120,"learnset":{"address":3311206,"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}]},"tmhm_learnset":"03500E019593B264","types":[11,11]},{"abilities":[35,30],"address":3300132,"base_stats":[60,75,85,115,100,85],"catch_rate":60,"evolutions":[],"friendship":70,"id":121,"learnset":{"address":3311236,"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}]},"tmhm_learnset":"03508E019593F264","types":[11,14]},{"abilities":[43,0],"address":3300160,"base_stats":[40,45,65,90,100,120],"catch_rate":45,"evolutions":[],"friendship":70,"id":122,"learnset":{"address":3311248,"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}]},"tmhm_learnset":"0041BF03F5BBCE29","types":[14,14]},{"abilities":[68,0],"address":3300188,"base_stats":[70,110,80,105,55,80],"catch_rate":45,"evolutions":[{"method":"ITEM","param":199,"species":212}],"friendship":70,"id":123,"learnset":{"address":3311286,"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}]},"tmhm_learnset":"00847E8084134620","types":[6,2]},{"abilities":[12,0],"address":3300216,"base_stats":[65,50,35,95,115,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":124,"learnset":{"address":3311314,"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}]},"tmhm_learnset":"0040BF01F413FA6D","types":[15,14]},{"abilities":[9,0],"address":3300244,"base_stats":[65,83,57,105,95,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":125,"learnset":{"address":3311342,"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}]},"tmhm_learnset":"00E03E02D5D3C221","types":[13,13]},{"abilities":[49,0],"address":3300272,"base_stats":[65,95,57,93,100,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":126,"learnset":{"address":3311364,"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}]},"tmhm_learnset":"00A03E24D4514621","types":[10,10]},{"abilities":[52,0],"address":3300300,"base_stats":[65,125,100,85,55,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":127,"learnset":{"address":3311390,"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}]},"tmhm_learnset":"00A43E40CE1346A1","types":[6,6]},{"abilities":[22,0],"address":3300328,"base_stats":[75,100,95,110,40,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":128,"learnset":{"address":3311416,"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}]},"tmhm_learnset":"00B01E7687F37624","types":[0,0]},{"abilities":[33,0],"address":3300356,"base_stats":[20,10,55,80,15,20],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":130}],"friendship":70,"id":129,"learnset":{"address":3311442,"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}]},"tmhm_learnset":"0000000000000000","types":[11,11]},{"abilities":[22,0],"address":3300384,"base_stats":[95,125,79,81,60,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":130,"learnset":{"address":3311456,"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}]},"tmhm_learnset":"03B01F3487937A74","types":[11,2]},{"abilities":[11,75],"address":3300412,"base_stats":[130,85,80,60,85,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":131,"learnset":{"address":3311482,"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}]},"tmhm_learnset":"03B01E0295DB7274","types":[11,15]},{"abilities":[7,0],"address":3300440,"base_stats":[48,48,48,48,48,48],"catch_rate":35,"evolutions":[],"friendship":70,"id":132,"learnset":{"address":3311510,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":144}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[50,0],"address":3300468,"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":{"address":3311520,"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}]},"tmhm_learnset":"00001E00AC530620","types":[0,0]},{"abilities":[11,0],"address":3300496,"base_stats":[130,65,60,65,110,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":134,"learnset":{"address":3311542,"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}]},"tmhm_learnset":"03101E00AC537674","types":[11,11]},{"abilities":[10,0],"address":3300524,"base_stats":[65,65,60,130,110,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":135,"learnset":{"address":3311568,"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}]},"tmhm_learnset":"00401E02ADD34630","types":[13,13]},{"abilities":[18,0],"address":3300552,"base_stats":[65,130,60,65,95,110],"catch_rate":45,"evolutions":[],"friendship":70,"id":136,"learnset":{"address":3311594,"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}]},"tmhm_learnset":"00021E24AC534630","types":[10,10]},{"abilities":[36,0],"address":3300580,"base_stats":[65,60,70,40,85,75],"catch_rate":45,"evolutions":[{"method":"ITEM","param":218,"species":233}],"friendship":70,"id":137,"learnset":{"address":3311620,"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}]},"tmhm_learnset":"00402E82B5F37620","types":[0,0]},{"abilities":[33,75],"address":3300608,"base_stats":[35,40,100,35,90,55],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":40,"species":139}],"friendship":70,"id":138,"learnset":{"address":3311646,"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}]},"tmhm_learnset":"03903E5084133264","types":[5,11]},{"abilities":[33,75],"address":3300636,"base_stats":[70,60,125,55,115,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":139,"learnset":{"address":3311672,"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}]},"tmhm_learnset":"03903E5084137264","types":[5,11]},{"abilities":[33,4],"address":3300664,"base_stats":[30,80,90,55,55,45],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":40,"species":141}],"friendship":70,"id":140,"learnset":{"address":3311700,"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}]},"tmhm_learnset":"01903ED08C173264","types":[5,11]},{"abilities":[33,4],"address":3300692,"base_stats":[60,115,105,80,65,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":141,"learnset":{"address":3311726,"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}]},"tmhm_learnset":"03943ED0CC177264","types":[5,11]},{"abilities":[69,46],"address":3300720,"base_stats":[80,105,65,130,60,75],"catch_rate":45,"evolutions":[],"friendship":70,"id":142,"learnset":{"address":3311754,"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}]},"tmhm_learnset":"00A87FF486534E32","types":[5,2]},{"abilities":[17,47],"address":3300748,"base_stats":[160,110,65,30,65,110],"catch_rate":25,"evolutions":[],"friendship":70,"id":143,"learnset":{"address":3311778,"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}]},"tmhm_learnset":"00301E76F7B37625","types":[0,0]},{"abilities":[46,0],"address":3300776,"base_stats":[90,85,100,85,95,125],"catch_rate":3,"evolutions":[],"friendship":35,"id":144,"learnset":{"address":3311812,"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}]},"tmhm_learnset":"00884E9184137674","types":[15,2]},{"abilities":[46,0],"address":3300804,"base_stats":[90,90,85,100,125,90],"catch_rate":3,"evolutions":[],"friendship":35,"id":145,"learnset":{"address":3311836,"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}]},"tmhm_learnset":"00C84E928593C630","types":[13,2]},{"abilities":[46,0],"address":3300832,"base_stats":[90,100,90,90,125,85],"catch_rate":3,"evolutions":[],"friendship":35,"id":146,"learnset":{"address":3311860,"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}]},"tmhm_learnset":"008A4EB4841B4630","types":[10,2]},{"abilities":[61,0],"address":3300860,"base_stats":[41,64,45,50,50,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":148}],"friendship":35,"id":147,"learnset":{"address":3311884,"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}]},"tmhm_learnset":"01101E2685DB7664","types":[16,16]},{"abilities":[61,0],"address":3300888,"base_stats":[61,84,65,70,70,70],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":55,"species":149}],"friendship":35,"id":148,"learnset":{"address":3311910,"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}]},"tmhm_learnset":"01101E2685DB7664","types":[16,16]},{"abilities":[39,0],"address":3300916,"base_stats":[91,134,95,80,100,100],"catch_rate":45,"evolutions":[],"friendship":35,"id":149,"learnset":{"address":3311936,"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}]},"tmhm_learnset":"03BC5EF6C7DB7677","types":[16,2]},{"abilities":[46,0],"address":3300944,"base_stats":[106,110,90,130,154,90],"catch_rate":3,"evolutions":[],"friendship":0,"id":150,"learnset":{"address":3311964,"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}]},"tmhm_learnset":"00E18FF7F7FBFEED","types":[14,14]},{"abilities":[28,0],"address":3300972,"base_stats":[100,100,100,100,100,100],"catch_rate":45,"evolutions":[],"friendship":100,"id":151,"learnset":{"address":3311992,"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}]},"tmhm_learnset":"03FFFFFFFFFFFFFF","types":[14,14]},{"abilities":[65,0],"address":3301000,"base_stats":[45,49,65,45,49,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":153}],"friendship":70,"id":152,"learnset":{"address":3312012,"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}]},"tmhm_learnset":"00441E01847D8720","types":[12,12]},{"abilities":[65,0],"address":3301028,"base_stats":[60,62,80,60,63,80],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":32,"species":154}],"friendship":70,"id":153,"learnset":{"address":3312038,"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}]},"tmhm_learnset":"00E41E01847D8720","types":[12,12]},{"abilities":[65,0],"address":3301056,"base_stats":[80,82,100,80,83,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":154,"learnset":{"address":3312064,"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}]},"tmhm_learnset":"00E41E01867DC720","types":[12,12]},{"abilities":[66,0],"address":3301084,"base_stats":[39,52,43,65,60,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":14,"species":156}],"friendship":70,"id":155,"learnset":{"address":3312090,"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}]},"tmhm_learnset":"00061EA48C110620","types":[10,10]},{"abilities":[66,0],"address":3301112,"base_stats":[58,64,58,80,80,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":157}],"friendship":70,"id":156,"learnset":{"address":3312112,"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}]},"tmhm_learnset":"00A61EA4CC110631","types":[10,10]},{"abilities":[66,0],"address":3301140,"base_stats":[78,84,78,100,109,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":157,"learnset":{"address":3312134,"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}]},"tmhm_learnset":"00A61EA4CE114631","types":[10,10]},{"abilities":[67,0],"address":3301168,"base_stats":[50,65,64,43,44,48],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":18,"species":159}],"friendship":70,"id":158,"learnset":{"address":3312156,"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}]},"tmhm_learnset":"03141E80CC533265","types":[11,11]},{"abilities":[67,0],"address":3301196,"base_stats":[65,80,80,58,59,63],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":160}],"friendship":70,"id":159,"learnset":{"address":3312180,"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}]},"tmhm_learnset":"03B41E80CC533275","types":[11,11]},{"abilities":[67,0],"address":3301224,"base_stats":[85,105,100,78,79,83],"catch_rate":45,"evolutions":[],"friendship":70,"id":160,"learnset":{"address":3312204,"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}]},"tmhm_learnset":"03B41E80CE537277","types":[11,11]},{"abilities":[50,51],"address":3301252,"base_stats":[35,46,34,20,35,45],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":15,"species":162}],"friendship":70,"id":161,"learnset":{"address":3312228,"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}]},"tmhm_learnset":"00143E06ECF31625","types":[0,0]},{"abilities":[50,51],"address":3301280,"base_stats":[85,76,64,90,45,55],"catch_rate":90,"evolutions":[],"friendship":70,"id":162,"learnset":{"address":3312254,"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}]},"tmhm_learnset":"00B43E06EDF37625","types":[0,0]},{"abilities":[15,51],"address":3301308,"base_stats":[60,30,30,50,36,56],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":164}],"friendship":70,"id":163,"learnset":{"address":3312280,"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}]},"tmhm_learnset":"00487E81B4130620","types":[0,2]},{"abilities":[15,51],"address":3301336,"base_stats":[100,50,50,70,76,96],"catch_rate":90,"evolutions":[],"friendship":70,"id":164,"learnset":{"address":3312304,"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}]},"tmhm_learnset":"00487E81B4134620","types":[0,2]},{"abilities":[68,48],"address":3301364,"base_stats":[40,20,30,55,40,80],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":166}],"friendship":70,"id":165,"learnset":{"address":3312328,"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}]},"tmhm_learnset":"00403E81CC3D8621","types":[6,2]},{"abilities":[68,48],"address":3301392,"base_stats":[55,35,50,85,55,110],"catch_rate":90,"evolutions":[],"friendship":70,"id":166,"learnset":{"address":3312356,"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}]},"tmhm_learnset":"00403E81CC3DC621","types":[6,2]},{"abilities":[68,15],"address":3301420,"base_stats":[40,60,40,30,40,40],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":22,"species":168}],"friendship":70,"id":167,"learnset":{"address":3312384,"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}]},"tmhm_learnset":"00403E089C350620","types":[6,3]},{"abilities":[68,15],"address":3301448,"base_stats":[70,90,70,40,60,60],"catch_rate":90,"evolutions":[],"friendship":70,"id":168,"learnset":{"address":3312410,"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}]},"tmhm_learnset":"00403E089C354620","types":[6,3]},{"abilities":[39,0],"address":3301476,"base_stats":[85,90,80,130,70,80],"catch_rate":90,"evolutions":[],"friendship":70,"id":169,"learnset":{"address":3312436,"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}]},"tmhm_learnset":"00097F88A4174E20","types":[3,2]},{"abilities":[10,35],"address":3301504,"base_stats":[75,38,38,67,56,56],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":27,"species":171}],"friendship":70,"id":170,"learnset":{"address":3312464,"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}]},"tmhm_learnset":"03501E0285933264","types":[11,13]},{"abilities":[10,35],"address":3301532,"base_stats":[125,58,58,67,76,76],"catch_rate":75,"evolutions":[],"friendship":70,"id":171,"learnset":{"address":3312490,"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}]},"tmhm_learnset":"03501E0285937264","types":[11,13]},{"abilities":[9,0],"address":3301560,"base_stats":[20,40,15,60,35,35],"catch_rate":190,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":25}],"friendship":70,"id":172,"learnset":{"address":3312516,"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}]},"tmhm_learnset":"00401E0285D38220","types":[13,13]},{"abilities":[56,0],"address":3301588,"base_stats":[50,25,28,15,45,55],"catch_rate":150,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":35}],"friendship":140,"id":173,"learnset":{"address":3312532,"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}]},"tmhm_learnset":"00401E27BC7B8624","types":[0,0]},{"abilities":[56,0],"address":3301616,"base_stats":[90,30,15,15,40,20],"catch_rate":170,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":39}],"friendship":70,"id":174,"learnset":{"address":3312548,"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}]},"tmhm_learnset":"00401E27BC3B8624","types":[0,0]},{"abilities":[55,32],"address":3301644,"base_stats":[35,20,65,20,40,65],"catch_rate":190,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":176}],"friendship":70,"id":175,"learnset":{"address":3312564,"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}]},"tmhm_learnset":"00C01E27B43B8624","types":[0,0]},{"abilities":[55,32],"address":3301672,"base_stats":[55,40,85,40,80,105],"catch_rate":75,"evolutions":[],"friendship":70,"id":176,"learnset":{"address":3312590,"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}]},"tmhm_learnset":"00C85EA7F43BC625","types":[0,2]},{"abilities":[28,48],"address":3301700,"base_stats":[40,50,45,70,70,45],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":25,"species":178}],"friendship":70,"id":177,"learnset":{"address":3312616,"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}]},"tmhm_learnset":"0040FE81B4378628","types":[14,2]},{"abilities":[28,48],"address":3301728,"base_stats":[65,75,70,95,95,70],"catch_rate":75,"evolutions":[],"friendship":70,"id":178,"learnset":{"address":3312638,"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}]},"tmhm_learnset":"0048FE81B437C628","types":[14,2]},{"abilities":[9,0],"address":3301756,"base_stats":[55,40,40,35,65,45],"catch_rate":235,"evolutions":[{"method":"LEVEL","param":15,"species":180}],"friendship":70,"id":179,"learnset":{"address":3312660,"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}]},"tmhm_learnset":"00401E0285D38220","types":[13,13]},{"abilities":[9,0],"address":3301784,"base_stats":[70,55,55,45,80,60],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":30,"species":181}],"friendship":70,"id":180,"learnset":{"address":3312680,"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}]},"tmhm_learnset":"00E01E02C5D38221","types":[13,13]},{"abilities":[9,0],"address":3301812,"base_stats":[90,75,75,55,115,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":181,"learnset":{"address":3312700,"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}]},"tmhm_learnset":"00E01E02C5D3C221","types":[13,13]},{"abilities":[34,0],"address":3301840,"base_stats":[75,80,85,50,90,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":182,"learnset":{"address":3312722,"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}]},"tmhm_learnset":"00441E08843D4720","types":[12,12]},{"abilities":[47,37],"address":3301868,"base_stats":[70,20,50,40,20,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":18,"species":184}],"friendship":70,"id":183,"learnset":{"address":3312736,"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}]},"tmhm_learnset":"03B01E00CC533265","types":[11,11]},{"abilities":[47,37],"address":3301896,"base_stats":[100,50,80,50,50,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":184,"learnset":{"address":3312762,"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}]},"tmhm_learnset":"03B01E00CC537265","types":[11,11]},{"abilities":[5,69],"address":3301924,"base_stats":[70,100,115,30,30,65],"catch_rate":65,"evolutions":[],"friendship":70,"id":185,"learnset":{"address":3312788,"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}]},"tmhm_learnset":"00A03E50CE110E29","types":[5,5]},{"abilities":[11,6],"address":3301952,"base_stats":[90,75,75,70,90,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":186,"learnset":{"address":3312812,"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}]},"tmhm_learnset":"03B03E00DE137265","types":[11,11]},{"abilities":[34,0],"address":3301980,"base_stats":[35,35,40,50,35,55],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":188}],"friendship":70,"id":187,"learnset":{"address":3312826,"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}]},"tmhm_learnset":"00401E8084350720","types":[12,2]},{"abilities":[34,0],"address":3302008,"base_stats":[55,45,50,80,45,65],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":27,"species":189}],"friendship":70,"id":188,"learnset":{"address":3312854,"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}]},"tmhm_learnset":"00401E8084350720","types":[12,2]},{"abilities":[34,0],"address":3302036,"base_stats":[75,55,70,110,55,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":189,"learnset":{"address":3312882,"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}]},"tmhm_learnset":"00401E8084354720","types":[12,2]},{"abilities":[50,53],"address":3302064,"base_stats":[55,70,55,85,40,55],"catch_rate":45,"evolutions":[],"friendship":70,"id":190,"learnset":{"address":3312910,"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}]},"tmhm_learnset":"00A53E82EDF30E25","types":[0,0]},{"abilities":[34,0],"address":3302092,"base_stats":[30,30,30,30,30,30],"catch_rate":235,"evolutions":[{"method":"ITEM","param":93,"species":192}],"friendship":70,"id":191,"learnset":{"address":3312936,"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}]},"tmhm_learnset":"00441E08843D8720","types":[12,12]},{"abilities":[34,0],"address":3302120,"base_stats":[75,75,55,30,105,85],"catch_rate":120,"evolutions":[],"friendship":70,"id":192,"learnset":{"address":3312960,"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}]},"tmhm_learnset":"00441E08843DC720","types":[12,12]},{"abilities":[3,14],"address":3302148,"base_stats":[65,65,45,95,75,45],"catch_rate":75,"evolutions":[],"friendship":70,"id":193,"learnset":{"address":3312984,"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}]},"tmhm_learnset":"00407E80B4350620","types":[6,2]},{"abilities":[6,11],"address":3302176,"base_stats":[55,45,45,15,25,25],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":195}],"friendship":70,"id":194,"learnset":{"address":3313010,"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}]},"tmhm_learnset":"03D01E188E533264","types":[11,4]},{"abilities":[6,11],"address":3302204,"base_stats":[95,85,85,35,65,65],"catch_rate":90,"evolutions":[],"friendship":70,"id":195,"learnset":{"address":3313036,"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}]},"tmhm_learnset":"03F01E58CE537265","types":[11,4]},{"abilities":[28,0],"address":3302232,"base_stats":[65,65,60,110,130,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":196,"learnset":{"address":3313062,"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}]},"tmhm_learnset":"00449E01BC53C628","types":[14,14]},{"abilities":[28,0],"address":3302260,"base_stats":[95,65,110,65,60,130],"catch_rate":45,"evolutions":[],"friendship":35,"id":197,"learnset":{"address":3313088,"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}]},"tmhm_learnset":"00451F00BC534E20","types":[17,17]},{"abilities":[15,0],"address":3302288,"base_stats":[60,85,42,91,85,42],"catch_rate":30,"evolutions":[],"friendship":35,"id":198,"learnset":{"address":3313114,"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}]},"tmhm_learnset":"00097F80A4130E28","types":[17,2]},{"abilities":[12,20],"address":3302316,"base_stats":[95,75,80,30,100,110],"catch_rate":70,"evolutions":[],"friendship":70,"id":199,"learnset":{"address":3313138,"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}]},"tmhm_learnset":"02F09E24FE5B766D","types":[11,14]},{"abilities":[26,0],"address":3302344,"base_stats":[60,60,60,85,85,85],"catch_rate":45,"evolutions":[],"friendship":35,"id":200,"learnset":{"address":3313162,"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}]},"tmhm_learnset":"0041BF82B5930E28","types":[7,7]},{"abilities":[26,0],"address":3302372,"base_stats":[48,72,48,48,72,48],"catch_rate":225,"evolutions":[],"friendship":70,"id":201,"learnset":{"address":3313188,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":237}]},"tmhm_learnset":"0000000000000000","types":[14,14]},{"abilities":[23,0],"address":3302400,"base_stats":[190,33,58,33,33,58],"catch_rate":45,"evolutions":[],"friendship":70,"id":202,"learnset":{"address":3313198,"moves":[{"level":1,"move_id":68},{"level":1,"move_id":243},{"level":1,"move_id":219},{"level":1,"move_id":194}]},"tmhm_learnset":"0000000000000000","types":[14,14]},{"abilities":[39,48],"address":3302428,"base_stats":[70,80,65,85,90,65],"catch_rate":60,"evolutions":[],"friendship":70,"id":203,"learnset":{"address":3313208,"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}]},"tmhm_learnset":"00E0BE03B7D38628","types":[0,14]},{"abilities":[5,0],"address":3302456,"base_stats":[50,65,90,15,35,35],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":31,"species":205}],"friendship":70,"id":204,"learnset":{"address":3313234,"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}]},"tmhm_learnset":"00A01E118E358620","types":[6,6]},{"abilities":[5,0],"address":3302484,"base_stats":[75,90,140,40,60,60],"catch_rate":75,"evolutions":[],"friendship":70,"id":205,"learnset":{"address":3313258,"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}]},"tmhm_learnset":"00A01E118E35C620","types":[6,8]},{"abilities":[32,50],"address":3302512,"base_stats":[100,70,70,45,65,65],"catch_rate":190,"evolutions":[],"friendship":70,"id":206,"learnset":{"address":3313282,"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}]},"tmhm_learnset":"00A03E66AFF3362C","types":[0,0]},{"abilities":[52,8],"address":3302540,"base_stats":[65,75,105,85,35,65],"catch_rate":60,"evolutions":[],"friendship":70,"id":207,"learnset":{"address":3313308,"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}]},"tmhm_learnset":"00A47ED88E530620","types":[4,2]},{"abilities":[69,5],"address":3302568,"base_stats":[75,85,200,30,55,65],"catch_rate":25,"evolutions":[],"friendship":70,"id":208,"learnset":{"address":3313332,"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}]},"tmhm_learnset":"00A41F508E514E30","types":[8,4]},{"abilities":[22,50],"address":3302596,"base_stats":[60,80,50,30,40,40],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":23,"species":210}],"friendship":70,"id":209,"learnset":{"address":3313360,"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}]},"tmhm_learnset":"00A23F2EEFB30EB5","types":[0,0]},{"abilities":[22,22],"address":3302624,"base_stats":[90,120,75,45,60,60],"catch_rate":75,"evolutions":[],"friendship":70,"id":210,"learnset":{"address":3313386,"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}]},"tmhm_learnset":"00A23F6EEFF34EB5","types":[0,0]},{"abilities":[38,33],"address":3302652,"base_stats":[65,95,75,85,55,55],"catch_rate":45,"evolutions":[],"friendship":70,"id":211,"learnset":{"address":3313412,"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}]},"tmhm_learnset":"03101E0AA4133264","types":[11,3]},{"abilities":[68,0],"address":3302680,"base_stats":[70,130,100,65,55,80],"catch_rate":25,"evolutions":[],"friendship":70,"id":212,"learnset":{"address":3313434,"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}]},"tmhm_learnset":"00A47E9084134620","types":[6,8]},{"abilities":[5,0],"address":3302708,"base_stats":[20,10,230,5,10,230],"catch_rate":190,"evolutions":[],"friendship":70,"id":213,"learnset":{"address":3313462,"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}]},"tmhm_learnset":"00E01E588E190620","types":[6,5]},{"abilities":[68,62],"address":3302736,"base_stats":[80,125,75,85,40,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":214,"learnset":{"address":3313482,"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}]},"tmhm_learnset":"00A43E40CE1346A1","types":[6,1]},{"abilities":[39,51],"address":3302764,"base_stats":[55,95,55,115,35,75],"catch_rate":60,"evolutions":[],"friendship":35,"id":215,"learnset":{"address":3313508,"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}]},"tmhm_learnset":"00B53F80EC533E69","types":[17,15]},{"abilities":[53,0],"address":3302792,"base_stats":[60,80,50,40,50,50],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":30,"species":217}],"friendship":70,"id":216,"learnset":{"address":3313536,"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}]},"tmhm_learnset":"00A43F80CE130EB1","types":[0,0]},{"abilities":[62,0],"address":3302820,"base_stats":[90,130,75,55,75,75],"catch_rate":60,"evolutions":[],"friendship":70,"id":217,"learnset":{"address":3313562,"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}]},"tmhm_learnset":"00A43FC0CE134EB1","types":[0,0]},{"abilities":[40,49],"address":3302848,"base_stats":[40,40,40,20,70,40],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":38,"species":219}],"friendship":70,"id":218,"learnset":{"address":3313588,"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}]},"tmhm_learnset":"00821E2584118620","types":[10,10]},{"abilities":[40,49],"address":3302876,"base_stats":[50,50,120,30,80,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":219,"learnset":{"address":3313612,"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}]},"tmhm_learnset":"00A21E758611C620","types":[10,5]},{"abilities":[12,0],"address":3302904,"base_stats":[50,50,40,50,30,30],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":33,"species":221}],"friendship":70,"id":220,"learnset":{"address":3313636,"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}]},"tmhm_learnset":"00A01E518E13B270","types":[15,4]},{"abilities":[12,0],"address":3302932,"base_stats":[100,100,80,50,60,60],"catch_rate":75,"evolutions":[],"friendship":70,"id":221,"learnset":{"address":3313658,"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}]},"tmhm_learnset":"00A01E518E13F270","types":[15,4]},{"abilities":[55,30],"address":3302960,"base_stats":[55,55,85,35,65,85],"catch_rate":60,"evolutions":[],"friendship":70,"id":222,"learnset":{"address":3313682,"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}]},"tmhm_learnset":"00B01E51BE1BB66C","types":[11,5]},{"abilities":[55,0],"address":3302988,"base_stats":[35,65,35,65,65,35],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":25,"species":224}],"friendship":70,"id":223,"learnset":{"address":3313710,"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}]},"tmhm_learnset":"03103E2494137624","types":[11,11]},{"abilities":[21,0],"address":3303016,"base_stats":[75,105,75,45,105,75],"catch_rate":75,"evolutions":[],"friendship":70,"id":224,"learnset":{"address":3313734,"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}]},"tmhm_learnset":"03103E2C94137724","types":[11,11]},{"abilities":[72,55],"address":3303044,"base_stats":[45,55,45,75,65,45],"catch_rate":45,"evolutions":[],"friendship":70,"id":225,"learnset":{"address":3313760,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":217}]},"tmhm_learnset":"00083E8084133265","types":[15,2]},{"abilities":[33,11],"address":3303072,"base_stats":[65,40,70,70,80,140],"catch_rate":25,"evolutions":[],"friendship":70,"id":226,"learnset":{"address":3313770,"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}]},"tmhm_learnset":"03101E8086133264","types":[11,2]},{"abilities":[51,5],"address":3303100,"base_stats":[65,80,140,70,40,70],"catch_rate":25,"evolutions":[],"friendship":70,"id":227,"learnset":{"address":3313794,"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}]},"tmhm_learnset":"008C7F9084110E30","types":[8,2]},{"abilities":[48,18],"address":3303128,"base_stats":[45,60,30,65,80,50],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":24,"species":229}],"friendship":35,"id":228,"learnset":{"address":3313820,"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}]},"tmhm_learnset":"00833F2CA4710E30","types":[17,10]},{"abilities":[48,18],"address":3303156,"base_stats":[75,90,50,95,110,80],"catch_rate":45,"evolutions":[],"friendship":35,"id":229,"learnset":{"address":3313846,"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}]},"tmhm_learnset":"00A33F2CA4714E30","types":[17,10]},{"abilities":[33,0],"address":3303184,"base_stats":[75,95,95,85,95,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":230,"learnset":{"address":3313872,"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}]},"tmhm_learnset":"03101E0084137264","types":[11,16]},{"abilities":[53,0],"address":3303212,"base_stats":[90,60,60,40,40,40],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":25,"species":232}],"friendship":70,"id":231,"learnset":{"address":3313896,"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}]},"tmhm_learnset":"00A01E5086510630","types":[4,4]},{"abilities":[5,0],"address":3303240,"base_stats":[90,120,120,50,60,60],"catch_rate":60,"evolutions":[],"friendship":70,"id":232,"learnset":{"address":3313918,"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}]},"tmhm_learnset":"00A01E5086514630","types":[4,4]},{"abilities":[36,0],"address":3303268,"base_stats":[85,80,90,60,105,95],"catch_rate":45,"evolutions":[],"friendship":70,"id":233,"learnset":{"address":3313940,"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}]},"tmhm_learnset":"00402E82B5F37620","types":[0,0]},{"abilities":[22,0],"address":3303296,"base_stats":[73,95,62,85,85,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":234,"learnset":{"address":3313966,"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}]},"tmhm_learnset":"0040BE03B7F38638","types":[0,0]},{"abilities":[20,0],"address":3303324,"base_stats":[55,20,35,75,20,45],"catch_rate":45,"evolutions":[],"friendship":70,"id":235,"learnset":{"address":3313992,"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}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[62,0],"address":3303352,"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":{"address":3314020,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"00A03E00C61306A0","types":[1,1]},{"abilities":[22,0],"address":3303380,"base_stats":[50,95,95,70,35,110],"catch_rate":45,"evolutions":[],"friendship":70,"id":237,"learnset":{"address":3314030,"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}]},"tmhm_learnset":"00A03E10CE1306A0","types":[1,1]},{"abilities":[12,0],"address":3303408,"base_stats":[45,30,15,65,85,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":124}],"friendship":70,"id":238,"learnset":{"address":3314058,"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}]},"tmhm_learnset":"0040BE01B413B26C","types":[15,14]},{"abilities":[9,0],"address":3303436,"base_stats":[45,63,37,95,65,55],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":125}],"friendship":70,"id":239,"learnset":{"address":3314086,"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}]},"tmhm_learnset":"00C03E02D5938221","types":[13,13]},{"abilities":[49,0],"address":3303464,"base_stats":[45,75,37,83,70,55],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":126}],"friendship":70,"id":240,"learnset":{"address":3314108,"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}]},"tmhm_learnset":"00803E24D4510621","types":[10,10]},{"abilities":[47,0],"address":3303492,"base_stats":[95,80,105,100,40,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":241,"learnset":{"address":3314134,"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}]},"tmhm_learnset":"00B01E52E7F37625","types":[0,0]},{"abilities":[30,32],"address":3303520,"base_stats":[255,10,10,55,75,135],"catch_rate":30,"evolutions":[],"friendship":140,"id":242,"learnset":{"address":3314160,"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}]},"tmhm_learnset":"00E19E76F7FBF66D","types":[0,0]},{"abilities":[46,0],"address":3303548,"base_stats":[90,85,75,115,115,100],"catch_rate":3,"evolutions":[],"friendship":35,"id":243,"learnset":{"address":3314190,"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}]},"tmhm_learnset":"00E40E138DD34638","types":[13,13]},{"abilities":[46,0],"address":3303576,"base_stats":[115,115,85,100,90,75],"catch_rate":3,"evolutions":[],"friendship":35,"id":244,"learnset":{"address":3314216,"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}]},"tmhm_learnset":"00E40E358C734638","types":[10,10]},{"abilities":[46,0],"address":3303604,"base_stats":[100,75,115,85,90,115],"catch_rate":3,"evolutions":[],"friendship":35,"id":245,"learnset":{"address":3314242,"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}]},"tmhm_learnset":"03940E118C53767C","types":[11,11]},{"abilities":[62,0],"address":3303632,"base_stats":[50,64,50,41,45,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":247}],"friendship":35,"id":246,"learnset":{"address":3314268,"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}]},"tmhm_learnset":"00801F10CE134E20","types":[5,4]},{"abilities":[61,0],"address":3303660,"base_stats":[70,84,70,51,65,70],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":55,"species":248}],"friendship":35,"id":247,"learnset":{"address":3314294,"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}]},"tmhm_learnset":"00801F10CE134E20","types":[5,4]},{"abilities":[45,0],"address":3303688,"base_stats":[100,134,110,61,95,100],"catch_rate":45,"evolutions":[],"friendship":35,"id":248,"learnset":{"address":3314320,"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}]},"tmhm_learnset":"00B41FF6CFD37E37","types":[5,17]},{"abilities":[46,0],"address":3303716,"base_stats":[106,90,130,110,90,154],"catch_rate":3,"evolutions":[],"friendship":0,"id":249,"learnset":{"address":3314346,"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}]},"tmhm_learnset":"03B8CE93B7DFF67C","types":[14,2]},{"abilities":[46,0],"address":3303744,"base_stats":[106,130,90,90,110,154],"catch_rate":3,"evolutions":[],"friendship":0,"id":250,"learnset":{"address":3314374,"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}]},"tmhm_learnset":"00EA4EB7B7BFC638","types":[10,2]},{"abilities":[30,0],"address":3303772,"base_stats":[100,100,100,100,100,100],"catch_rate":45,"evolutions":[],"friendship":100,"id":251,"learnset":{"address":3314402,"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}]},"tmhm_learnset":"00448E93B43FC62C","types":[14,12]},{"abilities":[0,0],"address":3303800,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":252,"learnset":{"address":3314422,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3303828,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":253,"learnset":{"address":3314432,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3303856,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":254,"learnset":{"address":3314442,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3303884,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":255,"learnset":{"address":3314452,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3303912,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":256,"learnset":{"address":3314462,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3303940,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":257,"learnset":{"address":3314472,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3303968,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":258,"learnset":{"address":3314482,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3303996,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":259,"learnset":{"address":3314492,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304024,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":260,"learnset":{"address":3314502,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304052,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":261,"learnset":{"address":3314512,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304080,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":262,"learnset":{"address":3314522,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304108,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":263,"learnset":{"address":3314532,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304136,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":264,"learnset":{"address":3314542,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304164,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":265,"learnset":{"address":3314552,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304192,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":266,"learnset":{"address":3314562,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304220,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":267,"learnset":{"address":3314572,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304248,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":268,"learnset":{"address":3314582,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304276,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":269,"learnset":{"address":3314592,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304304,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":270,"learnset":{"address":3314602,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304332,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":271,"learnset":{"address":3314612,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304360,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":272,"learnset":{"address":3314622,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304388,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":273,"learnset":{"address":3314632,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304416,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":274,"learnset":{"address":3314642,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304444,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":275,"learnset":{"address":3314652,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[0,0],"address":3304472,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":276,"learnset":{"address":3314662,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":33}]},"tmhm_learnset":"0000000000000000","types":[0,0]},{"abilities":[65,0],"address":3304500,"base_stats":[40,45,35,70,65,55],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":278}],"friendship":70,"id":277,"learnset":{"address":3314672,"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}]},"tmhm_learnset":"00E41EC0CC7D0721","types":[12,12]},{"abilities":[65,0],"address":3304528,"base_stats":[50,65,45,95,85,65],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":279}],"friendship":70,"id":278,"learnset":{"address":3314700,"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}]},"tmhm_learnset":"00E41EC0CC7D0721","types":[12,12]},{"abilities":[65,0],"address":3304556,"base_stats":[70,85,65,120,105,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":279,"learnset":{"address":3314730,"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}]},"tmhm_learnset":"00E41EC0CE7D4733","types":[12,12]},{"abilities":[66,0],"address":3304584,"base_stats":[45,60,40,45,70,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":281}],"friendship":70,"id":280,"learnset":{"address":3314760,"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}]},"tmhm_learnset":"00A61EE48C110620","types":[10,10]},{"abilities":[66,0],"address":3304612,"base_stats":[60,85,60,55,85,60],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":282}],"friendship":70,"id":281,"learnset":{"address":3314788,"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}]},"tmhm_learnset":"00A61EE4CC1106A1","types":[10,1]},{"abilities":[66,0],"address":3304640,"base_stats":[80,120,70,80,110,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":282,"learnset":{"address":3314818,"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}]},"tmhm_learnset":"00A61EE4CE1146B1","types":[10,1]},{"abilities":[67,0],"address":3304668,"base_stats":[50,70,50,40,50,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":16,"species":284}],"friendship":70,"id":283,"learnset":{"address":3314852,"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}]},"tmhm_learnset":"03B01E408C533264","types":[11,11]},{"abilities":[67,0],"address":3304696,"base_stats":[70,85,70,50,60,70],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":36,"species":285}],"friendship":70,"id":284,"learnset":{"address":3314882,"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}]},"tmhm_learnset":"03B01E408E533264","types":[11,4]},{"abilities":[67,0],"address":3304724,"base_stats":[100,110,90,60,85,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":285,"learnset":{"address":3314914,"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}]},"tmhm_learnset":"03B01E40CE537275","types":[11,4]},{"abilities":[50,0],"address":3304752,"base_stats":[35,55,35,35,30,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":287}],"friendship":70,"id":286,"learnset":{"address":3314946,"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}]},"tmhm_learnset":"00813F00AC530E30","types":[17,17]},{"abilities":[22,0],"address":3304780,"base_stats":[70,90,70,70,60,60],"catch_rate":127,"evolutions":[],"friendship":70,"id":287,"learnset":{"address":3314978,"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}]},"tmhm_learnset":"00A13F00AC534E30","types":[17,17]},{"abilities":[53,0],"address":3304808,"base_stats":[38,30,41,60,30,41],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":20,"species":289}],"friendship":70,"id":288,"learnset":{"address":3315010,"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}]},"tmhm_learnset":"00943E02ADD33624","types":[0,0]},{"abilities":[53,0],"address":3304836,"base_stats":[78,70,61,100,50,61],"catch_rate":90,"evolutions":[],"friendship":70,"id":289,"learnset":{"address":3315040,"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}]},"tmhm_learnset":"00B43E02ADD37634","types":[0,0]},{"abilities":[19,0],"address":3304864,"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":{"address":3315070,"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}]},"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[61,0],"address":3304892,"base_stats":[50,35,55,15,25,25],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":10,"species":292}],"friendship":70,"id":291,"learnset":{"address":3315082,"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}]},"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[68,0],"address":3304920,"base_stats":[60,70,50,65,90,50],"catch_rate":45,"evolutions":[],"friendship":70,"id":292,"learnset":{"address":3315094,"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}]},"tmhm_learnset":"00403E80B43D4620","types":[6,2]},{"abilities":[61,0],"address":3304948,"base_stats":[50,35,55,15,25,25],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":10,"species":294}],"friendship":70,"id":293,"learnset":{"address":3315122,"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}]},"tmhm_learnset":"0000000000000000","types":[6,6]},{"abilities":[19,0],"address":3304976,"base_stats":[60,50,70,65,50,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":294,"learnset":{"address":3315134,"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}]},"tmhm_learnset":"00403E88B435C620","types":[6,3]},{"abilities":[33,44],"address":3305004,"base_stats":[40,30,30,30,40,50],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":14,"species":296}],"friendship":70,"id":295,"learnset":{"address":3315162,"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}]},"tmhm_learnset":"00503E0084373764","types":[11,12]},{"abilities":[33,44],"address":3305032,"base_stats":[60,50,50,50,60,70],"catch_rate":120,"evolutions":[{"method":"ITEM","param":97,"species":297}],"friendship":70,"id":296,"learnset":{"address":3315184,"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}]},"tmhm_learnset":"03F03E00C4373764","types":[11,12]},{"abilities":[33,44],"address":3305060,"base_stats":[80,70,70,70,90,100],"catch_rate":45,"evolutions":[],"friendship":70,"id":297,"learnset":{"address":3315212,"moves":[{"level":1,"move_id":310},{"level":1,"move_id":45},{"level":1,"move_id":71},{"level":1,"move_id":267}]},"tmhm_learnset":"03F03E00C4377765","types":[11,12]},{"abilities":[34,48],"address":3305088,"base_stats":[40,40,50,30,30,30],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":14,"species":299}],"friendship":70,"id":298,"learnset":{"address":3315222,"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}]},"tmhm_learnset":"00C01E00AC350720","types":[12,12]},{"abilities":[34,48],"address":3305116,"base_stats":[70,70,40,60,60,40],"catch_rate":120,"evolutions":[{"method":"ITEM","param":98,"species":300}],"friendship":70,"id":299,"learnset":{"address":3315244,"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}]},"tmhm_learnset":"00E43F40EC354720","types":[12,17]},{"abilities":[34,48],"address":3305144,"base_stats":[90,100,60,80,90,60],"catch_rate":45,"evolutions":[],"friendship":70,"id":300,"learnset":{"address":3315272,"moves":[{"level":1,"move_id":1},{"level":1,"move_id":106},{"level":1,"move_id":74},{"level":1,"move_id":267}]},"tmhm_learnset":"00E43FC0EC354720","types":[12,17]},{"abilities":[14,0],"address":3305172,"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":{"address":3315282,"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}]},"tmhm_learnset":"00440E90AC350620","types":[6,4]},{"abilities":[3,0],"address":3305200,"base_stats":[61,90,45,160,50,50],"catch_rate":120,"evolutions":[],"friendship":70,"id":302,"learnset":{"address":3315308,"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}]},"tmhm_learnset":"00443E90AC354620","types":[6,2]},{"abilities":[25,0],"address":3305228,"base_stats":[1,90,45,40,30,30],"catch_rate":45,"evolutions":[],"friendship":70,"id":303,"learnset":{"address":3315340,"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}]},"tmhm_learnset":"00442E90AC354620","types":[6,7]},{"abilities":[62,0],"address":3305256,"base_stats":[40,55,30,85,30,30],"catch_rate":200,"evolutions":[{"method":"LEVEL","param":22,"species":305}],"friendship":70,"id":304,"learnset":{"address":3315366,"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}]},"tmhm_learnset":"00087E8084130620","types":[0,2]},{"abilities":[62,0],"address":3305284,"base_stats":[60,85,60,125,50,50],"catch_rate":45,"evolutions":[],"friendship":70,"id":305,"learnset":{"address":3315390,"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}]},"tmhm_learnset":"00087E8084134620","types":[0,2]},{"abilities":[27,0],"address":3305312,"base_stats":[60,40,60,35,40,60],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":23,"species":307}],"friendship":70,"id":306,"learnset":{"address":3315414,"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}]},"tmhm_learnset":"00411E08843D0720","types":[12,12]},{"abilities":[27,0],"address":3305340,"base_stats":[60,130,80,70,60,60],"catch_rate":90,"evolutions":[],"friendship":70,"id":307,"learnset":{"address":3315442,"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}]},"tmhm_learnset":"00E51E08C47D47A1","types":[12,1]},{"abilities":[20,0],"address":3305368,"base_stats":[60,60,60,60,60,60],"catch_rate":255,"evolutions":[],"friendship":70,"id":308,"learnset":{"address":3315472,"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}]},"tmhm_learnset":"00E1BE42FC1B062D","types":[0,0]},{"abilities":[51,0],"address":3305396,"base_stats":[40,30,30,85,55,30],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":25,"species":310}],"friendship":70,"id":309,"learnset":{"address":3315502,"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}]},"tmhm_learnset":"00087E8284133264","types":[11,2]},{"abilities":[51,0],"address":3305424,"base_stats":[60,50,100,65,85,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":310,"learnset":{"address":3315524,"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}]},"tmhm_learnset":"00187E8284137264","types":[11,2]},{"abilities":[33,0],"address":3305452,"base_stats":[40,30,32,65,50,52],"catch_rate":200,"evolutions":[{"method":"LEVEL","param":22,"species":312}],"friendship":70,"id":311,"learnset":{"address":3315552,"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}]},"tmhm_learnset":"00403E00A4373624","types":[6,11]},{"abilities":[22,0],"address":3305480,"base_stats":[70,60,62,60,80,82],"catch_rate":75,"evolutions":[],"friendship":70,"id":312,"learnset":{"address":3315576,"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}]},"tmhm_learnset":"00403E80A4377624","types":[6,2]},{"abilities":[41,12],"address":3305508,"base_stats":[130,70,35,60,70,35],"catch_rate":125,"evolutions":[{"method":"LEVEL","param":40,"species":314}],"friendship":70,"id":313,"learnset":{"address":3315602,"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}]},"tmhm_learnset":"03B01E4086133274","types":[11,11]},{"abilities":[41,12],"address":3305536,"base_stats":[170,90,45,60,90,45],"catch_rate":60,"evolutions":[],"friendship":70,"id":314,"learnset":{"address":3315634,"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}]},"tmhm_learnset":"03B01E4086137274","types":[11,11]},{"abilities":[56,0],"address":3305564,"base_stats":[50,45,45,50,35,35],"catch_rate":255,"evolutions":[{"method":"ITEM","param":94,"species":316}],"friendship":70,"id":315,"learnset":{"address":3315666,"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}]},"tmhm_learnset":"00401E02ADFB362C","types":[0,0]},{"abilities":[56,0],"address":3305592,"base_stats":[70,65,65,70,55,55],"catch_rate":60,"evolutions":[],"friendship":70,"id":316,"learnset":{"address":3315696,"moves":[{"level":1,"move_id":45},{"level":1,"move_id":213},{"level":1,"move_id":47},{"level":1,"move_id":3}]},"tmhm_learnset":"00E01E02ADFB762C","types":[0,0]},{"abilities":[16,0],"address":3305620,"base_stats":[60,90,70,40,60,120],"catch_rate":200,"evolutions":[],"friendship":70,"id":317,"learnset":{"address":3315706,"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}]},"tmhm_learnset":"00E5BEE6EDF33625","types":[0,0]},{"abilities":[26,0],"address":3305648,"base_stats":[40,40,55,55,40,70],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":36,"species":319}],"friendship":70,"id":318,"learnset":{"address":3315734,"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}]},"tmhm_learnset":"00408E51BE339620","types":[4,14]},{"abilities":[26,0],"address":3305676,"base_stats":[60,70,105,75,70,120],"catch_rate":90,"evolutions":[],"friendship":70,"id":319,"learnset":{"address":3315764,"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}]},"tmhm_learnset":"00E08E51BE33D620","types":[4,14]},{"abilities":[5,42],"address":3305704,"base_stats":[30,45,135,30,45,90],"catch_rate":255,"evolutions":[],"friendship":70,"id":320,"learnset":{"address":3315796,"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}]},"tmhm_learnset":"00A01F5287910E20","types":[5,5]},{"abilities":[73,0],"address":3305732,"base_stats":[70,85,140,20,85,70],"catch_rate":90,"evolutions":[],"friendship":70,"id":321,"learnset":{"address":3315824,"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}]},"tmhm_learnset":"00A21E2C84510620","types":[10,10]},{"abilities":[51,0],"address":3305760,"base_stats":[50,75,75,50,65,65],"catch_rate":45,"evolutions":[],"friendship":35,"id":322,"learnset":{"address":3315856,"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}]},"tmhm_learnset":"00C53FC2FC130E2D","types":[17,7]},{"abilities":[12,0],"address":3305788,"base_stats":[50,48,43,60,46,41],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":30,"species":324}],"friendship":70,"id":323,"learnset":{"address":3315888,"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}]},"tmhm_learnset":"03101E5086133264","types":[11,4]},{"abilities":[12,0],"address":3305816,"base_stats":[110,78,73,60,76,71],"catch_rate":75,"evolutions":[],"friendship":70,"id":324,"learnset":{"address":3315918,"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}]},"tmhm_learnset":"03B01E5086137264","types":[11,4]},{"abilities":[33,0],"address":3305844,"base_stats":[43,30,55,97,40,65],"catch_rate":225,"evolutions":[],"friendship":70,"id":325,"learnset":{"address":3315948,"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}]},"tmhm_learnset":"03101E00841B3264","types":[11,11]},{"abilities":[52,75],"address":3305872,"base_stats":[43,80,65,35,50,35],"catch_rate":205,"evolutions":[{"method":"LEVEL","param":30,"species":327}],"friendship":70,"id":326,"learnset":{"address":3315974,"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}]},"tmhm_learnset":"01B41EC8CC133A64","types":[11,11]},{"abilities":[52,75],"address":3305900,"base_stats":[63,120,85,55,90,55],"catch_rate":155,"evolutions":[],"friendship":70,"id":327,"learnset":{"address":3316004,"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}]},"tmhm_learnset":"03B41EC8CC137A64","types":[11,17]},{"abilities":[33,0],"address":3305928,"base_stats":[20,15,20,80,10,55],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":30,"species":329}],"friendship":70,"id":328,"learnset":{"address":3316034,"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}]},"tmhm_learnset":"03101E0084133264","types":[11,11]},{"abilities":[63,0],"address":3305956,"base_stats":[95,60,79,81,100,125],"catch_rate":60,"evolutions":[],"friendship":70,"id":329,"learnset":{"address":3316048,"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}]},"tmhm_learnset":"03101E00845B7264","types":[11,11]},{"abilities":[24,0],"address":3305984,"base_stats":[45,90,20,65,65,20],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":30,"species":331}],"friendship":35,"id":330,"learnset":{"address":3316078,"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}]},"tmhm_learnset":"03103F0084133A64","types":[11,17]},{"abilities":[24,0],"address":3306012,"base_stats":[70,120,40,95,95,40],"catch_rate":60,"evolutions":[],"friendship":35,"id":331,"learnset":{"address":3316104,"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}]},"tmhm_learnset":"03B03F4086137A74","types":[11,17]},{"abilities":[52,71],"address":3306040,"base_stats":[45,100,45,10,45,45],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":35,"species":333}],"friendship":70,"id":332,"learnset":{"address":3316134,"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}]},"tmhm_learnset":"00A01E508E354620","types":[4,4]},{"abilities":[26,26],"address":3306068,"base_stats":[50,70,50,70,50,50],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":45,"species":334}],"friendship":70,"id":333,"learnset":{"address":3316158,"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}]},"tmhm_learnset":"00A85E508E354620","types":[4,16]},{"abilities":[26,26],"address":3306096,"base_stats":[80,100,80,100,80,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":334,"learnset":{"address":3316184,"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}]},"tmhm_learnset":"00A85E748E754622","types":[4,16]},{"abilities":[47,62],"address":3306124,"base_stats":[72,60,30,25,20,30],"catch_rate":180,"evolutions":[{"method":"LEVEL","param":24,"species":336}],"friendship":70,"id":335,"learnset":{"address":3316210,"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}]},"tmhm_learnset":"00B01E40CE1306A1","types":[1,1]},{"abilities":[47,62],"address":3306152,"base_stats":[144,120,60,50,40,60],"catch_rate":200,"evolutions":[],"friendship":70,"id":336,"learnset":{"address":3316242,"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}]},"tmhm_learnset":"00B01E40CE1346A1","types":[1,1]},{"abilities":[9,31],"address":3306180,"base_stats":[40,45,40,65,65,40],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":26,"species":338}],"friendship":70,"id":337,"learnset":{"address":3316274,"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}]},"tmhm_learnset":"00603E0285D30230","types":[13,13]},{"abilities":[9,31],"address":3306208,"base_stats":[70,75,60,105,105,60],"catch_rate":45,"evolutions":[],"friendship":70,"id":338,"learnset":{"address":3316304,"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}]},"tmhm_learnset":"00603E0285D34230","types":[13,13]},{"abilities":[12,0],"address":3306236,"base_stats":[60,60,40,35,65,45],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":33,"species":340}],"friendship":70,"id":339,"learnset":{"address":3316334,"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}]},"tmhm_learnset":"00A21E748E110620","types":[10,4]},{"abilities":[40,0],"address":3306264,"base_stats":[70,100,70,40,105,75],"catch_rate":150,"evolutions":[],"friendship":70,"id":340,"learnset":{"address":3316360,"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}]},"tmhm_learnset":"00A21E748E114630","types":[10,4]},{"abilities":[47,0],"address":3306292,"base_stats":[70,40,50,25,55,50],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":32,"species":342}],"friendship":70,"id":341,"learnset":{"address":3316388,"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}]},"tmhm_learnset":"03B01E4086533264","types":[15,11]},{"abilities":[47,0],"address":3306320,"base_stats":[90,60,70,45,75,70],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":44,"species":343}],"friendship":70,"id":342,"learnset":{"address":3316416,"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}]},"tmhm_learnset":"03B01E4086533274","types":[15,11]},{"abilities":[47,0],"address":3306348,"base_stats":[110,80,90,65,95,90],"catch_rate":45,"evolutions":[],"friendship":70,"id":343,"learnset":{"address":3316444,"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}]},"tmhm_learnset":"03B01E4086537274","types":[15,11]},{"abilities":[8,0],"address":3306376,"base_stats":[50,85,40,35,85,40],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":32,"species":345}],"friendship":35,"id":344,"learnset":{"address":3316472,"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}]},"tmhm_learnset":"00441E1084350721","types":[12,12]},{"abilities":[8,0],"address":3306404,"base_stats":[70,115,60,55,115,60],"catch_rate":60,"evolutions":[],"friendship":35,"id":345,"learnset":{"address":3316504,"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}]},"tmhm_learnset":"00641E1084354721","types":[12,17]},{"abilities":[39,0],"address":3306432,"base_stats":[50,50,50,50,50,50],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":42,"species":347}],"friendship":70,"id":346,"learnset":{"address":3316536,"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}]},"tmhm_learnset":"00401E00A41BB264","types":[15,15]},{"abilities":[39,0],"address":3306460,"base_stats":[80,80,80,80,80,80],"catch_rate":75,"evolutions":[],"friendship":70,"id":347,"learnset":{"address":3316564,"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}]},"tmhm_learnset":"00401F00A61BFA64","types":[15,15]},{"abilities":[26,0],"address":3306488,"base_stats":[70,55,65,70,95,85],"catch_rate":45,"evolutions":[],"friendship":70,"id":348,"learnset":{"address":3316594,"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}]},"tmhm_learnset":"00408E51B61BD228","types":[5,14]},{"abilities":[26,0],"address":3306516,"base_stats":[70,95,85,70,55,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":349,"learnset":{"address":3316620,"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}]},"tmhm_learnset":"00428E75B639C628","types":[5,14]},{"abilities":[47,37],"address":3306544,"base_stats":[50,20,40,20,20,40],"catch_rate":150,"evolutions":[{"method":"FRIENDSHIP","param":0,"species":183}],"friendship":70,"id":350,"learnset":{"address":3316646,"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}]},"tmhm_learnset":"01101E0084533264","types":[0,0]},{"abilities":[47,20],"address":3306572,"base_stats":[60,25,35,60,70,80],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":32,"species":352}],"friendship":70,"id":351,"learnset":{"address":3316666,"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}]},"tmhm_learnset":"0041BF03B4538E28","types":[14,14]},{"abilities":[47,20],"address":3306600,"base_stats":[80,45,65,80,90,110],"catch_rate":60,"evolutions":[],"friendship":70,"id":352,"learnset":{"address":3316696,"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}]},"tmhm_learnset":"0041BF03B453CE29","types":[14,14]},{"abilities":[57,0],"address":3306628,"base_stats":[60,50,40,95,85,75],"catch_rate":200,"evolutions":[],"friendship":70,"id":353,"learnset":{"address":3316726,"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}]},"tmhm_learnset":"00401E0285D38220","types":[13,13]},{"abilities":[58,0],"address":3306656,"base_stats":[60,40,50,95,75,85],"catch_rate":200,"evolutions":[],"friendship":70,"id":354,"learnset":{"address":3316756,"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}]},"tmhm_learnset":"00401E0285D38220","types":[13,13]},{"abilities":[52,22],"address":3306684,"base_stats":[50,85,85,50,55,55],"catch_rate":45,"evolutions":[],"friendship":70,"id":355,"learnset":{"address":3316786,"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}]},"tmhm_learnset":"00A01F7CC4335E21","types":[8,8]},{"abilities":[74,0],"address":3306712,"base_stats":[30,40,55,60,40,55],"catch_rate":180,"evolutions":[{"method":"LEVEL","param":37,"species":357}],"friendship":70,"id":356,"learnset":{"address":3316818,"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}]},"tmhm_learnset":"00E01E41F41386A9","types":[1,14]},{"abilities":[74,0],"address":3306740,"base_stats":[60,60,75,80,60,75],"catch_rate":90,"evolutions":[],"friendship":70,"id":357,"learnset":{"address":3316848,"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}]},"tmhm_learnset":"00E01E41F413C6A9","types":[1,14]},{"abilities":[30,0],"address":3306768,"base_stats":[45,40,60,50,40,75],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":35,"species":359}],"friendship":70,"id":358,"learnset":{"address":3316884,"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}]},"tmhm_learnset":"00087E80843B1620","types":[0,2]},{"abilities":[30,0],"address":3306796,"base_stats":[75,70,90,80,70,105],"catch_rate":45,"evolutions":[],"friendship":70,"id":359,"learnset":{"address":3316912,"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}]},"tmhm_learnset":"00887EA4867B5632","types":[16,2]},{"abilities":[23,0],"address":3306824,"base_stats":[95,23,48,23,23,48],"catch_rate":125,"evolutions":[{"method":"LEVEL","param":15,"species":202}],"friendship":70,"id":360,"learnset":{"address":3316944,"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}]},"tmhm_learnset":"0000000000000000","types":[14,14]},{"abilities":[26,0],"address":3306852,"base_stats":[20,40,90,25,30,90],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":37,"species":362}],"friendship":35,"id":361,"learnset":{"address":3316962,"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}]},"tmhm_learnset":"0041BF00B4133E28","types":[7,7]},{"abilities":[46,0],"address":3306880,"base_stats":[40,70,130,25,60,130],"catch_rate":90,"evolutions":[],"friendship":35,"id":362,"learnset":{"address":3316990,"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}]},"tmhm_learnset":"00E1BF40B6137E29","types":[7,7]},{"abilities":[30,38],"address":3306908,"base_stats":[50,60,45,65,100,80],"catch_rate":150,"evolutions":[],"friendship":70,"id":363,"learnset":{"address":3317020,"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}]},"tmhm_learnset":"00441E08A4350720","types":[12,3]},{"abilities":[54,0],"address":3306936,"base_stats":[60,60,60,30,35,35],"catch_rate":255,"evolutions":[{"method":"LEVEL","param":18,"species":365}],"friendship":70,"id":364,"learnset":{"address":3317058,"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}]},"tmhm_learnset":"00A41EA6E5B336A5","types":[0,0]},{"abilities":[72,0],"address":3306964,"base_stats":[80,80,80,90,55,55],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":36,"species":366}],"friendship":70,"id":365,"learnset":{"address":3317082,"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}]},"tmhm_learnset":"00A41EA6E7B33EB5","types":[0,0]},{"abilities":[54,0],"address":3306992,"base_stats":[150,160,100,100,95,65],"catch_rate":45,"evolutions":[],"friendship":70,"id":366,"learnset":{"address":3317108,"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}]},"tmhm_learnset":"00A41EA6E7B37EB5","types":[0,0]},{"abilities":[64,60],"address":3307020,"base_stats":[70,43,53,40,43,53],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":26,"species":368}],"friendship":70,"id":367,"learnset":{"address":3317134,"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}]},"tmhm_learnset":"00A11E0AA4371724","types":[3,3]},{"abilities":[64,60],"address":3307048,"base_stats":[100,73,83,55,73,83],"catch_rate":75,"evolutions":[],"friendship":70,"id":368,"learnset":{"address":3317164,"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}]},"tmhm_learnset":"00A11E0AA4375724","types":[3,3]},{"abilities":[34,0],"address":3307076,"base_stats":[99,68,83,51,72,87],"catch_rate":200,"evolutions":[],"friendship":70,"id":369,"learnset":{"address":3317196,"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}]},"tmhm_learnset":"00EC5E80863D4730","types":[12,2]},{"abilities":[43,0],"address":3307104,"base_stats":[64,51,23,28,51,23],"catch_rate":190,"evolutions":[{"method":"LEVEL","param":20,"species":371}],"friendship":70,"id":370,"learnset":{"address":3317224,"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}]},"tmhm_learnset":"00001E26A4333634","types":[0,0]},{"abilities":[43,0],"address":3307132,"base_stats":[84,71,43,48,71,43],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":40,"species":372}],"friendship":70,"id":371,"learnset":{"address":3317254,"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}]},"tmhm_learnset":"00A21F26E6333E34","types":[0,0]},{"abilities":[43,0],"address":3307160,"base_stats":[104,91,63,68,91,63],"catch_rate":45,"evolutions":[],"friendship":70,"id":372,"learnset":{"address":3317284,"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}]},"tmhm_learnset":"00A21F26E6337E34","types":[0,0]},{"abilities":[75,0],"address":3307188,"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":{"address":3317316,"moves":[{"level":1,"move_id":128},{"level":1,"move_id":55},{"level":1,"move_id":250},{"level":1,"move_id":334}]},"tmhm_learnset":"03101E0084133264","types":[11,11]},{"abilities":[33,0],"address":3307216,"base_stats":[55,104,105,52,94,75],"catch_rate":60,"evolutions":[],"friendship":70,"id":374,"learnset":{"address":3317326,"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}]},"tmhm_learnset":"03111E4084137264","types":[11,11]},{"abilities":[33,0],"address":3307244,"base_stats":[55,84,105,52,114,75],"catch_rate":60,"evolutions":[],"friendship":70,"id":375,"learnset":{"address":3317350,"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}]},"tmhm_learnset":"03101E00B41B7264","types":[11,11]},{"abilities":[46,0],"address":3307272,"base_stats":[65,130,60,75,75,60],"catch_rate":30,"evolutions":[],"friendship":35,"id":376,"learnset":{"address":3317374,"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}]},"tmhm_learnset":"00E53FB6A5D37E6C","types":[17,17]},{"abilities":[15,0],"address":3307300,"base_stats":[44,75,35,45,63,33],"catch_rate":225,"evolutions":[{"method":"LEVEL","param":37,"species":378}],"friendship":35,"id":377,"learnset":{"address":3317404,"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}]},"tmhm_learnset":"0041BF02B5930E28","types":[7,7]},{"abilities":[15,0],"address":3307328,"base_stats":[64,115,65,65,83,63],"catch_rate":45,"evolutions":[],"friendship":35,"id":378,"learnset":{"address":3317432,"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}]},"tmhm_learnset":"0041BF02B5934E28","types":[7,7]},{"abilities":[61,0],"address":3307356,"base_stats":[73,100,60,65,100,60],"catch_rate":90,"evolutions":[],"friendship":70,"id":379,"learnset":{"address":3317460,"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}]},"tmhm_learnset":"00A13E0C8E570E20","types":[3,3]},{"abilities":[17,0],"address":3307384,"base_stats":[73,115,60,90,60,60],"catch_rate":90,"evolutions":[],"friendship":70,"id":380,"learnset":{"address":3317488,"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}]},"tmhm_learnset":"00A03EA6EDF73E35","types":[0,0]},{"abilities":[33,69],"address":3307412,"base_stats":[100,90,130,55,45,65],"catch_rate":25,"evolutions":[],"friendship":70,"id":381,"learnset":{"address":3317518,"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}]},"tmhm_learnset":"03901E50861B726C","types":[11,5]},{"abilities":[5,69],"address":3307440,"base_stats":[50,70,100,30,40,40],"catch_rate":180,"evolutions":[{"method":"LEVEL","param":32,"species":383}],"friendship":35,"id":382,"learnset":{"address":3317546,"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}]},"tmhm_learnset":"00A41ED28E530634","types":[8,5]},{"abilities":[5,69],"address":3307468,"base_stats":[60,90,140,40,50,50],"catch_rate":90,"evolutions":[{"method":"LEVEL","param":42,"species":384}],"friendship":35,"id":383,"learnset":{"address":3317578,"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}]},"tmhm_learnset":"00A41ED28E530634","types":[8,5]},{"abilities":[5,69],"address":3307496,"base_stats":[70,110,180,50,60,60],"catch_rate":45,"evolutions":[],"friendship":35,"id":384,"learnset":{"address":3317610,"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}]},"tmhm_learnset":"00B41EF6CFF37E37","types":[8,5]},{"abilities":[59,0],"address":3307524,"base_stats":[70,70,70,70,70,70],"catch_rate":45,"evolutions":[],"friendship":70,"id":385,"learnset":{"address":3317642,"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}]},"tmhm_learnset":"00403E36A5B33664","types":[0,0]},{"abilities":[35,68],"address":3307552,"base_stats":[65,73,55,85,47,75],"catch_rate":150,"evolutions":[],"friendship":70,"id":386,"learnset":{"address":3317666,"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}]},"tmhm_learnset":"00403E82E5B78625","types":[6,6]},{"abilities":[12,0],"address":3307580,"base_stats":[65,47,55,85,73,75],"catch_rate":150,"evolutions":[],"friendship":70,"id":387,"learnset":{"address":3317694,"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}]},"tmhm_learnset":"00403E82E5B78625","types":[6,6]},{"abilities":[21,0],"address":3307608,"base_stats":[66,41,77,23,61,87],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":40,"species":389}],"friendship":70,"id":388,"learnset":{"address":3317722,"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}]},"tmhm_learnset":"00001E1884350720","types":[5,12]},{"abilities":[21,0],"address":3307636,"base_stats":[86,81,97,43,81,107],"catch_rate":45,"evolutions":[],"friendship":70,"id":389,"learnset":{"address":3317750,"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}]},"tmhm_learnset":"00A01E5886354720","types":[5,12]},{"abilities":[4,0],"address":3307664,"base_stats":[45,95,50,75,40,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":40,"species":391}],"friendship":70,"id":390,"learnset":{"address":3317778,"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}]},"tmhm_learnset":"00841ED0CC110624","types":[5,6]},{"abilities":[4,0],"address":3307692,"base_stats":[75,125,100,45,70,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":391,"learnset":{"address":3317806,"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}]},"tmhm_learnset":"00A41ED0CE514624","types":[5,6]},{"abilities":[28,36],"address":3307720,"base_stats":[28,25,25,40,45,35],"catch_rate":235,"evolutions":[{"method":"LEVEL","param":20,"species":393}],"friendship":35,"id":392,"learnset":{"address":3317834,"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}]},"tmhm_learnset":"0041BF03B49B8E28","types":[14,14]},{"abilities":[28,36],"address":3307748,"base_stats":[38,35,35,50,65,55],"catch_rate":120,"evolutions":[{"method":"LEVEL","param":30,"species":394}],"friendship":35,"id":393,"learnset":{"address":3317862,"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}]},"tmhm_learnset":"0041BF03B49B8E28","types":[14,14]},{"abilities":[28,36],"address":3307776,"base_stats":[68,65,65,80,125,115],"catch_rate":45,"evolutions":[],"friendship":35,"id":394,"learnset":{"address":3317890,"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}]},"tmhm_learnset":"0041BF03B49BCE28","types":[14,14]},{"abilities":[69,0],"address":3307804,"base_stats":[45,75,60,50,40,30],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":30,"species":396}],"friendship":35,"id":395,"learnset":{"address":3317918,"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}]},"tmhm_learnset":"00A41EE4C4130632","types":[16,16]},{"abilities":[69,0],"address":3307832,"base_stats":[65,95,100,50,60,50],"catch_rate":45,"evolutions":[{"method":"LEVEL","param":50,"species":397}],"friendship":35,"id":396,"learnset":{"address":3317948,"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}]},"tmhm_learnset":"00A41EE4C4130632","types":[16,16]},{"abilities":[22,0],"address":3307860,"base_stats":[95,135,80,100,110,80],"catch_rate":45,"evolutions":[],"friendship":35,"id":397,"learnset":{"address":3317980,"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}]},"tmhm_learnset":"00AC5EE4C6534632","types":[16,2]},{"abilities":[29,0],"address":3307888,"base_stats":[40,55,80,30,35,60],"catch_rate":3,"evolutions":[{"method":"LEVEL","param":20,"species":399}],"friendship":35,"id":398,"learnset":{"address":3318014,"moves":[{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":0},{"level":1,"move_id":36}]},"tmhm_learnset":"0000000000000000","types":[8,14]},{"abilities":[29,0],"address":3307916,"base_stats":[60,75,100,50,55,80],"catch_rate":3,"evolutions":[{"method":"LEVEL","param":45,"species":400}],"friendship":35,"id":399,"learnset":{"address":3318024,"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}]},"tmhm_learnset":"00E40ED9F613C620","types":[8,14]},{"abilities":[29,0],"address":3307944,"base_stats":[80,135,130,70,95,90],"catch_rate":3,"evolutions":[],"friendship":35,"id":400,"learnset":{"address":3318052,"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}]},"tmhm_learnset":"00E40ED9F613C620","types":[8,14]},{"abilities":[29,0],"address":3307972,"base_stats":[80,100,200,50,50,100],"catch_rate":3,"evolutions":[],"friendship":35,"id":401,"learnset":{"address":3318080,"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}]},"tmhm_learnset":"00A00E52CF994621","types":[5,5]},{"abilities":[29,0],"address":3308000,"base_stats":[80,50,100,50,100,200],"catch_rate":3,"evolutions":[],"friendship":35,"id":402,"learnset":{"address":3318106,"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}]},"tmhm_learnset":"00A00E02C79B7261","types":[15,15]},{"abilities":[29,0],"address":3308028,"base_stats":[80,75,150,50,75,150],"catch_rate":3,"evolutions":[],"friendship":35,"id":403,"learnset":{"address":3318132,"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}]},"tmhm_learnset":"00A00ED2C79B4621","types":[8,8]},{"abilities":[2,0],"address":3308056,"base_stats":[100,100,90,90,150,140],"catch_rate":5,"evolutions":[],"friendship":0,"id":404,"learnset":{"address":3318160,"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}]},"tmhm_learnset":"03B00E42C79B727C","types":[11,11]},{"abilities":[70,0],"address":3308084,"base_stats":[100,150,140,90,100,90],"catch_rate":5,"evolutions":[],"friendship":0,"id":405,"learnset":{"address":3318190,"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}]},"tmhm_learnset":"00A60EF6CFF946B2","types":[4,4]},{"abilities":[77,0],"address":3308112,"base_stats":[105,150,90,95,150,90],"catch_rate":3,"evolutions":[],"friendship":0,"id":406,"learnset":{"address":3318220,"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}]},"tmhm_learnset":"03BA0EB6C7F376B6","types":[16,2]},{"abilities":[26,0],"address":3308140,"base_stats":[80,80,90,110,110,130],"catch_rate":3,"evolutions":[],"friendship":90,"id":407,"learnset":{"address":3318250,"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}]},"tmhm_learnset":"035C5E93B7BBD63E","types":[16,14]},{"abilities":[26,0],"address":3308168,"base_stats":[80,90,80,110,130,110],"catch_rate":3,"evolutions":[],"friendship":90,"id":408,"learnset":{"address":3318280,"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}]},"tmhm_learnset":"035C5E93B7BBD63E","types":[16,14]},{"abilities":[32,0],"address":3308196,"base_stats":[100,100,100,100,100,100],"catch_rate":3,"evolutions":[],"friendship":100,"id":409,"learnset":{"address":3318310,"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}]},"tmhm_learnset":"00408E93B59BC62C","types":[8,14]},{"abilities":[46,0],"address":3308224,"base_stats":[50,150,50,150,150,50],"catch_rate":3,"evolutions":[],"friendship":0,"id":410,"learnset":{"address":3318340,"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}]},"tmhm_learnset":"00E58FC3F5BBDE2D","types":[14,14]},{"abilities":[26,0],"address":3308252,"base_stats":[65,50,70,65,95,80],"catch_rate":45,"evolutions":[],"friendship":70,"id":411,"learnset":{"address":3318370,"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}]},"tmhm_learnset":"00419F03B41B8E28","types":[14,14]}],"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":[{"address":3230072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[],"party_address":4160749568,"script_address":0},{"address":3230112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":21,"species":74}],"party_address":3211124,"script_address":2304511},{"address":3230152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":286}],"party_address":3211132,"script_address":2321901},{"address":3230192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":41},{"level":31,"species":330}],"party_address":3211140,"script_address":2323326},{"address":3230232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":41}],"party_address":3211156,"script_address":2323373},{"address":3230272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":330}],"party_address":3211164,"script_address":2324386},{"address":3230312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":286}],"party_address":3211172,"script_address":2326808},{"address":3230352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":330}],"party_address":3211180,"script_address":2326839},{"address":3230392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":41}],"party_address":3211188,"script_address":2328040},{"address":3230432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":315},{"level":26,"species":286},{"level":26,"species":288},{"level":26,"species":295},{"level":26,"species":298},{"level":26,"species":304}],"party_address":3211196,"script_address":2314251},{"address":3230472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":9,"species":286}],"party_address":3211244,"script_address":0},{"address":3230512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":338},{"level":29,"species":300}],"party_address":3211252,"script_address":2067580},{"address":3230552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":310},{"level":30,"species":178}],"party_address":3211268,"script_address":2068523},{"address":3230592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":380},{"level":30,"species":379}],"party_address":3211284,"script_address":2068554},{"address":3230632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":330}],"party_address":3211300,"script_address":2328071},{"address":3230672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":130}],"party_address":3211308,"script_address":2069620},{"address":3230712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":11,"species":286}],"party_address":3211316,"script_address":0},{"address":3230752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":41},{"level":27,"species":286}],"party_address":3211324,"script_address":2570959},{"address":3230792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":286},{"level":27,"species":330}],"party_address":3211340,"script_address":2572093},{"address":3230832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":286},{"level":26,"species":41},{"level":26,"species":330}],"party_address":3211356,"script_address":2572124},{"address":3230872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":330}],"party_address":3211380,"script_address":2157889},{"address":3230912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":41},{"level":14,"species":330}],"party_address":3211388,"script_address":2157948},{"address":3230952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":339}],"party_address":3211404,"script_address":2254636},{"address":3230992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":41}],"party_address":3211412,"script_address":2317522},{"address":3231032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":330}],"party_address":3211420,"script_address":2317553},{"address":3231072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":286},{"level":30,"species":330}],"party_address":3211428,"script_address":2317584},{"address":3231112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":330}],"party_address":3211444,"script_address":2570990},{"address":3231152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":330}],"party_address":3211452,"script_address":2323414},{"address":3231192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":41}],"party_address":3211460,"script_address":2324427},{"address":3231232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":335},{"level":30,"species":67}],"party_address":3211468,"script_address":2068492},{"address":3231272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":287},{"level":34,"species":42}],"party_address":3211484,"script_address":2324250},{"address":3231312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":336}],"party_address":3211500,"script_address":2312702},{"address":3231352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":330},{"level":28,"species":287}],"party_address":3211508,"script_address":2572155},{"address":3231392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":331},{"level":37,"species":287}],"party_address":3211524,"script_address":2327156},{"address":3231432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":287},{"level":41,"species":169},{"level":43,"species":331}],"party_address":3211540,"script_address":2328478},{"address":3231472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":351}],"party_address":3211564,"script_address":2312671},{"address":3231512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":306},{"level":14,"species":363}],"party_address":3211572,"script_address":2026085},{"address":3231552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":363},{"level":14,"species":306},{"level":14,"species":363}],"party_address":3211588,"script_address":2058784},{"address":3231592,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":43,"moves":[94,0,0,0],"species":357},{"level":43,"moves":[29,89,0,0],"species":319}],"party_address":3211612,"script_address":2335547},{"address":3231632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":363},{"level":26,"species":44}],"party_address":3211644,"script_address":2068148},{"address":3231672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":306},{"level":26,"species":363}],"party_address":3211660,"script_address":0},{"address":3231712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":306},{"level":28,"species":44},{"level":28,"species":363}],"party_address":3211676,"script_address":0},{"address":3231752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":306},{"level":31,"species":44},{"level":31,"species":363}],"party_address":3211700,"script_address":0},{"address":3231792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":307},{"level":34,"species":44},{"level":34,"species":363}],"party_address":3211724,"script_address":0},{"address":3231832,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":23,"moves":[91,163,28,40],"species":28}],"party_address":3211748,"script_address":2046490},{"address":3231872,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3211764,"script_address":2065682},{"address":3231912,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":25,"moves":[91,163,28,40],"species":27},{"level":25,"moves":[91,163,28,40],"species":28}],"party_address":3211812,"script_address":2033540},{"address":3231952,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":27,"moves":[91,163,28,40],"species":28}],"party_address":3211844,"script_address":0},{"address":3231992,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":30,"moves":[91,163,28,40],"species":28}],"party_address":3211860,"script_address":0},{"address":3232032,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":33,"moves":[91,163,28,40],"species":28}],"party_address":3211876,"script_address":0},{"address":3232072,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":36,"moves":[91,163,28,40],"species":28}],"party_address":3211892,"script_address":0},{"address":3232112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":81},{"level":17,"species":370}],"party_address":3211908,"script_address":0},{"address":3232152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":81},{"level":27,"species":371}],"party_address":3211924,"script_address":0},{"address":3232192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":82},{"level":30,"species":371}],"party_address":3211940,"script_address":0},{"address":3232232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":82},{"level":33,"species":371}],"party_address":3211956,"script_address":0},{"address":3232272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":82},{"level":36,"species":371}],"party_address":3211972,"script_address":0},{"address":3232312,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":39,"moves":[49,86,63,85],"species":82},{"level":39,"moves":[54,23,48,48],"species":372}],"party_address":3211988,"script_address":0},{"address":3232352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":12,"species":350},{"level":12,"species":350}],"party_address":3212020,"script_address":2036011},{"address":3232392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":183}],"party_address":3212036,"script_address":2036121},{"address":3232432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":183}],"party_address":3212044,"script_address":2036152},{"address":3232472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":183},{"level":26,"species":183}],"party_address":3212052,"script_address":0},{"address":3232512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":183},{"level":29,"species":183}],"party_address":3212068,"script_address":0},{"address":3232552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":183},{"level":32,"species":183}],"party_address":3212084,"script_address":0},{"address":3232592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":184},{"level":35,"species":184}],"party_address":3212100,"script_address":0},{"address":3232632,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":13,"moves":[28,29,39,57],"species":288}],"party_address":3212116,"script_address":2035901},{"address":3232672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":12,"species":350},{"level":12,"species":183}],"party_address":3212132,"script_address":2544001},{"address":3232712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":183}],"party_address":3212148,"script_address":2339831},{"address":3232752,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":27,"moves":[28,42,39,57],"species":289}],"party_address":3212156,"script_address":0},{"address":3232792,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":30,"moves":[28,42,39,57],"species":289}],"party_address":3212172,"script_address":0},{"address":3232832,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":33,"moves":[28,42,39,57],"species":289}],"party_address":3212188,"script_address":0},{"address":3232872,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":36,"moves":[28,42,39,57],"species":289}],"party_address":3212204,"script_address":0},{"address":3232912,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":26,"moves":[98,97,17,0],"species":305}],"party_address":3212220,"script_address":2131164},{"address":3232952,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":26,"moves":[42,146,8,0],"species":308}],"party_address":3212236,"script_address":2131228},{"address":3232992,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":26,"moves":[47,68,247,0],"species":364}],"party_address":3212252,"script_address":2131292},{"address":3233032,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":26,"moves":[116,163,0,0],"species":365}],"party_address":3212268,"script_address":2131356},{"address":3233072,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3212284,"script_address":2068117},{"address":3233112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":44,"species":322},{"level":44,"species":357},{"level":44,"species":331}],"party_address":3212364,"script_address":2565920},{"address":3233152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":46,"species":355},{"level":46,"species":121}],"party_address":3212388,"script_address":2565982},{"address":3233192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":337},{"level":17,"species":313},{"level":17,"species":335}],"party_address":3212404,"script_address":2046693},{"address":3233232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":43,"species":345},{"level":43,"species":310}],"party_address":3212428,"script_address":2332685},{"address":3233272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":43,"species":82},{"level":43,"species":89}],"party_address":3212444,"script_address":2332716},{"address":3233312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":305},{"level":42,"species":355},{"level":42,"species":64}],"party_address":3212460,"script_address":2334375},{"address":3233352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":85},{"level":42,"species":64},{"level":42,"species":101},{"level":42,"species":300}],"party_address":3212484,"script_address":2335423},{"address":3233392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":317},{"level":42,"species":75},{"level":42,"species":314}],"party_address":3212516,"script_address":2335454},{"address":3233432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":337},{"level":26,"species":313},{"level":26,"species":335}],"party_address":3212540,"script_address":0},{"address":3233472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":338},{"level":29,"species":313},{"level":29,"species":335}],"party_address":3212564,"script_address":0},{"address":3233512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":338},{"level":32,"species":313},{"level":32,"species":335}],"party_address":3212588,"script_address":0},{"address":3233552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":338},{"level":35,"species":313},{"level":35,"species":336}],"party_address":3212612,"script_address":0},{"address":3233592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":75},{"level":33,"species":297}],"party_address":3212636,"script_address":2073950},{"address":3233632,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":26,"moves":[185,95,0,0],"species":316}],"party_address":3212652,"script_address":2131420},{"address":3233672,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":26,"moves":[111,38,247,0],"species":40}],"party_address":3212668,"script_address":2131484},{"address":3233712,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":26,"moves":[14,163,0,0],"species":380}],"party_address":3212684,"script_address":2131548},{"address":3233752,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3212700,"script_address":2068086},{"address":3233792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":383},{"level":45,"species":338}],"party_address":3212748,"script_address":2565951},{"address":3233832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":309},{"level":17,"species":339},{"level":17,"species":363}],"party_address":3212764,"script_address":2046803},{"address":3233872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":322}],"party_address":3212788,"script_address":2065651},{"address":3233912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":363}],"party_address":3212796,"script_address":2332747},{"address":3233952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":319}],"party_address":3212804,"script_address":2334406},{"address":3233992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":321},{"level":42,"species":357},{"level":42,"species":297}],"party_address":3212812,"script_address":2334437},{"address":3234032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":43,"species":227},{"level":43,"species":322}],"party_address":3212836,"script_address":2335485},{"address":3234072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":28},{"level":42,"species":38},{"level":42,"species":369}],"party_address":3212852,"script_address":2335516},{"address":3234112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":309},{"level":26,"species":339},{"level":26,"species":363}],"party_address":3212876,"script_address":0},{"address":3234152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":310},{"level":29,"species":339},{"level":29,"species":363}],"party_address":3212900,"script_address":0},{"address":3234192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":310},{"level":32,"species":339},{"level":32,"species":363}],"party_address":3212924,"script_address":0},{"address":3234232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":310},{"level":34,"species":340},{"level":34,"species":363}],"party_address":3212948,"script_address":0},{"address":3234272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":378},{"level":41,"species":348}],"party_address":3212972,"script_address":2564729},{"address":3234312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":361},{"level":30,"species":377}],"party_address":3212988,"script_address":2068461},{"address":3234352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":361},{"level":29,"species":377}],"party_address":3213004,"script_address":2067284},{"address":3234392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":322}],"party_address":3213020,"script_address":2315745},{"address":3234432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":377}],"party_address":3213028,"script_address":2315532},{"address":3234472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":322},{"level":31,"species":351}],"party_address":3213036,"script_address":0},{"address":3234512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":351},{"level":35,"species":322}],"party_address":3213052,"script_address":0},{"address":3234552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":40,"species":351},{"level":40,"species":322}],"party_address":3213068,"script_address":0},{"address":3234592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":361},{"level":42,"species":322},{"level":42,"species":352}],"party_address":3213084,"script_address":0},{"address":3234632,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":7,"species":288}],"party_address":3213108,"script_address":2030087},{"address":3234672,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":39,"moves":[213,186,175,96],"species":325},{"level":39,"moves":[213,219,36,96],"species":325}],"party_address":3213116,"script_address":2265894},{"address":3234712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":287},{"level":28,"species":287},{"level":30,"species":339}],"party_address":3213148,"script_address":2254717},{"address":3234752,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":11,"moves":[33,39,0,0],"species":288}],"party_address":3213172,"script_address":0},{"address":3234792,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":40,"species":119}],"party_address":3213188,"script_address":2265677},{"address":3234832,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":45,"species":363}],"party_address":3213196,"script_address":2361019},{"address":3234872,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":27,"species":289}],"party_address":3213204,"script_address":0},{"address":3234912,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":30,"species":289}],"party_address":3213212,"script_address":0},{"address":3234952,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":33,"species":289}],"party_address":3213220,"script_address":0},{"address":3234992,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":36,"moves":[154,44,60,28],"species":289}],"party_address":3213228,"script_address":0},{"address":3235032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":21,"species":183}],"party_address":3213244,"script_address":2304387},{"address":3235072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":21,"species":306}],"party_address":3213252,"script_address":2304418},{"address":3235112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":21,"species":339}],"party_address":3213260,"script_address":2304449},{"address":3235152,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":29,"moves":[20,122,154,185],"species":317},{"level":29,"moves":[86,103,137,242],"species":379}],"party_address":3213268,"script_address":2067377},{"address":3235192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":40,"species":118}],"party_address":3213300,"script_address":2265708},{"address":3235232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":40,"species":184}],"party_address":3213308,"script_address":2265739},{"address":3235272,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3213316,"script_address":2265770},{"address":3235312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":330},{"level":39,"species":331}],"party_address":3213364,"script_address":2265801},{"address":3235352,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":35,"moves":[20,122,154,185],"species":317},{"level":35,"moves":[86,103,137,242],"species":379}],"party_address":3213380,"script_address":0},{"address":3235392,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":38,"moves":[20,122,154,185],"species":317},{"level":38,"moves":[86,103,137,242],"species":379}],"party_address":3213412,"script_address":0},{"address":3235432,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":41,"moves":[20,122,154,185],"species":317},{"level":41,"moves":[86,103,137,242],"species":379}],"party_address":3213444,"script_address":0},{"address":3235472,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":44,"moves":[20,122,154,185],"species":317},{"level":44,"moves":[86,103,137,242],"species":379}],"party_address":3213476,"script_address":0},{"address":3235512,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":7,"species":288}],"party_address":3213508,"script_address":2029901},{"address":3235552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":324},{"level":33,"species":356}],"party_address":3213516,"script_address":2074012},{"address":3235592,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":45,"species":184}],"party_address":3213532,"script_address":2360988},{"address":3235632,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":27,"species":289}],"party_address":3213540,"script_address":0},{"address":3235672,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":30,"species":289}],"party_address":3213548,"script_address":0},{"address":3235712,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":33,"species":289}],"party_address":3213556,"script_address":0},{"address":3235752,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":36,"moves":[154,44,60,28],"species":289}],"party_address":3213564,"script_address":0},{"address":3235792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":382}],"party_address":3213580,"script_address":2051965},{"address":3235832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":313},{"level":25,"species":116}],"party_address":3213588,"script_address":2340108},{"address":3235872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":111}],"party_address":3213604,"script_address":2312578},{"address":3235912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":20,"species":339}],"party_address":3213612,"script_address":2304480},{"address":3235952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":383}],"party_address":3213620,"script_address":0},{"address":3235992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":383},{"level":29,"species":111}],"party_address":3213628,"script_address":0},{"address":3236032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":383},{"level":32,"species":111}],"party_address":3213644,"script_address":0},{"address":3236072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":384},{"level":35,"species":112}],"party_address":3213660,"script_address":0},{"address":3236112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":330}],"party_address":3213676,"script_address":2033571},{"address":3236152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":72}],"party_address":3213684,"script_address":2033602},{"address":3236192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":72},{"level":24,"species":72}],"party_address":3213692,"script_address":2034185},{"address":3236232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":72},{"level":24,"species":309},{"level":24,"species":72}],"party_address":3213708,"script_address":2034479},{"address":3236272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":330}],"party_address":3213732,"script_address":2034510},{"address":3236312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":73}],"party_address":3213740,"script_address":2034776},{"address":3236352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":330}],"party_address":3213748,"script_address":2034807},{"address":3236392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":72},{"level":25,"species":330}],"party_address":3213756,"script_address":2035777},{"address":3236432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":72},{"level":33,"species":309}],"party_address":3213772,"script_address":2069178},{"address":3236472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":330}],"party_address":3213788,"script_address":2069209},{"address":3236512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":73}],"party_address":3213796,"script_address":2069789},{"address":3236552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":116}],"party_address":3213804,"script_address":2069820},{"address":3236592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":130}],"party_address":3213812,"script_address":2070163},{"address":3236632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":330},{"level":31,"species":309},{"level":31,"species":330}],"party_address":3213820,"script_address":2070194},{"address":3236672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":130}],"party_address":3213844,"script_address":2073229},{"address":3236712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":310}],"party_address":3213852,"script_address":2073359},{"address":3236752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":309},{"level":33,"species":73}],"party_address":3213860,"script_address":2073390},{"address":3236792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":73},{"level":33,"species":313}],"party_address":3213876,"script_address":2073291},{"address":3236832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":331}],"party_address":3213892,"script_address":2073608},{"address":3236872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":342}],"party_address":3213900,"script_address":2073857},{"address":3236912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":341}],"party_address":3213908,"script_address":2073576},{"address":3236952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":130}],"party_address":3213916,"script_address":2074089},{"address":3236992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":72},{"level":33,"species":309},{"level":33,"species":73}],"party_address":3213924,"script_address":0},{"address":3237032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":72},{"level":33,"species":313}],"party_address":3213948,"script_address":2069381},{"address":3237072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":331}],"party_address":3213964,"script_address":0},{"address":3237112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":331}],"party_address":3213972,"script_address":0},{"address":3237152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":120},{"level":36,"species":331}],"party_address":3213980,"script_address":0},{"address":3237192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":121},{"level":39,"species":331}],"party_address":3213996,"script_address":0},{"address":3237232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":66}],"party_address":3214012,"script_address":2095275},{"address":3237272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":66},{"level":32,"species":67}],"party_address":3214020,"script_address":2074213},{"address":3237312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":336}],"party_address":3214036,"script_address":2073701},{"address":3237352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":66},{"level":28,"species":67}],"party_address":3214044,"script_address":2052921},{"address":3237392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":66}],"party_address":3214060,"script_address":2052952},{"address":3237432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":67}],"party_address":3214068,"script_address":0},{"address":3237472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":66},{"level":29,"species":67}],"party_address":3214076,"script_address":0},{"address":3237512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":66},{"level":31,"species":67},{"level":31,"species":67}],"party_address":3214092,"script_address":0},{"address":3237552,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":33,"species":66},{"level":33,"species":67},{"level":33,"species":67},{"level":33,"species":68}],"party_address":3214116,"script_address":0},{"address":3237592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":335},{"level":26,"species":67}],"party_address":3214148,"script_address":2557758},{"address":3237632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":66}],"party_address":3214164,"script_address":2046662},{"address":3237672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":336}],"party_address":3214172,"script_address":2315359},{"address":3237712,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":17,"moves":[98,86,209,43],"species":337},{"level":17,"moves":[12,95,103,0],"species":100}],"party_address":3214180,"script_address":2167608},{"address":3237752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":286},{"level":31,"species":41}],"party_address":3214212,"script_address":2323445},{"address":3237792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":330}],"party_address":3214228,"script_address":2324458},{"address":3237832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":100},{"level":17,"species":81}],"party_address":3214236,"script_address":2167639},{"address":3237872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":337},{"level":30,"species":371}],"party_address":3214252,"script_address":2068709},{"address":3237912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":81},{"level":15,"species":370}],"party_address":3214268,"script_address":2058956},{"address":3237952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":81},{"level":25,"species":370},{"level":25,"species":81}],"party_address":3214284,"script_address":0},{"address":3237992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":81},{"level":28,"species":371},{"level":28,"species":81}],"party_address":3214308,"script_address":0},{"address":3238032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":82},{"level":31,"species":371},{"level":31,"species":82}],"party_address":3214332,"script_address":0},{"address":3238072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":82},{"level":34,"species":372},{"level":34,"species":82}],"party_address":3214356,"script_address":0},{"address":3238112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":23,"species":339}],"party_address":3214380,"script_address":2103394},{"address":3238152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":22,"species":218},{"level":22,"species":218}],"party_address":3214388,"script_address":2103601},{"address":3238192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":23,"species":339}],"party_address":3214404,"script_address":2103446},{"address":3238232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":23,"species":218}],"party_address":3214412,"script_address":2103570},{"address":3238272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":23,"species":218}],"party_address":3214420,"script_address":2103477},{"address":3238312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":218},{"level":18,"species":309}],"party_address":3214428,"script_address":2052075},{"address":3238352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":218},{"level":26,"species":309}],"party_address":3214444,"script_address":0},{"address":3238392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":218},{"level":29,"species":310}],"party_address":3214460,"script_address":0},{"address":3238432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":218},{"level":32,"species":310}],"party_address":3214476,"script_address":0},{"address":3238472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":219},{"level":35,"species":310}],"party_address":3214492,"script_address":0},{"address":3238512,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":23,"moves":[91,28,40,163],"species":27}],"party_address":3214508,"script_address":2046366},{"address":3238552,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3214524,"script_address":2046428},{"address":3238592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":299}],"party_address":3214572,"script_address":2049829},{"address":3238632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":27},{"level":18,"species":299}],"party_address":3214580,"script_address":2051903},{"address":3238672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":317}],"party_address":3214596,"script_address":2557005},{"address":3238712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":20,"species":288},{"level":20,"species":304}],"party_address":3214604,"script_address":2310199},{"address":3238752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":21,"species":306}],"party_address":3214620,"script_address":2310337},{"address":3238792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":27}],"party_address":3214628,"script_address":2046600},{"address":3238832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":288},{"level":26,"species":304}],"party_address":3214636,"script_address":0},{"address":3238872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":289},{"level":29,"species":305}],"party_address":3214652,"script_address":0},{"address":3238912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":27},{"level":31,"species":305},{"level":31,"species":289}],"party_address":3214668,"script_address":0},{"address":3238952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":305},{"level":34,"species":28},{"level":34,"species":289}],"party_address":3214692,"script_address":0},{"address":3238992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":311}],"party_address":3214716,"script_address":2061044},{"address":3239032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":290},{"level":24,"species":291},{"level":24,"species":292}],"party_address":3214724,"script_address":2061075},{"address":3239072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":290},{"level":27,"species":293},{"level":27,"species":294}],"party_address":3214748,"script_address":2061106},{"address":3239112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":311},{"level":27,"species":311},{"level":27,"species":311}],"party_address":3214772,"script_address":2065541},{"address":3239152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":294},{"level":16,"species":292}],"party_address":3214796,"script_address":2057595},{"address":3239192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":311},{"level":31,"species":311},{"level":31,"species":311}],"party_address":3214812,"script_address":0},{"address":3239232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":311},{"level":34,"species":311},{"level":34,"species":312}],"party_address":3214836,"script_address":0},{"address":3239272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":311},{"level":36,"species":290},{"level":36,"species":311},{"level":36,"species":312}],"party_address":3214860,"script_address":0},{"address":3239312,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":38,"species":311},{"level":38,"species":294},{"level":38,"species":311},{"level":38,"species":312},{"level":38,"species":292}],"party_address":3214892,"script_address":0},{"address":3239352,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":15,"moves":[237,0,0,0],"species":63}],"party_address":3214932,"script_address":2038374},{"address":3239392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":393}],"party_address":3214948,"script_address":2244488},{"address":3239432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":392}],"party_address":3214956,"script_address":2244519},{"address":3239472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":203}],"party_address":3214964,"script_address":2244550},{"address":3239512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":392},{"level":26,"species":392},{"level":26,"species":393}],"party_address":3214972,"script_address":2314189},{"address":3239552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":64},{"level":41,"species":349}],"party_address":3214996,"script_address":2564698},{"address":3239592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":349}],"party_address":3215012,"script_address":2068179},{"address":3239632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":64},{"level":33,"species":349}],"party_address":3215020,"script_address":0},{"address":3239672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":38,"species":64},{"level":38,"species":349}],"party_address":3215036,"script_address":0},{"address":3239712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":64},{"level":41,"species":349}],"party_address":3215052,"script_address":0},{"address":3239752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":349},{"level":45,"species":65}],"party_address":3215068,"script_address":0},{"address":3239792,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":16,"moves":[237,0,0,0],"species":63}],"party_address":3215084,"script_address":2038405},{"address":3239832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":393}],"party_address":3215100,"script_address":2244581},{"address":3239872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":178}],"party_address":3215108,"script_address":2244612},{"address":3239912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":64}],"party_address":3215116,"script_address":2244643},{"address":3239952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":202},{"level":26,"species":177},{"level":26,"species":64}],"party_address":3215124,"script_address":2314220},{"address":3239992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":393},{"level":41,"species":178}],"party_address":3215148,"script_address":2564760},{"address":3240032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":64},{"level":30,"species":348}],"party_address":3215164,"script_address":2068289},{"address":3240072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":64},{"level":34,"species":348}],"party_address":3215180,"script_address":0},{"address":3240112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":64},{"level":37,"species":348}],"party_address":3215196,"script_address":0},{"address":3240152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":40,"species":64},{"level":40,"species":348}],"party_address":3215212,"script_address":0},{"address":3240192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":43,"species":348},{"level":43,"species":65}],"party_address":3215228,"script_address":0},{"address":3240232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":338}],"party_address":3215244,"script_address":2067174},{"address":3240272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":44,"species":338},{"level":44,"species":338}],"party_address":3215252,"script_address":2360864},{"address":3240312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":380}],"party_address":3215268,"script_address":2360895},{"address":3240352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":338}],"party_address":3215276,"script_address":0},{"address":3240392,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":36,"moves":[29,28,60,154],"species":289},{"level":36,"moves":[98,209,60,46],"species":338}],"party_address":3215284,"script_address":0},{"address":3240432,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":39,"moves":[29,28,60,154],"species":289},{"level":39,"moves":[98,209,60,0],"species":338}],"party_address":3215316,"script_address":0},{"address":3240472,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3215348,"script_address":0},{"address":3240512,"data_type":"ITEM_CUSTOM_MOVES","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_address":3215396,"script_address":2274753},{"address":3240552,"data_type":"ITEM_CUSTOM_MOVES","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_address":3215476,"script_address":2275380},{"address":3240592,"data_type":"ITEM_CUSTOM_MOVES","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_address":3215556,"script_address":2276062},{"address":3240632,"data_type":"ITEM_CUSTOM_MOVES","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_address":3215636,"script_address":2276724},{"address":3240672,"data_type":"ITEM_CUSTOM_MOVES","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_address":3215716,"script_address":2187976},{"address":3240712,"data_type":"ITEM_CUSTOM_MOVES","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_address":3215764,"script_address":2095066},{"address":3240752,"data_type":"ITEM_CUSTOM_MOVES","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_address":3215812,"script_address":2167181},{"address":3240792,"data_type":"ITEM_CUSTOM_MOVES","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_address":3215876,"script_address":2103186},{"address":3240832,"data_type":"ITEM_CUSTOM_MOVES","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_address":3215940,"script_address":2129756},{"address":3240872,"data_type":"ITEM_CUSTOM_MOVES","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_address":3216004,"script_address":2202062},{"address":3240912,"data_type":"ITEM_CUSTOM_MOVES","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_address":3216084,"script_address":0},{"address":3240952,"data_type":"ITEM_CUSTOM_MOVES","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_address":3216148,"script_address":2262245},{"address":3240992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":9,"species":392}],"party_address":3216228,"script_address":2054242},{"address":3241032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":392}],"party_address":3216236,"script_address":2554598},{"address":3241072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":339},{"level":15,"species":43},{"level":15,"species":309}],"party_address":3216244,"script_address":2554629},{"address":3241112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":392},{"level":26,"species":356}],"party_address":3216268,"script_address":0},{"address":3241152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":393},{"level":29,"species":356}],"party_address":3216284,"script_address":0},{"address":3241192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":393},{"level":32,"species":357}],"party_address":3216300,"script_address":0},{"address":3241232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":393},{"level":34,"species":378},{"level":34,"species":357}],"party_address":3216316,"script_address":0},{"address":3241272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":9,"species":306}],"party_address":3216340,"script_address":2054490},{"address":3241312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":306},{"level":16,"species":292}],"party_address":3216348,"script_address":2554660},{"address":3241352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":306},{"level":26,"species":370}],"party_address":3216364,"script_address":0},{"address":3241392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":306},{"level":29,"species":371}],"party_address":3216380,"script_address":0},{"address":3241432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":307},{"level":32,"species":371}],"party_address":3216396,"script_address":0},{"address":3241472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":307},{"level":35,"species":372}],"party_address":3216412,"script_address":0},{"address":3241512,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":30,"moves":[95,60,146,42],"species":308},{"level":32,"moves":[8,25,47,185],"species":366}],"party_address":3216428,"script_address":0},{"address":3241552,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":15,"moves":[45,39,29,60],"species":288},{"level":17,"moves":[33,116,36,0],"species":335}],"party_address":3216460,"script_address":0},{"address":3241592,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":28,"moves":[45,39,29,60],"species":288},{"level":30,"moves":[33,116,36,0],"species":335}],"party_address":3216492,"script_address":0},{"address":3241632,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":31,"moves":[45,39,29,60],"species":288},{"level":33,"moves":[33,116,36,0],"species":335}],"party_address":3216524,"script_address":0},{"address":3241672,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":34,"moves":[45,39,29,60],"species":289},{"level":36,"moves":[33,116,36,0],"species":335}],"party_address":3216556,"script_address":0},{"address":3241712,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":36,"moves":[45,39,29,60],"species":289},{"level":38,"moves":[33,116,36,0],"species":336}],"party_address":3216588,"script_address":0},{"address":3241752,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":16,"species":304},{"level":16,"species":288}],"party_address":3216620,"script_address":2045785},{"address":3241792,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":15,"species":315}],"party_address":3216636,"script_address":2026353},{"address":3241832,"data_type":"ITEM_CUSTOM_MOVES","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_address":3216644,"script_address":2360833},{"address":3241872,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":29,"species":315}],"party_address":3216740,"script_address":0},{"address":3241912,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":32,"species":315}],"party_address":3216748,"script_address":0},{"address":3241952,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":35,"species":316}],"party_address":3216756,"script_address":0},{"address":3241992,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":38,"species":316}],"party_address":3216764,"script_address":0},{"address":3242032,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":17,"species":363}],"party_address":3216772,"script_address":2045890},{"address":3242072,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":30,"species":25}],"party_address":3216780,"script_address":2067143},{"address":3242112,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":35,"species":350},{"level":37,"species":183},{"level":39,"species":184}],"party_address":3216788,"script_address":2265832},{"address":3242152,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":14,"species":353},{"level":14,"species":354}],"party_address":3216812,"script_address":2038890},{"address":3242192,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":26,"species":353},{"level":26,"species":354}],"party_address":3216828,"script_address":0},{"address":3242232,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":29,"species":353},{"level":29,"species":354}],"party_address":3216844,"script_address":0},{"address":3242272,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":32,"species":353},{"level":32,"species":354}],"party_address":3216860,"script_address":0},{"address":3242312,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":35,"species":353},{"level":35,"species":354}],"party_address":3216876,"script_address":0},{"address":3242352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":336}],"party_address":3216892,"script_address":2052811},{"address":3242392,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":33,"moves":[36,26,28,91],"species":336}],"party_address":3216900,"script_address":0},{"address":3242432,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":36,"moves":[36,26,28,91],"species":336}],"party_address":3216916,"script_address":0},{"address":3242472,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":39,"moves":[36,187,28,91],"species":336}],"party_address":3216932,"script_address":0},{"address":3242512,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":42,"moves":[36,187,28,91],"species":336}],"party_address":3216948,"script_address":0},{"address":3242552,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":18,"moves":[136,96,93,197],"species":356}],"party_address":3216964,"script_address":2046100},{"address":3242592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":21,"species":356},{"level":21,"species":335}],"party_address":3216980,"script_address":2304277},{"address":3242632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":356},{"level":30,"species":335}],"party_address":3216996,"script_address":0},{"address":3242672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":357},{"level":33,"species":336}],"party_address":3217012,"script_address":0},{"address":3242712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":357},{"level":36,"species":336}],"party_address":3217028,"script_address":0},{"address":3242752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":357},{"level":39,"species":336}],"party_address":3217044,"script_address":0},{"address":3242792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":286}],"party_address":3217060,"script_address":2024678},{"address":3242832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":288},{"level":7,"species":298}],"party_address":3217068,"script_address":2029684},{"address":3242872,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":10,"moves":[33,0,0,0],"species":74}],"party_address":3217084,"script_address":2188154},{"address":3242912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":8,"species":74},{"level":8,"species":74}],"party_address":3217100,"script_address":2188185},{"address":3242952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":9,"species":66}],"party_address":3217116,"script_address":2054180},{"address":3242992,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":17,"moves":[29,28,45,85],"species":288},{"level":17,"moves":[133,124,25,1],"species":367}],"party_address":3217124,"script_address":2167670},{"address":3243032,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":43,"moves":[213,58,85,53],"species":366},{"level":43,"moves":[29,182,5,92],"species":362}],"party_address":3217156,"script_address":2332778},{"address":3243072,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":43,"moves":[29,94,85,91],"species":394},{"level":43,"moves":[89,247,76,24],"species":366}],"party_address":3217188,"script_address":2332809},{"address":3243112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":332}],"party_address":3217220,"script_address":2050594},{"address":3243152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":382}],"party_address":3217228,"script_address":2050625},{"address":3243192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":287}],"party_address":3217236,"script_address":0},{"address":3243232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":305},{"level":30,"species":287}],"party_address":3217244,"script_address":0},{"address":3243272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":305},{"level":29,"species":289},{"level":33,"species":287}],"party_address":3217260,"script_address":0},{"address":3243312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":305},{"level":32,"species":289},{"level":36,"species":287}],"party_address":3217284,"script_address":0},{"address":3243352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":288},{"level":16,"species":288}],"party_address":3217308,"script_address":2553792},{"address":3243392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":4,"species":288},{"level":3,"species":304}],"party_address":3217324,"script_address":2024926},{"address":3243432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":382},{"level":13,"species":337}],"party_address":3217340,"script_address":2039000},{"address":3243472,"data_type":"ITEM_CUSTOM_MOVES","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_address":3217356,"script_address":2277575},{"address":3243512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":129},{"level":10,"species":72},{"level":15,"species":129}],"party_address":3217452,"script_address":2026322},{"address":3243552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":129},{"level":6,"species":129},{"level":7,"species":129}],"party_address":3217476,"script_address":2029653},{"address":3243592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":129},{"level":17,"species":118},{"level":18,"species":323}],"party_address":3217500,"script_address":2052185},{"address":3243632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":10,"species":129},{"level":7,"species":72},{"level":10,"species":129}],"party_address":3217524,"script_address":2034247},{"address":3243672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":11,"species":72}],"party_address":3217548,"script_address":2034357},{"address":3243712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":11,"species":72},{"level":14,"species":313},{"level":11,"species":72},{"level":14,"species":313}],"party_address":3217556,"script_address":2038546},{"address":3243752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":323}],"party_address":3217588,"script_address":2052216},{"address":3243792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":72},{"level":25,"species":330}],"party_address":3217596,"script_address":2058894},{"address":3243832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":72}],"party_address":3217612,"script_address":2058925},{"address":3243872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":313},{"level":25,"species":73}],"party_address":3217620,"script_address":2036183},{"address":3243912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":72},{"level":27,"species":130},{"level":27,"species":130}],"party_address":3217636,"script_address":0},{"address":3243952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":130},{"level":26,"species":330},{"level":26,"species":72},{"level":29,"species":130}],"party_address":3217660,"script_address":0},{"address":3243992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":130},{"level":30,"species":330},{"level":30,"species":73},{"level":31,"species":130}],"party_address":3217692,"script_address":0},{"address":3244032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":130},{"level":33,"species":331},{"level":33,"species":130},{"level":35,"species":73}],"party_address":3217724,"script_address":0},{"address":3244072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":129},{"level":21,"species":130},{"level":23,"species":130},{"level":26,"species":130},{"level":30,"species":130},{"level":35,"species":130}],"party_address":3217756,"script_address":2073670},{"address":3244112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":6,"species":100},{"level":6,"species":100},{"level":14,"species":81}],"party_address":3217804,"script_address":2038577},{"address":3244152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":81},{"level":14,"species":81}],"party_address":3217828,"script_address":2038608},{"address":3244192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":81}],"party_address":3217844,"script_address":2038639},{"address":3244232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":81}],"party_address":3217852,"script_address":0},{"address":3244272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":81}],"party_address":3217860,"script_address":0},{"address":3244312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":82}],"party_address":3217868,"script_address":0},{"address":3244352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":82}],"party_address":3217876,"script_address":0},{"address":3244392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":81}],"party_address":3217884,"script_address":2038780},{"address":3244432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":81},{"level":14,"species":81},{"level":6,"species":100}],"party_address":3217892,"script_address":2038749},{"address":3244472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":81}],"party_address":3217916,"script_address":0},{"address":3244512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":81}],"party_address":3217924,"script_address":0},{"address":3244552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":82}],"party_address":3217932,"script_address":0},{"address":3244592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":82}],"party_address":3217940,"script_address":0},{"address":3244632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":84}],"party_address":3217948,"script_address":2057375},{"address":3244672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":84}],"party_address":3217956,"script_address":0},{"address":3244712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":84}],"party_address":3217964,"script_address":0},{"address":3244752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":85}],"party_address":3217972,"script_address":0},{"address":3244792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":85}],"party_address":3217980,"script_address":0},{"address":3244832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":84}],"party_address":3217988,"script_address":2057485},{"address":3244872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":84}],"party_address":3217996,"script_address":0},{"address":3244912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":84}],"party_address":3218004,"script_address":0},{"address":3244952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":85}],"party_address":3218012,"script_address":0},{"address":3244992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":85}],"party_address":3218020,"script_address":0},{"address":3245032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":120},{"level":33,"species":120}],"party_address":3218028,"script_address":2070582},{"address":3245072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":288},{"level":25,"species":337}],"party_address":3218044,"script_address":2340077},{"address":3245112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":120}],"party_address":3218060,"script_address":2071332},{"address":3245152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":120},{"level":33,"species":120}],"party_address":3218068,"script_address":2070380},{"address":3245192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":309},{"level":34,"species":120}],"party_address":3218084,"script_address":2072978},{"address":3245232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":120}],"party_address":3218100,"script_address":0},{"address":3245272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":120}],"party_address":3218108,"script_address":0},{"address":3245312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":121}],"party_address":3218116,"script_address":0},{"address":3245352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":48,"species":121}],"party_address":3218124,"script_address":0},{"address":3245392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":120}],"party_address":3218132,"script_address":2070318},{"address":3245432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":309},{"level":34,"species":120}],"party_address":3218140,"script_address":2070613},{"address":3245472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":120}],"party_address":3218156,"script_address":2073545},{"address":3245512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":120}],"party_address":3218164,"script_address":2071442},{"address":3245552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":309},{"level":33,"species":120}],"party_address":3218172,"script_address":2073009},{"address":3245592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":120}],"party_address":3218188,"script_address":0},{"address":3245632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":120}],"party_address":3218196,"script_address":0},{"address":3245672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":121}],"party_address":3218204,"script_address":0},{"address":3245712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":48,"species":121}],"party_address":3218212,"script_address":0},{"address":3245752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":359},{"level":37,"species":359}],"party_address":3218220,"script_address":2292701},{"address":3245792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":359},{"level":41,"species":359}],"party_address":3218236,"script_address":0},{"address":3245832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":44,"species":359},{"level":44,"species":359}],"party_address":3218252,"script_address":0},{"address":3245872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":46,"species":395},{"level":46,"species":359},{"level":46,"species":359}],"party_address":3218268,"script_address":0},{"address":3245912,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":49,"species":359},{"level":49,"species":359},{"level":49,"species":396}],"party_address":3218292,"script_address":0},{"address":3245952,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":34,"moves":[225,29,116,52],"species":395}],"party_address":3218316,"script_address":2074182},{"address":3245992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":309}],"party_address":3218332,"script_address":2059066},{"address":3246032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":309},{"level":25,"species":369}],"party_address":3218340,"script_address":2061450},{"address":3246072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":305}],"party_address":3218356,"script_address":2061481},{"address":3246112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":84},{"level":27,"species":227},{"level":27,"species":369}],"party_address":3218364,"script_address":2202267},{"address":3246152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":227}],"party_address":3218388,"script_address":2202391},{"address":3246192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":369},{"level":33,"species":178}],"party_address":3218396,"script_address":2070085},{"address":3246232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":84},{"level":29,"species":310}],"party_address":3218412,"script_address":2202298},{"address":3246272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":309},{"level":28,"species":177}],"party_address":3218428,"script_address":2065338},{"address":3246312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":358}],"party_address":3218444,"script_address":2065369},{"address":3246352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":305},{"level":36,"species":310},{"level":36,"species":178}],"party_address":3218452,"script_address":2563257},{"address":3246392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":304},{"level":25,"species":305}],"party_address":3218476,"script_address":2059097},{"address":3246432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":177},{"level":32,"species":358}],"party_address":3218492,"script_address":0},{"address":3246472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":177},{"level":35,"species":359}],"party_address":3218508,"script_address":0},{"address":3246512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":38,"species":177},{"level":38,"species":359}],"party_address":3218524,"script_address":0},{"address":3246552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":359},{"level":41,"species":178}],"party_address":3218540,"script_address":0},{"address":3246592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":177},{"level":33,"species":305}],"party_address":3218556,"script_address":2074151},{"address":3246632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":369}],"party_address":3218572,"script_address":2073981},{"address":3246672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":302}],"party_address":3218580,"script_address":2061512},{"address":3246712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":302},{"level":25,"species":109}],"party_address":3218588,"script_address":2061543},{"address":3246752,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":43,"moves":[29,89,0,0],"species":319},{"level":43,"moves":[85,89,0,0],"species":171}],"party_address":3218604,"script_address":2335578},{"address":3246792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":183}],"party_address":3218636,"script_address":2341860},{"address":3246832,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3218644,"script_address":2050766},{"address":3246872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":109},{"level":18,"species":302}],"party_address":3218692,"script_address":2050876},{"address":3246912,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3218708,"script_address":0},{"address":3246952,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3218772,"script_address":0},{"address":3246992,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3218836,"script_address":0},{"address":3247032,"data_type":"ITEM_CUSTOM_MOVES","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_address":3218900,"script_address":0},{"address":3247072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":356}],"party_address":3218964,"script_address":2095313},{"address":3247112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":356}],"party_address":3218972,"script_address":2095351},{"address":3247152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":356},{"level":18,"species":335}],"party_address":3218980,"script_address":2053062},{"address":3247192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":356}],"party_address":3218996,"script_address":2557727},{"address":3247232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":307}],"party_address":3219004,"script_address":2557789},{"address":3247272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":356},{"level":26,"species":335}],"party_address":3219012,"script_address":0},{"address":3247312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":356},{"level":29,"species":335}],"party_address":3219028,"script_address":0},{"address":3247352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":357},{"level":32,"species":336}],"party_address":3219044,"script_address":0},{"address":3247392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":357},{"level":35,"species":336}],"party_address":3219060,"script_address":0},{"address":3247432,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":19,"moves":[52,33,222,241],"species":339}],"party_address":3219076,"script_address":2050656},{"address":3247472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":363},{"level":28,"species":313}],"party_address":3219092,"script_address":2065713},{"address":3247512,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":30,"moves":[240,55,87,96],"species":385}],"party_address":3219108,"script_address":2065744},{"address":3247552,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":29,"moves":[52,33,222,241],"species":339}],"party_address":3219124,"script_address":0},{"address":3247592,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":32,"moves":[52,36,222,241],"species":339}],"party_address":3219140,"script_address":0},{"address":3247632,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":34,"moves":[73,72,64,241],"species":363},{"level":34,"moves":[53,36,222,241],"species":339}],"party_address":3219156,"script_address":0},{"address":3247672,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":37,"moves":[73,202,76,241],"species":363},{"level":37,"moves":[53,36,89,241],"species":340}],"party_address":3219188,"script_address":0},{"address":3247712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":309},{"level":25,"species":313}],"party_address":3219220,"script_address":2033633},{"address":3247752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":183}],"party_address":3219236,"script_address":2033664},{"address":3247792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":313}],"party_address":3219244,"script_address":2034216},{"address":3247832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":309},{"level":25,"species":118}],"party_address":3219252,"script_address":2034620},{"address":3247872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":118}],"party_address":3219268,"script_address":2034651},{"address":3247912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":116},{"level":25,"species":183}],"party_address":3219276,"script_address":2034838},{"address":3247952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":118}],"party_address":3219292,"script_address":2034869},{"address":3247992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":118},{"level":24,"species":309},{"level":24,"species":118}],"party_address":3219300,"script_address":2035808},{"address":3248032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":313}],"party_address":3219324,"script_address":2069240},{"address":3248072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":183}],"party_address":3219332,"script_address":2069350},{"address":3248112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":325}],"party_address":3219340,"script_address":2069851},{"address":3248152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":119}],"party_address":3219348,"script_address":2069882},{"address":3248192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":183},{"level":33,"species":341}],"party_address":3219356,"script_address":2070225},{"address":3248232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":118}],"party_address":3219372,"script_address":2070256},{"address":3248272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":118},{"level":33,"species":341}],"party_address":3219380,"script_address":2073260},{"address":3248312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":325}],"party_address":3219396,"script_address":2073421},{"address":3248352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":119}],"party_address":3219404,"script_address":2073452},{"address":3248392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":184}],"party_address":3219412,"script_address":2073639},{"address":3248432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":325},{"level":33,"species":325}],"party_address":3219420,"script_address":2070349},{"address":3248472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":119}],"party_address":3219436,"script_address":2073888},{"address":3248512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":116},{"level":33,"species":117}],"party_address":3219444,"script_address":2073919},{"address":3248552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":171},{"level":34,"species":310}],"party_address":3219460,"script_address":0},{"address":3248592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":325},{"level":33,"species":325}],"party_address":3219476,"script_address":2074120},{"address":3248632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":119}],"party_address":3219492,"script_address":2071676},{"address":3248672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":38,"species":313}],"party_address":3219500,"script_address":0},{"address":3248712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":313}],"party_address":3219508,"script_address":0},{"address":3248752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":43,"species":120},{"level":43,"species":313}],"party_address":3219516,"script_address":0},{"address":3248792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":325},{"level":45,"species":313},{"level":45,"species":121}],"party_address":3219532,"script_address":0},{"address":3248832,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":22,"moves":[91,28,40,163],"species":27},{"level":22,"moves":[229,189,60,61],"species":318}],"party_address":3219556,"script_address":2046397},{"address":3248872,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":22,"moves":[28,40,163,91],"species":27},{"level":22,"moves":[205,61,39,111],"species":183}],"party_address":3219588,"script_address":2046459},{"address":3248912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":304},{"level":17,"species":296}],"party_address":3219620,"script_address":2049860},{"address":3248952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":183},{"level":18,"species":296}],"party_address":3219636,"script_address":2051934},{"address":3248992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":23,"species":315},{"level":23,"species":358}],"party_address":3219652,"script_address":2557036},{"address":3249032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":306},{"level":19,"species":43},{"level":19,"species":358}],"party_address":3219668,"script_address":2310092},{"address":3249072,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":32,"moves":[194,219,68,243],"species":202}],"party_address":3219692,"script_address":2315855},{"address":3249112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":306},{"level":17,"species":183}],"party_address":3219708,"script_address":2046631},{"address":3249152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":306},{"level":25,"species":44},{"level":25,"species":358}],"party_address":3219724,"script_address":0},{"address":3249192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":307},{"level":28,"species":44},{"level":28,"species":358}],"party_address":3219748,"script_address":0},{"address":3249232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":307},{"level":31,"species":44},{"level":31,"species":358}],"party_address":3219772,"script_address":0},{"address":3249272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":40,"species":307},{"level":40,"species":45},{"level":40,"species":359}],"party_address":3219796,"script_address":0},{"address":3249312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":353},{"level":15,"species":354}],"party_address":3219820,"script_address":0},{"address":3249352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":353},{"level":27,"species":354}],"party_address":3219836,"script_address":0},{"address":3249392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":6,"species":298},{"level":6,"species":295}],"party_address":3219852,"script_address":0},{"address":3249432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":292},{"level":26,"species":294}],"party_address":3219868,"script_address":0},{"address":3249472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":9,"species":353},{"level":9,"species":354}],"party_address":3219884,"script_address":0},{"address":3249512,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":10,"moves":[101,50,0,0],"species":361},{"level":10,"moves":[71,73,0,0],"species":306}],"party_address":3219900,"script_address":0},{"address":3249552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":353},{"level":30,"species":354}],"party_address":3219932,"script_address":0},{"address":3249592,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":33,"moves":[209,12,57,14],"species":353},{"level":33,"moves":[209,12,204,14],"species":354}],"party_address":3219948,"script_address":0},{"address":3249632,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":36,"moves":[87,12,57,14],"species":353},{"level":36,"moves":[87,12,204,14],"species":354}],"party_address":3219980,"script_address":0},{"address":3249672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":12,"species":309},{"level":12,"species":66}],"party_address":3220012,"script_address":2035839},{"address":3249712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":309}],"party_address":3220028,"script_address":2035870},{"address":3249752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":309},{"level":33,"species":67}],"party_address":3220036,"script_address":2069913},{"address":3249792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":11,"species":309},{"level":11,"species":66},{"level":11,"species":72}],"party_address":3220052,"script_address":2543939},{"address":3249832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":44,"species":73},{"level":44,"species":67}],"party_address":3220076,"script_address":2360255},{"address":3249872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":43,"species":66},{"level":43,"species":310},{"level":43,"species":67}],"party_address":3220092,"script_address":2360286},{"address":3249912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":341},{"level":25,"species":67}],"party_address":3220116,"script_address":2340984},{"address":3249952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":309},{"level":36,"species":72},{"level":36,"species":67}],"party_address":3220132,"script_address":0},{"address":3249992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":310},{"level":39,"species":72},{"level":39,"species":67}],"party_address":3220156,"script_address":0},{"address":3250032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":310},{"level":42,"species":72},{"level":42,"species":67}],"party_address":3220180,"script_address":0},{"address":3250072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":310},{"level":45,"species":67},{"level":45,"species":73}],"party_address":3220204,"script_address":0},{"address":3250112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":23,"species":339}],"party_address":3220228,"script_address":2103632},{"address":3250152,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":39,"moves":[175,96,216,213],"species":328},{"level":39,"moves":[175,96,216,213],"species":328}],"party_address":3220236,"script_address":2265863},{"address":3250192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":376}],"party_address":3220268,"script_address":2068647},{"address":3250232,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":31,"moves":[92,87,120,188],"species":109}],"party_address":3220276,"script_address":2068616},{"address":3250272,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":31,"moves":[241,55,53,76],"species":385}],"party_address":3220292,"script_address":2068585},{"address":3250312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":338},{"level":33,"species":68}],"party_address":3220308,"script_address":2070116},{"address":3250352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":67},{"level":33,"species":341}],"party_address":3220324,"script_address":2074337},{"address":3250392,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":34,"moves":[44,46,86,85],"species":338}],"party_address":3220340,"script_address":2074306},{"address":3250432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":356},{"level":33,"species":336}],"party_address":3220356,"script_address":2074275},{"address":3250472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":313}],"party_address":3220372,"script_address":2074244},{"address":3250512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":170},{"level":33,"species":336}],"party_address":3220380,"script_address":2074043},{"address":3250552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":296},{"level":14,"species":299}],"party_address":3220396,"script_address":2038436},{"address":3250592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":380},{"level":18,"species":379}],"party_address":3220412,"script_address":2053172},{"address":3250632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":340},{"level":38,"species":287},{"level":40,"species":42}],"party_address":3220428,"script_address":0},{"address":3250672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":296},{"level":26,"species":299}],"party_address":3220452,"script_address":0},{"address":3250712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":296},{"level":29,"species":299}],"party_address":3220468,"script_address":0},{"address":3250752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":296},{"level":32,"species":299}],"party_address":3220484,"script_address":0},{"address":3250792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":297},{"level":35,"species":300}],"party_address":3220500,"script_address":0},{"address":3250832,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3220516,"script_address":2332529},{"address":3250872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":277}],"party_address":3220596,"script_address":2025759},{"address":3250912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":218},{"level":18,"species":309},{"level":20,"species":278}],"party_address":3220604,"script_address":2039798},{"address":3250952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":218},{"level":29,"species":310},{"level":31,"species":278}],"party_address":3220628,"script_address":2060578},{"address":3250992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":280}],"party_address":3220652,"script_address":2025703},{"address":3251032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":309},{"level":18,"species":296},{"level":20,"species":281}],"party_address":3220660,"script_address":2039742},{"address":3251072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":310},{"level":29,"species":296},{"level":31,"species":281}],"party_address":3220684,"script_address":2060522},{"address":3251112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":283}],"party_address":3220708,"script_address":2025731},{"address":3251152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":296},{"level":18,"species":218},{"level":20,"species":284}],"party_address":3220716,"script_address":2039770},{"address":3251192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":296},{"level":29,"species":218},{"level":31,"species":284}],"party_address":3220740,"script_address":2060550},{"address":3251232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":277}],"party_address":3220764,"script_address":2025675},{"address":3251272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":309},{"level":18,"species":218},{"level":20,"species":278}],"party_address":3220772,"script_address":2039622},{"address":3251312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":218},{"level":29,"species":296},{"level":31,"species":278}],"party_address":3220796,"script_address":2060420},{"address":3251352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":280}],"party_address":3220820,"script_address":2025619},{"address":3251392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":309},{"level":18,"species":296},{"level":20,"species":281}],"party_address":3220828,"script_address":2039566},{"address":3251432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":310},{"level":29,"species":296},{"level":31,"species":281}],"party_address":3220852,"script_address":2060364},{"address":3251472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":283}],"party_address":3220876,"script_address":2025647},{"address":3251512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":296},{"level":18,"species":218},{"level":20,"species":284}],"party_address":3220884,"script_address":2039594},{"address":3251552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":296},{"level":29,"species":218},{"level":31,"species":284}],"party_address":3220908,"script_address":2060392},{"address":3251592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":11,"species":370},{"level":11,"species":288},{"level":11,"species":382},{"level":11,"species":286},{"level":11,"species":304},{"level":11,"species":335}],"party_address":3220932,"script_address":2057155},{"address":3251632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":127}],"party_address":3220980,"script_address":2068678},{"address":3251672,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":43,"moves":[153,115,113,94],"species":348},{"level":43,"moves":[153,115,113,247],"species":349}],"party_address":3220988,"script_address":2334468},{"address":3251712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":22,"species":371},{"level":22,"species":289},{"level":22,"species":382},{"level":22,"species":287},{"level":22,"species":305},{"level":22,"species":335}],"party_address":3221020,"script_address":0},{"address":3251752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":371},{"level":25,"species":289},{"level":25,"species":382},{"level":25,"species":287},{"level":25,"species":305},{"level":25,"species":336}],"party_address":3221068,"script_address":0},{"address":3251792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":371},{"level":28,"species":289},{"level":28,"species":382},{"level":28,"species":287},{"level":28,"species":305},{"level":28,"species":336}],"party_address":3221116,"script_address":0},{"address":3251832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":371},{"level":31,"species":289},{"level":31,"species":383},{"level":31,"species":287},{"level":31,"species":305},{"level":31,"species":336}],"party_address":3221164,"script_address":0},{"address":3251872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":11,"species":309},{"level":11,"species":306},{"level":11,"species":183},{"level":11,"species":363},{"level":11,"species":315},{"level":11,"species":118}],"party_address":3221212,"script_address":2057265},{"address":3251912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":43,"species":322},{"level":43,"species":376}],"party_address":3221260,"script_address":2334499},{"address":3251952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":28}],"party_address":3221276,"script_address":2341891},{"address":3251992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":22,"species":309},{"level":22,"species":306},{"level":22,"species":183},{"level":22,"species":363},{"level":22,"species":315},{"level":22,"species":118}],"party_address":3221284,"script_address":0},{"address":3252032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":310},{"level":25,"species":307},{"level":25,"species":183},{"level":25,"species":363},{"level":25,"species":316},{"level":25,"species":118}],"party_address":3221332,"script_address":0},{"address":3252072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":310},{"level":28,"species":307},{"level":28,"species":183},{"level":28,"species":363},{"level":28,"species":316},{"level":28,"species":118}],"party_address":3221380,"script_address":0},{"address":3252112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":310},{"level":31,"species":307},{"level":31,"species":184},{"level":31,"species":363},{"level":31,"species":316},{"level":31,"species":119}],"party_address":3221428,"script_address":0},{"address":3252152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":307}],"party_address":3221476,"script_address":2061230},{"address":3252192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":298},{"level":28,"species":299},{"level":28,"species":296}],"party_address":3221484,"script_address":2065479},{"address":3252232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":345}],"party_address":3221508,"script_address":2563288},{"address":3252272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":307}],"party_address":3221516,"script_address":0},{"address":3252312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":307}],"party_address":3221524,"script_address":0},{"address":3252352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":307}],"party_address":3221532,"script_address":0},{"address":3252392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":317},{"level":39,"species":307}],"party_address":3221540,"script_address":0},{"address":3252432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":44},{"level":26,"species":363}],"party_address":3221556,"script_address":2061340},{"address":3252472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":295},{"level":28,"species":296},{"level":28,"species":299}],"party_address":3221572,"script_address":2065510},{"address":3252512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":38,"species":358},{"level":38,"species":363}],"party_address":3221596,"script_address":2563226},{"address":3252552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":44},{"level":30,"species":363}],"party_address":3221612,"script_address":0},{"address":3252592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":44},{"level":33,"species":363}],"party_address":3221628,"script_address":0},{"address":3252632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":44},{"level":36,"species":363}],"party_address":3221644,"script_address":0},{"address":3252672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":182},{"level":39,"species":363}],"party_address":3221660,"script_address":0},{"address":3252712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":21,"species":81}],"party_address":3221676,"script_address":2310306},{"address":3252752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":287},{"level":35,"species":42}],"party_address":3221684,"script_address":2327187},{"address":3252792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":313},{"level":31,"species":41}],"party_address":3221700,"script_address":0},{"address":3252832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":313},{"level":30,"species":41}],"party_address":3221716,"script_address":2317615},{"address":3252872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":22,"species":286},{"level":22,"species":339}],"party_address":3221732,"script_address":2309993},{"address":3252912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":8,"species":74},{"level":8,"species":74}],"party_address":3221748,"script_address":2188216},{"address":3252952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":66}],"party_address":3221764,"script_address":2095389},{"address":3252992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":356}],"party_address":3221772,"script_address":2095465},{"address":3253032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":335}],"party_address":3221780,"script_address":2095427},{"address":3253072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":356}],"party_address":3221788,"script_address":2244674},{"address":3253112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":330}],"party_address":3221796,"script_address":2070287},{"address":3253152,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":32,"moves":[87,86,98,0],"species":338},{"level":32,"moves":[57,168,0,0],"species":289}],"party_address":3221804,"script_address":2070768},{"address":3253192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":73}],"party_address":3221836,"script_address":2071645},{"address":3253232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":20,"species":41}],"party_address":3221844,"script_address":2304070},{"address":3253272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":331}],"party_address":3221852,"script_address":2073102},{"address":3253312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":203}],"party_address":3221860,"script_address":0},{"address":3253352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":351}],"party_address":3221868,"script_address":2244705},{"address":3253392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":64}],"party_address":3221876,"script_address":2244829},{"address":3253432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":203}],"party_address":3221884,"script_address":2244767},{"address":3253472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":202}],"party_address":3221892,"script_address":2244798},{"address":3253512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":41},{"level":31,"species":286}],"party_address":3221900,"script_address":2254605},{"address":3253552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":318}],"party_address":3221916,"script_address":2254667},{"address":3253592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":41}],"party_address":3221924,"script_address":2257768},{"address":3253632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":287}],"party_address":3221932,"script_address":2257818},{"address":3253672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":318}],"party_address":3221940,"script_address":2257868},{"address":3253712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":177}],"party_address":3221948,"script_address":2244736},{"address":3253752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":295},{"level":15,"species":280}],"party_address":3221956,"script_address":1978559},{"address":3253792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":309},{"level":15,"species":277}],"party_address":3221972,"script_address":1978621},{"address":3253832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":305},{"level":33,"species":307}],"party_address":3221988,"script_address":2073732},{"address":3253872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":120}],"party_address":3222004,"script_address":2069651},{"address":3253912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":41},{"level":27,"species":286}],"party_address":3222012,"script_address":2572062},{"address":3253952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":339},{"level":20,"species":286},{"level":22,"species":339},{"level":22,"species":41}],"party_address":3222028,"script_address":2304039},{"address":3253992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":317},{"level":33,"species":371}],"party_address":3222060,"script_address":2073794},{"address":3254032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":218},{"level":15,"species":283}],"party_address":3222076,"script_address":1978590},{"address":3254072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":309},{"level":15,"species":277}],"party_address":3222092,"script_address":1978317},{"address":3254112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":287},{"level":38,"species":169},{"level":39,"species":340}],"party_address":3222108,"script_address":2351441},{"address":3254152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":287},{"level":24,"species":41},{"level":25,"species":340}],"party_address":3222132,"script_address":2303440},{"address":3254192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":4,"species":288},{"level":4,"species":306}],"party_address":3222156,"script_address":2024895},{"address":3254232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":6,"species":295},{"level":6,"species":306}],"party_address":3222172,"script_address":2029715},{"address":3254272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":9,"species":183}],"party_address":3222188,"script_address":2054459},{"address":3254312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":183},{"level":15,"species":306},{"level":15,"species":339}],"party_address":3222196,"script_address":2045995},{"address":3254352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":296},{"level":26,"species":306}],"party_address":3222220,"script_address":0},{"address":3254392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":296},{"level":29,"species":307}],"party_address":3222236,"script_address":0},{"address":3254432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":296},{"level":32,"species":307}],"party_address":3222252,"script_address":0},{"address":3254472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":305},{"level":34,"species":296},{"level":34,"species":307}],"party_address":3222268,"script_address":0},{"address":3254512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":43}],"party_address":3222292,"script_address":2553761},{"address":3254552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":315},{"level":14,"species":306},{"level":14,"species":183}],"party_address":3222300,"script_address":2553823},{"address":3254592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":40,"species":325}],"party_address":3222324,"script_address":2265615},{"address":3254632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":118},{"level":39,"species":313}],"party_address":3222332,"script_address":2265646},{"address":3254672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":4,"species":290},{"level":4,"species":290}],"party_address":3222348,"script_address":2024864},{"address":3254712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":3,"species":290},{"level":3,"species":290},{"level":3,"species":290},{"level":3,"species":290}],"party_address":3222364,"script_address":2300392},{"address":3254752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":8,"species":290},{"level":8,"species":301}],"party_address":3222396,"script_address":2054211},{"address":3254792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":301},{"level":28,"species":302}],"party_address":3222412,"script_address":2061137},{"address":3254832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":386},{"level":25,"species":387}],"party_address":3222428,"script_address":2061168},{"address":3254872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":302}],"party_address":3222444,"script_address":2061199},{"address":3254912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":6,"species":301},{"level":6,"species":301}],"party_address":3222452,"script_address":2300423},{"address":3254952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":302}],"party_address":3222468,"script_address":0},{"address":3254992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":294},{"level":29,"species":302}],"party_address":3222476,"script_address":0},{"address":3255032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":311},{"level":31,"species":294},{"level":31,"species":302}],"party_address":3222492,"script_address":0},{"address":3255072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":311},{"level":33,"species":302},{"level":33,"species":294},{"level":33,"species":302}],"party_address":3222516,"script_address":0},{"address":3255112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":339},{"level":17,"species":66}],"party_address":3222548,"script_address":2049688},{"address":3255152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":74},{"level":17,"species":74},{"level":16,"species":74}],"party_address":3222564,"script_address":2049719},{"address":3255192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":74},{"level":18,"species":66}],"party_address":3222588,"script_address":2051841},{"address":3255232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":74},{"level":18,"species":339}],"party_address":3222604,"script_address":2051872},{"address":3255272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":22,"species":74},{"level":22,"species":320},{"level":22,"species":75}],"party_address":3222620,"script_address":2557067},{"address":3255312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":8,"species":74}],"party_address":3222644,"script_address":2054428},{"address":3255352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":20,"species":74},{"level":20,"species":318}],"party_address":3222652,"script_address":2310061},{"address":3255392,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":9,"moves":[150,55,0,0],"species":313}],"party_address":3222668,"script_address":0},{"address":3255432,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":10,"moves":[16,45,0,0],"species":310},{"level":10,"moves":[44,184,0,0],"species":286}],"party_address":3222684,"script_address":0},{"address":3255472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":74},{"level":16,"species":74},{"level":16,"species":66}],"party_address":3222716,"script_address":2296023},{"address":3255512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":74},{"level":24,"species":74},{"level":24,"species":74},{"level":24,"species":75}],"party_address":3222740,"script_address":0},{"address":3255552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":74},{"level":27,"species":74},{"level":27,"species":75},{"level":27,"species":75}],"party_address":3222772,"script_address":0},{"address":3255592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":74},{"level":30,"species":75},{"level":30,"species":75},{"level":30,"species":75}],"party_address":3222804,"script_address":0},{"address":3255632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":75},{"level":33,"species":75},{"level":33,"species":75},{"level":33,"species":76}],"party_address":3222836,"script_address":0},{"address":3255672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":316},{"level":31,"species":338}],"party_address":3222868,"script_address":0},{"address":3255712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":325},{"level":45,"species":325}],"party_address":3222884,"script_address":0},{"address":3255752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":386},{"level":25,"species":387}],"party_address":3222900,"script_address":0},{"address":3255792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":386},{"level":30,"species":387}],"party_address":3222916,"script_address":0},{"address":3255832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":386},{"level":33,"species":387}],"party_address":3222932,"script_address":0},{"address":3255872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":386},{"level":36,"species":387}],"party_address":3222948,"script_address":0},{"address":3255912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":386},{"level":39,"species":387}],"party_address":3222964,"script_address":0},{"address":3255952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":118}],"party_address":3222980,"script_address":2543970},{"address":3255992,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":23,"moves":[53,154,185,20],"species":317}],"party_address":3222988,"script_address":2103539},{"address":3256032,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":17,"moves":[117,197,93,9],"species":356},{"level":17,"moves":[9,197,93,96],"species":356}],"party_address":3223004,"script_address":2167701},{"address":3256072,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":23,"moves":[117,197,93,7],"species":356}],"party_address":3223036,"script_address":2103508},{"address":3256112,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":25,"moves":[33,120,124,108],"species":109},{"level":25,"moves":[33,139,124,108],"species":109}],"party_address":3223052,"script_address":2061574},{"address":3256152,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":28,"moves":[139,120,124,108],"species":109},{"level":28,"moves":[28,104,210,14],"species":302}],"party_address":3223084,"script_address":2065775},{"address":3256192,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":28,"moves":[141,154,170,91],"species":301},{"level":28,"moves":[33,120,124,108],"species":109}],"party_address":3223116,"script_address":2065806},{"address":3256232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":305},{"level":29,"species":178}],"party_address":3223148,"script_address":2202329},{"address":3256272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":358},{"level":27,"species":358},{"level":27,"species":358}],"party_address":3223164,"script_address":2202360},{"address":3256312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":16,"species":392}],"party_address":3223188,"script_address":1971405},{"address":3256352,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3223196,"script_address":2332607},{"address":3256392,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3223276,"script_address":0},{"address":3256432,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3223356,"script_address":0},{"address":3256472,"data_type":"NO_ITEM_CUSTOM_MOVES","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_address":3223436,"script_address":0},{"address":3256512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":369},{"level":32,"species":218},{"level":32,"species":310},{"level":34,"species":278}],"party_address":3223516,"script_address":1986165},{"address":3256552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":369},{"level":32,"species":310},{"level":32,"species":297},{"level":34,"species":281}],"party_address":3223548,"script_address":1986109},{"address":3256592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":369},{"level":32,"species":297},{"level":32,"species":218},{"level":34,"species":284}],"party_address":3223580,"script_address":1986137},{"address":3256632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":369},{"level":32,"species":218},{"level":32,"species":310},{"level":34,"species":278}],"party_address":3223612,"script_address":1986081},{"address":3256672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":369},{"level":32,"species":310},{"level":32,"species":297},{"level":34,"species":281}],"party_address":3223644,"script_address":1986025},{"address":3256712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":369},{"level":32,"species":297},{"level":32,"species":218},{"level":34,"species":284}],"party_address":3223676,"script_address":1986053},{"address":3256752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":313},{"level":31,"species":72},{"level":32,"species":331}],"party_address":3223708,"script_address":2070644},{"address":3256792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":330},{"level":34,"species":73}],"party_address":3223732,"script_address":2070675},{"address":3256832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":129},{"level":25,"species":129},{"level":35,"species":130}],"party_address":3223748,"script_address":2070706},{"address":3256872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":44},{"level":34,"species":184}],"party_address":3223772,"script_address":2071552},{"address":3256912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":300},{"level":34,"species":320}],"party_address":3223788,"script_address":2071583},{"address":3256952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":67}],"party_address":3223804,"script_address":2070799},{"address":3256992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":72},{"level":31,"species":72},{"level":36,"species":313}],"party_address":3223812,"script_address":2071614},{"address":3257032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":305},{"level":32,"species":227}],"party_address":3223836,"script_address":2070737},{"address":3257072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":341},{"level":33,"species":331}],"party_address":3223852,"script_address":2073040},{"address":3257112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":170}],"party_address":3223868,"script_address":2073071},{"address":3257152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":308},{"level":19,"species":308}],"party_address":3223876,"script_address":0},{"address":3257192,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":32,"moves":[47,31,219,76],"species":358},{"level":35,"moves":[53,36,156,89],"species":339}],"party_address":3223892,"script_address":0},{"address":3257232,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":18,"moves":[74,78,72,73],"species":363},{"level":20,"moves":[111,205,44,88],"species":75}],"party_address":3223924,"script_address":0},{"address":3257272,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":27,"moves":[16,60,92,182],"species":294},{"level":27,"moves":[16,72,213,78],"species":292}],"party_address":3223956,"script_address":0},{"address":3257312,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":39,"moves":[94,7,244,182],"species":357},{"level":39,"moves":[8,61,156,187],"species":336}],"party_address":3223988,"script_address":0},{"address":3257352,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":43,"moves":[94,7,244,182],"species":357},{"level":43,"moves":[8,61,156,187],"species":336}],"party_address":3224020,"script_address":0},{"address":3257392,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":46,"moves":[94,7,244,182],"species":357},{"level":46,"moves":[8,61,156,187],"species":336}],"party_address":3224052,"script_address":0},{"address":3257432,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":49,"moves":[94,7,244,182],"species":357},{"level":49,"moves":[8,61,156,187],"species":336}],"party_address":3224084,"script_address":0},{"address":3257472,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":52,"moves":[94,7,244,182],"species":357},{"level":52,"moves":[8,61,156,187],"species":336}],"party_address":3224116,"script_address":0},{"address":3257512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":184},{"level":33,"species":309}],"party_address":3224148,"script_address":0},{"address":3257552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":170},{"level":33,"species":330}],"party_address":3224164,"script_address":0},{"address":3257592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":170},{"level":40,"species":330}],"party_address":3224180,"script_address":0},{"address":3257632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":45,"species":171},{"level":43,"species":330}],"party_address":3224196,"script_address":0},{"address":3257672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":48,"species":171},{"level":46,"species":331}],"party_address":3224212,"script_address":0},{"address":3257712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":51,"species":171},{"level":49,"species":331}],"party_address":3224228,"script_address":0},{"address":3257752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":27,"species":118},{"level":25,"species":72}],"party_address":3224244,"script_address":0},{"address":3257792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":129},{"level":20,"species":72},{"level":26,"species":328},{"level":23,"species":330}],"party_address":3224260,"script_address":2061605},{"address":3257832,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":8,"species":288},{"level":8,"species":286}],"party_address":3224292,"script_address":2054707},{"address":3257872,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":8,"species":295},{"level":8,"species":288}],"party_address":3224308,"script_address":2054676},{"address":3257912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":9,"species":129}],"party_address":3224324,"script_address":2030343},{"address":3257952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":183}],"party_address":3224332,"script_address":2036307},{"address":3257992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":12,"species":72},{"level":12,"species":72}],"party_address":3224340,"script_address":2036276},{"address":3258032,"data_type":"ITEM_DEFAULT_MOVES","party":[{"level":14,"species":354},{"level":14,"species":353}],"party_address":3224356,"script_address":2039032},{"address":3258072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":337},{"level":14,"species":100}],"party_address":3224372,"script_address":2039063},{"address":3258112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":81}],"party_address":3224388,"script_address":2039094},{"address":3258152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":100}],"party_address":3224396,"script_address":2026463},{"address":3258192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":335}],"party_address":3224404,"script_address":2026494},{"address":3258232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":27}],"party_address":3224412,"script_address":2046975},{"address":3258272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":363}],"party_address":3224420,"script_address":2047006},{"address":3258312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":306}],"party_address":3224428,"script_address":2046944},{"address":3258352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":339}],"party_address":3224436,"script_address":2046913},{"address":3258392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":183},{"level":19,"species":296}],"party_address":3224444,"script_address":2050969},{"address":3258432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":227},{"level":19,"species":305}],"party_address":3224460,"script_address":2051000},{"address":3258472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":318},{"level":18,"species":27}],"party_address":3224476,"script_address":2051031},{"address":3258512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":382},{"level":18,"species":382}],"party_address":3224492,"script_address":2051062},{"address":3258552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":296},{"level":18,"species":183}],"party_address":3224508,"script_address":2052309},{"address":3258592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":323}],"party_address":3224524,"script_address":2052371},{"address":3258632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":19,"species":299}],"party_address":3224532,"script_address":2052340},{"address":3258672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":14,"species":288},{"level":14,"species":382},{"level":14,"species":337}],"party_address":3224540,"script_address":2059128},{"address":3258712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":41}],"party_address":3224564,"script_address":2347841},{"address":3258752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":286}],"party_address":3224572,"script_address":2347872},{"address":3258792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":339}],"party_address":3224580,"script_address":2348597},{"address":3258832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":318},{"level":28,"species":41}],"party_address":3224588,"script_address":2348628},{"address":3258872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":318},{"level":28,"species":339}],"party_address":3224604,"script_address":2348659},{"address":3258912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":287}],"party_address":3224620,"script_address":2349324},{"address":3258952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":41}],"party_address":3224628,"script_address":2349355},{"address":3258992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":286}],"party_address":3224636,"script_address":2349386},{"address":3259032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":41}],"party_address":3224644,"script_address":2350264},{"address":3259072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":287}],"party_address":3224652,"script_address":2350826},{"address":3259112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":318}],"party_address":3224660,"script_address":2351566},{"address":3259152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":339}],"party_address":3224668,"script_address":2351597},{"address":3259192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":41}],"party_address":3224676,"script_address":2351628},{"address":3259232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":287}],"party_address":3224684,"script_address":2348566},{"address":3259272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":339}],"party_address":3224692,"script_address":2349293},{"address":3259312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":318}],"party_address":3224700,"script_address":2350295},{"address":3259352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":339},{"level":28,"species":287},{"level":30,"species":41},{"level":33,"species":340}],"party_address":3224708,"script_address":2351659},{"address":3259392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":310},{"level":33,"species":340}],"party_address":3224740,"script_address":2073763},{"address":3259432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":42,"species":287},{"level":43,"species":169},{"level":44,"species":340}],"party_address":3224756,"script_address":0},{"address":3259472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":72}],"party_address":3224780,"script_address":2026525},{"address":3259512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":15,"species":183}],"party_address":3224788,"script_address":2026556},{"address":3259552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":27},{"level":25,"species":27}],"party_address":3224796,"script_address":2033726},{"address":3259592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":304},{"level":25,"species":309}],"party_address":3224812,"script_address":2033695},{"address":3259632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":120}],"party_address":3224828,"script_address":2034744},{"address":3259672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":309},{"level":24,"species":66},{"level":24,"species":72}],"party_address":3224836,"script_address":2034931},{"address":3259712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":24,"species":338},{"level":24,"species":305},{"level":24,"species":338}],"party_address":3224860,"script_address":2034900},{"address":3259752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":227},{"level":25,"species":227}],"party_address":3224884,"script_address":2036338},{"address":3259792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":22,"species":183},{"level":22,"species":296}],"party_address":3224900,"script_address":2047037},{"address":3259832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":22,"species":27},{"level":22,"species":28}],"party_address":3224916,"script_address":2047068},{"address":3259872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":22,"species":304},{"level":22,"species":299}],"party_address":3224932,"script_address":2047099},{"address":3259912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":339},{"level":18,"species":218}],"party_address":3224948,"script_address":2049891},{"address":3259952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":306},{"level":18,"species":363}],"party_address":3224964,"script_address":2049922},{"address":3259992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":84},{"level":26,"species":85}],"party_address":3224980,"script_address":2053203},{"address":3260032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":302},{"level":26,"species":367}],"party_address":3224996,"script_address":2053234},{"address":3260072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":64},{"level":26,"species":393}],"party_address":3225012,"script_address":2053265},{"address":3260112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":356},{"level":26,"species":335}],"party_address":3225028,"script_address":2053296},{"address":3260152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":18,"species":356},{"level":18,"species":351}],"party_address":3225044,"script_address":2053327},{"address":3260192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":8,"species":74},{"level":8,"species":74}],"party_address":3225060,"script_address":2054738},{"address":3260232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":8,"species":306},{"level":8,"species":295}],"party_address":3225076,"script_address":2054769},{"address":3260272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":84}],"party_address":3225092,"script_address":2057834},{"address":3260312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":392}],"party_address":3225100,"script_address":2057865},{"address":3260352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":17,"species":356}],"party_address":3225108,"script_address":2057896},{"address":3260392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":363},{"level":33,"species":357}],"party_address":3225116,"script_address":2073825},{"address":3260432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":338}],"party_address":3225132,"script_address":2061636},{"address":3260472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":218},{"level":25,"species":339}],"party_address":3225140,"script_address":2061667},{"address":3260512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":118}],"party_address":3225156,"script_address":2061698},{"address":3260552,"data_type":"NO_ITEM_CUSTOM_MOVES","party":[{"level":30,"moves":[87,98,86,0],"species":338}],"party_address":3225164,"script_address":2065837},{"address":3260592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":356},{"level":28,"species":335}],"party_address":3225180,"script_address":2065868},{"address":3260632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":294},{"level":29,"species":292}],"party_address":3225196,"script_address":2067487},{"address":3260672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":335},{"level":25,"species":309},{"level":25,"species":369},{"level":25,"species":288},{"level":25,"species":337},{"level":25,"species":339}],"party_address":3225212,"script_address":2067518},{"address":3260712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":25,"species":286},{"level":25,"species":306},{"level":25,"species":337},{"level":25,"species":183},{"level":25,"species":27},{"level":25,"species":367}],"party_address":3225260,"script_address":2067549},{"address":3260752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":29,"species":371},{"level":29,"species":365}],"party_address":3225308,"script_address":2067611},{"address":3260792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":295},{"level":15,"species":280}],"party_address":3225324,"script_address":1978255},{"address":3260832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":13,"species":321},{"level":15,"species":283}],"party_address":3225340,"script_address":1978286},{"address":3260872,"data_type":"ITEM_CUSTOM_MOVES","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_address":3225356,"script_address":0},{"address":3260912,"data_type":"ITEM_CUSTOM_MOVES","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_address":3225420,"script_address":0},{"address":3260952,"data_type":"ITEM_CUSTOM_MOVES","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_address":3225500,"script_address":0},{"address":3260992,"data_type":"ITEM_CUSTOM_MOVES","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_address":3225580,"script_address":0},{"address":3261032,"data_type":"ITEM_CUSTOM_MOVES","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_address":3225676,"script_address":0},{"address":3261072,"data_type":"ITEM_CUSTOM_MOVES","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_address":3225740,"script_address":0},{"address":3261112,"data_type":"ITEM_CUSTOM_MOVES","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_address":3225804,"script_address":0},{"address":3261152,"data_type":"ITEM_CUSTOM_MOVES","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_address":3225884,"script_address":0},{"address":3261192,"data_type":"ITEM_CUSTOM_MOVES","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_address":3225980,"script_address":0},{"address":3261232,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226044,"script_address":0},{"address":3261272,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226124,"script_address":0},{"address":3261312,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226204,"script_address":0},{"address":3261352,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226300,"script_address":0},{"address":3261392,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226364,"script_address":0},{"address":3261432,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226444,"script_address":0},{"address":3261472,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226540,"script_address":0},{"address":3261512,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226636,"script_address":0},{"address":3261552,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226700,"script_address":0},{"address":3261592,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226780,"script_address":0},{"address":3261632,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226860,"script_address":0},{"address":3261672,"data_type":"ITEM_CUSTOM_MOVES","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_address":3226956,"script_address":0},{"address":3261712,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227036,"script_address":0},{"address":3261752,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227132,"script_address":0},{"address":3261792,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227228,"script_address":0},{"address":3261832,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227324,"script_address":0},{"address":3261872,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227404,"script_address":0},{"address":3261912,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227500,"script_address":0},{"address":3261952,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227596,"script_address":0},{"address":3261992,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227692,"script_address":0},{"address":3262032,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227772,"script_address":0},{"address":3262072,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227852,"script_address":0},{"address":3262112,"data_type":"ITEM_CUSTOM_MOVES","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_address":3227948,"script_address":0},{"address":3262152,"data_type":"ITEM_CUSTOM_MOVES","party":[{"level":17,"moves":[95,98,204,0],"species":387},{"level":17,"moves":[95,98,109,0],"species":386}],"party_address":3228044,"script_address":2167732},{"address":3262192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":369}],"party_address":3228076,"script_address":2202422},{"address":3262232,"data_type":"ITEM_CUSTOM_MOVES","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_address":3228084,"script_address":2354502},{"address":3262272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":398}],"party_address":3228180,"script_address":0},{"address":3262312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":398}],"party_address":3228188,"script_address":0},{"address":3262352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":398}],"party_address":3228196,"script_address":0},{"address":3262392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":398}],"party_address":3228204,"script_address":0},{"address":3262432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":398}],"party_address":3228212,"script_address":0},{"address":3262472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":398}],"party_address":3228220,"script_address":0},{"address":3262512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":398}],"party_address":3228228,"script_address":0},{"address":3262552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":27},{"level":31,"species":27}],"party_address":3228236,"script_address":0},{"address":3262592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":320},{"level":33,"species":27},{"level":33,"species":27}],"party_address":3228252,"script_address":0},{"address":3262632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":320},{"level":35,"species":27},{"level":35,"species":27}],"party_address":3228276,"script_address":0},{"address":3262672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":320},{"level":37,"species":28},{"level":37,"species":28}],"party_address":3228300,"script_address":0},{"address":3262712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":309},{"level":30,"species":66},{"level":30,"species":72}],"party_address":3228324,"script_address":0},{"address":3262752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":32,"species":310},{"level":32,"species":66},{"level":32,"species":72}],"party_address":3228348,"script_address":0},{"address":3262792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":310},{"level":34,"species":66},{"level":34,"species":73}],"party_address":3228372,"script_address":0},{"address":3262832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":310},{"level":36,"species":67},{"level":36,"species":73}],"party_address":3228396,"script_address":0},{"address":3262872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":120},{"level":37,"species":120}],"party_address":3228420,"script_address":0},{"address":3262912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":309},{"level":39,"species":120},{"level":39,"species":120}],"party_address":3228436,"script_address":0},{"address":3262952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":310},{"level":41,"species":120},{"level":41,"species":120}],"party_address":3228460,"script_address":0},{"address":3262992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":43,"species":310},{"level":43,"species":121},{"level":43,"species":121}],"party_address":3228484,"script_address":0},{"address":3263032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":67},{"level":37,"species":67}],"party_address":3228508,"script_address":0},{"address":3263072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":335},{"level":39,"species":67},{"level":39,"species":67}],"party_address":3228524,"script_address":0},{"address":3263112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":336},{"level":41,"species":67},{"level":41,"species":67}],"party_address":3228548,"script_address":0},{"address":3263152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":43,"species":336},{"level":43,"species":68},{"level":43,"species":68}],"party_address":3228572,"script_address":0},{"address":3263192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":371},{"level":35,"species":365}],"party_address":3228596,"script_address":0},{"address":3263232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":308},{"level":37,"species":371},{"level":37,"species":365}],"party_address":3228612,"script_address":0},{"address":3263272,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":308},{"level":39,"species":371},{"level":39,"species":365}],"party_address":3228636,"script_address":0},{"address":3263312,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":308},{"level":41,"species":372},{"level":41,"species":366}],"party_address":3228660,"script_address":0},{"address":3263352,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":337},{"level":35,"species":337},{"level":35,"species":371}],"party_address":3228684,"script_address":0},{"address":3263392,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":337},{"level":37,"species":338},{"level":37,"species":371}],"party_address":3228708,"script_address":0},{"address":3263432,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":39,"species":338},{"level":39,"species":338},{"level":39,"species":371}],"party_address":3228732,"script_address":0},{"address":3263472,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":338},{"level":41,"species":338},{"level":41,"species":372}],"party_address":3228756,"script_address":0},{"address":3263512,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":26,"species":74},{"level":26,"species":339}],"party_address":3228780,"script_address":0},{"address":3263552,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":28,"species":66},{"level":28,"species":339},{"level":28,"species":75}],"party_address":3228796,"script_address":0},{"address":3263592,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":30,"species":66},{"level":30,"species":339},{"level":30,"species":75}],"party_address":3228820,"script_address":0},{"address":3263632,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":67},{"level":33,"species":340},{"level":33,"species":76}],"party_address":3228844,"script_address":0},{"address":3263672,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":31,"species":315},{"level":31,"species":287},{"level":31,"species":288},{"level":31,"species":295},{"level":31,"species":298},{"level":31,"species":304}],"party_address":3228868,"script_address":0},{"address":3263712,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":33,"species":315},{"level":33,"species":287},{"level":33,"species":289},{"level":33,"species":296},{"level":33,"species":299},{"level":33,"species":304}],"party_address":3228916,"script_address":0},{"address":3263752,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":35,"species":316},{"level":35,"species":287},{"level":35,"species":289},{"level":35,"species":296},{"level":35,"species":299},{"level":35,"species":305}],"party_address":3228964,"script_address":0},{"address":3263792,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":37,"species":316},{"level":37,"species":287},{"level":37,"species":289},{"level":37,"species":297},{"level":37,"species":300},{"level":37,"species":305}],"party_address":3229012,"script_address":0},{"address":3263832,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":34,"species":313},{"level":34,"species":116}],"party_address":3229060,"script_address":0},{"address":3263872,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":36,"species":325},{"level":36,"species":313},{"level":36,"species":117}],"party_address":3229076,"script_address":0},{"address":3263912,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":38,"species":325},{"level":38,"species":313},{"level":38,"species":117}],"party_address":3229100,"script_address":0},{"address":3263952,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":40,"species":325},{"level":40,"species":314},{"level":40,"species":230}],"party_address":3229124,"script_address":0},{"address":3263992,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":411}],"party_address":3229148,"script_address":2564791},{"address":3264032,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":378},{"level":41,"species":64}],"party_address":3229156,"script_address":2564822},{"address":3264072,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":41,"species":202}],"party_address":3229172,"script_address":0},{"address":3264112,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":4}],"party_address":3229180,"script_address":0},{"address":3264152,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":1}],"party_address":3229188,"script_address":0},{"address":3264192,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":405}],"party_address":3229196,"script_address":0},{"address":3264232,"data_type":"NO_ITEM_DEFAULT_MOVES","party":[{"level":5,"species":404}],"party_address":3229204,"script_address":0}],"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
index cea72eb650..139d75aad0 100644
--- a/worlds/pokemon_emerald/data/items.json
+++ b/worlds/pokemon_emerald/data/items.json
@@ -2,1480 +2,1780 @@
"ITEM_BADGE_1": {
"label": "Stone Badge",
"classification": "PROGRESSION",
- "tags": ["Badge", "Unique"]
+ "tags": ["Badge", "Unique"],
+ "modern_id": null
},
"ITEM_BADGE_2": {
"label": "Knuckle Badge",
"classification": "PROGRESSION",
- "tags": ["Badge", "Unique"]
+ "tags": ["Badge", "Unique"],
+ "modern_id": null
},
"ITEM_BADGE_3": {
"label": "Dynamo Badge",
"classification": "PROGRESSION",
- "tags": ["Badge", "Unique"]
+ "tags": ["Badge", "Unique"],
+ "modern_id": null
},
"ITEM_BADGE_4": {
"label": "Heat Badge",
"classification": "PROGRESSION",
- "tags": ["Badge", "Unique"]
+ "tags": ["Badge", "Unique"],
+ "modern_id": null
},
"ITEM_BADGE_5": {
"label": "Balance Badge",
"classification": "PROGRESSION",
- "tags": ["Badge", "Unique"]
+ "tags": ["Badge", "Unique"],
+ "modern_id": null
},
"ITEM_BADGE_6": {
"label": "Feather Badge",
"classification": "PROGRESSION",
- "tags": ["Badge", "Unique"]
+ "tags": ["Badge", "Unique"],
+ "modern_id": null
},
"ITEM_BADGE_7": {
"label": "Mind Badge",
"classification": "PROGRESSION",
- "tags": ["Badge", "Unique"]
+ "tags": ["Badge", "Unique"],
+ "modern_id": null
},
"ITEM_BADGE_8": {
"label": "Rain Badge",
"classification": "PROGRESSION",
- "tags": ["Badge", "Unique"]
+ "tags": ["Badge", "Unique"],
+ "modern_id": null
},
- "ITEM_HM01_CUT": {
+ "ITEM_HM_CUT": {
"label": "HM01 Cut",
"classification": "PROGRESSION",
- "tags": ["HM", "Unique"]
+ "tags": ["HM", "Unique"],
+ "modern_id": 420
},
- "ITEM_HM02_FLY": {
+ "ITEM_HM_FLY": {
"label": "HM02 Fly",
"classification": "PROGRESSION",
- "tags": ["HM", "Unique"]
+ "tags": ["HM", "Unique"],
+ "modern_id": 421
},
- "ITEM_HM03_SURF": {
+ "ITEM_HM_SURF": {
"label": "HM03 Surf",
"classification": "PROGRESSION",
- "tags": ["HM", "Unique"]
+ "tags": ["HM", "Unique"],
+ "modern_id": 422
},
- "ITEM_HM04_STRENGTH": {
+ "ITEM_HM_STRENGTH": {
"label": "HM04 Strength",
"classification": "PROGRESSION",
- "tags": ["HM", "Unique"]
+ "tags": ["HM", "Unique"],
+ "modern_id": 423
},
- "ITEM_HM05_FLASH": {
+ "ITEM_HM_FLASH": {
"label": "HM05 Flash",
"classification": "PROGRESSION",
- "tags": ["HM", "Unique"]
+ "tags": ["HM", "Unique"],
+ "modern_id": 424
},
- "ITEM_HM06_ROCK_SMASH": {
+ "ITEM_HM_ROCK_SMASH": {
"label": "HM06 Rock Smash",
"classification": "PROGRESSION",
- "tags": ["HM", "Unique"]
+ "tags": ["HM", "Unique"],
+ "modern_id": 425
},
- "ITEM_HM07_WATERFALL": {
+ "ITEM_HM_WATERFALL": {
"label": "HM07 Waterfall",
"classification": "PROGRESSION",
- "tags": ["HM", "Unique"]
+ "tags": ["HM", "Unique"],
+ "modern_id": 737
},
- "ITEM_HM08_DIVE": {
+ "ITEM_HM_DIVE": {
"label": "HM08 Dive",
"classification": "PROGRESSION",
- "tags": ["HM", "Unique"]
+ "tags": ["HM", "Unique"],
+ "modern_id": null
},
"ITEM_MACH_BIKE": {
"label": "Mach Bike",
"classification": "PROGRESSION",
- "tags": ["Bike", "Unique"]
+ "tags": ["Bike", "Unique"],
+ "modern_id": 718
},
"ITEM_ACRO_BIKE": {
"label": "Acro Bike",
"classification": "PROGRESSION",
- "tags": ["Bike", "Unique"]
+ "tags": ["Bike", "Unique"],
+ "modern_id": 719
},
"ITEM_DEVON_GOODS": {
"label": "Devon Goods",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 721
},
"ITEM_LETTER": {
"label": "Letter",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 725
},
"ITEM_ITEMFINDER": {
"label": "Itemfinder",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": null
},
"ITEM_METEORITE": {
"label": "Meteorite",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 729
},
"ITEM_GO_GOGGLES": {
"label": "Go Goggles",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 728
},
"ITEM_ROOM_1_KEY": {
"label": "Room 1 Key",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 730
},
"ITEM_ROOM_2_KEY": {
"label": "Room 2 Key",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 731
},
"ITEM_ROOM_4_KEY": {
"label": "Room 4 Key",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 732
},
"ITEM_ROOM_6_KEY": {
"label": "Room 6 Key",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 733
},
"ITEM_STORAGE_KEY": {
"label": "Storage Key",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 734
},
"ITEM_SCANNER": {
"label": "Scanner",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 727
},
"ITEM_BASEMENT_KEY": {
"label": "Basement Key",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 476
},
"ITEM_DEVON_SCOPE": {
"label": "Devon Scope",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 735
},
"ITEM_MAGMA_EMBLEM": {
"label": "Magma Emblem",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": null
},
"ITEM_POKEBLOCK_CASE": {
"label": "Pokeblock Case",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 724
},
"ITEM_SS_TICKET": {
"label": "S.S. Ticket",
"classification": "PROGRESSION",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 736
},
"ITEM_WAILMER_PAIL": {
"label": "Wailmer Pail",
- "classification": "USEFUL",
- "tags": ["Unique"]
+ "classification": "PROGRESSION",
+ "tags": ["Unique"],
+ "modern_id": 720
},
"ITEM_POWDER_JAR": {
"label": "Powder Jar",
"classification": "FILLER",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": null
},
"ITEM_COIN_CASE": {
"label": "Coin Case",
"classification": "FILLER",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 444
},
"ITEM_CONTEST_PASS": {
"label": "Contest Pass",
"classification": "FILLER",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 457
},
"ITEM_SOOT_SACK": {
"label": "Soot Sack",
"classification": "FILLER",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 722
},
"ITEM_ROOT_FOSSIL": {
"label": "Root Fossil",
"classification": "FILLER",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 99
},
"ITEM_CLAW_FOSSIL": {
"label": "Claw Fossil",
"classification": "FILLER",
- "tags": ["Unique"]
+ "tags": ["Unique"],
+ "modern_id": 100
},
"ITEM_EON_TICKET": {
"label": "Eon Ticket",
- "classification": "FILLER",
- "tags": ["Unique"]
+ "classification": "PROGRESSION",
+ "tags": ["Unique"],
+ "modern_id": 726
},
"ITEM_OLD_SEA_MAP": {
"label": "Old Sea Map",
- "classification": "FILLER",
- "tags": ["Unique"]
+ "classification": "PROGRESSION",
+ "tags": ["Unique"],
+ "modern_id": null
+ },
+ "ITEM_MYSTIC_TICKET": {
+ "label": "Mystic Ticket",
+ "classification": "PROGRESSION",
+ "tags": ["Unique"],
+ "modern_id": null
+ },
+ "ITEM_AURORA_TICKET": {
+ "label": "Aurora Ticket",
+ "classification": "PROGRESSION",
+ "tags": ["Unique"],
+ "modern_id": null
},
-
"ITEM_OLD_ROD": {
"label": "Old Rod",
- "classification": "USEFUL",
- "tags": ["Rod", "Unique"]
+ "classification": "PROGRESSION",
+ "tags": ["Rod", "Unique"],
+ "modern_id": 445
},
"ITEM_GOOD_ROD": {
"label": "Good Rod",
- "classification": "USEFUL",
- "tags": ["Rod", "Unique"]
+ "classification": "PROGRESSION",
+ "tags": ["Rod", "Unique"],
+ "modern_id": 446
},
"ITEM_SUPER_ROD": {
"label": "Super Rod",
- "classification": "USEFUL",
- "tags": ["Rod", "Unique"]
+ "classification": "PROGRESSION",
+ "tags": ["Rod", "Unique"],
+ "modern_id": 447
},
"ITEM_MASTER_BALL": {
"label": "Master Ball",
"classification": "USEFUL",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 1
},
"ITEM_ULTRA_BALL": {
"label": "Ultra Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 2
},
"ITEM_GREAT_BALL": {
"label": "Great Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 3
},
"ITEM_POKE_BALL": {
"label": "Poke Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 4
},
"ITEM_SAFARI_BALL": {
"label": "Safari Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 5
},
"ITEM_NET_BALL": {
"label": "Net Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 6
},
"ITEM_DIVE_BALL": {
"label": "Dive Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 7
},
"ITEM_NEST_BALL": {
"label": "Nest Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 8
},
"ITEM_REPEAT_BALL": {
"label": "Repeat Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 9
},
"ITEM_TIMER_BALL": {
"label": "Timer Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 10
},
"ITEM_LUXURY_BALL": {
"label": "Luxury Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 11
},
"ITEM_PREMIER_BALL": {
"label": "Premier Ball",
"classification": "FILLER",
- "tags": ["Ball"]
+ "tags": ["Ball"],
+ "modern_id": 12
},
"ITEM_POTION": {
"label": "Potion",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 17
},
"ITEM_ANTIDOTE": {
"label": "Antidote",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 18
},
"ITEM_BURN_HEAL": {
"label": "Burn Heal",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 19
},
"ITEM_ICE_HEAL": {
"label": "Ice Heal",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 20
},
"ITEM_AWAKENING": {
"label": "Awakening",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 21
},
"ITEM_PARALYZE_HEAL": {
"label": "Paralyze Heal",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 22
},
"ITEM_FULL_RESTORE": {
"label": "Full Restore",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 23
},
"ITEM_MAX_POTION": {
"label": "Max Potion",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 24
},
"ITEM_HYPER_POTION": {
"label": "Hyper Potion",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 25
},
"ITEM_SUPER_POTION": {
"label": "Super Potion",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 26
},
"ITEM_FULL_HEAL": {
"label": "Full Heal",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 27
},
"ITEM_REVIVE": {
"label": "Revive",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 28
},
"ITEM_MAX_REVIVE": {
"label": "Max Revive",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 29
},
"ITEM_FRESH_WATER": {
"label": "Fresh Water",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 30
},
"ITEM_SODA_POP": {
"label": "Soda Pop",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 31
},
"ITEM_LEMONADE": {
"label": "Lemonade",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 32
},
"ITEM_MOOMOO_MILK": {
"label": "Moomoo Milk",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 33
},
"ITEM_ENERGY_POWDER": {
"label": "Energy Powder",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 34
},
"ITEM_ENERGY_ROOT": {
"label": "Energy Root",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 35
},
"ITEM_HEAL_POWDER": {
"label": "Heal Powder",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 36
},
"ITEM_REVIVAL_HERB": {
"label": "Revival Herb",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 37
},
"ITEM_ETHER": {
"label": "Ether",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 38
},
"ITEM_MAX_ETHER": {
"label": "Max Ether",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 39
},
"ITEM_ELIXIR": {
"label": "Elixir",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 40
},
"ITEM_MAX_ELIXIR": {
"label": "Max Elixir",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 41
},
"ITEM_LAVA_COOKIE": {
"label": "Lava Cookie",
"classification": "FILLER",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 42
+ },
+ "ITEM_BERRY_JUICE": {
+ "label": "Berry Juice",
+ "classification": "FILLER",
+ "tags": ["Heal"],
+ "modern_id": 43
},
"ITEM_SACRED_ASH": {
"label": "Sacred Ash",
"classification": "USEFUL",
- "tags": ["Heal"]
+ "tags": ["Heal"],
+ "modern_id": 44
},
- "ITEM_BERRY_JUICE": {
- "label": "Berry Juice",
- "classification": "FILLER",
- "tags": ["Misc"]
- },
"ITEM_SHOAL_SALT": {
"label": "Shoal Salt",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 70
},
"ITEM_SHOAL_SHELL": {
"label": "Shoal Shell",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 71
},
"ITEM_RED_SHARD": {
"label": "Red Shard",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 72
},
"ITEM_BLUE_SHARD": {
"label": "Blue Shard",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 73
},
"ITEM_YELLOW_SHARD": {
"label": "Yellow Shard",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 74
},
"ITEM_GREEN_SHARD": {
"label": "Green Shard",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 75
},
"ITEM_HP_UP": {
"label": "HP Up",
"classification": "FILLER",
- "tags": ["Vitamin"]
+ "tags": ["Vitamin"],
+ "modern_id": 45
},
"ITEM_PROTEIN": {
"label": "Protein",
"classification": "FILLER",
- "tags": ["Vitamin"]
+ "tags": ["Vitamin"],
+ "modern_id": 46
},
"ITEM_IRON": {
"label": "Iron",
"classification": "FILLER",
- "tags": ["Vitamin"]
+ "tags": ["Vitamin"],
+ "modern_id": 47
},
"ITEM_CARBOS": {
"label": "Carbos",
"classification": "FILLER",
- "tags": ["Vitamin"]
+ "tags": ["Vitamin"],
+ "modern_id": 48
},
"ITEM_CALCIUM": {
"label": "Calcium",
"classification": "FILLER",
- "tags": ["Vitamin"]
+ "tags": ["Vitamin"],
+ "modern_id": 49
},
"ITEM_ZINC": {
"label": "Zinc",
"classification": "FILLER",
- "tags": ["Vitamin"]
+ "tags": ["Vitamin"],
+ "modern_id": 52
},
"ITEM_PP_UP": {
"label": "PP Up",
"classification": "FILLER",
- "tags": ["Vitamin"]
+ "tags": ["Vitamin"],
+ "modern_id": 51
},
"ITEM_PP_MAX": {
"label": "PP Max",
"classification": "FILLER",
- "tags": ["Vitamin"]
+ "tags": ["Vitamin"],
+ "modern_id": 53
},
"ITEM_RARE_CANDY": {
"label": "Rare Candy",
"classification": "USEFUL",
- "tags": ["Vitamin"]
+ "tags": ["Candy"],
+ "modern_id": 50
},
"ITEM_GUARD_SPEC": {
"label": "Guard Spec",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 55
},
"ITEM_DIRE_HIT": {
"label": "Dire Hit",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 56
},
"ITEM_X_ATTACK": {
"label": "X Attack",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 57
},
"ITEM_X_DEFEND": {
"label": "X Defend",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 58
},
"ITEM_X_SPEED": {
"label": "X Speed",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 59
},
"ITEM_X_ACCURACY": {
"label": "X Accuracy",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 60
},
"ITEM_X_SPECIAL": {
"label": "X Special",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 61
},
"ITEM_REPEL": {
"label": "Repel",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 79
},
"ITEM_SUPER_REPEL": {
"label": "Super Repel",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 76
},
"ITEM_MAX_REPEL": {
"label": "Max Repel",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 77
},
"ITEM_POKE_DOLL": {
"label": "Poke Doll",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 63
},
"ITEM_FLUFFY_TAIL": {
"label": "Fluffy Tail",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 64
},
"ITEM_ESCAPE_ROPE": {
"label": "Escape Rope",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 78
},
"ITEM_BLUE_FLUTE": {
"label": "Blue Flute",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 65
},
"ITEM_YELLOW_FLUTE": {
"label": "Yellow Flute",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 66
},
"ITEM_RED_FLUTE": {
"label": "Red Flute",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 67
},
"ITEM_BLACK_FLUTE": {
"label": "Black Flute",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 68
},
"ITEM_WHITE_FLUTE": {
"label": "White Flute",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 69
},
"ITEM_HEART_SCALE": {
"label": "Heart Scale",
"classification": "FILLER",
- "tags": ["Misc"]
+ "tags": ["Misc"],
+ "modern_id": 93
},
"ITEM_SUN_STONE": {
"label": "Sun Stone",
"classification": "USEFUL",
- "tags": ["EvoStone"]
+ "tags": ["EvoStone"],
+ "modern_id": 80
},
"ITEM_MOON_STONE": {
"label": "Moon Stone",
"classification": "USEFUL",
- "tags": ["EvoStone"]
+ "tags": ["EvoStone"],
+ "modern_id": 81
},
"ITEM_FIRE_STONE": {
"label": "Fire Stone",
"classification": "USEFUL",
- "tags": ["EvoStone"]
+ "tags": ["EvoStone"],
+ "modern_id": 82
},
"ITEM_THUNDER_STONE": {
"label": "Thunder Stone",
"classification": "USEFUL",
- "tags": ["EvoStone"]
+ "tags": ["EvoStone"],
+ "modern_id": 83
},
"ITEM_WATER_STONE": {
"label": "Water Stone",
"classification": "USEFUL",
- "tags": ["EvoStone"]
+ "tags": ["EvoStone"],
+ "modern_id": 84
},
"ITEM_LEAF_STONE": {
"label": "Leaf Stone",
"classification": "USEFUL",
- "tags": ["EvoStone"]
+ "tags": ["EvoStone"],
+ "modern_id": 85
},
"ITEM_TINY_MUSHROOM": {
"label": "Tiny Mushroom",
"classification": "FILLER",
- "tags": ["Money"]
+ "tags": ["Money"],
+ "modern_id": 86
},
"ITEM_BIG_MUSHROOM": {
"label": "Big Mushroom",
"classification": "FILLER",
- "tags": ["Money"]
+ "tags": ["Money"],
+ "modern_id": 87
},
"ITEM_PEARL": {
"label": "Pearl",
"classification": "FILLER",
- "tags": ["Money"]
+ "tags": ["Money"],
+ "modern_id": 88
},
"ITEM_BIG_PEARL": {
"label": "Big Pearl",
"classification": "FILLER",
- "tags": ["Money"]
+ "tags": ["Money"],
+ "modern_id": 89
},
"ITEM_STARDUST": {
"label": "Stardust",
"classification": "FILLER",
- "tags": ["Money"]
+ "tags": ["Money"],
+ "modern_id": 90
},
"ITEM_STAR_PIECE": {
"label": "Star Piece",
"classification": "FILLER",
- "tags": ["Money"]
+ "tags": ["Money"],
+ "modern_id": 91
},
"ITEM_NUGGET": {
"label": "Nugget",
"classification": "FILLER",
- "tags": ["Money"]
+ "tags": ["Money"],
+ "modern_id": 92
},
"ITEM_ORANGE_MAIL": {
"label": "Orange Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 137
},
"ITEM_HARBOR_MAIL": {
"label": "Harbor Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 138
},
"ITEM_GLITTER_MAIL": {
"label": "Glitter Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 139
},
"ITEM_MECH_MAIL": {
"label": "Mech Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 140
},
"ITEM_WOOD_MAIL": {
"label": "Wood Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 141
},
"ITEM_WAVE_MAIL": {
"label": "Wave Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 142
},
"ITEM_BEAD_MAIL": {
"label": "Bead Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 143
},
"ITEM_SHADOW_MAIL": {
"label": "Shadow Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 144
},
"ITEM_TROPIC_MAIL": {
"label": "Tropic Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 145
},
"ITEM_DREAM_MAIL": {
"label": "Dream Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 146
},
"ITEM_FAB_MAIL": {
"label": "Fab Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 147
},
"ITEM_RETRO_MAIL": {
"label": "Retro Mail",
"classification": "FILLER",
- "tags": ["Mail"]
+ "tags": ["Mail"],
+ "modern_id": 148
},
"ITEM_CHERI_BERRY": {
"label": "Cheri Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 149
},
"ITEM_CHESTO_BERRY": {
"label": "Chesto Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 150
},
"ITEM_PECHA_BERRY": {
"label": "Pecha Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 151
},
"ITEM_RAWST_BERRY": {
"label": "Rawst Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 152
},
"ITEM_ASPEAR_BERRY": {
"label": "Aspear Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 153
},
"ITEM_LEPPA_BERRY": {
"label": "Leppa Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 154
},
"ITEM_ORAN_BERRY": {
"label": "Oran Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 155
},
"ITEM_PERSIM_BERRY": {
"label": "Persim Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 156
},
"ITEM_LUM_BERRY": {
"label": "Lum Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 157
},
"ITEM_SITRUS_BERRY": {
"label": "Sitrus Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 158
},
"ITEM_FIGY_BERRY": {
"label": "Figy Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 159
},
"ITEM_WIKI_BERRY": {
"label": "Wiki Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 160
},
"ITEM_MAGO_BERRY": {
"label": "Mago Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 161
},
"ITEM_AGUAV_BERRY": {
"label": "Aguav Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 162
},
"ITEM_IAPAPA_BERRY": {
"label": "Iapapa Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 163
},
"ITEM_RAZZ_BERRY": {
"label": "Razz Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 164
},
"ITEM_BLUK_BERRY": {
"label": "Bluk Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 165
},
"ITEM_NANAB_BERRY": {
"label": "Nanab Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 166
},
"ITEM_WEPEAR_BERRY": {
"label": "Wepear Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 167
},
"ITEM_PINAP_BERRY": {
"label": "Pinap Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 168
},
"ITEM_POMEG_BERRY": {
"label": "Pomeg Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 169
},
"ITEM_KELPSY_BERRY": {
"label": "Kelpsy Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 170
},
"ITEM_QUALOT_BERRY": {
"label": "Qualot Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 171
},
"ITEM_HONDEW_BERRY": {
"label": "Hondew Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 172
},
"ITEM_GREPA_BERRY": {
"label": "Grepa Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 173
},
"ITEM_TAMATO_BERRY": {
"label": "Tamato Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 174
},
"ITEM_CORNN_BERRY": {
"label": "Cornn Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 175
},
"ITEM_MAGOST_BERRY": {
"label": "Magost Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 176
},
"ITEM_RABUTA_BERRY": {
"label": "Rabuta Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 177
},
"ITEM_NOMEL_BERRY": {
"label": "Nomel Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 178
},
"ITEM_SPELON_BERRY": {
"label": "Spelon Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 179
},
"ITEM_PAMTRE_BERRY": {
"label": "Pamtre Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 180
},
"ITEM_WATMEL_BERRY": {
"label": "Watmel Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 181
},
"ITEM_DURIN_BERRY": {
"label": "Durin Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 182
},
"ITEM_BELUE_BERRY": {
"label": "Belue Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 183
},
"ITEM_LIECHI_BERRY": {
"label": "Liechi Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 201
},
"ITEM_GANLON_BERRY": {
"label": "Ganlon Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 202
},
"ITEM_SALAC_BERRY": {
"label": "Salac Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 203
},
"ITEM_PETAYA_BERRY": {
"label": "Petaya Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 204
},
"ITEM_APICOT_BERRY": {
"label": "Apicot Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 205
},
"ITEM_LANSAT_BERRY": {
"label": "Lansat Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 206
},
"ITEM_STARF_BERRY": {
"label": "Starf Berry",
"classification": "FILLER",
- "tags": ["Berry"]
+ "tags": ["Berry"],
+ "modern_id": 207
},
"ITEM_BRIGHT_POWDER": {
"label": "Bright Powder",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 213
},
"ITEM_WHITE_HERB": {
"label": "White Herb",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 214
},
"ITEM_MACHO_BRACE": {
"label": "Macho Brace",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 215
},
"ITEM_EXP_SHARE": {
"label": "Exp. Share",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 216
},
"ITEM_QUICK_CLAW": {
"label": "Quick Claw",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 217
},
"ITEM_SOOTHE_BELL": {
"label": "Soothe Bell",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 218
},
"ITEM_MENTAL_HERB": {
"label": "Mental Herb",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 219
},
"ITEM_CHOICE_BAND": {
"label": "Choice Band",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 220
},
"ITEM_KINGS_ROCK": {
"label": "King's Rock",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 221
},
"ITEM_SILVER_POWDER": {
"label": "Silver Powder",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 222
},
"ITEM_AMULET_COIN": {
"label": "Amulet Coin",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 223
},
"ITEM_CLEANSE_TAG": {
"label": "Cleanse Tag",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 224
},
"ITEM_SOUL_DEW": {
"label": "Soul Dew",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 225
},
"ITEM_DEEP_SEA_TOOTH": {
"label": "Deep Sea Tooth",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 226
},
"ITEM_DEEP_SEA_SCALE": {
"label": "Deep Sea Scale",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 227
},
"ITEM_SMOKE_BALL": {
"label": "Smoke Ball",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 228
},
"ITEM_EVERSTONE": {
"label": "Everstone",
"classification": "FILLER",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 229
},
"ITEM_FOCUS_BAND": {
"label": "Focus Band",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 230
},
"ITEM_LUCKY_EGG": {
"label": "Lucky Egg",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 231
},
"ITEM_SCOPE_LENS": {
"label": "Scope Lens",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 232
},
"ITEM_METAL_COAT": {
"label": "Metal Coat",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 233
},
"ITEM_LEFTOVERS": {
"label": "Leftovers",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 234
},
"ITEM_DRAGON_SCALE": {
"label": "Dragon Scale",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 235
},
"ITEM_LIGHT_BALL": {
"label": "Light Ball",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 236
},
"ITEM_SOFT_SAND": {
"label": "Soft Sand",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 237
},
"ITEM_HARD_STONE": {
"label": "Hard Stone",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 238
},
"ITEM_MIRACLE_SEED": {
"label": "Miracle Seed",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 239
},
"ITEM_BLACK_GLASSES": {
"label": "Black Glasses",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 240
},
"ITEM_BLACK_BELT": {
"label": "Black Belt",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 241
},
"ITEM_MAGNET": {
"label": "Magnet",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 242
},
"ITEM_MYSTIC_WATER": {
"label": "Mystic Water",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 243
},
"ITEM_SHARP_BEAK": {
"label": "Sharp Beak",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 244
},
"ITEM_POISON_BARB": {
"label": "Poison Barb",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 245
},
"ITEM_NEVER_MELT_ICE": {
"label": "Never-Melt Ice",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 246
},
"ITEM_SPELL_TAG": {
"label": "Spell Tag",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 247
},
"ITEM_TWISTED_SPOON": {
"label": "Twisted Spoon",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 248
},
"ITEM_CHARCOAL": {
"label": "Charcoal",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 249
},
"ITEM_DRAGON_FANG": {
"label": "Dragon Fang",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 250
},
"ITEM_SILK_SCARF": {
"label": "Silk Scarf",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 251
},
"ITEM_UP_GRADE": {
"label": "Up-Grade",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 252
},
"ITEM_SHELL_BELL": {
"label": "Shell Bell",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 253
},
"ITEM_SEA_INCENSE": {
"label": "Sea Incense",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 254
},
"ITEM_LAX_INCENSE": {
"label": "Lax Incense",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 255
},
"ITEM_LUCKY_PUNCH": {
"label": "Lucky Punch",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 256
},
"ITEM_METAL_POWDER": {
"label": "Metal Powder",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 257
},
"ITEM_THICK_CLUB": {
"label": "Thick Club",
"classification": "USEFUL",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 258
},
"ITEM_STICK": {
"label": "Stick",
"classification": "FILLER",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 259
},
"ITEM_RED_SCARF": {
"label": "Red Scarf",
"classification": "FILLER",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 260
},
"ITEM_BLUE_SCARF": {
"label": "Blue Scarf",
"classification": "FILLER",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 261
},
"ITEM_PINK_SCARF": {
"label": "Pink Scarf",
"classification": "FILLER",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 262
},
"ITEM_GREEN_SCARF": {
"label": "Green Scarf",
"classification": "FILLER",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 263
},
"ITEM_YELLOW_SCARF": {
"label": "Yellow Scarf",
"classification": "FILLER",
- "tags": ["Held"]
+ "tags": ["Held"],
+ "modern_id": 264
},
- "ITEM_TM01_FOCUS_PUNCH": {
+ "ITEM_TM_FOCUS_PUNCH": {
"label": "TM01",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 328
},
- "ITEM_TM02_DRAGON_CLAW": {
+ "ITEM_TM_DRAGON_CLAW": {
"label": "TM02",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 329
},
- "ITEM_TM03_WATER_PULSE": {
+ "ITEM_TM_WATER_PULSE": {
"label": "TM03",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 330
},
- "ITEM_TM04_CALM_MIND": {
+ "ITEM_TM_CALM_MIND": {
"label": "TM04",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 331
},
- "ITEM_TM05_ROAR": {
+ "ITEM_TM_ROAR": {
"label": "TM05",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 332
},
- "ITEM_TM06_TOXIC": {
+ "ITEM_TM_TOXIC": {
"label": "TM06",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 333
},
- "ITEM_TM07_HAIL": {
+ "ITEM_TM_HAIL": {
"label": "TM07",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 334
},
- "ITEM_TM08_BULK_UP": {
+ "ITEM_TM_BULK_UP": {
"label": "TM08",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 335
},
- "ITEM_TM09_BULLET_SEED": {
+ "ITEM_TM_BULLET_SEED": {
"label": "TM09",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 336
},
- "ITEM_TM10_HIDDEN_POWER": {
+ "ITEM_TM_HIDDEN_POWER": {
"label": "TM10",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 337
},
- "ITEM_TM11_SUNNY_DAY": {
+ "ITEM_TM_SUNNY_DAY": {
"label": "TM11",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 338
},
- "ITEM_TM12_TAUNT": {
+ "ITEM_TM_TAUNT": {
"label": "TM12",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 339
},
- "ITEM_TM13_ICE_BEAM": {
+ "ITEM_TM_ICE_BEAM": {
"label": "TM13",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 340
},
- "ITEM_TM14_BLIZZARD": {
+ "ITEM_TM_BLIZZARD": {
"label": "TM14",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 341
},
- "ITEM_TM15_HYPER_BEAM": {
+ "ITEM_TM_HYPER_BEAM": {
"label": "TM15",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 342
},
- "ITEM_TM16_LIGHT_SCREEN": {
+ "ITEM_TM_LIGHT_SCREEN": {
"label": "TM16",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 343
},
- "ITEM_TM17_PROTECT": {
+ "ITEM_TM_PROTECT": {
"label": "TM17",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 344
},
- "ITEM_TM18_RAIN_DANCE": {
+ "ITEM_TM_RAIN_DANCE": {
"label": "TM18",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 345
},
- "ITEM_TM19_GIGA_DRAIN": {
+ "ITEM_TM_GIGA_DRAIN": {
"label": "TM19",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 346
},
- "ITEM_TM20_SAFEGUARD": {
+ "ITEM_TM_SAFEGUARD": {
"label": "TM20",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 347
},
- "ITEM_TM21_FRUSTRATION": {
+ "ITEM_TM_FRUSTRATION": {
"label": "TM21",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 348
},
- "ITEM_TM22_SOLAR_BEAM": {
+ "ITEM_TM_SOLAR_BEAM": {
"label": "TM22",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 349
},
- "ITEM_TM23_IRON_TAIL": {
+ "ITEM_TM_IRON_TAIL": {
"label": "TM23",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 350
},
- "ITEM_TM24_THUNDERBOLT": {
+ "ITEM_TM_THUNDERBOLT": {
"label": "TM24",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 351
},
- "ITEM_TM25_THUNDER": {
+ "ITEM_TM_THUNDER": {
"label": "TM25",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 352
},
- "ITEM_TM26_EARTHQUAKE": {
+ "ITEM_TM_EARTHQUAKE": {
"label": "TM26",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 353
},
- "ITEM_TM27_RETURN": {
+ "ITEM_TM_RETURN": {
"label": "TM27",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 354
},
- "ITEM_TM28_DIG": {
+ "ITEM_TM_DIG": {
"label": "TM28",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 355
},
- "ITEM_TM29_PSYCHIC": {
+ "ITEM_TM_PSYCHIC": {
"label": "TM29",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 356
},
- "ITEM_TM30_SHADOW_BALL": {
+ "ITEM_TM_SHADOW_BALL": {
"label": "TM30",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 357
},
- "ITEM_TM31_BRICK_BREAK": {
+ "ITEM_TM_BRICK_BREAK": {
"label": "TM31",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 358
},
- "ITEM_TM32_DOUBLE_TEAM": {
+ "ITEM_TM_DOUBLE_TEAM": {
"label": "TM32",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 359
},
- "ITEM_TM33_REFLECT": {
+ "ITEM_TM_REFLECT": {
"label": "TM33",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 360
},
- "ITEM_TM34_SHOCK_WAVE": {
+ "ITEM_TM_SHOCK_WAVE": {
"label": "TM34",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 361
},
- "ITEM_TM35_FLAMETHROWER": {
+ "ITEM_TM_FLAMETHROWER": {
"label": "TM35",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 362
},
- "ITEM_TM36_SLUDGE_BOMB": {
+ "ITEM_TM_SLUDGE_BOMB": {
"label": "TM36",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 363
},
- "ITEM_TM37_SANDSTORM": {
+ "ITEM_TM_SANDSTORM": {
"label": "TM37",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 364
},
- "ITEM_TM38_FIRE_BLAST": {
+ "ITEM_TM_FIRE_BLAST": {
"label": "TM38",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 365
},
- "ITEM_TM39_ROCK_TOMB": {
+ "ITEM_TM_ROCK_TOMB": {
"label": "TM39",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 366
},
- "ITEM_TM40_AERIAL_ACE": {
+ "ITEM_TM_AERIAL_ACE": {
"label": "TM40",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 367
},
- "ITEM_TM41_TORMENT": {
+ "ITEM_TM_TORMENT": {
"label": "TM41",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 368
},
- "ITEM_TM42_FACADE": {
+ "ITEM_TM_FACADE": {
"label": "TM42",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 369
},
- "ITEM_TM43_SECRET_POWER": {
+ "ITEM_TM_SECRET_POWER": {
"label": "TM43",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 370
},
- "ITEM_TM44_REST": {
+ "ITEM_TM_REST": {
"label": "TM44",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 371
},
- "ITEM_TM45_ATTRACT": {
+ "ITEM_TM_ATTRACT": {
"label": "TM45",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 372
},
- "ITEM_TM46_THIEF": {
+ "ITEM_TM_THIEF": {
"label": "TM46",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 373
},
- "ITEM_TM47_STEEL_WING": {
+ "ITEM_TM_STEEL_WING": {
"label": "TM47",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 374
},
- "ITEM_TM48_SKILL_SWAP": {
+ "ITEM_TM_SKILL_SWAP": {
"label": "TM48",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 375
},
- "ITEM_TM49_SNATCH": {
+ "ITEM_TM_SNATCH": {
"label": "TM49",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 376
},
- "ITEM_TM50_OVERHEAT": {
+ "ITEM_TM_OVERHEAT": {
"label": "TM50",
"classification": "USEFUL",
- "tags": ["TM"]
+ "tags": ["TM"],
+ "modern_id": 377
}
}
diff --git a/worlds/pokemon_emerald/data/locations.json b/worlds/pokemon_emerald/data/locations.json
index a44ec204a0..fdaec9b83c 100644
--- a/worlds/pokemon_emerald/data/locations.json
+++ b/worlds/pokemon_emerald/data/locations.json
@@ -32,35 +32,35 @@
"tags": ["Badge"]
},
- "NPC_GIFT_RECEIVED_HM01": {
+ "NPC_GIFT_RECEIVED_HM_CUT": {
"label": "Rustboro City - HM01 from Cutter's House",
"tags": ["HM"]
},
- "NPC_GIFT_RECEIVED_HM02": {
+ "NPC_GIFT_RECEIVED_HM_FLY": {
"label": "Route 119 - HM02 from Rival Battle",
"tags": ["HM"]
},
- "NPC_GIFT_RECEIVED_HM03": {
+ "NPC_GIFT_RECEIVED_HM_SURF": {
"label": "Petalburg City - HM03 from Wally's Uncle",
"tags": ["HM"]
},
- "NPC_GIFT_RECEIVED_HM04": {
+ "NPC_GIFT_RECEIVED_HM_STRENGTH": {
"label": "Rusturf Tunnel - HM04 from Tunneler",
"tags": ["HM"]
},
- "NPC_GIFT_RECEIVED_HM05": {
+ "NPC_GIFT_RECEIVED_HM_FLASH": {
"label": "Granite Cave 1F - HM05 from Hiker",
"tags": ["HM"]
},
- "NPC_GIFT_RECEIVED_HM06": {
+ "NPC_GIFT_RECEIVED_HM_ROCK_SMASH": {
"label": "Mauville City - HM06 from Rock Smash Guy",
"tags": ["HM"]
},
- "NPC_GIFT_RECEIVED_HM07": {
+ "NPC_GIFT_RECEIVED_HM_WATERFALL": {
"label": "Sootopolis City - HM07 from Wallace",
"tags": ["HM"]
},
- "NPC_GIFT_RECEIVED_HM08": {
+ "NPC_GIFT_RECEIVED_HM_DIVE": {
"label": "Mossdeep City - HM08 from Steven's House",
"tags": ["HM"]
},
@@ -119,23 +119,23 @@
"tags": ["KeyItem"]
},
"HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY": {
- "label": "Abandoned Ship HF - Hidden Item in Room 1",
+ "label": "Abandoned Ship HF - Room 4 Key",
"tags": ["KeyItem"]
},
"HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY": {
- "label": "Abandoned Ship HF - Hidden Item in Room 3",
+ "label": "Abandoned Ship HF - Room 1 Key",
"tags": ["KeyItem"]
},
"HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY": {
- "label": "Abandoned Ship HF - Hidden Item in Room 4",
+ "label": "Abandoned Ship HF - Room 6 Key",
"tags": ["KeyItem"]
},
"HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY": {
- "label": "Abandoned Ship HF - Hidden Item in Room 5",
+ "label": "Abandoned Ship HF - Room 2 Key",
"tags": ["KeyItem"]
},
- "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER": {
- "label": "Abandoned Ship HF - Item in Room 2",
+ "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER": {
+ "label": "Abandoned Ship HF - Scanner",
"tags": ["KeyItem"]
},
"NPC_GIFT_RECEIVED_POKEBLOCK_CASE": {
@@ -144,7 +144,23 @@
},
"NPC_GIFT_RECEIVED_SS_TICKET": {
"label": "Littleroot Town - S.S. Ticket from Norman",
- "tags": ["Ferry"]
+ "tags": ["KeyItem"]
+ },
+ "NPC_GIFT_RECEIVED_AURORA_TICKET": {
+ "label": "Littleroot Town - Aurora Ticket from Norman",
+ "tags": ["EventTicket"]
+ },
+ "NPC_GIFT_RECEIVED_EON_TICKET": {
+ "label": "Littleroot Town - Eon Ticket from Norman",
+ "tags": ["EventTicket"]
+ },
+ "NPC_GIFT_RECEIVED_MYSTIC_TICKET": {
+ "label": "Littleroot Town - Mystic Ticket from Norman",
+ "tags": ["EventTicket"]
+ },
+ "NPC_GIFT_RECEIVED_OLD_SEA_MAP": {
+ "label": "Littleroot Town - Old Sea Map from Norman",
+ "tags": ["EventTicket"]
},
"NPC_GIFT_RECEIVED_OLD_ROD": {
@@ -228,10 +244,6 @@
"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"]
@@ -356,7 +368,7 @@
"label": "Route 113 - Hidden Item Mound Between Trainers",
"tags": ["HiddenItem"]
},
- "HIDDEN_ITEM_ROUTE_113_TM32": {
+ "HIDDEN_ITEM_ROUTE_113_TM_DOUBLE_TEAM": {
"label": "Route 113 - Hidden Item Mound West of Workshop",
"tags": ["HiddenItem"]
},
@@ -492,10 +504,6 @@
"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"]
@@ -592,8 +600,12 @@
"label": "Victory Road B2F - Hidden Item in Northeast Corner",
"tags": ["HiddenItem"]
},
+ "HIDDEN_ITEM_NAVEL_ROCK_TOP_SACRED_ASH": {
+ "label": "Navel Rock Top - Hidden Item Sacred Ash",
+ "tags": ["HiddenItem"]
+ },
- "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18": {
+ "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_RAIN_DANCE": {
"label": "Abandoned Ship HF - Item in Room 1",
"tags": ["OverworldItem"]
},
@@ -617,7 +629,7 @@
"label": "Abandoned Ship B1F - Item in South Rooms",
"tags": ["OverworldItem"]
},
- "ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13": {
+ "ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_ICE_BEAM": {
"label": "Abandoned Ship B1F - Item in Storage Room",
"tags": ["OverworldItem"]
},
@@ -653,7 +665,7 @@
"label": "Fiery Path - Item Behind Boulders 1",
"tags": ["OverworldItem"]
},
- "ITEM_FIERY_PATH_TM06": {
+ "ITEM_FIERY_PATH_TM_TOXIC": {
"label": "Fiery Path - Item Behind Boulders 2",
"tags": ["OverworldItem"]
},
@@ -725,11 +737,11 @@
"label": "Meteor Falls 1F - Item Below Waterfall",
"tags": ["OverworldItem"]
},
- "ITEM_METEOR_FALLS_1F_1R_TM23": {
+ "ITEM_METEOR_FALLS_1F_1R_TM_IRON_TAIL": {
"label": "Meteor Falls 1F - Item Before Steven's Cave",
"tags": ["OverworldItem"]
},
- "ITEM_METEOR_FALLS_B1F_2R_TM02": {
+ "ITEM_METEOR_FALLS_B1F_2R_TM_DRAGON_CLAW": {
"label": "Meteor Falls B1F - Item in North Cave",
"tags": ["OverworldItem"]
},
@@ -753,11 +765,11 @@
"label": "Mt Pyre 5F - Item",
"tags": ["OverworldItem"]
},
- "ITEM_MT_PYRE_6F_TM30": {
+ "ITEM_MT_PYRE_6F_TM_SHADOW_BALL": {
"label": "Mt Pyre 6F - Item",
"tags": ["OverworldItem"]
},
- "ITEM_MT_PYRE_EXTERIOR_TM48": {
+ "ITEM_MT_PYRE_EXTERIOR_TM_SKILL_SWAP": {
"label": "Mt Pyre Exterior - Item 1",
"tags": ["OverworldItem"]
},
@@ -881,7 +893,7 @@
"label": "Route 111 - Item Desert Near Tower",
"tags": ["OverworldItem"]
},
- "ITEM_ROUTE_111_TM37": {
+ "ITEM_ROUTE_111_TM_SANDSTORM": {
"label": "Route 111 - Item Desert South",
"tags": ["OverworldItem"]
},
@@ -929,7 +941,7 @@
"label": "Route 115 - Item North Near Trainers",
"tags": ["OverworldItem"]
},
- "ITEM_ROUTE_115_TM01": {
+ "ITEM_ROUTE_115_TM_FOCUS_PUNCH": {
"label": "Route 115 - Item Near Mud Slope",
"tags": ["OverworldItem"]
},
@@ -1137,7 +1149,7 @@
"label": "Safari Zone NE - Item on Ledge",
"tags": ["OverworldItem"]
},
- "ITEM_SAFARI_ZONE_NORTH_WEST_TM22": {
+ "ITEM_SAFARI_ZONE_NORTH_WEST_TM_SOLAR_BEAM": {
"label": "Safari Zone NW - Item Behind Pond",
"tags": ["OverworldItem"]
},
@@ -1149,11 +1161,11 @@
"label": "Safari Zone SW - Item Behind Pond",
"tags": ["OverworldItem"]
},
- "ITEM_SCORCHED_SLAB_TM11": {
+ "ITEM_SCORCHED_SLAB_TM_SUNNY_DAY": {
"label": "Scorched Slab - Item",
"tags": ["OverworldItem"]
},
- "ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26": {
+ "ITEM_SEAFLOOR_CAVERN_ROOM_9_TM_EARTHQUAKE": {
"label": "Seafloor Cavern Room 9 - Item Before Kyogre",
"tags": ["OverworldItem"]
},
@@ -1165,7 +1177,7 @@
"label": "Shoal Cave Ice Room - Item 1",
"tags": ["OverworldItem"]
},
- "ITEM_SHOAL_CAVE_ICE_ROOM_TM07": {
+ "ITEM_SHOAL_CAVE_ICE_ROOM_TM_HAIL": {
"label": "Shoal Cave Ice Room - Item 2",
"tags": ["OverworldItem"]
},
@@ -1225,7 +1237,7 @@
"label": "Victory Road B1F - Item Behind Boulders",
"tags": ["OverworldItem"]
},
- "ITEM_VICTORY_ROAD_B1F_TM29": {
+ "ITEM_VICTORY_ROAD_B1F_TM_PSYCHIC": {
"label": "Victory Road B1F - Item on Northeast Ledge",
"tags": ["OverworldItem"]
},
@@ -1234,7 +1246,7 @@
"tags": ["OverworldItem"]
},
- "NPC_GIFT_GOT_TM24_FROM_WATTSON": {
+ "NPC_GIFT_GOT_TM_THUNDERBOLT_FROM_WATTSON": {
"label": "Mauville City - TM24 from Wattson",
"tags": ["NpcGift"]
},
@@ -1275,7 +1287,7 @@
"tags": ["NpcGift"]
},
"NPC_GIFT_RECEIVED_KINGS_ROCK": {
- "label": "Mossdeep City - King's Rock from Kid",
+ "label": "Mossdeep City - King's Rock from Boy",
"tags": ["NpcGift"]
},
"NPC_GIFT_RECEIVED_MACHO_BRACE": {
@@ -1322,107 +1334,111 @@
"label": "Route 109 - Soft Sand from Tuber",
"tags": ["NpcGift"]
},
+ "NPC_GIFT_RECEIVED_SOOT_SACK": {
+ "label": "Route 113 - Soot Sack from Glass Blower",
+ "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",
+ "label": "Space Center - Gift from Man",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM03": {
+ "NPC_GIFT_RECEIVED_TM_WATER_PULSE": {
"label": "Sootopolis Gym - TM03 from Juan",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM04": {
+ "NPC_GIFT_RECEIVED_TM_CALM_MIND": {
"label": "Mossdeep Gym - TM04 from Tate and Liza",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM05": {
+ "NPC_GIFT_RECEIVED_TM_ROAR": {
"label": "Route 114 - TM05 from Roaring Man",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM08": {
+ "NPC_GIFT_RECEIVED_TM_BULK_UP": {
"label": "Dewford Gym - TM08 from Brawly",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM09": {
+ "NPC_GIFT_RECEIVED_TM_BULLET_SEED": {
"label": "Route 104 - TM09 from Boy",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM10": {
+ "NPC_GIFT_RECEIVED_TM_HIDDEN_POWER": {
"label": "Fortree City - TM10 from Hidden Power Lady",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM19": {
+ "NPC_GIFT_RECEIVED_TM_GIGA_DRAIN": {
"label": "Route 123 - TM19 from Girl near Berries",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM21": {
+ "NPC_GIFT_RECEIVED_TM_FRUSTRATION": {
"label": "Pacifidlog Town - TM21 from Man in House",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM27": {
+ "NPC_GIFT_RECEIVED_TM_RETURN": {
"label": "Fallarbor Town - TM27 from Cozmo",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM27_2": {
+ "NPC_GIFT_RECEIVED_TM_RETURN_2": {
"label": "Pacifidlog Town - TM27 from Man in House",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM28": {
- "label": "Route 114 - TM28 from Fossil Maniac",
+ "NPC_GIFT_RECEIVED_TM_DIG": {
+ "label": "Route 114 - TM28 from Fossil Maniac's Brother",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM31": {
+ "NPC_GIFT_RECEIVED_TM_BRICK_BREAK": {
"label": "Sootopolis City - TM31 from Black Belt in House",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM34": {
+ "NPC_GIFT_RECEIVED_TM_SHOCK_WAVE": {
"label": "Mauville Gym - TM34 from Wattson",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM36": {
+ "NPC_GIFT_RECEIVED_TM_SLUDGE_BOMB": {
"label": "Dewford Town - TM36 from Sludge Bomb Man",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM39": {
+ "NPC_GIFT_RECEIVED_TM_ROCK_TOMB": {
"label": "Rustboro Gym - TM39 from Roxanne",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM40": {
+ "NPC_GIFT_RECEIVED_TM_AERIAL_ACE": {
"label": "Fortree Gym - TM40 from Winona",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM41": {
+ "NPC_GIFT_RECEIVED_TM_TORMENT": {
"label": "Slateport City - TM41 from Sailor in Battle Tent",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM42": {
+ "NPC_GIFT_RECEIVED_TM_FACADE": {
"label": "Petalburg Gym - TM42 from Norman",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM44": {
+ "NPC_GIFT_RECEIVED_TM_REST": {
"label": "Lilycove City - TM44 from Man in House",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM45": {
+ "NPC_GIFT_RECEIVED_TM_ATTRACT": {
"label": "Verdanturf Town - TM45 from Woman in Battle Tent",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM46": {
- "label": "Slateport City - TM46 from Aqua Grunt in Museum",
+ "NPC_GIFT_RECEIVED_TM_THIEF": {
+ "label": "Oceanic Museum - TM46 from Aqua Grunt in Museum",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM47": {
+ "NPC_GIFT_RECEIVED_TM_STEEL_WING": {
"label": "Granite Cave 1F - TM47 from Steven",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM49": {
+ "NPC_GIFT_RECEIVED_TM_SNATCH": {
"label": "SS Tidal - TM49 from Thief",
"tags": ["NpcGift"]
},
- "NPC_GIFT_RECEIVED_TM50": {
+ "NPC_GIFT_RECEIVED_TM_OVERHEAT": {
"label": "Lavaridge Gym - TM50 from Flannery",
"tags": ["NpcGift"]
},
@@ -1430,6 +1446,10 @@
"label": "Route 104 - White Herb from Lady Near Flower Shop",
"tags": ["NpcGift"]
},
+ "NPC_GIFT_FLOWER_SHOP_RECEIVED_BERRY": {
+ "label": "Route 104 - Berry from Girl in Flower Shop",
+ "tags": ["NpcGift"]
+ },
"NPC_GIFT_RECEIVED_DEEP_SEA_SCALE": {
"label": "Slateport City - Deep Sea Scale from Capt. Stern",
"tags": ["NpcGift"]
@@ -1437,5 +1457,3908 @@
"NPC_GIFT_RECEIVED_DEEP_SEA_TOOTH": {
"label": "Slateport City - Deep Sea Tooth from Capt. Stern",
"tags": ["NpcGift"]
+ },
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_1": {
+ "label": "Trick House Puzzle 1 - Reward",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_2": {
+ "label": "Trick House Puzzle 2 - Reward",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_3": {
+ "label": "Trick House Puzzle 3 - Reward",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_4": {
+ "label": "Trick House Puzzle 4 - Reward",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_5": {
+ "label": "Trick House Puzzle 5 - Reward",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_6": {
+ "label": "Trick House Puzzle 6 - Reward",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_7": {
+ "label": "Trick House Puzzle 7 - Reward",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_RECEIVED_FIRST_POKEBALLS": {
+ "label": "Littleroot Town - Pokeballs from Rival",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_SOOTOPOLIS_RECEIVED_BERRY_1": {
+ "label": "Sootopolis City - Berry from Girl on Grass 1",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_SOOTOPOLIS_RECEIVED_BERRY_2": {
+ "label": "Sootopolis City - Berry from Girl on Grass 2",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_ROUTE_111_RECEIVED_BERRY": {
+ "label": "Route 111 - Berry from Girl Near Berry Trees",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_ROUTE_114_RECEIVED_BERRY": {
+ "label": "Route 114 - Berry from Man Near House",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_ROUTE_120_RECEIVED_BERRY": {
+ "label": "Route 120 - Berry from Lady Near Berry Trees",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_BERRY_MASTER_RECEIVED_BERRY_1": {
+ "label": "Route 123 - Berry from Berry Master 1",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_BERRY_MASTER_RECEIVED_BERRY_2": {
+ "label": "Route 123 - Berry from Berry Master 2",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_BERRY_MASTERS_WIFE": {
+ "label": "Route 123 - Berry from Berry Master's Wife",
+ "tags": ["NpcGift"]
+ },
+ "NPC_GIFT_LILYCOVE_RECEIVED_BERRY": {
+ "label": "Lilycove City - Berry from Gentleman Above Ledges",
+ "tags": ["NpcGift"]
+ },
+
+ "BERRY_TREE_01": {
+ "label": "Route 102 - Berry Tree 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_02": {
+ "label": "Route 102 - Berry Tree 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_03": {
+ "label": "Route 104 - Berry Tree Flower Shop 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_04": {
+ "label": "Route 104 - Berry Tree Flower Shop 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_05": {
+ "label": "Route 103 - Berry Tree 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_06": {
+ "label": "Route 103 - Berry Tree 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_07": {
+ "label": "Route 103 - Berry Tree 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_08": {
+ "label": "Route 104 - Berry Tree North 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_09": {
+ "label": "Route 104 - Berry Tree North 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_10": {
+ "label": "Route 104 - Berry Tree North 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_11": {
+ "label": "Route 104 - Berry Tree South 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_12": {
+ "label": "Route 104 - Berry Tree South 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_13": {
+ "label": "Route 104 - Berry Tree South 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_14": {
+ "label": "Route 123 - Berry Tree Berry Master 6",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_15": {
+ "label": "Route 123 - Berry Tree Berry Master 7",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_16": {
+ "label": "Route 110 - Berry Tree 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_17": {
+ "label": "Route 110 - Berry Tree 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_18": {
+ "label": "Route 110 - Berry Tree 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_19": {
+ "label": "Route 111 - Berry Tree 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_20": {
+ "label": "Route 111 - Berry Tree 4",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_21": {
+ "label": "Route 112 - Berry Tree 4",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_22": {
+ "label": "Route 112 - Berry Tree 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_23": {
+ "label": "Route 112 - Berry Tree 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_24": {
+ "label": "Route 112 - Berry Tree 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_25": {
+ "label": "Route 116 - Berry Tree 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_26": {
+ "label": "Route 116 - Berry Tree 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_27": {
+ "label": "Route 117 - Berry Tree 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_28": {
+ "label": "Route 117 - Berry Tree 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_29": {
+ "label": "Route 117 - Berry Tree 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_30": {
+ "label": "Route 123 - Berry Tree Berry Master 8",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_31": {
+ "label": "Route 118 - Berry Tree 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_32": {
+ "label": "Route 118 - Berry Tree 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_33": {
+ "label": "Route 118 - Berry Tree 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_34": {
+ "label": "Route 119 - Berry Tree North 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_35": {
+ "label": "Route 119 - Berry Tree North 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_36": {
+ "label": "Route 119 - Berry Tree North 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_37": {
+ "label": "Route 120 - Berry Tree in Side Area 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_38": {
+ "label": "Route 120 - Berry Tree in Side Area 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_39": {
+ "label": "Route 120 - Berry Tree in Side Area 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_40": {
+ "label": "Route 120 - Berry Tree South 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_41": {
+ "label": "Route 120 - Berry Tree South 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_42": {
+ "label": "Route 120 - Berry Tree South 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_43": {
+ "label": "Route 120 - Berry Tree Pond 4",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_44": {
+ "label": "Route 120 - Berry Tree Pond 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_45": {
+ "label": "Route 120 - Berry Tree Pond 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_46": {
+ "label": "Route 120 - Berry Tree Pond 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_47": {
+ "label": "Route 121 - Berry Tree West 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_48": {
+ "label": "Route 121 - Berry Tree West 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_49": {
+ "label": "Route 121 - Berry Tree West 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_50": {
+ "label": "Route 121 - Berry Tree West 4",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_51": {
+ "label": "Route 121 - Berry Tree East 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_52": {
+ "label": "Route 121 - Berry Tree East 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_53": {
+ "label": "Route 121 - Berry Tree East 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_54": {
+ "label": "Route 121 - Berry Tree East 4",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_55": {
+ "label": "Route 115 - Berry Tree Behind Smashable Rock 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_56": {
+ "label": "Route 115 - Berry Tree Behind Smashable Rock 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_57": {
+ "label": "Route 123 - Berry Tree East 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_58": {
+ "label": "Route 123 - Berry Tree Berry Master 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_59": {
+ "label": "Route 123 - Berry Tree Berry Master 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_60": {
+ "label": "Route 123 - Berry Tree Berry Master 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_61": {
+ "label": "Route 123 - Berry Tree Berry Master 4",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_62": {
+ "label": "Route 123 - Berry Tree East 4",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_63": {
+ "label": "Route 123 - Berry Tree East 5",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_64": {
+ "label": "Route 123 - Berry Tree East 6",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_65": {
+ "label": "Route 123 - Berry Master Berry Tree 9",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_66": {
+ "label": "Route 116 - Berry Tree 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_67": {
+ "label": "Route 116 - Berry Tree 4",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_68": {
+ "label": "Route 114 - Berry Tree 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_69": {
+ "label": "Route 115 - Berry Tree North 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_70": {
+ "label": "Route 115 - Berry Tree North 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_71": {
+ "label": "Route 115 - Berry Tree North 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_72": {
+ "label": "Route 123 - Berry Tree Berry Master 10",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_73": {
+ "label": "Route 123 - Berry Tree Berry Master 11",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_74": {
+ "label": "Route 123 - Berry Tree Berry Master 12",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_75": {
+ "label": "Route 104 - Berry Tree Flower Shop 3",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_76": {
+ "label": "Route 104 - Berry Tree Flower Shop 4",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_77": {
+ "label": "Route 114 - Berry Tree 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_78": {
+ "label": "Route 114 - Berry Tree 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_79": {
+ "label": "Route 123 - Berry Tree Berry Master 5",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_80": {
+ "label": "Route 111 - Berry Tree 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_81": {
+ "label": "Route 111 - Berry Tree 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_82": {
+ "label": "Route 130 - Berry Tree on Mirage Island",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_83": {
+ "label": "Route 119 - Berry Tree Above Waterfall 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_84": {
+ "label": "Route 119 - Berry Tree Above Waterfall 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_85": {
+ "label": "Route 119 - Berry Tree South 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_86": {
+ "label": "Route 119 - Berry Tree South 2",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_87": {
+ "label": "Route 123 - Berry Tree East 1",
+ "tags": ["BerryTree"]
+ },
+ "BERRY_TREE_88": {
+ "label": "Route 123 - Berry Tree East 2",
+ "tags": ["BerryTree"]
+ },
+
+ "POKEDEX_REWARD_001": {
+ "label": "Pokedex - Bulbasaur",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_002": {
+ "label": "Pokedex - Ivysaur",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_003": {
+ "label": "Pokedex - Venusaur",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_004": {
+ "label": "Pokedex - Charmander",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_005": {
+ "label": "Pokedex - Charmeleon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_006": {
+ "label": "Pokedex - Charizard",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_007": {
+ "label": "Pokedex - Squirtle",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_008": {
+ "label": "Pokedex - Wartortle",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_009": {
+ "label": "Pokedex - Blastoise",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_010": {
+ "label": "Pokedex - Caterpie",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_011": {
+ "label": "Pokedex - Metapod",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_012": {
+ "label": "Pokedex - Butterfree",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_013": {
+ "label": "Pokedex - Weedle",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_014": {
+ "label": "Pokedex - Kakuna",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_015": {
+ "label": "Pokedex - Beedrill",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_016": {
+ "label": "Pokedex - Pidgey",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_017": {
+ "label": "Pokedex - Pidgeotto",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_018": {
+ "label": "Pokedex - Pidgeot",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_019": {
+ "label": "Pokedex - Rattata",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_020": {
+ "label": "Pokedex - Raticate",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_021": {
+ "label": "Pokedex - Spearow",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_022": {
+ "label": "Pokedex - Fearow",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_023": {
+ "label": "Pokedex - Ekans",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_024": {
+ "label": "Pokedex - Arbok",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_025": {
+ "label": "Pokedex - Pikachu",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_026": {
+ "label": "Pokedex - Raichu",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_027": {
+ "label": "Pokedex - Sandshrew",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_028": {
+ "label": "Pokedex - Sandslash",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_029": {
+ "label": "Pokedex - Nidoran Female",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_030": {
+ "label": "Pokedex - Nidorina",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_031": {
+ "label": "Pokedex - Nidoqueen",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_032": {
+ "label": "Pokedex - Nidoran Male",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_033": {
+ "label": "Pokedex - Nidorino",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_034": {
+ "label": "Pokedex - Nidoking",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_035": {
+ "label": "Pokedex - Clefairy",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_036": {
+ "label": "Pokedex - Clefable",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_037": {
+ "label": "Pokedex - Vulpix",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_038": {
+ "label": "Pokedex - Ninetales",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_039": {
+ "label": "Pokedex - Jigglypuff",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_040": {
+ "label": "Pokedex - Wigglytuff",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_041": {
+ "label": "Pokedex - Zubat",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_042": {
+ "label": "Pokedex - Golbat",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_043": {
+ "label": "Pokedex - Oddish",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_044": {
+ "label": "Pokedex - Gloom",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_045": {
+ "label": "Pokedex - Vileplume",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_046": {
+ "label": "Pokedex - Paras",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_047": {
+ "label": "Pokedex - Parasect",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_048": {
+ "label": "Pokedex - Venonat",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_049": {
+ "label": "Pokedex - Venomoth",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_050": {
+ "label": "Pokedex - Diglett",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_051": {
+ "label": "Pokedex - Dugtrio",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_052": {
+ "label": "Pokedex - Meowth",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_053": {
+ "label": "Pokedex - Persian",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_054": {
+ "label": "Pokedex - Psyduck",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_055": {
+ "label": "Pokedex - Golduck",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_056": {
+ "label": "Pokedex - Mankey",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_057": {
+ "label": "Pokedex - Primeape",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_058": {
+ "label": "Pokedex - Growlithe",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_059": {
+ "label": "Pokedex - Arcanine",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_060": {
+ "label": "Pokedex - Poliwag",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_061": {
+ "label": "Pokedex - Poliwhirl",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_062": {
+ "label": "Pokedex - Poliwrath",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_063": {
+ "label": "Pokedex - Abra",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_064": {
+ "label": "Pokedex - Kadabra",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_065": {
+ "label": "Pokedex - Alakazam",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_066": {
+ "label": "Pokedex - Machop",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_067": {
+ "label": "Pokedex - Machoke",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_068": {
+ "label": "Pokedex - Machamp",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_069": {
+ "label": "Pokedex - Bellsprout",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_070": {
+ "label": "Pokedex - Weepinbell",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_071": {
+ "label": "Pokedex - Victreebel",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_072": {
+ "label": "Pokedex - Tentacool",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_073": {
+ "label": "Pokedex - Tentacruel",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_074": {
+ "label": "Pokedex - Geodude",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_075": {
+ "label": "Pokedex - Graveler",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_076": {
+ "label": "Pokedex - Golem",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_077": {
+ "label": "Pokedex - Ponyta",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_078": {
+ "label": "Pokedex - Rapidash",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_079": {
+ "label": "Pokedex - Slowpoke",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_080": {
+ "label": "Pokedex - Slowbro",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_081": {
+ "label": "Pokedex - Magnemite",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_082": {
+ "label": "Pokedex - Magneton",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_083": {
+ "label": "Pokedex - Farfetch'd",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_084": {
+ "label": "Pokedex - Doduo",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_085": {
+ "label": "Pokedex - Dodrio",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_086": {
+ "label": "Pokedex - Seel",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_087": {
+ "label": "Pokedex - Dewgong",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_088": {
+ "label": "Pokedex - Grimer",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_089": {
+ "label": "Pokedex - Muk",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_090": {
+ "label": "Pokedex - Shellder",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_091": {
+ "label": "Pokedex - Cloyster",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_092": {
+ "label": "Pokedex - Gastly",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_093": {
+ "label": "Pokedex - Haunter",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_094": {
+ "label": "Pokedex - Gengar",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_095": {
+ "label": "Pokedex - Onix",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_096": {
+ "label": "Pokedex - Drowzee",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_097": {
+ "label": "Pokedex - Hypno",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_098": {
+ "label": "Pokedex - Krabby",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_099": {
+ "label": "Pokedex - Kingler",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_100": {
+ "label": "Pokedex - Voltorb",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_101": {
+ "label": "Pokedex - Electrode",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_102": {
+ "label": "Pokedex - Exeggcute",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_103": {
+ "label": "Pokedex - Exeggutor",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_104": {
+ "label": "Pokedex - Cubone",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_105": {
+ "label": "Pokedex - Marowak",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_106": {
+ "label": "Pokedex - Hitmonlee",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_107": {
+ "label": "Pokedex - Hitmonchan",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_108": {
+ "label": "Pokedex - Lickitung",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_109": {
+ "label": "Pokedex - Koffing",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_110": {
+ "label": "Pokedex - Weezing",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_111": {
+ "label": "Pokedex - Rhyhorn",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_112": {
+ "label": "Pokedex - Rhydon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_113": {
+ "label": "Pokedex - Chansey",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_114": {
+ "label": "Pokedex - Tangela",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_115": {
+ "label": "Pokedex - Kangaskhan",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_116": {
+ "label": "Pokedex - Horsea",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_117": {
+ "label": "Pokedex - Seadra",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_118": {
+ "label": "Pokedex - Goldeen",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_119": {
+ "label": "Pokedex - Seaking",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_120": {
+ "label": "Pokedex - Staryu",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_121": {
+ "label": "Pokedex - Starmie",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_122": {
+ "label": "Pokedex - Mr. Mime",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_123": {
+ "label": "Pokedex - Scyther",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_124": {
+ "label": "Pokedex - Jynx",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_125": {
+ "label": "Pokedex - Electabuzz",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_126": {
+ "label": "Pokedex - Magmar",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_127": {
+ "label": "Pokedex - Pinsir",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_128": {
+ "label": "Pokedex - Tauros",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_129": {
+ "label": "Pokedex - Magikarp",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_130": {
+ "label": "Pokedex - Gyarados",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_131": {
+ "label": "Pokedex - Lapras",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_132": {
+ "label": "Pokedex - Ditto",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_133": {
+ "label": "Pokedex - Eevee",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_134": {
+ "label": "Pokedex - Vaporeon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_135": {
+ "label": "Pokedex - Jolteon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_136": {
+ "label": "Pokedex - Flareon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_137": {
+ "label": "Pokedex - Porygon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_138": {
+ "label": "Pokedex - Omanyte",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_139": {
+ "label": "Pokedex - Omastar",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_140": {
+ "label": "Pokedex - Kabuto",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_141": {
+ "label": "Pokedex - Kabutops",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_142": {
+ "label": "Pokedex - Aerodactyl",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_143": {
+ "label": "Pokedex - Snorlax",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_144": {
+ "label": "Pokedex - Articuno",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_145": {
+ "label": "Pokedex - Zapdos",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_146": {
+ "label": "Pokedex - Moltres",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_147": {
+ "label": "Pokedex - Dratini",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_148": {
+ "label": "Pokedex - Dragonair",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_149": {
+ "label": "Pokedex - Dragonite",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_150": {
+ "label": "Pokedex - Mewtwo",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_151": {
+ "label": "Pokedex - Mew",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_152": {
+ "label": "Pokedex - Chikorita",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_153": {
+ "label": "Pokedex - Bayleef",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_154": {
+ "label": "Pokedex - Meganium",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_155": {
+ "label": "Pokedex - Cindaquil",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_156": {
+ "label": "Pokedex - Quilava",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_157": {
+ "label": "Pokedex - Typhlosion",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_158": {
+ "label": "Pokedex - Totodile",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_159": {
+ "label": "Pokedex - Croconaw",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_160": {
+ "label": "Pokedex - Feraligatr",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_161": {
+ "label": "Pokedex - Sentret",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_162": {
+ "label": "Pokedex - Furret",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_163": {
+ "label": "Pokedex - Hoothoot",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_164": {
+ "label": "Pokedex - Noctowl",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_165": {
+ "label": "Pokedex - Ledyba",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_166": {
+ "label": "Pokedex - Ledian",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_167": {
+ "label": "Pokedex - Spinarak",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_168": {
+ "label": "Pokedex - Ariados",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_169": {
+ "label": "Pokedex - Crobat",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_170": {
+ "label": "Pokedex - Chinchou",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_171": {
+ "label": "Pokedex - Lanturn",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_172": {
+ "label": "Pokedex - Pichu",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_173": {
+ "label": "Pokedex - Cleffa",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_174": {
+ "label": "Pokedex - Igglybuff",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_175": {
+ "label": "Pokedex - Togepi",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_176": {
+ "label": "Pokedex - Togetic",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_177": {
+ "label": "Pokedex - Natu",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_178": {
+ "label": "Pokedex - Xatu",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_179": {
+ "label": "Pokedex - Mareep",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_180": {
+ "label": "Pokedex - Flaaffy",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_181": {
+ "label": "Pokedex - Ampharos",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_182": {
+ "label": "Pokedex - Bellossom",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_183": {
+ "label": "Pokedex - Marill",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_184": {
+ "label": "Pokedex - Azumarill",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_185": {
+ "label": "Pokedex - Sudowoodo",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_186": {
+ "label": "Pokedex - Politoed",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_187": {
+ "label": "Pokedex - Hoppip",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_188": {
+ "label": "Pokedex - Skiploom",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_189": {
+ "label": "Pokedex - Jumpluff",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_190": {
+ "label": "Pokedex - Aipom",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_191": {
+ "label": "Pokedex - Sunkern",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_192": {
+ "label": "Pokedex - Sunflora",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_193": {
+ "label": "Pokedex - Yanma",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_194": {
+ "label": "Pokedex - Wooper",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_195": {
+ "label": "Pokedex - Quagsire",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_196": {
+ "label": "Pokedex - Espeon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_197": {
+ "label": "Pokedex - Umbreon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_198": {
+ "label": "Pokedex - Murkrow",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_199": {
+ "label": "Pokedex - Slowking",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_200": {
+ "label": "Pokedex - Misdreavus",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_201": {
+ "label": "Pokedex - Unown",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_202": {
+ "label": "Pokedex - Wobbuffet",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_203": {
+ "label": "Pokedex - Girafarig",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_204": {
+ "label": "Pokedex - Pineco",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_205": {
+ "label": "Pokedex - Forretress",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_206": {
+ "label": "Pokedex - Dunsparce",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_207": {
+ "label": "Pokedex - Gligar",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_208": {
+ "label": "Pokedex - Steelix",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_209": {
+ "label": "Pokedex - Snubbull",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_210": {
+ "label": "Pokedex - Granbull",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_211": {
+ "label": "Pokedex - Qwilfish",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_212": {
+ "label": "Pokedex - Scizor",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_213": {
+ "label": "Pokedex - Shuckle",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_214": {
+ "label": "Pokedex - Heracross",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_215": {
+ "label": "Pokedex - Sneasel",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_216": {
+ "label": "Pokedex - Teddiursa",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_217": {
+ "label": "Pokedex - Ursaring",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_218": {
+ "label": "Pokedex - Slugma",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_219": {
+ "label": "Pokedex - Magcargo",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_220": {
+ "label": "Pokedex - Swinub",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_221": {
+ "label": "Pokedex - Piloswine",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_222": {
+ "label": "Pokedex - Corsola",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_223": {
+ "label": "Pokedex - Remoraid",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_224": {
+ "label": "Pokedex - Octillery",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_225": {
+ "label": "Pokedex - Delibird",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_226": {
+ "label": "Pokedex - Mantine",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_227": {
+ "label": "Pokedex - Skarmory",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_228": {
+ "label": "Pokedex - Houndour",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_229": {
+ "label": "Pokedex - Houndoom",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_230": {
+ "label": "Pokedex - Kingdra",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_231": {
+ "label": "Pokedex - Phanpy",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_232": {
+ "label": "Pokedex - Donphan",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_233": {
+ "label": "Pokedex - Porygon2",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_234": {
+ "label": "Pokedex - Stantler",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_235": {
+ "label": "Pokedex - Smeargle",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_236": {
+ "label": "Pokedex - Tyrogue",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_237": {
+ "label": "Pokedex - Hitmontop",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_238": {
+ "label": "Pokedex - Smoochum",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_239": {
+ "label": "Pokedex - Elekid",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_240": {
+ "label": "Pokedex - Magby",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_241": {
+ "label": "Pokedex - Miltank",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_242": {
+ "label": "Pokedex - Blissey",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_243": {
+ "label": "Pokedex - Raikou",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_244": {
+ "label": "Pokedex - Entei",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_245": {
+ "label": "Pokedex - Suicune",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_246": {
+ "label": "Pokedex - Larvitar",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_247": {
+ "label": "Pokedex - Pupitar",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_248": {
+ "label": "Pokedex - Tyranitar",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_249": {
+ "label": "Pokedex - Lugia",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_250": {
+ "label": "Pokedex - Ho-oh",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_251": {
+ "label": "Pokedex - Celebi",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_252": {
+ "label": "Pokedex - Treecko",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_253": {
+ "label": "Pokedex - Grovyle",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_254": {
+ "label": "Pokedex - Sceptile",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_255": {
+ "label": "Pokedex - Torchic",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_256": {
+ "label": "Pokedex - Combusken",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_257": {
+ "label": "Pokedex - Blaziken",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_258": {
+ "label": "Pokedex - Mudkip",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_259": {
+ "label": "Pokedex - Marshtomp",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_260": {
+ "label": "Pokedex - Swampert",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_261": {
+ "label": "Pokedex - Poochyena",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_262": {
+ "label": "Pokedex - Mightyena",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_263": {
+ "label": "Pokedex - Zigzagoon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_264": {
+ "label": "Pokedex - Linoone",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_265": {
+ "label": "Pokedex - Wurmple",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_266": {
+ "label": "Pokedex - Silcoon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_267": {
+ "label": "Pokedex - Beautifly",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_268": {
+ "label": "Pokedex - Cascoon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_269": {
+ "label": "Pokedex - Dustox",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_270": {
+ "label": "Pokedex - Lotad",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_271": {
+ "label": "Pokedex - Lombre",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_272": {
+ "label": "Pokedex - Ludicolo",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_273": {
+ "label": "Pokedex - Seedot",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_274": {
+ "label": "Pokedex - Nuzleaf",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_275": {
+ "label": "Pokedex - Shiftry",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_276": {
+ "label": "Pokedex - Taillow",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_277": {
+ "label": "Pokedex - Swellow",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_278": {
+ "label": "Pokedex - Wingull",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_279": {
+ "label": "Pokedex - Pelipper",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_280": {
+ "label": "Pokedex - Ralts",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_281": {
+ "label": "Pokedex - Kirlia",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_282": {
+ "label": "Pokedex - Gardevoir",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_283": {
+ "label": "Pokedex - Surskit",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_284": {
+ "label": "Pokedex - Masquerain",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_285": {
+ "label": "Pokedex - Shroomish",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_286": {
+ "label": "Pokedex - Breloom",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_287": {
+ "label": "Pokedex - Slakoth",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_288": {
+ "label": "Pokedex - Vigoroth",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_289": {
+ "label": "Pokedex - Slaking",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_290": {
+ "label": "Pokedex - Nincada",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_291": {
+ "label": "Pokedex - Ninjask",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_292": {
+ "label": "Pokedex - Shedinja",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_293": {
+ "label": "Pokedex - Whismur",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_294": {
+ "label": "Pokedex - Loudred",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_295": {
+ "label": "Pokedex - Exploud",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_296": {
+ "label": "Pokedex - Makuhita",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_297": {
+ "label": "Pokedex - Hariyama",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_298": {
+ "label": "Pokedex - Azurill",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_299": {
+ "label": "Pokedex - Nosepass",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_300": {
+ "label": "Pokedex - Skitty",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_301": {
+ "label": "Pokedex - Delcatty",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_302": {
+ "label": "Pokedex - Sableye",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_303": {
+ "label": "Pokedex - Mawile",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_304": {
+ "label": "Pokedex - Aron",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_305": {
+ "label": "Pokedex - Lairon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_306": {
+ "label": "Pokedex - Aggron",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_307": {
+ "label": "Pokedex - Meditite",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_308": {
+ "label": "Pokedex - Medicham",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_309": {
+ "label": "Pokedex - Electrike",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_310": {
+ "label": "Pokedex - Manectric",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_311": {
+ "label": "Pokedex - Plusle",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_312": {
+ "label": "Pokedex - Minun",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_313": {
+ "label": "Pokedex - Volbeat",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_314": {
+ "label": "Pokedex - Illumise",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_315": {
+ "label": "Pokedex - Roselia",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_316": {
+ "label": "Pokedex - Gulpin",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_317": {
+ "label": "Pokedex - Swalot",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_318": {
+ "label": "Pokedex - Carvanha",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_319": {
+ "label": "Pokedex - Sharpedo",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_320": {
+ "label": "Pokedex - Wailmer",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_321": {
+ "label": "Pokedex - Wailord",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_322": {
+ "label": "Pokedex - Numel",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_323": {
+ "label": "Pokedex - Camerupt",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_324": {
+ "label": "Pokedex - Torkoal",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_325": {
+ "label": "Pokedex - Spoink",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_326": {
+ "label": "Pokedex - Grumpig",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_327": {
+ "label": "Pokedex - Spinda",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_328": {
+ "label": "Pokedex - Trapinch",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_329": {
+ "label": "Pokedex - Vibrava",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_330": {
+ "label": "Pokedex - Flygon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_331": {
+ "label": "Pokedex - Cacnea",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_332": {
+ "label": "Pokedex - Cacturne",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_333": {
+ "label": "Pokedex - Swablu",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_334": {
+ "label": "Pokedex - Altaria",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_335": {
+ "label": "Pokedex - Zangoose",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_336": {
+ "label": "Pokedex - Seviper",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_337": {
+ "label": "Pokedex - Lunatone",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_338": {
+ "label": "Pokedex - Solrock",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_339": {
+ "label": "Pokedex - Barboach",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_340": {
+ "label": "Pokedex - Whiscash",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_341": {
+ "label": "Pokedex - Corphish",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_342": {
+ "label": "Pokedex - Crawdaunt",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_343": {
+ "label": "Pokedex - Baltoy",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_344": {
+ "label": "Pokedex - Claydol",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_345": {
+ "label": "Pokedex - Lileep",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_346": {
+ "label": "Pokedex - Cradily",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_347": {
+ "label": "Pokedex - Anorith",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_348": {
+ "label": "Pokedex - Armaldo",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_349": {
+ "label": "Pokedex - Feebas",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_350": {
+ "label": "Pokedex - Milotic",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_351": {
+ "label": "Pokedex - Castform",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_352": {
+ "label": "Pokedex - Kecleon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_353": {
+ "label": "Pokedex - Shuppet",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_354": {
+ "label": "Pokedex - Banette",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_355": {
+ "label": "Pokedex - Duskull",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_356": {
+ "label": "Pokedex - Dusclops",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_357": {
+ "label": "Pokedex - Tropius",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_358": {
+ "label": "Pokedex - Chimecho",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_359": {
+ "label": "Pokedex - Absol",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_360": {
+ "label": "Pokedex - Wynaut",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_361": {
+ "label": "Pokedex - Snorunt",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_362": {
+ "label": "Pokedex - Glalie",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_363": {
+ "label": "Pokedex - Spheal",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_364": {
+ "label": "Pokedex - Sealeo",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_365": {
+ "label": "Pokedex - Walrein",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_366": {
+ "label": "Pokedex - Clamperl",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_367": {
+ "label": "Pokedex - Huntail",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_368": {
+ "label": "Pokedex - Gorebyss",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_369": {
+ "label": "Pokedex - Relicanth",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_370": {
+ "label": "Pokedex - Luvdisc",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_371": {
+ "label": "Pokedex - Bagon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_372": {
+ "label": "Pokedex - Shelgon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_373": {
+ "label": "Pokedex - Salamence",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_374": {
+ "label": "Pokedex - Beldum",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_375": {
+ "label": "Pokedex - Metang",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_376": {
+ "label": "Pokedex - Metagross",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_377": {
+ "label": "Pokedex - Regirock",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_378": {
+ "label": "Pokedex - Regice",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_379": {
+ "label": "Pokedex - Registeel",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_380": {
+ "label": "Pokedex - Latias",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_381": {
+ "label": "Pokedex - Latios",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_382": {
+ "label": "Pokedex - Kyogre",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_383": {
+ "label": "Pokedex - Groudon",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_384": {
+ "label": "Pokedex - Rayquaza",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_385": {
+ "label": "Pokedex - Jirachi",
+ "tags": ["Pokedex"]
+ },
+ "POKEDEX_REWARD_386": {
+ "label": "Pokedex - Deoxys",
+ "tags": ["Pokedex"]
+ },
+
+ "TRAINER_AARON_REWARD": {
+ "label": "Route 134 - Dragon Tamer Aaron",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ABIGAIL_1_REWARD": {
+ "label": "Route 110 - Triathlete Abigail",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_AIDAN_REWARD": {
+ "label": "Route 127 - Bird Keeper Aidan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_AISHA_REWARD": {
+ "label": "Route 117 - Battle Girl Aisha",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALBERTO_REWARD": {
+ "label": "Route 123 - Bird Keeper Alberto",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALBERT_REWARD": {
+ "label": "Victory Road 1F - Cooltrainer Albert",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALEXA_REWARD": {
+ "label": "Route 128 - Cooltrainer Alexa",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALEXIA_REWARD": {
+ "label": "Petalburg Gym - Cooltrainer Alexia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALEX_REWARD": {
+ "label": "Route 134 - Bird Keeper Alex",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALICE_REWARD": {
+ "label": "Route 109 - Swimmer Alice",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALIX_REWARD": {
+ "label": "Route 115 - Psychic Alix",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALLEN_REWARD": {
+ "label": "Route 102 - Youngster Allen",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALLISON_REWARD": {
+ "label": "Route 129 - Triathlete Allison",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ALYSSA_REWARD": {
+ "label": "Route 110 - Triathlete Alyssa",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_AMY_AND_LIV_1_REWARD": {
+ "label": "Route 103 - Twins Amy and Liv",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ANNA_AND_MEG_1_REWARD": {
+ "label": "Route 117 - Sr. and Jr. Anna and Meg",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ANDREA_REWARD": {
+ "label": "Sootopolis Gym - Lass Andrea",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ANDRES_1_REWARD": {
+ "label": "Route 105 - Ruin Maniac Andres",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ANDREW_REWARD": {
+ "label": "Route 103 - Fisherman Andrew",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ANGELICA_REWARD": {
+ "label": "Route 120 - Parasol Lady Angelica",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ANGELINA_REWARD": {
+ "label": "Route 114 - Picnicker Angelina",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ANGELO_REWARD": {
+ "label": "Mauville Gym - Bug Maniac Angelo",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ANNIKA_REWARD": {
+ "label": "Sootopolis Gym - Pokefan Annika",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ANTHONY_REWARD": {
+ "label": "Route 110 - Triathlete Anthony",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ARCHIE_REWARD": {
+ "label": "Seafloor Cavern Room 9 - Aqua Leader Archie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ASHLEY_REWARD": {
+ "label": "Fortree Gym - Picnicker Ashley",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ATHENA_REWARD": {
+ "label": "Route 127 - Cooltrainer Athena",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ATSUSHI_REWARD": {
+ "label": "Mt Pyre 5F - Black Belt Atsushi",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_AURON_REWARD": {
+ "label": "Route 125 - Expert Auron",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_AUSTINA_REWARD": {
+ "label": "Route 109 - Tuber Austina",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_AUTUMN_REWARD": {
+ "label": "Jagged Pass - Picnicker Autumn",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_AXLE_REWARD": {
+ "label": "Lavaridge Gym - Kindler Axle",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BARNY_REWARD": {
+ "label": "Route 118 - Fisherman Barny",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BARRY_REWARD": {
+ "label": "Route 126 - Swimmer Barry",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BEAU_REWARD": {
+ "label": "Route 111 - Camper Beau",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BECKY_REWARD": {
+ "label": "Route 111 - Picnicker Becky",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BECK_REWARD": {
+ "label": "Route 133 - Bird Keeper Beck",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BENJAMIN_1_REWARD": {
+ "label": "Route 110 - Triathlete Benjamin",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BEN_REWARD": {
+ "label": "Mauville Gym - Youngster Ben",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BERKE_REWARD": {
+ "label": "Petalburg Gym - Cooltrainer Berke",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BERNIE_1_REWARD": {
+ "label": "Route 114 - Kindler Bernie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BETHANY_REWARD": {
+ "label": "Sootopolis Gym - Pokefan Bethany",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BETH_REWARD": {
+ "label": "Route 107 - Swimmer Beth",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BEVERLY_REWARD": {
+ "label": "Route 105 - Swimmer Beverly",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BIANCA_REWARD": {
+ "label": "Route 111 - Picnicker Bianca",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BILLY_REWARD": {
+ "label": "Route 104 - Youngster Billy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BLAKE_REWARD": {
+ "label": "Mossdeep Gym - Psychic Blake",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRANDEN_REWARD": {
+ "label": "Route 111 - Camper Branden",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRANDI_REWARD": {
+ "label": "Route 117 - Psychic Brandi",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRAWLY_1_REWARD": {
+ "label": "Dewford Gym - Leader Brawly",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRAXTON_REWARD": {
+ "label": "Route 123 - Cooltrainer Braxton",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRENDAN_LILYCOVE_MUDKIP_REWARD": {
+ "label": "Lilycove City - Rival Brendan/May",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRENDAN_ROUTE_103_MUDKIP_REWARD": {
+ "label": "Route 103 - Rival Brendan/May",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRENDAN_ROUTE_110_MUDKIP_REWARD": {
+ "label": "Route 110 - Rival Brendan/May",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRENDAN_ROUTE_119_MUDKIP_REWARD": {
+ "label": "Route 119 - Rival Brendan/May",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRENDAN_RUSTBORO_MUDKIP_REWARD": {
+ "label": "Rustboro City - Rival Brendan/May",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRENDA_REWARD": {
+ "label": "Route 126 - Swimmer Brenda",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRENDEN_REWARD": {
+ "label": "Dewford Gym - Sailor Brenden",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRENT_REWARD": {
+ "label": "Route 119 - Bug Maniac Brent",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRIANNA_REWARD": {
+ "label": "Sootopolis Gym - Lady Brianna",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRICE_REWARD": {
+ "label": "Route 112 - Hiker Brice",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRIDGET_REWARD": {
+ "label": "Sootopolis Gym - Beauty Bridget",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BROOKE_1_REWARD": {
+ "label": "Route 111 - Cooltrainer Brooke",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRYANT_REWARD": {
+ "label": "Route 112 - Kindler Bryant",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_BRYAN_REWARD": {
+ "label": "Route 111 - Ruin Maniac Bryan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CALE_REWARD": {
+ "label": "Route 121 - Bug Maniac Cale",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CALLIE_REWARD": {
+ "label": "Route 120 - Battle Girl Callie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CALVIN_1_REWARD": {
+ "label": "Route 102 - Youngster Calvin",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CAMDEN_REWARD": {
+ "label": "Route 127 - Triathlete Camden",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CAMERON_1_REWARD": {
+ "label": "Route 123 - Psychic Cameron",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CAMRON_REWARD": {
+ "label": "Route 107 - Triathlete Camron",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CARLEE_REWARD": {
+ "label": "Route 128 - Swimmer Carlee",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CAROLINA_REWARD": {
+ "label": "Route 108 - Cooltrainer Carolina",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CAROLINE_REWARD": {
+ "label": "Victory Road B2F - Cooltrainer Caroline",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CAROL_REWARD": {
+ "label": "Route 112 - Picnicker Carol",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CARTER_REWARD": {
+ "label": "Route 109 - Fisherman Carter",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CATHERINE_1_REWARD": {
+ "label": "Route 119 - Pokemon Ranger Catherine",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CEDRIC_REWARD": {
+ "label": "Mt Pyre 6F - Psychic Cedric",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CELIA_REWARD": {
+ "label": "Route 111 - Picnicker Celia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CELINA_REWARD": {
+ "label": "Route 111 - Aroma Lady Celina",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CHAD_REWARD": {
+ "label": "Route 124 - Swimmer Chad",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CHANDLER_REWARD": {
+ "label": "Route 109 - Tuber Chandler",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CHARLIE_REWARD": {
+ "label": "Abandoned Ship 1F - Tuber Charlie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CHARLOTTE_REWARD": {
+ "label": "Route 114 - Picnicker Charlotte",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CHASE_REWARD": {
+ "label": "Route 129 - Triathlete Chase",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CHESTER_REWARD": {
+ "label": "Route 118 - Bird Keeper Chester",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CHIP_REWARD": {
+ "label": "Route 120 - Ruin Maniac Chip",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CHRIS_REWARD": {
+ "label": "Route 119 - Fisherman Chris",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CINDY_1_REWARD": {
+ "label": "Route 104 - Lady Cindy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CLARENCE_REWARD": {
+ "label": "Route 129 - Swimmer Clarence",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CLARISSA_REWARD": {
+ "label": "Route 120 - Parasol Lady Clarissa",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CLARK_REWARD": {
+ "label": "Route 116 - Hiker Clark",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CLAUDE_REWARD": {
+ "label": "Route 114 - Fisherman Claude",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CLIFFORD_REWARD": {
+ "label": "Mossdeep Gym - Gentleman Clifford",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_COBY_REWARD": {
+ "label": "Route 113 - Bird Keeper Coby",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_COLE_REWARD": {
+ "label": "Lavaridge Gym - Kindler Cole",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_COLIN_REWARD": {
+ "label": "Route 120 - Bird Keeper Colin",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_COLTON_REWARD": {
+ "label": "SS Tidal - Pokefan Colton",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CONNIE_REWARD": {
+ "label": "Sootopolis Gym - Beauty Connie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CONOR_REWARD": {
+ "label": "Route 133 - Expert Conor",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CORY_1_REWARD": {
+ "label": "Route 108 - Sailor Cory",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CRISSY_REWARD": {
+ "label": "Sootopolis Gym - Lass Crissy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CRISTIAN_REWARD": {
+ "label": "Dewford Gym - Black Belt Cristian",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CRISTIN_1_REWARD": {
+ "label": "Route 121 - Cooltrainer Cristin",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_CYNDY_1_REWARD": {
+ "label": "Route 115 - Battle Girl Cyndy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DAISUKE_REWARD": {
+ "label": "Route 111 - Black Belt Daisuke",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DAISY_REWARD": {
+ "label": "Route 103 - Aroma Lady Daisy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DALE_REWARD": {
+ "label": "Route 110 - Fisherman Dale",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DALTON_1_REWARD": {
+ "label": "Route 118 - Guitarist Dalton",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DANA_REWARD": {
+ "label": "Route 132 - Swimmer Dana",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DANIELLE_REWARD": {
+ "label": "Lavaridge Gym - Battle Girl Danielle",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DAPHNE_REWARD": {
+ "label": "Sootopolis Gym - Lady Daphne",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DARCY_REWARD": {
+ "label": "Route 132 - Cooltrainer Darcy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DARIAN_REWARD": {
+ "label": "Route 104 - Fisherman Darian",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DARIUS_REWARD": {
+ "label": "Fortree Gym - Bird Keeper Darius",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DARRIN_REWARD": {
+ "label": "Route 107 - Swimmer Darrin",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DAVID_REWARD": {
+ "label": "Route 109 - Swimmer David",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DAVIS_REWARD": {
+ "label": "Route 123 - Bug Catcher Davis",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DAWSON_REWARD": {
+ "label": "Route 116 - Rich Boy Dawson",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DAYTON_REWARD": {
+ "label": "Route 119 - Kindler Dayton",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DEANDRE_REWARD": {
+ "label": "Route 118 - Youngster Deandre",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DEAN_REWARD": {
+ "label": "Route 126 - Swimmer Dean",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DEBRA_REWARD": {
+ "label": "Route 133 - Swimmer Debra",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DECLAN_REWARD": {
+ "label": "Route 124 - Swimmer Declan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DEMETRIUS_REWARD": {
+ "label": "Abandoned Ship 1F - Youngster Demetrius",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DENISE_REWARD": {
+ "label": "Route 107 - Swimmer Denise",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DEREK_REWARD": {
+ "label": "Route 117 - Bug Maniac Derek",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DEVAN_REWARD": {
+ "label": "Route 116 - Hiker Devan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DIANA_1_REWARD": {
+ "label": "Jagged Pass - Picnicker Diana",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DIANNE_REWARD": {
+ "label": "Victory Road B2F - Cooltrainer Dianne",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DILLON_REWARD": {
+ "label": "Route 113 - Youngster Dillon",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DOMINIK_REWARD": {
+ "label": "Route 105 - Swimmer Dominik",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DONALD_REWARD": {
+ "label": "Route 119 - Bug Maniac Donald",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DONNY_REWARD": {
+ "label": "Route 127 - Triathlete Donny",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DOUGLAS_REWARD": {
+ "label": "Route 106 - Swimmer Douglas",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DOUG_REWARD": {
+ "label": "Route 119 - Bug Catcher Doug",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DRAKE_REWARD": {
+ "label": "Ever Grande City - Elite Four Drake",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DREW_REWARD": {
+ "label": "Route 111 - Camper Drew",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DUNCAN_REWARD": {
+ "label": "Abandoned Ship B1F - Sailor Duncan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DUSTY_1_REWARD": {
+ "label": "Route 111 - Ruin Maniac Dusty",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DWAYNE_REWARD": {
+ "label": "Route 109 - Sailor Dwayne",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DYLAN_1_REWARD": {
+ "label": "Route 117 - Triathlete Dylan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_DEZ_AND_LUKE_REWARD": {
+ "label": "Mt Pyre 2F - Young Couple Dez and Luke",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_EDGAR_REWARD": {
+ "label": "Victory Road 1F - Cooltrainer Edgar",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_EDMOND_REWARD": {
+ "label": "Route 109 - Sailor Edmond",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_EDWARDO_REWARD": {
+ "label": "Fortree Gym - Bird Keeper Edwardo",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_EDWARD_REWARD": {
+ "label": "Route 110 - Psychic Edward",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_EDWIN_1_REWARD": {
+ "label": "Route 110 - Collector Edwin",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ED_REWARD": {
+ "label": "Route 123 - Collector Ed",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ELIJAH_REWARD": {
+ "label": "Route 109 - Bird Keeper Elijah",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ELI_REWARD": {
+ "label": "Lavaridge Gym - Hiker Eli",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ELLIOT_1_REWARD": {
+ "label": "Route 106 - Fisherman Elliot",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ERIC_REWARD": {
+ "label": "Jagged Pass - Hiker Eric",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ERNEST_1_REWARD": {
+ "label": "Route 125 - Sailor Ernest",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ETHAN_1_REWARD": {
+ "label": "Jagged Pass - Camper Ethan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_FABIAN_REWARD": {
+ "label": "Route 119 - Guitarist Fabian",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_FELIX_REWARD": {
+ "label": "Victory Road B2F - Cooltrainer Felix",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_FERNANDO_1_REWARD": {
+ "label": "Route 123 - Guitarist Fernando",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_FLANNERY_1_REWARD": {
+ "label": "Lavaridge Gym - Leader Flannery",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_FLINT_REWARD": {
+ "label": "Fortree Gym - Camper Flint",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_FOSTER_REWARD": {
+ "label": "Route 105 - Ruin Maniac Foster",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_FRANKLIN_REWARD": {
+ "label": "Route 133 - Swimmer Franklin",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_FREDRICK_REWARD": {
+ "label": "Route 123 - Expert Fredrick",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GABRIELLE_1_REWARD": {
+ "label": "Mt Pyre 3F - Pokemon Breeder Gabrielle",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GARRET_REWARD": {
+ "label": "SS Tidal - Rich Boy Garret",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GARRISON_REWARD": {
+ "label": "Abandoned Ship 1F - Ruin Maniac Garrison",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GEORGE_REWARD": {
+ "label": "Petalburg Gym - Cooltrainer George",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GERALD_REWARD": {
+ "label": "Lavaridge Gym - Cooltrainer Gerald",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GILBERT_REWARD": {
+ "label": "Route 132 - Swimmer Gilbert",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GINA_AND_MIA_1_REWARD": {
+ "label": "Route 104 - Twins Gina and Mia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GLACIA_REWARD": {
+ "label": "Ever Grande City - Elite Four Glacia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRACE_REWARD": {
+ "label": "Route 124 - Swimmer Grace",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GREG_REWARD": {
+ "label": "Route 119 - Bug Catcher Greg",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_AQUA_HIDEOUT_1_REWARD": {
+ "label": "Aqua Hideout 1F - Team Aqua Grunt",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_AQUA_HIDEOUT_2_REWARD": {
+ "label": "Aqua Hideout B1F - Team Aqua Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_AQUA_HIDEOUT_3_REWARD": {
+ "label": "Aqua Hideout B1F - Team Aqua Grunt 4",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_AQUA_HIDEOUT_4_REWARD": {
+ "label": "Aqua Hideout B2F - Team Aqua Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_AQUA_HIDEOUT_5_REWARD": {
+ "label": "Aqua Hideout B1F - Team Aqua Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_AQUA_HIDEOUT_6_REWARD": {
+ "label": "Aqua Hideout B2F - Team Aqua Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_AQUA_HIDEOUT_7_REWARD": {
+ "label": "Aqua Hideout B1F - Team Aqua Grunt 3",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_AQUA_HIDEOUT_8_REWARD": {
+ "label": "Aqua Hideout B2F - Team Aqua Grunt 3",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_10_REWARD": {
+ "label": "Magma Hideout 3F - Team Magma Grunt 3",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_11_REWARD": {
+ "label": "Magma Hideout 4F - Team Magma Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_12_REWARD": {
+ "label": "Magma Hideout 4F - Team Magma Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_13_REWARD": {
+ "label": "Magma Hideout 4F - Team Magma Grunt 3",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_14_REWARD": {
+ "label": "Magma Hideout 2F - Team Magma Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_15_REWARD": {
+ "label": "Magma Hideout 2F - Team Magma Grunt 5",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_16_REWARD": {
+ "label": "Magma Hideout 3F - Team Magma Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_1_REWARD": {
+ "label": "Magma Hideout 1F - Team Magma Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_2_REWARD": {
+ "label": "Magma Hideout 1F - Team Magma Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_3_REWARD": {
+ "label": "Magma Hideout 2F - Team Magma Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_4_REWARD": {
+ "label": "Magma Hideout 2F - Team Magma Grunt 4",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_5_REWARD": {
+ "label": "Magma Hideout 2F - Team Magma Grunt 3",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_6_REWARD": {
+ "label": "Magma Hideout 2F - Team Magma Grunt 6",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_7_REWARD": {
+ "label": "Magma Hideout 2F - Team Magma Grunt 7",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_8_REWARD": {
+ "label": "Magma Hideout 2F - Team Magma Grunt 8",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_9_REWARD": {
+ "label": "Magma Hideout 3F - Team Magma Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MT_CHIMNEY_1_REWARD": {
+ "label": "Mt Chimney - Team Magma Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MT_CHIMNEY_2_REWARD": {
+ "label": "Mt Chimney - Team Magma Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MT_PYRE_1_REWARD": {
+ "label": "Mt Pyre Summit - Team Aqua Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MT_PYRE_2_REWARD": {
+ "label": "Mt Pyre Summit - Team Aqua Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MT_PYRE_3_REWARD": {
+ "label": "Mt Pyre Summit - Team Aqua Grunt 4",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MT_PYRE_4_REWARD": {
+ "label": "Mt Pyre Summit - Team Aqua Grunt 3",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MUSEUM_1_REWARD": {
+ "label": "Oceanic Museum - Team Aqua Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_MUSEUM_2_REWARD": {
+ "label": "Oceanic Museum - Team Aqua Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_PETALBURG_WOODS_REWARD": {
+ "label": "Petalburg Woods - Team Aqua Grunt",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_RUSTURF_TUNNEL_REWARD": {
+ "label": "Rusturf Tunnel - Team Aqua Grunt",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_1_REWARD": {
+ "label": "Seafloor Cavern Room 1 - Team Aqua Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_2_REWARD": {
+ "label": "Seafloor Cavern Room 1 - Team Aqua Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_3_REWARD": {
+ "label": "Seafloor Cavern Room 4 - Team Aqua Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_4_REWARD": {
+ "label": "Seafloor Cavern Room 4 - Team Aqua Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_5_REWARD": {
+ "label": "Seafloor Cavern Room 3 - Team Aqua Grunt",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SPACE_CENTER_1_REWARD": {
+ "label": "Space Center - Team Magma Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SPACE_CENTER_2_REWARD": {
+ "label": "Space Center - Team Magma Grunt 4",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SPACE_CENTER_3_REWARD": {
+ "label": "Space Center - Team Magma Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SPACE_CENTER_4_REWARD": {
+ "label": "Space Center - Team Magma Grunt 3",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SPACE_CENTER_5_REWARD": {
+ "label": "Space Center - Team Magma Grunt 5",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SPACE_CENTER_6_REWARD": {
+ "label": "Space Center - Team Magma Grunt 6",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_SPACE_CENTER_7_REWARD": {
+ "label": "Space Center - Team Magma Grunt 7",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_WEATHER_INST_1_REWARD": {
+ "label": "Weather Institute 1F - Team Aqua Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_WEATHER_INST_2_REWARD": {
+ "label": "Weather Institute 2F - Team Aqua Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_WEATHER_INST_3_REWARD": {
+ "label": "Weather Institute 2F - Team Aqua Grunt 3",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_WEATHER_INST_4_REWARD": {
+ "label": "Weather Institute 1F - Team Aqua Grunt 1",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GRUNT_WEATHER_INST_5_REWARD": {
+ "label": "Weather Institute 2F - Team Aqua Grunt 2",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_GWEN_REWARD": {
+ "label": "Route 109 - Tuber Gwen",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HAILEY_REWARD": {
+ "label": "Route 109 - Tuber Hailey",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HALEY_1_REWARD": {
+ "label": "Route 104 - Lass Haley",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HALLE_REWARD": {
+ "label": "Victory Road B1F - Cooltrainer Halle",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HANNAH_REWARD": {
+ "label": "Mossdeep Gym - Psychic Hannah",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HARRISON_REWARD": {
+ "label": "Route 128 - Swimmer Harrison",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HAYDEN_REWARD": {
+ "label": "Route 111 - Kindler Hayden",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HECTOR_REWARD": {
+ "label": "Route 115 - Collector Hector",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HEIDI_REWARD": {
+ "label": "Route 111 - Picnicker Heidi",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HELENE_REWARD": {
+ "label": "Route 115 - Battle Girl Helene",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HENRY_REWARD": {
+ "label": "Route 127 - Fisherman Henry",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HERMAN_REWARD": {
+ "label": "Route 131 - Swimmer Herman",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HIDEO_REWARD": {
+ "label": "Route 119 - Ninja Boy Hideo",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HITOSHI_REWARD": {
+ "label": "Route 134 - Black Belt Hitoshi",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HOPE_REWARD": {
+ "label": "Victory Road 1F - Cooltrainer Hope",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HUDSON_REWARD": {
+ "label": "Route 134 - Sailor Hudson",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HUEY_REWARD": {
+ "label": "Route 109 - Sailor Huey",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HUGH_REWARD": {
+ "label": "Route 119 - Bird Keeper Hugh",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_HUMBERTO_REWARD": {
+ "label": "Fortree Gym - Bird Keeper Humberto",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_IMANI_REWARD": {
+ "label": "Route 105 - Swimmer Imani",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_IRENE_REWARD": {
+ "label": "Route 111 - Picnicker Irene",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ISAAC_1_REWARD": {
+ "label": "Route 117 - Pokemon Breeder Isaac",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ISABELLA_REWARD": {
+ "label": "Route 124 - Triathlete Isabella",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ISABELLE_REWARD": {
+ "label": "Route 103 - Swimmer Isabelle",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ISABEL_1_REWARD": {
+ "label": "Route 110 - Pokefan Isabel",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ISAIAH_1_REWARD": {
+ "label": "Route 128 - Triathlete Isaiah",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ISOBEL_REWARD": {
+ "label": "Route 126 - Triathlete Isobel",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_IVAN_REWARD": {
+ "label": "Route 104 - Fisherman Ivan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JACE_REWARD": {
+ "label": "Lavaridge Gym - Kindler Jace",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JACKI_1_REWARD": {
+ "label": "Route 123 - Psychic Jacki",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JACKSON_1_REWARD": {
+ "label": "Route 119 - Pokemon Ranger Jackson",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JACK_REWARD": {
+ "label": "Route 134 - Swimmer Jack",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JACLYN_REWARD": {
+ "label": "Route 110 - Psychic Jaclyn",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JACOB_REWARD": {
+ "label": "Route 110 - Triathlete Jacob",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JAIDEN_REWARD": {
+ "label": "Route 115 - Ninja Boy Jaiden",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JAMES_1_REWARD": {
+ "label": "Petalburg Woods - Bug Catcher James",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JANICE_REWARD": {
+ "label": "Route 116 - Lass Janice",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JANI_REWARD": {
+ "label": "Abandoned Ship 1F - Tuber Jani",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JARED_REWARD": {
+ "label": "Fortree Gym - Bird Keeper Jared",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JASMINE_REWARD": {
+ "label": "Route 110 - Triathlete Jasmine",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JAYLEN_REWARD": {
+ "label": "Route 113 - Youngster Jaylen",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JAZMYN_REWARD": {
+ "label": "Route 123 - Cooltrainer Jazmyn",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JEFFREY_1_REWARD": {
+ "label": "Route 120 - Bug Maniac Jeffrey",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JEFF_REWARD": {
+ "label": "Lavaridge Gym - Kindler Jeff",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JENNA_REWARD": {
+ "label": "Route 120 - Pokemon Ranger Jenna",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JENNIFER_REWARD": {
+ "label": "Route 120 - Cooltrainer Jennifer",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JENNY_1_REWARD": {
+ "label": "Route 124 - Swimmer Jenny",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JEROME_REWARD": {
+ "label": "Route 108 - Swimmer Jerome",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JERRY_1_REWARD": {
+ "label": "Route 116 - School Kid Jerry",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JESSICA_1_REWARD": {
+ "label": "Route 121 - Beauty Jessica",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JOCELYN_REWARD": {
+ "label": "Dewford Gym - Battle Girl Jocelyn",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JODY_REWARD": {
+ "label": "Petalburg Gym - Cooltrainer Jody",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JOEY_REWARD": {
+ "label": "Route 116 - Youngster Joey",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JOHANNA_REWARD": {
+ "label": "Route 109 - Beauty Johanna",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JOHN_AND_JAY_1_REWARD": {
+ "label": "Meteor Falls 1F - Old Couple John and Jay",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JOHNSON_REWARD": {
+ "label": "Route 116 - Youngster Johnson",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JONAH_REWARD": {
+ "label": "Route 127 - Fisherman Jonah",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JONAS_REWARD": {
+ "label": "Route 123 - Ninja Boy Jonas",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JONATHAN_REWARD": {
+ "label": "Route 132 - Cooltrainer Jonathan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JOSEPH_REWARD": {
+ "label": "Route 110 - Guitarist Joseph",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JOSE_REWARD": {
+ "label": "Route 116 - Bug Catcher Jose",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JOSH_REWARD": {
+ "label": "Rustboro Gym - Youngster Josh",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JOSUE_REWARD": {
+ "label": "Route 105 - Bird Keeper Josue",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JUAN_1_REWARD": {
+ "label": "Sootopolis Gym - Leader Juan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JULIE_REWARD": {
+ "label": "Victory Road B2F - Cooltrainer Julie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_JULIO_REWARD": {
+ "label": "Jagged Pass - Triathlete Julio",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KAI_REWARD": {
+ "label": "Route 114 - Fisherman Kai",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KALEB_REWARD": {
+ "label": "Route 110 - Pokefan Kaleb",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KARA_REWARD": {
+ "label": "Route 131 - Swimmer Kara",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KAREN_1_REWARD": {
+ "label": "Route 116 - School Kid Karen",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KATE_AND_JOY_REWARD": {
+ "label": "Route 121 - Sr. and Jr. Kate and Joy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KATELYNN_REWARD": {
+ "label": "Victory Road 1F - Cooltrainer Katelynn",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KATELYN_1_REWARD": {
+ "label": "Route 128 - Triathlete Katelyn",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KATHLEEN_REWARD": {
+ "label": "Mossdeep Gym - Hex Maniac Kathleen",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KATIE_REWARD": {
+ "label": "Route 130 - Swimmer Katie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KAYLA_REWARD": {
+ "label": "Mt Pyre 3F - Psychic Kayla",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KAYLEY_REWARD": {
+ "label": "Route 123 - Parasol Lady Kayley",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KEEGAN_REWARD": {
+ "label": "Lavaridge Gym - Kindler Keegan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KEIGO_REWARD": {
+ "label": "Route 120 - Ninja Boy Keigo",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KELVIN_REWARD": {
+ "label": "Route 134 - Sailor Kelvin",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KENT_REWARD": {
+ "label": "Route 119 - Bug Catcher Kent",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KEVIN_REWARD": {
+ "label": "Route 131 - Swimmer Kevin",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KIM_AND_IRIS_REWARD": {
+ "label": "Route 125 - Sr. and Jr. Kim and Iris",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KINDRA_REWARD": {
+ "label": "Route 123 - Hex Maniac Kindra",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KIRA_AND_DAN_1_REWARD": {
+ "label": "Abandoned Ship 1F - Young Couple Kira and Dan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KIRK_REWARD": {
+ "label": "Mauville Gym - Guitarist Kirk",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KIYO_REWARD": {
+ "label": "Route 132 - Black Belt Kiyo",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KOICHI_REWARD": {
+ "label": "Route 115 - Black Belt Koichi",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KOJI_1_REWARD": {
+ "label": "Route 127 - Black Belt Koji",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KYLA_REWARD": {
+ "label": "Route 106 - Swimmer Kyla",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_KYRA_REWARD": {
+ "label": "Route 115 - Triathlete Kyra",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LAO_1_REWARD": {
+ "label": "Route 113 - Ninja Boy Lao",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LARRY_REWARD": {
+ "label": "Route 112 - Camper Larry",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LAURA_REWARD": {
+ "label": "Dewford Gym - Battle Girl Laura",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LAUREL_REWARD": {
+ "label": "Route 134 - Swimmer Laurel",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LAWRENCE_REWARD": {
+ "label": "Route 113 - Camper Lawrence",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LEA_AND_JED_REWARD": {
+ "label": "SS Tidal - Young Couple Lea and Jed",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LEAH_REWARD": {
+ "label": "Mt Pyre 2F - Hex Maniac Leah",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LENNY_REWARD": {
+ "label": "Route 114 - Hiker Lenny",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LEONARDO_REWARD": {
+ "label": "Route 126 - Swimmer Leonardo",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LEONARD_REWARD": {
+ "label": "SS Tidal - Sailor Leonard",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LEONEL_REWARD": {
+ "label": "Route 120 - Cooltrainer Leonel",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LILA_AND_ROY_1_REWARD": {
+ "label": "Route 124 - Sis and Bro Lila and Roy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LILITH_REWARD": {
+ "label": "Dewford Gym - Battle Girl Lilith",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LINDA_REWARD": {
+ "label": "Route 133 - Swimmer Linda",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LISA_AND_RAY_REWARD": {
+ "label": "Route 107 - Sis and Bro Lisa and Ray",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LOLA_1_REWARD": {
+ "label": "Route 109 - Tuber Lola",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LORENZO_REWARD": {
+ "label": "Route 120 - Pokemon Ranger Lorenzo",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LUCAS_1_REWARD": {
+ "label": "Route 114 - Hiker Lucas",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LUIS_REWARD": {
+ "label": "Route 105 - Swimmer Luis",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LUNG_REWARD": {
+ "label": "Route 113 - Ninja Boy Lung",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LYDIA_1_REWARD": {
+ "label": "Route 117 - Pokemon Breeder Lydia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_LYLE_REWARD": {
+ "label": "Petalburg Woods - Bug Catcher Lyle",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MACEY_REWARD": {
+ "label": "Mossdeep Gym - Psychic Macey",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MADELINE_1_REWARD": {
+ "label": "Route 113 - Parasol Lady Madeline",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MAKAYLA_REWARD": {
+ "label": "Route 132 - Expert Makayla",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MARCEL_REWARD": {
+ "label": "Route 121 - Cooltrainer Marcel",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MARCOS_REWARD": {
+ "label": "Route 103 - Guitarist Marcos",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MARC_REWARD": {
+ "label": "Rustboro Gym - Hiker Marc",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MARIA_1_REWARD": {
+ "label": "Route 117 - Triathlete Maria",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MARK_REWARD": {
+ "label": "Mt Pyre 2F - Pokemaniac Mark",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MARLENE_REWARD": {
+ "label": "Route 115 - Psychic Marlene",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MARLEY_REWARD": {
+ "label": "Route 134 - Cooltrainer Marley",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MARY_REWARD": {
+ "label": "Petalburg Gym - Cooltrainer Mary",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MATTHEW_REWARD": {
+ "label": "Route 108 - Swimmer Matthew",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MATT_REWARD": {
+ "label": "Aqua Hideout B2F - Aqua Admin Matt",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MAURA_REWARD": {
+ "label": "Mossdeep Gym - Psychic Maura",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MAXIE_MAGMA_HIDEOUT_REWARD": {
+ "label": "Magma Hideout 4F - Magma Leader Maxie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MAXIE_MT_CHIMNEY_REWARD": {
+ "label": "Mt Chimney - Magma Leader Maxie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MEL_AND_PAUL_REWARD": {
+ "label": "Route 109 - Young Couple Mel and Paul",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MELINA_REWARD": {
+ "label": "Route 117 - Triathlete Melina",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MELISSA_REWARD": {
+ "label": "Mt Chimney - Beauty Melissa",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MICAH_REWARD": {
+ "label": "SS Tidal - Gentleman Micah",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MICHELLE_REWARD": {
+ "label": "Victory Road B1F - Cooltrainer Michelle",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MIGUEL_1_REWARD": {
+ "label": "Route 103 - Pokefan Miguel",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MIKE_2_REWARD": {
+ "label": "Rusturf Tunnel - Hiker Mike",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MISSY_REWARD": {
+ "label": "Route 108 - Swimmer Missy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MITCHELL_REWARD": {
+ "label": "Victory Road B1F - Cooltrainer Mitchell",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MIU_AND_YUKI_REWARD": {
+ "label": "Route 123 - Twins Miu and Yuki",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MOLLIE_REWARD": {
+ "label": "Route 133 - Expert Mollie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_MYLES_REWARD": {
+ "label": "Route 121 - Pokemon Breeder Myles",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NANCY_REWARD": {
+ "label": "Route 114 - Picnicker Nancy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NAOMI_REWARD": {
+ "label": "SS Tidal - Lady Naomi",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NATE_REWARD": {
+ "label": "Mossdeep Gym - Gentleman Nate",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NED_REWARD": {
+ "label": "Route 106 - Fisherman Ned",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NICHOLAS_REWARD": {
+ "label": "Mossdeep Gym - Psychic Nicholas",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NICOLAS_1_REWARD": {
+ "label": "Meteor Falls 1F - Dragon Tamer Nicolas",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NIKKI_REWARD": {
+ "label": "Route 126 - Swimmer Nikki",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NOB_1_REWARD": {
+ "label": "Route 115 - Black Belt Nob",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NOLAN_REWARD": {
+ "label": "Route 114 - Fisherman Nolan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NOLEN_REWARD": {
+ "label": "Route 125 - Swimmer Nolen",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_NORMAN_1_REWARD": {
+ "label": "Petalburg Gym - Leader Norman",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_OLIVIA_REWARD": {
+ "label": "Sootopolis Gym - Beauty Olivia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_OWEN_REWARD": {
+ "label": "Victory Road B2F - Cooltrainer Owen",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PABLO_1_REWARD": {
+ "label": "Route 126 - Triathlete Pablo",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PARKER_REWARD": {
+ "label": "Petalburg Gym - Cooltrainer Parker",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PAT_REWARD": {
+ "label": "Route 121 - Pokemon Breeder Pat",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PAXTON_REWARD": {
+ "label": "Route 132 - Expert Paxton",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PERRY_REWARD": {
+ "label": "Route 118 - Bird Keeper Perry",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PETE_REWARD": {
+ "label": "Route 103 - Swimmer Pete",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PHILLIP_REWARD": {
+ "label": "SS Tidal - Sailor Phillip",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PHIL_REWARD": {
+ "label": "Route 119 - Bird Keeper Phil",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PHOEBE_REWARD": {
+ "label": "Ever Grande City - Elite Four Phoebe",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PRESLEY_REWARD": {
+ "label": "Route 125 - Bird Keeper Presley",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_PRESTON_REWARD": {
+ "label": "Mossdeep Gym - Psychic Preston",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_QUINCY_REWARD": {
+ "label": "Victory Road 1F - Cooltrainer Quincy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RACHEL_REWARD": {
+ "label": "Route 119 - Parasol Lady Rachel",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RANDALL_REWARD": {
+ "label": "Petalburg Gym - Cooltrainer Randall",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_REED_REWARD": {
+ "label": "Route 129 - Swimmer Reed",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RELI_AND_IAN_REWARD": {
+ "label": "Route 131 - Sis and Bro Reli and Ian",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_REYNA_REWARD": {
+ "label": "Route 134 - Battle Girl Reyna",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RHETT_REWARD": {
+ "label": "Route 103 - Black Belt Rhett",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RICHARD_REWARD": {
+ "label": "Route 131 - Swimmer Richard",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RICKY_1_REWARD": {
+ "label": "Route 109 - Tuber Ricky",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RICK_REWARD": {
+ "label": "Route 102 - Bug Catcher Rick",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RILEY_REWARD": {
+ "label": "Route 120 - Ninja Boy Riley",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ROBERT_1_REWARD": {
+ "label": "Route 120 - Bird Keeper Robert",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RODNEY_REWARD": {
+ "label": "Route 130 - Swimmer Rodney",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ROGER_REWARD": {
+ "label": "Route 127 - Fisherman Roger",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ROLAND_REWARD": {
+ "label": "Route 124 - Swimmer Roland",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RONALD_REWARD": {
+ "label": "Route 132 - Fisherman Ronald",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ROSE_1_REWARD": {
+ "label": "Route 118 - Aroma Lady Rose",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ROXANNE_1_REWARD": {
+ "label": "Rustboro Gym - Leader Roxanne",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_RUBEN_REWARD": {
+ "label": "Route 128 - Cooltrainer Ruben",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SAMANTHA_REWARD": {
+ "label": "Mossdeep Gym - Psychic Samantha",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SAMUEL_REWARD": {
+ "label": "Victory Road B1F - Cooltrainer Samuel",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SANTIAGO_REWARD": {
+ "label": "Route 130 - Swimmer Santiago",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SARAH_REWARD": {
+ "label": "Route 116 - Lady Sarah",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SAWYER_1_REWARD": {
+ "label": "Mt Chimney - Hiker Sawyer",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHANE_REWARD": {
+ "label": "Route 114 - Camper Shane",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHANNON_REWARD": {
+ "label": "Victory Road B1F - Cooltrainer Shannon",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHARON_REWARD": {
+ "label": "Route 125 - Swimmer Sharon",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHAWN_REWARD": {
+ "label": "Mauville Gym - Guitarist Shawn",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHAYLA_REWARD": {
+ "label": "Route 112 - Aroma Lady Shayla",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHEILA_REWARD": {
+ "label": "Mt Chimney - Beauty Sheila",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHELBY_1_REWARD": {
+ "label": "Mt Chimney - Expert Shelby",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHELLY_SEAFLOOR_CAVERN_REWARD": {
+ "label": "Seafloor Cavern Room 3 - Aqua Admin Shelly",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHELLY_WEATHER_INSTITUTE_REWARD": {
+ "label": "Weather Institute 2F - Aqua Admin Shelly",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SHIRLEY_REWARD": {
+ "label": "Mt Chimney - Beauty Shirley",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SIDNEY_REWARD": {
+ "label": "Ever Grande City - Elite Four Sidney",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SIENNA_REWARD": {
+ "label": "Route 126 - Swimmer Sienna",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SIMON_REWARD": {
+ "label": "Route 109 - Tuber Simon",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SOPHIE_REWARD": {
+ "label": "Route 113 - Picnicker Sophie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SPENCER_REWARD": {
+ "label": "Route 124 - Swimmer Spencer",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_STAN_REWARD": {
+ "label": "Route 125 - Swimmer Stan",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_STEVEN_REWARD": {
+ "label": "Meteor Falls 1F - Rival Steven",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_STEVE_1_REWARD": {
+ "label": "Route 114 - Pokemaniac Steve",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SUSIE_REWARD": {
+ "label": "Route 131 - Swimmer Susie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_SYLVIA_REWARD": {
+ "label": "Mossdeep Gym - Hex Maniac Sylvia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TABITHA_MAGMA_HIDEOUT_REWARD": {
+ "label": "Magma Hideout 4F - Magma Admin Tabitha",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TABITHA_MT_CHIMNEY_REWARD": {
+ "label": "Mt Chimney - Magma Admin Tabitha",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TAKAO_REWARD": {
+ "label": "Dewford Gym - Black Belt Takao",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TAKASHI_REWARD": {
+ "label": "Route 119 - Ninja Boy Takashi",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TALIA_REWARD": {
+ "label": "Route 131 - Triathlete Talia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TAMMY_REWARD": {
+ "label": "Route 121 - Hex Maniac Tammy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TANYA_REWARD": {
+ "label": "Route 125 - Swimmer Tanya",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TARA_REWARD": {
+ "label": "Route 108 - Swimmer Tara",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TASHA_REWARD": {
+ "label": "Mt Pyre 4F - Hex Maniac Tasha",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TATE_AND_LIZA_1_REWARD": {
+ "label": "Mossdeep Gym - Leader Tate and Liza",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TAYLOR_REWARD": {
+ "label": "Route 119 - Bug Maniac Taylor",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TYRA_AND_IVY_REWARD": {
+ "label": "Route 114 - Sr. and Jr. Tyra and Ivy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_THALIA_1_REWARD": {
+ "label": "Abandoned Ship 1F - Beauty Thalia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_THOMAS_REWARD": {
+ "label": "SS Tidal - Gentleman Thomas",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TIANA_REWARD": {
+ "label": "Route 102 - Lass Tiana",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TIFFANY_REWARD": {
+ "label": "Sootopolis Gym - Beauty Tiffany",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TIMMY_REWARD": {
+ "label": "Route 110 - Youngster Timmy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TIMOTHY_1_REWARD": {
+ "label": "Route 115 - Expert Timothy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TISHA_REWARD": {
+ "label": "Route 129 - Swimmer Tisha",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TOMMY_REWARD": {
+ "label": "Rustboro Gym - Youngster Tommy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TONY_1_REWARD": {
+ "label": "Route 107 - Swimmer Tony",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TORI_AND_TIA_REWARD": {
+ "label": "Route 113 - Twins Tori and Tia",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TRAVIS_REWARD": {
+ "label": "Route 111 - Camper Travis",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TRENT_1_REWARD": {
+ "label": "Route 112 - Hiker Trent",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_TYRON_REWARD": {
+ "label": "Route 111 - Camper Tyron",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VALERIE_1_REWARD": {
+ "label": "Mt Pyre 6F - Hex Maniac Valerie",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VANESSA_REWARD": {
+ "label": "Route 121 - Pokefan Vanessa",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VICKY_REWARD": {
+ "label": "Route 111 - Winstrate Vicky",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VICTORIA_REWARD": {
+ "label": "Route 111 - Winstrate Victoria",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VICTOR_REWARD": {
+ "label": "Route 111 - Winstrate Victor",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VIOLET_REWARD": {
+ "label": "Route 123 - Aroma Lady Violet",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VIRGIL_REWARD": {
+ "label": "Mossdeep Gym - Psychic Virgil",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VITO_REWARD": {
+ "label": "Victory Road B2F - Cooltrainer Vito",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VIVIAN_REWARD": {
+ "label": "Mauville Gym - Battle Girl Vivian",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_VIVI_REWARD": {
+ "label": "Route 111 - Winstrate Vivi",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WADE_REWARD": {
+ "label": "Route 118 - Fisherman Wade",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WALLACE_REWARD": {
+ "label": "Ever Grande City - Champion Wallace",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WALTER_1_REWARD": {
+ "label": "Route 121 - Gentleman Walter",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WALLY_MAUVILLE_REWARD": {
+ "label": "Mauville City - Rival Wally",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WALLY_VR_1_REWARD": {
+ "label": "Victory Road 1F - Rival Wally",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WATTSON_1_REWARD": {
+ "label": "Mauville Gym - Leader Wattson",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WARREN_REWARD": {
+ "label": "Route 133 - Cooltrainer Warren",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WAYNE_REWARD": {
+ "label": "Route 128 - Fisherman Wayne",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WENDY_REWARD": {
+ "label": "Route 123 - Cooltrainer Wendy",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WILLIAM_REWARD": {
+ "label": "Mt Pyre 3F - Psychic William",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WILTON_1_REWARD": {
+ "label": "Route 111 - Cooltrainer Wilton",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WINONA_1_REWARD": {
+ "label": "Fortree Gym - Leader Winona",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WINSTON_1_REWARD": {
+ "label": "Route 104 - Rich Boy Winston",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_WYATT_REWARD": {
+ "label": "Route 113 - Pokemaniac Wyatt",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_YASU_REWARD": {
+ "label": "Route 119 - Ninja Boy Yasu",
+ "tags": ["Trainer"]
+ },
+ "TRAINER_ZANDER_REWARD": {
+ "label": "Mt Pyre 2F - Black Belt Zander",
+ "tags": ["Trainer"]
}
}
diff --git a/worlds/pokemon_emerald/data/regions/battle_frontier.json b/worlds/pokemon_emerald/data/regions/battle_frontier.json
new file mode 100644
index 0000000000..a391129bd1
--- /dev/null
+++ b/worlds/pokemon_emerald/data/regions/battle_frontier.json
@@ -0,0 +1,458 @@
+{
+ "REGION_BATTLE_FRONTIER_RECEPTION_GATE/MAIN": {
+ "parent_map": "MAP_BATTLE_FRONTIER_RECEPTION_GATE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_SS_TIDAL_CORRIDOR/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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [],
+ "warps": [
+ "MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_WEST:1"
+ ]
+ },
+ "REGION_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY/MAIN": {
+ "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [],
+ "warps": [
+ "MAP_BATTLE_FRONTIER_BATTLE_PALACE_LOBBY:0,1/MAP_BATTLE_FRONTIER_OUTSIDE_EAST:2"
+ ]
+ },
+ "REGION_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY/MAIN": {
+ "parent_map": "MAP_BATTLE_FRONTIER_BATTLE_TOWER_LOBBY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "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/cities.json b/worlds/pokemon_emerald/data/regions/cities.json
index d39c0cc847..063fb6a12b 100644
--- a/worlds/pokemon_emerald/data/regions/cities.json
+++ b/worlds/pokemon_emerald/data/regions/cities.json
@@ -1,6 +1,406 @@
{
+ "REGION_POKEDEX": {
+ "parent_map": "MAP_LITTLEROOT_TOWN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "POKEDEX_REWARD_001",
+ "POKEDEX_REWARD_002",
+ "POKEDEX_REWARD_003",
+ "POKEDEX_REWARD_004",
+ "POKEDEX_REWARD_005",
+ "POKEDEX_REWARD_006",
+ "POKEDEX_REWARD_007",
+ "POKEDEX_REWARD_008",
+ "POKEDEX_REWARD_009",
+ "POKEDEX_REWARD_010",
+ "POKEDEX_REWARD_011",
+ "POKEDEX_REWARD_012",
+ "POKEDEX_REWARD_013",
+ "POKEDEX_REWARD_014",
+ "POKEDEX_REWARD_015",
+ "POKEDEX_REWARD_016",
+ "POKEDEX_REWARD_017",
+ "POKEDEX_REWARD_018",
+ "POKEDEX_REWARD_019",
+ "POKEDEX_REWARD_020",
+ "POKEDEX_REWARD_021",
+ "POKEDEX_REWARD_022",
+ "POKEDEX_REWARD_023",
+ "POKEDEX_REWARD_024",
+ "POKEDEX_REWARD_025",
+ "POKEDEX_REWARD_026",
+ "POKEDEX_REWARD_027",
+ "POKEDEX_REWARD_028",
+ "POKEDEX_REWARD_029",
+ "POKEDEX_REWARD_030",
+ "POKEDEX_REWARD_031",
+ "POKEDEX_REWARD_032",
+ "POKEDEX_REWARD_033",
+ "POKEDEX_REWARD_034",
+ "POKEDEX_REWARD_035",
+ "POKEDEX_REWARD_036",
+ "POKEDEX_REWARD_037",
+ "POKEDEX_REWARD_038",
+ "POKEDEX_REWARD_039",
+ "POKEDEX_REWARD_040",
+ "POKEDEX_REWARD_041",
+ "POKEDEX_REWARD_042",
+ "POKEDEX_REWARD_043",
+ "POKEDEX_REWARD_044",
+ "POKEDEX_REWARD_045",
+ "POKEDEX_REWARD_046",
+ "POKEDEX_REWARD_047",
+ "POKEDEX_REWARD_048",
+ "POKEDEX_REWARD_049",
+ "POKEDEX_REWARD_050",
+ "POKEDEX_REWARD_051",
+ "POKEDEX_REWARD_052",
+ "POKEDEX_REWARD_053",
+ "POKEDEX_REWARD_054",
+ "POKEDEX_REWARD_055",
+ "POKEDEX_REWARD_056",
+ "POKEDEX_REWARD_057",
+ "POKEDEX_REWARD_058",
+ "POKEDEX_REWARD_059",
+ "POKEDEX_REWARD_060",
+ "POKEDEX_REWARD_061",
+ "POKEDEX_REWARD_062",
+ "POKEDEX_REWARD_063",
+ "POKEDEX_REWARD_064",
+ "POKEDEX_REWARD_065",
+ "POKEDEX_REWARD_066",
+ "POKEDEX_REWARD_067",
+ "POKEDEX_REWARD_068",
+ "POKEDEX_REWARD_069",
+ "POKEDEX_REWARD_070",
+ "POKEDEX_REWARD_071",
+ "POKEDEX_REWARD_072",
+ "POKEDEX_REWARD_073",
+ "POKEDEX_REWARD_074",
+ "POKEDEX_REWARD_075",
+ "POKEDEX_REWARD_076",
+ "POKEDEX_REWARD_077",
+ "POKEDEX_REWARD_078",
+ "POKEDEX_REWARD_079",
+ "POKEDEX_REWARD_080",
+ "POKEDEX_REWARD_081",
+ "POKEDEX_REWARD_082",
+ "POKEDEX_REWARD_083",
+ "POKEDEX_REWARD_084",
+ "POKEDEX_REWARD_085",
+ "POKEDEX_REWARD_086",
+ "POKEDEX_REWARD_087",
+ "POKEDEX_REWARD_088",
+ "POKEDEX_REWARD_089",
+ "POKEDEX_REWARD_090",
+ "POKEDEX_REWARD_091",
+ "POKEDEX_REWARD_092",
+ "POKEDEX_REWARD_093",
+ "POKEDEX_REWARD_094",
+ "POKEDEX_REWARD_095",
+ "POKEDEX_REWARD_096",
+ "POKEDEX_REWARD_097",
+ "POKEDEX_REWARD_098",
+ "POKEDEX_REWARD_099",
+ "POKEDEX_REWARD_100",
+ "POKEDEX_REWARD_101",
+ "POKEDEX_REWARD_102",
+ "POKEDEX_REWARD_103",
+ "POKEDEX_REWARD_104",
+ "POKEDEX_REWARD_105",
+ "POKEDEX_REWARD_106",
+ "POKEDEX_REWARD_107",
+ "POKEDEX_REWARD_108",
+ "POKEDEX_REWARD_109",
+ "POKEDEX_REWARD_110",
+ "POKEDEX_REWARD_111",
+ "POKEDEX_REWARD_112",
+ "POKEDEX_REWARD_113",
+ "POKEDEX_REWARD_114",
+ "POKEDEX_REWARD_115",
+ "POKEDEX_REWARD_116",
+ "POKEDEX_REWARD_117",
+ "POKEDEX_REWARD_118",
+ "POKEDEX_REWARD_119",
+ "POKEDEX_REWARD_120",
+ "POKEDEX_REWARD_121",
+ "POKEDEX_REWARD_122",
+ "POKEDEX_REWARD_123",
+ "POKEDEX_REWARD_124",
+ "POKEDEX_REWARD_125",
+ "POKEDEX_REWARD_126",
+ "POKEDEX_REWARD_127",
+ "POKEDEX_REWARD_128",
+ "POKEDEX_REWARD_129",
+ "POKEDEX_REWARD_130",
+ "POKEDEX_REWARD_131",
+ "POKEDEX_REWARD_132",
+ "POKEDEX_REWARD_133",
+ "POKEDEX_REWARD_134",
+ "POKEDEX_REWARD_135",
+ "POKEDEX_REWARD_136",
+ "POKEDEX_REWARD_137",
+ "POKEDEX_REWARD_138",
+ "POKEDEX_REWARD_139",
+ "POKEDEX_REWARD_140",
+ "POKEDEX_REWARD_141",
+ "POKEDEX_REWARD_142",
+ "POKEDEX_REWARD_143",
+ "POKEDEX_REWARD_144",
+ "POKEDEX_REWARD_145",
+ "POKEDEX_REWARD_146",
+ "POKEDEX_REWARD_147",
+ "POKEDEX_REWARD_148",
+ "POKEDEX_REWARD_149",
+ "POKEDEX_REWARD_150",
+ "POKEDEX_REWARD_151",
+ "POKEDEX_REWARD_152",
+ "POKEDEX_REWARD_153",
+ "POKEDEX_REWARD_154",
+ "POKEDEX_REWARD_155",
+ "POKEDEX_REWARD_156",
+ "POKEDEX_REWARD_157",
+ "POKEDEX_REWARD_158",
+ "POKEDEX_REWARD_159",
+ "POKEDEX_REWARD_160",
+ "POKEDEX_REWARD_161",
+ "POKEDEX_REWARD_162",
+ "POKEDEX_REWARD_163",
+ "POKEDEX_REWARD_164",
+ "POKEDEX_REWARD_165",
+ "POKEDEX_REWARD_166",
+ "POKEDEX_REWARD_167",
+ "POKEDEX_REWARD_168",
+ "POKEDEX_REWARD_169",
+ "POKEDEX_REWARD_170",
+ "POKEDEX_REWARD_171",
+ "POKEDEX_REWARD_172",
+ "POKEDEX_REWARD_173",
+ "POKEDEX_REWARD_174",
+ "POKEDEX_REWARD_175",
+ "POKEDEX_REWARD_176",
+ "POKEDEX_REWARD_177",
+ "POKEDEX_REWARD_178",
+ "POKEDEX_REWARD_179",
+ "POKEDEX_REWARD_180",
+ "POKEDEX_REWARD_181",
+ "POKEDEX_REWARD_182",
+ "POKEDEX_REWARD_183",
+ "POKEDEX_REWARD_184",
+ "POKEDEX_REWARD_185",
+ "POKEDEX_REWARD_186",
+ "POKEDEX_REWARD_187",
+ "POKEDEX_REWARD_188",
+ "POKEDEX_REWARD_189",
+ "POKEDEX_REWARD_190",
+ "POKEDEX_REWARD_191",
+ "POKEDEX_REWARD_192",
+ "POKEDEX_REWARD_193",
+ "POKEDEX_REWARD_194",
+ "POKEDEX_REWARD_195",
+ "POKEDEX_REWARD_196",
+ "POKEDEX_REWARD_197",
+ "POKEDEX_REWARD_198",
+ "POKEDEX_REWARD_199",
+ "POKEDEX_REWARD_200",
+ "POKEDEX_REWARD_201",
+ "POKEDEX_REWARD_202",
+ "POKEDEX_REWARD_203",
+ "POKEDEX_REWARD_204",
+ "POKEDEX_REWARD_205",
+ "POKEDEX_REWARD_206",
+ "POKEDEX_REWARD_207",
+ "POKEDEX_REWARD_208",
+ "POKEDEX_REWARD_209",
+ "POKEDEX_REWARD_210",
+ "POKEDEX_REWARD_211",
+ "POKEDEX_REWARD_212",
+ "POKEDEX_REWARD_213",
+ "POKEDEX_REWARD_214",
+ "POKEDEX_REWARD_215",
+ "POKEDEX_REWARD_216",
+ "POKEDEX_REWARD_217",
+ "POKEDEX_REWARD_218",
+ "POKEDEX_REWARD_219",
+ "POKEDEX_REWARD_220",
+ "POKEDEX_REWARD_221",
+ "POKEDEX_REWARD_222",
+ "POKEDEX_REWARD_223",
+ "POKEDEX_REWARD_224",
+ "POKEDEX_REWARD_225",
+ "POKEDEX_REWARD_226",
+ "POKEDEX_REWARD_227",
+ "POKEDEX_REWARD_228",
+ "POKEDEX_REWARD_229",
+ "POKEDEX_REWARD_230",
+ "POKEDEX_REWARD_231",
+ "POKEDEX_REWARD_232",
+ "POKEDEX_REWARD_233",
+ "POKEDEX_REWARD_234",
+ "POKEDEX_REWARD_235",
+ "POKEDEX_REWARD_236",
+ "POKEDEX_REWARD_237",
+ "POKEDEX_REWARD_238",
+ "POKEDEX_REWARD_239",
+ "POKEDEX_REWARD_240",
+ "POKEDEX_REWARD_241",
+ "POKEDEX_REWARD_242",
+ "POKEDEX_REWARD_243",
+ "POKEDEX_REWARD_244",
+ "POKEDEX_REWARD_245",
+ "POKEDEX_REWARD_246",
+ "POKEDEX_REWARD_247",
+ "POKEDEX_REWARD_248",
+ "POKEDEX_REWARD_249",
+ "POKEDEX_REWARD_250",
+ "POKEDEX_REWARD_251",
+ "POKEDEX_REWARD_252",
+ "POKEDEX_REWARD_253",
+ "POKEDEX_REWARD_254",
+ "POKEDEX_REWARD_255",
+ "POKEDEX_REWARD_256",
+ "POKEDEX_REWARD_257",
+ "POKEDEX_REWARD_258",
+ "POKEDEX_REWARD_259",
+ "POKEDEX_REWARD_260",
+ "POKEDEX_REWARD_261",
+ "POKEDEX_REWARD_262",
+ "POKEDEX_REWARD_263",
+ "POKEDEX_REWARD_264",
+ "POKEDEX_REWARD_265",
+ "POKEDEX_REWARD_266",
+ "POKEDEX_REWARD_267",
+ "POKEDEX_REWARD_268",
+ "POKEDEX_REWARD_269",
+ "POKEDEX_REWARD_270",
+ "POKEDEX_REWARD_271",
+ "POKEDEX_REWARD_272",
+ "POKEDEX_REWARD_273",
+ "POKEDEX_REWARD_274",
+ "POKEDEX_REWARD_275",
+ "POKEDEX_REWARD_276",
+ "POKEDEX_REWARD_277",
+ "POKEDEX_REWARD_278",
+ "POKEDEX_REWARD_279",
+ "POKEDEX_REWARD_280",
+ "POKEDEX_REWARD_281",
+ "POKEDEX_REWARD_282",
+ "POKEDEX_REWARD_283",
+ "POKEDEX_REWARD_284",
+ "POKEDEX_REWARD_285",
+ "POKEDEX_REWARD_286",
+ "POKEDEX_REWARD_287",
+ "POKEDEX_REWARD_288",
+ "POKEDEX_REWARD_289",
+ "POKEDEX_REWARD_290",
+ "POKEDEX_REWARD_291",
+ "POKEDEX_REWARD_292",
+ "POKEDEX_REWARD_293",
+ "POKEDEX_REWARD_294",
+ "POKEDEX_REWARD_295",
+ "POKEDEX_REWARD_296",
+ "POKEDEX_REWARD_297",
+ "POKEDEX_REWARD_298",
+ "POKEDEX_REWARD_299",
+ "POKEDEX_REWARD_300",
+ "POKEDEX_REWARD_301",
+ "POKEDEX_REWARD_302",
+ "POKEDEX_REWARD_303",
+ "POKEDEX_REWARD_304",
+ "POKEDEX_REWARD_305",
+ "POKEDEX_REWARD_306",
+ "POKEDEX_REWARD_307",
+ "POKEDEX_REWARD_308",
+ "POKEDEX_REWARD_309",
+ "POKEDEX_REWARD_310",
+ "POKEDEX_REWARD_311",
+ "POKEDEX_REWARD_312",
+ "POKEDEX_REWARD_313",
+ "POKEDEX_REWARD_314",
+ "POKEDEX_REWARD_315",
+ "POKEDEX_REWARD_316",
+ "POKEDEX_REWARD_317",
+ "POKEDEX_REWARD_318",
+ "POKEDEX_REWARD_319",
+ "POKEDEX_REWARD_320",
+ "POKEDEX_REWARD_321",
+ "POKEDEX_REWARD_322",
+ "POKEDEX_REWARD_323",
+ "POKEDEX_REWARD_324",
+ "POKEDEX_REWARD_325",
+ "POKEDEX_REWARD_326",
+ "POKEDEX_REWARD_327",
+ "POKEDEX_REWARD_328",
+ "POKEDEX_REWARD_329",
+ "POKEDEX_REWARD_330",
+ "POKEDEX_REWARD_331",
+ "POKEDEX_REWARD_332",
+ "POKEDEX_REWARD_333",
+ "POKEDEX_REWARD_334",
+ "POKEDEX_REWARD_335",
+ "POKEDEX_REWARD_336",
+ "POKEDEX_REWARD_337",
+ "POKEDEX_REWARD_338",
+ "POKEDEX_REWARD_339",
+ "POKEDEX_REWARD_340",
+ "POKEDEX_REWARD_341",
+ "POKEDEX_REWARD_342",
+ "POKEDEX_REWARD_343",
+ "POKEDEX_REWARD_344",
+ "POKEDEX_REWARD_345",
+ "POKEDEX_REWARD_346",
+ "POKEDEX_REWARD_347",
+ "POKEDEX_REWARD_348",
+ "POKEDEX_REWARD_349",
+ "POKEDEX_REWARD_350",
+ "POKEDEX_REWARD_351",
+ "POKEDEX_REWARD_352",
+ "POKEDEX_REWARD_353",
+ "POKEDEX_REWARD_354",
+ "POKEDEX_REWARD_355",
+ "POKEDEX_REWARD_356",
+ "POKEDEX_REWARD_357",
+ "POKEDEX_REWARD_358",
+ "POKEDEX_REWARD_359",
+ "POKEDEX_REWARD_360",
+ "POKEDEX_REWARD_361",
+ "POKEDEX_REWARD_362",
+ "POKEDEX_REWARD_363",
+ "POKEDEX_REWARD_364",
+ "POKEDEX_REWARD_365",
+ "POKEDEX_REWARD_366",
+ "POKEDEX_REWARD_367",
+ "POKEDEX_REWARD_368",
+ "POKEDEX_REWARD_369",
+ "POKEDEX_REWARD_370",
+ "POKEDEX_REWARD_371",
+ "POKEDEX_REWARD_372",
+ "POKEDEX_REWARD_373",
+ "POKEDEX_REWARD_374",
+ "POKEDEX_REWARD_375",
+ "POKEDEX_REWARD_376",
+ "POKEDEX_REWARD_377",
+ "POKEDEX_REWARD_378",
+ "POKEDEX_REWARD_379",
+ "POKEDEX_REWARD_380",
+ "POKEDEX_REWARD_381",
+ "POKEDEX_REWARD_382",
+ "POKEDEX_REWARD_383",
+ "POKEDEX_REWARD_384",
+ "POKEDEX_REWARD_385",
+ "POKEDEX_REWARD_386"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_SKY": {
- "parent_map": null,
+ "parent_map": "MAP_LITTLEROOT_TOWN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -25,13 +425,19 @@
"REGION_LITTLEROOT_TOWN/MAIN": {
"parent_map": "MAP_LITTLEROOT_TOWN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [
"EVENT_VISITED_LITTLEROOT_TOWN",
- "FREE_FLY_LOCATION"
+ "FREE_FLY_LOCATION",
+ "TERRA_CAVE_LOCATION",
+ "MARINE_CAVE_LOCATION"
],
"exits": [
"REGION_ROUTE101/MAIN",
+ "REGION_POKEDEX",
"REGION_SKY"
],
"warps": [
@@ -42,6 +448,9 @@
},
"REGION_LITTLEROOT_TOWN_MAYS_HOUSE_1F/MAIN": {
"parent_map": "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -52,6 +461,9 @@
},
"REGION_LITTLEROOT_TOWN_MAYS_HOUSE_2F/MAIN": {
"parent_map": "MAP_LITTLEROOT_TOWN_MAYS_HOUSE_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -61,9 +473,16 @@
},
"REGION_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F/MAIN": {
"parent_map": "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_AMULET_COIN",
- "NPC_GIFT_RECEIVED_SS_TICKET"
+ "NPC_GIFT_RECEIVED_SS_TICKET",
+ "NPC_GIFT_RECEIVED_AURORA_TICKET",
+ "NPC_GIFT_RECEIVED_EON_TICKET",
+ "NPC_GIFT_RECEIVED_MYSTIC_TICKET",
+ "NPC_GIFT_RECEIVED_OLD_SEA_MAP"
],
"events": [],
"exits": [],
@@ -74,6 +493,9 @@
},
"REGION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F/MAIN": {
"parent_map": "MAP_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -83,7 +505,12 @@
},
"REGION_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB/MAIN": {
"parent_map": "MAP_LITTLEROOT_TOWN_PROFESSOR_BIRCHS_LAB",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_RECEIVED_FIRST_POKEBALLS"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -93,6 +520,9 @@
"REGION_OLDALE_TOWN/MAIN": {
"parent_map": "MAP_OLDALE_TOWN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_POTION_OLDALE"
],
@@ -113,6 +543,9 @@
},
"REGION_OLDALE_TOWN_HOUSE1/MAIN": {
"parent_map": "MAP_OLDALE_TOWN_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -122,6 +555,9 @@
},
"REGION_OLDALE_TOWN_HOUSE2/MAIN": {
"parent_map": "MAP_OLDALE_TOWN_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -131,6 +567,9 @@
},
"REGION_OLDALE_TOWN_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_OLDALE_TOWN_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -141,6 +580,9 @@
},
"REGION_OLDALE_TOWN_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_OLDALE_TOWN_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -150,6 +592,9 @@
},
"REGION_OLDALE_TOWN_MART/MAIN": {
"parent_map": "MAP_OLDALE_TOWN_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -160,6 +605,9 @@
"REGION_PETALBURG_CITY/MAIN": {
"parent_map": "MAP_PETALBURG_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [
"EVENT_VISITED_PETALBURG_CITY"
@@ -181,6 +629,9 @@
},
"REGION_PETALBURG_CITY/NORTH_POND": {
"parent_map": "MAP_PETALBURG_CITY",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_PETALBURG_CITY_MAX_REVIVE"
],
@@ -192,6 +643,9 @@
},
"REGION_PETALBURG_CITY/SOUTH_POND": {
"parent_map": "MAP_PETALBURG_CITY",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_PETALBURG_CITY_ETHER",
"HIDDEN_ITEM_PETALBURG_CITY_RARE_CANDY"
@@ -204,6 +658,9 @@
},
"REGION_PETALBURG_CITY_HOUSE1/MAIN": {
"parent_map": "MAP_PETALBURG_CITY_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -213,6 +670,9 @@
},
"REGION_PETALBURG_CITY_HOUSE2/MAIN": {
"parent_map": "MAP_PETALBURG_CITY_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -222,8 +682,11 @@
},
"REGION_PETALBURG_CITY_WALLYS_HOUSE/MAIN": {
"parent_map": "MAP_PETALBURG_CITY_WALLYS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_HM03"
+ "NPC_GIFT_RECEIVED_HM_SURF"
],
"events": [],
"exits": [],
@@ -233,6 +696,9 @@
},
"REGION_PETALBURG_CITY_GYM/ROOM_1": {
"parent_map": "MAP_PETALBURG_CITY_GYM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -244,7 +710,12 @@
},
"REGION_PETALBURG_CITY_GYM/ROOM_2": {
"parent_map": "MAP_PETALBURG_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_MARY_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -255,7 +726,12 @@
},
"REGION_PETALBURG_CITY_GYM/ROOM_3": {
"parent_map": "MAP_PETALBURG_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_RANDALL_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -266,7 +742,12 @@
},
"REGION_PETALBURG_CITY_GYM/ROOM_4": {
"parent_map": "MAP_PETALBURG_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GEORGE_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -276,7 +757,12 @@
},
"REGION_PETALBURG_CITY_GYM/ROOM_5": {
"parent_map": "MAP_PETALBURG_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_ALEXIA_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -288,7 +774,12 @@
},
"REGION_PETALBURG_CITY_GYM/ROOM_6": {
"parent_map": "MAP_PETALBURG_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_PARKER_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -298,7 +789,12 @@
},
"REGION_PETALBURG_CITY_GYM/ROOM_7": {
"parent_map": "MAP_PETALBURG_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_BERKE_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -309,7 +805,12 @@
},
"REGION_PETALBURG_CITY_GYM/ROOM_8": {
"parent_map": "MAP_PETALBURG_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_JODY_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -320,9 +821,13 @@
},
"REGION_PETALBURG_CITY_GYM/ROOM_9": {
"parent_map": "MAP_PETALBURG_CITY_GYM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM42",
- "BADGE_5"
+ "NPC_GIFT_RECEIVED_TM_FACADE",
+ "BADGE_5",
+ "TRAINER_NORMAN_1_REWARD"
],
"events": [
"EVENT_DEFEAT_NORMAN"
@@ -335,6 +840,9 @@
},
"REGION_PETALBURG_CITY_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_PETALBURG_CITY_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -345,6 +853,9 @@
},
"REGION_PETALBURG_CITY_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_PETALBURG_CITY_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -354,6 +865,9 @@
},
"REGION_PETALBURG_CITY_MART/MAIN": {
"parent_map": "MAP_PETALBURG_CITY_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -364,9 +878,13 @@
"REGION_RUSTBORO_CITY/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_RUSTBORO_CITY_X_DEFEND",
- "NPC_GIFT_RECEIVED_GREAT_BALL_RUSTBORO_CITY"
+ "NPC_GIFT_RECEIVED_GREAT_BALL_RUSTBORO_CITY",
+ "TRAINER_BRENDAN_RUSTBORO_MUDKIP_REWARD"
],
"events": [
"EVENT_RETURN_DEVON_GOODS",
@@ -393,9 +911,16 @@
},
"REGION_RUSTBORO_CITY_GYM/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_GYM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM39",
- "BADGE_1"
+ "NPC_GIFT_RECEIVED_TM_ROCK_TOMB",
+ "BADGE_1",
+ "TRAINER_JOSH_REWARD",
+ "TRAINER_TOMMY_REWARD",
+ "TRAINER_MARC_REWARD",
+ "TRAINER_ROXANNE_1_REWARD"
],
"events": [
"EVENT_DEFEAT_ROXANNE"
@@ -407,6 +932,9 @@
},
"REGION_RUSTBORO_CITY_MART/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -416,6 +944,9 @@
},
"REGION_RUSTBORO_CITY_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -426,6 +957,9 @@
},
"REGION_RUSTBORO_CITY_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -435,6 +969,9 @@
},
"REGION_RUSTBORO_CITY_POKEMON_SCHOOL/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_POKEMON_SCHOOL",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_QUICK_CLAW"
],
@@ -446,6 +983,9 @@
},
"REGION_RUSTBORO_CITY_DEVON_CORP_1F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_DEVON_CORP_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -456,6 +996,9 @@
},
"REGION_RUSTBORO_CITY_DEVON_CORP_2F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_DEVON_CORP_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -466,6 +1009,9 @@
},
"REGION_RUSTBORO_CITY_DEVON_CORP_3F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_DEVON_CORP_3F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_LETTER",
"NPC_GIFT_RECEIVED_EXP_SHARE"
@@ -480,6 +1026,9 @@
},
"REGION_RUSTBORO_CITY_FLAT1_1F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_FLAT1_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -490,6 +1039,9 @@
},
"REGION_RUSTBORO_CITY_FLAT1_2F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_FLAT1_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -499,6 +1051,9 @@
},
"REGION_RUSTBORO_CITY_FLAT2_1F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_FLAT2_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -509,6 +1064,9 @@
},
"REGION_RUSTBORO_CITY_FLAT2_2F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_FLAT2_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_PREMIER_BALL_RUSTBORO"
],
@@ -521,6 +1079,9 @@
},
"REGION_RUSTBORO_CITY_FLAT2_3F/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_FLAT2_3F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -530,6 +1091,9 @@
},
"REGION_RUSTBORO_CITY_HOUSE1/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -539,6 +1103,9 @@
},
"REGION_RUSTBORO_CITY_HOUSE2/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -548,6 +1115,9 @@
},
"REGION_RUSTBORO_CITY_HOUSE3/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_HOUSE3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -557,8 +1127,11 @@
},
"REGION_RUSTBORO_CITY_CUTTERS_HOUSE/MAIN": {
"parent_map": "MAP_RUSTBORO_CITY_CUTTERS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_HM01"
+ "NPC_GIFT_RECEIVED_HM_CUT"
],
"events": [],
"exits": [],
@@ -569,6 +1142,9 @@
"REGION_DEWFORD_TOWN/MAIN": {
"parent_map": "MAP_DEWFORD_TOWN",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"NPC_GIFT_RECEIVED_OLD_ROD"
],
@@ -591,8 +1167,11 @@
},
"REGION_DEWFORD_TOWN_HALL/MAIN": {
"parent_map": "MAP_DEWFORD_TOWN_HALL",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM36"
+ "NPC_GIFT_RECEIVED_TM_SLUDGE_BOMB"
],
"events": [],
"exits": [],
@@ -602,6 +1181,9 @@
},
"REGION_DEWFORD_TOWN_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_DEWFORD_TOWN_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -612,6 +1194,9 @@
},
"REGION_DEWFORD_TOWN_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_DEWFORD_TOWN_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -621,9 +1206,19 @@
},
"REGION_DEWFORD_TOWN_GYM/MAIN": {
"parent_map": "MAP_DEWFORD_TOWN_GYM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM08",
- "BADGE_2"
+ "NPC_GIFT_RECEIVED_TM_BULK_UP",
+ "BADGE_2",
+ "TRAINER_LAURA_REWARD",
+ "TRAINER_LILITH_REWARD",
+ "TRAINER_BRENDEN_REWARD",
+ "TRAINER_TAKAO_REWARD",
+ "TRAINER_JOCELYN_REWARD",
+ "TRAINER_CRISTIAN_REWARD",
+ "TRAINER_BRAWLY_1_REWARD"
],
"events": [
"EVENT_DEFEAT_BRAWLY"
@@ -635,6 +1230,9 @@
},
"REGION_DEWFORD_TOWN_HOUSE1/MAIN": {
"parent_map": "MAP_DEWFORD_TOWN_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -644,6 +1242,9 @@
},
"REGION_DEWFORD_TOWN_HOUSE2/MAIN": {
"parent_map": "MAP_DEWFORD_TOWN_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_SILK_SCARF"
],
@@ -656,6 +1257,9 @@
"REGION_SLATEPORT_CITY/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"NPC_GIFT_RECEIVED_POWDER_JAR"
],
@@ -683,6 +1287,9 @@
},
"REGION_SLATEPORT_CITY_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -692,6 +1299,9 @@
},
"REGION_SLATEPORT_CITY_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -702,6 +1312,9 @@
},
"REGION_SLATEPORT_CITY_MART/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [
"EVENT_BUY_HARBOR_MAIL"
@@ -713,6 +1326,9 @@
},
"REGION_SLATEPORT_CITY_STERNS_SHIPYARD_1F/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_STERNS_SHIPYARD_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [
"EVENT_TALK_TO_DOCK"
@@ -725,6 +1341,9 @@
},
"REGION_SLATEPORT_CITY_STERNS_SHIPYARD_2F/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_STERNS_SHIPYARD_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -734,8 +1353,11 @@
},
"REGION_SLATEPORT_CITY_BATTLE_TENT_LOBBY/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_BATTLE_TENT_LOBBY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM41"
+ "NPC_GIFT_RECEIVED_TM_TORMENT"
],
"events": [],
"exits": [],
@@ -745,6 +1367,9 @@
},
"REGION_SLATEPORT_CITY_POKEMON_FAN_CLUB/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_POKEMON_FAN_CLUB",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_SOOTHE_BELL"
],
@@ -756,8 +1381,11 @@
},
"REGION_SLATEPORT_CITY_OCEANIC_MUSEUM_1F/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM46"
+ "NPC_GIFT_RECEIVED_TM_THIEF"
],
"events": [],
"exits": [],
@@ -768,7 +1396,13 @@
},
"REGION_SLATEPORT_CITY_OCEANIC_MUSEUM_2F/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_OCEANIC_MUSEUM_2F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_MUSEUM_1_REWARD",
+ "TRAINER_GRUNT_MUSEUM_2_REWARD"
+ ],
"events": [
"EVENT_RESCUE_CAPT_STERN"
],
@@ -779,6 +1413,9 @@
},
"REGION_SLATEPORT_CITY_NAME_RATERS_HOUSE/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_NAME_RATERS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -788,6 +1425,9 @@
},
"REGION_SLATEPORT_CITY_HARBOR/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_HARBOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_DEEP_SEA_TOOTH",
"NPC_GIFT_RECEIVED_DEEP_SEA_SCALE"
@@ -803,6 +1443,9 @@
},
"REGION_SLATEPORT_CITY_HOUSE/MAIN": {
"parent_map": "MAP_SLATEPORT_CITY_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -813,10 +1456,14 @@
"REGION_MAUVILLE_CITY/MAIN": {
"parent_map": "MAP_MAUVILLE_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_MAUVILLE_CITY_X_SPEED",
"NPC_GIFT_GOT_BASEMENT_KEY_FROM_WATTSON",
- "NPC_GIFT_GOT_TM24_FROM_WATTSON"
+ "NPC_GIFT_GOT_TM_THUNDERBOLT_FROM_WATTSON",
+ "TRAINER_WALLY_MAUVILLE_REWARD"
],
"events": [
"EVENT_VISITED_MAUVILLE_CITY"
@@ -839,9 +1486,18 @@
},
"REGION_MAUVILLE_CITY_GYM/MAIN": {
"parent_map": "MAP_MAUVILLE_CITY_GYM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM34",
- "BADGE_3"
+ "NPC_GIFT_RECEIVED_TM_SHOCK_WAVE",
+ "BADGE_3",
+ "TRAINER_VIVIAN_REWARD",
+ "TRAINER_KIRK_REWARD",
+ "TRAINER_BEN_REWARD",
+ "TRAINER_ANGELO_REWARD",
+ "TRAINER_SHAWN_REWARD",
+ "TRAINER_WATTSON_1_REWARD"
],
"events": [
"EVENT_DEFEAT_WATTSON"
@@ -853,6 +1509,9 @@
},
"REGION_MAUVILLE_CITY_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_MAUVILLE_CITY_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -863,6 +1522,9 @@
},
"REGION_MAUVILLE_CITY_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_MAUVILLE_CITY_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -872,6 +1534,9 @@
},
"REGION_MAUVILLE_CITY_BIKE_SHOP/MAIN": {
"parent_map": "MAP_MAUVILLE_CITY_BIKE_SHOP",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_ACRO_BIKE",
"NPC_GIFT_RECEIVED_MACH_BIKE"
@@ -884,6 +1549,9 @@
},
"REGION_MAUVILLE_CITY_MART/MAIN": {
"parent_map": "MAP_MAUVILLE_CITY_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -893,8 +1561,11 @@
},
"REGION_MAUVILLE_CITY_HOUSE1/MAIN": {
"parent_map": "MAP_MAUVILLE_CITY_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_HM06"
+ "NPC_GIFT_RECEIVED_HM_ROCK_SMASH"
],
"events": [],
"exits": [],
@@ -904,6 +1575,9 @@
},
"REGION_MAUVILLE_CITY_HOUSE2/MAIN": {
"parent_map": "MAP_MAUVILLE_CITY_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_COIN_CASE"
],
@@ -915,6 +1589,9 @@
},
"REGION_MAUVILLE_CITY_GAME_CORNER/MAIN": {
"parent_map": "MAP_MAUVILLE_CITY_GAME_CORNER",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -925,6 +1602,9 @@
"REGION_VERDANTURF_TOWN/MAIN": {
"parent_map": "MAP_VERDANTURF_TOWN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [
"EVENT_VISITED_VERDANTURF_TOWN"
@@ -944,8 +1624,11 @@
},
"REGION_VERDANTURF_TOWN_BATTLE_TENT_LOBBY/MAIN": {
"parent_map": "MAP_VERDANTURF_TOWN_BATTLE_TENT_LOBBY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM45"
+ "NPC_GIFT_RECEIVED_TM_ATTRACT"
],
"events": [],
"exits": [],
@@ -955,6 +1638,9 @@
},
"REGION_VERDANTURF_TOWN_MART/MAIN": {
"parent_map": "MAP_VERDANTURF_TOWN_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -964,6 +1650,9 @@
},
"REGION_VERDANTURF_TOWN_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_VERDANTURF_TOWN_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -974,6 +1663,9 @@
},
"REGION_VERDANTURF_TOWN_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_VERDANTURF_TOWN_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -983,6 +1675,9 @@
},
"REGION_VERDANTURF_TOWN_WANDAS_HOUSE/MAIN": {
"parent_map": "MAP_VERDANTURF_TOWN_WANDAS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -992,6 +1687,9 @@
},
"REGION_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE/MAIN": {
"parent_map": "MAP_VERDANTURF_TOWN_FRIENDSHIP_RATERS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1001,6 +1699,9 @@
},
"REGION_VERDANTURF_TOWN_HOUSE/MAIN": {
"parent_map": "MAP_VERDANTURF_TOWN_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1011,6 +1712,9 @@
"REGION_FALLARBOR_TOWN/MAIN": {
"parent_map": "MAP_FALLARBOR_TOWN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_FALLARBOR_TOWN_NUGGET"
],
@@ -1031,6 +1735,9 @@
},
"REGION_FALLARBOR_TOWN_MART/MAIN": {
"parent_map": "MAP_FALLARBOR_TOWN_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1040,6 +1747,9 @@
},
"REGION_FALLARBOR_TOWN_BATTLE_TENT_LOBBY/MAIN": {
"parent_map": "MAP_FALLARBOR_TOWN_BATTLE_TENT_LOBBY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1049,6 +1759,9 @@
},
"REGION_FALLARBOR_TOWN_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_FALLARBOR_TOWN_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1059,6 +1772,9 @@
},
"REGION_FALLARBOR_TOWN_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_FALLARBOR_TOWN_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1068,8 +1784,11 @@
},
"REGION_FALLARBOR_TOWN_COZMOS_HOUSE/MAIN": {
"parent_map": "MAP_FALLARBOR_TOWN_COZMOS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM27"
+ "NPC_GIFT_RECEIVED_TM_RETURN"
],
"events": [],
"exits": [],
@@ -1079,6 +1798,9 @@
},
"REGION_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE/MAIN": {
"parent_map": "MAP_FALLARBOR_TOWN_MOVE_RELEARNERS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1089,6 +1811,9 @@
"REGION_LAVARIDGE_TOWN/MAIN": {
"parent_map": "MAP_LAVARIDGE_TOWN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_GO_GOGGLES"
],
@@ -1108,6 +1833,9 @@
},
"REGION_LAVARIDGE_TOWN/SPRINGS": {
"parent_map": "MAP_LAVARIDGE_TOWN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_LAVARIDGE_TOWN_ICE_HEAL"
],
@@ -1119,6 +1847,9 @@
},
"REGION_LAVARIDGE_TOWN_HERB_SHOP/MAIN": {
"parent_map": "MAP_LAVARIDGE_TOWN_HERB_SHOP",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_CHARCOAL"
],
@@ -1130,6 +1861,9 @@
},
"REGION_LAVARIDGE_TOWN_GYM_1F/ENTRANCE": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1142,7 +1876,14 @@
},
"REGION_LAVARIDGE_TOWN_GYM_1F/BOTTOM_LEFT_LOWER": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_AXLE_REWARD",
+ "TRAINER_GERALD_REWARD",
+ "TRAINER_COLE_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1158,6 +1899,9 @@
},
"REGION_LAVARIDGE_TOWN_GYM_1F/BOTTOM_LEFT_UPPER": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1170,7 +1914,12 @@
},
"REGION_LAVARIDGE_TOWN_GYM_1F/TOP_LEFT": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_DANIELLE_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1183,6 +1932,9 @@
},
"REGION_LAVARIDGE_TOWN_GYM_1F/TOP_CENTER": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1194,6 +1946,9 @@
},
"REGION_LAVARIDGE_TOWN_GYM_1F/TOP_RIGHT": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1204,9 +1959,13 @@
},
"REGION_LAVARIDGE_TOWN_GYM_1F/FLANNERY": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM50",
- "BADGE_4"
+ "NPC_GIFT_RECEIVED_TM_OVERHEAT",
+ "BADGE_4",
+ "TRAINER_FLANNERY_1_REWARD"
],
"events": [
"EVENT_DEFEAT_FLANNERY"
@@ -1220,6 +1979,9 @@
},
"REGION_LAVARIDGE_TOWN_GYM_B1F/TOP": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1232,7 +1994,13 @@
},
"REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_LEFT_LOWER": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_JACE_REWARD",
+ "TRAINER_ELI_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1249,7 +2017,12 @@
},
"REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_LEFT_UPPER_1": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_KEEGAN_REWARD"
+ ],
"events": [],
"exits": [
"REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_LEFT_LOWER"
@@ -1263,6 +2036,9 @@
},
"REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_LEFT_UPPER_2": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1275,7 +2051,12 @@
},
"REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_LOWER": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_JEFF_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1285,6 +2066,9 @@
},
"REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_MIDDLE": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1296,6 +2080,9 @@
},
"REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_UPPER_1": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1307,6 +2094,9 @@
},
"REGION_LAVARIDGE_TOWN_GYM_B1F/BOTTOM_RIGHT_UPPER_2": {
"parent_map": "MAP_LAVARIDGE_TOWN_GYM_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1318,6 +2108,9 @@
},
"REGION_LAVARIDGE_TOWN_MART/MAIN": {
"parent_map": "MAP_LAVARIDGE_TOWN_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1327,6 +2120,9 @@
},
"REGION_LAVARIDGE_TOWN_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1338,6 +2134,9 @@
},
"REGION_LAVARIDGE_TOWN_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_LAVARIDGE_TOWN_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1347,6 +2146,9 @@
},
"REGION_LAVARIDGE_TOWN_HOUSE/MAIN": {
"parent_map": "MAP_LAVARIDGE_TOWN_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1357,6 +2159,9 @@
"REGION_FORTREE_CITY/MAIN": {
"parent_map": "MAP_FORTREE_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [
"EVENT_VISITED_FORTREE_CITY"
@@ -1379,6 +2184,9 @@
},
"REGION_FORTREE_CITY/BEFORE_GYM": {
"parent_map": "MAP_FORTREE_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1390,6 +2198,9 @@
},
"REGION_FORTREE_CITY_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_FORTREE_CITY_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1400,6 +2211,9 @@
},
"REGION_FORTREE_CITY_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_FORTREE_CITY_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1409,6 +2223,9 @@
},
"REGION_FORTREE_CITY_HOUSE1/MAIN": {
"parent_map": "MAP_FORTREE_CITY_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1418,10 +2235,15 @@
},
"REGION_FORTREE_CITY_HOUSE2/MAIN": {
"parent_map": "MAP_FORTREE_CITY_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM10"
+ "NPC_GIFT_RECEIVED_TM_HIDDEN_POWER"
+ ],
+ "events": [
+ "EVENT_MOVE_TUTOR_DIG"
],
- "events": [],
"exits": [],
"warps": [
"MAP_FORTREE_CITY_HOUSE2:0,1/MAP_FORTREE_CITY:4"
@@ -1429,6 +2251,9 @@
},
"REGION_FORTREE_CITY_HOUSE3/MAIN": {
"parent_map": "MAP_FORTREE_CITY_HOUSE3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1438,6 +2263,9 @@
},
"REGION_FORTREE_CITY_HOUSE4/MAIN": {
"parent_map": "MAP_FORTREE_CITY_HOUSE4",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_MENTAL_HERB"
],
@@ -1451,6 +2279,9 @@
},
"REGION_FORTREE_CITY_HOUSE5/MAIN": {
"parent_map": "MAP_FORTREE_CITY_HOUSE5",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1460,9 +2291,19 @@
},
"REGION_FORTREE_CITY_GYM/MAIN": {
"parent_map": "MAP_FORTREE_CITY_GYM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM40",
- "BADGE_6"
+ "NPC_GIFT_RECEIVED_TM_AERIAL_ACE",
+ "BADGE_6",
+ "TRAINER_HUMBERTO_REWARD",
+ "TRAINER_ASHLEY_REWARD",
+ "TRAINER_JARED_REWARD",
+ "TRAINER_FLINT_REWARD",
+ "TRAINER_EDWARDO_REWARD",
+ "TRAINER_DARIUS_REWARD",
+ "TRAINER_WINONA_1_REWARD"
],
"events": [
"EVENT_DEFEAT_WINONA"
@@ -1474,6 +2315,9 @@
},
"REGION_FORTREE_CITY_MART/MAIN": {
"parent_map": "MAP_FORTREE_CITY_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1483,6 +2327,9 @@
},
"REGION_FORTREE_CITY_DECORATION_SHOP/MAIN": {
"parent_map": "MAP_FORTREE_CITY_DECORATION_SHOP",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1493,11 +2340,16 @@
"REGION_LILYCOVE_CITY/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_LILYCOVE_CITY_MAX_REPEL",
"HIDDEN_ITEM_LILYCOVE_CITY_HEART_SCALE",
"HIDDEN_ITEM_LILYCOVE_CITY_PP_UP",
- "HIDDEN_ITEM_LILYCOVE_CITY_POKE_BALL"
+ "HIDDEN_ITEM_LILYCOVE_CITY_POKE_BALL",
+ "NPC_GIFT_LILYCOVE_RECEIVED_BERRY",
+ "TRAINER_BRENDAN_LILYCOVE_MUDKIP_REWARD"
],
"events": [
"EVENT_VISITED_LILYCOVE_CITY"
@@ -1523,6 +2375,9 @@
},
"REGION_LILYCOVE_CITY/SEA": {
"parent_map": "MAP_LILYCOVE_CITY",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1535,6 +2390,9 @@
},
"REGION_LILYCOVE_CITY_DEPARTMENT_STORE_1F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1547,6 +2405,9 @@
},
"REGION_LILYCOVE_CITY_DEPARTMENT_STORE_2F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1559,6 +2420,9 @@
},
"REGION_LILYCOVE_CITY_DEPARTMENT_STORE_3F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_3F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1571,6 +2435,9 @@
},
"REGION_LILYCOVE_CITY_DEPARTMENT_STORE_4F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_4F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1583,6 +2450,9 @@
},
"REGION_LILYCOVE_CITY_DEPARTMENT_STORE_5F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_5F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1595,6 +2465,9 @@
},
"REGION_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ROOFTOP",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1604,6 +2477,9 @@
},
"REGION_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1617,6 +2493,9 @@
},
"REGION_LILYCOVE_CITY_COVE_LILY_MOTEL_1F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1627,6 +2506,9 @@
},
"REGION_LILYCOVE_CITY_COVE_LILY_MOTEL_2F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_COVE_LILY_MOTEL_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1636,6 +2518,9 @@
},
"REGION_LILYCOVE_CITY_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1646,6 +2531,9 @@
},
"REGION_LILYCOVE_CITY_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1655,6 +2543,9 @@
},
"REGION_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1665,6 +2556,9 @@
},
"REGION_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_LILYCOVE_MUSEUM_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1674,6 +2568,9 @@
},
"REGION_LILYCOVE_CITY_CONTEST_LOBBY/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_CONTEST_LOBBY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_POKEBLOCK_CASE"
],
@@ -1687,6 +2584,9 @@
},
"REGION_LILYCOVE_CITY_CONTEST_HALL/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_CONTEST_HALL",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1697,6 +2597,9 @@
},
"REGION_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_POKEMON_TRAINER_FAN_CLUB",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1706,6 +2609,9 @@
},
"REGION_LILYCOVE_CITY_MOVE_DELETERS_HOUSE/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_MOVE_DELETERS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1715,6 +2621,9 @@
},
"REGION_LILYCOVE_CITY_HOUSE1/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1724,8 +2633,11 @@
},
"REGION_LILYCOVE_CITY_HOUSE2/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM44"
+ "NPC_GIFT_RECEIVED_TM_REST"
],
"events": [],
"exits": [],
@@ -1735,6 +2647,9 @@
},
"REGION_LILYCOVE_CITY_HOUSE3/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_HOUSE3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1744,6 +2659,9 @@
},
"REGION_LILYCOVE_CITY_HOUSE4/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_HOUSE4",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1753,10 +2671,17 @@
},
"REGION_LILYCOVE_CITY_HARBOR/MAIN": {
"parent_map": "MAP_LILYCOVE_CITY_HARBOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
- "REGION_SS_TIDAL_CORRIDOR/MAIN"
+ "REGION_SS_TIDAL_CORRIDOR/MAIN",
+ "REGION_SOUTHERN_ISLAND_EXTERIOR/MAIN",
+ "REGION_FARAWAY_ISLAND_ENTRANCE/MAIN",
+ "REGION_BIRTH_ISLAND_HARBOR/MAIN",
+ "REGION_NAVEL_ROCK_HARBOR/MAIN"
],
"warps": [
"MAP_LILYCOVE_CITY_HARBOR:0,1/MAP_LILYCOVE_CITY:12"
@@ -1764,11 +2689,15 @@
},
"REGION_SS_TIDAL_CORRIDOR/MAIN": {
"parent_map": "MAP_SS_TIDAL_CORRIDOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
"REGION_SLATEPORT_CITY_HARBOR/MAIN",
- "REGION_LILYCOVE_CITY_HARBOR/MAIN"
+ "REGION_LILYCOVE_CITY_HARBOR/MAIN",
+ "REGION_BATTLE_FRONTIER_OUTSIDE_WEST/DOCK"
],
"warps": [
"MAP_SS_TIDAL_CORRIDOR:0/MAP_SS_TIDAL_ROOMS:0",
@@ -1784,8 +2713,17 @@
},
"REGION_SS_TIDAL_ROOMS/MAIN": {
"parent_map": "MAP_SS_TIDAL_ROOMS",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM49"
+ "NPC_GIFT_RECEIVED_TM_SNATCH",
+ "TRAINER_COLTON_REWARD",
+ "TRAINER_NAOMI_REWARD",
+ "TRAINER_THOMAS_REWARD",
+ "TRAINER_MICAH_REWARD",
+ "TRAINER_GARRET_REWARD",
+ "TRAINER_LEA_AND_JED_REWARD"
],
"events": [],
"exits": [],
@@ -1802,8 +2740,13 @@
},
"REGION_SS_TIDAL_LOWER_DECK/MAIN": {
"parent_map": "MAP_SS_TIDAL_LOWER_DECK",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "HIDDEN_ITEM_SS_TIDAL_LOWER_DECK_LEFTOVERS"
+ "HIDDEN_ITEM_SS_TIDAL_LOWER_DECK_LEFTOVERS",
+ "TRAINER_LEONARD_REWARD",
+ "TRAINER_PHILLIP_REWARD"
],
"events": [],
"exits": [],
@@ -1814,6 +2757,9 @@
"REGION_MOSSDEEP_CITY/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_MOSSDEEP_CITY_NET_BALL",
"NPC_GIFT_RECEIVED_KINGS_ROCK"
@@ -1822,6 +2768,7 @@
"EVENT_VISITED_MOSSDEEP_CITY"
],
"exits": [
+ "REGION_MOSSDEEP_CITY/WATER",
"REGION_ROUTE124/MAIN",
"REGION_ROUTE125/SEA",
"REGION_ROUTE127/MAIN"
@@ -1839,9 +2786,25 @@
"MAP_MOSSDEEP_CITY:9/MAP_MOSSDEEP_CITY_GAME_CORNER_1F:0"
]
},
+ "REGION_MOSSDEEP_CITY/WATER": {
+ "parent_map": "MAP_MOSSDEEP_CITY",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_MOSSDEEP_CITY_GYM/ROOM_1": {
"parent_map": "MAP_MOSSDEEP_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_MAURA_REWARD",
+ "TRAINER_PRESTON_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1852,7 +2815,13 @@
},
"REGION_MOSSDEEP_CITY_GYM/ROOM_2": {
"parent_map": "MAP_MOSSDEEP_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_SAMANTHA_REWARD",
+ "TRAINER_BLAKE_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1863,7 +2832,15 @@
},
"REGION_MOSSDEEP_CITY_GYM/ROOM_3": {
"parent_map": "MAP_MOSSDEEP_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_VIRGIL_REWARD",
+ "TRAINER_NATE_REWARD",
+ "TRAINER_SYLVIA_REWARD",
+ "TRAINER_HANNAH_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1873,6 +2850,9 @@
},
"REGION_MOSSDEEP_CITY_GYM/ROOM_4": {
"parent_map": "MAP_MOSSDEEP_CITY_GYM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1883,7 +2863,15 @@
},
"REGION_MOSSDEEP_CITY_GYM/ROOM_5": {
"parent_map": "MAP_MOSSDEEP_CITY_GYM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_KATHLEEN_REWARD",
+ "TRAINER_NICHOLAS_REWARD",
+ "TRAINER_MACEY_REWARD",
+ "TRAINER_CLIFFORD_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1893,9 +2881,13 @@
},
"REGION_MOSSDEEP_CITY_GYM/ROOM_6": {
"parent_map": "MAP_MOSSDEEP_CITY_GYM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM04",
- "BADGE_7"
+ "NPC_GIFT_RECEIVED_TM_CALM_MIND",
+ "BADGE_7",
+ "TRAINER_TATE_AND_LIZA_1_REWARD"
],
"events": [
"EVENT_DEFEAT_TATE_AND_LIZA"
@@ -1909,6 +2901,9 @@
},
"REGION_MOSSDEEP_CITY_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1919,6 +2914,9 @@
},
"REGION_MOSSDEEP_CITY_MART/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1928,6 +2926,9 @@
},
"REGION_MOSSDEEP_CITY_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1937,8 +2938,15 @@
},
"REGION_MOSSDEEP_CITY_SPACE_CENTER_1F/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_SPACE_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_SUN_STONE_MOSSDEEP"
+ "NPC_GIFT_RECEIVED_SUN_STONE_MOSSDEEP",
+ "TRAINER_GRUNT_SPACE_CENTER_1_REWARD",
+ "TRAINER_GRUNT_SPACE_CENTER_2_REWARD",
+ "TRAINER_GRUNT_SPACE_CENTER_3_REWARD",
+ "TRAINER_GRUNT_SPACE_CENTER_4_REWARD"
],
"events": [],
"exits": [],
@@ -1949,7 +2957,14 @@
},
"REGION_MOSSDEEP_CITY_SPACE_CENTER_2F/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_SPACE_CENTER_2F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_SPACE_CENTER_5_REWARD",
+ "TRAINER_GRUNT_SPACE_CENTER_6_REWARD",
+ "TRAINER_GRUNT_SPACE_CENTER_7_REWARD"
+ ],
"events": [
"EVENT_DEFEAT_MAXIE_AT_SPACE_STATION"
],
@@ -1960,6 +2975,9 @@
},
"REGION_MOSSDEEP_CITY_GAME_CORNER_1F/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_GAME_CORNER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1970,6 +2988,9 @@
},
"REGION_MOSSDEEP_CITY_GAME_CORNER_B1F/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_GAME_CORNER_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1979,8 +3000,11 @@
},
"REGION_MOSSDEEP_CITY_STEVENS_HOUSE/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_STEVENS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_HM08"
+ "NPC_GIFT_RECEIVED_HM_DIVE"
],
"events": [
"EVENT_STEVEN_GIVES_DIVE"
@@ -1992,6 +3016,9 @@
},
"REGION_MOSSDEEP_CITY_HOUSE1/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2001,6 +3028,9 @@
},
"REGION_MOSSDEEP_CITY_HOUSE2/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [
"EVENT_WINGULL_QUEST_2"
@@ -2012,6 +3042,9 @@
},
"REGION_MOSSDEEP_CITY_HOUSE3/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_HOUSE3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_SUPER_ROD"
],
@@ -2023,6 +3056,9 @@
},
"REGION_MOSSDEEP_CITY_HOUSE4/MAIN": {
"parent_map": "MAP_MOSSDEEP_CITY_HOUSE4",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2033,8 +3069,13 @@
"REGION_UNDERWATER_SOOTOPOLIS_CITY/MAIN": {
"parent_map": "MAP_UNDERWATER_SOOTOPOLIS_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
- "events": [],
+ "events": [
+ "EVENT_RAYQUAZA_STOPS_FIGHT"
+ ],
"exits": [
"REGION_SOOTOPOLIS_CITY/WATER"
],
@@ -2044,18 +3085,25 @@
},
"REGION_SOOTOPOLIS_CITY/WATER": {
"parent_map": "MAP_SOOTOPOLIS_CITY",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
"REGION_UNDERWATER_SOOTOPOLIS_CITY/MAIN",
"REGION_SOOTOPOLIS_CITY/EAST",
"REGION_SOOTOPOLIS_CITY/WEST",
+ "REGION_SOOTOPOLIS_CITY/WEST_GRASS",
"REGION_SOOTOPOLIS_CITY/ISLAND"
],
"warps": []
},
"REGION_SOOTOPOLIS_CITY/EAST": {
"parent_map": "MAP_SOOTOPOLIS_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [
"EVENT_VISITED_SOOTOPOLIS_CITY"
@@ -2074,6 +3122,9 @@
},
"REGION_SOOTOPOLIS_CITY/WEST": {
"parent_map": "MAP_SOOTOPOLIS_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -2088,10 +3139,26 @@
"MAP_SOOTOPOLIS_CITY:10/MAP_SOOTOPOLIS_CITY_HOUSE7:0"
]
},
+ "REGION_SOOTOPOLIS_CITY/WEST_GRASS": {
+ "parent_map": "MAP_SOOTOPOLIS_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "NPC_GIFT_SOOTOPOLIS_RECEIVED_BERRY_1",
+ "NPC_GIFT_SOOTOPOLIS_RECEIVED_BERRY_2"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_SOOTOPOLIS_CITY/ISLAND": {
"parent_map": "MAP_SOOTOPOLIS_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
- "NPC_GIFT_RECEIVED_HM07"
+ "NPC_GIFT_RECEIVED_HM_WATERFALL"
],
"events": [],
"exits": [
@@ -2103,6 +3170,9 @@
},
"REGION_SOOTOPOLIS_CITY_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2113,6 +3183,9 @@
},
"REGION_SOOTOPOLIS_CITY_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2122,6 +3195,9 @@
},
"REGION_SOOTOPOLIS_CITY_MART/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_MART",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2131,6 +3207,9 @@
},
"REGION_SOOTOPOLIS_CITY_GYM_1F/ENTRANCE": {
"parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -2143,6 +3222,9 @@
},
"REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_1": {
"parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -2154,6 +3236,9 @@
},
"REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_2": {
"parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -2165,6 +3250,9 @@
},
"REGION_SOOTOPOLIS_CITY_GYM_1F/PUZZLE_3": {
"parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -2176,9 +3264,13 @@
},
"REGION_SOOTOPOLIS_CITY_GYM_1F/TOP": {
"parent_map": "MAP_SOOTOPOLIS_CITY_GYM_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM03",
- "BADGE_8"
+ "NPC_GIFT_RECEIVED_TM_WATER_PULSE",
+ "BADGE_8",
+ "TRAINER_JUAN_1_REWARD"
],
"events": [
"EVENT_DEFEAT_JUAN"
@@ -2190,6 +3282,9 @@
},
"REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_1": {
"parent_map": "MAP_SOOTOPOLIS_CITY_GYM_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2199,7 +3294,13 @@
},
"REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_2": {
"parent_map": "MAP_SOOTOPOLIS_CITY_GYM_B1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_ANDREA_REWARD",
+ "TRAINER_CONNIE_REWARD"
+ ],
"events": [],
"exits": [
"REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_1"
@@ -2208,7 +3309,13 @@
},
"REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_3": {
"parent_map": "MAP_SOOTOPOLIS_CITY_GYM_B1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_ANNIKA_REWARD",
+ "TRAINER_DAPHNE_REWARD"
+ ],
"events": [],
"exits": [
"REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_2"
@@ -2217,7 +3324,17 @@
},
"REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_4": {
"parent_map": "MAP_SOOTOPOLIS_CITY_GYM_B1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_CRISSY_REWARD",
+ "TRAINER_TIFFANY_REWARD",
+ "TRAINER_BETHANY_REWARD",
+ "TRAINER_OLIVIA_REWARD",
+ "TRAINER_BRIDGET_REWARD",
+ "TRAINER_BRIANNA_REWARD"
+ ],
"events": [],
"exits": [
"REGION_SOOTOPOLIS_CITY_GYM_B1F/LEVEL_3"
@@ -2226,6 +3343,9 @@
},
"REGION_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2236,6 +3356,9 @@
},
"REGION_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2245,6 +3368,9 @@
},
"REGION_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_LOTAD_AND_SEEDOT_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2254,8 +3380,11 @@
},
"REGION_SOOTOPOLIS_CITY_HOUSE1/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM31"
+ "NPC_GIFT_RECEIVED_TM_BRICK_BREAK"
],
"events": [],
"exits": [],
@@ -2265,6 +3394,9 @@
},
"REGION_SOOTOPOLIS_CITY_HOUSE2/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2274,6 +3406,9 @@
},
"REGION_SOOTOPOLIS_CITY_HOUSE3/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2283,6 +3418,9 @@
},
"REGION_SOOTOPOLIS_CITY_HOUSE4/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE4",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2292,6 +3430,9 @@
},
"REGION_SOOTOPOLIS_CITY_HOUSE5/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE5",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2301,6 +3442,9 @@
},
"REGION_SOOTOPOLIS_CITY_HOUSE6/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE6",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2310,6 +3454,9 @@
},
"REGION_SOOTOPOLIS_CITY_HOUSE7/MAIN": {
"parent_map": "MAP_SOOTOPOLIS_CITY_HOUSE7",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2320,11 +3467,15 @@
"REGION_PACIFIDLOG_TOWN/MAIN": {
"parent_map": "MAP_PACIFIDLOG_TOWN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [
"EVENT_VISITED_PACIFIDLOG_TOWN"
],
"exits": [
+ "REGION_PACIFIDLOG_TOWN/WATER",
"REGION_ROUTE131/MAIN",
"REGION_ROUTE132/EAST"
],
@@ -2337,8 +3488,21 @@
"MAP_PACIFIDLOG_TOWN:5/MAP_PACIFIDLOG_TOWN_HOUSE5:0"
]
},
+ "REGION_PACIFIDLOG_TOWN/WATER": {
+ "parent_map": "MAP_PACIFIDLOG_TOWN",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_PACIFIDLOG_TOWN_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2349,6 +3513,9 @@
},
"REGION_PACIFIDLOG_TOWN_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_PACIFIDLOG_TOWN_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2358,6 +3525,9 @@
},
"REGION_PACIFIDLOG_TOWN_HOUSE1/MAIN": {
"parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2367,9 +3537,12 @@
},
"REGION_PACIFIDLOG_TOWN_HOUSE2/MAIN": {
"parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM27_2",
- "NPC_GIFT_RECEIVED_TM21"
+ "NPC_GIFT_RECEIVED_TM_RETURN_2",
+ "NPC_GIFT_RECEIVED_TM_FRUSTRATION"
],
"events": [],
"exits": [],
@@ -2379,6 +3552,9 @@
},
"REGION_PACIFIDLOG_TOWN_HOUSE3/MAIN": {
"parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2388,6 +3564,9 @@
},
"REGION_PACIFIDLOG_TOWN_HOUSE4/MAIN": {
"parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE4",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2397,6 +3576,9 @@
},
"REGION_PACIFIDLOG_TOWN_HOUSE5/MAIN": {
"parent_map": "MAP_PACIFIDLOG_TOWN_HOUSE5",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2407,6 +3589,9 @@
"REGION_EVER_GRANDE_CITY/SEA": {
"parent_map": "MAP_EVER_GRANDE_CITY",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -2417,6 +3602,9 @@
},
"REGION_EVER_GRANDE_CITY/SOUTH": {
"parent_map": "MAP_EVER_GRANDE_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [
"EVENT_VISITED_EVER_GRANDE_CITY"
@@ -2431,6 +3619,9 @@
},
"REGION_EVER_GRANDE_CITY/NORTH": {
"parent_map": "MAP_EVER_GRANDE_CITY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2441,6 +3632,9 @@
},
"REGION_EVER_GRANDE_CITY_POKEMON_CENTER_1F/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2451,6 +3645,9 @@
},
"REGION_EVER_GRANDE_CITY_POKEMON_CENTER_2F/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_CENTER_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2460,6 +3657,9 @@
},
"REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -2472,6 +3672,9 @@
},
"REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F/BEHIND_BADGE_CHECKERS": {
"parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -2483,6 +3686,9 @@
},
"REGION_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_POKEMON_LEAGUE_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2492,6 +3698,9 @@
},
"REGION_EVER_GRANDE_CITY_HALL5/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_HALL5",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2502,7 +3711,12 @@
},
"REGION_EVER_GRANDE_CITY_SIDNEYS_ROOM/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_SIDNEYS_ROOM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_SIDNEY_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -2512,6 +3726,9 @@
},
"REGION_EVER_GRANDE_CITY_HALL1/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_HALL1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2522,7 +3739,12 @@
},
"REGION_EVER_GRANDE_CITY_PHOEBES_ROOM/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_PHOEBES_ROOM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_PHOEBE_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -2532,6 +3754,9 @@
},
"REGION_EVER_GRANDE_CITY_HALL2/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_HALL2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2542,7 +3767,12 @@
},
"REGION_EVER_GRANDE_CITY_GLACIAS_ROOM/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_GLACIAS_ROOM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GLACIA_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -2552,6 +3782,9 @@
},
"REGION_EVER_GRANDE_CITY_HALL3/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_HALL3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2562,7 +3795,12 @@
},
"REGION_EVER_GRANDE_CITY_DRAKES_ROOM/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_DRAKES_ROOM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_DRAKE_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -2572,7 +3810,12 @@
},
"REGION_EVER_GRANDE_CITY_CHAMPIONS_ROOM/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_CHAMPIONS_ROOM",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_WALLACE_REWARD"
+ ],
"events": [
"EVENT_DEFEAT_CHAMPION"
],
@@ -2584,6 +3827,9 @@
},
"REGION_EVER_GRANDE_CITY_HALL4/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_HALL4",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2594,6 +3840,9 @@
},
"REGION_EVER_GRANDE_CITY_HALL_OF_FAME/MAIN": {
"parent_map": "MAP_EVER_GRANDE_CITY_HALL_OF_FAME",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
diff --git a/worlds/pokemon_emerald/data/regions/dungeons.json b/worlds/pokemon_emerald/data/regions/dungeons.json
index 1da5e325ba..040f06d8fe 100644
--- a/worlds/pokemon_emerald/data/regions/dungeons.json
+++ b/worlds/pokemon_emerald/data/regions/dungeons.json
@@ -1,12 +1,18 @@
{
"REGION_PETALBURG_WOODS/WEST_PATH": {
"parent_map": "MAP_PETALBURG_WOODS",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"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"
+ "NPC_GIFT_RECEIVED_GREAT_BALL_PETALBURG_WOODS",
+ "TRAINER_LYLE_REWARD",
+ "TRAINER_GRUNT_PETALBURG_WOODS_REWARD",
+ "TRAINER_JAMES_1_REWARD"
],
"events": [],
"exits": [
@@ -20,6 +26,9 @@
},
"REGION_PETALBURG_WOODS/EAST_PATH": {
"parent_map": "MAP_PETALBURG_WOODS",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_PETALBURG_WOODS_GREAT_BALL",
"ITEM_PETALBURG_WOODS_X_ATTACK",
@@ -35,9 +44,13 @@
},
"REGION_RUSTURF_TUNNEL/WEST": {
"parent_map": "MAP_RUSTURF_TUNNEL",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_RUSTURF_TUNNEL_POKE_BALL",
- "NPC_GIFT_RECEIVED_DEVON_GOODS_RUSTURF_TUNNEL"
+ "NPC_GIFT_RECEIVED_DEVON_GOODS_RUSTURF_TUNNEL",
+ "TRAINER_GRUNT_RUSTURF_TUNNEL_REWARD"
],
"events": [
"EVENT_RECOVER_DEVON_GOODS"
@@ -51,9 +64,13 @@
},
"REGION_RUSTURF_TUNNEL/EAST": {
"parent_map": "MAP_RUSTURF_TUNNEL",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_RUSTURF_TUNNEL_MAX_ETHER",
- "NPC_GIFT_RECEIVED_HM04"
+ "NPC_GIFT_RECEIVED_HM_STRENGTH",
+ "TRAINER_MIKE_2_REWARD"
],
"events": [],
"exits": [
@@ -66,9 +83,12 @@
},
"REGION_GRANITE_CAVE_1F/LOWER": {
"parent_map": "MAP_GRANITE_CAVE_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_GRANITE_CAVE_1F_ESCAPE_ROPE",
- "NPC_GIFT_RECEIVED_HM05"
+ "NPC_GIFT_RECEIVED_HM_FLASH"
],
"events": [],
"exits": [],
@@ -79,6 +99,9 @@
},
"REGION_GRANITE_CAVE_1F/UPPER": {
"parent_map": "MAP_GRANITE_CAVE_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -91,6 +114,9 @@
},
"REGION_GRANITE_CAVE_B1F/LOWER": {
"parent_map": "MAP_GRANITE_CAVE_B1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_GRANITE_CAVE_B1F_POKE_BALL"
],
@@ -105,6 +131,9 @@
},
"REGION_GRANITE_CAVE_B1F/LOWER_PLATFORM": {
"parent_map": "MAP_GRANITE_CAVE_B1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -115,6 +144,9 @@
},
"REGION_GRANITE_CAVE_B1F/UPPER": {
"parent_map": "MAP_GRANITE_CAVE_B1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -128,6 +160,9 @@
},
"REGION_GRANITE_CAVE_B2F/NORTH_LOWER_LANDING": {
"parent_map": "MAP_GRANITE_CAVE_B2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_GRANITE_CAVE_B2F_REPEL"
],
@@ -139,6 +174,9 @@
},
"REGION_GRANITE_CAVE_B2F/NORTH_UPPER_LANDING": {
"parent_map": "MAP_GRANITE_CAVE_B2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -150,6 +188,9 @@
},
"REGION_GRANITE_CAVE_B2F/NORTH_EAST_ROOM": {
"parent_map": "MAP_GRANITE_CAVE_B2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_GRANITE_CAVE_B2F_RARE_CANDY",
"HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_1"
@@ -162,6 +203,9 @@
},
"REGION_GRANITE_CAVE_B2F/LOWER": {
"parent_map": "MAP_GRANITE_CAVE_B2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_GRANITE_CAVE_B2F_EVERSTONE_2"
],
@@ -174,6 +218,9 @@
},
"REGION_GRANITE_CAVE_STEVENS_ROOM/MAIN": {
"parent_map": "MAP_GRANITE_CAVE_STEVENS_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -185,8 +232,11 @@
},
"REGION_GRANITE_CAVE_STEVENS_ROOM/LETTER_DELIVERED": {
"parent_map": "MAP_GRANITE_CAVE_STEVENS_ROOM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM47"
+ "NPC_GIFT_RECEIVED_TM_STEEL_WING"
],
"events": [
"EVENT_DELIVER_LETTER"
@@ -196,6 +246,9 @@
},
"REGION_TRAINER_HILL_ENTRANCE/MAIN": {
"parent_map": "MAP_TRAINER_HILL_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -206,6 +259,9 @@
},
"REGION_TRAINER_HILL_1F/MAIN": {
"parent_map": "MAP_TRAINER_HILL_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -216,6 +272,9 @@
},
"REGION_TRAINER_HILL_2F/MAIN": {
"parent_map": "MAP_TRAINER_HILL_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -226,6 +285,9 @@
},
"REGION_TRAINER_HILL_3F/MAIN": {
"parent_map": "MAP_TRAINER_HILL_3F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -236,6 +298,9 @@
},
"REGION_TRAINER_HILL_4F/MAIN": {
"parent_map": "MAP_TRAINER_HILL_4F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -246,6 +311,9 @@
},
"REGION_TRAINER_HILL_ROOF/MAIN": {
"parent_map": "MAP_TRAINER_HILL_ROOF",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -256,6 +324,9 @@
},
"REGION_TRAINER_HILL_ELEVATOR/MAIN": {
"parent_map": "MAP_TRAINER_HILL_ELEVATOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -265,6 +336,9 @@
},
"REGION_FIERY_PATH/MAIN": {
"parent_map": "MAP_FIERY_PATH",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -277,8 +351,11 @@
},
"REGION_FIERY_PATH/BEHIND_BOULDER": {
"parent_map": "MAP_FIERY_PATH",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_FIERY_PATH_TM06",
+ "ITEM_FIERY_PATH_TM_TOXIC",
"ITEM_FIERY_PATH_FIRE_STONE"
],
"events": [],
@@ -289,7 +366,12 @@
},
"REGION_MAGMA_HIDEOUT_1F/MAIN": {
"parent_map": "MAP_MAGMA_HIDEOUT_1F",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_2_REWARD"
+ ],
"events": [],
"exits": [
"REGION_MAGMA_HIDEOUT_1F/ENTRANCE"
@@ -300,6 +382,9 @@
},
"REGION_MAGMA_HIDEOUT_1F/CENTER_EXIT": {
"parent_map": "MAP_MAGMA_HIDEOUT_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -311,8 +396,12 @@
},
"REGION_MAGMA_HIDEOUT_1F/LEDGE": {
"parent_map": "MAP_MAGMA_HIDEOUT_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_MAGMA_HIDEOUT_1F_RARE_CANDY"
+ "ITEM_MAGMA_HIDEOUT_1F_RARE_CANDY",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_1_REWARD"
],
"events": [],
"exits": [],
@@ -322,6 +411,9 @@
},
"REGION_MAGMA_HIDEOUT_1F/ENTRANCE": {
"parent_map": "MAP_MAGMA_HIDEOUT_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -333,7 +425,15 @@
},
"REGION_MAGMA_HIDEOUT_2F_1R/MAIN": {
"parent_map": "MAP_MAGMA_HIDEOUT_2F_1R",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_3_REWARD",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_4_REWARD",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_5_REWARD",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_14_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -344,9 +444,16 @@
},
"REGION_MAGMA_HIDEOUT_2F_2R/MAIN": {
"parent_map": "MAP_MAGMA_HIDEOUT_2F_2R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_MAGMA_HIDEOUT_2F_2R_MAX_ELIXIR",
- "ITEM_MAGMA_HIDEOUT_2F_2R_FULL_RESTORE"
+ "ITEM_MAGMA_HIDEOUT_2F_2R_FULL_RESTORE",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_6_REWARD",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_7_REWARD",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_8_REWARD",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_15_REWARD"
],
"events": [],
"exits": [],
@@ -357,6 +464,9 @@
},
"REGION_MAGMA_HIDEOUT_2F_3R/MAIN": {
"parent_map": "MAP_MAGMA_HIDEOUT_2F_3R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -367,8 +477,13 @@
},
"REGION_MAGMA_HIDEOUT_3F_1R/MAIN": {
"parent_map": "MAP_MAGMA_HIDEOUT_3F_1R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_MAGMA_HIDEOUT_3F_1R_NUGGET"
+ "ITEM_MAGMA_HIDEOUT_3F_1R_NUGGET",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_9_REWARD",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_16_REWARD"
],
"events": [],
"exits": [],
@@ -380,8 +495,12 @@
},
"REGION_MAGMA_HIDEOUT_3F_2R/MAIN": {
"parent_map": "MAP_MAGMA_HIDEOUT_3F_2R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_MAGMA_HIDEOUT_3F_2R_PP_MAX"
+ "ITEM_MAGMA_HIDEOUT_3F_2R_PP_MAX",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_10_REWARD"
],
"events": [],
"exits": [],
@@ -391,6 +510,9 @@
},
"REGION_MAGMA_HIDEOUT_3F_3R/MAIN": {
"parent_map": "MAP_MAGMA_HIDEOUT_3F_3R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_MAGMA_HIDEOUT_3F_3R_ECAPE_ROPE"
],
@@ -403,8 +525,16 @@
},
"REGION_MAGMA_HIDEOUT_4F/MAIN": {
"parent_map": "MAP_MAGMA_HIDEOUT_4F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_MAGMA_HIDEOUT_4F_MAX_REVIVE"
+ "ITEM_MAGMA_HIDEOUT_4F_MAX_REVIVE",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_11_REWARD",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_12_REWARD",
+ "TRAINER_GRUNT_MAGMA_HIDEOUT_13_REWARD",
+ "TRAINER_TABITHA_MAGMA_HIDEOUT_REWARD",
+ "TRAINER_MAXIE_MAGMA_HIDEOUT_REWARD"
],
"events": [
"EVENT_RELEASE_GROUDON"
@@ -417,6 +547,9 @@
},
"REGION_MIRAGE_TOWER_1F/MAIN": {
"parent_map": "MAP_MIRAGE_TOWER_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -427,6 +560,9 @@
},
"REGION_MIRAGE_TOWER_2F/TOP": {
"parent_map": "MAP_MIRAGE_TOWER_2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -439,6 +575,9 @@
},
"REGION_MIRAGE_TOWER_2F/BOTTOM": {
"parent_map": "MAP_MIRAGE_TOWER_2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -451,6 +590,9 @@
},
"REGION_MIRAGE_TOWER_3F/TOP": {
"parent_map": "MAP_MIRAGE_TOWER_3F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -462,6 +604,9 @@
},
"REGION_MIRAGE_TOWER_3F/BOTTOM": {
"parent_map": "MAP_MIRAGE_TOWER_3F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -474,6 +619,9 @@
},
"REGION_MIRAGE_TOWER_4F/MAIN": {
"parent_map": "MAP_MIRAGE_TOWER_4F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -485,24 +633,46 @@
},
"REGION_MIRAGE_TOWER_4F/FOSSIL_PLATFORM": {
"parent_map": "MAP_MIRAGE_TOWER_4F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
"warps": []
},
- "REGION_DESERT_RUINS/MAIN": {
+ "REGION_DESERT_RUINS/FRONT": {
"parent_map": "MAP_DESERT_RUINS",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
"warps": [
"MAP_DESERT_RUINS:0/MAP_ROUTE111:1",
- "MAP_DESERT_RUINS:1/MAP_DESERT_RUINS:2",
+ "MAP_DESERT_RUINS:1/MAP_DESERT_RUINS:2"
+ ]
+ },
+ "REGION_DESERT_RUINS/BACK": {
+ "parent_map": "MAP_DESERT_RUINS",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [
+ "EVENT_ENCOUNTER_REGIROCK"
+ ],
+ "exits": [],
+ "warps": [
"MAP_DESERT_RUINS:2/MAP_DESERT_RUINS:1"
]
},
"REGION_METEOR_FALLS_1F_1R/MAIN": {
"parent_map": "MAP_METEOR_FALLS_1F_1R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_METEOR_FALLS_1F_1R_MOON_STONE",
"ITEM_METEOR_FALLS_1F_1R_FULL_HEAL"
@@ -511,19 +681,48 @@
"EVENT_MAGMA_STEALS_METEORITE"
],
"exits": [
- "REGION_METEOR_FALLS_1F_1R/ABOVE_WATERFALL"
+ "REGION_METEOR_FALLS_1F_1R/WATER"
],
"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": {
+ "REGION_METEOR_FALLS_1F_1R/WATER": {
"parent_map": "MAP_METEOR_FALLS_1F_1R",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
- "REGION_METEOR_FALLS_1F_1R/MAIN"
+ "REGION_METEOR_FALLS_1F_1R/MAIN",
+ "REGION_METEOR_FALLS_1F_1R/WATER_ABOVE_WATERFALL"
+ ],
+ "warps": []
+ },
+ "REGION_METEOR_FALLS_1F_1R/WATER_ABOVE_WATERFALL": {
+ "parent_map": "MAP_METEOR_FALLS_1F_1R",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_METEOR_FALLS_1F_1R/WATER",
+ "REGION_METEOR_FALLS_1F_1R/ABOVE_WATERFALL"
+ ],
+ "warps": []
+ },
+ "REGION_METEOR_FALLS_1F_1R/ABOVE_WATERFALL": {
+ "parent_map": "MAP_METEOR_FALLS_1F_1R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_METEOR_FALLS_1F_1R/WATER_ABOVE_WATERFALL"
],
"warps": [
"MAP_METEOR_FALLS_1F_1R:2/MAP_METEOR_FALLS_1F_2R:0"
@@ -531,8 +730,11 @@
},
"REGION_METEOR_FALLS_1F_1R/TOP": {
"parent_map": "MAP_METEOR_FALLS_1F_1R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_METEOR_FALLS_1F_1R_TM23"
+ "ITEM_METEOR_FALLS_1F_1R_TM_IRON_TAIL"
],
"events": [],
"exits": [],
@@ -543,6 +745,9 @@
},
"REGION_METEOR_FALLS_1F_1R/BOTTOM": {
"parent_map": "MAP_METEOR_FALLS_1F_1R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_METEOR_FALLS_1F_1R_PP_UP"
],
@@ -554,7 +759,13 @@
},
"REGION_METEOR_FALLS_1F_2R/TOP": {
"parent_map": "MAP_METEOR_FALLS_1F_2R",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_NICOLAS_1_REWARD",
+ "TRAINER_JOHN_AND_JAY_1_REWARD"
+ ],
"events": [],
"exits": [
"REGION_METEOR_FALLS_1F_2R/LEFT_SPLIT",
@@ -566,25 +777,58 @@
},
"REGION_METEOR_FALLS_1F_2R/LEFT_SPLIT": {
"parent_map": "MAP_METEOR_FALLS_1F_2R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
- "exits": [],
+ "exits": [
+ "REGION_METEOR_FALLS_1F_2R/LEFT_SPLIT_WATER"
+ ],
"warps": [
"MAP_METEOR_FALLS_1F_2R:2/MAP_METEOR_FALLS_B1F_1R:1"
]
},
- "REGION_METEOR_FALLS_1F_2R/RIGHT_SPLIT": {
+ "REGION_METEOR_FALLS_1F_2R/LEFT_SPLIT_WATER": {
"parent_map": "MAP_METEOR_FALLS_1F_2R",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [],
+ "warps": []
+ },
+ "REGION_METEOR_FALLS_1F_2R/RIGHT_SPLIT": {
+ "parent_map": "MAP_METEOR_FALLS_1F_2R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_METEOR_FALLS_1F_2R/RIGHT_SPLIT_WATER"
+ ],
"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_1F_2R/RIGHT_SPLIT_WATER": {
+ "parent_map": "MAP_METEOR_FALLS_1F_2R",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_METEOR_FALLS_B1F_1R/UPPER": {
"parent_map": "MAP_METEOR_FALLS_B1F_1R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -596,6 +840,9 @@
},
"REGION_METEOR_FALLS_B1F_1R/HIGHEST_LADDER": {
"parent_map": "MAP_METEOR_FALLS_B1F_1R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -607,6 +854,9 @@
},
"REGION_METEOR_FALLS_B1F_1R/NORTH_SHORE": {
"parent_map": "MAP_METEOR_FALLS_B1F_1R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -618,6 +868,9 @@
},
"REGION_METEOR_FALLS_B1F_1R/SOUTH_SHORE": {
"parent_map": "MAP_METEOR_FALLS_B1F_1R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -629,6 +882,9 @@
},
"REGION_METEOR_FALLS_B1F_1R/WATER": {
"parent_map": "MAP_METEOR_FALLS_B1F_1R",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -640,6 +896,9 @@
},
"REGION_METEOR_FALLS_B1F_2R/ENTRANCE": {
"parent_map": "MAP_METEOR_FALLS_B1F_2R",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -651,8 +910,11 @@
},
"REGION_METEOR_FALLS_B1F_2R/WATER": {
"parent_map": "MAP_METEOR_FALLS_B1F_2R",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
- "ITEM_METEOR_FALLS_B1F_2R_TM02"
+ "ITEM_METEOR_FALLS_B1F_2R_TM_DRAGON_CLAW"
],
"events": [],
"exits": [
@@ -662,7 +924,12 @@
},
"REGION_METEOR_FALLS_STEVENS_CAVE/MAIN": {
"parent_map": "MAP_METEOR_FALLS_STEVENS_CAVE",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_STEVEN_REWARD"
+ ],
"events": [
"EVENT_DEFEAT_STEVEN"
],
@@ -671,28 +938,38 @@
"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": {
+ "REGION_ISLAND_CAVE/FRONT": {
"parent_map": "MAP_ISLAND_CAVE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
"warps": [
"MAP_ISLAND_CAVE:0/MAP_ROUTE105:0",
- "MAP_ISLAND_CAVE:1/MAP_ISLAND_CAVE:2",
+ "MAP_ISLAND_CAVE:1/MAP_ISLAND_CAVE:2"
+ ]
+ },
+ "REGION_ISLAND_CAVE/BACK": {
+ "parent_map": "MAP_ISLAND_CAVE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [
+ "EVENT_ENCOUNTER_REGICE"
+ ],
+ "exits": [],
+ "warps": [
"MAP_ISLAND_CAVE:2/MAP_ISLAND_CAVE:1"
]
},
"REGION_ABANDONED_SHIP_DECK/ENTRANCE": {
"parent_map": "MAP_ABANDONED_SHIP_DECK",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -703,6 +980,9 @@
},
"REGION_ABANDONED_SHIP_DECK/UPPER": {
"parent_map": "MAP_ABANDONED_SHIP_DECK",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -713,6 +993,9 @@
},
"REGION_ABANDONED_SHIP_CAPTAINS_OFFICE/MAIN": {
"parent_map": "MAP_ABANDONED_SHIP_CAPTAINS_OFFICE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ABANDONED_SHIP_CAPTAINS_OFFICE_STORAGE_KEY"
],
@@ -724,7 +1007,12 @@
},
"REGION_ABANDONED_SHIP_CORRIDORS_1F/WEST": {
"parent_map": "MAP_ABANDONED_SHIP_CORRIDORS_1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_CHARLIE_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -736,6 +1024,9 @@
},
"REGION_ABANDONED_SHIP_CORRIDORS_1F/EAST": {
"parent_map": "MAP_ABANDONED_SHIP_CORRIDORS_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -750,7 +1041,13 @@
},
"REGION_ABANDONED_SHIP_ROOMS_1F/MAIN": {
"parent_map": "MAP_ABANDONED_SHIP_ROOMS_1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_THALIA_1_REWARD",
+ "TRAINER_DEMETRIUS_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -761,6 +1058,9 @@
},
"REGION_ABANDONED_SHIP_ROOMS_1F/NORTH_WEST": {
"parent_map": "MAP_ABANDONED_SHIP_ROOMS_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ABANDONED_SHIP_ROOMS_1F_HARBOR_MAIL"
],
@@ -772,8 +1072,14 @@
},
"REGION_ABANDONED_SHIP_ROOMS2_1F/MAIN": {
"parent_map": "MAP_ABANDONED_SHIP_ROOMS2_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE"
+ "ITEM_ABANDONED_SHIP_ROOMS_2_1F_REVIVE",
+ "TRAINER_JANI_REWARD",
+ "TRAINER_GARRISON_REWARD",
+ "TRAINER_KIRA_AND_DAN_1_REWARD"
],
"events": [],
"exits": [],
@@ -784,7 +1090,12 @@
},
"REGION_ABANDONED_SHIP_CORRIDORS_B1F/MAIN": {
"parent_map": "MAP_ABANDONED_SHIP_CORRIDORS_B1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_DUNCAN_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -800,6 +1111,9 @@
},
"REGION_ABANDONED_SHIP_ROOMS_B1F/LEFT": {
"parent_map": "MAP_ABANDONED_SHIP_ROOMS_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ABANDONED_SHIP_ROOMS_B1F_ESCAPE_ROPE"
],
@@ -811,6 +1125,9 @@
},
"REGION_ABANDONED_SHIP_ROOMS_B1F/CENTER": {
"parent_map": "MAP_ABANDONED_SHIP_ROOMS_B1F",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -822,6 +1139,9 @@
},
"REGION_ABANDONED_SHIP_ROOMS_B1F/RIGHT": {
"parent_map": "MAP_ABANDONED_SHIP_ROOMS_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -831,6 +1151,9 @@
},
"REGION_ABANDONED_SHIP_ROOMS2_B1F/MAIN": {
"parent_map": "MAP_ABANDONED_SHIP_ROOMS2_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ABANDONED_SHIP_ROOMS_2_B1F_DIVE_BALL"
],
@@ -843,8 +1166,11 @@
},
"REGION_ABANDONED_SHIP_ROOM_B1F/MAIN": {
"parent_map": "MAP_ABANDONED_SHIP_ROOM_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_ABANDONED_SHIP_ROOMS_B1F_TM13"
+ "ITEM_ABANDONED_SHIP_ROOMS_B1F_TM_ICE_BEAM"
],
"events": [],
"exits": [],
@@ -854,6 +1180,9 @@
},
"REGION_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS/MAIN": {
"parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -870,6 +1199,9 @@
},
"REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/TOP_LEFT": {
"parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_ABANDONED_SHIP_RM_6_KEY"
],
@@ -881,6 +1213,9 @@
},
"REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/TOP_CENTER_DOORWAY": {
"parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -890,6 +1225,9 @@
},
"REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/TOP_RIGHT": {
"parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_6_LUXURY_BALL",
"HIDDEN_ITEM_ABANDONED_SHIP_RM_2_KEY"
@@ -902,8 +1240,11 @@
},
"REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/BOTTOM_LEFT": {
"parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM18",
+ "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_1_TM_RAIN_DANCE",
"HIDDEN_ITEM_ABANDONED_SHIP_RM_4_KEY"
],
"events": [],
@@ -914,8 +1255,11 @@
},
"REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/BOTTOM_CENTER": {
"parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_4_SCANNER"
+ "ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_2_SCANNER"
],
"events": [],
"exits": [],
@@ -925,6 +1269,9 @@
},
"REGION_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS/BOTTOM_RIGHT": {
"parent_map": "MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ABANDONED_SHIP_HIDDEN_FLOOR_ROOM_3_WATER_STONE",
"HIDDEN_ITEM_ABANDONED_SHIP_RM_1_KEY"
@@ -937,6 +1284,9 @@
},
"REGION_ABANDONED_SHIP_UNDERWATER1/MAIN": {
"parent_map": "MAP_ABANDONED_SHIP_UNDERWATER1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -948,6 +1298,9 @@
},
"REGION_ABANDONED_SHIP_UNDERWATER2/MAIN": {
"parent_map": "MAP_ABANDONED_SHIP_UNDERWATER2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -959,6 +1312,9 @@
},
"REGION_NEW_MAUVILLE_ENTRANCE/MAIN": {
"parent_map": "MAP_NEW_MAUVILLE_ENTRANCE",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -969,6 +1325,9 @@
},
"REGION_NEW_MAUVILLE_INSIDE/MAIN": {
"parent_map": "MAP_NEW_MAUVILLE_INSIDE",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_NEW_MAUVILLE_ULTRA_BALL",
"ITEM_NEW_MAUVILLE_ESCAPE_ROPE",
@@ -986,8 +1345,11 @@
},
"REGION_SCORCHED_SLAB/MAIN": {
"parent_map": "MAP_SCORCHED_SLAB",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_SCORCHED_SLAB_TM11"
+ "ITEM_SCORCHED_SLAB_TM_SUNNY_DAY"
],
"events": [],
"exits": [],
@@ -995,19 +1357,38 @@
"MAP_SCORCHED_SLAB:0/MAP_ROUTE120:1"
]
},
- "REGION_ANCIENT_TOMB/MAIN": {
+ "REGION_ANCIENT_TOMB/FRONT": {
"parent_map": "MAP_ANCIENT_TOMB",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
"warps": [
"MAP_ANCIENT_TOMB:0/MAP_ROUTE120:0",
- "MAP_ANCIENT_TOMB:1/MAP_ANCIENT_TOMB:2",
+ "MAP_ANCIENT_TOMB:1/MAP_ANCIENT_TOMB:2"
+ ]
+ },
+ "REGION_ANCIENT_TOMB/BACK": {
+ "parent_map": "MAP_ANCIENT_TOMB",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [
+ "EVENT_ENCOUNTER_REGISTEEL"
+ ],
+ "exits": [],
+ "warps": [
"MAP_ANCIENT_TOMB:2/MAP_ANCIENT_TOMB:1"
]
},
"REGION_MT_PYRE_1F/MAIN": {
"parent_map": "MAP_MT_PYRE_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_CLEANSE_TAG"
],
@@ -1022,8 +1403,15 @@
},
"REGION_MT_PYRE_2F/MAIN": {
"parent_map": "MAP_MT_PYRE_2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_MT_PYRE_2F_ULTRA_BALL"
+ "ITEM_MT_PYRE_2F_ULTRA_BALL",
+ "TRAINER_MARK_REWARD",
+ "TRAINER_LEAH_REWARD",
+ "TRAINER_ZANDER_REWARD",
+ "TRAINER_DEZ_AND_LUKE_REWARD"
],
"events": [],
"exits": [],
@@ -1037,8 +1425,14 @@
},
"REGION_MT_PYRE_3F/MAIN": {
"parent_map": "MAP_MT_PYRE_3F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_MT_PYRE_3F_SUPER_REPEL"
+ "ITEM_MT_PYRE_3F_SUPER_REPEL",
+ "TRAINER_WILLIAM_REWARD",
+ "TRAINER_GABRIELLE_1_REWARD",
+ "TRAINER_KAYLA_REWARD"
],
"events": [],
"exits": [],
@@ -1053,8 +1447,12 @@
},
"REGION_MT_PYRE_4F/MAIN": {
"parent_map": "MAP_MT_PYRE_4F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_MT_PYRE_4F_SEA_INCENSE"
+ "ITEM_MT_PYRE_4F_SEA_INCENSE",
+ "TRAINER_TASHA_REWARD"
],
"events": [],
"exits": [],
@@ -1069,8 +1467,12 @@
},
"REGION_MT_PYRE_5F/MAIN": {
"parent_map": "MAP_MT_PYRE_5F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_MT_PYRE_5F_LAX_INCENSE"
+ "ITEM_MT_PYRE_5F_LAX_INCENSE",
+ "TRAINER_ATSUSHI_REWARD"
],
"events": [],
"exits": [],
@@ -1084,8 +1486,13 @@
},
"REGION_MT_PYRE_6F/MAIN": {
"parent_map": "MAP_MT_PYRE_6F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_MT_PYRE_6F_TM30"
+ "ITEM_MT_PYRE_6F_TM_SHADOW_BALL",
+ "TRAINER_VALERIE_1_REWARD",
+ "TRAINER_CEDRIC_REWARD"
],
"events": [],
"exits": [],
@@ -1096,9 +1503,12 @@
},
"REGION_MT_PYRE_EXTERIOR/MAIN": {
"parent_map": "MAP_MT_PYRE_EXTERIOR",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_MT_PYRE_EXTERIOR_MAX_POTION",
- "ITEM_MT_PYRE_EXTERIOR_TM48",
+ "ITEM_MT_PYRE_EXTERIOR_TM_SKILL_SWAP",
"HIDDEN_ITEM_MT_PYRE_EXTERIOR_ULTRA_BALL",
"HIDDEN_ITEM_MT_PYRE_EXTERIOR_MAX_ETHER"
],
@@ -1111,10 +1521,17 @@
},
"REGION_MT_PYRE_SUMMIT/MAIN": {
"parent_map": "MAP_MT_PYRE_SUMMIT",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_MT_PYRE_SUMMIT_ZINC",
"HIDDEN_ITEM_MT_PYRE_SUMMIT_RARE_CANDY",
- "NPC_GIFT_RECEIVED_MAGMA_EMBLEM"
+ "NPC_GIFT_RECEIVED_MAGMA_EMBLEM",
+ "TRAINER_GRUNT_MT_PYRE_1_REWARD",
+ "TRAINER_GRUNT_MT_PYRE_2_REWARD",
+ "TRAINER_GRUNT_MT_PYRE_3_REWARD",
+ "TRAINER_GRUNT_MT_PYRE_4_REWARD"
],
"events": [],
"exits": [],
@@ -1124,7 +1541,12 @@
},
"REGION_AQUA_HIDEOUT_1F/MAIN": {
"parent_map": "MAP_AQUA_HIDEOUT_1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_AQUA_HIDEOUT_1_REWARD"
+ ],
"events": [],
"exits": [
"REGION_AQUA_HIDEOUT_1F/WATER"
@@ -1135,6 +1557,9 @@
},
"REGION_AQUA_HIDEOUT_1F/WATER": {
"parent_map": "MAP_AQUA_HIDEOUT_1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1146,7 +1571,15 @@
},
"REGION_AQUA_HIDEOUT_B1F/WEST_BOTTOM": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_AQUA_HIDEOUT_2_REWARD",
+ "TRAINER_GRUNT_AQUA_HIDEOUT_5_REWARD",
+ "TRAINER_GRUNT_AQUA_HIDEOUT_7_REWARD"
+
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1157,7 +1590,12 @@
},
"REGION_AQUA_HIDEOUT_B1F/WEST_TOP_LEFT": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_AQUA_HIDEOUT_3_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1167,6 +1605,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/WEST_TOP_CENTER": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1177,6 +1618,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/WEST_TOP_RIGHT": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1188,6 +1632,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/WEST_CENTER_RIGHT": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_AQUA_HIDEOUT_B1F_MAX_ELIXIR"
],
@@ -1199,6 +1646,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/WEST_CENTER": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_AQUA_HIDEOUT_B1F_NUGGET",
"ITEM_AQUA_HIDEOUT_B1F_MASTER_BALL"
@@ -1211,6 +1661,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/EAST_TOP": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1223,6 +1676,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_RIGHT": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1234,6 +1690,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_CENTER": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1246,6 +1705,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/EAST_ROW_1_LEFT": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1257,6 +1719,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_RIGHT": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1268,6 +1733,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_CENTER": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1280,6 +1748,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/EAST_ROW_2_LEFT": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1291,6 +1762,9 @@
},
"REGION_AQUA_HIDEOUT_B1F/EAST_BOTTOM": {
"parent_map": "MAP_AQUA_HIDEOUT_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1302,6 +1776,9 @@
},
"REGION_AQUA_HIDEOUT_B2F/TOP_LEFT": {
"parent_map": "MAP_AQUA_HIDEOUT_B2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1312,7 +1789,13 @@
},
"REGION_AQUA_HIDEOUT_B2F/TOP_CENTER": {
"parent_map": "MAP_AQUA_HIDEOUT_B2F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_AQUA_HIDEOUT_6_REWARD",
+ "TRAINER_GRUNT_AQUA_HIDEOUT_8_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1322,7 +1805,12 @@
},
"REGION_AQUA_HIDEOUT_B2F/TOP_RIGHT": {
"parent_map": "MAP_AQUA_HIDEOUT_B2F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_AQUA_HIDEOUT_4_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1333,6 +1821,9 @@
},
"REGION_AQUA_HIDEOUT_B2F/BOTTOM_LEFT": {
"parent_map": "MAP_AQUA_HIDEOUT_B2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_AQUA_HIDEOUT_B2F_NEST_BALL"
],
@@ -1344,7 +1835,12 @@
},
"REGION_AQUA_HIDEOUT_B2F/BOTTOM_RIGHT": {
"parent_map": "MAP_AQUA_HIDEOUT_B2F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_MATT_REWARD"
+ ],
"events": [
"EVENT_CLEAR_AQUA_HIDEOUT"
],
@@ -1356,6 +1852,9 @@
},
"REGION_SHOAL_CAVE_ENTRANCE_ROOM/SOUTH": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1368,6 +1867,9 @@
},
"REGION_SHOAL_CAVE_ENTRANCE_ROOM/NORTH_WEST_CORNER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1379,6 +1881,9 @@
},
"REGION_SHOAL_CAVE_ENTRANCE_ROOM/NORTH_EAST_CORNER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_SHOAL_CAVE_ENTRANCE_BIG_PEARL"
],
@@ -1392,6 +1897,9 @@
},
"REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1402,6 +1910,9 @@
},
"REGION_SHOAL_CAVE_ENTRANCE_ROOM/LOW_TIDE_LOWER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1413,6 +1924,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_CORNER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1424,6 +1938,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1436,6 +1953,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_EAST_MIDDLE_GROUND": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1446,6 +1966,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_WEST_CORNER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1457,6 +1980,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/BRIDGES": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1467,6 +1993,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/RARE_CANDY_PLATFORM": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_SHOAL_CAVE_INNER_ROOM_RARE_CANDY"
],
@@ -1478,6 +2007,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_WATER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1488,6 +2020,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/EAST_WATER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1497,6 +2032,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/NORTH_WEST_WATER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1507,6 +2045,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_SOUTH_EAST_LOWER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1519,6 +2060,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_EAST_LOWER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1530,6 +2074,9 @@
},
"REGION_SHOAL_CAVE_INNER_ROOM/LOW_TIDE_NORTH_WEST_LOWER": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_INNER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1539,6 +2086,9 @@
},
"REGION_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM/MAIN": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_STAIRS_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_SHOAL_CAVE_STAIRS_ROOM_ICE_HEAL"
],
@@ -1551,6 +2101,9 @@
},
"REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/NORTH_WEST": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_FOCUS_BAND"
],
@@ -1566,6 +2119,9 @@
},
"REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/SOUTH": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1575,6 +2131,9 @@
},
"REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/EAST": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1586,8 +2145,11 @@
},
"REGION_SHOAL_CAVE_LOW_TIDE_ICE_ROOM/MAIN": {
"parent_map": "MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_SHOAL_CAVE_ICE_ROOM_TM07",
+ "ITEM_SHOAL_CAVE_ICE_ROOM_TM_HAIL",
"ITEM_SHOAL_CAVE_ICE_ROOM_NEVER_MELT_ICE"
],
"events": [],
@@ -1598,30 +2160,56 @@
},
"REGION_UNDERWATER_SEAFLOOR_CAVERN/MAIN": {
"parent_map": "MAP_UNDERWATER_SEAFLOOR_CAVERN",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
- "REGION_SEAFLOOR_CAVERN_ENTRANCE/MAIN"
+ "REGION_SEAFLOOR_CAVERN_ENTRANCE/WATER"
],
"warps": [
"MAP_UNDERWATER_SEAFLOOR_CAVERN:0/MAP_UNDERWATER_ROUTE128:0"
]
},
- "REGION_SEAFLOOR_CAVERN_ENTRANCE/MAIN": {
+ "REGION_SEAFLOOR_CAVERN_ENTRANCE/WATER": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ENTRANCE",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
- "REGION_UNDERWATER_SEAFLOOR_CAVERN/MAIN"
+ "REGION_UNDERWATER_SEAFLOOR_CAVERN/MAIN",
+ "REGION_SEAFLOOR_CAVERN_ENTRANCE/MAIN"
+ ],
+ "warps": [
+ "MAP_SEAFLOOR_CAVERN_ENTRANCE:0/MAP_UNDERWATER_ROUTE128:0!"
+ ]
+ },
+ "REGION_SEAFLOOR_CAVERN_ENTRANCE/MAIN": {
+ "parent_map": "MAP_SEAFLOOR_CAVERN_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_SEAFLOOR_CAVERN_ENTRANCE/WATER"
],
"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": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_1_REWARD",
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_2_REWARD"
+ ],
"events": [],
"exits": [
"REGION_SEAFLOOR_CAVERN_ROOM1/SOUTH"
@@ -1633,6 +2221,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM1/SOUTH": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM1",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1644,6 +2235,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM2",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1656,6 +2250,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_WEST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM2",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1669,6 +2266,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_EAST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM2",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1680,6 +2280,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_EAST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM2",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1689,7 +2292,13 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM3/MAIN": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM3",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_5_REWARD",
+ "TRAINER_SHELLY_SEAFLOOR_CAVERN_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1700,7 +2309,13 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM4/NORTH_WEST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM4",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_3_REWARD",
+ "TRAINER_GRUNT_SEAFLOOR_CAVERN_4_REWARD"
+ ],
"events": [],
"exits": [
"REGION_SEAFLOOR_CAVERN_ROOM4/EAST"
@@ -1711,6 +2326,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM4/EAST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM4",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1723,6 +2341,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM4/SOUTH": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM4",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1732,6 +2353,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM5/NORTH_WEST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM5",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1744,6 +2368,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM5/EAST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM5",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1755,6 +2382,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM5/SOUTH_WEST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM5",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1766,31 +2396,41 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM6",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
- "REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER"
+ "REGION_SEAFLOOR_CAVERN_ROOM6/WATER"
],
"warps": [
"MAP_SEAFLOOR_CAVERN_ROOM6:1/MAP_SEAFLOOR_CAVERN_ROOM3:2"
]
},
- "REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER": {
+ "REGION_SEAFLOOR_CAVERN_ROOM6/WATER": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM6",
+ "has_grass": true,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
- "exits": [],
+ "exits": [
+ "REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST"
+ ],
"warps": [
"MAP_SEAFLOOR_CAVERN_ROOM6:2/MAP_SEAFLOOR_CAVERN_ENTRANCE:1!"
]
},
"REGION_SEAFLOOR_CAVERN_ROOM6/SOUTH": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM6",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
- "REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST",
- "REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER"
+ "REGION_SEAFLOOR_CAVERN_ROOM6/WATER"
],
"warps": [
"MAP_SEAFLOOR_CAVERN_ROOM6:0/MAP_SEAFLOOR_CAVERN_ROOM2:2"
@@ -1798,21 +2438,39 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM7/NORTH": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM7",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
- "REGION_SEAFLOOR_CAVERN_ROOM7/SOUTH"
+ "REGION_SEAFLOOR_CAVERN_ROOM7/WATER"
],
"warps": [
"MAP_SEAFLOOR_CAVERN_ROOM7:1/MAP_SEAFLOOR_CAVERN_ROOM3:1"
]
},
- "REGION_SEAFLOOR_CAVERN_ROOM7/SOUTH": {
+ "REGION_SEAFLOOR_CAVERN_ROOM7/WATER": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM7",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
- "REGION_SEAFLOOR_CAVERN_ROOM7/NORTH"
+ "REGION_SEAFLOOR_CAVERN_ROOM7/SOUTH"
+ ],
+ "warps": []
+ },
+ "REGION_SEAFLOOR_CAVERN_ROOM7/SOUTH": {
+ "parent_map": "MAP_SEAFLOOR_CAVERN_ROOM7",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_SEAFLOOR_CAVERN_ROOM7/WATER"
],
"warps": [
"MAP_SEAFLOOR_CAVERN_ROOM7:0/MAP_SEAFLOOR_CAVERN_ROOM2:3"
@@ -1820,6 +2478,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM8/NORTH": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM8",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1831,6 +2492,9 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM8/SOUTH": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM8",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1842,8 +2506,12 @@
},
"REGION_SEAFLOOR_CAVERN_ROOM9/MAIN": {
"parent_map": "MAP_SEAFLOOR_CAVERN_ROOM9",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_SEAFLOOR_CAVERN_ROOM_9_TM26"
+ "ITEM_SEAFLOOR_CAVERN_ROOM_9_TM_EARTHQUAKE",
+ "TRAINER_ARCHIE_REWARD"
],
"events": [
"EVENT_RELEASE_KYOGRE"
@@ -1855,6 +2523,9 @@
},
"REGION_CAVE_OF_ORIGIN_ENTRANCE/MAIN": {
"parent_map": "MAP_CAVE_OF_ORIGIN_ENTRANCE",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1865,6 +2536,9 @@
},
"REGION_CAVE_OF_ORIGIN_1F/MAIN": {
"parent_map": "MAP_CAVE_OF_ORIGIN_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1875,10 +2549,11 @@
},
"REGION_CAVE_OF_ORIGIN_B1F/MAIN": {
"parent_map": "MAP_CAVE_OF_ORIGIN_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
- "events": [
- "EVENT_WALLACE_GOES_TO_SKY_PILLAR"
- ],
+ "events": [],
"exits": [],
"warps": [
"MAP_CAVE_OF_ORIGIN_B1F:0/MAP_CAVE_OF_ORIGIN_1F:1"
@@ -1886,6 +2561,9 @@
},
"REGION_SKY_PILLAR_ENTRANCE/MAIN": {
"parent_map": "MAP_SKY_PILLAR_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1896,6 +2574,9 @@
},
"REGION_SKY_PILLAR_OUTSIDE/MAIN": {
"parent_map": "MAP_SKY_PILLAR_OUTSIDE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1906,6 +2587,9 @@
},
"REGION_SKY_PILLAR_1F/MAIN": {
"parent_map": "MAP_SKY_PILLAR_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1916,6 +2600,9 @@
},
"REGION_SKY_PILLAR_2F/LEFT": {
"parent_map": "MAP_SKY_PILLAR_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1928,6 +2615,9 @@
},
"REGION_SKY_PILLAR_2F/RIGHT": {
"parent_map": "MAP_SKY_PILLAR_2F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1940,6 +2630,9 @@
},
"REGION_SKY_PILLAR_3F/MAIN": {
"parent_map": "MAP_SKY_PILLAR_3F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1950,6 +2643,9 @@
},
"REGION_SKY_PILLAR_3F/TOP_CENTER": {
"parent_map": "MAP_SKY_PILLAR_3F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1959,6 +2655,9 @@
},
"REGION_SKY_PILLAR_4F/MAIN": {
"parent_map": "MAP_SKY_PILLAR_4F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1971,6 +2670,9 @@
},
"REGION_SKY_PILLAR_4F/ABOVE_3F_TOP_CENTER": {
"parent_map": "MAP_SKY_PILLAR_4F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1980,6 +2682,9 @@
},
"REGION_SKY_PILLAR_4F/TOP_LEFT": {
"parent_map": "MAP_SKY_PILLAR_4F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1990,6 +2695,9 @@
},
"REGION_SKY_PILLAR_5F/MAIN": {
"parent_map": "MAP_SKY_PILLAR_5F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -2000,9 +2708,12 @@
},
"REGION_SKY_PILLAR_TOP/MAIN": {
"parent_map": "MAP_SKY_PILLAR_TOP",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [
- "EVENT_WAKE_RAYQUAZA"
+ "EVENT_ENCOUNTER_RAYQUAZA"
],
"exits": [],
"warps": [
@@ -2011,10 +2722,14 @@
},
"REGION_UNDERWATER_SEALED_CHAMBER/MAIN": {
"parent_map": "MAP_UNDERWATER_SEALED_CHAMBER",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
- "REGION_SEALED_CHAMBER_OUTER_ROOM/MAIN"
+ "REGION_SEALED_CHAMBER_OUTER_ROOM/MAIN",
+ "REGION_ROUTE134/MAIN"
],
"warps": [
"MAP_UNDERWATER_SEALED_CHAMBER:0/MAP_UNDERWATER_ROUTE134:0"
@@ -2022,10 +2737,26 @@
},
"REGION_SEALED_CHAMBER_OUTER_ROOM/MAIN": {
"parent_map": "MAP_SEALED_CHAMBER_OUTER_ROOM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
- "REGION_UNDERWATER_SEALED_CHAMBER/MAIN"
+ "REGION_UNDERWATER_SEALED_CHAMBER/MAIN",
+ "REGION_SEALED_CHAMBER_OUTER_ROOM/CRUMBLED_WALL"
+ ],
+ "warps": []
+ },
+ "REGION_SEALED_CHAMBER_OUTER_ROOM/CRUMBLED_WALL": {
+ "parent_map": "MAP_SEALED_CHAMBER_OUTER_ROOM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_SEALED_CHAMBER_OUTER_ROOM/MAIN"
],
"warps": [
"MAP_SEALED_CHAMBER_OUTER_ROOM:0/MAP_SEALED_CHAMBER_INNER_ROOM:0"
@@ -2033,8 +2764,13 @@
},
"REGION_SEALED_CHAMBER_INNER_ROOM/MAIN": {
"parent_map": "MAP_SEALED_CHAMBER_INNER_ROOM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
- "events": [],
+ "events": [
+ "EVENT_UNDO_REGI_SEAL"
+ ],
"exits": [],
"warps": [
"MAP_SEALED_CHAMBER_INNER_ROOM:0/MAP_SEALED_CHAMBER_OUTER_ROOM:0"
@@ -2042,7 +2778,14 @@
},
"REGION_VICTORY_ROAD_1F/NORTH_EAST": {
"parent_map": "MAP_VICTORY_ROAD_1F",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_EDGAR_REWARD",
+ "TRAINER_KATELYNN_REWARD",
+ "TRAINER_QUINCY_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -2052,8 +2795,14 @@
},
"REGION_VICTORY_ROAD_1F/SOUTH_WEST": {
"parent_map": "MAP_VICTORY_ROAD_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_VICTORY_ROAD_1F_MAX_ELIXIR"
+ "ITEM_VICTORY_ROAD_1F_MAX_ELIXIR",
+ "TRAINER_ALBERT_REWARD",
+ "TRAINER_HOPE_REWARD",
+ "TRAINER_WALLY_VR_1_REWARD"
],
"events": [],
"exits": [],
@@ -2064,6 +2813,9 @@
},
"REGION_VICTORY_ROAD_1F/SOUTH_EAST": {
"parent_map": "MAP_VICTORY_ROAD_1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_VICTORY_ROAD_1F_PP_UP",
"HIDDEN_ITEM_VICTORY_ROAD_1F_ULTRA_BALL"
@@ -2076,8 +2828,11 @@
},
"REGION_VICTORY_ROAD_B1F/NORTH_EAST": {
"parent_map": "MAP_VICTORY_ROAD_B1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_VICTORY_ROAD_B1F_TM29"
+ "ITEM_VICTORY_ROAD_B1F_TM_PSYCHIC"
],
"events": [],
"exits": [],
@@ -2087,7 +2842,14 @@
},
"REGION_VICTORY_ROAD_B1F/SOUTH_WEST_MAIN": {
"parent_map": "MAP_VICTORY_ROAD_B1F",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_MICHELLE_REWARD",
+ "TRAINER_MITCHELL_REWARD",
+ "TRAINER_HALLE_REWARD"
+ ],
"events": [],
"exits": [
"REGION_VICTORY_ROAD_B1F/SOUTH_WEST_LADDER_UP"
@@ -2099,6 +2861,9 @@
},
"REGION_VICTORY_ROAD_B1F/SOUTH_WEST_LADDER_UP": {
"parent_map": "MAP_VICTORY_ROAD_B1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -2110,7 +2875,12 @@
},
"REGION_VICTORY_ROAD_B1F/MAIN_UPPER": {
"parent_map": "MAP_VICTORY_ROAD_B1F",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_SHANNON_REWARD"
+ ],
"events": [],
"exits": [
"REGION_VICTORY_ROAD_B1F/MAIN_LOWER_EAST"
@@ -2121,8 +2891,12 @@
},
"REGION_VICTORY_ROAD_B1F/MAIN_LOWER_EAST": {
"parent_map": "MAP_VICTORY_ROAD_B1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_VICTORY_ROAD_B1F_FULL_RESTORE"
+ "ITEM_VICTORY_ROAD_B1F_FULL_RESTORE",
+ "TRAINER_SAMUEL_REWARD"
],
"events": [],
"exits": [
@@ -2134,6 +2908,9 @@
},
"REGION_VICTORY_ROAD_B1F/MAIN_LOWER_WEST": {
"parent_map": "MAP_VICTORY_ROAD_B1F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -2146,6 +2923,9 @@
},
"REGION_VICTORY_ROAD_B2F/LOWER_WEST": {
"parent_map": "MAP_VICTORY_ROAD_B2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -2157,6 +2937,9 @@
},
"REGION_VICTORY_ROAD_B2F/LOWER_WEST_ISLAND": {
"parent_map": "MAP_VICTORY_ROAD_B2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -2168,7 +2951,12 @@
},
"REGION_VICTORY_ROAD_B2F/LOWER_EAST": {
"parent_map": "MAP_VICTORY_ROAD_B2F",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_JULIE_REWARD"
+ ],
"events": [],
"exits": [
"REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER"
@@ -2179,6 +2967,9 @@
},
"REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER": {
"parent_map": "MAP_VICTORY_ROAD_B2F",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -2190,6 +2981,9 @@
},
"REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER": {
"parent_map": "MAP_VICTORY_ROAD_B2F",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -2201,8 +2995,16 @@
},
"REGION_VICTORY_ROAD_B2F/UPPER": {
"parent_map": "MAP_VICTORY_ROAD_B2F",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
- "HIDDEN_ITEM_VICTORY_ROAD_B2F_MAX_REPEL"
+ "HIDDEN_ITEM_VICTORY_ROAD_B2F_MAX_REPEL",
+ "TRAINER_OWEN_REWARD",
+ "TRAINER_DIANNE_REWARD",
+ "TRAINER_FELIX_REWARD",
+ "TRAINER_CAROLINE_REWARD"
+
],
"events": [],
"exits": [
@@ -2216,9 +3018,13 @@
},
"REGION_VICTORY_ROAD_B2F/UPPER_WATER": {
"parent_map": "MAP_VICTORY_ROAD_B2F",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_VICTORY_ROAD_B2F_FULL_HEAL",
- "HIDDEN_ITEM_VICTORY_ROAD_B2F_ELIXIR"
+ "HIDDEN_ITEM_VICTORY_ROAD_B2F_ELIXIR",
+ "TRAINER_VITO_REWARD"
],
"events": [],
"exits": [
@@ -2227,5 +3033,71 @@
"REGION_VICTORY_ROAD_B2F/UPPER"
],
"warps": []
+ },
+ "REGION_TERRA_CAVE_ENTRANCE/MAIN": {
+ "parent_map": "MAP_TERRA_CAVE_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [],
+ "warps": [
+ "MAP_TERRA_CAVE_ENTRANCE:1/MAP_TERRA_CAVE_END:0"
+ ]
+ },
+ "REGION_TERRA_CAVE_END/MAIN": {
+ "parent_map": "MAP_TERRA_CAVE_END",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [
+ "EVENT_ENCOUNTER_GROUDON"
+ ],
+ "exits": [],
+ "warps": [
+ "MAP_TERRA_CAVE_END:0/MAP_TERRA_CAVE_ENTRANCE:1"
+ ]
+ },
+ "REGION_UNDERWATER_MARINE_CAVE/MAIN": {
+ "parent_map": "MAP_UNDERWATER_MARINE_CAVE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_MARINE_CAVE_ENTRANCE/MAIN"
+ ],
+ "warps": []
+ },
+ "REGION_MARINE_CAVE_ENTRANCE/MAIN": {
+ "parent_map": "MAP_MARINE_CAVE_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [
+ "EVENT_ENCOUNTER_KYOGRE"
+ ],
+ "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/islands.json
similarity index 73%
rename from worlds/pokemon_emerald/data/regions/unused/islands.json
rename to worlds/pokemon_emerald/data/regions/islands.json
index f7d931d168..4426729357 100644
--- a/worlds/pokemon_emerald/data/regions/unused/islands.json
+++ b/worlds/pokemon_emerald/data/regions/islands.json
@@ -1,17 +1,27 @@
{
"REGION_SOUTHERN_ISLAND_EXTERIOR/MAIN": {
"parent_map": "MAP_SOUTHERN_ISLAND_EXTERIOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
- "exits": [],
+ "exits": [
+ "REGION_LILYCOVE_CITY_HARBOR/MAIN"
+ ],
"warps": [
"MAP_SOUTHERN_ISLAND_EXTERIOR:0,1/MAP_SOUTHERN_ISLAND_INTERIOR:0,1"
]
},
"REGION_SOUTHERN_ISLAND_INTERIOR/MAIN": {
"parent_map": "MAP_SOUTHERN_ISLAND_INTERIOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
- "events": [],
+ "events": [
+ "EVENT_ENCOUNTER_LATIAS"
+ ],
"exits": [],
"warps": [
"MAP_SOUTHERN_ISLAND_INTERIOR:0,1/MAP_SOUTHERN_ISLAND_EXTERIOR:0,1"
@@ -19,17 +29,27 @@
},
"REGION_FARAWAY_ISLAND_ENTRANCE/MAIN": {
"parent_map": "MAP_FARAWAY_ISLAND_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
- "exits": [],
+ "exits": [
+ "REGION_LILYCOVE_CITY_HARBOR/MAIN"
+ ],
"warps": [
"MAP_FARAWAY_ISLAND_ENTRANCE:0,1/MAP_FARAWAY_ISLAND_INTERIOR:0,1"
]
},
"REGION_FARAWAY_ISLAND_INTERIOR/MAIN": {
"parent_map": "MAP_FARAWAY_ISLAND_INTERIOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
- "events": [],
+ "events": [
+ "EVENT_ENCOUNTER_MEW"
+ ],
"exits": [],
"warps": [
"MAP_FARAWAY_ISLAND_INTERIOR:0,1/MAP_FARAWAY_ISLAND_ENTRANCE:0,1"
@@ -37,17 +57,27 @@
},
"REGION_BIRTH_ISLAND_HARBOR/MAIN": {
"parent_map": "MAP_BIRTH_ISLAND_HARBOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
- "exits": [],
+ "exits": [
+ "REGION_LILYCOVE_CITY_HARBOR/MAIN"
+ ],
"warps": [
"MAP_BIRTH_ISLAND_HARBOR:0/MAP_BIRTH_ISLAND_EXTERIOR:0"
]
},
"REGION_BIRTH_ISLAND_EXTERIOR/MAIN": {
"parent_map": "MAP_BIRTH_ISLAND_EXTERIOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
- "events": [],
+ "events": [
+ "EVENT_ENCOUNTER_DEOXYS"
+ ],
"exits": [],
"warps": [
"MAP_BIRTH_ISLAND_EXTERIOR:0/MAP_BIRTH_ISLAND_HARBOR:0"
@@ -55,15 +85,23 @@
},
"REGION_NAVEL_ROCK_HARBOR/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_HARBOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
- "exits": [],
+ "exits": [
+ "REGION_LILYCOVE_CITY_HARBOR/MAIN"
+ ],
"warps": [
"MAP_NAVEL_ROCK_HARBOR:0/MAP_NAVEL_ROCK_EXTERIOR:0"
]
},
"REGION_NAVEL_ROCK_EXTERIOR/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_EXTERIOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -74,6 +112,9 @@
},
"REGION_NAVEL_ROCK_ENTRANCE/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -84,6 +125,9 @@
},
"REGION_NAVEL_ROCK_B1F/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_B1F",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -94,6 +138,9 @@
},
"REGION_NAVEL_ROCK_FORK/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_FORK",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -105,6 +152,9 @@
},
"REGION_NAVEL_ROCK_DOWN01/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN01",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -115,6 +165,9 @@
},
"REGION_NAVEL_ROCK_DOWN02/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN02",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -125,6 +178,9 @@
},
"REGION_NAVEL_ROCK_DOWN03/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN03",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -135,6 +191,9 @@
},
"REGION_NAVEL_ROCK_DOWN04/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN04",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -145,6 +204,9 @@
},
"REGION_NAVEL_ROCK_DOWN05/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN05",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -155,6 +217,9 @@
},
"REGION_NAVEL_ROCK_DOWN06/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN06",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -165,6 +230,9 @@
},
"REGION_NAVEL_ROCK_DOWN07/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN07",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -175,6 +243,9 @@
},
"REGION_NAVEL_ROCK_DOWN08/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN08",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -185,6 +256,9 @@
},
"REGION_NAVEL_ROCK_DOWN09/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN09",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -195,6 +269,9 @@
},
"REGION_NAVEL_ROCK_DOWN10/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN10",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -205,6 +282,9 @@
},
"REGION_NAVEL_ROCK_DOWN11/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_DOWN11",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -215,8 +295,13 @@
},
"REGION_NAVEL_ROCK_BOTTOM/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_BOTTOM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
- "events": [],
+ "events": [
+ "EVENT_ENCOUNTER_LUGIA"
+ ],
"exits": [],
"warps": [
"MAP_NAVEL_ROCK_BOTTOM:0/MAP_NAVEL_ROCK_DOWN11:0"
@@ -224,6 +309,9 @@
},
"REGION_NAVEL_ROCK_UP1/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_UP1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -234,6 +322,9 @@
},
"REGION_NAVEL_ROCK_UP2/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_UP2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -244,6 +335,9 @@
},
"REGION_NAVEL_ROCK_UP3/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_UP3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -254,6 +348,9 @@
},
"REGION_NAVEL_ROCK_UP4/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_UP4",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -264,10 +361,15 @@
},
"REGION_NAVEL_ROCK_TOP/MAIN": {
"parent_map": "MAP_NAVEL_ROCK_TOP",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_NAVEL_ROCK_TOP_SACRED_ASH"
],
- "events": [],
+ "events": [
+ "EVENT_ENCOUNTER_HO_OH"
+ ],
"exits": [],
"warps": [
"MAP_NAVEL_ROCK_TOP:0/MAP_NAVEL_ROCK_UP4:1"
diff --git a/worlds/pokemon_emerald/data/regions/routes.json b/worlds/pokemon_emerald/data/regions/routes.json
index f4b8d935c3..706051e183 100644
--- a/worlds/pokemon_emerald/data/regions/routes.json
+++ b/worlds/pokemon_emerald/data/regions/routes.json
@@ -1,6 +1,9 @@
{
"REGION_ROUTE101/MAIN": {
"parent_map": "MAP_ROUTE101",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -11,19 +14,44 @@
},
"REGION_ROUTE102/MAIN": {
"parent_map": "MAP_ROUTE102",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
- "ITEM_ROUTE_102_POTION"
+ "ITEM_ROUTE_102_POTION",
+ "BERRY_TREE_01",
+ "BERRY_TREE_02",
+ "TRAINER_CALVIN_1_REWARD",
+ "TRAINER_RICK_REWARD",
+ "TRAINER_ALLEN_REWARD",
+ "TRAINER_TIANA_REWARD"
],
"events": [],
"exits": [
"REGION_OLDALE_TOWN/MAIN",
- "REGION_PETALBURG_CITY/MAIN"
+ "REGION_PETALBURG_CITY/MAIN",
+ "REGION_ROUTE102/POND"
],
"warps": []
},
+ "REGION_ROUTE102/POND": {
+ "parent_map": "MAP_ROUTE102",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_ROUTE103/WEST": {
"parent_map": "MAP_ROUTE103",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_BRENDAN_ROUTE_103_MUDKIP_REWARD"
+ ],
"events": [],
"exits": [
"REGION_ROUTE103/WATER",
@@ -33,7 +61,13 @@
},
"REGION_ROUTE103/WATER": {
"parent_map": "MAP_ROUTE103",
- "locations": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_ISABELLE_REWARD",
+ "TRAINER_PETE_REWARD"
+ ],
"events": [],
"exits": [
"REGION_ROUTE103/WEST",
@@ -43,38 +77,87 @@
},
"REGION_ROUTE103/EAST": {
"parent_map": "MAP_ROUTE103",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
- "ITEM_ROUTE_103_GUARD_SPEC",
- "ITEM_ROUTE_103_PP_UP"
+ "TRAINER_ANDREW_REWARD",
+ "TRAINER_MIGUEL_1_REWARD",
+ "TRAINER_AMY_AND_LIV_1_REWARD",
+ "TRAINER_DAISY_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE103/WATER",
+ "REGION_ROUTE103/EAST_TREE_MAZE",
"REGION_ROUTE110/MAIN"
],
- "warps": [
- "MAP_ROUTE103:0/MAP_ALTERING_CAVE:0"
- ]
+ "warps": []
+ },
+ "REGION_ROUTE103/EAST_TREE_MAZE": {
+ "parent_map": "MAP_ROUTE103",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "ITEM_ROUTE_103_GUARD_SPEC",
+ "ITEM_ROUTE_103_PP_UP",
+ "BERRY_TREE_05",
+ "BERRY_TREE_06",
+ "BERRY_TREE_07",
+ "TRAINER_MARCOS_REWARD",
+ "TRAINER_RHETT_REWARD"
+ ],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE103/EAST"
+ ],
+ "warps": []
},
"REGION_ROUTE104/SOUTH": {
"parent_map": "MAP_ROUTE104",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"HIDDEN_ITEM_ROUTE_104_POTION",
"HIDDEN_ITEM_ROUTE_104_HEART_SCALE",
- "HIDDEN_ITEM_ROUTE_104_ANTIDOTE"
+ "HIDDEN_ITEM_ROUTE_104_ANTIDOTE",
+ "BERRY_TREE_11",
+ "BERRY_TREE_12",
+ "BERRY_TREE_13",
+ "TRAINER_BILLY_REWARD",
+ "TRAINER_DARIAN_REWARD",
+ "TRAINER_CINDY_1_REWARD"
],
"events": [],
"exits": [
"REGION_PETALBURG_CITY/MAIN",
- "REGION_ROUTE105/MAIN"
+ "REGION_ROUTE104/SOUTH_WATER"
],
"warps": [
"MAP_ROUTE104:0/MAP_ROUTE104_MR_BRINEYS_HOUSE:0",
"MAP_ROUTE104:4,5/MAP_PETALBURG_WOODS:2,3"
]
},
+ "REGION_ROUTE104/SOUTH_WATER": {
+ "parent_map": "MAP_ROUTE104",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE104/SOUTH",
+ "REGION_ROUTE105/MAIN"
+ ],
+ "warps": []
+ },
"REGION_ROUTE104/SOUTH_LEDGE": {
"parent_map": "MAP_ROUTE104",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ROUTE_104_POKE_BALL"
],
@@ -88,27 +171,82 @@
},
"REGION_ROUTE104/NORTH": {
"parent_map": "MAP_ROUTE104",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"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_TM_BULLET_SEED",
"NPC_GIFT_RECEIVED_WHITE_HERB",
- "NPC_GIFT_RECEIVED_CHESTO_BERRY_ROUTE_104"
+ "NPC_GIFT_RECEIVED_CHESTO_BERRY_ROUTE_104",
+ "BERRY_TREE_03",
+ "BERRY_TREE_04",
+ "BERRY_TREE_08",
+ "BERRY_TREE_09",
+ "BERRY_TREE_10",
+ "BERRY_TREE_75",
+ "BERRY_TREE_76",
+ "TRAINER_WINSTON_1_REWARD",
+ "TRAINER_HALEY_1_REWARD",
+ "TRAINER_IVAN_REWARD",
+ "TRAINER_GINA_AND_MIA_1_REWARD"
],
"events": [],
"exits": [
- "REGION_RUSTBORO_CITY/MAIN"
+ "REGION_RUSTBORO_CITY/MAIN",
+ "REGION_ROUTE104/NORTH_POND",
+ "REGION_ROUTE104/TREE_ALCOVE_2"
],
"warps": [
"MAP_ROUTE104:1/MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP:0",
"MAP_ROUTE104:2,3/MAP_PETALBURG_WOODS:0,1"
]
},
+ "REGION_ROUTE104/NORTH_POND": {
+ "parent_map": "MAP_ROUTE104",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE104/NORTH",
+ "REGION_ROUTE104/TREE_ALCOVE_1",
+ "REGION_ROUTE104/TREE_ALCOVE_2"
+ ],
+ "warps": []
+ },
+ "REGION_ROUTE104/TREE_ALCOVE_1": {
+ "parent_map": "MAP_ROUTE104",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "ITEM_ROUTE_104_PP_UP"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
+ "REGION_ROUTE104/TREE_ALCOVE_2": {
+ "parent_map": "MAP_ROUTE104",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "ITEM_ROUTE_104_X_ACCURACY"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN": {
"parent_map": "MAP_ROUTE104_MR_BRINEYS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -120,8 +258,12 @@
},
"REGION_ROUTE104_PRETTY_PETAL_FLOWER_SHOP/MAIN": {
"parent_map": "MAP_ROUTE104_PRETTY_PETAL_FLOWER_SHOP",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_WAILMER_PAIL"
+ "NPC_GIFT_RECEIVED_WAILMER_PAIL",
+ "NPC_GIFT_FLOWER_SHOP_RECEIVED_BERRY"
],
"events": [
"EVENT_MEET_FLOWER_SHOP_OWNER"
@@ -133,32 +275,63 @@
},
"REGION_ROUTE105/MAIN": {
"parent_map": "MAP_ROUTE105",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_105_IRON",
"HIDDEN_ITEM_ROUTE_105_HEART_SCALE",
- "HIDDEN_ITEM_ROUTE_105_BIG_PEARL"
+ "HIDDEN_ITEM_ROUTE_105_BIG_PEARL",
+ "TRAINER_IMANI_REWARD",
+ "TRAINER_DOMINIK_REWARD",
+ "TRAINER_LUIS_REWARD",
+ "TRAINER_FOSTER_REWARD",
+ "TRAINER_JOSUE_REWARD",
+ "TRAINER_ANDRES_1_REWARD",
+ "TRAINER_BEVERLY_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE104/SOUTH",
"REGION_ROUTE106/SEA",
- "REGION_UNDERWATER_ROUTE105/MAIN"
+ "REGION_UNDERWATER_ROUTE105/MARINE_CAVE_ENTRANCE_1",
+ "REGION_UNDERWATER_ROUTE105/MARINE_CAVE_ENTRANCE_2"
],
"warps": [
"MAP_ROUTE105:0/MAP_ISLAND_CAVE:0"
]
},
- "REGION_UNDERWATER_ROUTE105/MAIN": {
+ "REGION_UNDERWATER_ROUTE105/MARINE_CAVE_ENTRANCE_1": {
"parent_map": "MAP_UNDERWATER_ROUTE105",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
- "REGION_ROUTE105/MAIN"
+ "REGION_ROUTE105/MAIN",
+ "REGION_UNDERWATER_MARINE_CAVE/MAIN"
+ ],
+ "warps": []
+ },
+ "REGION_UNDERWATER_ROUTE105/MARINE_CAVE_ENTRANCE_2": {
+ "parent_map": "MAP_UNDERWATER_ROUTE105",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE105/MAIN",
+ "REGION_UNDERWATER_MARINE_CAVE/MAIN"
],
"warps": []
},
"REGION_ROUTE106/WEST": {
"parent_map": "MAP_ROUTE106",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_106_PROTEIN"
],
@@ -170,7 +343,13 @@
},
"REGION_ROUTE106/SEA": {
"parent_map": "MAP_ROUTE106",
- "locations": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_DOUGLAS_REWARD",
+ "TRAINER_KYLA_REWARD"
+ ],
"events": [],
"exits": [
"REGION_ROUTE105/MAIN",
@@ -181,10 +360,15 @@
},
"REGION_ROUTE106/EAST": {
"parent_map": "MAP_ROUTE106",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"HIDDEN_ITEM_ROUTE_106_POKE_BALL",
"HIDDEN_ITEM_ROUTE_106_STARDUST",
- "HIDDEN_ITEM_ROUTE_106_HEART_SCALE"
+ "HIDDEN_ITEM_ROUTE_106_HEART_SCALE",
+ "TRAINER_ELLIOT_1_REWARD",
+ "TRAINER_NED_REWARD"
],
"events": [],
"exits": [
@@ -197,7 +381,17 @@
},
"REGION_ROUTE107/MAIN": {
"parent_map": "MAP_ROUTE107",
- "locations": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_DENISE_REWARD",
+ "TRAINER_TONY_1_REWARD",
+ "TRAINER_DARRIN_REWARD",
+ "TRAINER_CAMRON_REWARD",
+ "TRAINER_BETH_REWARD",
+ "TRAINER_LISA_AND_RAY_REWARD"
+ ],
"events": [],
"exits": [
"REGION_DEWFORD_TOWN/MAIN",
@@ -207,9 +401,18 @@
},
"REGION_ROUTE108/MAIN": {
"parent_map": "MAP_ROUTE108",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_108_STAR_PIECE",
- "HIDDEN_ITEM_ROUTE_108_RARE_CANDY"
+ "HIDDEN_ITEM_ROUTE_108_RARE_CANDY",
+ "TRAINER_MISSY_REWARD",
+ "TRAINER_MATTHEW_REWARD",
+ "TRAINER_TARA_REWARD",
+ "TRAINER_CAROLINA_REWARD",
+ "TRAINER_CORY_1_REWARD",
+ "TRAINER_JEROME_REWARD"
],
"events": [],
"exits": [
@@ -222,9 +425,19 @@
},
"REGION_ROUTE109/SEA": {
"parent_map": "MAP_ROUTE109",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_109_PP_UP",
- "HIDDEN_ITEM_ROUTE_109_HEART_SCALE_3"
+ "HIDDEN_ITEM_ROUTE_109_HEART_SCALE_3",
+ "TRAINER_AUSTINA_REWARD",
+ "TRAINER_GWEN_REWARD",
+ "TRAINER_ELIJAH_REWARD",
+ "TRAINER_CARTER_REWARD",
+ "TRAINER_ALICE_REWARD",
+ "TRAINER_DAVID_REWARD",
+ "TRAINER_MEL_AND_PAUL_REWARD"
],
"events": [],
"exits": [
@@ -235,6 +448,9 @@
},
"REGION_ROUTE109/BEACH": {
"parent_map": "MAP_ROUTE109",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_109_POTION",
"HIDDEN_ITEM_ROUTE_109_REVIVE",
@@ -242,7 +458,13 @@
"HIDDEN_ITEM_ROUTE_109_GREAT_BALL",
"HIDDEN_ITEM_ROUTE_109_ETHER",
"HIDDEN_ITEM_ROUTE_109_HEART_SCALE_2",
- "NPC_GIFT_RECEIVED_SOFT_SAND"
+ "NPC_GIFT_RECEIVED_SOFT_SAND",
+ "TRAINER_HUEY_REWARD",
+ "TRAINER_HAILEY_REWARD",
+ "TRAINER_EDMOND_REWARD",
+ "TRAINER_RICKY_1_REWARD",
+ "TRAINER_LOLA_1_REWARD",
+ "TRAINER_CHANDLER_REWARD"
],
"events": [],
"exits": [
@@ -256,8 +478,14 @@
},
"REGION_ROUTE109_SEASHORE_HOUSE/MAIN": {
"parent_map": "MAP_ROUTE109_SEASHORE_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_6_SODA_POP"
+ "NPC_GIFT_RECEIVED_6_SODA_POP",
+ "TRAINER_DWAYNE_REWARD",
+ "TRAINER_JOHANNA_REWARD",
+ "TRAINER_SIMON_REWARD"
],
"events": [],
"exits": [],
@@ -267,6 +495,9 @@
},
"REGION_ROUTE110/MAIN": {
"parent_map": "MAP_ROUTE110",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_110_DIRE_HIT",
"ITEM_ROUTE_110_ELIXIR",
@@ -274,7 +505,19 @@
"HIDDEN_ITEM_ROUTE_110_GREAT_BALL",
"HIDDEN_ITEM_ROUTE_110_POKE_BALL",
"HIDDEN_ITEM_ROUTE_110_FULL_HEAL",
- "NPC_GIFT_RECEIVED_ITEMFINDER"
+ "NPC_GIFT_RECEIVED_ITEMFINDER",
+ "BERRY_TREE_16",
+ "BERRY_TREE_17",
+ "BERRY_TREE_18",
+ "TRAINER_KALEB_REWARD",
+ "TRAINER_ISABEL_1_REWARD",
+ "TRAINER_TIMMY_REWARD",
+ "TRAINER_JOSEPH_REWARD",
+ "TRAINER_EDWIN_1_REWARD",
+ "TRAINER_ALYSSA_REWARD",
+ "TRAINER_EDWARD_REWARD",
+ "TRAINER_DALE_REWARD",
+ "TRAINER_BRENDAN_ROUTE_110_MUDKIP_REWARD"
],
"events": [],
"exits": [
@@ -291,6 +534,9 @@
},
"REGION_ROUTE110/SOUTH": {
"parent_map": "MAP_ROUTE110",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -303,7 +549,17 @@
},
"REGION_ROUTE110/CYCLING_ROAD": {
"parent_map": "MAP_ROUTE110",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_JACOB_REWARD",
+ "TRAINER_JASMINE_REWARD",
+ "TRAINER_BENJAMIN_1_REWARD",
+ "TRAINER_ANTHONY_REWARD",
+ "TRAINER_ABIGAIL_1_REWARD",
+ "TRAINER_JACLYN_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -313,6 +569,9 @@
},
"REGION_ROUTE110/SOUTH_WATER": {
"parent_map": "MAP_ROUTE110",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_110_RARE_CANDY"
],
@@ -324,6 +583,9 @@
},
"REGION_ROUTE110/NORTH_WATER": {
"parent_map": "MAP_ROUTE110",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -335,26 +597,248 @@
},
"REGION_ROUTE110_TRICK_HOUSE_ENTRANCE/MAIN": {
"parent_map": "MAP_ROUTE110_TRICK_HOUSE_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
- "exits": [],
+ "exits": [
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE2/ENTRANCE",
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE3/ENTRANCE",
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE4/ENTRANCE",
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE5/ENTRANCE",
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE6/ENTRANCE",
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE7/ENTRANCE",
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE8/ENTRANCE"
+ ],
"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": {
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE1/ENTRANCE": {
"parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
+ "exits": [
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE1/REWARDS"
+ ],
+ "warps": [
+ "MAP_ROUTE110_TRICK_HOUSE_PUZZLE1:0,1/MAP_ROUTE110_TRICK_HOUSE_ENTRANCE:2"
+ ]
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE1/REWARDS": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE1",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_1",
+ "ITEM_TRICK_HOUSE_PUZZLE_1_ORANGE_MAIL"
+ ],
+ "events": [
+ "EVENT_COMPLETE_TRICK_HOUSE_1"
+ ],
"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_PUZZLE2/ENTRANCE": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE2/REWARDS"
+ ],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE2/REWARDS": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE2",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_2",
+ "ITEM_TRICK_HOUSE_PUZZLE_2_HARBOR_MAIL",
+ "ITEM_TRICK_HOUSE_PUZZLE_2_WAVE_MAIL"
+ ],
+ "events": [
+ "EVENT_COMPLETE_TRICK_HOUSE_2"
+ ],
+ "exits": [],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE3/ENTRANCE": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE3/REWARDS"
+ ],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE3/REWARDS": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE3",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_3",
+ "ITEM_TRICK_HOUSE_PUZZLE_3_SHADOW_MAIL",
+ "ITEM_TRICK_HOUSE_PUZZLE_3_WOOD_MAIL"
+ ],
+ "events": [
+ "EVENT_COMPLETE_TRICK_HOUSE_3"
+ ],
+ "exits": [],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE4/ENTRANCE": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE4",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE4/REWARDS"
+ ],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE4/REWARDS": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE4",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_4",
+ "ITEM_TRICK_HOUSE_PUZZLE_4_MECH_MAIL"
+ ],
+ "events": [
+ "EVENT_COMPLETE_TRICK_HOUSE_4"
+ ],
+ "exits": [],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE5/ENTRANCE": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE5",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE5/REWARDS"
+ ],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE5/REWARDS": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE5",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_5"
+ ],
+ "events": [
+ "EVENT_COMPLETE_TRICK_HOUSE_5"
+ ],
+ "exits": [],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE6/ENTRANCE": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE6",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE6/REWARDS"
+ ],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE6/REWARDS": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE6",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_6",
+ "ITEM_TRICK_HOUSE_PUZZLE_6_GLITTER_MAIL"
+ ],
+ "events": [
+ "EVENT_COMPLETE_TRICK_HOUSE_6"
+ ],
+ "exits": [],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE7/ENTRANCE": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE7/REWARDS"
+ ],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE7/REWARDS": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE7",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_RECEIVED_TRICK_HOUSE_REWARD_7",
+ "ITEM_TRICK_HOUSE_PUZZLE_7_TROPIC_MAIL"
+ ],
+ "events": [
+ "EVENT_COMPLETE_TRICK_HOUSE_7"
+ ],
+ "exits": [],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE8/ENTRANCE": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE8",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE8/REWARDS"
+ ],
+ "warps": []
+ },
+ "REGION_ROUTE110_TRICK_HOUSE_PUZZLE8/REWARDS": {
+ "parent_map": "MAP_ROUTE110_TRICK_HOUSE_PUZZLE8",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "ITEM_TRICK_HOUSE_PUZZLE_8_BEAD_MAIL"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_ROUTE110_TRICK_HOUSE_END/MAIN": {
"parent_map": "MAP_ROUTE110_TRICK_HOUSE_END",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -365,6 +849,9 @@
},
"REGION_ROUTE110_TRICK_HOUSE_CORRIDOR/MAIN": {
"parent_map": "MAP_ROUTE110_TRICK_HOUSE_CORRIDOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -375,6 +862,9 @@
},
"REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/WEST": {
"parent_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -386,6 +876,9 @@
},
"REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/EAST": {
"parent_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -397,6 +890,9 @@
},
"REGION_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE/WEST": {
"parent_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -408,6 +904,9 @@
},
"REGION_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE/EAST": {
"parent_map": "MAP_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -419,7 +918,13 @@
},
"REGION_ROUTE111/MIDDLE": {
"parent_map": "MAP_ROUTE111",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_IRENE_REWARD",
+ "TRAINER_TRAVIS_REWARD"
+ ],
"events": [],
"exits": [
"REGION_ROUTE111/DESERT",
@@ -430,8 +935,19 @@
},
"REGION_ROUTE111/SOUTH": {
"parent_map": "MAP_ROUTE111",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
- "ITEM_ROUTE_111_ELIXIR"
+ "ITEM_ROUTE_111_ELIXIR",
+ "TRAINER_CELINA_REWARD",
+ "TRAINER_TYRON_REWARD",
+ "TRAINER_BIANCA_REWARD",
+ "TRAINER_HAYDEN_REWARD",
+ "TRAINER_VICTOR_REWARD",
+ "TRAINER_VICKY_REWARD",
+ "TRAINER_VICTORIA_REWARD",
+ "TRAINER_VIVI_REWARD"
],
"events": [],
"exits": [
@@ -446,6 +962,9 @@
},
"REGION_ROUTE111/SOUTH_POND": {
"parent_map": "MAP_ROUTE111",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_111_HP_UP"
],
@@ -457,12 +976,23 @@
},
"REGION_ROUTE111/DESERT": {
"parent_map": "MAP_ROUTE111",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_ROUTE_111_TM37",
+ "ITEM_ROUTE_111_TM_SANDSTORM",
"ITEM_ROUTE_111_STARDUST",
"HIDDEN_ITEM_ROUTE_111_STARDUST",
"HIDDEN_ITEM_ROUTE_111_PROTEIN",
- "HIDDEN_ITEM_ROUTE_111_RARE_CANDY"
+ "HIDDEN_ITEM_ROUTE_111_RARE_CANDY",
+ "TRAINER_CELIA_REWARD",
+ "TRAINER_BRYAN_REWARD",
+ "TRAINER_BRANDEN_REWARD",
+ "TRAINER_DUSTY_1_REWARD",
+ "TRAINER_BECKY_REWARD",
+ "TRAINER_HEIDI_REWARD",
+ "TRAINER_BEAU_REWARD",
+ "TRAINER_DREW_REWARD"
],
"events": [],
"exits": [
@@ -476,21 +1006,49 @@
},
"REGION_ROUTE111/NORTH": {
"parent_map": "MAP_ROUTE111",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_SECRET_POWER"
+ "NPC_GIFT_RECEIVED_SECRET_POWER",
+ "NPC_GIFT_ROUTE_111_RECEIVED_BERRY",
+ "BERRY_TREE_19",
+ "BERRY_TREE_20",
+ "BERRY_TREE_80",
+ "BERRY_TREE_81",
+ "TRAINER_WILTON_1_REWARD",
+ "TRAINER_BROOKE_1_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE113/MAIN",
"REGION_ROUTE112/NORTH",
+ "REGION_ROUTE111/ABOVE_SLOPE",
"REGION_ROUTE111/DESERT"
],
"warps": [
"MAP_ROUTE111:2/MAP_ROUTE111_OLD_LADYS_REST_STOP:0"
]
},
+ "REGION_ROUTE111/ABOVE_SLOPE": {
+ "parent_map": "MAP_ROUTE111",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_DAISUKE_REWARD"
+ ],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE111/NORTH"
+ ],
+ "warps": []
+ },
"REGION_ROUTE111_OLD_LADYS_REST_STOP/MAIN": {
"parent_map": "MAP_ROUTE111_OLD_LADYS_REST_STOP",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -500,6 +1058,9 @@
},
"REGION_ROUTE111_WINSTRATE_FAMILYS_HOUSE/MAIN": {
"parent_map": "MAP_ROUTE111_WINSTRATE_FAMILYS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"NPC_GIFT_RECEIVED_MACHO_BRACE"
],
@@ -511,7 +1072,15 @@
},
"REGION_ROUTE112/SOUTH_EAST": {
"parent_map": "MAP_ROUTE112",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_LARRY_REWARD",
+ "TRAINER_CAROL_REWARD",
+ "TRAINER_TRENT_1_REWARD",
+ "TRAINER_BRICE_REWARD"
+ ],
"events": [],
"exits": [
"REGION_ROUTE112/CABLE_CAR_STATION_ENTRANCE",
@@ -523,6 +1092,9 @@
},
"REGION_ROUTE112/CABLE_CAR_STATION_ENTRANCE": {
"parent_map": "MAP_ROUTE112",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -534,6 +1106,9 @@
},
"REGION_ROUTE112/SOUTH_WEST": {
"parent_map": "MAP_ROUTE112",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ROUTE_112_NUGGET"
],
@@ -548,7 +1123,17 @@
},
"REGION_ROUTE112/NORTH": {
"parent_map": "MAP_ROUTE112",
- "locations": [],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "BERRY_TREE_21",
+ "BERRY_TREE_22",
+ "BERRY_TREE_23",
+ "BERRY_TREE_24",
+ "TRAINER_SHAYLA_REWARD",
+ "TRAINER_BRYANT_REWARD"
+ ],
"events": [],
"exits": [
"REGION_ROUTE111/NORTH"
@@ -559,6 +1144,9 @@
},
"REGION_ROUTE112_CABLE_CAR_STATION/MAIN": {
"parent_map": "MAP_ROUTE112_CABLE_CAR_STATION",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -570,6 +1158,9 @@
},
"REGION_MT_CHIMNEY_CABLE_CAR_STATION/MAIN": {
"parent_map": "MAP_MT_CHIMNEY_CABLE_CAR_STATION",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -581,8 +1172,20 @@
},
"REGION_MT_CHIMNEY/MAIN": {
"parent_map": "MAP_MT_CHIMNEY",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_METEORITE"
+ "NPC_GIFT_RECEIVED_METEORITE",
+ "TRAINER_SHIRLEY_REWARD",
+ "TRAINER_SHEILA_REWARD",
+ "TRAINER_SHELBY_1_REWARD",
+ "TRAINER_SAWYER_1_REWARD",
+ "TRAINER_MELISSA_REWARD",
+ "TRAINER_GRUNT_MT_CHIMNEY_1_REWARD",
+ "TRAINER_GRUNT_MT_CHIMNEY_2_REWARD",
+ "TRAINER_TABITHA_MT_CHIMNEY_REWARD",
+ "TRAINER_MAXIE_MT_CHIMNEY_REWARD"
],
"events": [
"EVENT_RECOVER_METEORITE"
@@ -595,8 +1198,12 @@
},
"REGION_JAGGED_PASS/TOP": {
"parent_map": "MAP_JAGGED_PASS",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "HIDDEN_ITEM_JAGGED_PASS_FULL_HEAL"
+ "HIDDEN_ITEM_JAGGED_PASS_FULL_HEAL",
+ "TRAINER_ERIC_REWARD"
],
"events": [],
"exits": [
@@ -608,9 +1215,15 @@
},
"REGION_JAGGED_PASS/MIDDLE": {
"parent_map": "MAP_JAGGED_PASS",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_JAGGED_PASS_BURN_HEAL",
- "HIDDEN_ITEM_JAGGED_PASS_GREAT_BALL"
+ "HIDDEN_ITEM_JAGGED_PASS_GREAT_BALL",
+ "TRAINER_DIANA_1_REWARD",
+ "TRAINER_AUTUMN_REWARD",
+ "TRAINER_JULIO_REWARD"
],
"events": [],
"exits": [
@@ -623,7 +1236,12 @@
},
"REGION_JAGGED_PASS/BOTTOM": {
"parent_map": "MAP_JAGGED_PASS",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_ETHAN_1_REWARD"
+ ],
"events": [],
"exits": [
"REGION_JAGGED_PASS/MIDDLE"
@@ -634,13 +1252,26 @@
},
"REGION_ROUTE113/MAIN": {
"parent_map": "MAP_ROUTE113",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"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"
+ "HIDDEN_ITEM_ROUTE_113_TM_DOUBLE_TEAM",
+ "HIDDEN_ITEM_ROUTE_113_NUGGET",
+ "TRAINER_WYATT_REWARD",
+ "TRAINER_LAWRENCE_REWARD",
+ "TRAINER_LUNG_REWARD",
+ "TRAINER_JAYLEN_REWARD",
+ "TRAINER_MADELINE_1_REWARD",
+ "TRAINER_LAO_1_REWARD",
+ "TRAINER_TORI_AND_TIA_REWARD",
+ "TRAINER_DILLON_REWARD",
+ "TRAINER_COBY_REWARD",
+ "TRAINER_SOPHIE_REWARD"
],
"events": [],
"exits": [
@@ -653,7 +1284,12 @@
},
"REGION_ROUTE113_GLASS_WORKSHOP/MAIN": {
"parent_map": "MAP_ROUTE113_GLASS_WORKSHOP",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_RECEIVED_SOOT_SACK"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -662,17 +1298,37 @@
},
"REGION_ROUTE114/MAIN": {
"parent_map": "MAP_ROUTE114",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_114_PROTEIN",
"ITEM_ROUTE_114_ENERGY_POWDER",
"HIDDEN_ITEM_ROUTE_114_REVIVE",
"HIDDEN_ITEM_ROUTE_114_CARBOS",
- "NPC_GIFT_RECEIVED_TM05"
+ "NPC_GIFT_RECEIVED_TM_ROAR",
+ "NPC_GIFT_ROUTE_114_RECEIVED_BERRY",
+ "BERRY_TREE_68",
+ "BERRY_TREE_77",
+ "BERRY_TREE_78",
+ "TRAINER_NOLAN_REWARD",
+ "TRAINER_KAI_REWARD",
+ "TRAINER_CHARLOTTE_REWARD",
+ "TRAINER_CLAUDE_REWARD",
+ "TRAINER_NANCY_REWARD",
+ "TRAINER_SHANE_REWARD",
+ "TRAINER_STEVE_1_REWARD",
+ "TRAINER_BERNIE_1_REWARD",
+ "TRAINER_LUCAS_1_REWARD",
+ "TRAINER_ANGELINA_REWARD",
+ "TRAINER_LENNY_REWARD",
+ "TRAINER_TYRA_AND_IVY_REWARD"
],
"events": [],
"exits": [
- "REGION_ROUTE114/ABOVE_WATERFALL",
- "REGION_FALLARBOR_TOWN/MAIN"
+ "REGION_ROUTE114/WATER",
+ "REGION_FALLARBOR_TOWN/MAIN",
+ "REGION_TERRA_CAVE_ENTRANCE/MAIN"
],
"warps": [
"MAP_ROUTE114:0/MAP_METEOR_FALLS_1F_1R:0",
@@ -680,21 +1336,41 @@
"MAP_ROUTE114:2/MAP_ROUTE114_LANETTES_HOUSE:0"
]
},
+ "REGION_ROUTE114/WATER": {
+ "parent_map": "MAP_ROUTE114",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE114/MAIN",
+ "REGION_ROUTE114/ABOVE_WATERFALL"
+ ],
+ "warps": []
+ },
"REGION_ROUTE114/ABOVE_WATERFALL": {
"parent_map": "MAP_ROUTE114",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_114_RARE_CANDY"
],
"events": [],
"exits": [
- "REGION_ROUTE114/MAIN"
+ "REGION_ROUTE114/WATER",
+ "REGION_TERRA_CAVE_ENTRANCE/MAIN"
],
"warps": []
},
"REGION_ROUTE114_FOSSIL_MANIACS_HOUSE/MAIN": {
"parent_map": "MAP_ROUTE114_FOSSIL_MANIACS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "NPC_GIFT_RECEIVED_TM28"
+ "NPC_GIFT_RECEIVED_TM_DIG"
],
"events": [],
"exits": [],
@@ -705,6 +1381,9 @@
},
"REGION_ROUTE114_FOSSIL_MANIACS_TUNNEL/MAIN": {
"parent_map": "MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -715,6 +1394,9 @@
},
"REGION_DESERT_UNDERPASS/MAIN": {
"parent_map": "MAP_DESERT_UNDERPASS",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -724,6 +1406,9 @@
},
"REGION_ROUTE114_LANETTES_HOUSE/MAIN": {
"parent_map": "MAP_ROUTE114_LANETTES_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -733,20 +1418,28 @@
},
"REGION_ROUTE115/SOUTH_BELOW_LEDGE": {
"parent_map": "MAP_ROUTE115",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_115_SUPER_POTION"
],
"events": [],
"exits": [
"REGION_ROUTE115/SEA",
+ "REGION_ROUTE115/SOUTH_ABOVE_LEDGE",
"REGION_RUSTBORO_CITY/MAIN"
],
"warps": []
},
"REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE": {
"parent_map": "MAP_ROUTE115",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
- "HIDDEN_ITEM_ROUTE_115_HEART_SCALE"
+ "HIDDEN_ITEM_ROUTE_115_HEART_SCALE",
+ "TRAINER_CYNDY_1_REWARD"
],
"events": [],
"exits": [
@@ -757,8 +1450,14 @@
},
"REGION_ROUTE115/SOUTH_ABOVE_LEDGE": {
"parent_map": "MAP_ROUTE115",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_ROUTE_115_PP_UP"
+ "ITEM_ROUTE_115_PP_UP",
+ "TRAINER_NOB_1_REWARD",
+ "TRAINER_MARLENE_REWARD",
+ "TRAINER_HECTOR_REWARD"
],
"events": [],
"exits": [
@@ -772,8 +1471,13 @@
},
"REGION_ROUTE115/SOUTH_BEHIND_ROCK": {
"parent_map": "MAP_ROUTE115",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "ITEM_ROUTE_115_GREAT_BALL"
+ "ITEM_ROUTE_115_GREAT_BALL",
+ "BERRY_TREE_55",
+ "BERRY_TREE_56"
],
"events": [],
"exits": [
@@ -783,30 +1487,50 @@
},
"REGION_ROUTE115/NORTH_BELOW_SLOPE": {
"parent_map": "MAP_ROUTE115",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_115_HEAL_POWDER",
- "ITEM_ROUTE_115_TM01"
+ "ITEM_ROUTE_115_TM_FOCUS_PUNCH",
+ "BERRY_TREE_69",
+ "BERRY_TREE_70",
+ "BERRY_TREE_71",
+ "TRAINER_TIMOTHY_1_REWARD",
+ "TRAINER_KYRA_REWARD",
+ "TRAINER_KOICHI_REWARD",
+ "TRAINER_JAIDEN_REWARD",
+ "TRAINER_ALIX_REWARD",
+ "TRAINER_HELENE_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE115/NORTH_ABOVE_SLOPE",
- "REGION_ROUTE115/SEA"
+ "REGION_ROUTE115/SEA",
+ "REGION_TERRA_CAVE_ENTRANCE/MAIN"
],
"warps": []
},
"REGION_ROUTE115/NORTH_ABOVE_SLOPE": {
"parent_map": "MAP_ROUTE115",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ROUTE_115_IRON"
],
"events": [],
"exits": [
- "REGION_ROUTE115/NORTH_BELOW_SLOPE"
+ "REGION_ROUTE115/NORTH_BELOW_SLOPE",
+ "REGION_TERRA_CAVE_ENTRANCE/MAIN"
],
"warps": []
},
"REGION_ROUTE115/SEA": {
"parent_map": "MAP_ROUTE115",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -818,15 +1542,25 @@
},
"REGION_ROUTE116/WEST": {
"parent_map": "MAP_ROUTE116",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ROUTE_116_REPEL",
"ITEM_ROUTE_116_X_SPECIAL",
- "NPC_GIFT_RECEIVED_REPEAT_BALL"
+ "NPC_GIFT_RECEIVED_REPEAT_BALL",
+ "TRAINER_JOSE_REWARD",
+ "TRAINER_JOEY_REWARD",
+ "TRAINER_KAREN_1_REWARD",
+ "TRAINER_CLARK_REWARD",
+ "TRAINER_JOHNSON_REWARD",
+ "TRAINER_DEVAN_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE116/WEST_ABOVE_LEDGE",
- "REGION_RUSTBORO_CITY/MAIN"
+ "REGION_RUSTBORO_CITY/MAIN",
+ "REGION_TERRA_CAVE_ENTRANCE/MAIN"
],
"warps": [
"MAP_ROUTE116:0/MAP_RUSTURF_TUNNEL:0",
@@ -835,10 +1569,21 @@
},
"REGION_ROUTE116/WEST_ABOVE_LEDGE": {
"parent_map": "MAP_ROUTE116",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ROUTE_116_ETHER",
"ITEM_ROUTE_116_POTION",
- "HIDDEN_ITEM_ROUTE_116_SUPER_POTION"
+ "HIDDEN_ITEM_ROUTE_116_SUPER_POTION",
+ "BERRY_TREE_25",
+ "BERRY_TREE_26",
+ "BERRY_TREE_66",
+ "BERRY_TREE_67",
+ "TRAINER_JANICE_REWARD",
+ "TRAINER_JERRY_1_REWARD",
+ "TRAINER_SARAH_REWARD",
+ "TRAINER_DAWSON_REWARD"
],
"events": [],
"exits": [
@@ -848,18 +1593,26 @@
},
"REGION_ROUTE116/EAST": {
"parent_map": "MAP_ROUTE116",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ROUTE_116_HP_UP",
"HIDDEN_ITEM_ROUTE_116_BLACK_GLASSES"
],
"events": [],
- "exits": [],
+ "exits": [
+ "REGION_TERRA_CAVE_ENTRANCE/MAIN"
+ ],
"warps": [
"MAP_ROUTE116:2/MAP_RUSTURF_TUNNEL:2"
]
},
"REGION_ROUTE116_TUNNELERS_REST_HOUSE/MAIN": {
"parent_map": "MAP_ROUTE116_TUNNELERS_REST_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -869,22 +1622,53 @@
},
"REGION_ROUTE117/MAIN": {
"parent_map": "MAP_ROUTE117",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_117_GREAT_BALL",
"ITEM_ROUTE_117_REVIVE",
- "HIDDEN_ITEM_ROUTE_117_REPEL"
+ "HIDDEN_ITEM_ROUTE_117_REPEL",
+ "BERRY_TREE_27",
+ "BERRY_TREE_28",
+ "BERRY_TREE_29",
+ "TRAINER_LYDIA_1_REWARD",
+ "TRAINER_DEREK_REWARD",
+ "TRAINER_BRANDI_REWARD",
+ "TRAINER_MELINA_REWARD",
+ "TRAINER_AISHA_REWARD",
+ "TRAINER_MARIA_1_REWARD",
+ "TRAINER_ISAAC_1_REWARD",
+ "TRAINER_DYLAN_1_REWARD",
+ "TRAINER_ANNA_AND_MEG_1_REWARD"
+ ],
+ "events": [
+ "EVENT_ENCOUNTER_LATIOS"
],
- "events": [],
"exits": [
"REGION_VERDANTURF_TOWN/MAIN",
- "REGION_MAUVILLE_CITY/MAIN"
+ "REGION_MAUVILLE_CITY/MAIN",
+ "REGION_ROUTE117/PONDS"
],
"warps": [
"MAP_ROUTE117:0/MAP_ROUTE117_POKEMON_DAY_CARE:0"
]
},
+ "REGION_ROUTE117/PONDS": {
+ "parent_map": "MAP_ROUTE117",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_ROUTE117_POKEMON_DAY_CARE/MAIN": {
"parent_map": "MAP_ROUTE117_POKEMON_DAY_CARE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -894,52 +1678,99 @@
},
"REGION_ROUTE118/WEST": {
"parent_map": "MAP_ROUTE118",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
- "HIDDEN_ITEM_ROUTE_118_HEART_SCALE"
+ "HIDDEN_ITEM_ROUTE_118_HEART_SCALE",
+ "TRAINER_DEANDRE_REWARD",
+ "TRAINER_ROSE_1_REWARD",
+ "TRAINER_WADE_REWARD",
+ "TRAINER_DALTON_1_REWARD"
],
"events": [],
"exits": [
"REGION_MAUVILLE_CITY/MAIN",
- "REGION_ROUTE118/WATER"
+ "REGION_ROUTE118/WEST_WATER",
+ "REGION_ROUTE118/EAST",
+ "REGION_TERRA_CAVE_ENTRANCE/MAIN"
],
"warps": []
},
- "REGION_ROUTE118/WATER": {
+ "REGION_ROUTE118/WEST_WATER": {
"parent_map": "MAP_ROUTE118",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
"REGION_ROUTE118/WEST",
+ "REGION_ROUTE118/EAST_WATER"
+ ],
+ "warps": []
+ },
+ "REGION_ROUTE118/EAST_WATER": {
+ "parent_map": "MAP_ROUTE118",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE118/WEST_WATER",
"REGION_ROUTE118/EAST"
],
"warps": []
},
"REGION_ROUTE118/EAST": {
"parent_map": "MAP_ROUTE118",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_118_HYPER_POTION",
"HIDDEN_ITEM_ROUTE_118_IRON",
- "NPC_GIFT_RECEIVED_GOOD_ROD"
+ "NPC_GIFT_RECEIVED_GOOD_ROD",
+ "BERRY_TREE_31",
+ "BERRY_TREE_32",
+ "BERRY_TREE_33",
+ "TRAINER_BARNY_REWARD",
+ "TRAINER_CHESTER_REWARD",
+ "TRAINER_PERRY_REWARD"
],
"events": [],
"exits": [
- "REGION_ROUTE118/WATER",
+ "REGION_ROUTE118/EAST_WATER",
+ "REGION_ROUTE118/WEST",
"REGION_ROUTE119/LOWER",
- "REGION_ROUTE123/WEST"
+ "REGION_ROUTE123/WEST",
+ "REGION_TERRA_CAVE_ENTRANCE/MAIN"
],
"warps": []
},
"REGION_ROUTE119/LOWER": {
"parent_map": "MAP_ROUTE119",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_119_SUPER_REPEL",
"ITEM_ROUTE_119_HYPER_POTION_1",
- "HIDDEN_ITEM_ROUTE_119_FULL_HEAL"
+ "HIDDEN_ITEM_ROUTE_119_FULL_HEAL",
+ "BERRY_TREE_85",
+ "BERRY_TREE_86",
+ "TRAINER_DONALD_REWARD",
+ "TRAINER_KENT_REWARD",
+ "TRAINER_TAYLOR_REWARD",
+ "TRAINER_GREG_REWARD",
+ "TRAINER_DOUG_REWARD",
+ "TRAINER_BRENT_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE119/MIDDLE",
- "REGION_ROUTE119/LOWER_ACROSS_WATER",
+ "REGION_ROUTE119/LOWER_WATER",
"REGION_ROUTE119/LOWER_ACROSS_RAILS",
"REGION_ROUTE118/EAST"
],
@@ -947,19 +1778,37 @@
"MAP_ROUTE119:1/MAP_ROUTE119_HOUSE:0"
]
},
- "REGION_ROUTE119/LOWER_ACROSS_WATER": {
+ "REGION_ROUTE119/LOWER_WATER": {
"parent_map": "MAP_ROUTE119",
- "locations": [
- "ITEM_ROUTE_119_ZINC"
- ],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
"events": [],
"exits": [
- "REGION_ROUTE119/LOWER"
+ "REGION_ROUTE119/LOWER",
+ "REGION_ROUTE119/LOWER_ACROSS_WATER"
],
"warps": []
},
+ "REGION_ROUTE119/LOWER_ACROSS_WATER": {
+ "parent_map": "MAP_ROUTE119",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "ITEM_ROUTE_119_ZINC",
+ "TRAINER_CHRIS_REWARD"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_ROUTE119/LOWER_ACROSS_RAILS": {
"parent_map": "MAP_ROUTE119",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_ROUTE_119_CALCIUM"
],
@@ -971,9 +1820,19 @@
},
"REGION_ROUTE119/MIDDLE": {
"parent_map": "MAP_ROUTE119",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ROUTE_119_ELIXIR_1",
- "ITEM_ROUTE_119_HYPER_POTION_2"
+ "ITEM_ROUTE_119_HYPER_POTION_2",
+ "TRAINER_CATHERINE_1_REWARD",
+ "TRAINER_JACKSON_1_REWARD",
+ "TRAINER_RACHEL_REWARD",
+ "TRAINER_PHIL_REWARD",
+ "TRAINER_HUGH_REWARD",
+ "TRAINER_DAYTON_REWARD",
+ "TRAINER_TAKASHI_REWARD"
],
"events": [],
"exits": [
@@ -984,8 +1843,35 @@
"MAP_ROUTE119:0/MAP_ROUTE119_WEATHER_INSTITUTE_1F:0"
]
},
+ "REGION_ROUTE119/UPPER": {
+ "parent_map": "MAP_ROUTE119",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "ITEM_ROUTE_119_ELIXIR_2",
+ "NPC_GIFT_RECEIVED_HM_FLY",
+ "BERRY_TREE_34",
+ "BERRY_TREE_35",
+ "BERRY_TREE_36",
+ "TRAINER_FABIAN_REWARD",
+ "TRAINER_YASU_REWARD",
+ "TRAINER_HIDEO_REWARD",
+ "TRAINER_BRENDAN_ROUTE_119_MUDKIP_REWARD"
+ ],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE119/MIDDLE",
+ "REGION_ROUTE119/MIDDLE_RIVER",
+ "REGION_FORTREE_CITY/MAIN"
+ ],
+ "warps": []
+ },
"REGION_ROUTE119/MIDDLE_RIVER": {
"parent_map": "MAP_ROUTE119",
+ "has_grass": true,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_119_LEAF_STONE",
"HIDDEN_ITEM_ROUTE_119_ULTRA_BALL",
@@ -998,23 +1884,15 @@
],
"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": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "BERRY_TREE_83",
+ "BERRY_TREE_84"
+ ],
"events": [],
"exits": [
"REGION_ROUTE119/MIDDLE_RIVER",
@@ -1024,6 +1902,9 @@
},
"REGION_ROUTE119/ABOVE_WATERFALL_ACROSS_RAILS": {
"parent_map": "MAP_ROUTE119",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ROUTE_119_RARE_CANDY",
"ITEM_ROUTE_119_NUGGET"
@@ -1036,7 +1917,13 @@
},
"REGION_ROUTE119_WEATHER_INSTITUTE_1F/MAIN": {
"parent_map": "MAP_ROUTE119_WEATHER_INSTITUTE_1F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_WEATHER_INST_1_REWARD",
+ "TRAINER_GRUNT_WEATHER_INST_4_REWARD"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1046,7 +1933,15 @@
},
"REGION_ROUTE119_WEATHER_INSTITUTE_2F/MAIN": {
"parent_map": "MAP_ROUTE119_WEATHER_INSTITUTE_2F",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "TRAINER_GRUNT_WEATHER_INST_2_REWARD",
+ "TRAINER_GRUNT_WEATHER_INST_3_REWARD",
+ "TRAINER_GRUNT_WEATHER_INST_5_REWARD",
+ "TRAINER_SHELLY_WEATHER_INSTITUTE_REWARD"
+ ],
"events": [
"EVENT_DEFEAT_SHELLY"
],
@@ -1057,6 +1952,9 @@
},
"REGION_ROUTE119_HOUSE/MAIN": {
"parent_map": "MAP_ROUTE119_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1066,10 +1964,15 @@
},
"REGION_ROUTE120/NORTH": {
"parent_map": "MAP_ROUTE120",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_ROUTE_120_RARE_CANDY_1",
"HIDDEN_ITEM_ROUTE_120_REVIVE",
- "NPC_GIFT_RECEIVED_DEVON_SCOPE"
+ "NPC_GIFT_RECEIVED_DEVON_SCOPE",
+ "TRAINER_CLARISSA_REWARD",
+ "TRAINER_ROBERT_1_REWARD"
],
"events": [],
"exits": [
@@ -1081,6 +1984,9 @@
},
"REGION_ROUTE120/NORTH_POND_SHORE": {
"parent_map": "MAP_ROUTE120",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_120_NEST_BALL"
],
@@ -1093,6 +1999,9 @@
},
"REGION_ROUTE120/NORTH_POND": {
"parent_map": "MAP_ROUTE120",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1104,15 +2013,38 @@
},
"REGION_ROUTE120/SOUTH": {
"parent_map": "MAP_ROUTE120",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_120_NUGGET",
"ITEM_ROUTE_120_REVIVE",
"ITEM_ROUTE_120_HYPER_POTION",
- "HIDDEN_ITEM_ROUTE_120_ZINC"
+ "HIDDEN_ITEM_ROUTE_120_ZINC",
+ "NPC_GIFT_ROUTE_120_RECEIVED_BERRY",
+ "BERRY_TREE_40",
+ "BERRY_TREE_41",
+ "BERRY_TREE_42",
+ "BERRY_TREE_43",
+ "BERRY_TREE_44",
+ "BERRY_TREE_45",
+ "BERRY_TREE_46",
+ "TRAINER_COLIN_REWARD",
+ "TRAINER_LEONEL_REWARD",
+ "TRAINER_ANGELICA_REWARD",
+ "TRAINER_CALLIE_REWARD",
+ "TRAINER_RILEY_REWARD",
+ "TRAINER_JENNIFER_REWARD",
+ "TRAINER_JENNA_REWARD",
+ "TRAINER_LORENZO_REWARD",
+ "TRAINER_JEFFREY_1_REWARD",
+ "TRAINER_KEIGO_REWARD",
+ "TRAINER_CHIP_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE120/NORTH",
+ "REGION_ROUTE120/SOUTH_ALCOVE",
"REGION_ROUTE120/SOUTH_PONDS",
"REGION_ROUTE121/WEST"
],
@@ -1120,8 +2052,27 @@
"MAP_ROUTE120:0/MAP_ANCIENT_TOMB:0"
]
},
+ "REGION_ROUTE120/SOUTH_ALCOVE": {
+ "parent_map": "MAP_ROUTE120",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "BERRY_TREE_37",
+ "BERRY_TREE_38",
+ "BERRY_TREE_39"
+ ],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE120/SOUTH"
+ ],
+ "warps": []
+ },
"REGION_ROUTE120/SOUTH_PONDS": {
"parent_map": "MAP_ROUTE120",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"HIDDEN_ITEM_ROUTE_120_RARE_CANDY_2",
"ITEM_ROUTE_120_FULL_HEAL"
@@ -1132,8 +2083,18 @@
},
"REGION_ROUTE121/WEST": {
"parent_map": "MAP_ROUTE121",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
- "HIDDEN_ITEM_ROUTE_121_HP_UP"
+ "HIDDEN_ITEM_ROUTE_121_HP_UP",
+ "BERRY_TREE_47",
+ "BERRY_TREE_48",
+ "BERRY_TREE_49",
+ "BERRY_TREE_50",
+ "TRAINER_CALE_REWARD",
+ "TRAINER_TAMMY_REWARD",
+ "TRAINER_JESSICA_1_REWARD"
],
"events": [],
"exits": [
@@ -1144,26 +2105,56 @@
},
"REGION_ROUTE121/EAST": {
"parent_map": "MAP_ROUTE121",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"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"
+ "HIDDEN_ITEM_ROUTE_121_MAX_REVIVE",
+ "BERRY_TREE_51",
+ "BERRY_TREE_52",
+ "BERRY_TREE_53",
+ "BERRY_TREE_54",
+ "TRAINER_KATE_AND_JOY_REWARD",
+ "TRAINER_WALTER_1_REWARD",
+ "TRAINER_PAT_REWARD",
+ "TRAINER_MYLES_REWARD",
+ "TRAINER_VANESSA_REWARD",
+ "TRAINER_MARCEL_REWARD",
+ "TRAINER_CRISTIN_1_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE121/WEST",
- "REGION_ROUTE122/SEA",
+ "REGION_ROUTE121/WATER",
"REGION_LILYCOVE_CITY/MAIN"
],
"warps": [
"MAP_ROUTE121:0/MAP_ROUTE121_SAFARI_ZONE_ENTRANCE:2"
]
},
+ "REGION_ROUTE121/WATER": {
+ "parent_map": "MAP_ROUTE121",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE121/EAST",
+ "REGION_ROUTE122/SEA"
+ ],
+ "warps": []
+ },
"REGION_ROUTE121_SAFARI_ZONE_ENTRANCE/MAIN": {
"parent_map": "MAP_ROUTE121_SAFARI_ZONE_ENTRANCE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1174,6 +2165,9 @@
},
"REGION_SAFARI_ZONE_NORTH/MAIN": {
"parent_map": "MAP_SAFARI_ZONE_NORTH",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_SAFARI_ZONE_NORTH_CALCIUM"
],
@@ -1185,17 +2179,34 @@
},
"REGION_SAFARI_ZONE_NORTHWEST/MAIN": {
"parent_map": "MAP_SAFARI_ZONE_NORTHWEST",
- "locations": [
- "ITEM_SAFARI_ZONE_NORTH_WEST_TM22"
- ],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [],
"events": [],
"exits": [
+ "REGION_SAFARI_ZONE_NORTHWEST/POND",
"REGION_SAFARI_ZONE_SOUTHWEST/MAIN"
],
"warps": []
},
+ "REGION_SAFARI_ZONE_NORTHWEST/POND": {
+ "parent_map": "MAP_SAFARI_ZONE_NORTHWEST",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "ITEM_SAFARI_ZONE_NORTH_WEST_TM_SOLAR_BEAM"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_SAFARI_ZONE_NORTHEAST/MAIN": {
"parent_map": "MAP_SAFARI_ZONE_NORTHEAST",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_SAFARI_ZONE_NORTH_EAST_NUGGET",
"HIDDEN_ITEM_SAFARI_ZONE_NORTH_EAST_RARE_CANDY",
@@ -1209,6 +2220,9 @@
},
"REGION_SAFARI_ZONE_SOUTH/MAIN": {
"parent_map": "MAP_SAFARI_ZONE_SOUTH",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1222,11 +2236,13 @@
},
"REGION_SAFARI_ZONE_SOUTHWEST/MAIN": {
"parent_map": "MAP_SAFARI_ZONE_SOUTHWEST",
- "locations": [
- "ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE"
- ],
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [],
"events": [],
"exits": [
+ "REGION_SAFARI_ZONE_SOUTHWEST/POND",
"REGION_SAFARI_ZONE_SOUTH/MAIN",
"REGION_SAFARI_ZONE_NORTHWEST/MAIN"
],
@@ -1234,22 +2250,65 @@
"MAP_SAFARI_ZONE_SOUTHWEST:0/MAP_SAFARI_ZONE_REST_HOUSE:0"
]
},
+ "REGION_SAFARI_ZONE_SOUTHWEST/POND": {
+ "parent_map": "MAP_SAFARI_ZONE_SOUTHWEST",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "ITEM_SAFARI_ZONE_SOUTH_WEST_MAX_REVIVE"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_SAFARI_ZONE_SOUTHEAST/MAIN": {
"parent_map": "MAP_SAFARI_ZONE_SOUTHEAST",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"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_SOUTHEAST/WATER",
"REGION_SAFARI_ZONE_SOUTH/MAIN",
"REGION_SAFARI_ZONE_NORTHEAST/MAIN"
],
"warps": []
},
+ "REGION_SAFARI_ZONE_SOUTHEAST/WATER": {
+ "parent_map": "MAP_SAFARI_ZONE_SOUTHEAST",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_SAFARI_ZONE_SOUTHEAST/MAIN",
+ "REGION_SAFARI_ZONE_SOUTHEAST/ISLAND"
+ ],
+ "warps": []
+ },
+ "REGION_SAFARI_ZONE_SOUTHEAST/ISLAND": {
+ "parent_map": "MAP_SAFARI_ZONE_SOUTHEAST",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "ITEM_SAFARI_ZONE_SOUTH_EAST_BIG_PEARL"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_SAFARI_ZONE_REST_HOUSE/MAIN": {
"parent_map": "MAP_SAFARI_ZONE_REST_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1259,17 +2318,23 @@
},
"REGION_ROUTE122/SEA": {
"parent_map": "MAP_ROUTE122",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
"REGION_ROUTE122/MT_PYRE_ENTRANCE",
- "REGION_ROUTE121/EAST",
+ "REGION_ROUTE121/WATER",
"REGION_ROUTE123/EAST"
],
"warps": []
},
"REGION_ROUTE122/MT_PYRE_ENTRANCE": {
"parent_map": "MAP_ROUTE122",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1281,9 +2346,28 @@
},
"REGION_ROUTE123/WEST": {
"parent_map": "MAP_ROUTE123",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"ITEM_ROUTE_123_ULTRA_BALL",
- "HIDDEN_ITEM_ROUTE_123_REVIVE"
+ "HIDDEN_ITEM_ROUTE_123_REVIVE",
+ "BERRY_TREE_14",
+ "BERRY_TREE_15",
+ "BERRY_TREE_30",
+ "BERRY_TREE_58",
+ "BERRY_TREE_59",
+ "BERRY_TREE_60",
+ "BERRY_TREE_61",
+ "BERRY_TREE_65",
+ "BERRY_TREE_72",
+ "BERRY_TREE_73",
+ "BERRY_TREE_74",
+ "BERRY_TREE_79",
+ "TRAINER_JAZMYN_REWARD",
+ "TRAINER_DAVIS_REWARD",
+ "TRAINER_VIOLET_REWARD",
+ "TRAINER_MIU_AND_YUKI_REWARD"
],
"events": [],
"exits": [
@@ -1295,6 +2379,9 @@
},
"REGION_ROUTE123/EAST": {
"parent_map": "MAP_ROUTE123",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_123_CALCIUM",
"ITEM_ROUTE_123_ELIXIR",
@@ -1302,21 +2389,52 @@
"ITEM_ROUTE_123_REVIVAL_HERB",
"HIDDEN_ITEM_ROUTE_123_SUPER_REPEL",
"HIDDEN_ITEM_ROUTE_123_HYPER_POTION",
- "NPC_GIFT_RECEIVED_TM19"
+ "NPC_GIFT_RECEIVED_TM_GIGA_DRAIN",
+ "BERRY_TREE_57",
+ "BERRY_TREE_62",
+ "BERRY_TREE_63",
+ "BERRY_TREE_64",
+ "BERRY_TREE_87",
+ "BERRY_TREE_88",
+ "TRAINER_JACKI_1_REWARD",
+ "TRAINER_FREDRICK_REWARD",
+ "TRAINER_BRAXTON_REWARD",
+ "TRAINER_FERNANDO_1_REWARD",
+ "TRAINER_ALBERTO_REWARD",
+ "TRAINER_WENDY_REWARD",
+ "TRAINER_KINDRA_REWARD",
+ "TRAINER_ED_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE123/WEST",
"REGION_ROUTE123/EAST_BEHIND_TREE",
+ "REGION_ROUTE123/POND",
"REGION_ROUTE122/SEA"
],
"warps": []
},
+ "REGION_ROUTE123/POND": {
+ "parent_map": "MAP_ROUTE123",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_ROUTE123/EAST_BEHIND_TREE": {
"parent_map": "MAP_ROUTE123",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_ROUTE_123_PP_UP",
- "HIDDEN_ITEM_ROUTE_123_RARE_CANDY"
+ "HIDDEN_ITEM_ROUTE_123_RARE_CANDY",
+ "TRAINER_CAMERON_1_REWARD",
+ "TRAINER_JONAS_REWARD",
+ "TRAINER_KAYLEY_REWARD"
],
"events": [],
"exits": [
@@ -1326,7 +2444,14 @@
},
"REGION_ROUTE123_BERRY_MASTERS_HOUSE/MAIN": {
"parent_map": "MAP_ROUTE123_BERRY_MASTERS_HOUSE",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [
+ "NPC_GIFT_BERRY_MASTER_RECEIVED_BERRY_1",
+ "NPC_GIFT_BERRY_MASTER_RECEIVED_BERRY_2",
+ "NPC_GIFT_BERRY_MASTERS_WIFE"
+ ],
"events": [],
"exits": [],
"warps": [
@@ -1335,7 +2460,19 @@
},
"REGION_ROUTE124/MAIN": {
"parent_map": "MAP_ROUTE124",
- "locations": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_DECLAN_REWARD",
+ "TRAINER_GRACE_REWARD",
+ "TRAINER_LILA_AND_ROY_1_REWARD",
+ "TRAINER_SPENCER_REWARD",
+ "TRAINER_JENNY_1_REWARD",
+ "TRAINER_CHAD_REWARD",
+ "TRAINER_ROLAND_REWARD",
+ "TRAINER_ISABELLA_REWARD"
+ ],
"events": [],
"exits": [
"REGION_LILYCOVE_CITY/MAIN",
@@ -1355,6 +2492,9 @@
},
"REGION_ROUTE124/NORTH_ENCLOSED_AREA_1": {
"parent_map": "MAP_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_124_RED_SHARD"
],
@@ -1366,6 +2506,9 @@
},
"REGION_ROUTE124/NORTH_ENCLOSED_AREA_2": {
"parent_map": "MAP_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1375,6 +2518,9 @@
},
"REGION_ROUTE124/NORTH_ENCLOSED_AREA_3": {
"parent_map": "MAP_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_124_YELLOW_SHARD"
],
@@ -1386,6 +2532,9 @@
},
"REGION_ROUTE124/SOUTH_ENCLOSED_AREA_1": {
"parent_map": "MAP_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_124_BLUE_SHARD"
],
@@ -1397,6 +2546,9 @@
},
"REGION_ROUTE124/SOUTH_ENCLOSED_AREA_2": {
"parent_map": "MAP_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1406,6 +2558,9 @@
},
"REGION_ROUTE124/SOUTH_ENCLOSED_AREA_3": {
"parent_map": "MAP_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1416,6 +2571,9 @@
},
"REGION_UNDERWATER_ROUTE124/BIG_AREA": {
"parent_map": "MAP_UNDERWATER_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_124_GREEN_SHARD"
],
@@ -1427,6 +2585,9 @@
},
"REGION_UNDERWATER_ROUTE124/SMALL_AREA_1": {
"parent_map": "MAP_UNDERWATER_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_124_PEARL"
],
@@ -1438,6 +2599,9 @@
},
"REGION_UNDERWATER_ROUTE124/SMALL_AREA_2": {
"parent_map": "MAP_UNDERWATER_ROUTE124",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_124_BIG_PEARL"
],
@@ -1449,6 +2613,9 @@
},
"REGION_UNDERWATER_ROUTE124/SMALL_AREA_3": {
"parent_map": "MAP_UNDERWATER_ROUTE124",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_1"
],
@@ -1460,6 +2627,9 @@
},
"REGION_UNDERWATER_ROUTE124/TUNNEL_1": {
"parent_map": "MAP_UNDERWATER_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_124_CALCIUM",
"HIDDEN_ITEM_UNDERWATER_124_HEART_SCALE_2"
@@ -1474,6 +2644,9 @@
},
"REGION_UNDERWATER_ROUTE124/TUNNEL_2": {
"parent_map": "MAP_UNDERWATER_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1484,6 +2657,9 @@
},
"REGION_UNDERWATER_ROUTE124/TUNNEL_3": {
"parent_map": "MAP_UNDERWATER_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_124_CARBOS"
],
@@ -1497,6 +2673,9 @@
},
"REGION_UNDERWATER_ROUTE124/TUNNEL_4": {
"parent_map": "MAP_UNDERWATER_ROUTE124",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1507,6 +2686,9 @@
},
"REGION_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE/MAIN": {
"parent_map": "MAP_ROUTE124_DIVING_TREASURE_HUNTERS_HOUSE",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -1516,20 +2698,36 @@
},
"REGION_ROUTE125/SEA": {
"parent_map": "MAP_ROUTE125",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
- "ITEM_ROUTE_125_BIG_PEARL"
+ "ITEM_ROUTE_125_BIG_PEARL",
+ "TRAINER_NOLEN_REWARD",
+ "TRAINER_ERNEST_1_REWARD",
+ "TRAINER_SHARON_REWARD",
+ "TRAINER_TANYA_REWARD",
+ "TRAINER_PRESLEY_REWARD",
+ "TRAINER_AURON_REWARD",
+ "TRAINER_STAN_REWARD"
],
"events": [],
"exits": [
"REGION_ROUTE125/SHOAL_CAVE_ENTRANCE",
"REGION_MOSSDEEP_CITY/MAIN",
- "REGION_UNDERWATER_ROUTE125/MAIN"
+ "REGION_UNDERWATER_ROUTE125/MARINE_CAVE_ENTRANCE_1",
+ "REGION_UNDERWATER_ROUTE125/MARINE_CAVE_ENTRANCE_2"
],
"warps": []
},
"REGION_ROUTE125/SHOAL_CAVE_ENTRANCE": {
"parent_map": "MAP_ROUTE125",
- "locations": [],
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_KIM_AND_IRIS_REWARD"
+ ],
"events": [],
"exits": [
"REGION_ROUTE125/SEA"
@@ -1538,18 +2736,46 @@
"MAP_ROUTE125:0/MAP_SHOAL_CAVE_LOW_TIDE_ENTRANCE_ROOM:0"
]
},
- "REGION_UNDERWATER_ROUTE125/MAIN": {
+ "REGION_UNDERWATER_ROUTE125/MARINE_CAVE_ENTRANCE_1": {
"parent_map": "MAP_UNDERWATER_ROUTE125",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
- "REGION_ROUTE125/SEA"
+ "REGION_ROUTE125/SEA",
+ "REGION_UNDERWATER_MARINE_CAVE/MAIN"
+ ],
+ "warps": []
+ },
+ "REGION_UNDERWATER_ROUTE125/MARINE_CAVE_ENTRANCE_2": {
+ "parent_map": "MAP_UNDERWATER_ROUTE125",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE125/SEA",
+ "REGION_UNDERWATER_MARINE_CAVE/MAIN"
],
"warps": []
},
"REGION_ROUTE126/MAIN": {
"parent_map": "MAP_ROUTE126",
- "locations": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_NIKKI_REWARD",
+ "TRAINER_BARRY_REWARD",
+ "TRAINER_SIENNA_REWARD",
+ "TRAINER_PABLO_1_REWARD",
+ "TRAINER_DEAN_REWARD",
+ "TRAINER_LEONARDO_REWARD",
+ "TRAINER_ISOBEL_REWARD"
+ ],
"events": [],
"exits": [
"REGION_ROUTE127/MAIN",
@@ -1560,6 +2786,9 @@
},
"REGION_ROUTE126/NEAR_ROUTE_124": {
"parent_map": "MAP_ROUTE126",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1570,6 +2799,9 @@
},
"REGION_ROUTE126/NORTH_WEST_CORNER": {
"parent_map": "MAP_ROUTE126",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_126_GREEN_SHARD"
],
@@ -1581,7 +2813,12 @@
},
"REGION_ROUTE126/WEST": {
"parent_map": "MAP_ROUTE126",
- "locations": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_BRENDA_REWARD"
+ ],
"events": [],
"exits": [
"REGION_UNDERWATER_ROUTE126/SMALL_AREA_1",
@@ -1591,6 +2828,9 @@
},
"REGION_UNDERWATER_ROUTE126/MAIN": {
"parent_map": "MAP_UNDERWATER_ROUTE126",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_126_HEART_SCALE",
"HIDDEN_ITEM_UNDERWATER_126_ULTRA_BALL",
@@ -1608,6 +2848,9 @@
},
"REGION_UNDERWATER_ROUTE126/TUNNEL": {
"parent_map": "MAP_UNDERWATER_ROUTE126",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1618,6 +2861,9 @@
},
"REGION_UNDERWATER_ROUTE126/SMALL_AREA_1": {
"parent_map": "MAP_UNDERWATER_ROUTE126",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_126_PEARL",
"HIDDEN_ITEM_UNDERWATER_126_IRON",
@@ -1631,6 +2877,9 @@
},
"REGION_UNDERWATER_ROUTE126/SMALL_AREA_2": {
"parent_map": "MAP_UNDERWATER_ROUTE126",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_126_BLUE_SHARD"
],
@@ -1642,9 +2891,20 @@
},
"REGION_ROUTE127/MAIN": {
"parent_map": "MAP_ROUTE127",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_127_ZINC",
- "ITEM_ROUTE_127_RARE_CANDY"
+ "ITEM_ROUTE_127_RARE_CANDY",
+ "TRAINER_CAMDEN_REWARD",
+ "TRAINER_ATHENA_REWARD",
+ "TRAINER_AIDAN_REWARD",
+ "TRAINER_JONAH_REWARD",
+ "TRAINER_HENRY_REWARD",
+ "TRAINER_ROGER_REWARD",
+ "TRAINER_DONNY_REWARD",
+ "TRAINER_KOJI_1_REWARD"
],
"events": [],
"exits": [
@@ -1655,12 +2915,17 @@
"REGION_UNDERWATER_ROUTE127/TUNNEL",
"REGION_UNDERWATER_ROUTE127/AREA_1",
"REGION_UNDERWATER_ROUTE127/AREA_2",
- "REGION_UNDERWATER_ROUTE127/AREA_3"
+ "REGION_UNDERWATER_ROUTE127/AREA_3",
+ "REGION_UNDERWATER_ROUTE127/MARINE_CAVE_ENTRANCE_1",
+ "REGION_UNDERWATER_ROUTE127/MARINE_CAVE_ENTRANCE_2"
],
"warps": []
},
"REGION_ROUTE127/ENCLOSED_AREA": {
"parent_map": "MAP_ROUTE127",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_127_CARBOS"
],
@@ -1672,6 +2937,9 @@
},
"REGION_UNDERWATER_ROUTE127/MAIN": {
"parent_map": "MAP_UNDERWATER_ROUTE127",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_127_HEART_SCALE"
],
@@ -1684,6 +2952,9 @@
},
"REGION_UNDERWATER_ROUTE127/TUNNEL": {
"parent_map": "MAP_UNDERWATER_ROUTE127",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1694,6 +2965,9 @@
},
"REGION_UNDERWATER_ROUTE127/AREA_1": {
"parent_map": "MAP_UNDERWATER_ROUTE127",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_127_STAR_PIECE"
],
@@ -1705,6 +2979,9 @@
},
"REGION_UNDERWATER_ROUTE127/AREA_2": {
"parent_map": "MAP_UNDERWATER_ROUTE127",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_127_HP_UP"
],
@@ -1716,6 +2993,9 @@
},
"REGION_UNDERWATER_ROUTE127/AREA_3": {
"parent_map": "MAP_UNDERWATER_ROUTE127",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_127_RED_SHARD"
],
@@ -1725,12 +3005,48 @@
],
"warps": []
},
+ "REGION_UNDERWATER_ROUTE127/MARINE_CAVE_ENTRANCE_1": {
+ "parent_map": "MAP_UNDERWATER_ROUTE127",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE127/MAIN",
+ "REGION_UNDERWATER_MARINE_CAVE/MAIN"
+ ],
+ "warps": []
+ },
+ "REGION_UNDERWATER_ROUTE127/MARINE_CAVE_ENTRANCE_2": {
+ "parent_map": "MAP_UNDERWATER_ROUTE127",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE127/MAIN",
+ "REGION_UNDERWATER_MARINE_CAVE/MAIN"
+ ],
+ "warps": []
+ },
"REGION_ROUTE128/MAIN": {
"parent_map": "MAP_ROUTE128",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"HIDDEN_ITEM_ROUTE_128_HEART_SCALE_1",
"HIDDEN_ITEM_ROUTE_128_HEART_SCALE_2",
- "HIDDEN_ITEM_ROUTE_128_HEART_SCALE_3"
+ "HIDDEN_ITEM_ROUTE_128_HEART_SCALE_3",
+ "TRAINER_ALEXA_REWARD",
+ "TRAINER_RUBEN_REWARD",
+ "TRAINER_ISAIAH_1_REWARD",
+ "TRAINER_WAYNE_REWARD",
+ "TRAINER_KATELYN_1_REWARD",
+ "TRAINER_HARRISON_REWARD",
+ "TRAINER_CARLEE_REWARD"
],
"events": [],
"exits": [
@@ -1745,6 +3061,9 @@
},
"REGION_UNDERWATER_ROUTE128/MAIN": {
"parent_map": "MAP_UNDERWATER_ROUTE128",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1757,6 +3076,9 @@
},
"REGION_UNDERWATER_ROUTE128/AREA_1": {
"parent_map": "MAP_UNDERWATER_ROUTE128",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_128_PROTEIN"
],
@@ -1768,6 +3090,9 @@
},
"REGION_UNDERWATER_ROUTE128/AREA_2": {
"parent_map": "MAP_UNDERWATER_ROUTE128",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [
"HIDDEN_ITEM_UNDERWATER_128_PEARL"
],
@@ -1779,37 +3104,95 @@
},
"REGION_ROUTE129/MAIN": {
"parent_map": "MAP_ROUTE129",
- "locations": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_REED_REWARD",
+ "TRAINER_CHASE_REWARD",
+ "TRAINER_ALLISON_REWARD",
+ "TRAINER_TISHA_REWARD",
+ "TRAINER_CLARENCE_REWARD"
+ ],
"events": [],
"exits": [
"REGION_ROUTE130/MAIN",
"REGION_ROUTE128/MAIN",
- "REGION_UNDERWATER_ROUTE129/MAIN"
+ "REGION_UNDERWATER_ROUTE129/MARINE_CAVE_ENTRANCE_1",
+ "REGION_UNDERWATER_ROUTE129/MARINE_CAVE_ENTRANCE_2"
],
"warps": []
},
- "REGION_UNDERWATER_ROUTE129/MAIN": {
+ "REGION_UNDERWATER_ROUTE129/MARINE_CAVE_ENTRANCE_1": {
"parent_map": "MAP_UNDERWATER_ROUTE129",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
- "REGION_ROUTE129/MAIN"
+ "REGION_ROUTE129/MAIN",
+ "REGION_UNDERWATER_MARINE_CAVE/MAIN"
+ ],
+ "warps": []
+ },
+ "REGION_UNDERWATER_ROUTE129/MARINE_CAVE_ENTRANCE_2": {
+ "parent_map": "MAP_UNDERWATER_ROUTE129",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
+ "locations": [],
+ "events": [],
+ "exits": [
+ "REGION_ROUTE129/MAIN",
+ "REGION_UNDERWATER_MARINE_CAVE/MAIN"
],
"warps": []
},
"REGION_ROUTE130/MAIN": {
"parent_map": "MAP_ROUTE130",
- "locations": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_RODNEY_REWARD",
+ "TRAINER_KATIE_REWARD",
+ "TRAINER_SANTIAGO_REWARD"
+ ],
"events": [],
"exits": [
+ "REGION_ROUTE130/MIRAGE_ISLAND",
"REGION_ROUTE129/MAIN",
"REGION_ROUTE131/MAIN"
],
"warps": []
},
+ "REGION_ROUTE130/MIRAGE_ISLAND": {
+ "parent_map": "MAP_ROUTE130",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": true,
+ "locations": [
+ "BERRY_TREE_82"
+ ],
+ "events": [],
+ "exits": [],
+ "warps": []
+ },
"REGION_ROUTE131/MAIN": {
"parent_map": "MAP_ROUTE131",
- "locations": [],
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
+ "locations": [
+ "TRAINER_KEVIN_REWARD",
+ "TRAINER_TALIA_REWARD",
+ "TRAINER_RICHARD_REWARD",
+ "TRAINER_KARA_REWARD",
+ "TRAINER_HERMAN_REWARD",
+ "TRAINER_SUSIE_REWARD",
+ "TRAINER_RELI_AND_IAN_REWARD"
+ ],
"events": [],
"exits": [
"REGION_PACIFIDLOG_TOWN/MAIN",
@@ -1821,6 +3204,9 @@
},
"REGION_ROUTE132/EAST": {
"parent_map": "MAP_ROUTE132",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1831,9 +3217,20 @@
},
"REGION_ROUTE132/WEST": {
"parent_map": "MAP_ROUTE132",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_132_RARE_CANDY",
- "ITEM_ROUTE_132_PROTEIN"
+ "ITEM_ROUTE_132_PROTEIN",
+ "TRAINER_GILBERT_REWARD",
+ "TRAINER_RONALD_REWARD",
+ "TRAINER_DARCY_REWARD",
+ "TRAINER_PAXTON_REWARD",
+ "TRAINER_JONATHAN_REWARD",
+ "TRAINER_MAKAYLA_REWARD",
+ "TRAINER_KIYO_REWARD",
+ "TRAINER_DANA_REWARD"
],
"events": [],
"exits": [
@@ -1843,10 +3240,20 @@
},
"REGION_ROUTE133/MAIN": {
"parent_map": "MAP_ROUTE133",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_133_BIG_PEARL",
"ITEM_ROUTE_133_STAR_PIECE",
- "ITEM_ROUTE_133_MAX_REVIVE"
+ "ITEM_ROUTE_133_MAX_REVIVE",
+ "TRAINER_LINDA_REWARD",
+ "TRAINER_FRANKLIN_REWARD",
+ "TRAINER_DEBRA_REWARD",
+ "TRAINER_MOLLIE_REWARD",
+ "TRAINER_CONOR_REWARD",
+ "TRAINER_WARREN_REWARD",
+ "TRAINER_BECK_REWARD"
],
"events": [],
"exits": [
@@ -1856,9 +3263,21 @@
},
"REGION_ROUTE134/MAIN": {
"parent_map": "MAP_ROUTE134",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [
"ITEM_ROUTE_134_CARBOS",
- "ITEM_ROUTE_134_STAR_PIECE"
+ "ITEM_ROUTE_134_STAR_PIECE",
+ "TRAINER_ALEX_REWARD",
+ "TRAINER_KELVIN_REWARD",
+ "TRAINER_HUDSON_REWARD",
+ "TRAINER_REYNA_REWARD",
+ "TRAINER_HITOSHI_REWARD",
+ "TRAINER_MARLEY_REWARD",
+ "TRAINER_AARON_REWARD",
+ "TRAINER_LAUREL_REWARD",
+ "TRAINER_JACK_REWARD"
],
"events": [],
"exits": [
@@ -1869,6 +3288,9 @@
},
"REGION_ROUTE134/WEST": {
"parent_map": "MAP_ROUTE134",
+ "has_grass": false,
+ "has_water": true,
+ "has_fishing": true,
"locations": [],
"events": [],
"exits": [
@@ -1878,6 +3300,9 @@
},
"REGION_UNDERWATER_ROUTE134/MAIN": {
"parent_map": "MAP_UNDERWATER_ROUTE134",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [
@@ -1887,4 +3312,4 @@
"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
index 3fdab431c2..cb3cf02a7f 100644
--- a/worlds/pokemon_emerald/data/regions/unused/battle_frontier.json
+++ b/worlds/pokemon_emerald/data/regions/unused/battle_frontier.json
@@ -1,168 +1,9 @@
{
- "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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -172,6 +13,9 @@
},
"REGION_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR/MAIN": {
"parent_map": "MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -179,18 +23,11 @@
"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",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"locations": [],
"events": [],
"exits": [],
@@ -202,195 +39,14 @@
},
"REGION_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM/MAIN": {
"parent_map": "MAP_BATTLE_FRONTIER_BATTLE_PALACE_BATTLE_ROOM",
+ "has_grass": false,
+ "has_water": false,
+ "has_fishing": false,
"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
index c176de1b33..8d15d9bb28 100644
--- a/worlds/pokemon_emerald/data/regions/unused/dungeons.json
+++ b/worlds/pokemon_emerald/data/regions/unused/dungeons.json
@@ -1,52 +1,14 @@
{
- "REGION_TERRA_CAVE_ENTRANCE/MAIN": {
- "parent_map": "MAP_TERRA_CAVE_ENTRANCE",
+ "REGION_ALTERING_CAVE/MAIN": {
+ "parent_map": "MAP_ALTERING_CAVE",
+ "has_grass": true,
+ "has_water": false,
+ "has_fishing": false,
"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"
+ "MAP_ALTERING_CAVE:0/MAP_ROUTE103:0"
]
}
}
diff --git a/worlds/pokemon_emerald/data/regions/unused/routes.json b/worlds/pokemon_emerald/data/regions/unused/routes.json
deleted file mode 100644
index 47cfc45415..0000000000
--- a/worlds/pokemon_emerald/data/regions/unused/routes.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
- "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/data/trade_pokemon_schema.json b/worlds/pokemon_emerald/data/trade_pokemon_schema.json
new file mode 100644
index 0000000000..c261c5b08f
--- /dev/null
+++ b/worlds/pokemon_emerald/data/trade_pokemon_schema.json
@@ -0,0 +1,162 @@
+{
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "Pokemon",
+ "type": "object",
+ "required": ["version", "language", "nickname", "personality", "species", "experience", "ivs", "evs", "moves", "trainer"],
+ "properties": {
+ "version": {
+ "description": "The version of this schema that the data is formatted to match",
+ "type": "string",
+ "const": "1"
+ },
+ "language": {
+ "description": "The language of origin",
+ "enum": [
+ "Japanese",
+ "English",
+ "French",
+ "Italian",
+ "German",
+ "Spanish"
+ ]
+ },
+ "nickname": {
+ "description": "The pokemon's nickname",
+ "type": "string",
+ "minLength": 1
+ },
+ "personality": {
+ "description": "The pokemon's 32-bit personality value",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 4294967295
+ },
+ "species": {
+ "description": "The national dex number of the pokemon species",
+ "type": "integer",
+ "minimum": 0
+ },
+ "item": {
+ "description": "The id of the item the pokemon is holding according to modern tables",
+ "type": "integer"
+ },
+ "experience": {
+ "description": "The current total EXP",
+ "type": "integer",
+ "minimum": 0
+ },
+ "ability": {
+ "description": "The value of the ability bit (hidden abilities should be a separate bit)",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 1
+ },
+ "ivs": {
+ "description": "The 6 IVs of the pokemon",
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 31
+ },
+ "minItems": 6,
+ "maxItems": 6
+ },
+ "evs": {
+ "description": "The 6 EVs of the pokemon",
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 255
+ },
+ "minItems": 6,
+ "maxItems": 6
+ },
+ "conditions": {
+ "description": "The 6 condition (contest) stats of the pokemon",
+ "type": "array",
+ "items": {
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 255
+ },
+ "minItems": 6,
+ "maxItems": 6
+ },
+ "pokerus": {
+ "description": "The value of the pokerus status byte",
+ "type": "integer",
+ "minimum": 0
+ },
+ "game": {
+ "description": "The id of the game the pokemon originated in",
+ "type": "integer",
+ "minimum": 0
+ },
+ "location_met": {
+ "description": "The location id for where the pokemon was met",
+ "type": "integer",
+ "minimum": 0
+ },
+ "level_met": {
+ "description": "The level the pokemon was met at",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 100
+ },
+ "ball": {
+ "description": "The type of poke ball the pokemon was caught in",
+ "type": "integer",
+ "minimum": 1
+ },
+ "moves": {
+ "description": "The move id, PP, and PP Ups used for each move slot",
+ "type": "array",
+ "items": {
+ "type": "array",
+ "prefixItems": [
+ {
+ "description": "The move's id according to modern tables (use 0 for an empty slot)",
+ "type": "integer"
+ },
+ {
+ "description": "The move's max PP",
+ "type": "integer",
+ "minimum": 1
+ },
+ {
+ "description": "The number of times a PP Up has been used on this move",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 3
+ }
+ ],
+ "minLength": 4,
+ "maxLength": 4
+ }
+ },
+ "trainer": {
+ "description": "Original trainer info",
+ "type": "object",
+ "properties": {
+ "name": {
+ "description": "The original trainer's name",
+ "type": "string",
+ "minLength": 1
+ },
+ "id": {
+ "description": "The original trainer's 32-bit ID (includes secret id as higher order bytes)",
+ "type": "integer",
+ "minimum": 0,
+ "maximum": 4294967295
+ },
+ "female": {
+ "description": "Whether the original trainer is female",
+ "type": "boolean"
+ }
+ },
+ "required": ["name", "id"]
+ }
+ }
+}
\ No newline at end of file
diff --git a/worlds/pokemon_emerald/docs/en_Pokemon Emerald.md b/worlds/pokemon_emerald/docs/en_Pokemon Emerald.md
index 8b09b51b38..9a3991e97f 100644
--- a/worlds/pokemon_emerald/docs/en_Pokemon Emerald.md
+++ b/worlds/pokemon_emerald/docs/en_Pokemon Emerald.md
@@ -38,8 +38,8 @@ 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 you find an item that is not your own, you will see the item's name and its owner while the item received jingle
+plays.
## When the player receives an item, what happens?
@@ -55,9 +55,9 @@ you're playing a multiworld game, the client will sync your game with the server
## 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.
+Unfortunately, no. We don't want to force new mechanics on players who would prefer to play with the classic mechanics,
+but updating would require such drastic changes to the underlying code that it would be unreasonable to toggle between
+them.
## Is this randomizer compatible with other mods?
@@ -68,11 +68,21 @@ 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
+No, tools like UPR 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.
+### There are two possible exceptions
+
+#### 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. Box and party pokémon are the only aspects of your save file likely to work.
+
+#### PokéFinder/RNG Reporter
+
+In the spirit of randomization, Emerald's broken RNG is fixed in Archipelago. More specifically, it's reverted to work
+as it did in Ruby/Sapphire. So while you can't make the assumption that the RNG is seeded at 0, you can set the battery
+to dry, which will seed it in the same way that Ruby/Sapphire are seeded when the battery is dry.
diff --git a/worlds/pokemon_emerald/data/README.md b/worlds/pokemon_emerald/docs/region data.md
similarity index 74%
rename from worlds/pokemon_emerald/data/README.md
rename to worlds/pokemon_emerald/docs/region data.md
index a7c5d3f293..767b5cac2c 100644
--- a/worlds/pokemon_emerald/data/README.md
+++ b/worlds/pokemon_emerald/docs/region data.md
@@ -1,8 +1,7 @@
-## `regions/`
+## Region Data
-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:
+Regions, connections, and associated locations are defined in `data/regions`. If you know what you're doing, it should
+be pretty clear how the data works by taking a quick look through the files. But the quick 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)
@@ -12,7 +11,7 @@ to say you shouldn't read it, but the tl;dr is:
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
+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.
@@ -25,9 +24,9 @@ example is demonstrative). Keeping the name consistent with the `Map` name and a
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:
+and are only split and ordered for organization. Regions defined in `data/regions/unused` are remnants from
+automatically generated regions and represent places that exist but aren't reachable or aren't currently relevant to the
+randomizer. Any locations or warps in there should be ignored. Data for a single region looks like this:
```json
"REGION_ROUTE103/EAST": {
@@ -60,9 +59,9 @@ can trigger story progression and unblock roads and buildings. Events are define
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. 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).
+there to be referenced here. More on warps in [../docs/warps.md](../docs/warps.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
@@ -78,22 +77,3 @@ especially remember to rename incoming `exits` defined in other regions which ar
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/docs/rom changes.md b/worlds/pokemon_emerald/docs/rom changes.md
index 9b189d08e7..6dec685f70 100644
--- a/worlds/pokemon_emerald/docs/rom changes.md
+++ b/worlds/pokemon_emerald/docs/rom changes.md
@@ -1,7 +1,20 @@
+## New Behaviors
+
+- The union room receptionist on the second floor of Pokemon Centers was reworked for wonder trading via Archipelago
+- Norman will give you all event ticket items when he gives you the S.S. Ticket
+- Use of event tickets is streamlined and the scripts are refactored to skip "first time use" stuff
+- The roaming pokemon is forced to Latios
+- The pokemon at Southern Island is forced to Latias
+- There is new code for changing your party's levels during trainer battles which also modifies exp gain
+
## QoL
+- The menu has a GO HOME option instead of EXIT, which will immediately teleport you to Birch's Lab
+- It is possible to teach over HM moves
- The catch tutorial and cutscenes during your first visit to Petalburg are skipped
- The match call tutorial after you leave Devon Corp is skipped
+- Random match calls in general are skipped, and trainers no longer ask to register you after a battle
+- Searching by type in the pokedex includes species you have seen but not yet caught
- Cycling and running is allowed in every map (some exceptions like Fortree and Pacifidlog)
- When you run out of Repel steps, you'll be prompted to use another one if you have more in your bag
- Text is always rendered in its entirety on the first frame (instant text)
@@ -12,6 +25,9 @@ you can still read the species when deciding whether to change pokemon
- When receiving TMs and HMs, the move that it teaches is consistently displayed in the "received item" message (by
default, certain ways of receiving items would only display the TM/HM number)
- The Pokedex starts in national mode
+- The fishing minigame is always successful at finding a catch, only requires one round, and will always show four dots
+- With an option in Archipelago, spinning trainers become predictable
+- Removed a ledge on Route 123 which allows you to collect every item without backtracking
- The Oldale Pokemart sells Poke Balls at the start of the game
- Pauses during battles (e.g. the ~1 second pause at the start of a turn before an opponent uses a potion) are shorter
by 62.5%
@@ -29,6 +45,10 @@ predetermined priority
- Shoal cave changes state every time you reload the map and is no longer tied to the RTC
- Increased safari zone steps from 500 to 50000
- Trainers will not approach the player if the blind trainers option is set
+- Defeating the elite 4 respawns all legendary encounters where the encounter ended by fainting the pokemon
+- The cutscene revealing the existence of Latios also gives you dex info for having seen Latios
+- The braille wall hinting at the solution to the Wailord/Relicanth puzzle gives you dex info for having seen Wailord
+and Relicanth
- Changed trade evolutions to be possible without trading:
- Politoed: Use King's Rock in bag menu
- Alakazam: Level 37
@@ -47,11 +67,23 @@ predetermined priority
## Game State Changes/Softlock Prevention
- Mr. Briney never disappears or stops letting you use his ferry
+- Upon releasing Kyogre, Sootopolis and Sky Pillar will be advanced to after Rayquaza has been awakened, skipping the
+Wallace and Rayquaza fetch quest
- Prevent the player from flying or surfing until they have received the Pokedex
-- The S.S. Tidal will be available at all times if you have the option enabled
+- The S.S. Tidal will be available at all times
+- All time-based berry gifts are locked to a one-time gift of a specific berry
+- Terra and Marine Cave are given fixed locations, and the weather events revealing them are permanent until the
+legendary encounter is resolved
+- Mirage Island is always present
+- During dexsanity, certain trainers don't disappear/deactivate
+- During berry randomization, it is impossible to plant berries or for berry trees to change state
- Some NPCs or tiles are removed on the creation of a new save file based on player options
- Ensured that every species has some damaging move by level 5
-- Route 115 may have strength boulders between the beach and cave entrance based on player options
+- Route 115 has an alternate layout (must be enabled through Archipelago) which includes a bumpy slope that can cross
+the ledge normally blocking you from entering Meteor Falls from Rustboro City
+- Route 115 may have strength boulders (must be enabled through Archipelago) between the beach and cave entrance
+- Route 118 has an alternate layout (must be enabled through Archipelago) that blocks you from surfing between shores
+and adds a rail so that it can be crossed using the Acro Bike
- The Petalburg Gym is set up based on your player options rather than after the first 4 gyms
- The E4 guards will actually check all your badges (or gyms beaten based on your options) instead of just the Feather
Badge
diff --git a/worlds/pokemon_emerald/docs/warps.md b/worlds/pokemon_emerald/docs/warps.md
new file mode 100644
index 0000000000..671c6aee21
--- /dev/null
+++ b/worlds/pokemon_emerald/docs/warps.md
@@ -0,0 +1,50 @@
+## 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 does not 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/docs/wonder trades.md b/worlds/pokemon_emerald/docs/wonder trades.md
new file mode 100644
index 0000000000..1187e9edb6
--- /dev/null
+++ b/worlds/pokemon_emerald/docs/wonder trades.md
@@ -0,0 +1,103 @@
+# Wonder Trades
+
+Pokemon Emerald uses Archipelago's data storage to reproduce what the Pokemon series calls wonder trading. Wonder
+trading is meant as a sort of gacha game surprise trade where you give up one of your pokemon and at some point in the
+future you'll receive one in return from another player who decided to participate. In practice, small groups will be
+able to use it as a means of simple trading as well by coordinating when they participate.
+
+The goal of the implementation used by Pokemon Emerald is to allow players to interact with an NPC in-game to deposit
+and withdraw pokemon without having to touch their client. The client will automatically detect their state, look for
+available trades, and notify the player when they've received something.
+
+It's also intended to work for Pokemon games other than Emerald, should any other games decide to opt in and implement
+the feature into their clients.
+
+## Data Storage Format
+
+There is one wonder trade entry per team at `pokemon_wonder_trades_{team number}`.
+
+It should be a dict that looks something like this:
+
+```json
+{
+ "_lock": 0,
+ "0": [3, "{some json data}"],
+ "3": [2, "{some json data}"]
+}
+```
+
+### Lock
+
+`_lock` tells you whether you're allowed to try to modify the key. Its value should be either `0` to represent an
+unlocked state, or a timestamp represented by time since Epoch in ms (`int(time.time_ns() / 1000000)`).
+[See below](#preventing-race-conditions) for more info.
+
+### Non-lock Keys
+
+All other keys are just non-negative integers as strings. You can think of them as wonder trade slots. Pidgeon holes
+with a label. For consistency and ease of use, keep the keys between 0 and 255, and prefer the lowest number you can
+use. They ONLY act as names that can be easily written to and removed from.
+- You SHOULD NOT rely on those numbers being contiguous or starting at 0.
+- You SHOULD NOT rely on a "trade" residing at a single slot until it is removed.
+- You SHOULD NOT assume that the number has any significance to a player's slot, or trade order, or anything really.
+
+### Values
+
+The first entry in the tuple represents which slot put the pokemon up for trade. You could use this to display in your
+game or client who the trade came from, but its primary purpose is to discriminate entries you can take from those you
+can't. You don't want to send something to the server, see that the server has something to take, and then take your own
+pokemon right back.
+
+The JSON data should match the schema currently located at `data/trade_pokemon_schema.json`. It should be universally
+understandable by anything trying to interact with wonder trades. Of course, some Pokemon games include more data than
+others for a given pokemon, some games don't have species introduced in later generations, and some data is of a
+different format, has different values, or is even spelled differently. The hope is that translating to and from JSON is
+reasonable for any game (or at least any game likely to be integrated into AP), and you can easily tell from the JSON
+whether your game is capable of giving the pokemon to the player in-game.
+
+## Preventing Race Conditions
+
+This caused by far the most headache of implementing wonder trades. You should be very thorough in trying to prevent
+issues here.
+
+If you prefer more technical explanations, the Pokemon Emerald client has documented wonder trade functions. The rest of
+this section explains what problems are being solved and why the solutions work.
+
+The problem that needs solving is that your client needs to know what the value of the trade data is before it commits
+some sort of action. By design, multiple clients are writing to and removing from the same key in data storage, so if
+two clients try to interact and there's ambiguity in what the data looks like, it will cause issues of duplication and
+loss of data.
+
+For example, client 1 and client 2 both see a pokemon that they can take, so they copy the pokemon to their respective
+games, and both send a command to remove that pokemon from the data store. The first command works and removes the
+entry, which sends an update to both clients that there no longer exists a pokemon at that slot. And then the second
+command, which was already sent, tries to remove the same entry. At best, the data was duplicated, and at worst the
+server raises an exception or crashes.
+
+Thankfully, when you receive an update from the server that a storage value changed, it will tell you both the previous
+and current value. That's where the lock comes in. At a basic level, your client attempts to claim ownership of the key
+temporarily while it makes its modifications, and all other clients respect that claim by not interacting until the lock
+is released. You know you locked the key because the `SetReply` you receive for modifying the lock is the one that set
+it from an unlocked state to a locked state. When two clients try to lock at the same time, one will see an unlocked
+state move to a locked state, and the other will see an already locked state move to a locked state. You can identify
+whether a `SetReply` was triggered by your client's `Set` by attaching a uuid to the `Set` command, which will also be
+attached to the `SetReply`. See the Emerald client for an example.
+
+Which brings us to problem 2, which is the scenario where a client crashes or closes before unlocking the key. One rogue
+client might prevent all other clients from ever interacting with wonder trading again.
+
+So for this reason, the lock is a timestamp, and the key is considered "locked" if that timestamp is less than 5 seconds
+in the past. If a client dies after locking, its lock will expire, and other clients will be able to make modifications.
+Setting the lock to 0 is the canonical way of marking it as unlocked, but it's not a special case really. It's
+equivalent to marking the key as last locked in 1970.
+
+Which brings us to problem 3. Multiple clients which want to obtain the lock can only check whether the lock is
+obtainable by refreshing the current lock's timestamp. So two clients trying to secure a lock made by a dead client may
+trade back and forth, updating the lock to see if it is expired yet, seeing that it is not, and then waiting 5 seconds
+while the other client does the same thing, which causes the lock to again be less than 5 seconds old.
+
+Using a cooldown period longer than the time to expire only increases the minimum number of clients that can trigger
+this cycle. Instead, the solution is to double your cooldown every time you bounce off an expired lock (and reset it
+once you acquire it). Eventually the amount of time every client is waiting will be enough to create a gap large enough
+for one client to consider the lock expired, and it will acquire the lock, make its changes, and set the lock state to
+definitively unlocked, which will let the next client claim it, and so on.
diff --git a/worlds/pokemon_emerald/items.py b/worlds/pokemon_emerald/items.py
index 7963f92384..436db771d3 100644
--- a/worlds/pokemon_emerald/items.py
+++ b/worlds/pokemon_emerald/items.py
@@ -51,13 +51,13 @@ ITEM_GROUPS = {
"Stone Badge", "Knuckle Badge",
"Dynamo Badge", "Heat Badge",
"Balance Badge", "Feather Badge",
- "Mind Badge", "Rain Badge"
+ "Mind Badge", "Rain Badge",
},
"HMs": {
"HM01 Cut", "HM02 Fly",
"HM03 Surf", "HM04 Strength",
"HM05 Flash", "HM06 Rock Smash",
- "HM07 Waterfall", "HM08 Dive"
+ "HM07 Waterfall", "HM08 Dive",
},
"HM01": {"HM01 Cut"},
"HM02": {"HM02 Fly"},
@@ -66,7 +66,7 @@ ITEM_GROUPS = {
"HM05": {"HM05 Flash"},
"HM06": {"HM06 Rock Smash"},
"HM07": {"HM07 Waterfall"},
- "HM08": {"HM08 Dive"}
+ "HM08": {"HM08 Dive"},
}
diff --git a/worlds/pokemon_emerald/locations.py b/worlds/pokemon_emerald/locations.py
index 3d842ecbac..99d11db985 100644
--- a/worlds/pokemon_emerald/locations.py
+++ b/worlds/pokemon_emerald/locations.py
@@ -1,20 +1,84 @@
"""
Classes and functions related to AP locations for Pokemon Emerald
"""
-from typing import TYPE_CHECKING, Dict, List, Optional, FrozenSet, Iterable
+from typing import TYPE_CHECKING, Dict, Optional, FrozenSet, Iterable
from BaseClasses import Location, Region
-from .data import BASE_OFFSET, data
+from .data import BASE_OFFSET, POKEDEX_OFFSET, data
from .items import offset_item_value
if TYPE_CHECKING:
from . import PokemonEmeraldWorld
+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",
+ },
+ "Trick House": {
+ "Trick House Puzzle 1 - Item",
+ "Trick House Puzzle 2 - Item 1",
+ "Trick House Puzzle 2 - Item 2",
+ "Trick House Puzzle 3 - Item 1",
+ "Trick House Puzzle 3 - Item 2",
+ "Trick House Puzzle 4 - Item",
+ "Trick House Puzzle 6 - Item",
+ "Trick House Puzzle 7 - Item",
+ "Trick House Puzzle 8 - Item",
+ "Trick House Puzzle 1 - Reward",
+ "Trick House Puzzle 2 - Reward",
+ "Trick House Puzzle 3 - Reward",
+ "Trick House Puzzle 4 - Reward",
+ "Trick House Puzzle 5 - Reward",
+ "Trick House Puzzle 6 - Reward",
+ "Trick House Puzzle 7 - Reward",
+ }
+}
+
+
+VISITED_EVENT_NAME_TO_ID = {
+ "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,
+}
+
+
class PokemonEmeraldLocation(Location):
game: str = "Pokemon Emerald"
- rom_address: Optional[int]
+ item_address: Optional[int]
default_item_code: Optional[int]
tags: FrozenSet[str]
@@ -22,14 +86,14 @@ class PokemonEmeraldLocation(Location):
self,
player: int,
name: str,
- flag: Optional[int],
+ address: Optional[int],
parent: Optional[Region] = None,
- rom_address: Optional[int] = None,
+ item_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)
+ super().__init__(player, name, address, 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.item_address = item_address
self.tags = tags
@@ -64,12 +128,17 @@ def create_locations_with_tags(world: "PokemonEmeraldWorld", regions: Dict[str,
for location_name in filtered_locations:
location_data = data.locations[location_name]
+
+ location_id = offset_flag(location_data.flag)
+ if location_data.flag == 0:
+ location_id += POKEDEX_OFFSET + int(location_name[15:])
+
location = PokemonEmeraldLocation(
world.player,
location_data.label,
- location_data.flag,
+ location_id,
region,
- location_data.rom_address,
+ location_data.address,
location_data.default_item,
location_data.tags
)
@@ -84,41 +153,68 @@ def create_location_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)
+
+ if location_data.flag == 0:
+ label_to_id_map[location_data.label] = BASE_OFFSET + POKEDEX_OFFSET + int(location_data.name[15:])
+ else:
+ 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 - Item on Ledge",
- "Safari Zone NE - Hidden Item North",
- "Safari Zone NE - Hidden Item East",
- "Safari Zone SE - Item in Grass",
- "Safari Zone SE - Hidden Item in South Grass 1",
- "Safari Zone SE - Hidden Item in South Grass 2",
- }
-}
+def set_free_fly(world: "PokemonEmeraldWorld") -> None:
+ # Set our free fly location
+ # If not enabled, set it to Littleroot Town by default
+ fly_location_name = "EVENT_VISITED_LITTLEROOT_TOWN"
+ if world.options.free_fly_location:
+ fly_location_name = world.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",
+ ])
+
+ world.free_fly_location_id = VISITED_EVENT_NAME_TO_ID[fly_location_name]
+
+ free_fly_location_location = world.multiworld.get_location("FREE_FLY_LOCATION", world.player)
+ free_fly_location_location.item = None
+ free_fly_location_location.place_locked_item(world.create_event(fly_location_name))
+
+
+def set_legendary_cave_entrances(world: "PokemonEmeraldWorld") -> None:
+ # Set Marine Cave and Terra Cave entrances
+ terra_cave_location_name = world.random.choice([
+ "TERRA_CAVE_ROUTE_114_1",
+ "TERRA_CAVE_ROUTE_114_2",
+ "TERRA_CAVE_ROUTE_115_1",
+ "TERRA_CAVE_ROUTE_115_2",
+ "TERRA_CAVE_ROUTE_116_1",
+ "TERRA_CAVE_ROUTE_116_2",
+ "TERRA_CAVE_ROUTE_118_1",
+ "TERRA_CAVE_ROUTE_118_2",
+ ])
+
+ terra_cave_location_location = world.multiworld.get_location("TERRA_CAVE_LOCATION", world.player)
+ terra_cave_location_location.item = None
+ terra_cave_location_location.place_locked_item(world.create_event(terra_cave_location_name))
+
+ marine_cave_location_name = world.random.choice([
+ "MARINE_CAVE_ROUTE_105_1",
+ "MARINE_CAVE_ROUTE_105_2",
+ "MARINE_CAVE_ROUTE_125_1",
+ "MARINE_CAVE_ROUTE_125_2",
+ "MARINE_CAVE_ROUTE_127_1",
+ "MARINE_CAVE_ROUTE_127_2",
+ "MARINE_CAVE_ROUTE_129_1",
+ "MARINE_CAVE_ROUTE_129_2",
+ ])
+
+ marine_cave_location_location = world.multiworld.get_location("MARINE_CAVE_LOCATION", world.player)
+ marine_cave_location_location.item = None
+ marine_cave_location_location.place_locked_item(world.create_event(marine_cave_location_name))
diff --git a/worlds/pokemon_emerald/opponents.py b/worlds/pokemon_emerald/opponents.py
new file mode 100644
index 0000000000..f485282515
--- /dev/null
+++ b/worlds/pokemon_emerald/opponents.py
@@ -0,0 +1,116 @@
+from typing import TYPE_CHECKING, Dict, List, Set
+
+from .data import NUM_REAL_SPECIES, UNEVOLVED_POKEMON, TrainerPokemonData, data
+from .options import RandomizeTrainerParties
+from .pokemon import filter_species_by_nearby_bst
+from .util import int_to_bool_array
+
+if TYPE_CHECKING:
+ from . import PokemonEmeraldWorld
+
+
+def randomize_opponent_parties(world: "PokemonEmeraldWorld") -> None:
+ if world.options.trainer_parties == RandomizeTrainerParties.option_vanilla:
+ return
+
+ from collections import defaultdict
+
+ should_match_bst = world.options.trainer_parties in {
+ RandomizeTrainerParties.option_match_base_stats,
+ RandomizeTrainerParties.option_match_base_stats_and_type,
+ }
+ should_match_type = world.options.trainer_parties in {
+ RandomizeTrainerParties.option_match_type,
+ RandomizeTrainerParties.option_match_base_stats_and_type,
+ }
+
+ per_species_tmhm_moves: Dict[int, List[int]] = {}
+
+ for trainer in world.modified_trainers:
+ new_party = []
+ for pokemon in trainer.party.pokemon:
+ original_species = data.species[pokemon.species_id]
+
+ # Construct progressive tiers of blacklists that can be peeled back if they
+ # collectively cover too much of the pokedex. A lower index in `blacklists`
+ # indicates a more important set of species to avoid. Entries at `0` will
+ # always be blacklisted.
+ blacklists: Dict[int, List[Set[int]]] = defaultdict(list)
+
+ # Blacklist unevolved species
+ if pokemon.level >= world.options.force_fully_evolved:
+ blacklists[0].append(UNEVOLVED_POKEMON)
+
+ # Blacklist from player options
+ blacklists[2].append(world.blacklisted_opponent_pokemon)
+
+ # Type matching blacklist
+ if should_match_type:
+ blacklists[3].append({
+ species.species_id
+ for species in world.modified_species.values()
+ if not bool(set(species.types) & set(original_species.types))
+ })
+
+ merged_blacklist: Set[int] = set()
+ for max_priority in reversed(sorted(blacklists.keys())):
+ merged_blacklist = set()
+ for priority in blacklists.keys():
+ if priority <= max_priority:
+ for blacklist in blacklists[priority]:
+ merged_blacklist |= blacklist
+
+ if len(merged_blacklist) < NUM_REAL_SPECIES:
+ break
+ else:
+ raise RuntimeError("This should never happen")
+
+ candidates = [
+ species
+ for species in world.modified_species.values()
+ if species.species_id not in merged_blacklist
+ ]
+
+ if should_match_bst:
+ candidates = filter_species_by_nearby_bst(candidates, sum(original_species.base_stats))
+
+ new_species = world.random.choice(candidates)
+
+ if new_species.species_id not in per_species_tmhm_moves:
+ per_species_tmhm_moves[new_species.species_id] = sorted({
+ world.modified_tmhm_moves[i]
+ for i, is_compatible in enumerate(int_to_bool_array(new_species.tm_hm_compatibility))
+ if is_compatible
+ })
+
+ # TMs and HMs compatible with the species
+ tm_hm_movepool = per_species_tmhm_moves[new_species.species_id]
+
+ # Moves the pokemon could have learned by now
+ level_up_movepool = sorted({
+ move.move_id
+ for move in new_species.learnset
+ if move.move_id != 0 and move.level <= pokemon.level
+ })
+
+ if len(level_up_movepool) < 4:
+ level_up_moves = [level_up_movepool[i] if i < len(level_up_movepool) else 0 for i in range(4)]
+ else:
+ level_up_moves = world.random.sample(level_up_movepool, 4)
+
+ if len(tm_hm_movepool) < 4:
+ hm_moves = list(reversed(list(tm_hm_movepool[i] if i < len(tm_hm_movepool) else 0 for i in range(4))))
+ else:
+ hm_moves = world.random.sample(tm_hm_movepool, 4)
+
+ # 25% chance to pick a move from TMs or HMs
+ new_moves = (
+ hm_moves[0] if world.random.random() < 0.25 else level_up_moves[0],
+ hm_moves[1] if world.random.random() < 0.25 else level_up_moves[1],
+ hm_moves[2] if world.random.random() < 0.25 else level_up_moves[2],
+ hm_moves[3] if world.random.random() < 0.25 else level_up_moves[3]
+ )
+
+ new_party.append(TrainerPokemonData(new_species.species_id, pokemon.level, new_moves))
+
+ trainer.party.pokemon = new_party
diff --git a/worlds/pokemon_emerald/options.py b/worlds/pokemon_emerald/options.py
index 655966a2a7..69ce47f207 100644
--- a/worlds/pokemon_emerald/options.py
+++ b/worlds/pokemon_emerald/options.py
@@ -2,9 +2,9 @@
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 Options import (Choice, DeathLink, DefaultOnToggle, TextChoice, OptionSet, NamedRange, Range, Toggle, FreeText,
+ PerGameCommonOptions)
from .data import data
@@ -16,12 +16,14 @@ class Goal(Choice):
Champion: Become the champion and enter the hall of fame
Steven: Defeat Steven in Meteor Falls
Norman: Defeat Norman in Petalburg Gym
+ Legendary Hunt: Defeat or catch legendary pokemon (or whatever was randomized into their encounters)
"""
display_name = "Goal"
default = 0
option_champion = 0
option_steven = 1
option_norman = 2
+ option_legendary_hunt = 3
class RandomizeBadges(Choice):
@@ -69,6 +71,13 @@ class RandomizeBikes(Toggle):
display_name = "Randomize Bikes"
+class RandomizeEventTickets(Toggle):
+ """
+ Adds the event tickets to the pool, which let you access legendaries by sailing from Lilycove
+ """
+ display_name = "Randomize Event Tickets"
+
+
class RandomizeRods(Toggle):
"""
Adds fishing rods to the pool
@@ -97,13 +106,40 @@ class RandomizeNpcGifts(Toggle):
display_name = "Randomize NPC Gifts"
+class RandomizeBerryTrees(Toggle):
+ """
+ Adds berry trees to the pool. Empty soil patches are converted to locations and contribute Sitrus Berries to the pool.
+ """
+ display_name = "Randomize Berry Trees"
+
+
+class Dexsanity(Toggle):
+ """
+ Adding a "caught" pokedex entry gives you an item (catching, evolving, trading, etc.).
+
+ Defeating gym leaders provides dex info, allowing you to see where on the map you can catch species you need.
+
+ Each pokedex entry adds a Poke Ball, Great Ball, or Ultra Ball to the pool.
+ """
+ display_name = "Dexsanity"
+
+
+class Trainersanity(Toggle):
+ """
+ Defeating a trainer for the first time gives you an item. Trainers are no longer missable.
+
+ Trainers no longer give you money for winning. Each trainer adds a valuable item (nugget, stardust, etc.) to the pool.
+ """
+ display_name = "Trainersanity"
+
+
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...)
+ 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"
@@ -120,18 +156,16 @@ class HiddenItemsRequireItemfinder(DefaultOnToggle):
display_name = "Require Itemfinder"
-class DarkCavesRequireFlash(DefaultOnToggle):
+class DarkCavesRequireFlash(Choice):
"""
- The lower floors of Granite Cave and Victory Road logically require use of HM05 Flash
+ Determines whether HM05 Flash is logically required to navigate a dark cave
"""
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"
+ default = 3
+ option_neither = 0
+ option_only_granite_cave = 1
+ option_only_victory_road = 2
+ option_both = 3
class EliteFourRequirement(Choice):
@@ -180,6 +214,61 @@ class NormanCount(Range):
default = 4
+class LegendaryHuntCatch(Toggle):
+ """
+ Sets whether legendaries need to be caught to satisfy the Legendary Hunt win condition. Defeated legendaries can be respawned by defeating the Elite 4.
+ """
+ display_name = "Legendary Hunt Requires Catching"
+
+
+class LegendaryHuntCount(Range):
+ """
+ Sets the number of legendaries that must be caught/defeated for the Legendary Hunt goal
+ """
+ display_name = "Legendary Hunt Count"
+ range_start = 1
+ range_end = 12
+ default = 3
+
+
+class AllowedLegendaryHuntEncounters(OptionSet):
+ """
+ Sets which legendary encounters can contribute to the Legendary Hunt goal.
+
+ Latios will always be the roamer. Latias will always be at Southern Island.
+
+ Possible values are:
+ "Groudon"
+ "Kyogre"
+ "Rayquaza"
+ "Latios"
+ "Latias"
+ "Regirock"
+ "Registeel"
+ "Regice"
+ "Ho-oh"
+ "Lugia"
+ "Deoxys"
+ "Mew"
+ """
+ display_name = "Allowed Legendary Hunt Encounters"
+ valid_keys = frozenset([
+ "Groudon",
+ "Kyogre",
+ "Rayquaza",
+ "Latios",
+ "Latias",
+ "Regirock",
+ "Registeel",
+ "Regice",
+ "Ho-oh",
+ "Lugia",
+ "Deoxys",
+ "Mew",
+ ])
+ default = valid_keys.copy()
+
+
class RandomizeWildPokemon(Choice):
"""
Randomizes wild pokemon encounters (grass, caves, water, fishing)
@@ -199,11 +288,16 @@ class RandomizeWildPokemon(Choice):
option_completely_random = 4
-class AllowWildLegendaries(DefaultOnToggle):
+class WildEncounterBlacklist(OptionSet):
"""
- Wild encounters can be replaced by legendaries. Only applied if Randomize Wild Pokemon is not Vanilla.
+ Prevents listed species from appearing in the wild when wild encounters are randomized.
+
+ May be overridden if enforcing other restrictions in combination with this blacklist is impossible.
+
+ Use "_Legendaries" as a shortcut for legendary pokemon.
"""
- display_name = "Allow Wild Legendaries"
+ display_name = "Wild Encounter Blacklist"
+ valid_keys = frozenset(species.label for species in data.species.values()) | {"_Legendaries"}
class RandomizeStarters(Choice):
@@ -225,11 +319,16 @@ class RandomizeStarters(Choice):
option_completely_random = 4
-class AllowStarterLegendaries(DefaultOnToggle):
+class StarterBlacklist(OptionSet):
"""
- Starters can be replaced by legendaries. Only applied if Randomize Starters is not Vanilla.
+ Prevents listed species from appearing as starters when starters are randomized.
+
+ May be overridden if enforcing other restrictions in combination with this blacklist is impossible.
+
+ Use "_Legendaries" as a shortcut for legendary pokemon.
"""
- display_name = "Allow Starter Legendaries"
+ display_name = "Starter Blacklist"
+ valid_keys = frozenset(species.label for species in data.species.values()) | {"_Legendaries"}
class RandomizeTrainerParties(Choice):
@@ -251,25 +350,61 @@ class RandomizeTrainerParties(Choice):
option_completely_random = 4
-class AllowTrainerLegendaries(DefaultOnToggle):
+class TrainerPartyBlacklist(OptionSet):
"""
- Enemy trainer pokemon can be replaced by legendaries. Only applied if Randomize Trainer Parties is not Vanilla.
+ Prevents listed species from appearing in opponent trainers' parties if opponent parties are randomized.
+
+ May be overridden if enforcing other restrictions in combination with this blacklist is impossible.
+
+ Use "_Legendaries" as a shortcut for legendary pokemon.
"""
- display_name = "Allow Trainer Legendaries"
+ display_name = "Trainer Party Blacklist"
+ valid_keys = frozenset(species.label for species in data.species.values()) | {"_Legendaries"}
-class RandomizeStaticEncounters(Choice):
+class ForceFullyEvolved(Range):
"""
- Randomizes static encounters (Rayquaza, hidden Kekleons, fake Voltorb pokeballs, etc...)
+ When an opponent uses a pokemon of the specified level or higher, restricts the species to only fully evolved pokemon.
+ """
+ display_name = "Force Fully Evolved"
+ range_start = 1
+ range_end = 100
+ default = 100
- 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
+
+class RandomizeLegendaryEncounters(Choice):
+ """
+ Randomizes legendary encounters (Rayquaza, Regice, Latias, etc.). The roamer will always be Latios during legendary hunts.
+
+ Vanilla: Legendary encounters are unchanged
+ Shuffle: Legendary encounters are shuffled between each other
+ Match Base Stats: Legendary encounters are replaced with species with approximately the same bst
+ Match Type: Legendary 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"
+ display_name = "Randomize Legendary 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 RandomizeMiscPokemon(Choice):
+ """
+ Randomizes non-legendary static encounters. May grow to include other pokemon like trades or gifts.
+
+ Vanilla: Species are unchanged
+ Shuffle: Species are shuffled between each other
+ Match Base Stats: Species are replaced with species with approximately the same bst
+ Match Type: Species 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 Misc Pokemon"
default = 0
option_vanilla = 0
option_shuffle = 1
@@ -363,48 +498,52 @@ class MoveNormalTypeBias(Range):
default = 0
-class HmCompatibility(Choice):
+class MoveBlacklist(OptionSet):
"""
- Modifies the compatibility of HMs
+ A list of moves which should be excluded from learnsets, TMs, and move tutors.
+ """
+ display_name = "Move Blacklist"
+ valid_keys = frozenset(data.move_labels.keys())
- 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)
+
+class HmCompatibility(NamedRange):
+ """
+ Sets the percent chance that a given HM is compatible with a species
"""
display_name = "HM Compatibility"
- default = 1
- option_vanilla = 0
- option_fully_compatible = 1
- option_completely_random = 2
+ default = -1
+ range_start = 50
+ range_end = 100
+ special_range_names = {
+ "vanilla": -1
+ }
-class TmCompatibility(Choice):
+class TmTutorCompatibility(NamedRange):
"""
- 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)
+ Sets the percent chance that a given TM or move tutor is compatible with a species
"""
- display_name = "TM Compatibility"
- default = 0
- option_vanilla = 0
- option_fully_compatible = 1
- option_completely_random = 2
+ display_name = "TM/Tutor Compatibility"
+ default = -1
+ range_start = 0
+ range_end = 100
+ special_range_names = {
+ "vanilla": -1
+ }
-class TmMoves(Toggle):
+class TmTutorMoves(Toggle):
"""
- Randomizes the moves taught by TMs
+ Randomizes the moves taught by TMs and move tutors
"""
- display_name = "TM Moves"
+ display_name = "TM/Tutor Moves"
-class ReusableTms(Toggle):
+class ReusableTmsTutors(Toggle):
"""
- Sets TMs to not break after use (they remain sellable)
+ Sets TMs to not break after use (they remain sellable). Sets move tutors to infinite use.
"""
- display_name = "Reusable TMs"
+ display_name = "Reusable TMs and Tutors"
class MinCatchRate(Range):
@@ -428,6 +567,15 @@ class GuaranteedCatch(Toggle):
display_name = "Guaranteed Catch"
+class NormalizeEncounterRates(Toggle):
+ """
+ Make every slot on an encounter table approximately equally likely.
+
+ This does NOT mean every species is equally likely. But it will make rarer encounters less rare overall.
+ """
+ display_name = "Normalize Encounter Rates"
+
+
class ExpModifier(Range):
"""
Multiplies gained experience by a percentage
@@ -435,7 +583,7 @@ class ExpModifier(Range):
100 is default
50 is half
200 is double
- etc...
+ etc.
"""
display_name = "Exp Modifier"
range_start = 0
@@ -450,6 +598,48 @@ class BlindTrainers(Toggle):
display_name = "Blind Trainers"
+class PurgeSpinners(Toggle):
+ """
+ Trainers will rotate in predictable patterns on a set interval instead of randomly and don't turn toward you when you run
+ """
+ display_name = "Purge Spinners"
+
+
+class MatchTrainerLevels(Choice):
+ """
+ When you start a battle with a trainer, your party's levels will be automatically set to match that trainer's highest level pokemon.
+
+ The experience you receive will match your party's average actual level, and will only be awarded when you win the battle.
+
+ This is a pseudo-replacement for a level cap and makes every trainer battle a fair fight while still allowing you to level up.
+
+ Off: The vanilla experience
+ Additive: The modifier you apply to your team is a flat bonus
+ Multiplicative: The modifier you apply to your team is a percent bonus
+ """
+ display_name = "Match Trainer Levels"
+ default = 0
+ option_off = 0
+ option_additive = 1
+ option_multiplicative = 2
+
+
+class MatchTrainerLevelsBonus(Range):
+ """
+ A level bonus (or penalty) to apply to your team when matching an opponent's levels.
+
+ When the match trainer levels option is "additive", this value is added to your team's levels during a battle.
+ For example, if this value is 5 (+5 levels), you'll have a level 25 team against a level 20 team, and a level 45 team against a level 40 team.
+
+ When the match trainer levels option is "multiplicative", this is a percent bonus.
+ For example, if this value is 5 (+5%), you'll have a level 21 team against a level 20 team, and a level 42 team against a level 40 team.
+ """
+ display_name = "Match Trainer Levels Modifier"
+ range_start = -100
+ range_end = 100
+ default = 0
+
+
class DoubleBattleChance(Range):
"""
The percent chance that a trainer with more than 1 pokemon will be converted into a double battle.
@@ -492,18 +682,34 @@ class RemoveRoadblocks(OptionSet):
"Safari Zone Construction Workers",
"Lilycove City Wailmer",
"Aqua Hideout Grunts",
- "Seafloor Cavern Aqua Grunt"
+ "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.
+ This aims to take some power away from Surf by restricting how much it allows you to access.
"""
display_name = "Extra Boulders"
+class ExtraBumpySlope(Toggle):
+ """
+ Adds a bumpy slope to Route 115 which allows access to Meteor Falls if you have the Acro Bike.
+ This aims to take some power away from Surf by adding a new way to exit the Rustboro area.
+ """
+ display_name = "Extra Bumpy Slope"
+
+
+class ModifyRoute118(Toggle):
+ """
+ Changes the layout of Route 118 so that it must be crossed with the Acro Bike instead of Surf.
+ This aims to take some power away from Surf by restricting how much it allows you to access.
+ """
+ display_name = "Modify Route 118"
+
+
class FreeFlyLocation(Toggle):
"""
Enables flying to one random location when Mom gives you the running shoes (excluding cities reachable with no items)
@@ -511,11 +717,14 @@ class FreeFlyLocation(Toggle):
display_name = "Free Fly Location"
-class FlyWithoutBadge(DefaultOnToggle):
+class HmRequirements(TextChoice):
"""
- Fly does not require the Feather Badge to use in the field
+ Sets the requirements to use HMs outside of battle
"""
- display_name = "Fly Without Badge"
+ display_name = "HM Requirements"
+ default = 0
+ option_vanilla = 0
+ option_fly_without_badge = 1
class TurboA(Toggle):
@@ -540,11 +749,53 @@ class ReceiveItemMessages(Choice):
option_none = 2
+class RemoteItems(Toggle):
+ """
+ Instead of placing your own items directly into the ROM, all items are received from the server, including items you find for yourself.
+
+ This enables co-op of a single slot and recovering more items after a lost save file (if you're so unlucky).
+ But it changes pickup behavior slightly and requires connection to the server to receive any items.
+ """
+ display_name = "Remote Items"
+
+
+class RandomizeMusic(Toggle):
+ """
+ Shuffles music played in any situation where it loops. Includes many FRLG tracks.
+ """
+ display_name = "Randomize Music"
+
+
+class RandomizeFanfares(Toggle):
+ """
+ Shuffles fanfares for item pickups, healing at the pokecenter, etc.
+
+ When this option is enabled, pressing B will interrupt most fanfares.
+ """
+ display_name = "Randomize Fanfares"
+
+
+class WonderTrading(DefaultOnToggle):
+ """
+ Allows participation in wonder trading with other players in your current multiworld. Speak with the center receptionist on the second floor of any pokecenter.
+
+ Wonder trading NEVER affects logic.
+
+ Certain aspects of a pokemon species are per-game, not per-pokemon.
+ As a result, some things are not retained during a trade, including type, ability, level up learnset, and so on.
+ Receiving a pokemon this way does not mark it as found in your pokedex.
+ Trade evolutions do not evolve this way; they retain their modified methods (level ups and item use).
+ """
+ display_name = "Wonder Trading"
+
+
class EasterEgg(FreeText):
"""
- ???
+ Enter certain phrases and something special might happen.
+
+ All secret phrases are something that could be a trendy phrase in Dewford Town. They are case insensitive.
"""
- default = "Example Passphrase"
+ default = "EMERALD SECRET"
@dataclass
@@ -555,10 +806,14 @@ class PokemonEmeraldOptions(PerGameCommonOptions):
hms: RandomizeHms
key_items: RandomizeKeyItems
bikes: RandomizeBikes
+ event_tickets: RandomizeEventTickets
rods: RandomizeRods
overworld_items: RandomizeOverworldItems
hidden_items: RandomizeHiddenItems
npc_gifts: RandomizeNpcGifts
+ berry_trees: RandomizeBerryTrees
+ dexsanity: Dexsanity
+ trainersanity: Trainersanity
item_pool_type: ItemPoolType
require_itemfinder: HiddenItemsRequireItemfinder
@@ -567,14 +822,19 @@ class PokemonEmeraldOptions(PerGameCommonOptions):
elite_four_count: EliteFourCount
norman_requirement: NormanRequirement
norman_count: NormanCount
+ legendary_hunt_catch: LegendaryHuntCatch
+ legendary_hunt_count: LegendaryHuntCount
+ allowed_legendary_hunt_encounters: AllowedLegendaryHuntEncounters
wild_pokemon: RandomizeWildPokemon
- allow_wild_legendaries: AllowWildLegendaries
+ wild_encounter_blacklist: WildEncounterBlacklist
starters: RandomizeStarters
- allow_starter_legendaries: AllowStarterLegendaries
+ starter_blacklist: StarterBlacklist
trainer_parties: RandomizeTrainerParties
- allow_trainer_legendaries: AllowTrainerLegendaries
- static_encounters: RandomizeStaticEncounters
+ trainer_party_blacklist: TrainerPartyBlacklist
+ force_fully_evolved: ForceFullyEvolved
+ legendary_encounters: RandomizeLegendaryEncounters
+ misc_pokemon: RandomizeMiscPokemon
types: RandomizeTypes
abilities: RandomizeAbilities
ability_blacklist: AbilityBlacklist
@@ -582,25 +842,38 @@ class PokemonEmeraldOptions(PerGameCommonOptions):
level_up_moves: LevelUpMoves
move_match_type_bias: MoveMatchTypeBias
move_normal_type_bias: MoveNormalTypeBias
- tm_compatibility: TmCompatibility
+ tm_tutor_compatibility: TmTutorCompatibility
hm_compatibility: HmCompatibility
- tm_moves: TmMoves
- reusable_tms: ReusableTms
+ tm_tutor_moves: TmTutorMoves
+ reusable_tms_tutors: ReusableTmsTutors
+ move_blacklist: MoveBlacklist
min_catch_rate: MinCatchRate
guaranteed_catch: GuaranteedCatch
+ normalize_encounter_rates: NormalizeEncounterRates
exp_modifier: ExpModifier
blind_trainers: BlindTrainers
+ purge_spinners: PurgeSpinners
+ match_trainer_levels: MatchTrainerLevels
+ match_trainer_levels_bonus: MatchTrainerLevelsBonus
double_battle_chance: DoubleBattleChance
better_shops: BetterShops
- enable_ferry: EnableFerry
remove_roadblocks: RemoveRoadblocks
extra_boulders: ExtraBoulders
+ extra_bumpy_slope: ExtraBumpySlope
+ modify_118: ModifyRoute118
free_fly_location: FreeFlyLocation
- fly_without_badge: FlyWithoutBadge
+ hm_requirements: HmRequirements
turbo_a: TurboA
receive_item_messages: ReceiveItemMessages
+ remote_items: RemoteItems
+ music: RandomizeMusic
+ fanfares: RandomizeFanfares
+
+ death_link: DeathLink
+
+ enable_wonder_trading: WonderTrading
easter_egg: EasterEgg
diff --git a/worlds/pokemon_emerald/pokemon.py b/worlds/pokemon_emerald/pokemon.py
index 13c92ddc09..8df15bbb2b 100644
--- a/worlds/pokemon_emerald/pokemon.py
+++ b/worlds/pokemon_emerald/pokemon.py
@@ -1,16 +1,23 @@
"""
Functions related to pokemon species and moves
"""
-import time
+import functools
from typing import TYPE_CHECKING, Dict, List, Set, Optional, Tuple
-from .data import SpeciesData, data
+from Options import Toggle
+
+from .data import NUM_REAL_SPECIES, POSTGAME_MAPS, EncounterTableData, LearnsetMove, MiscPokemonData, SpeciesData, data
+from .options import (Goal, HmCompatibility, LevelUpMoves, RandomizeAbilities, RandomizeLegendaryEncounters,
+ RandomizeMiscPokemon, RandomizeStarters, RandomizeTypes, RandomizeWildPokemon,
+ TmTutorCompatibility)
+from .util import bool_array_to_int, get_easter_egg, int_to_bool_array
if TYPE_CHECKING:
from random import Random
+ from . import PokemonEmeraldWorld
-_damaging_moves = frozenset({
+_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,
@@ -26,10 +33,13 @@ _damaging_moves = frozenset({
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
+ 340, 341, 342, 343, 344, 345, 348, 350, 351, 352, 353, 354,
})
+"""IDs for moves that safely deal direct damage, for avoiding putting the
+player in a situation where they can only use status moves, or are forced
+to faint themselves, or something of that nature."""
-_move_types = [
+_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,
@@ -53,82 +63,35 @@ _move_types = [
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
+ 12, 11, 14, 12, 16, 5, 13, 11, 8, 14,
]
+"""Maps move ids to the type of that move"""
-_moves_by_type: Dict[int, List[int]] = {}
-for move, type in enumerate(_move_types):
- _moves_by_type.setdefault(type, []).append(move)
+_MOVES_BY_TYPE: Dict[int, List[int]] = {}
+"""Categorizes move ids by their type"""
+for move, type in enumerate(_MOVE_TYPES):
+ _MOVES_BY_TYPE.setdefault(type, []).append(move)
-_move_blacklist = frozenset({
+HM_MOVES = frozenset({
+ data.constants["MOVE_CUT"],
+ data.constants["MOVE_FLY"],
+ data.constants["MOVE_SURF"],
+ data.constants["MOVE_STRENGTH"],
+ data.constants["MOVE_FLASH"],
+ data.constants["MOVE_ROCK_SMASH"],
+ data.constants["MOVE_WATERFALL"],
+ data.constants["MOVE_DIVE"],
+})
+
+_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'
-})
+} | HM_MOVES)
-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)
+@functools.lru_cache(maxsize=386)
+def get_species_id_by_label(label: str) -> int:
+ return next(species.species_id for species in data.species.values() if species.label == label)
def get_random_type(random: "Random") -> int:
@@ -145,7 +108,7 @@ def get_random_move(
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())
+ expanded_blacklist = _MOVE_BLACKLIST | (blacklist if blacklist is not None else set())
bias = random.random() * 100
if bias < type_bias:
@@ -175,8 +138,8 @@ def get_random_move(
if type_target is None:
possible_moves = [i for i in range(data.constants["MOVES_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]
+ 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)
@@ -185,12 +148,549 @@ def get_random_move(
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)
+ 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
+
+
+def filter_species_by_nearby_bst(species: List[SpeciesData], target_bst: int) -> List[SpeciesData]:
+ # Sort by difference in bst, then chop off the tail of the list that's more than
+ # 10% different. If that leaves the list empty, increase threshold to 20%, then 30%, etc.
+ species = sorted(species, key=lambda species: abs(sum(species.base_stats) - target_bst))
+ cutoff_index = 0
+ max_percent_different = 10
+ while cutoff_index == 0 and max_percent_different < 10000:
+ while cutoff_index < len(species) and abs(sum(species[cutoff_index].base_stats) - target_bst) < target_bst * (max_percent_different / 100):
+ cutoff_index += 1
+ max_percent_different += 10
+
+ return species[:cutoff_index + 1]
+
+
+def randomize_types(world: "PokemonEmeraldWorld") -> None:
+ if world.options.types == RandomizeTypes.option_shuffle:
+ type_map = list(range(18))
+ world.random.shuffle(type_map)
+
+ # We never want to map to the ??? type, so swap whatever index maps to ??? with ???
+ # which forces ??? to always map to itself. 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 world.modified_species.values():
+ species.types = (type_map[species.types[0]], type_map[species.types[1]])
+ elif world.options.types == RandomizeTypes.option_completely_random:
+ for species in world.modified_species.values():
+ new_type_1 = get_random_type(world.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(world.random)
+
+ species.types = (new_type_1, new_type_2)
+ elif world.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 world.modified_species.values():
+ 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))
+ world.random.shuffle(type_map)
+
+ # We never want to map to the ??? type, so swap whatever index maps to ??? with ???
+ # which forces ??? to always map to itself. 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 += [world.modified_species[evo.species_id] for evo in evolution.evolutions]
+
+
+def randomize_wild_encounters(world: "PokemonEmeraldWorld") -> None:
+ if world.options.wild_pokemon == RandomizeWildPokemon.option_vanilla:
+ return
+
+ from collections import defaultdict
+
+ should_match_bst = world.options.wild_pokemon in {
+ RandomizeWildPokemon.option_match_base_stats,
+ RandomizeWildPokemon.option_match_base_stats_and_type,
+ }
+ should_match_type = world.options.wild_pokemon in {
+ RandomizeWildPokemon.option_match_type,
+ RandomizeWildPokemon.option_match_base_stats_and_type,
+ }
+ catch_em_all = world.options.dexsanity == Toggle.option_true
+
+ catch_em_all_placed = set()
+
+ priority_species = [data.constants["SPECIES_WAILORD"], data.constants["SPECIES_RELICANTH"]]
+
+ # Loop over map data to modify their encounter slots
+ map_names = list(world.modified_maps.keys())
+ world.random.shuffle(map_names)
+ for map_name in map_names:
+ placed_priority_species = False
+ map_data = world.modified_maps[map_name]
+
+ 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:
+ # Create a map from the original species to new species
+ # instead of just randomizing every slot.
+ # Force area 1-to-1 mapping, in other words.
+ species_old_to_new_map: Dict[int, int] = {}
+ for species_id in table.slots:
+ if species_id not in species_old_to_new_map:
+ if not placed_priority_species and len(priority_species) > 0:
+ new_species_id = priority_species.pop()
+ placed_priority_species = True
+ else:
+ original_species = data.species[species_id]
+
+ # Construct progressive tiers of blacklists that can be peeled back if they
+ # collectively cover too much of the pokedex. A lower index in `blacklists`
+ # indicates a more important set of species to avoid. Entries at `0` will
+ # always be blacklisted.
+ blacklists: Dict[int, List[Set[int]]] = defaultdict(list)
+
+ # Blacklist pokemon already on this table
+ blacklists[0].append(set(species_old_to_new_map.values()))
+
+ # If doing legendary hunt, blacklist Latios from wild encounters so
+ # it can be tracked as the roamer. Otherwise it may be impossible
+ # to tell whether a highlighted route is the roamer or a wild
+ # encounter.
+ if world.options.goal == Goal.option_legendary_hunt:
+ blacklists[0].append({data.constants["SPECIES_LATIOS"]})
+
+ # If dexsanity/catch 'em all mode, blacklist already placed species
+ # until every species has been placed once
+ if catch_em_all and len(catch_em_all_placed) < NUM_REAL_SPECIES:
+ blacklists[1].append(catch_em_all_placed)
+
+ # Blacklist from player options
+ blacklists[2].append(world.blacklisted_wilds)
+
+ # Type matching blacklist
+ if should_match_type:
+ blacklists[3].append({
+ species.species_id
+ for species in world.modified_species.values()
+ if not bool(set(species.types) & set(original_species.types))
+ })
+
+ merged_blacklist: Set[int] = set()
+ for max_priority in reversed(sorted(blacklists.keys())):
+ merged_blacklist = set()
+ for priority in blacklists.keys():
+ if priority <= max_priority:
+ for blacklist in blacklists[priority]:
+ merged_blacklist |= blacklist
+
+ if len(merged_blacklist) < NUM_REAL_SPECIES:
+ break
+ else:
+ raise RuntimeError("This should never happen")
+
+ candidates = [
+ species
+ for species in world.modified_species.values()
+ if species.species_id not in merged_blacklist
+ ]
+
+ if should_match_bst:
+ candidates = filter_species_by_nearby_bst(candidates, sum(original_species.base_stats))
+
+ new_species_id = world.random.choice(candidates).species_id
+ species_old_to_new_map[species_id] = new_species_id
+
+ if catch_em_all and map_data.name not in POSTGAME_MAPS:
+ catch_em_all_placed.add(new_species_id)
+
+ # Actually create the new list of slots and encounter table
+ 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.address)
+
+ # Rename event items for the new wild pokemon species
+ slot_category: Tuple[str, List[Tuple[Optional[str], range]]] = [
+ ("LAND", [(None, range(0, 12))]),
+ ("WATER", [(None, range(0, 5))]),
+ ("FISHING", [("OLD_ROD", range(0, 2)), ("GOOD_ROD", range(2, 5)), ("SUPER_ROD", range(5, 10))]),
+ ][i]
+ for j, new_species_id in enumerate(new_slots):
+ # Get the subcategory for rods
+ subcategory = next(sc for sc in slot_category[1] if j in sc[1])
+ subcategory_species = []
+ for k in subcategory[1]:
+ if new_slots[k] not in subcategory_species:
+ subcategory_species.append(new_slots[k])
+
+ # Create the name of the location that corresponds to this encounter slot
+ # Fishing locations include the rod name
+ subcategory_str = "" if subcategory[0] is None else "_" + subcategory[0]
+ encounter_location_index = subcategory_species.index(new_species_id) + 1
+ encounter_location_name = f"{map_data.name}_{slot_category[0]}_ENCOUNTERS{subcategory_str}_{encounter_location_index}"
+ try:
+ # Get the corresponding location and change the event name to reflect the new species
+ slot_location = world.multiworld.get_location(encounter_location_name, world.player)
+ slot_location.item.name = f"CATCH_{data.species[new_species_id].name}"
+ except KeyError:
+ pass # Map probably isn't included; should be careful here about bad encounter location names
+
+ map_data.land_encounters = new_encounters[0]
+ map_data.water_encounters = new_encounters[1]
+ map_data.fishing_encounters = new_encounters[2]
+
+
+def randomize_abilities(world: "PokemonEmeraldWorld") -> None:
+ if world.options.abilities == RandomizeAbilities.option_vanilla:
+ return
+
+ # Creating list of potential abilities
+ ability_label_to_value = {ability.label.lower(): ability.ability_id for ability in data.abilities}
+
+ ability_blacklist_labels = {"cacophony"} # Cacophony is defined and has a description, but no effect
+ option_ability_blacklist = world.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 data.abilities if a.ability_id not in ability_blacklist]
+
+ if world.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 world.modified_species.values():
+ 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
+ # 0 is the value for "no ability"; species with only 1 ability have the other set to 0
+ new_abilities = (
+ 0 if old_abilities[0] == 0 else world.random.choice(ability_whitelist),
+ 0 if old_abilities[1] == 0 else world.random.choice(ability_whitelist)
+ )
+
+ # Recursively modify the abilities of anything that evolves from this pokemon
+ # until the evolution doesn't have a matching set of abilities
+ 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 += [
+ world.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 world.modified_species.values():
+ old_abilities = species.abilities
+ # 0 is the value for "no ability"; species with only 1 ability have the other set to 0
+ new_abilities = (
+ 0 if old_abilities[0] == 0 else world.random.choice(ability_whitelist),
+ 0 if old_abilities[1] == 0 else world.random.choice(ability_whitelist)
+ )
+
+ species.abilities = new_abilities
+
+
+def randomize_learnsets(world: "PokemonEmeraldWorld") -> None:
+ if world.options.level_up_moves == LevelUpMoves.option_vanilla:
+ return
+
+ type_bias = world.options.move_match_type_bias.value
+ normal_bias = world.options.move_normal_type_bias.value
+
+ for species in world.modified_species.values():
+ old_learnset = species.learnset
+ new_learnset: List[LearnsetMove] = []
+
+ # All species have 4 moves at level 0. Up to 3 of them are blank spaces reserved for the
+ # start with four moves option. This either replaces those moves or leaves it blank
+ # and moves the cursor.
+ cursor = 0
+ while old_learnset[cursor].move_id == 0:
+ if world.options.level_up_moves == LevelUpMoves.option_start_with_four_moves:
+ new_move = get_random_move(world.random,
+ {move.move_id for move in new_learnset} | world.blacklisted_moves,
+ type_bias, normal_bias, species.types)
+ else:
+ new_move = 0
+ new_learnset.append(LearnsetMove(old_learnset[cursor].level, new_move))
+ cursor += 1
+
+ # All moves from here onward are actual moves.
+ while cursor < len(old_learnset):
+ # Guarantees the starter has a good damaging move; i will always be <=3 when entering this loop
+ if cursor == 3:
+ new_move = get_random_damaging_move(world.random, {move.move_id for move in new_learnset})
+ else:
+ new_move = get_random_move(world.random,
+ {move.move_id for move in new_learnset} | world.blacklisted_moves,
+ type_bias, normal_bias, species.types)
+ new_learnset.append(LearnsetMove(old_learnset[cursor].level, new_move))
+ cursor += 1
+
+ species.learnset = new_learnset
+
+
+def randomize_starters(world: "PokemonEmeraldWorld") -> None:
+ if world.options.starters == RandomizeStarters.option_vanilla:
+ return
+
+ should_match_bst = world.options.starters in {
+ RandomizeStarters.option_match_base_stats,
+ RandomizeStarters.option_match_base_stats_and_type,
+ }
+ should_match_type = world.options.starters in {
+ RandomizeStarters.option_match_type,
+ RandomizeStarters.option_match_base_stats_and_type,
+ }
+
+ new_starters: List[SpeciesData] = []
+
+ easter_egg_type, easter_egg_value = get_easter_egg(world.options.easter_egg.value)
+ if easter_egg_type == 1:
+ new_starters = [
+ world.modified_species[easter_egg_value],
+ world.modified_species[easter_egg_value],
+ world.modified_species[easter_egg_value]
+ ]
+ else:
+ for i, starter_id in enumerate(data.starters):
+ original_starter = data.species[starter_id]
+ type_blacklist = {
+ species.species_id
+ for species in world.modified_species.values()
+ if not bool(set(species.types) & set(original_starter.types))
+ } if should_match_type else set()
+
+ merged_blacklist = set(s.species_id for s in new_starters) | world.blacklisted_starters | type_blacklist
+ if len(merged_blacklist) == NUM_REAL_SPECIES:
+ merged_blacklist = set(s.species_id for s in new_starters) | world.blacklisted_starters
+ if len(merged_blacklist) == NUM_REAL_SPECIES:
+ merged_blacklist = set(s.species_id for s in new_starters)
+
+ candidates = [
+ species
+ for species in world.modified_species.values()
+ if species.species_id not in merged_blacklist
+ ]
+
+ if should_match_bst:
+ candidates = filter_species_by_nearby_bst(candidates, sum(original_starter.base_stats))
+
+ new_starters.append(world.random.choice(candidates))
+
+ world.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
+ # (trainer name, index of starter in team, whether the starter is evolved)
+ 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 = world.random.choice(potential_evolutions)
+
+ for trainer_name, starter_position, is_evolved in rival_teams[i]:
+ trainer_data = world.modified_trainers[data.constants[trainer_name]]
+ trainer_data.party.pokemon[starter_position].species_id = picked_evolution if is_evolved else starter.species_id
+
+
+def randomize_legendary_encounters(world: "PokemonEmeraldWorld") -> None:
+ if world.options.legendary_encounters == RandomizeLegendaryEncounters.option_vanilla:
+ return
+ elif world.options.legendary_encounters == RandomizeLegendaryEncounters.option_shuffle:
+ # Just take the existing species and shuffle them
+ shuffled_species = [encounter.species_id for encounter in data.legendary_encounters]
+ world.random.shuffle(shuffled_species)
+
+ for i, encounter in enumerate(data.legendary_encounters):
+ world.modified_legendary_encounters.append(MiscPokemonData(
+ shuffled_species[i],
+ encounter.address
+ ))
+ else:
+ should_match_bst = world.options.legendary_encounters in {
+ RandomizeLegendaryEncounters.option_match_base_stats,
+ RandomizeLegendaryEncounters.option_match_base_stats_and_type
+ }
+ should_match_type = world.options.legendary_encounters in {
+ RandomizeLegendaryEncounters.option_match_type,
+ RandomizeLegendaryEncounters.option_match_base_stats_and_type
+ }
+
+ for encounter in data.legendary_encounters:
+ original_species = world.modified_species[encounter.species_id]
+
+ candidates = list(world.modified_species.values())
+ if should_match_type:
+ candidates = [
+ species
+ for species in candidates
+ if bool(set(species.types) & set(original_species.types))
+ ]
+ if should_match_bst:
+ candidates = filter_species_by_nearby_bst(candidates, sum(original_species.base_stats))
+
+ world.modified_legendary_encounters.append(MiscPokemonData(
+ world.random.choice(candidates).species_id,
+ encounter.address
+ ))
+
+
+def randomize_misc_pokemon(world: "PokemonEmeraldWorld") -> None:
+ if world.options.misc_pokemon == RandomizeMiscPokemon.option_vanilla:
+ return
+ elif world.options.misc_pokemon == RandomizeMiscPokemon.option_shuffle:
+ # Just take the existing species and shuffle them
+ shuffled_species = [encounter.species_id for encounter in data.misc_pokemon]
+ world.random.shuffle(shuffled_species)
+
+ world.modified_misc_pokemon = []
+ for i, encounter in enumerate(data.misc_pokemon):
+ world.modified_misc_pokemon.append(MiscPokemonData(
+ shuffled_species[i],
+ encounter.address
+ ))
+ else:
+ should_match_bst = world.options.misc_pokemon in {
+ RandomizeMiscPokemon.option_match_base_stats,
+ RandomizeMiscPokemon.option_match_base_stats_and_type,
+ }
+ should_match_type = world.options.misc_pokemon in {
+ RandomizeMiscPokemon.option_match_type,
+ RandomizeMiscPokemon.option_match_base_stats_and_type,
+ }
+
+ for encounter in data.misc_pokemon:
+ original_species = world.modified_species[encounter.species_id]
+
+ candidates = list(world.modified_species.values())
+ if should_match_type:
+ candidates = [
+ species
+ for species in candidates
+ if bool(set(species.types) & set(original_species.types))
+ ]
+ if should_match_bst:
+ candidates = filter_species_by_nearby_bst(candidates, sum(original_species.base_stats))
+
+ player_filtered_candidates = [
+ species
+ for species in candidates
+ if species.species_id not in world.blacklisted_wilds
+ ]
+ if len(player_filtered_candidates) > 0:
+ candidates = player_filtered_candidates
+
+ world.modified_misc_pokemon.append(MiscPokemonData(
+ world.random.choice(candidates).species_id,
+ encounter.address
+ ))
+
+
+def randomize_tm_hm_compatibility(world: "PokemonEmeraldWorld") -> None:
+ for species in world.modified_species.values():
+ # TM and HM compatibility is stored as a 64-bit bitfield
+ combatibility_array = int_to_bool_array(species.tm_hm_compatibility)
+
+ # TMs
+ if world.options.tm_tutor_compatibility != TmTutorCompatibility.special_range_names["vanilla"]:
+ for i in range(0, 50):
+ combatibility_array[i] = world.random.random() < world.options.tm_tutor_compatibility / 100
+
+ # HMs
+ if world.options.hm_compatibility != HmCompatibility.special_range_names["vanilla"]:
+ for i in range(50, 58):
+ combatibility_array[i] = world.random.random() < world.options.hm_compatibility / 100
+
+ species.tm_hm_compatibility = bool_array_to_int(combatibility_array)
diff --git a/worlds/pokemon_emerald/regions.py b/worlds/pokemon_emerald/regions.py
index e8f6d26e08..b74f5f5ebf 100644
--- a/worlds/pokemon_emerald/regions.py
+++ b/worlds/pokemon_emerald/regions.py
@@ -1,9 +1,9 @@
"""
Functions related to AP regions for Pokemon Emerald (see ./data/regions for region definitions)
"""
-from typing import TYPE_CHECKING, Dict, List, Tuple
+from typing import TYPE_CHECKING, Callable, Dict, List, Optional, Tuple
-from BaseClasses import ItemClassification, Region
+from BaseClasses import CollectionState, ItemClassification, Region
from .data import data
from .items import PokemonEmeraldItem
@@ -18,9 +18,80 @@ 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.
"""
+ # Used in connect_to_map_encounters. Splits encounter categories into "subcategories" and gives them names
+ # and rules so the rods can only access their specific slots.
+ encounter_categories: Dict[str, List[Tuple[Optional[str], range, Optional[Callable[[CollectionState], bool]]]]] = {
+ "LAND": [(None, range(0, 12), None)],
+ "WATER": [(None, range(0, 5), None)],
+ "FISHING": [
+ ("OLD_ROD", range(0, 2), lambda state: state.has("Old Rod", world.player)),
+ ("GOOD_ROD", range(2, 5), lambda state: state.has("Good Rod", world.player)),
+ ("SUPER_ROD", range(5, 10), lambda state: state.has("Super Rod", world.player)),
+ ],
+ }
+
+ def connect_to_map_encounters(region: Region, map_name: str, include_slots: Tuple[bool, bool, bool]):
+ """
+ Connects the provided region to the corresponding wild encounters for the given parent map.
+
+ Each in-game map may have a non-physical Region for encountering wild pokemon in each of the three categories
+ land, water, and fishing. Region data defines whether a given region includes places where those encounters can
+ be accessed (i.e. whether the region has tall grass, a river bank, is on water, etc.).
+
+ These regions are created lazily and dynamically so as not to bother with unused maps.
+ """
+ # For each of land, water, and fishing, connect the region if indicated by include_slots
+ for i, encounter_category in enumerate(encounter_categories.items()):
+ if include_slots[i]:
+ region_name = f"{map_name}_{encounter_category[0]}_ENCOUNTERS"
+
+ # If the region hasn't been created yet, create it now
+ try:
+ encounter_region = world.multiworld.get_region(region_name, world.player)
+ except KeyError:
+ encounter_region = Region(region_name, world.player, world.multiworld)
+ encounter_slots = getattr(data.maps[map_name], f"{encounter_category[0].lower()}_encounters").slots
+
+ # Subcategory is for splitting fishing rods; land and water only have one subcategory
+ for subcategory in encounter_category[1]:
+ # Want to create locations per species, not per slot
+ # encounter_categories includes info on which slots belong to which subcategory
+ unique_species = []
+ for j, species_id in enumerate(encounter_slots):
+ if j in subcategory[1] and not species_id in unique_species:
+ unique_species.append(species_id)
+
+ # Create a location for the species
+ for j, species_id in enumerate(unique_species):
+ encounter_location = PokemonEmeraldLocation(
+ world.player,
+ f"{region_name}{'_' + subcategory[0] if subcategory[0] is not None else ''}_{j + 1}",
+ None,
+ encounter_region
+ )
+ encounter_location.show_in_spoiler = False
+
+ # Add access rule
+ if subcategory[2] is not None:
+ encounter_location.access_rule = subcategory[2]
+
+ # Fill the location with an event for catching that species
+ encounter_location.place_locked_item(PokemonEmeraldItem(
+ f"CATCH_{data.species[species_id].name}",
+ ItemClassification.progression_skip_balancing,
+ None,
+ world.player
+ ))
+ encounter_region.locations.append(encounter_location)
+
+ # Add the new encounter region to the multiworld
+ world.multiworld.regions.append(encounter_region)
+
+ # Encounter region exists, just connect to it
+ region.connect(encounter_region, f"{region.name} -> {region_name}")
+
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)
@@ -40,6 +111,9 @@ def create_regions(world: "PokemonEmeraldWorld") -> Dict[str, Region]:
regions[region_name] = new_region
+ connect_to_map_encounters(new_region, region_data.parent_map.name,
+ (region_data.has_grass, region_data.has_water, region_data.has_fishing))
+
for name, source, dest in connections:
regions[source].connect(regions[dest], name)
diff --git a/worlds/pokemon_emerald/rom.py b/worlds/pokemon_emerald/rom.py
index 156410553c..60318c306d 100644
--- a/worlds/pokemon_emerald/rom.py
+++ b/worlds/pokemon_emerald/rom.py
@@ -1,24 +1,110 @@
"""
Classes and functions related to creating a ROM patch
"""
+import copy
import os
import pkgutil
-from typing import TYPE_CHECKING, List, Tuple
+from typing import TYPE_CHECKING, Dict, List, Tuple
import bsdiff4
from worlds.Files import APDeltaPatch
from settings import get_settings
-from .data import PokemonEmeraldData, TrainerPokemonDataTypeEnum, data
+from .data import TrainerPokemonDataTypeEnum, BASE_OFFSET, data
from .items import reverse_offset_item_value
-from .options import RandomizeWildPokemon, RandomizeTrainerParties, EliteFourRequirement, NormanRequirement
-from .pokemon import get_random_species
+from .options import (RandomizeWildPokemon, RandomizeTrainerParties, EliteFourRequirement, NormanRequirement,
+ MatchTrainerLevels)
+from .pokemon import HM_MOVES, get_random_move
+from .util import bool_array_to_int, encode_string, get_easter_egg
if TYPE_CHECKING:
from . import PokemonEmeraldWorld
+_LOOPING_MUSIC = [
+ "MUS_GSC_ROUTE38", "MUS_GSC_PEWTER", "MUS_ROUTE101", "MUS_ROUTE110", "MUS_ROUTE120", "MUS_ROUTE122",
+ "MUS_PETALBURG", "MUS_OLDALE", "MUS_GYM", "MUS_SURF", "MUS_PETALBURG_WOODS", "MUS_LILYCOVE_MUSEUM",
+ "MUS_OCEANIC_MUSEUM", "MUS_ENCOUNTER_GIRL", "MUS_ENCOUNTER_MALE", "MUS_ABANDONED_SHIP", "MUS_FORTREE",
+ "MUS_BIRCH_LAB", "MUS_B_TOWER_RS", "MUS_ENCOUNTER_SWIMMER", "MUS_CAVE_OF_ORIGIN", "MUS_ENCOUNTER_RICH",
+ "MUS_VERDANTURF", "MUS_RUSTBORO", "MUS_POKE_CENTER", "MUS_CAUGHT", "MUS_VICTORY_GYM_LEADER", "MUS_VICTORY_LEAGUE",
+ "MUS_VICTORY_WILD", "MUS_C_VS_LEGEND_BEAST", "MUS_ROUTE104", "MUS_ROUTE119", "MUS_CYCLING", "MUS_POKE_MART",
+ "MUS_LITTLEROOT", "MUS_MT_CHIMNEY", "MUS_ENCOUNTER_FEMALE", "MUS_LILYCOVE", "MUS_DESERT", "MUS_HELP",
+ "MUS_UNDERWATER", "MUS_VICTORY_TRAINER", "MUS_ENCOUNTER_MAY", "MUS_ENCOUNTER_INTENSE", "MUS_ENCOUNTER_COOL",
+ "MUS_ROUTE113", "MUS_ENCOUNTER_AQUA", "MUS_FOLLOW_ME", "MUS_ENCOUNTER_BRENDAN", "MUS_EVER_GRANDE",
+ "MUS_ENCOUNTER_SUSPICIOUS", "MUS_VICTORY_AQUA_MAGMA", "MUS_GAME_CORNER", "MUS_DEWFORD", "MUS_SAFARI_ZONE",
+ "MUS_VICTORY_ROAD", "MUS_AQUA_MAGMA_HIDEOUT", "MUS_SAILING", "MUS_MT_PYRE", "MUS_SLATEPORT", "MUS_MT_PYRE_EXTERIOR",
+ "MUS_SCHOOL", "MUS_HALL_OF_FAME", "MUS_FALLARBOR", "MUS_SEALED_CHAMBER", "MUS_CONTEST_WINNER", "MUS_CONTEST",
+ "MUS_ENCOUNTER_MAGMA", "MUS_ABNORMAL_WEATHER", "MUS_WEATHER_GROUDON", "MUS_SOOTOPOLIS", "MUS_HALL_OF_FAME_ROOM",
+ "MUS_TRICK_HOUSE", "MUS_ENCOUNTER_TWINS", "MUS_ENCOUNTER_ELITE_FOUR", "MUS_ENCOUNTER_HIKER", "MUS_CONTEST_LOBBY",
+ "MUS_ENCOUNTER_INTERVIEWER", "MUS_ENCOUNTER_CHAMPION", "MUS_B_FRONTIER", "MUS_B_ARENA", "MUS_B_PYRAMID",
+ "MUS_B_PYRAMID_TOP", "MUS_B_PALACE", "MUS_B_TOWER", "MUS_B_DOME", "MUS_B_PIKE", "MUS_B_FACTORY", "MUS_VS_RAYQUAZA",
+ "MUS_VS_FRONTIER_BRAIN", "MUS_VS_MEW", "MUS_B_DOME_LOBBY", "MUS_VS_WILD", "MUS_VS_AQUA_MAGMA", "MUS_VS_TRAINER",
+ "MUS_VS_GYM_LEADER", "MUS_VS_CHAMPION", "MUS_VS_REGI", "MUS_VS_KYOGRE_GROUDON", "MUS_VS_RIVAL", "MUS_VS_ELITE_FOUR",
+ "MUS_VS_AQUA_MAGMA_LEADER", "MUS_RG_FOLLOW_ME", "MUS_RG_GAME_CORNER", "MUS_RG_ROCKET_HIDEOUT", "MUS_RG_GYM",
+ "MUS_RG_CINNABAR", "MUS_RG_LAVENDER", "MUS_RG_CYCLING", "MUS_RG_ENCOUNTER_ROCKET", "MUS_RG_ENCOUNTER_GIRL",
+ "MUS_RG_ENCOUNTER_BOY", "MUS_RG_HALL_OF_FAME", "MUS_RG_VIRIDIAN_FOREST", "MUS_RG_MT_MOON", "MUS_RG_POKE_MANSION",
+ "MUS_RG_ROUTE1", "MUS_RG_ROUTE24", "MUS_RG_ROUTE3", "MUS_RG_ROUTE11", "MUS_RG_VICTORY_ROAD", "MUS_RG_VS_GYM_LEADER",
+ "MUS_RG_VS_TRAINER", "MUS_RG_VS_WILD", "MUS_RG_VS_CHAMPION", "MUS_RG_PALLET", "MUS_RG_OAK_LAB", "MUS_RG_OAK",
+ "MUS_RG_POKE_CENTER", "MUS_RG_SS_ANNE", "MUS_RG_SURF", "MUS_RG_POKE_TOWER", "MUS_RG_SILPH", "MUS_RG_FUCHSIA",
+ "MUS_RG_CELADON", "MUS_RG_VICTORY_TRAINER", "MUS_RG_VICTORY_WILD", "MUS_RG_VICTORY_GYM_LEADER", "MUS_RG_VERMILLION",
+ "MUS_RG_PEWTER", "MUS_RG_ENCOUNTER_RIVAL", "MUS_RG_RIVAL_EXIT", "MUS_RG_CAUGHT", "MUS_RG_POKE_JUMP",
+ "MUS_RG_UNION_ROOM", "MUS_RG_NET_CENTER", "MUS_RG_MYSTERY_GIFT", "MUS_RG_BERRY_PICK", "MUS_RG_SEVII_CAVE",
+ "MUS_RG_TEACHY_TV_SHOW", "MUS_RG_SEVII_ROUTE", "MUS_RG_SEVII_DUNGEON", "MUS_RG_SEVII_123", "MUS_RG_SEVII_45",
+ "MUS_RG_SEVII_67", "MUS_RG_VS_DEOXYS", "MUS_RG_VS_MEWTWO", "MUS_RG_VS_LEGEND", "MUS_RG_ENCOUNTER_GYM_LEADER",
+ "MUS_RG_ENCOUNTER_DEOXYS", "MUS_RG_TRAINER_TOWER", "MUS_RG_SLOW_PALLET", "MUS_RG_TEACHY_TV_MENU",
+]
+
+_FANFARES: Dict[str, int] = {
+ "MUS_LEVEL_UP": 80,
+ "MUS_OBTAIN_ITEM": 160,
+ "MUS_EVOLVED": 220,
+ "MUS_OBTAIN_TMHM": 220,
+ "MUS_HEAL": 160,
+ "MUS_OBTAIN_BADGE": 340,
+ "MUS_MOVE_DELETED": 180,
+ "MUS_OBTAIN_BERRY": 120,
+ "MUS_AWAKEN_LEGEND": 710,
+ "MUS_SLOTS_JACKPOT": 250,
+ "MUS_SLOTS_WIN": 150,
+ "MUS_TOO_BAD": 160,
+ "MUS_RG_POKE_FLUTE": 450,
+ "MUS_RG_OBTAIN_KEY_ITEM": 170,
+ "MUS_RG_DEX_RATING": 196,
+ "MUS_OBTAIN_B_POINTS": 313,
+ "MUS_OBTAIN_SYMBOL": 318,
+ "MUS_REGISTER_MATCH_CALL": 135,
+}
+
+CAVE_EVENT_NAME_TO_ID = {
+ "TERRA_CAVE_ROUTE_114_1": 1,
+ "TERRA_CAVE_ROUTE_114_2": 2,
+ "TERRA_CAVE_ROUTE_115_1": 3,
+ "TERRA_CAVE_ROUTE_115_2": 4,
+ "TERRA_CAVE_ROUTE_116_1": 5,
+ "TERRA_CAVE_ROUTE_116_2": 6,
+ "TERRA_CAVE_ROUTE_118_1": 7,
+ "TERRA_CAVE_ROUTE_118_2": 8,
+ "MARINE_CAVE_ROUTE_105_1": 9,
+ "MARINE_CAVE_ROUTE_105_2": 10,
+ "MARINE_CAVE_ROUTE_125_1": 11,
+ "MARINE_CAVE_ROUTE_125_2": 12,
+ "MARINE_CAVE_ROUTE_127_1": 13,
+ "MARINE_CAVE_ROUTE_127_2": 14,
+ "MARINE_CAVE_ROUTE_129_1": 15,
+ "MARINE_CAVE_ROUTE_129_2": 16,
+}
+
+
+def _set_bytes_le(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
+
+
class PokemonEmeraldDeltaPatch(APDeltaPatch):
game = "Pokemon Emerald"
hash = "605b89b67018abcea91e693a4dd25be3"
@@ -30,60 +116,128 @@ class PokemonEmeraldDeltaPatch(APDeltaPatch):
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:
+def create_patch(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
+ # Set free fly location
+ if world.options.free_fly_location:
+ _set_bytes_le(
+ patched_rom,
+ data.rom_addresses["gArchipelagoOptions"] + 0x20,
+ 1,
+ world.free_fly_location_id
+ )
+
+ location_info: List[Tuple[int, int, str]] = []
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)
- )
+ if location.item is None:
+ continue
+
+ # Set local item values
+ if not world.options.remote_items and location.item.player == world.player:
+ if type(location.item_address) is int:
+ _set_bytes_le(
+ patched_rom,
+ location.item_address,
+ 2,
+ reverse_offset_item_value(location.item.code)
+ )
+ elif type(location.item_address) is list:
+ for address in location.item_address:
+ _set_bytes_le(patched_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"]
- )
+ if type(location.item_address) is int:
+ _set_bytes_le(
+ patched_rom,
+ location.item_address,
+ 2,
+ data.constants["ITEM_ARCHIPELAGO_PROGRESSION"]
+ )
+ elif type(location.item_address) is list:
+ for address in location.item_address:
+ _set_bytes_le(patched_rom, address, 2, data.constants["ITEM_ARCHIPELAGO_PROGRESSION"])
+
+ # Creates a list of item information to store in tables later. Those tables are used to display the item and
+ # player name in a text box. In the case of not enough space, the game will default to "found an ARCHIPELAGO
+ # ITEM"
+ location_info.append((location.address - BASE_OFFSET, location.item.player, location.item.name))
+
+ if world.options.trainersanity:
+ # Duplicate entries for rival fights
+ # For each of the 5 fights, there are 6 variations that have to be accounted for (for starters * genders)
+ # The Brendan Mudkip is used as a proxy in the rest of the AP code
+ for locale in ["ROUTE_103", "ROUTE_110", "ROUTE_119", "RUSTBORO", "LILYCOVE"]:
+ location = world.multiworld.get_location(data.locations[f"TRAINER_BRENDAN_{locale}_MUDKIP_REWARD"].label, world.player)
+ alternates = [
+ f"TRAINER_BRENDAN_{locale}_TREECKO",
+ f"TRAINER_BRENDAN_{locale}_TORCHIC",
+ f"TRAINER_MAY_{locale}_MUDKIP",
+ f"TRAINER_MAY_{locale}_TREECKO",
+ f"TRAINER_MAY_{locale}_TORCHIC",
+ ]
+ location_info.extend((
+ data.constants["TRAINER_FLAGS_START"] + data.constants[trainer],
+ location.item.player,
+ location.item.name
+ ) for trainer in alternates)
+
+ player_name_ids: Dict[str, int] = {world.multiworld.player_name[world.player]: 0}
+ item_name_offsets: Dict[str, int] = {}
+ next_item_name_offset = 0
+ for i, (flag, item_player, item_name) in enumerate(sorted(location_info, key=lambda t: t[0])):
+ # The player's own items are still set in the table with the value 0 to indicate the game should not show any
+ # message (the message for receiving an item will pop up when the client eventually gives it to them).
+ # In race mode, no item location data is included, and only recieved (or own) items will show any text box.
+ if item_player == world.player or world.multiworld.is_race:
+ _set_bytes_le(patched_rom, data.rom_addresses["gArchipelagoNameTable"] + (i * 5) + 0, 2, flag)
+ _set_bytes_le(patched_rom, data.rom_addresses["gArchipelagoNameTable"] + (i * 5) + 2, 2, 0)
+ _set_bytes_le(patched_rom, data.rom_addresses["gArchipelagoNameTable"] + (i * 5) + 4, 1, 0)
+ else:
+ player_name = world.multiworld.player_name[item_player]
+
+ if player_name not in player_name_ids:
+ # Only space for 50 player names
+ if len(player_name_ids) >= 50:
+ continue
+
+ player_name_ids[player_name] = len(player_name_ids)
+ for j, b in enumerate(encode_string(player_name, 17)):
+ _set_bytes_le(
+ patched_rom,
+ data.rom_addresses["gArchipelagoPlayerNames"] + (player_name_ids[player_name] * 17) + j,
+ 1,
+ b
+ )
+
+ if item_name not in item_name_offsets:
+ if len(item_name) > 35:
+ item_name = item_name[:34] + "…"
+
+ # Only 36 * 250 bytes for item names
+ if next_item_name_offset + len(item_name) + 1 > 36 * 250:
+ continue
+
+ item_name_offsets[item_name] = next_item_name_offset
+ next_item_name_offset += len(item_name) + 1
+ for j, b in enumerate(encode_string(item_name) + b"\xFF"):
+ _set_bytes_le(
+ patched_rom,
+ data.rom_addresses["gArchipelagoItemNames"] + (item_name_offsets[item_name]) + j,
+ 1,
+ b
+ )
+
+ # There should always be enough space for one entry per location
+ _set_bytes_le(patched_rom, data.rom_addresses["gArchipelagoNameTable"] + (i * 5) + 0, 2, flag)
+ _set_bytes_le(patched_rom, data.rom_addresses["gArchipelagoNameTable"] + (i * 5) + 2, 2, item_name_offsets[item_name])
+ _set_bytes_le(patched_rom, data.rom_addresses["gArchipelagoNameTable"] + (i * 5) + 4, 1, player_name_ids[player_name])
+
+ easter_egg = get_easter_egg(world.options.easter_egg.value)
# Set start inventory
start_inventory = world.options.start_inventory.value.copy()
@@ -128,28 +282,34 @@ def generate_output(world: "PokemonEmeraldWorld", output_directory: str) -> None
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_bytes_le(patched_rom, address + 0, 2, item)
+ _set_bytes_le(patched_rom, address + 2, 2, slot[1])
# Set species data
- _set_species_info(world, patched_rom)
+ _set_species_info(world, patched_rom, easter_egg)
# 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)
+ if world.options.trainer_parties != RandomizeTrainerParties.option_vanilla or easter_egg[0] == 2:
+ _set_opponents(world, patched_rom, easter_egg)
- # Set static pokemon
- _set_static_encounters(world, patched_rom)
+ # Set legendary pokemon
+ _set_legendary_encounters(world, patched_rom)
+
+ # Set misc pokemon
+ _set_misc_pokemon(world, patched_rom)
# Set starters
_set_starters(world, patched_rom)
# Set TM moves
- _set_tm_moves(world, patched_rom)
+ _set_tm_moves(world, patched_rom, easter_egg)
+
+ # Randomize move tutor moves
+ _randomize_move_tutor_moves(world, patched_rom, easter_egg)
# Set TM/HM compatibility
_set_tmhm_compatibility(world, patched_rom)
@@ -160,97 +320,164 @@ def generate_output(world: "PokemonEmeraldWorld", output_directory: str) -> None
# 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;
+ # /* 0x00 */ u16 birchPokemon;
+ # /* 0x02 */ bool8 advanceTextWithHoldA;
+ # /* 0x03 */ u8 receivedItemMessageFilter; // 0 = Show All; 1 = Show Progression Only; 2 = Show None
+ # /* 0x04 */ bool8 betterShopsEnabled;
+ # /* 0x05 */ bool8 reusableTms;
+ # /* 0x06 */ bool8 guaranteedCatch;
+ # /* 0x07 */ bool8 purgeSpinners;
+ # /* 0x08 */ bool8 areTrainersBlind;
+ # /* 0x09 */ u16 expMultiplierNumerator;
+ # /* 0x0B */ u16 expMultiplierDenominator;
+ # /* 0x0D */ bool8 matchTrainerLevels;
+ # /* 0x0E */ s8 matchTrainerLevelBonus;
+ # /* 0x0F */ bool8 eliteFourRequiresGyms;
+ # /* 0x10 */ u8 eliteFourRequiredCount;
+ # /* 0x11 */ bool8 normanRequiresGyms;
+ # /* 0x12 */ u8 normanRequiredCount;
+ # /* 0x13 */ u8 startingBadges;
+ # /* 0x14 */ u32 hmTotalBadgeRequirements;
+ # /* 0x18 */ u8 hmSpecificBadgeRequirements[8];
+ # /* 0x20 */ u8 freeFlyLocation;
+ # /* 0x21 */ u8 terraCaveLocationId:4;
+ # u8 marineCaveLocationId:4;
+ # /* 0x22 */ bool8 addRoute115Boulders;
+ # /* 0x23 */ bool8 addBumpySlopes;
+ # /* 0x24 */ bool8 modifyRoute118;
+ # /* 0x25 */ u16 removedBlockers;
+ # /* 0x27 */ bool8 berryTreesRandomized;
+ # /* 0x28 */ bool8 isDexsanity;
+ # /* 0x29 */ bool8 isTrainersanity;
+ # /* 0x2A */ bool8 isWarpRando;
+ # /* 0x2B */ u8 activeEasterEgg;
+ # /* 0x2C */ bool8 normalizeEncounterRates;
+ # /* 0x2D */ bool8 allowWonderTrading;
+ # /* 0x2E */ u16 matchTrainerLevelMultiplierNumerator;
+ # /* 0x30 */ u16 matchTrainerLevelMultiplierDenominator;
+ # /* 0x32 */ bool8 allowSkippingFanfares;
# };
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(
+ _set_bytes_le(
patched_rom,
- options_address + 0x08,
+ options_address + 0x00,
2,
- get_random_species(world.random, data.species).species_id
+ world.random.choice(list(data.species.keys()))
)
- # 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 hold A to advance text
+ _set_bytes_le(patched_rom, options_address + 0x02, 1, 1 if world.options.turbo_a else 0)
# 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_bytes_le(patched_rom, options_address + 0x03, 1, world.options.receive_item_messages.value)
+
+ # Set better shops
+ _set_bytes_le(patched_rom, options_address + 0x04, 1, 1 if world.options.better_shops else 0)
# 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_bytes_le(patched_rom, options_address + 0x05, 1, 1 if world.options.reusable_tms_tutors else 0)
+
+ # Set guaranteed catch
+ _set_bytes_le(patched_rom, options_address + 0x06, 1, 1 if world.options.guaranteed_catch else 0)
+
+ # Set purge spinners
+ _set_bytes_le(patched_rom, options_address + 0x07, 1, 1 if world.options.purge_spinners else 0)
+
+ # Set blind trainers
+ _set_bytes_le(patched_rom, options_address + 0x08, 1, 1 if world.options.blind_trainers else 0)
+
+ # Set exp modifier
+ _set_bytes_le(patched_rom, options_address + 0x09, 2, min(max(world.options.exp_modifier.value, 0), 2**16 - 1))
+ _set_bytes_le(patched_rom, options_address + 0x0B, 2, 100)
+
+ # Set match trainer levels
+ _set_bytes_le(patched_rom, options_address + 0x0D, 1, 1 if world.options.match_trainer_levels else 0)
+
+ # Set match trainer levels bonus
+ if world.options.match_trainer_levels == MatchTrainerLevels.option_additive:
+ match_trainer_levels_bonus = max(min(world.options.match_trainer_levels_bonus.value, 100), -100)
+ _set_bytes_le(patched_rom, options_address + 0x0E, 1, match_trainer_levels_bonus) # Works with negatives
+ elif world.options.match_trainer_levels == MatchTrainerLevels.option_multiplicative:
+ _set_bytes_le(patched_rom, options_address + 0x2E, 2, world.options.match_trainer_levels_bonus.value + 100)
+ _set_bytes_le(patched_rom, options_address + 0x30, 2, 100)
+
+ # Set elite four requirement
+ _set_bytes_le(
+ patched_rom,
+ options_address + 0x0F,
+ 1,
+ 1 if world.options.elite_four_requirement == EliteFourRequirement.option_gyms else 0
+ )
+
+ # Set elite four count
+ _set_bytes_le(patched_rom, options_address + 0x10, 1, min(max(world.options.elite_four_count.value, 0), 8))
+
+ # Set norman requirement
+ _set_bytes_le(
+ patched_rom,
+ options_address + 0x11,
+ 1,
+ 1 if world.options.norman_requirement == NormanRequirement.option_gyms else 0
+ )
+
+ # Set norman count
+ _set_bytes_le(patched_rom, options_address + 0x12, 1, min(max(world.options.norman_count.value, 0), 8))
+
+ # Set starting badges
+ _set_bytes_le(patched_rom, options_address + 0x13, 1, starting_badges)
+
+ # Set HM badge requirements
+ field_move_order = [
+ "HM01 Cut",
+ "HM05 Flash",
+ "HM06 Rock Smash",
+ "HM04 Strength",
+ "HM03 Surf",
+ "HM02 Fly",
+ "HM08 Dive",
+ "HM07 Waterfall",
+ ]
+ badge_to_bit = {
+ "Stone Badge": 1 << 0,
+ "Knuckle Badge": 1 << 1,
+ "Dynamo Badge": 1 << 2,
+ "Heat Badge": 1 << 3,
+ "Balance Badge": 1 << 4,
+ "Feather Badge": 1 << 5,
+ "Mind Badge": 1 << 6,
+ "Rain Badge": 1 << 7,
+ }
+
+ # Number of badges
+ # Uses 4 bits per HM. 0-8 means it's a valid requirement, otherwise use specific badges.
+ hm_badge_counts = 0
+ for i, hm in enumerate(field_move_order):
+ hm_badge_counts |= (world.hm_requirements[hm] if isinstance(world.hm_requirements[hm], int) else 0xF) << (i * 4)
+ _set_bytes_le(patched_rom, options_address + 0x14, 4, hm_badge_counts)
+
+ # Specific badges
+ for i, hm in enumerate(field_move_order):
+ if isinstance(world.hm_requirements, list):
+ bitfield = 0
+ for badge in world.hm_requirements:
+ bitfield |= badge_to_bit[badge]
+ _set_bytes_le(patched_rom, options_address + 0x18 + i, 1, bitfield)
+
+ # Set terra/marine cave locations
+ terra_cave_id = CAVE_EVENT_NAME_TO_ID[world.multiworld.get_location("TERRA_CAVE_LOCATION", world.player).item.name]
+ marine_cave_id = CAVE_EVENT_NAME_TO_ID[world.multiworld.get_location("MARINE_CAVE_LOCATION", world.player).item.name]
+ _set_bytes_le(patched_rom, options_address + 0x21, 1, terra_cave_id | (marine_cave_id << 4))
# 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_bytes_le(patched_rom, options_address + 0x22, 1, 1 if world.options.extra_boulders else 0)
+
+ # Swap route 115 layout if bumpy slope enabled
+ _set_bytes_le(patched_rom, options_address + 0x23, 1, 1 if world.options.extra_bumpy_slope else 0)
+
+ # Swap route 115 layout if bumpy slope enabled
+ _set_bytes_le(patched_rom, options_address + 0x24, 1, 1 if world.options.modify_118 else 0)
# Set removed blockers
removed_roadblocks = world.options.remove_roadblocks.value
@@ -262,12 +489,76 @@ def generate_output(world: "PokemonEmeraldWorld", output_directory: str) -> None
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_bytes_le(patched_rom, options_address + 0x25, 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)
+ # Mark berry trees as randomized
+ _set_bytes_le(patched_rom, options_address + 0x27, 1, 1 if world.options.berry_trees else 0)
+
+ # Mark dexsanity as enabled
+ _set_bytes_le(patched_rom, options_address + 0x28, 1, 1 if world.options.dexsanity else 0)
+
+ # Mark trainersanity as enabled
+ _set_bytes_le(patched_rom, options_address + 0x29, 1, 1 if world.options.trainersanity else 0)
+
+ # Set easter egg data
+ _set_bytes_le(patched_rom, options_address + 0x2B, 1, easter_egg[0])
+
+ # Set normalize encounter rates
+ _set_bytes_le(patched_rom, options_address + 0x2C, 1, 1 if world.options.normalize_encounter_rates else 0)
+
+ # Set allow wonder trading
+ _set_bytes_le(patched_rom, options_address + 0x2D, 1, 1 if world.options.enable_wonder_trading else 0)
+
+ # Set allowed to skip fanfares
+ _set_bytes_le(patched_rom, options_address + 0x32, 1, 1 if world.options.fanfares else 0)
+
+ if easter_egg[0] == 2:
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (easter_egg[1] * 12) + 4, 1, 50)
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (data.constants["MOVE_CUT"] * 12) + 4, 1, 1)
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (data.constants["MOVE_FLY"] * 12) + 4, 1, 1)
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (data.constants["MOVE_SURF"] * 12) + 4, 1, 1)
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (data.constants["MOVE_STRENGTH"] * 12) + 4, 1, 1)
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (data.constants["MOVE_FLASH"] * 12) + 4, 1, 1)
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (data.constants["MOVE_ROCK_SMASH"] * 12) + 4, 1, 1)
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (data.constants["MOVE_WATERFALL"] * 12) + 4, 1, 1)
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (data.constants["MOVE_DIVE"] * 12) + 4, 1, 1)
+ _set_bytes_le(patched_rom, data.rom_addresses["gBattleMoves"] + (data.constants["MOVE_DIG"] * 12) + 4, 1, 1)
+
+ # Set slot auth
+ for i, byte in enumerate(world.auth):
+ _set_bytes_le(patched_rom, data.rom_addresses["gArchipelagoInfo"] + i, 1, byte)
+
+ # Randomize music
+ if world.options.music:
+ # The "randomized sound table" is a patchboard that redirects sounds just before they get played
+ randomized_looping_music = copy.copy(_LOOPING_MUSIC)
+ world.random.shuffle(randomized_looping_music)
+ for original_music, randomized_music in zip(_LOOPING_MUSIC, randomized_looping_music):
+ _set_bytes_le(
+ patched_rom,
+ data.rom_addresses["gRandomizedSoundTable"] + (data.constants[original_music] * 2),
+ 2,
+ data.constants[randomized_music]
+ )
+
+ # Randomize fanfares
+ if world.options.fanfares:
+ # Shuffle the lists, pair new tracks with original tracks, set the new track ids, and set new fanfare durations
+ randomized_fanfares = [fanfare_name for fanfare_name in _FANFARES]
+ world.random.shuffle(randomized_fanfares)
+ for i, fanfare_pair in enumerate(zip(_FANFARES.keys(), randomized_fanfares)):
+ _set_bytes_le(
+ patched_rom,
+ data.rom_addresses["gRandomizedSoundTable"] + (data.constants[fanfare_pair[0]] * 2),
+ 2,
+ data.constants[fanfare_pair[1]]
+ )
+ _set_bytes_le(
+ patched_rom,
+ data.rom_addresses["sFanfares"] + (i * 4) + 2,
+ 2,
+ _FANFARES[fanfare_pair[1]]
+ )
# Write Output
out_file_name = world.multiworld.get_out_file_name_base(world.player)
@@ -275,7 +566,8 @@ def generate_output(world: "PokemonEmeraldWorld", output_directory: str) -> None
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)
+ player_name=world.multiworld.get_player_name(world.player),
+ patched_path=output_path)
patch.write()
os.unlink(output_path)
@@ -288,15 +580,6 @@ def get_base_rom_as_bytes() -> bytes:
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
@@ -306,33 +589,38 @@ def _set_encounter_tables(world: "PokemonEmeraldWorld", rom: bytearray) -> None:
species_id: 0x02 bytes
}
"""
-
- for map_data in world.modified_maps:
+ for map_data in world.modified_maps.values():
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)
+ address = table.address + 2 + (4 * i)
+ _set_bytes_le(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])
+def _set_species_info(world: "PokemonEmeraldWorld", rom: bytearray, easter_egg: Tuple[int, int]) -> None:
+ for species in world.modified_species.values():
+ _set_bytes_le(rom, species.address + 6, 1, species.types[0])
+ _set_bytes_le(rom, species.address + 7, 1, species.types[1])
+ _set_bytes_le(rom, species.address + 8, 1, species.catch_rate)
+ _set_bytes_le(rom, species.address + 22, 1, species.abilities[0])
+ _set_bytes_le(rom, species.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)
+ if easter_egg[0] == 3:
+ _set_bytes_le(rom, species.address + 22, 1, easter_egg[1])
+ _set_bytes_le(rom, species.address + 23, 1, easter_egg[1])
+
+ for i, learnset_move in enumerate(species.learnset):
+ level_move = learnset_move.level << 9 | learnset_move.move_id
+ if easter_egg[0] == 2:
+ level_move = learnset_move.level << 9 | easter_egg[1]
+
+ _set_bytes_le(rom, species.learnset_address + (i * 2), 2, level_move)
-def _set_opponents(world: "PokemonEmeraldWorld", rom: bytearray) -> None:
+def _set_opponents(world: "PokemonEmeraldWorld", rom: bytearray, easter_egg: Tuple[int, int]) -> None:
for trainer in world.modified_trainers:
- party_address = trainer.party.rom_address
+ party_address = trainer.party.address
pokemon_data_size: int
if trainer.party.pokemon_data_type in {TrainerPokemonDataTypeEnum.NO_ITEM_DEFAULT_MOVES, TrainerPokemonDataTypeEnum.ITEM_DEFAULT_MOVES}:
@@ -344,36 +632,53 @@ def _set_opponents(world: "PokemonEmeraldWorld", rom: bytearray) -> None:
pokemon_address = party_address + (i * pokemon_data_size)
# Replace species
- _set_bytes_little_endian(rom, pokemon_address + 0x04, 2, pokemon.species_id)
+ _set_bytes_le(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])
+ if easter_egg[0] == 2:
+ _set_bytes_le(rom, pokemon_address + 0x06, 2, easter_egg[1])
+ _set_bytes_le(rom, pokemon_address + 0x08, 2, easter_egg[1])
+ _set_bytes_le(rom, pokemon_address + 0x0A, 2, easter_egg[1])
+ _set_bytes_le(rom, pokemon_address + 0x0C, 2, easter_egg[1])
+ else:
+ _set_bytes_le(rom, pokemon_address + 0x06, 2, pokemon.moves[0])
+ _set_bytes_le(rom, pokemon_address + 0x08, 2, pokemon.moves[1])
+ _set_bytes_le(rom, pokemon_address + 0x0A, 2, pokemon.moves[2])
+ _set_bytes_le(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])
+ if easter_egg[0] == 2:
+ _set_bytes_le(rom, pokemon_address + 0x08, 2, easter_egg[1])
+ _set_bytes_le(rom, pokemon_address + 0x0A, 2, easter_egg[1])
+ _set_bytes_le(rom, pokemon_address + 0x0C, 2, easter_egg[1])
+ _set_bytes_le(rom, pokemon_address + 0x0E, 2, easter_egg[1])
+ else:
+ _set_bytes_le(rom, pokemon_address + 0x08, 2, pokemon.moves[0])
+ _set_bytes_le(rom, pokemon_address + 0x0A, 2, pokemon.moves[1])
+ _set_bytes_le(rom, pokemon_address + 0x0C, 2, pokemon.moves[2])
+ _set_bytes_le(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_legendary_encounters(world: "PokemonEmeraldWorld", rom: bytearray) -> None:
+ for encounter in world.modified_legendary_encounters:
+ _set_bytes_le(rom, encounter.address, 2, encounter.species_id)
+
+
+def _set_misc_pokemon(world: "PokemonEmeraldWorld", rom: bytearray) -> None:
+ for encounter in world.modified_misc_pokemon:
+ _set_bytes_le(rom, encounter.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)
+ _set_bytes_le(rom, address + 0, 2, starter_1)
+ _set_bytes_le(rom, address + 2, 2, starter_2)
+ _set_bytes_le(rom, address + 4, 2, starter_3)
-def _set_tm_moves(world: "PokemonEmeraldWorld", rom: bytearray) -> None:
+def _set_tm_moves(world: "PokemonEmeraldWorld", rom: bytearray, easter_egg: Tuple[int, int]) -> None:
tmhm_list_address = data.rom_addresses["sTMHMMoves"]
for i, move in enumerate(world.modified_tmhm_moves):
@@ -381,15 +686,16 @@ def _set_tm_moves(world: "PokemonEmeraldWorld", rom: bytearray) -> None:
if i >= 50:
break
- _set_bytes_little_endian(rom, tmhm_list_address + (i * 2), 2, move)
+ _set_bytes_le(rom, tmhm_list_address + (i * 2), 2, move)
+ if easter_egg[0] == 2:
+ _set_bytes_le(rom, tmhm_list_address + (i * 2), 2, easter_egg[1])
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)
+ for species in world.modified_species.values():
+ _set_bytes_le(rom, learnsets_address + (species.species_id * 8), 8, species.tm_hm_compatibility)
def _randomize_opponent_battle_type(world: "PokemonEmeraldWorld", rom: bytearray) -> None:
@@ -403,18 +709,45 @@ def _randomize_opponent_battle_type(world: "PokemonEmeraldWorld", rom: bytearray
}
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)
+ if trainer_data.script_address != 0 and len(trainer_data.party.pokemon) > 1:
+ original_battle_type = rom[trainer_data.script_address + 1]
+ if original_battle_type in battle_type_map: # Don't touch anything other than regular single battles
+ if world.random.random() < probability:
+ # Set the trainer to be a double battle
+ _set_bytes_le(rom, trainer_data.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(
+ # Swap the battle type in the script for the purpose of loading the right text
+ # and setting data to the right places
+ _set_bytes_le(
rom,
- trainer_data.battle_script_rom_address + 1,
+ trainer_data.script_address + 1,
1,
battle_type_map[original_battle_type]
)
+
+
+def _randomize_move_tutor_moves(world: "PokemonEmeraldWorld", rom: bytearray, easter_egg: Tuple[int, int]) -> None:
+ if easter_egg[0] == 2:
+ for i in range(30):
+ _set_bytes_le(rom, data.rom_addresses["gTutorMoves"] + (i * 2), 2, easter_egg[1])
+ else:
+ if world.options.tm_tutor_moves:
+ new_tutor_moves = []
+ for i in range(30):
+ new_move = get_random_move(world.random, set(new_tutor_moves) | world.blacklisted_moves | HM_MOVES)
+ new_tutor_moves.append(new_move)
+
+ _set_bytes_le(rom, data.rom_addresses["gTutorMoves"] + (i * 2), 2, new_move)
+
+ # Always set Fortree move tutor to Dig
+ _set_bytes_le(rom, data.rom_addresses["gTutorMoves"] + (24 * 2), 2, data.constants["MOVE_DIG"])
+
+ # Modify compatibility
+ if world.options.tm_tutor_compatibility.value != -1:
+ for species in data.species.values():
+ _set_bytes_le(
+ rom,
+ data.rom_addresses["sTutorLearnsets"] + (species.species_id * 4),
+ 4,
+ bool_array_to_int([world.random.randrange(0, 100) < world.options.tm_tutor_compatibility.value for _ in range(32)])
+ )
diff --git a/worlds/pokemon_emerald/rules.py b/worlds/pokemon_emerald/rules.py
index 564bf5af8d..059e21b749 100644
--- a/worlds/pokemon_emerald/rules.py
+++ b/worlds/pokemon_emerald/rules.py
@@ -1,13 +1,13 @@
"""
Logic rule definitions for Pokemon Emerald
"""
-from typing import TYPE_CHECKING
+from typing import TYPE_CHECKING, Callable, Dict
from BaseClasses import CollectionState
from worlds.generic.Rules import add_rule, set_rule
-from .data import data
-from .options import EliteFourRequirement, NormanRequirement, Goal
+from .data import NATIONAL_ID_TO_SPECIES_ID, NUM_REAL_SPECIES, data
+from .options import DarkCavesRequireFlash, EliteFourRequirement, NormanRequirement, Goal
if TYPE_CHECKING:
from . import PokemonEmeraldWorld
@@ -16,26 +16,14 @@ if TYPE_CHECKING:
# 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)
+ hm_rules: Dict[str, Callable[[CollectionState], bool]] = {}
+ for hm, badges in world.hm_requirements.items():
+ if isinstance(badges, list):
+ hm_rules[hm] = lambda state, hm=hm, badges=badges: state.has(hm, world.player) \
+ and state.has_all(badges, world.player)
+ else:
+ hm_rules[hm] = lambda state, hm=hm, badges=badges: state.has(hm, world.player) \
+ and state.has_group("Badges", world.player, badges)
def has_acro_bike(state: CollectionState):
return state.has("Acro Bike", world.player)
@@ -52,9 +40,30 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
"EVENT_DEFEAT_NORMAN",
"EVENT_DEFEAT_WINONA",
"EVENT_DEFEAT_TATE_AND_LIZA",
- "EVENT_DEFEAT_JUAN"
+ "EVENT_DEFEAT_JUAN",
]]) >= n
+ huntable_legendary_events = [
+ f"EVENT_ENCOUNTER_{key}"
+ for name, key in {
+ "Groudon": "GROUDON",
+ "Kyogre": "KYOGRE",
+ "Rayquaza": "RAYQUAZA",
+ "Latias": "LATIAS",
+ "Latios": "LATIOS",
+ "Regirock": "REGIROCK",
+ "Regice": "REGICE",
+ "Registeel": "REGISTEEL",
+ "Mew": "MEW",
+ "Deoxys": "DEOXYS",
+ "Ho-oh": "HO_OH",
+ "Lugia": "LUGIA",
+ }.items()
+ if name in world.options.allowed_legendary_hunt_encounters.value
+ ]
+ def encountered_n_legendaries(state: CollectionState, n: int) -> bool:
+ return sum(int(state.has(event, world.player)) for event in huntable_legendary_events) >= n
+
def get_entrance(entrance: str):
return world.multiworld.get_entrance(entrance, world.player)
@@ -64,25 +73,49 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
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"
+ if world.options.goal == Goal.option_champion:
+ completion_condition = lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
+ elif world.options.goal == Goal.option_steven:
+ completion_condition = lambda state: state.has("EVENT_DEFEAT_STEVEN", world.player)
elif world.options.goal == Goal.option_norman:
- victory_event_name = "EVENT_DEFEAT_NORMAN"
+ completion_condition = lambda state: state.has("EVENT_DEFEAT_NORMAN", world.player)
+ elif world.options.goal == Goal.option_legendary_hunt:
+ completion_condition = lambda state: encountered_n_legendaries(state, world.options.legendary_hunt_count.value)
- world.multiworld.completion_condition[world.player] = lambda state: state.has(victory_event_name, world.player)
+ world.multiworld.completion_condition[world.player] = completion_condition
+
+ if world.options.legendary_hunt_catch:
+ set_rule(get_location("EVENT_ENCOUNTER_GROUDON"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_KYOGRE"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_RAYQUAZA"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_LATIAS"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ # Latios already only requires defeating the champion and access to Route 117
+ # set_rule(get_location("EVENT_ENCOUNTER_LATIOS"),
+ # lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_REGIROCK"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_REGICE"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_REGISTEEL"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_MEW"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_DEOXYS"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_HO_OH"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player))
+ set_rule(get_location("EVENT_ENCOUNTER_LUGIA"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", 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_LITTLEROOT_TOWN/MAIN -> REGION_SKY"),
+ hm_rules["HM02 Fly"]
+ )
set_rule(
get_entrance("REGION_SKY -> REGION_LITTLEROOT_TOWN/MAIN"),
lambda state: state.has("EVENT_VISITED_LITTLEROOT_TOWN", world.player)
@@ -144,27 +177,59 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
lambda state: state.has("EVENT_VISITED_EVER_GRANDE_CITY", world.player)
)
+ # Littleroot Town
+ set_rule(
+ get_location("NPC_GIFT_RECEIVED_SS_TICKET"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
+ )
+ set_rule(
+ get_location("NPC_GIFT_RECEIVED_AURORA_TICKET"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
+ )
+ set_rule(
+ get_location("NPC_GIFT_RECEIVED_EON_TICKET"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
+ )
+ set_rule(
+ get_location("NPC_GIFT_RECEIVED_MYSTIC_TICKET"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
+ )
+ set_rule(
+ get_location("NPC_GIFT_RECEIVED_OLD_SEA_MAP"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
+ )
+
+ # Route 102
+ set_rule(
+ get_entrance("REGION_ROUTE102/MAIN -> REGION_ROUTE102/POND"),
+ hm_rules["HM03 Surf"]
+ )
+
# Route 103
set_rule(
get_entrance("REGION_ROUTE103/EAST -> REGION_ROUTE103/WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE103/WEST -> REGION_ROUTE103/WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE103/EAST -> REGION_ROUTE103/EAST_TREE_MAZE"),
+ hm_rules["HM01 Cut"]
)
# Petalburg City
set_rule(
get_entrance("REGION_PETALBURG_CITY/MAIN -> REGION_PETALBURG_CITY/SOUTH_POND"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_PETALBURG_CITY/MAIN -> REGION_PETALBURG_CITY/NORTH_POND"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
- get_location("NPC_GIFT_RECEIVED_HM03"),
+ get_location("NPC_GIFT_RECEIVED_HM_SURF"),
lambda state: state.has("EVENT_DEFEAT_NORMAN", world.player)
)
if world.options.norman_requirement == NormanRequirement.option_badges:
@@ -188,8 +253,16 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Route 104
set_rule(
- get_entrance("REGION_ROUTE104/SOUTH -> REGION_ROUTE105/MAIN"),
- can_surf
+ get_entrance("REGION_ROUTE104/SOUTH -> REGION_ROUTE104/SOUTH_WATER"),
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE104/NORTH -> REGION_ROUTE104/NORTH_POND"),
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE104/NORTH -> REGION_ROUTE104/TREE_ALCOVE_2"),
+ hm_rules["HM01 Cut"]
)
set_rule(
get_entrance("REGION_ROUTE104_MR_BRINEYS_HOUSE/MAIN -> REGION_DEWFORD_TOWN/MAIN"),
@@ -199,7 +272,7 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Petalburg Woods
set_rule(
get_entrance("REGION_PETALBURG_WOODS/WEST_PATH -> REGION_PETALBURG_WOODS/EAST_PATH"),
- can_cut
+ hm_rules["HM01 Cut"]
)
# Rustboro City
@@ -207,6 +280,11 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
get_location("EVENT_RETURN_DEVON_GOODS"),
lambda state: state.has("EVENT_RECOVER_DEVON_GOODS", world.player)
)
+ if world.options.trainersanity:
+ set_rule(
+ get_location("TRAINER_BRENDAN_RUSTBORO_MUDKIP_REWARD"),
+ lambda state: state.has("EVENT_RETURN_DEVON_GOODS", world.player)
+ )
# Devon Corp
set_rule(
@@ -217,21 +295,33 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Route 116
set_rule(
get_entrance("REGION_ROUTE116/WEST -> REGION_ROUTE116/WEST_ABOVE_LEDGE"),
- can_cut
+ hm_rules["HM01 Cut"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE116/EAST -> REGION_TERRA_CAVE_ENTRANCE/MAIN"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("TERRA_CAVE_ROUTE_116_1", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE116/WEST -> REGION_TERRA_CAVE_ENTRANCE/MAIN"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("TERRA_CAVE_ROUTE_116_2", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
)
# Rusturf Tunnel
set_rule(
get_entrance("REGION_RUSTURF_TUNNEL/WEST -> REGION_RUSTURF_TUNNEL/EAST"),
- can_rock_smash
+ hm_rules["HM06 Rock Smash"]
)
set_rule(
get_entrance("REGION_RUSTURF_TUNNEL/EAST -> REGION_RUSTURF_TUNNEL/WEST"),
- can_rock_smash
+ hm_rules["HM06 Rock Smash"]
)
set_rule(
- get_location("NPC_GIFT_RECEIVED_HM04"),
- can_rock_smash
+ get_location("NPC_GIFT_RECEIVED_HM_STRENGTH"),
+ hm_rules["HM06 Rock Smash"]
)
set_rule(
get_location("EVENT_RECOVER_DEVON_GOODS"),
@@ -241,48 +331,86 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Route 115
set_rule(
get_entrance("REGION_ROUTE115/SOUTH_BELOW_LEDGE -> REGION_ROUTE115/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE -> REGION_ROUTE115/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE115/SOUTH_ABOVE_LEDGE -> REGION_ROUTE115/SOUTH_BEHIND_ROCK"),
- can_rock_smash
+ hm_rules["HM06 Rock Smash"]
)
set_rule(
get_entrance("REGION_ROUTE115/NORTH_BELOW_SLOPE -> REGION_ROUTE115/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE115/NORTH_BELOW_SLOPE -> REGION_ROUTE115/NORTH_ABOVE_SLOPE"),
lambda state: has_mach_bike(state)
)
+ set_rule(
+ get_entrance("REGION_ROUTE115/NORTH_BELOW_SLOPE -> REGION_TERRA_CAVE_ENTRANCE/MAIN"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("TERRA_CAVE_ROUTE_115_1", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE115/NORTH_ABOVE_SLOPE -> REGION_TERRA_CAVE_ENTRANCE/MAIN"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("TERRA_CAVE_ROUTE_115_2", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+
if world.options.extra_boulders:
set_rule(
get_entrance("REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE -> REGION_ROUTE115/SOUTH_ABOVE_LEDGE"),
- can_strength
+ hm_rules["HM04 Strength"]
)
set_rule(
get_entrance("REGION_ROUTE115/SOUTH_ABOVE_LEDGE -> REGION_ROUTE115/SOUTH_BEACH_NEAR_CAVE"),
- can_strength
+ hm_rules["HM04 Strength"]
+ )
+
+ if world.options.extra_bumpy_slope:
+ set_rule(
+ get_entrance("REGION_ROUTE115/SOUTH_BELOW_LEDGE -> REGION_ROUTE115/SOUTH_ABOVE_LEDGE"),
+ lambda state: has_acro_bike(state)
+ )
+ else:
+ set_rule(
+ get_entrance("REGION_ROUTE115/SOUTH_BELOW_LEDGE -> REGION_ROUTE115/SOUTH_ABOVE_LEDGE"),
+ lambda state: False
)
# Route 105
set_rule(
- get_entrance("REGION_ROUTE105/MAIN -> REGION_UNDERWATER_ROUTE105/MAIN"),
- can_dive
+ get_entrance("REGION_UNDERWATER_ROUTE105/MARINE_CAVE_ENTRANCE_1 -> REGION_UNDERWATER_MARINE_CAVE/MAIN"),
+ lambda state: hm_rules["HM08 Dive"](state) and \
+ state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("MARINE_CAVE_ROUTE_105_1", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_UNDERWATER_ROUTE105/MARINE_CAVE_ENTRANCE_2 -> REGION_UNDERWATER_MARINE_CAVE/MAIN"),
+ lambda state: hm_rules["HM08 Dive"](state) and \
+ state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("MARINE_CAVE_ROUTE_105_2", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+ set_rule(
+ get_entrance("MAP_ROUTE105:0/MAP_ISLAND_CAVE:0"),
+ lambda state: state.has("EVENT_UNDO_REGI_SEAL", world.player)
)
# Route 106
set_rule(
get_entrance("REGION_ROUTE106/EAST -> REGION_ROUTE106/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE106/WEST -> REGION_ROUTE106/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
)
# Dewford Town
@@ -313,7 +441,7 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Route 107
set_rule(
get_entrance("REGION_DEWFORD_TOWN/MAIN -> REGION_ROUTE107/MAIN"),
- can_surf
+ hm_rules["HM03 Surf"]
)
# Route 109
@@ -327,13 +455,13 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
set_rule(
get_entrance("REGION_ROUTE109/BEACH -> REGION_ROUTE109/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
)
# Slateport City
set_rule(
get_entrance("REGION_SLATEPORT_CITY/MAIN -> REGION_ROUTE134/WEST"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_location("EVENT_TALK_TO_DOCK"),
@@ -349,17 +477,17 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
set_rule(
get_entrance("REGION_SLATEPORT_CITY_HARBOR/MAIN -> REGION_SS_TIDAL_CORRIDOR/MAIN"),
- lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
+ lambda state: state.has("S.S. Ticket", world.player)
)
# Route 110
set_rule(
get_entrance("REGION_ROUTE110/MAIN -> REGION_ROUTE110/SOUTH_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE110/MAIN -> REGION_ROUTE110/NORTH_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/WEST -> REGION_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE/EAST"),
@@ -379,12 +507,64 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
lambda state: state.has("EVENT_RESCUE_CAPT_STERN", world.player)
)
+ # Trick House
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_PUZZLE1/ENTRANCE -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE1/REWARDS"),
+ hm_rules["HM01 Cut"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_ENTRANCE/MAIN -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE2/ENTRANCE"),
+ lambda state: state.has("Dynamo Badge", world.player) and state.has("EVENT_COMPLETE_TRICK_HOUSE_1", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_ENTRANCE/MAIN -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE3/ENTRANCE"),
+ lambda state: state.has("Heat Badge", world.player) and state.has("EVENT_COMPLETE_TRICK_HOUSE_2", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_PUZZLE3/ENTRANCE -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE3/REWARDS"),
+ hm_rules["HM06 Rock Smash"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_ENTRANCE/MAIN -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE4/ENTRANCE"),
+ lambda state: state.has("Balance Badge", world.player) and state.has("EVENT_COMPLETE_TRICK_HOUSE_3", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_PUZZLE4/ENTRANCE -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE4/REWARDS"),
+ hm_rules["HM04 Strength"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_ENTRANCE/MAIN -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE5/ENTRANCE"),
+ lambda state: state.has("Feather Badge", world.player) and state.has("EVENT_COMPLETE_TRICK_HOUSE_4", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_ENTRANCE/MAIN -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE6/ENTRANCE"),
+ lambda state: state.has("Mind Badge", world.player) and state.has("EVENT_COMPLETE_TRICK_HOUSE_5", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_ENTRANCE/MAIN -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE7/ENTRANCE"),
+ lambda state: state.has("Rain Badge", world.player) and state.has("EVENT_COMPLETE_TRICK_HOUSE_6", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE110_TRICK_HOUSE_ENTRANCE/MAIN -> REGION_ROUTE110_TRICK_HOUSE_PUZZLE8/ENTRANCE"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) and state.has("EVENT_COMPLETE_TRICK_HOUSE_7", 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 117
+ set_rule(
+ get_entrance("REGION_ROUTE117/MAIN -> REGION_ROUTE117/PONDS"),
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_location("EVENT_ENCOUNTER_LATIOS"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
+ )
+
# Route 111
set_rule(
get_entrance("REGION_ROUTE111/MIDDLE -> REGION_ROUTE111/DESERT"),
@@ -394,22 +574,34 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
get_entrance("REGION_ROUTE111/NORTH -> REGION_ROUTE111/DESERT"),
lambda state: state.has("Go Goggles", world.player)
)
+ set_rule(
+ get_entrance("REGION_ROUTE111/NORTH -> REGION_ROUTE111/ABOVE_SLOPE"),
+ has_mach_bike
+ )
set_rule(
get_entrance("REGION_ROUTE111/MIDDLE -> REGION_ROUTE111/SOUTH"),
- can_rock_smash
+ hm_rules["HM06 Rock Smash"]
)
set_rule(
get_entrance("REGION_ROUTE111/SOUTH -> REGION_ROUTE111/SOUTH_POND"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE111/SOUTH -> REGION_ROUTE111/MIDDLE"),
- can_rock_smash
+ hm_rules["HM06 Rock Smash"]
)
set_rule(
get_entrance("MAP_ROUTE111:4/MAP_TRAINER_HILL_ENTRANCE:0"),
lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
)
+ set_rule(
+ get_entrance("MAP_ROUTE111:1/MAP_DESERT_RUINS:0"),
+ lambda state: state.has("EVENT_UNDO_REGI_SEAL", world.player)
+ )
+ set_rule(
+ get_entrance("MAP_DESERT_RUINS:0/MAP_ROUTE111:1"),
+ hm_rules["HM06 Rock Smash"]
+ )
# Route 112
if "Route 112 Magma Grunts" not in world.options.remove_roadblocks.value:
@@ -425,51 +617,75 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Fiery Path
set_rule(
get_entrance("REGION_FIERY_PATH/MAIN -> REGION_FIERY_PATH/BEHIND_BOULDER"),
- can_strength
+ hm_rules["HM04 Strength"]
)
# Route 114
set_rule(
- get_entrance("REGION_ROUTE114/MAIN -> REGION_ROUTE114/ABOVE_WATERFALL"),
- lambda state: can_surf(state) and can_waterfall(state)
+ get_entrance("REGION_ROUTE114/MAIN -> REGION_ROUTE114/WATER"),
+ hm_rules["HM03 Surf"]
)
set_rule(
- get_entrance("REGION_ROUTE114/ABOVE_WATERFALL -> REGION_ROUTE114/MAIN"),
- lambda state: can_surf(state) and can_waterfall(state)
+ get_entrance("REGION_ROUTE114/WATER -> REGION_ROUTE114/ABOVE_WATERFALL"),
+ hm_rules["HM07 Waterfall"]
)
set_rule(
get_entrance("MAP_ROUTE114_FOSSIL_MANIACS_TUNNEL:2/MAP_DESERT_UNDERPASS:0"),
lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
)
+ set_rule(
+ get_entrance("REGION_ROUTE114/ABOVE_WATERFALL -> REGION_TERRA_CAVE_ENTRANCE/MAIN"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("TERRA_CAVE_ROUTE_114_1", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE114/MAIN -> REGION_TERRA_CAVE_ENTRANCE/MAIN"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("TERRA_CAVE_ROUTE_114_2", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", 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)
+ get_entrance("REGION_METEOR_FALLS_1F_1R/MAIN -> REGION_METEOR_FALLS_1F_1R/WATER"),
+ hm_rules["HM03 Surf"]
)
set_rule(
- get_entrance("REGION_METEOR_FALLS_1F_1R/ABOVE_WATERFALL -> REGION_METEOR_FALLS_1F_1R/MAIN"),
- can_surf
+ get_entrance("REGION_METEOR_FALLS_1F_1R/WATER -> REGION_METEOR_FALLS_1F_1R/WATER_ABOVE_WATERFALL"),
+ hm_rules["HM07 Waterfall"]
+ )
+ set_rule(
+ get_entrance("REGION_METEOR_FALLS_1F_1R/ABOVE_WATERFALL -> REGION_METEOR_FALLS_1F_1R/WATER_ABOVE_WATERFALL"),
+ hm_rules["HM03 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_1F_2R/LEFT_SPLIT -> REGION_METEOR_FALLS_1F_2R/LEFT_SPLIT_WATER"),
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_METEOR_FALLS_1F_2R/RIGHT_SPLIT -> REGION_METEOR_FALLS_1F_2R/RIGHT_SPLIT_WATER"),
+ hm_rules["HM03 Surf"]
+ )
set_rule(
get_entrance("REGION_METEOR_FALLS_B1F_1R/HIGHEST_LADDER -> REGION_METEOR_FALLS_B1F_1R/WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_METEOR_FALLS_B1F_1R/NORTH_SHORE -> REGION_METEOR_FALLS_B1F_1R/WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_METEOR_FALLS_B1F_1R/SOUTH_SHORE -> REGION_METEOR_FALLS_B1F_1R/WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_METEOR_FALLS_B1F_2R/ENTRANCE -> REGION_METEOR_FALLS_B1F_2R/WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
# Jagged Pass
@@ -503,25 +719,25 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
set_rule(
get_entrance("REGION_MIRAGE_TOWER_3F/TOP -> REGION_MIRAGE_TOWER_3F/BOTTOM"),
- can_rock_smash
+ hm_rules["HM06 Rock Smash"]
)
set_rule(
get_entrance("REGION_MIRAGE_TOWER_3F/BOTTOM -> REGION_MIRAGE_TOWER_3F/TOP"),
- can_rock_smash
+ hm_rules["HM06 Rock Smash"]
)
set_rule(
get_entrance("REGION_MIRAGE_TOWER_4F/MAIN -> REGION_MIRAGE_TOWER_4F/FOSSIL_PLATFORM"),
- can_rock_smash
+ hm_rules["HM06 Rock Smash"]
)
# Abandoned Ship
set_rule(
get_entrance("REGION_ABANDONED_SHIP_ROOMS_B1F/CENTER -> REGION_ABANDONED_SHIP_UNDERWATER1/MAIN"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS/MAIN -> REGION_ABANDONED_SHIP_UNDERWATER2/MAIN"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("MAP_ABANDONED_SHIP_HIDDEN_FLOOR_CORRIDORS:0/MAP_ABANDONED_SHIP_HIDDEN_FLOOR_ROOMS:0"),
@@ -551,23 +767,58 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
# Route 118
+ if world.options.modify_118:
+ set_rule(
+ get_entrance("REGION_ROUTE118/WEST -> REGION_ROUTE118/EAST"),
+ has_acro_bike
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE118/EAST -> REGION_ROUTE118/WEST"),
+ has_acro_bike
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE118/WEST_WATER -> REGION_ROUTE118/EAST_WATER"),
+ lambda state: False
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE118/EAST_WATER -> REGION_ROUTE118/WEST_WATER"),
+ lambda state: False
+ )
+ else:
+ set_rule(
+ get_entrance("REGION_ROUTE118/WEST -> REGION_ROUTE118/EAST"),
+ lambda state: False
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE118/EAST -> REGION_ROUTE118/WEST"),
+ lambda state: False
+ )
+
set_rule(
- get_entrance("REGION_ROUTE118/WEST -> REGION_ROUTE118/WATER"),
- can_surf
+ get_entrance("REGION_ROUTE118/WEST -> REGION_ROUTE118/WEST_WATER"),
+ hm_rules["HM03 Surf"]
)
set_rule(
- get_entrance("REGION_ROUTE118/EAST -> REGION_ROUTE118/WATER"),
- can_surf
+ get_entrance("REGION_ROUTE118/EAST -> REGION_ROUTE118/EAST_WATER"),
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE118/EAST -> REGION_TERRA_CAVE_ENTRANCE/MAIN"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("TERRA_CAVE_ROUTE_118_1", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE118/WEST -> REGION_TERRA_CAVE_ENTRANCE/MAIN"),
+ lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("TERRA_CAVE_ROUTE_118_2", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
)
# 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
+ get_entrance("REGION_ROUTE119/LOWER -> REGION_ROUTE119/LOWER_WATER"),
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE119/LOWER -> REGION_ROUTE119/LOWER_ACROSS_RAILS"),
@@ -579,15 +830,15 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
set_rule(
get_entrance("REGION_ROUTE119/UPPER -> REGION_ROUTE119/MIDDLE_RIVER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE119/MIDDLE_RIVER -> REGION_ROUTE119/ABOVE_WATERFALL"),
- can_waterfall
+ hm_rules["HM07 Waterfall"]
)
set_rule(
get_entrance("REGION_ROUTE119/ABOVE_WATERFALL -> REGION_ROUTE119/MIDDLE_RIVER"),
- can_waterfall
+ hm_rules["HM07 Waterfall"]
)
set_rule(
get_entrance("REGION_ROUTE119/ABOVE_WATERFALL -> REGION_ROUTE119/ABOVE_WATERFALL_ACROSS_RAILS"),
@@ -624,21 +875,37 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
set_rule(
get_entrance("REGION_ROUTE120/NORTH_POND_SHORE -> REGION_ROUTE120/NORTH_POND"),
- can_surf
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE120/SOUTH -> REGION_ROUTE120/SOUTH_ALCOVE"),
+ hm_rules["HM01 Cut"]
)
set_rule(
get_entrance("REGION_ROUTE120/SOUTH -> REGION_ROUTE120/SOUTH_PONDS"),
- can_surf
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE120/SOUTH_ALCOVE -> REGION_ROUTE120/SOUTH"),
+ hm_rules["HM01 Cut"]
+ )
+ set_rule(
+ get_entrance("MAP_ROUTE120:0/MAP_ANCIENT_TOMB:0"),
+ lambda state: state.has("EVENT_UNDO_REGI_SEAL", world.player)
+ )
+ set_rule(
+ get_entrance("MAP_ANCIENT_TOMB:1/MAP_ANCIENT_TOMB:2"),
+ hm_rules["HM05 Flash"]
)
# Route 121
set_rule(
get_entrance("REGION_ROUTE121/EAST -> REGION_ROUTE121/WEST"),
- can_cut
+ hm_rules["HM01 Cut"]
)
set_rule(
- get_entrance("REGION_ROUTE121/EAST -> REGION_ROUTE122/SEA"),
- can_surf
+ get_entrance("REGION_ROUTE121/EAST -> REGION_ROUTE121/WATER"),
+ hm_rules["HM03 Surf"]
)
# Safari Zone
@@ -646,6 +913,10 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
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_NORTHWEST/MAIN -> REGION_SAFARI_ZONE_NORTHWEST/POND"),
+ hm_rules["HM03 Surf"]
+ )
set_rule(
get_entrance("REGION_SAFARI_ZONE_SOUTH/MAIN -> REGION_SAFARI_ZONE_NORTH/MAIN"),
lambda state: has_acro_bike(state)
@@ -654,6 +925,14 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
get_entrance("REGION_SAFARI_ZONE_SOUTHWEST/MAIN -> REGION_SAFARI_ZONE_NORTHWEST/MAIN"),
lambda state: has_mach_bike(state)
)
+ set_rule(
+ get_entrance("REGION_SAFARI_ZONE_SOUTHWEST/MAIN -> REGION_SAFARI_ZONE_SOUTHWEST/POND"),
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_SAFARI_ZONE_SOUTHEAST/MAIN -> REGION_SAFARI_ZONE_SOUTHEAST/WATER"),
+ hm_rules["HM03 Surf"]
+ )
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"),
@@ -663,28 +942,49 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Route 122
set_rule(
get_entrance("REGION_ROUTE122/MT_PYRE_ENTRANCE -> REGION_ROUTE122/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
)
# Route 123
set_rule(
get_entrance("REGION_ROUTE123/EAST -> REGION_ROUTE122/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_ROUTE123/EAST -> REGION_ROUTE123/POND"),
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_ROUTE123/EAST -> REGION_ROUTE123/EAST_BEHIND_TREE"),
- can_cut
+ hm_rules["HM01 Cut"]
)
# Lilycove City
set_rule(
get_entrance("REGION_LILYCOVE_CITY/MAIN -> REGION_LILYCOVE_CITY/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_LILYCOVE_CITY_HARBOR/MAIN -> REGION_SS_TIDAL_CORRIDOR/MAIN"),
- lambda state: state.has("EVENT_DEFEAT_CHAMPION", world.player)
+ lambda state: state.has("S.S. Ticket", world.player)
)
+ set_rule(
+ get_entrance("REGION_LILYCOVE_CITY_HARBOR/MAIN -> REGION_SOUTHERN_ISLAND_EXTERIOR/MAIN"),
+ lambda state: state.has("Eon Ticket", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_LILYCOVE_CITY_HARBOR/MAIN -> REGION_FARAWAY_ISLAND_ENTRANCE/MAIN"),
+ lambda state: state.has("Old Sea Map", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_LILYCOVE_CITY_HARBOR/MAIN -> REGION_BIRTH_ISLAND_HARBOR/MAIN"),
+ lambda state: state.has("Aurora Ticket", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_LILYCOVE_CITY_HARBOR/MAIN -> REGION_NAVEL_ROCK_HARBOR/MAIN"),
+ lambda state: state.has("Mystic Ticket", world.player)
+ )
+
if "Lilycove City Wailmer" not in world.options.remove_roadblocks.value:
set_rule(
get_entrance("REGION_LILYCOVE_CITY/SEA -> REGION_ROUTE124/MAIN"),
@@ -694,11 +994,11 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Magma Hideout
set_rule(
get_entrance("REGION_MAGMA_HIDEOUT_1F/ENTRANCE -> REGION_MAGMA_HIDEOUT_1F/MAIN"),
- can_strength
+ hm_rules["HM04 Strength"]
)
set_rule(
get_entrance("REGION_MAGMA_HIDEOUT_1F/MAIN -> REGION_MAGMA_HIDEOUT_1F/ENTRANCE"),
- can_strength
+ hm_rules["HM04 Strength"]
)
# Aqua Hideout
@@ -709,79 +1009,83 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
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)
+ lambda state: hm_rules["HM03 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
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/SMALL_AREA_1"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/SMALL_AREA_2"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/SMALL_AREA_3"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/TUNNEL_1"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/TUNNEL_2"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/TUNNEL_3"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/MAIN -> REGION_UNDERWATER_ROUTE124/TUNNEL_4"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/NORTH_ENCLOSED_AREA_1 -> REGION_UNDERWATER_ROUTE124/TUNNEL_1"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/NORTH_ENCLOSED_AREA_2 -> REGION_UNDERWATER_ROUTE124/TUNNEL_1"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/NORTH_ENCLOSED_AREA_3 -> REGION_UNDERWATER_ROUTE124/TUNNEL_2"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/SOUTH_ENCLOSED_AREA_1 -> REGION_UNDERWATER_ROUTE124/TUNNEL_3"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/SOUTH_ENCLOSED_AREA_2 -> REGION_UNDERWATER_ROUTE124/TUNNEL_3"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE124/SOUTH_ENCLOSED_AREA_3 -> REGION_UNDERWATER_ROUTE124/TUNNEL_4"),
- can_dive
+ hm_rules["HM08 Dive"]
)
# Mossdeep City
+ set_rule(
+ get_entrance("REGION_MOSSDEEP_CITY/MAIN -> REGION_MOSSDEEP_CITY/WATER"),
+ hm_rules["HM03 Surf"]
+ )
set_rule(
get_entrance("REGION_MOSSDEEP_CITY/MAIN -> REGION_ROUTE124/MAIN"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_MOSSDEEP_CITY/MAIN -> REGION_ROUTE125/SEA"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_MOSSDEEP_CITY/MAIN -> REGION_ROUTE127/MAIN"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_location("EVENT_DEFEAT_MAXIE_AT_SPACE_STATION"),
@@ -792,94 +1096,110 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
lambda state: state.has("EVENT_DEFEAT_MAXIE_AT_SPACE_STATION", world.player)
)
set_rule(
- get_location("NPC_GIFT_RECEIVED_HM08"),
+ get_location("NPC_GIFT_RECEIVED_HM_DIVE"),
lambda state: state.has("EVENT_DEFEAT_MAXIE_AT_SPACE_STATION", world.player)
)
+ # Route 125
+ set_rule(
+ get_entrance("REGION_UNDERWATER_ROUTE125/MARINE_CAVE_ENTRANCE_1 -> REGION_UNDERWATER_MARINE_CAVE/MAIN"),
+ lambda state: hm_rules["HM08 Dive"](state) and \
+ state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("MARINE_CAVE_ROUTE_125_1", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_UNDERWATER_ROUTE125/MARINE_CAVE_ENTRANCE_2 -> REGION_UNDERWATER_MARINE_CAVE/MAIN"),
+ lambda state: hm_rules["HM08 Dive"](state) and \
+ state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("MARINE_CAVE_ROUTE_125_2", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+
# Shoal Cave
set_rule(
get_entrance("REGION_SHOAL_CAVE_ENTRANCE_ROOM/SOUTH -> REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_SHOAL_CAVE_ENTRANCE_ROOM/NORTH_WEST_CORNER -> REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_SHOAL_CAVE_ENTRANCE_ROOM/NORTH_EAST_CORNER -> REGION_SHOAL_CAVE_ENTRANCE_ROOM/HIGH_TIDE_WATER"),
- can_surf
+ hm_rules["HM03 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
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_SHOAL_CAVE_INNER_ROOM/HIGH_TIDE_EAST_MIDDLE_GROUND -> REGION_SHOAL_CAVE_INNER_ROOM/EAST_WATER"),
- can_surf
+ hm_rules["HM03 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
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_WEST_CORNER -> REGION_SHOAL_CAVE_INNER_ROOM/NORTH_WEST_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_SHOAL_CAVE_INNER_ROOM/RARE_CANDY_PLATFORM -> REGION_SHOAL_CAVE_INNER_ROOM/SOUTH_EAST_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/NORTH_WEST -> REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/EAST"),
- can_strength
+ hm_rules["HM04 Strength"]
)
set_rule(
get_entrance("REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/EAST -> REGION_SHOAL_CAVE_LOW_TIDE_LOWER_ROOM/NORTH_WEST"),
- can_strength
+ hm_rules["HM04 Strength"]
)
# Route 126
set_rule(
get_entrance("REGION_ROUTE126/MAIN -> REGION_UNDERWATER_ROUTE126/MAIN"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE126/MAIN -> REGION_UNDERWATER_ROUTE126/SMALL_AREA_2"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE126/NEAR_ROUTE_124 -> REGION_UNDERWATER_ROUTE126/TUNNEL"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE126/NORTH_WEST_CORNER -> REGION_UNDERWATER_ROUTE126/TUNNEL"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE126/WEST -> REGION_UNDERWATER_ROUTE126/MAIN"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE126/WEST -> REGION_UNDERWATER_ROUTE126/SMALL_AREA_1"),
- can_dive
+ hm_rules["HM08 Dive"]
)
# Sootopolis City
set_rule(
get_entrance("REGION_SOOTOPOLIS_CITY/WATER -> REGION_UNDERWATER_SOOTOPOLIS_CITY/MAIN"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_SOOTOPOLIS_CITY/EAST -> REGION_SOOTOPOLIS_CITY/WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_SOOTOPOLIS_CITY/WEST -> REGION_SOOTOPOLIS_CITY/WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_SOOTOPOLIS_CITY/ISLAND -> REGION_SOOTOPOLIS_CITY/WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("MAP_SOOTOPOLIS_CITY:3/MAP_CAVE_OF_ORIGIN_ENTRANCE:0"),
@@ -887,129 +1207,151 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
set_rule(
get_entrance("MAP_SOOTOPOLIS_CITY:2/MAP_SOOTOPOLIS_CITY_GYM_1F:0"),
- lambda state: state.has("EVENT_WAKE_RAYQUAZA", world.player)
+ lambda state: state.has("EVENT_RAYQUAZA_STOPS_FIGHT", world.player)
)
set_rule(
- get_location("NPC_GIFT_RECEIVED_HM07"),
- lambda state: state.has("EVENT_WAKE_RAYQUAZA", world.player)
+ get_location("NPC_GIFT_RECEIVED_HM_WATERFALL"),
+ lambda state: state.has("EVENT_RAYQUAZA_STOPS_FIGHT", world.player)
+ )
+ set_rule(
+ get_location("EVENT_RAYQUAZA_STOPS_FIGHT"),
+ lambda state: state.has("EVENT_RELEASE_KYOGRE", world.player)
)
# Route 127
set_rule(
get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/MAIN"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/TUNNEL"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/AREA_1"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/AREA_2"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE127/MAIN -> REGION_UNDERWATER_ROUTE127/AREA_3"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE127/ENCLOSED_AREA -> REGION_UNDERWATER_ROUTE127/TUNNEL"),
- can_dive
+ hm_rules["HM08 Dive"]
+ )
+ set_rule(
+ get_entrance("REGION_UNDERWATER_ROUTE127/MARINE_CAVE_ENTRANCE_1 -> REGION_UNDERWATER_MARINE_CAVE/MAIN"),
+ lambda state: hm_rules["HM08 Dive"](state) and \
+ state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("MARINE_CAVE_ROUTE_127_1", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_UNDERWATER_ROUTE127/MARINE_CAVE_ENTRANCE_2 -> REGION_UNDERWATER_MARINE_CAVE/MAIN"),
+ lambda state: hm_rules["HM08 Dive"](state) and \
+ state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("MARINE_CAVE_ROUTE_127_2", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
)
# Route 128
set_rule(
get_entrance("REGION_ROUTE128/MAIN -> REGION_UNDERWATER_ROUTE128/MAIN"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE128/MAIN -> REGION_UNDERWATER_ROUTE128/AREA_1"),
- can_dive
+ hm_rules["HM08 Dive"]
)
set_rule(
get_entrance("REGION_ROUTE128/MAIN -> REGION_UNDERWATER_ROUTE128/AREA_2"),
- can_dive
+ hm_rules["HM08 Dive"]
)
# Seafloor Cavern
+ set_rule(
+ get_entrance("REGION_SEAFLOOR_CAVERN_ENTRANCE/MAIN -> REGION_SEAFLOOR_CAVERN_ENTRANCE/WATER"),
+ hm_rules["HM03 Surf"]
+ )
+ set_rule(
+ get_entrance("REGION_SEAFLOOR_CAVERN_ENTRANCE/WATER -> REGION_UNDERWATER_SEAFLOOR_CAVERN/MAIN"),
+ hm_rules["HM08 Dive"]
+ )
set_rule(
get_entrance("REGION_SEAFLOOR_CAVERN_ROOM1/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM1/NORTH"),
- lambda state: can_rock_smash(state) and can_strength(state)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 Strength"](state)
)
set_rule(
get_entrance("REGION_SEAFLOOR_CAVERN_ROOM1/NORTH -> REGION_SEAFLOOR_CAVERN_ROOM1/SOUTH"),
- can_strength
+ hm_rules["HM04 Strength"]
)
set_rule(
get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_WEST"),
- can_strength
+ hm_rules["HM04 Strength"]
)
set_rule(
get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/NORTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST"),
- can_strength
+ hm_rules["HM04 Strength"]
)
set_rule(
get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_EAST"),
- can_rock_smash
+ hm_rules["HM06 Rock Smash"]
)
set_rule(
get_entrance("REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_EAST -> REGION_SEAFLOOR_CAVERN_ROOM2/SOUTH_WEST"),
- can_rock_smash
+ hm_rules["HM06 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 Strength"](state)
)
set_rule(
get_entrance("REGION_SEAFLOOR_CAVERN_ROOM5/EAST -> REGION_SEAFLOOR_CAVERN_ROOM5/NORTH_WEST"),
- can_strength
+ hm_rules["HM04 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 Strength"](state)
)
set_rule(
- get_entrance("REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER"),
- can_surf
+ get_entrance("REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST -> REGION_SEAFLOOR_CAVERN_ROOM6/WATER"),
+ hm_rules["HM03 Surf"]
)
set_rule(
- get_entrance("REGION_SEAFLOOR_CAVERN_ROOM6/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM6/NORTH_WEST"),
- can_surf
+ get_entrance("REGION_SEAFLOOR_CAVERN_ROOM6/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM6/WATER"),
+ hm_rules["HM03 Surf"]
)
set_rule(
- get_entrance("REGION_SEAFLOOR_CAVERN_ROOM6/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM6/CAVE_ON_WATER"),
- can_surf
+ get_entrance("REGION_SEAFLOOR_CAVERN_ROOM7/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM7/WATER"),
+ hm_rules["HM03 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
+ get_entrance("REGION_SEAFLOOR_CAVERN_ROOM7/NORTH -> REGION_SEAFLOOR_CAVERN_ROOM7/WATER"),
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_SEAFLOOR_CAVERN_ROOM8/NORTH -> REGION_SEAFLOOR_CAVERN_ROOM8/SOUTH"),
- can_strength
+ hm_rules["HM04 Strength"]
)
set_rule(
get_entrance("REGION_SEAFLOOR_CAVERN_ROOM8/SOUTH -> REGION_SEAFLOOR_CAVERN_ROOM8/NORTH"),
- can_strength
+ hm_rules["HM04 Strength"]
)
if "Seafloor Cavern Aqua Grunt" not in world.options.remove_roadblocks.value:
set_rule(
@@ -1017,104 +1359,134 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
lambda state: state.has("EVENT_STEVEN_GIVES_DIVE", world.player)
)
+ # Route 129
+ set_rule(
+ get_entrance("REGION_UNDERWATER_ROUTE129/MARINE_CAVE_ENTRANCE_1 -> REGION_UNDERWATER_MARINE_CAVE/MAIN"),
+ lambda state: hm_rules["HM08 Dive"](state) and \
+ state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("MARINE_CAVE_ROUTE_129_1", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_UNDERWATER_ROUTE129/MARINE_CAVE_ENTRANCE_2 -> REGION_UNDERWATER_MARINE_CAVE/MAIN"),
+ lambda state: hm_rules["HM08 Dive"](state) and \
+ state.has("EVENT_DEFEAT_CHAMPION", world.player) and \
+ state.has("MARINE_CAVE_ROUTE_129_2", world.player) and \
+ state.has("EVENT_DEFEAT_SHELLY", world.player)
+ )
+
# Pacifidlog Town
+ set_rule(
+ get_entrance("REGION_PACIFIDLOG_TOWN/MAIN -> REGION_PACIFIDLOG_TOWN/WATER"),
+ hm_rules["HM03 Surf"]
+ )
set_rule(
get_entrance("REGION_PACIFIDLOG_TOWN/MAIN -> REGION_ROUTE131/MAIN"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_PACIFIDLOG_TOWN/MAIN -> REGION_ROUTE132/EAST"),
- can_surf
+ hm_rules["HM03 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)
+ lambda state: state.has("EVENT_RELEASE_KYOGRE", world.player)
+ )
+ add_rule(
+ get_location("EVENT_ENCOUNTER_RAYQUAZA"),
+ lambda state: state.has("EVENT_RAYQUAZA_STOPS_FIGHT", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_SKY_PILLAR_2F/RIGHT -> REGION_SKY_PILLAR_2F/LEFT"),
+ has_mach_bike
+ )
+ set_rule(
+ get_entrance("REGION_SKY_PILLAR_2F/LEFT -> REGION_SKY_PILLAR_2F/RIGHT"),
+ has_mach_bike
+ )
+ set_rule(
+ get_entrance("REGION_SKY_PILLAR_4F/MAIN -> REGION_SKY_PILLAR_4F/ABOVE_3F_TOP_CENTER"),
+ has_mach_bike
)
- # 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
+ hm_rules["HM08 Dive"]
+ )
+ set_rule(
+ get_location("EVENT_UNDO_REGI_SEAL"),
+ lambda state: state.has("CATCH_SPECIES_WAILORD", world.player) and state.has("CATCH_SPECIES_RELICANTH", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_SEALED_CHAMBER_OUTER_ROOM/MAIN -> REGION_SEALED_CHAMBER_OUTER_ROOM/CRUMBLED_WALL"),
+ lambda state: state.has("EVENT_MOVE_TUTOR_DIG", world.player)
)
# Ever Grande City
set_rule(
get_entrance("REGION_EVER_GRANDE_CITY/SEA -> REGION_EVER_GRANDE_CITY/SOUTH"),
- can_waterfall
+ hm_rules["HM07 Waterfall"]
)
set_rule(
get_entrance("REGION_EVER_GRANDE_CITY/SOUTH -> REGION_EVER_GRANDE_CITY/SEA"),
- can_surf
+ hm_rules["HM03 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 Strength"](state)
)
set_rule(
get_entrance("REGION_VICTORY_ROAD_B1F/MAIN_LOWER_EAST -> REGION_VICTORY_ROAD_B1F/MAIN_LOWER_WEST"),
- can_rock_smash
+ hm_rules["HM06 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 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)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 Strength"](state)
)
set_rule(
get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_WEST -> REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_WEST_ISLAND -> REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_EAST -> REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_WEST_WATER -> REGION_VICTORY_ROAD_B2F/UPPER_WATER"),
- can_waterfall
+ hm_rules["HM07 Waterfall"]
)
set_rule(
get_entrance("REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER -> REGION_VICTORY_ROAD_B2F/UPPER_WATER"),
- can_waterfall
+ hm_rules["HM07 Waterfall"]
)
set_rule(
get_entrance("REGION_VICTORY_ROAD_B2F/UPPER -> REGION_VICTORY_ROAD_B2F/UPPER_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
set_rule(
get_entrance("REGION_VICTORY_ROAD_B2F/UPPER -> REGION_VICTORY_ROAD_B2F/LOWER_EAST_WATER"),
- can_surf
+ hm_rules["HM03 Surf"]
)
# Pokemon League
@@ -1130,85 +1502,62 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
# 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
- # )
+ set_rule(
+ get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_WEST/DOCK -> REGION_SS_TIDAL_CORRIDOR/MAIN"),
+ lambda state: state.has("S.S. Ticket", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_WEST/CAVE_ENTRANCE -> REGION_BATTLE_FRONTIER_OUTSIDE_WEST/WATER"),
+ hm_rules["HM03 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 hm_rules["HM03 Surf"](state)
+ )
+ set_rule(
+ get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_EAST/ABOVE_WATERFALL -> REGION_BATTLE_FRONTIER_OUTSIDE_EAST/MAIN"),
+ lambda state: state.has("Wailmer Pail", world.player)
+ )
+ set_rule(
+ get_entrance("REGION_BATTLE_FRONTIER_OUTSIDE_EAST/WATER -> REGION_BATTLE_FRONTIER_OUTSIDE_EAST/ABOVE_WATERFALL"),
+ hm_rules["HM07 Waterfall"]
+ )
+
+ # Pokedex Rewards
+ if world.options.dexsanity:
+ for i in range(NUM_REAL_SPECIES):
+ species = data.species[NATIONAL_ID_TO_SPECIES_ID[i + 1]]
+ set_rule(
+ get_location(f"Pokedex - {species.label}"),
+ lambda state, species_name=species.name: state.has(f"CATCH_{species_name}", world.player)
+ )
+
+ # Legendary hunt prevents Latios from being a wild spawn so the roamer
+ # can be tracked, and also guarantees that the roamer is a Latios.
+ if world.options.goal == Goal.option_legendary_hunt:
+ set_rule(
+ get_location(f"Pokedex - Latios"),
+ lambda state: state.has("EVENT_ENCOUNTER_LATIOS", world.player)
+ )
# 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
+ hm_rules["HM01 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
+ hm_rules["HM06 Rock Smash"]
)
# Victory Road
set_rule(
get_location("ITEM_VICTORY_ROAD_B1F_FULL_RESTORE"),
- lambda state: can_rock_smash(state) and can_strength(state)
+ lambda state: hm_rules["HM06 Rock Smash"](state) and hm_rules["HM04 Strength"](state)
)
# Hidden Items
@@ -1216,13 +1565,13 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Route 120
set_rule(
get_location("HIDDEN_ITEM_ROUTE_120_RARE_CANDY_1"),
- can_cut
+ hm_rules["HM01 Cut"]
)
# Route 121
set_rule(
get_location("HIDDEN_ITEM_ROUTE_121_NUGGET"),
- can_cut
+ hm_rules["HM01 Cut"]
)
# NPC Gifts
@@ -1233,12 +1582,6 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
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"),
@@ -1251,6 +1594,18 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
lambda state: state.has("EVENT_DELIVER_LETTER", world.player)
)
+ # Route 116
+ set_rule(
+ get_location("NPC_GIFT_RECEIVED_REPEAT_BALL"),
+ lambda state: state.has("EVENT_RESCUE_CAPT_STERN", world.player)
+ )
+
+ # Dewford Town
+ set_rule(
+ get_location("NPC_GIFT_RECEIVED_TM_SLUDGE_BOMB"),
+ lambda state: state.has("EVENT_DEFEAT_NORMAN", world.player)
+ )
+
# Slateport City
set_rule(
get_location("NPC_GIFT_RECEIVED_DEEP_SEA_TOOTH"),
@@ -1265,15 +1620,9 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
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"),
+ get_location("NPC_GIFT_GOT_TM_THUNDERBOLT_FROM_WATTSON"),
lambda state: state.has("EVENT_DEFEAT_NORMAN", world.player) and state.has("EVENT_TURN_OFF_GENERATOR", world.player)
)
set_rule(
@@ -1283,7 +1632,7 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
# Fallarbor Town
set_rule(
- get_location("NPC_GIFT_RECEIVED_TM27"),
+ get_location("NPC_GIFT_RECEIVED_TM_RETURN"),
lambda state: state.has("EVENT_RECOVER_METEORITE", world.player) and state.has("Meteorite", world.player)
)
@@ -1293,21 +1642,6 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
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):
@@ -1318,59 +1652,60 @@ def set_rules(world: "PokemonEmeraldWorld") -> None:
)
# Add Flash requirements to dark caves
- if world.options.require_flash:
- # Granite Cave
+ # Granite Cave
+ if world.options.require_flash in [DarkCavesRequireFlash.option_only_granite_cave, DarkCavesRequireFlash.option_both]:
add_rule(
get_entrance("MAP_GRANITE_CAVE_1F:2/MAP_GRANITE_CAVE_B1F:1"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_GRANITE_CAVE_B1F:3/MAP_GRANITE_CAVE_B2F:1"),
- can_flash
+ hm_rules["HM05 Flash"]
)
- # Victory Road
+ # Victory Road
+ if world.options.require_flash in [DarkCavesRequireFlash.option_only_victory_road, DarkCavesRequireFlash.option_both]:
add_rule(
get_entrance("MAP_VICTORY_ROAD_1F:2/MAP_VICTORY_ROAD_B1F:5"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_1F:4/MAP_VICTORY_ROAD_B1F:4"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_1F:3/MAP_VICTORY_ROAD_B1F:2"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_B1F:3/MAP_VICTORY_ROAD_B2F:1"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_B1F:1/MAP_VICTORY_ROAD_B2F:2"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_B1F:6/MAP_VICTORY_ROAD_B2F:3"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_B1F:0/MAP_VICTORY_ROAD_B2F:0"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_B2F:3/MAP_VICTORY_ROAD_B1F:6"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_B2F:2/MAP_VICTORY_ROAD_B1F:1"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_B2F:0/MAP_VICTORY_ROAD_B1F:0"),
- can_flash
+ hm_rules["HM05 Flash"]
)
add_rule(
get_entrance("MAP_VICTORY_ROAD_B2F:1/MAP_VICTORY_ROAD_B1F:3"),
- can_flash
+ hm_rules["HM05 Flash"]
)
diff --git a/worlds/pokemon_emerald/sanity_check.py b/worlds/pokemon_emerald/sanity_check.py
index 58f9b1ef4d..24eb768bfb 100644
--- a/worlds/pokemon_emerald/sanity_check.py
+++ b/worlds/pokemon_emerald/sanity_check.py
@@ -5,35 +5,41 @@ duplicate claims and give warnings for unused and unignored locations or warps.
import logging
from typing import List
-from .data import data
+from .data import load_json_data, 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",
+_IGNORABLE_LOCATIONS = frozenset({
+ "HIDDEN_ITEM_TRICK_HOUSE_NUGGET", # Is permanently mssiable and has special behavior that sets the flag early
- # 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",
+ # Duplicate rival fights. All variations are represented by the Brandon + Mudkip version
+ "TRAINER_BRENDAN_ROUTE_103_TREECKO_REWARD",
+ "TRAINER_BRENDAN_ROUTE_103_TORCHIC_REWARD",
+ "TRAINER_MAY_ROUTE_103_MUDKIP_REWARD",
+ "TRAINER_MAY_ROUTE_103_TREECKO_REWARD",
+ "TRAINER_MAY_ROUTE_103_TORCHIC_REWARD",
+ "TRAINER_BRENDAN_ROUTE_110_TREECKO_REWARD",
+ "TRAINER_BRENDAN_ROUTE_110_TORCHIC_REWARD",
+ "TRAINER_MAY_ROUTE_110_MUDKIP_REWARD",
+ "TRAINER_MAY_ROUTE_110_TREECKO_REWARD",
+ "TRAINER_MAY_ROUTE_110_TORCHIC_REWARD",
+ "TRAINER_BRENDAN_ROUTE_119_TREECKO_REWARD",
+ "TRAINER_BRENDAN_ROUTE_119_TORCHIC_REWARD",
+ "TRAINER_MAY_ROUTE_119_MUDKIP_REWARD",
+ "TRAINER_MAY_ROUTE_119_TREECKO_REWARD",
+ "TRAINER_MAY_ROUTE_119_TORCHIC_REWARD",
+ "TRAINER_BRENDAN_RUSTBORO_TREECKO_REWARD",
+ "TRAINER_BRENDAN_RUSTBORO_TORCHIC_REWARD",
+ "TRAINER_MAY_RUSTBORO_MUDKIP_REWARD",
+ "TRAINER_MAY_RUSTBORO_TREECKO_REWARD",
+ "TRAINER_MAY_RUSTBORO_TORCHIC_REWARD",
+ "TRAINER_BRENDAN_LILYCOVE_TREECKO_REWARD",
+ "TRAINER_BRENDAN_LILYCOVE_TORCHIC_REWARD",
+ "TRAINER_MAY_LILYCOVE_MUDKIP_REWARD",
+ "TRAINER_MAY_LILYCOVE_TREECKO_REWARD",
+ "TRAINER_MAY_LILYCOVE_TORCHIC_REWARD",
+})
- # Event islands
- "HIDDEN_ITEM_NAVEL_ROCK_TOP_SACRED_ASH"
-}
-
-_ignorable_warps = {
+_IGNORABLE_WARPS = frozenset({
# 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!",
@@ -72,75 +78,16 @@ _ignorable_warps = {
"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!",
@@ -153,8 +100,6 @@ _ignorable_warps = {
"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!",
@@ -164,6 +109,10 @@ _ignorable_warps = {
"MAP_UNDERWATER_ROUTE129:0/MAP_UNDERWATER_MARINE_CAVE:0!",
"MAP_UNDERWATER_ROUTE129:1/MAP_UNDERWATER_MARINE_CAVE:0!",
+ # Altering Cave
+ "MAP_ALTERING_CAVE:0/MAP_ROUTE103:0",
+ "MAP_ROUTE103:0/MAP_ALTERING_CAVE:0",
+
# Event islands
"MAP_BIRTH_ISLAND_EXTERIOR:0/MAP_BIRTH_ISLAND_HARBOR:0",
"MAP_BIRTH_ISLAND_HARBOR:0/MAP_BIRTH_ISLAND_EXTERIOR:0",
@@ -294,11 +243,17 @@ _ignorable_warps = {
"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!"
-}
+ "MAP_LILYCOVE_CITY_UNUSED_MART:0,1/MAP_LILYCOVE_CITY:0!",
+})
def validate_regions() -> bool:
+ """
+ Verifies that Emerald's data doesn't have duplicate or missing
+ regions/warps/locations. Meant to catch problems during development like
+ forgetting to add a new location or incorrectly splitting a region.
+ """
+ extracted_data_json = load_json_data("extracted_data.json")
error_messages: List[str] = []
warn_messages: List[str] = []
failed = False
@@ -319,7 +274,7 @@ def validate_regions() -> bool:
# Check warps
for warp_source, warp_dest in data.warp_map.items():
- if warp_source in _ignorable_warps:
+ if warp_source in _IGNORABLE_WARPS:
continue
if warp_dest is None:
@@ -335,8 +290,8 @@ def validate_regions() -> bool:
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:
+ for location_name in extracted_data_json["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()
diff --git a/worlds/pokemon_emerald/test/test_accessibility.py b/worlds/pokemon_emerald/test/test_accessibility.py
index 853a92ffb8..d273015171 100644
--- a/worlds/pokemon_emerald/test/test_accessibility.py
+++ b/worlds/pokemon_emerald/test/test_accessibility.py
@@ -21,25 +21,25 @@ class TestScorchedSlabPond(PokemonEmeraldTestBase):
self.collect_by_name(["S.S. Ticket", "Letter", "Stone Badge", "HM01 Cut"])
self.assertTrue(self.can_reach_region("REGION_ROUTE120/NORTH"))
self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_ROUTE_120_NEST_BALL")))
- self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_SCORCHED_SLAB_TM11")))
+ self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_SCORCHED_SLAB_TM_SUNNY_DAY")))
def test_with_surf(self) -> None:
self.collect_by_name(["S.S. Ticket", "Letter", "Stone Badge", "HM01 Cut", "HM03 Surf", "Balance Badge"])
self.assertTrue(self.can_reach_region("REGION_ROUTE120/NORTH"))
self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_ROUTE_120_NEST_BALL")))
- self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_SCORCHED_SLAB_TM11")))
+ self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_SCORCHED_SLAB_TM_SUNNY_DAY")))
def test_with_scope(self) -> None:
self.collect_by_name(["S.S. Ticket", "Letter", "Stone Badge", "HM01 Cut", "Devon Scope"])
self.assertTrue(self.can_reach_region("REGION_ROUTE120/NORTH"))
self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_ROUTE_120_NEST_BALL")))
- self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_SCORCHED_SLAB_TM11")))
+ self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_SCORCHED_SLAB_TM_SUNNY_DAY")))
def test_with_both(self) -> None:
self.collect_by_name(["S.S. Ticket", "Letter", "Stone Badge", "HM01 Cut", "Devon Scope", "HM03 Surf", "Balance Badge"])
self.assertTrue(self.can_reach_region("REGION_ROUTE120/NORTH"))
self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_ROUTE_120_NEST_BALL")))
- self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_SCORCHED_SLAB_TM11")))
+ self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_SCORCHED_SLAB_TM_SUNNY_DAY")))
class TestSurf(PokemonEmeraldTestBase):
@@ -55,7 +55,7 @@ class TestSurf(PokemonEmeraldTestBase):
self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_LILYCOVE_CITY_MAX_REPEL")))
self.assertFalse(self.can_reach_location(location_name_to_label("HIDDEN_ITEM_ROUTE_120_RARE_CANDY_2")))
self.assertFalse(self.can_reach_location(location_name_to_label("ITEM_ROUTE_120_FULL_HEAL")))
- self.assertFalse(self.can_reach_entrance("REGION_ROUTE118/WATER -> REGION_ROUTE118/EAST"))
+ self.assertFalse(self.can_reach_entrance("REGION_ROUTE118/EAST_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"))
@@ -66,7 +66,7 @@ class TestSurf(PokemonEmeraldTestBase):
self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_LILYCOVE_CITY_MAX_REPEL")))
self.assertTrue(self.can_reach_location(location_name_to_label("HIDDEN_ITEM_ROUTE_120_RARE_CANDY_2")))
self.assertTrue(self.can_reach_location(location_name_to_label("ITEM_ROUTE_120_FULL_HEAL")))
- self.assertTrue(self.can_reach_entrance("REGION_ROUTE118/WATER -> REGION_ROUTE118/EAST"))
+ self.assertTrue(self.can_reach_entrance("REGION_ROUTE118/EAST_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")))
@@ -88,17 +88,16 @@ class TestFreeFly(PokemonEmeraldTestBase):
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")))
+ self.assertFalse(self.can_reach_location(location_name_to_label("NPC_GIFT_RECEIVED_TM_BRICK_BREAK")))
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")))
+ self.assertTrue(self.can_reach_location(location_name_to_label("NPC_GIFT_RECEIVED_TM_BRICK_BREAK")))
class TestFerry(PokemonEmeraldTestBase):
options = {
- "npc_gifts": Toggle.option_true,
- "enable_ferry": Toggle.option_true
+ "npc_gifts": Toggle.option_true
}
def test_inaccessible_with_no_items(self) -> None:
diff --git a/worlds/pokemon_emerald/util.py b/worlds/pokemon_emerald/util.py
index 781cfd47bc..f7f02edd95 100644
--- a/worlds/pokemon_emerald/util.py
+++ b/worlds/pokemon_emerald/util.py
@@ -1,6 +1,115 @@
-from typing import List
+import orjson
+from typing import Any, Dict, List, Optional, Tuple, Iterable
-from .data import data
+from .data import NATIONAL_ID_TO_SPECIES_ID, data
+
+
+CHARACTER_DECODING_MAP = {
+ 0x00: " ", 0x01: "À", 0x02: "Á", 0x03: "Â", 0x04: "Ç",
+ 0x05: "È", 0x06: "É", 0x07: "Ê", 0x08: "Ë", 0x09: "Ì",
+ 0x0B: "Î", 0x0C: "Ï", 0x0D: "Ò", 0x0E: "Ó", 0x0F: "Ô",
+ 0x10: "Œ", 0x11: "Ù", 0x12: "Ú", 0x13: "Û", 0x14: "Ñ",
+ 0x15: "ß", 0x16: "à", 0x17: "á", 0x19: "ç", 0x1A: "è",
+ 0x1B: "é", 0x1C: "ê", 0x1D: "ë", 0x1E: "ì", 0x20: "î",
+ 0x21: "ï", 0x22: "ò", 0x23: "ó", 0x24: "ô", 0x25: "œ",
+ 0x26: "ù", 0x27: "ú", 0x28: "û", 0x29: "ñ", 0x2A: "°",
+ 0x2B: "ª", 0x2D: "&", 0x2E: "+", 0x35: "=", 0x36: ";",
+ 0x50: "▯", 0x51: "¿", 0x52: "¡", 0x5A: "Í", 0x5B: "%",
+ 0x5C: "(", 0x5D: ")", 0x68: "â", 0x6F: "í", 0x79: "⬆",
+ 0x7A: "⬇", 0x7B: "⬅", 0x7C: "➡", 0x7D: "*", 0x84: "ᵉ",
+ 0x85: "<", 0x86: ">", 0xA1: "0", 0xA2: "1", 0xA3: "2",
+ 0xA4: "3", 0xA5: "4", 0xA6: "5", 0xA7: "6", 0xA8: "7",
+ 0xA9: "8", 0xAA: "9", 0xAB: "!", 0xAC: "?", 0xAD: ".",
+ 0xAE: "-", 0xB0: "…", 0xB1: "“", 0xB2: "”", 0xB3: "‘",
+ 0xB4: "’", 0xB5: "♂", 0xB6: "♀", 0xB8: ",", 0xB9: "×",
+ 0xBA: "/", 0xBB: "A", 0xBC: "B", 0xBD: "C", 0xBE: "D",
+ 0xBF: "E", 0xC0: "F", 0xC1: "G", 0xC2: "H", 0xC3: "I",
+ 0xC4: "J", 0xC5: "K", 0xC6: "L", 0xC7: "M", 0xC8: "N",
+ 0xC9: "O", 0xCA: "P", 0xCB: "Q", 0xCC: "R", 0xCD: "S",
+ 0xCE: "T", 0xCF: "U", 0xD0: "V", 0xD1: "W", 0xD2: "X",
+ 0xD3: "Y", 0xD4: "Z", 0xD5: "a", 0xD6: "b", 0xD7: "c",
+ 0xD8: "d", 0xD9: "e", 0xDA: "f", 0xDB: "g", 0xDC: "h",
+ 0xDD: "i", 0xDE: "j", 0xDF: "k", 0xE0: "l", 0xE1: "m",
+ 0xE2: "n", 0xE3: "o", 0xE4: "p", 0xE5: "q", 0xE6: "r",
+ 0xE7: "s", 0xE8: "t", 0xE9: "u", 0xEA: "v", 0xEB: "w",
+ 0xEC: "x", 0xED: "y", 0xEE: "z", 0xEF: "▶", 0xF0: ":",
+}
+
+CHARACTER_ENCODING_MAP = {value: key for key, value in CHARACTER_DECODING_MAP.items()}
+CHARACTER_ENCODING_MAP.update({
+ "'": CHARACTER_ENCODING_MAP["’"],
+ "\"": CHARACTER_ENCODING_MAP["”"],
+ "_": CHARACTER_ENCODING_MAP[" "],
+})
+
+ALLOWED_TRAINER_NAME_CHARACTERS = frozenset({
+ " ", "0", "1", "2", "3", "4", "5", "6", "7", "8",
+ "9", "!", "?", ".", "-", "…", "“", "”", "‘", "’",
+ "♂", "♀", ",", "/", "A", "B", "C", "D", "E", "F",
+ "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
+ "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
+ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
+ "k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
+ "u", "v", "w", "x", "y", "z",
+})
+
+
+def encode_string(string: str, length: Optional[int] = None) -> bytes:
+ arr = []
+ length = len(string) if length is None else length
+
+ for i in range(length):
+ if i >= len(string):
+ arr.append(0xFF)
+ continue
+
+ char = string[i]
+ if char in CHARACTER_ENCODING_MAP:
+ arr.append(CHARACTER_ENCODING_MAP[char])
+ else:
+ arr.append(CHARACTER_ENCODING_MAP["?"])
+
+ return bytes(arr)
+
+
+def decode_string(string_data: Iterable[int]) -> str:
+ string = ""
+ for code in string_data:
+ if code == 0xFF:
+ break
+
+ if code in CHARACTER_DECODING_MAP:
+ string += CHARACTER_DECODING_MAP[code]
+ else:
+ raise KeyError(f"The following value does not correspond to a character in Pokemon Emerald: {code}")
+
+ return string
+
+
+def get_easter_egg(easter_egg: str) -> Tuple[int, int]:
+ easter_egg = easter_egg.upper()
+ result1 = 0
+ result2 = 0
+ for c in easter_egg:
+ result1 = ((result1 << 5) - result1 + ord(c)) & 0xFFFFFFFF
+ result2 = ((result2 << 4) - result2 + ord(c)) & 0xFF
+
+ if result1 == 0x9137C17B:
+ value = (result2 + 23) & 0xFF
+ if value > 0 and (value < 252 or (value > 276 and value < 412)):
+ return (1, value)
+ elif result1 == 0x9AECC7C6:
+ value = (result2 + 64) & 0xFF
+ if value > 0 and value < 355:
+ return (2, value)
+ elif result1 == 0x506D2690:
+ value = (result2 + 169) & 0xFF
+ if value > 0 and value < 78:
+ return (3, value)
+ elif result1 == 0xA7850E45 and (result1 ^ result2) & 0xFF == 96:
+ return (4, 0)
+
+ return (0, 0)
def location_name_to_label(name: str) -> str:
@@ -8,12 +117,233 @@ def location_name_to_label(name: str) -> str:
def int_to_bool_array(num: int) -> List[bool]:
- binary_string = format(num, '064b')
- bool_array = [bit == '1' for bit in reversed(binary_string)]
+ 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)])
+ binary_string = "".join(["1" if bit else "0" for bit in reversed(bool_array)])
num = int(binary_string, 2)
return num
+
+
+_SUBSTRUCT_ORDERS = [
+ [0, 1, 2, 3], [0, 1, 3, 2], [0, 2, 1, 3], [0, 3, 1, 2],
+ [0, 2, 3, 1], [0, 3, 2, 1], [1, 0, 2, 3], [1, 0, 3, 2],
+ [2, 0, 1, 3], [3, 0, 1, 2], [2, 0, 3, 1], [3, 0, 2, 1],
+ [1, 2, 0, 3], [1, 3, 0, 2], [2, 1, 0, 3], [3, 1, 0, 2],
+ [2, 3, 0, 1], [3, 2, 0, 1], [1, 2, 3, 0], [1, 3, 2, 0],
+ [2, 1, 3, 0], [3, 1, 2, 0], [2, 3, 1, 0], [3, 2, 1, 0],
+]
+
+_LANGUAGE_IDS = {
+ "Japanese": 1,
+ "English": 2,
+ "French": 3,
+ "Italian": 4,
+ "German": 5,
+ "Spanish": 7,
+}
+
+_MODERN_ITEM_TO_EMERALD_ITEM = {
+ item.modern_id: item.item_id
+ for item in data.items.values()
+ if item.modern_id is not None
+}
+
+
+def _encrypt_or_decrypt_substruct(substruct_data: Iterable[int], key: int) -> bytearray:
+ modified_data = bytearray()
+ for i in range(int(len(substruct_data) / 4)):
+ modified_data.extend((int.from_bytes(substruct_data[i * 4 : (i + 1) * 4], "little") ^ key).to_bytes(4, "little"))
+
+ return modified_data
+
+
+def pokemon_data_to_json(pokemon_data: Iterable[int]) -> str:
+ personality = int.from_bytes(pokemon_data[0:4], "little")
+ tid = int.from_bytes(pokemon_data[4:8], "little")
+
+ substruct_order = _SUBSTRUCT_ORDERS[personality % 24]
+ substructs = []
+ for i in substruct_order:
+ substructs.append(pokemon_data[32 + (i * 12) : 32 + ((i + 1) * 12)])
+
+ decrypted_substructs = [_encrypt_or_decrypt_substruct(substruct, personality ^ tid) for substruct in substructs]
+
+ iv_ability_info = int.from_bytes(decrypted_substructs[3][4:8], "little")
+ met_info = int.from_bytes(decrypted_substructs[3][2:4], "little")
+
+ held_item = int.from_bytes(decrypted_substructs[0][2:4], "little")
+
+ json_object = {
+ "version": "1",
+ "personality": personality,
+ "nickname": decode_string(pokemon_data[8:18]),
+ "language": {v: k for k, v in _LANGUAGE_IDS.items()}[pokemon_data[18]],
+ "species": data.species[int.from_bytes(decrypted_substructs[0][0:2], "little")].national_dex_number,
+ "experience": int.from_bytes(decrypted_substructs[0][4:8], "little"),
+ "ability": iv_ability_info >> 31,
+ "ivs": [(iv_ability_info >> (i * 5)) & 0x1F for i in range(6)],
+ "evs": list(decrypted_substructs[2][0:6]),
+ "conditions": list(decrypted_substructs[2][6:12]),
+ "pokerus": decrypted_substructs[3][0],
+ "location_met": decrypted_substructs[3][1],
+ "level_met": met_info & 0b0000000001111111,
+ "game": (met_info & 0b0000011110000000) >> 7,
+ "ball": (met_info & 0b0111100000000000) >> 11,
+ "moves": [
+ [
+ int.from_bytes(decrypted_substructs[1][i * 2 : (i + 1) * 2], "little"),
+ decrypted_substructs[1][8 + i],
+ (decrypted_substructs[0][8] & (0b00000011 << (i * 2))) >> (i * 2)
+ ] for i in range(4)
+ ],
+ "trainer": {
+ "name": decode_string(pokemon_data[20:27]),
+ "id": tid,
+ "female": (met_info & 0b1000000000000000) != 0,
+ },
+ }
+
+ if held_item != 0:
+ json_object["item"] = data.items[held_item].modern_id
+
+ return orjson.dumps(json_object).decode("utf-8")
+
+
+def json_to_pokemon_data(json_str: str) -> bytearray:
+ pokemon_json: Dict[str, Any] = orjson.loads(json_str)
+
+ # Default values to cover for optional or accidentally missed fields
+ default_pokemon = {
+ "nickname": "A",
+ "personality": 0,
+ "species": 1,
+ "experience": 0,
+ "ability": 0,
+ "ivs": [0, 0, 0, 0, 0, 0],
+ "evs": [0, 0, 0, 0, 0, 0],
+ "conditions": [0, 0, 0, 0, 0, 0],
+ "pokerus": 0,
+ "game": 3,
+ "location_met": 0,
+ "level_met": 1,
+ "ball": 4,
+ "moves": [[33, 35, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]],
+ }
+
+ default_trainer = {
+ "name": "A",
+ "id": 0,
+ "female": False,
+ }
+
+ pokemon_json = {**default_pokemon, **{k: v for k, v in pokemon_json.items()}}
+ pokemon_json["trainer"] = {**default_trainer, **pokemon_json["trainer"]}
+
+ # Cutting string lengths to Emerald sizes
+ pokemon_json["nickname"] = pokemon_json["nickname"][0:10]
+ pokemon_json["trainer"]["name"] = pokemon_json["trainer"]["name"][0:7]
+
+ # Handle data from incompatible games
+ if pokemon_json["species"] > 387:
+ pokemon_json["species"] = 201 # Unown
+ if pokemon_json["ball"] > 12:
+ pokemon_json["ball"] = 4 # Pokeball
+ if "game" not in pokemon_json or (pokemon_json["game"] > 5 and pokemon_json["game"] != 15):
+ pokemon_json["game"] = 0 # Unknown
+ pokemon_json["location_met"] = 0 # Littleroot
+
+ substructs = [bytearray([0 for _ in range(12)]) for _ in range(4)]
+
+ # Substruct type 0
+ for i, byte in enumerate(NATIONAL_ID_TO_SPECIES_ID[pokemon_json["species"]].to_bytes(2, "little")):
+ substructs[0][0 + i] = byte
+
+ if "item" in pokemon_json:
+ if pokemon_json["item"] in _MODERN_ITEM_TO_EMERALD_ITEM:
+ for i, byte in enumerate(_MODERN_ITEM_TO_EMERALD_ITEM[pokemon_json["item"]].to_bytes(2, "little")):
+ substructs[0][2 + i] = byte
+
+ for i, byte in enumerate((pokemon_json["experience"]).to_bytes(4, "little")):
+ substructs[0][4 + i] = byte
+
+ for i, move_info in enumerate(pokemon_json["moves"]):
+ substructs[0][8] |= ((move_info[2] & 0b11) << (2 * i))
+
+ substructs[0][9] = data.species[NATIONAL_ID_TO_SPECIES_ID[pokemon_json["species"]]].friendship
+
+ # Substruct type 1
+ for i, move_info in enumerate(pokemon_json["moves"]):
+ for j, byte in enumerate(move_info[0].to_bytes(2, "little")):
+ substructs[1][(i * 2) + j] = byte
+
+ substructs[1][8 + i] = move_info[1]
+
+ # Substruct type 2
+ for i, ev in enumerate(pokemon_json["evs"]):
+ substructs[2][0 + i] = ev
+
+ for i, condition in enumerate(pokemon_json["conditions"]):
+ substructs[2][6 + i] = condition
+
+ # Substruct type 3
+ substructs[3][0] = pokemon_json["pokerus"]
+ substructs[3][1] = pokemon_json["location_met"]
+
+ origin = pokemon_json["level_met"] | (pokemon_json["game"] << 7) | (pokemon_json["ball"] << 11)
+ origin |= (1 << 15) if pokemon_json["trainer"]["female"] else 0
+ for i, byte in enumerate(origin.to_bytes(2, "little")):
+ substructs[3][2 + i] = byte
+
+ iv_ability_info = 0
+ for i, iv in enumerate(pokemon_json["ivs"]):
+ iv_ability_info |= iv << (i * 5)
+ iv_ability_info |= 1 << 31 if pokemon_json["ability"] == 1 else 0
+ for i, byte in enumerate(iv_ability_info.to_bytes(4, "little")):
+ substructs[3][4 + i] = byte
+
+ # Main data
+ pokemon_data = bytearray([0 for _ in range(80)])
+ for i, byte in enumerate(pokemon_json["personality"].to_bytes(4, "little")):
+ pokemon_data[0 + i] = byte
+
+ for i, byte in enumerate(pokemon_json["trainer"]["id"].to_bytes(4, "little")):
+ pokemon_data[4 + i] = byte
+
+ for i, byte in enumerate(encode_string(pokemon_json["nickname"], 10)):
+ pokemon_data[8 + i] = byte
+
+ pokemon_data[18] = _LANGUAGE_IDS[pokemon_json["language"]]
+ pokemon_data[19] = 0b00000010 # Flags for Bad Egg, Has Species, Is Egg, padding bits (low to high)
+
+ for i, byte in enumerate(encode_string(pokemon_json["trainer"]["name"], 7)):
+ pokemon_data[20 + i] = byte
+
+ # Markings, 1 byte
+
+ checksum = 0
+ for i in range(4):
+ for j in range(6):
+ checksum += int.from_bytes(substructs[i][j * 2 : (j + 1) * 2], "little")
+ checksum &= 0xFFFF
+ for i, byte in enumerate(checksum.to_bytes(2, "little")):
+ pokemon_data[28 + i] = byte
+
+ # Separator, 2 bytes
+
+ substruct_order = [_SUBSTRUCT_ORDERS[pokemon_json["personality"] % 24].index(n) for n in [0, 1, 2, 3]]
+ encrypted_substructs = [None for _ in range(4)]
+ encryption_key = pokemon_json["personality"] ^ pokemon_json["trainer"]["id"]
+ encrypted_substructs[0] = _encrypt_or_decrypt_substruct(substructs[substruct_order[0]], encryption_key)
+ encrypted_substructs[1] = _encrypt_or_decrypt_substruct(substructs[substruct_order[1]], encryption_key)
+ encrypted_substructs[2] = _encrypt_or_decrypt_substruct(substructs[substruct_order[2]], encryption_key)
+ encrypted_substructs[3] = _encrypt_or_decrypt_substruct(substructs[substruct_order[3]], encryption_key)
+
+ for i in range(4):
+ for j in range(12):
+ pokemon_data[32 + (i * 12) + j] = encrypted_substructs[i][j]
+
+ return pokemon_data
diff --git a/worlds/shivers/Items.py b/worlds/shivers/Items.py
index caf24ded29..3b403be5cb 100644
--- a/worlds/shivers/Items.py
+++ b/worlds/shivers/Items.py
@@ -47,7 +47,7 @@ item_table = {
"Key for Generator Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 29, "key"),
"Key for Egypt Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 30, "key"),
"Key for Library Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 31, "key"),
- "Key for Tiki Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 32, "key"),
+ "Key for Shaman Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 32, "key"),
"Key for UFO Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 33, "key"),
"Key for Torture Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 34, "key"),
"Key for Puzzle Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 35, "key"),
@@ -90,7 +90,7 @@ item_table = {
"Water Always Available in Lobby": ItemData(SHIVERS_ITEM_ID_OFFSET + 92, "filler2", ItemClassification.filler),
"Wax Always Available in Library": ItemData(SHIVERS_ITEM_ID_OFFSET + 93, "filler2", ItemClassification.filler),
"Wax Always Available in Anansi Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 94, "filler2", ItemClassification.filler),
- "Wax Always Available in Tiki Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 95, "filler2", ItemClassification.filler),
+ "Wax Always Available in Shaman Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 95, "filler2", ItemClassification.filler),
"Ash Always Available in Office": ItemData(SHIVERS_ITEM_ID_OFFSET + 96, "filler2", ItemClassification.filler),
"Ash Always Available in Burial Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 97, "filler2", ItemClassification.filler),
"Oil Always Available in Prehistoric Room": ItemData(SHIVERS_ITEM_ID_OFFSET + 98, "filler2", ItemClassification.filler),
diff --git a/worlds/shivers/Options.py b/worlds/shivers/Options.py
index 6d18804069..b70882f9a5 100644
--- a/worlds/shivers/Options.py
+++ b/worlds/shivers/Options.py
@@ -13,13 +13,16 @@ class LobbyAccess(Choice):
option_local = 2
class PuzzleHintsRequired(DefaultOnToggle):
- """If turned on puzzle hints will be available before the corresponding puzzle is required. For example: The Tiki
+ """If turned on puzzle hints will be available before the corresponding puzzle is required. For example: The Shaman
Drums puzzle will be placed after access to the security cameras which give you the solution. Turning this off
allows for greater randomization."""
display_name = "Puzzle Hints Required"
class InformationPlaques(Toggle):
- """Adds Information Plaques as checks."""
+ """
+ Adds Information Plaques as checks.
+ (40 Locations)
+ """
display_name = "Include Information Plaques"
class FrontDoorUsable(Toggle):
@@ -27,7 +30,10 @@ class FrontDoorUsable(Toggle):
display_name = "Front Door Usable"
class ElevatorsStaySolved(DefaultOnToggle):
- """Adds elevators as checks and will remain open upon solving them."""
+ """
+ Adds elevators as checks and will remain open upon solving them.
+ (3 Locations)
+ """
display_name = "Elevators Stay Solved"
class EarlyBeth(DefaultOnToggle):
@@ -35,7 +41,10 @@ class EarlyBeth(DefaultOnToggle):
display_name = "Early Beth"
class EarlyLightning(Toggle):
- """Allows lightning to be captured at any point in the game. You will still need to capture all ten Ixupi for victory."""
+ """
+ Allows lightning to be captured at any point in the game. You will still need to capture all ten Ixupi for victory.
+ (1 Location)
+ """
display_name = "Early Lightning"
diff --git a/worlds/shivers/Rules.py b/worlds/shivers/Rules.py
index 57488ff333..8aa8aa2c28 100644
--- a/worlds/shivers/Rules.py
+++ b/worlds/shivers/Rules.py
@@ -96,8 +96,8 @@ def get_rules_lookup(player: int):
"To Lobby From Egypt": lambda state: state.has("Key for Egypt Room", player),
"To Egypt From Lobby": lambda state: state.has("Key for Egypt Room", player),
"To Janitor Closet": lambda state: state.has("Key for Janitor Closet", player),
- "To Tiki From Burial": lambda state: state.has("Key for Tiki Room", player),
- "To Burial From Tiki": lambda state: state.has("Key for Tiki Room", player),
+ "To Shaman From Burial": lambda state: state.has("Key for Shaman Room", player),
+ "To Burial From Shaman": lambda state: state.has("Key for Shaman Room", player),
"To Inventions From UFO": lambda state: state.has("Key for UFO Room", player),
"To UFO From Inventions": lambda state: state.has("Key for UFO Room", player),
"To Torture From Inventions": lambda state: state.has("Key for Torture Room", player),
@@ -145,7 +145,7 @@ def get_rules_lookup(player: int):
"locations_puzzle_hints": {
"Puzzle Solved Clock Tower Door": lambda state: state.can_reach("Three Floor Elevator", "Region", player),
"Puzzle Solved Clock Chains": lambda state: state.can_reach("Bedroom", "Region", player),
- "Puzzle Solved Tiki Drums": lambda state: state.can_reach("Clock Tower", "Region", player),
+ "Puzzle Solved Shaman Drums": lambda state: state.can_reach("Clock Tower", "Region", player),
"Puzzle Solved Red Door": lambda state: state.can_reach("Maintenance Tunnels", "Region", player),
"Puzzle Solved UFO Symbols": lambda state: state.can_reach("Library", "Region", player),
"Puzzle Solved Maze Door": lambda state: state.can_reach("Projector Room", "Region", player),
@@ -202,7 +202,7 @@ def set_rules(world: "ShiversWorld") -> None:
forbid_item(multiworld.get_location("Ixupi Captured Water", player), "Water Always Available in Lobby", player)
forbid_item(multiworld.get_location("Ixupi Captured Wax", player), "Wax Always Available in Library", player)
forbid_item(multiworld.get_location("Ixupi Captured Wax", player), "Wax Always Available in Anansi Room", player)
- forbid_item(multiworld.get_location("Ixupi Captured Wax", player), "Wax Always Available in Tiki Room", player)
+ forbid_item(multiworld.get_location("Ixupi Captured Wax", player), "Wax Always Available in Shaman Room", player)
forbid_item(multiworld.get_location("Ixupi Captured Ash", player), "Ash Always Available in Office", player)
forbid_item(multiworld.get_location("Ixupi Captured Ash", player), "Ash Always Available in Burial Room", player)
forbid_item(multiworld.get_location("Ixupi Captured Oil", player), "Oil Always Available in Prehistoric Room", player)
diff --git a/worlds/shivers/data/excluded_locations.json b/worlds/shivers/data/excluded_locations.json
index a37285eb1d..29655d4a50 100644
--- a/worlds/shivers/data/excluded_locations.json
+++ b/worlds/shivers/data/excluded_locations.json
@@ -1,45 +1,45 @@
{
"plaques": [
- "Information Plaque: Transforming Masks (Lobby)",
- "Information Plaque: Jade Skull (Lobby)",
- "Information Plaque: Bronze Unicorn (Prehistoric)",
- "Information Plaque: Griffin (Prehistoric)",
- "Information Plaque: Eagles Nest (Prehistoric)",
- "Information Plaque: Large Spider (Prehistoric)",
- "Information Plaque: Starfish (Prehistoric)",
- "Information Plaque: Quartz Crystal (Ocean)",
- "Information Plaque: Poseidon (Ocean)",
- "Information Plaque: Colossus of Rhodes (Ocean)",
- "Information Plaque: Poseidon's Temple (Ocean)",
- "Information Plaque: Subterranean World (Underground Maze)",
- "Information Plaque: Dero (Underground Maze)",
- "Information Plaque: Tomb of the Ixupi (Egypt)",
- "Information Plaque: The Sphinx (Egypt)",
- "Information Plaque: Curse of Anubis (Egypt)",
- "Information Plaque: Norse Burial Ship (Burial)",
- "Information Plaque: Paracas Burial Bundles (Burial)",
- "Information Plaque: Spectacular Coffins of Ghana (Burial)",
- "Information Plaque: Cremation (Burial)",
- "Information Plaque: Animal Crematorium (Burial)",
- "Information Plaque: Witch Doctors of the Congo (Tiki)",
- "Information Plaque: Sarombe doctor of Mozambique (Tiki)",
- "Information Plaque: Fisherman's Canoe God (Gods)",
- "Information Plaque: Mayan Gods (Gods)",
- "Information Plaque: Thor (Gods)",
- "Information Plaque: Celtic Janus Sculpture (Gods)",
- "Information Plaque: Sumerian Bull God - An (Gods)",
- "Information Plaque: Sumerian Lyre (Gods)",
- "Information Plaque: Chuen (Gods)",
- "Information Plaque: African Creation Myth (Anansi)",
- "Information Plaque: Apophis the Serpent (Anansi)",
- "Information Plaque: Death (Anansi)",
- "Information Plaque: Cyclops (Pegasus)",
- "Information Plaque: Lycanthropy (Werewolf)",
- "Information Plaque: Coincidence or Extraterrestrial Visits? (UFO)",
- "Information Plaque: Planets (UFO)",
- "Information Plaque: Astronomical Construction (UFO)",
- "Information Plaque: Guillotine (Torture)",
- "Information Plaque: Aliens (UFO)"
+ "Information Plaque: (Lobby) Transforming Masks",
+ "Information Plaque: (Lobby) Jade Skull",
+ "Information Plaque: (Prehistoric) Bronze Unicorn",
+ "Information Plaque: (Prehistoric) Griffin",
+ "Information Plaque: (Prehistoric) Eagles Nest",
+ "Information Plaque: (Prehistoric) Large Spider",
+ "Information Plaque: (Prehistoric) Starfish",
+ "Information Plaque: (Ocean) Quartz Crystal",
+ "Information Plaque: (Ocean) Poseidon",
+ "Information Plaque: (Ocean) Colossus of Rhodes",
+ "Information Plaque: (Ocean) Poseidon's Temple",
+ "Information Plaque: (Underground Maze) Subterranean World",
+ "Information Plaque: (Underground Maze) Dero",
+ "Information Plaque: (Egypt) Tomb of the Ixupi",
+ "Information Plaque: (Egypt) The Sphinx",
+ "Information Plaque: (Egypt) Curse of Anubis",
+ "Information Plaque: (Burial) Norse Burial Ship",
+ "Information Plaque: (Burial) Paracas Burial Bundles",
+ "Information Plaque: (Burial) Spectacular Coffins of Ghana",
+ "Information Plaque: (Burial) Cremation",
+ "Information Plaque: (Burial) Animal Crematorium",
+ "Information Plaque: (Shaman) Witch Doctors of the Congo",
+ "Information Plaque: (Shaman) Sarombe doctor of Mozambique",
+ "Information Plaque: (Gods) Fisherman's Canoe God",
+ "Information Plaque: (Gods) Mayan Gods",
+ "Information Plaque: (Gods) Thor",
+ "Information Plaque: (Gods) Celtic Janus Sculpture",
+ "Information Plaque: (Gods) Sumerian Bull God - An",
+ "Information Plaque: (Gods) Sumerian Lyre",
+ "Information Plaque: (Gods) Chuen",
+ "Information Plaque: (Anansi) African Creation Myth",
+ "Information Plaque: (Anansi) Apophis the Serpent",
+ "Information Plaque: (Anansi) Death",
+ "Information Plaque: (Pegasus) Cyclops",
+ "Information Plaque: (Werewolf) Lycanthropy",
+ "Information Plaque: (UFO) Coincidence or Extraterrestrial Visits?",
+ "Information Plaque: (UFO) Planets",
+ "Information Plaque: (UFO) Astronomical Construction",
+ "Information Plaque: (Torture) Guillotine",
+ "Information Plaque: (UFO) Aliens"
],
"elevators": [
"Puzzle Solved Office Elevator",
diff --git a/worlds/shivers/data/locations.json b/worlds/shivers/data/locations.json
index fdf8ed69d1..1d62f85d2d 100644
--- a/worlds/shivers/data/locations.json
+++ b/worlds/shivers/data/locations.json
@@ -13,7 +13,7 @@
"Puzzle Solved Columns of RA",
"Puzzle Solved Burial Door",
"Puzzle Solved Chinese Solitaire",
- "Puzzle Solved Tiki Drums",
+ "Puzzle Solved Shaman Drums",
"Puzzle Solved Lyre",
"Puzzle Solved Red Door",
"Puzzle Solved Fortune Teller Door",
@@ -38,7 +38,7 @@
"Flashback Memory Obtained Theater Movie",
"Flashback Memory Obtained Museum Blueprints",
"Flashback Memory Obtained Beth's Address Book",
- "Flashback Memory Obtained Merick's Notebook",
+ "Flashback Memory Obtained Merrick's Notebook",
"Flashback Memory Obtained Professor Windlenot's Diary",
"Ixupi Captured Water",
"Ixupi Captured Wax",
@@ -68,48 +68,48 @@
"Puzzle Hint Found: Gallows Information Plaque",
"Puzzle Hint Found: Mastermind Information Plaque",
"Puzzle Hint Found: Elevator Writing",
- "Puzzle Hint Found: Tiki Security Camera",
+ "Puzzle Hint Found: Shaman Security Camera",
"Puzzle Hint Found: Tape Recorder Heard",
- "Information Plaque: Transforming Masks (Lobby)",
- "Information Plaque: Jade Skull (Lobby)",
- "Information Plaque: Bronze Unicorn (Prehistoric)",
- "Information Plaque: Griffin (Prehistoric)",
- "Information Plaque: Eagles Nest (Prehistoric)",
- "Information Plaque: Large Spider (Prehistoric)",
- "Information Plaque: Starfish (Prehistoric)",
- "Information Plaque: Quartz Crystal (Ocean)",
- "Information Plaque: Poseidon (Ocean)",
- "Information Plaque: Colossus of Rhodes (Ocean)",
- "Information Plaque: Poseidon's Temple (Ocean)",
- "Information Plaque: Subterranean World (Underground Maze)",
- "Information Plaque: Dero (Underground Maze)",
- "Information Plaque: Tomb of the Ixupi (Egypt)",
- "Information Plaque: The Sphinx (Egypt)",
- "Information Plaque: Curse of Anubis (Egypt)",
- "Information Plaque: Norse Burial Ship (Burial)",
- "Information Plaque: Paracas Burial Bundles (Burial)",
- "Information Plaque: Spectacular Coffins of Ghana (Burial)",
- "Information Plaque: Cremation (Burial)",
- "Information Plaque: Animal Crematorium (Burial)",
- "Information Plaque: Witch Doctors of the Congo (Tiki)",
- "Information Plaque: Sarombe doctor of Mozambique (Tiki)",
- "Information Plaque: Fisherman's Canoe God (Gods)",
- "Information Plaque: Mayan Gods (Gods)",
- "Information Plaque: Thor (Gods)",
- "Information Plaque: Celtic Janus Sculpture (Gods)",
- "Information Plaque: Sumerian Bull God - An (Gods)",
- "Information Plaque: Sumerian Lyre (Gods)",
- "Information Plaque: Chuen (Gods)",
- "Information Plaque: African Creation Myth (Anansi)",
- "Information Plaque: Apophis the Serpent (Anansi)",
- "Information Plaque: Death (Anansi)",
- "Information Plaque: Cyclops (Pegasus)",
- "Information Plaque: Lycanthropy (Werewolf)",
- "Information Plaque: Coincidence or Extraterrestrial Visits? (UFO)",
- "Information Plaque: Planets (UFO)",
- "Information Plaque: Astronomical Construction (UFO)",
- "Information Plaque: Guillotine (Torture)",
- "Information Plaque: Aliens (UFO)",
+ "Information Plaque: (Lobby) Transforming Masks",
+ "Information Plaque: (Lobby) Jade Skull",
+ "Information Plaque: (Prehistoric) Bronze Unicorn",
+ "Information Plaque: (Prehistoric) Griffin",
+ "Information Plaque: (Prehistoric) Eagles Nest",
+ "Information Plaque: (Prehistoric) Large Spider",
+ "Information Plaque: (Prehistoric) Starfish",
+ "Information Plaque: (Ocean) Quartz Crystal",
+ "Information Plaque: (Ocean) Poseidon",
+ "Information Plaque: (Ocean) Colossus of Rhodes",
+ "Information Plaque: (Ocean) Poseidon's Temple",
+ "Information Plaque: (Underground Maze) Subterranean World",
+ "Information Plaque: (Underground Maze) Dero",
+ "Information Plaque: (Egypt) Tomb of the Ixupi",
+ "Information Plaque: (Egypt) The Sphinx",
+ "Information Plaque: (Egypt) Curse of Anubis",
+ "Information Plaque: (Burial) Norse Burial Ship",
+ "Information Plaque: (Burial) Paracas Burial Bundles",
+ "Information Plaque: (Burial) Spectacular Coffins of Ghana",
+ "Information Plaque: (Burial) Cremation",
+ "Information Plaque: (Burial) Animal Crematorium",
+ "Information Plaque: (Shaman) Witch Doctors of the Congo",
+ "Information Plaque: (Shaman) Sarombe doctor of Mozambique",
+ "Information Plaque: (Gods) Fisherman's Canoe God",
+ "Information Plaque: (Gods) Mayan Gods",
+ "Information Plaque: (Gods) Thor",
+ "Information Plaque: (Gods) Celtic Janus Sculpture",
+ "Information Plaque: (Gods) Sumerian Bull God - An",
+ "Information Plaque: (Gods) Sumerian Lyre",
+ "Information Plaque: (Gods) Chuen",
+ "Information Plaque: (Anansi) African Creation Myth",
+ "Information Plaque: (Anansi) Apophis the Serpent",
+ "Information Plaque: (Anansi) Death",
+ "Information Plaque: (Pegasus) Cyclops",
+ "Information Plaque: (Werewolf) Lycanthropy",
+ "Information Plaque: (UFO) Coincidence or Extraterrestrial Visits?",
+ "Information Plaque: (UFO) Planets",
+ "Information Plaque: (UFO) Astronomical Construction",
+ "Information Plaque: (Torture) Guillotine",
+ "Information Plaque: (UFO) Aliens",
"Puzzle Solved Office Elevator",
"Puzzle Solved Bedroom Elevator",
"Puzzle Solved Three Floor Elevator",
@@ -176,10 +176,10 @@
"Lobby": [
"Puzzle Solved Theater Door",
"Flashback Memory Obtained Museum Brochure",
- "Information Plaque: Jade Skull (Lobby)",
- "Information Plaque: Transforming Masks (Lobby)",
+ "Information Plaque: (Lobby) Jade Skull",
+ "Information Plaque: (Lobby) Transforming Masks",
"Accessible: Storage: Slide",
- "Accessible: Storage: Eagles Head"
+ "Accessible: Storage: Transforming Mask"
],
"Generator": [
"Final Riddle: Beth's Body Page 17"
@@ -193,7 +193,7 @@
"Clock Tower": [
"Flashback Memory Obtained Beth's Ghost",
"Accessible: Storage: Clock Tower",
- "Puzzle Hint Found: Tiki Security Camera"
+ "Puzzle Hint Found: Shaman Security Camera"
],
"Projector Room": [
"Flashback Memory Obtained Theater Movie"
@@ -204,10 +204,10 @@
"Flashback Memory Obtained Museum Blueprints",
"Accessible: Storage: Ocean",
"Puzzle Hint Found: Sirens Song Heard",
- "Information Plaque: Quartz Crystal (Ocean)",
- "Information Plaque: Poseidon (Ocean)",
- "Information Plaque: Colossus of Rhodes (Ocean)",
- "Information Plaque: Poseidon's Temple (Ocean)"
+ "Information Plaque: (Ocean) Quartz Crystal",
+ "Information Plaque: (Ocean) Poseidon",
+ "Information Plaque: (Ocean) Colossus of Rhodes",
+ "Information Plaque: (Ocean) Poseidon's Temple"
],
"Maze Staircase": [
"Puzzle Solved Maze Door"
@@ -217,38 +217,38 @@
"Puzzle Solved Burial Door",
"Accessible: Storage: Egypt",
"Puzzle Hint Found: Egyptian Sphinx Heard",
- "Information Plaque: Tomb of the Ixupi (Egypt)",
- "Information Plaque: The Sphinx (Egypt)",
- "Information Plaque: Curse of Anubis (Egypt)"
+ "Information Plaque: (Egypt) Tomb of the Ixupi",
+ "Information Plaque: (Egypt) The Sphinx",
+ "Information Plaque: (Egypt) Curse of Anubis"
],
"Burial": [
"Puzzle Solved Chinese Solitaire",
- "Flashback Memory Obtained Merick's Notebook",
+ "Flashback Memory Obtained Merrick's Notebook",
"Accessible: Storage: Chinese Solitaire",
- "Information Plaque: Norse Burial Ship (Burial)",
- "Information Plaque: Paracas Burial Bundles (Burial)",
- "Information Plaque: Spectacular Coffins of Ghana (Burial)",
- "Information Plaque: Animal Crematorium (Burial)",
- "Information Plaque: Cremation (Burial)"
+ "Information Plaque: (Burial) Norse Burial Ship",
+ "Information Plaque: (Burial) Paracas Burial Bundles",
+ "Information Plaque: (Burial) Spectacular Coffins of Ghana",
+ "Information Plaque: (Burial) Animal Crematorium",
+ "Information Plaque: (Burial) Cremation"
],
- "Tiki": [
- "Puzzle Solved Tiki Drums",
- "Accessible: Storage: Tiki Hut",
- "Information Plaque: Witch Doctors of the Congo (Tiki)",
- "Information Plaque: Sarombe doctor of Mozambique (Tiki)"
+ "Shaman": [
+ "Puzzle Solved Shaman Drums",
+ "Accessible: Storage: Shaman Hut",
+ "Information Plaque: (Shaman) Witch Doctors of the Congo",
+ "Information Plaque: (Shaman) Sarombe doctor of Mozambique"
],
"Gods Room": [
"Puzzle Solved Lyre",
"Puzzle Solved Red Door",
"Accessible: Storage: Lyre",
"Final Riddle: Norse God Stone Message",
- "Information Plaque: Fisherman's Canoe God (Gods)",
- "Information Plaque: Mayan Gods (Gods)",
- "Information Plaque: Thor (Gods)",
- "Information Plaque: Celtic Janus Sculpture (Gods)",
- "Information Plaque: Sumerian Bull God - An (Gods)",
- "Information Plaque: Sumerian Lyre (Gods)",
- "Information Plaque: Chuen (Gods)"
+ "Information Plaque: (Gods) Fisherman's Canoe God",
+ "Information Plaque: (Gods) Mayan Gods",
+ "Information Plaque: (Gods) Thor",
+ "Information Plaque: (Gods) Celtic Janus Sculpture",
+ "Information Plaque: (Gods) Sumerian Bull God - An",
+ "Information Plaque: (Gods) Sumerian Lyre",
+ "Information Plaque: (Gods) Chuen"
],
"Blue Maze": [
"Puzzle Solved Fortune Teller Door"
@@ -265,28 +265,28 @@
"Puzzle Solved UFO Symbols",
"Accessible: Storage: UFO",
"Final Riddle: Planets Aligned",
- "Information Plaque: Coincidence or Extraterrestrial Visits? (UFO)",
- "Information Plaque: Planets (UFO)",
- "Information Plaque: Astronomical Construction (UFO)",
- "Information Plaque: Aliens (UFO)"
+ "Information Plaque: (UFO) Coincidence or Extraterrestrial Visits?",
+ "Information Plaque: (UFO) Planets",
+ "Information Plaque: (UFO) Astronomical Construction",
+ "Information Plaque: (UFO) Aliens"
],
"Anansi": [
"Puzzle Solved Anansi Musicbox",
"Flashback Memory Obtained Ancient Astrology",
"Accessible: Storage: Skeleton",
"Accessible: Storage: Anansi",
- "Information Plaque: African Creation Myth (Anansi)",
- "Information Plaque: Apophis the Serpent (Anansi)",
- "Information Plaque: Death (Anansi)",
- "Information Plaque: Cyclops (Pegasus)",
- "Information Plaque: Lycanthropy (Werewolf)"
+ "Information Plaque: (Anansi) African Creation Myth",
+ "Information Plaque: (Anansi) Apophis the Serpent",
+ "Information Plaque: (Anansi) Death",
+ "Information Plaque: (Pegasus) Cyclops",
+ "Information Plaque: (Werewolf) Lycanthropy"
],
"Torture": [
"Puzzle Solved Gallows",
- "Accessible: Storage: Hanging",
+ "Accessible: Storage: Gallows",
"Final Riddle: Guillotine Dropped",
"Puzzle Hint Found: Gallows Information Plaque",
- "Information Plaque: Guillotine (Torture)"
+ "Information Plaque: (Torture) Guillotine"
],
"Puzzle Room Mastermind": [
"Puzzle Solved Mastermind",
@@ -296,17 +296,17 @@
"Puzzle Solved Marble Flipper"
],
"Prehistoric": [
- "Information Plaque: Bronze Unicorn (Prehistoric)",
- "Information Plaque: Griffin (Prehistoric)",
- "Information Plaque: Eagles Nest (Prehistoric)",
- "Information Plaque: Large Spider (Prehistoric)",
- "Information Plaque: Starfish (Prehistoric)",
+ "Information Plaque: (Prehistoric) Bronze Unicorn",
+ "Information Plaque: (Prehistoric) Griffin",
+ "Information Plaque: (Prehistoric) Eagles Nest",
+ "Information Plaque: (Prehistoric) Large Spider",
+ "Information Plaque: (Prehistoric) Starfish",
"Accessible: Storage: Eagles Nest"
],
"Tar River": [
"Accessible: Storage: Tar River",
- "Information Plaque: Subterranean World (Underground Maze)",
- "Information Plaque: Dero (Underground Maze)"
+ "Information Plaque: (Underground Maze) Subterranean World",
+ "Information Plaque: (Underground Maze) Dero"
],
"Theater": [
"Accessible: Storage: Theater"
diff --git a/worlds/shivers/data/regions.json b/worlds/shivers/data/regions.json
index 3e81136c45..963d100fad 100644
--- a/worlds/shivers/data/regions.json
+++ b/worlds/shivers/data/regions.json
@@ -27,9 +27,9 @@
["Maze", ["To Maze Staircase From Maze", "To Tar River"]],
["Tar River", ["To Maze From Tar River", "To Lobby From Tar River"]],
["Egypt", ["To Lobby From Egypt", "To Burial From Egypt", "To Blue Maze From Egypt"]],
- ["Burial", ["To Egypt From Burial", "To Tiki From Burial"]],
- ["Tiki", ["To Burial From Tiki", "To Gods Room"]],
- ["Gods Room", ["To Tiki From Gods Room", "To Anansi From Gods Room"]],
+ ["Burial", ["To Egypt From Burial", "To Shaman From Burial"]],
+ ["Shaman", ["To Burial From Shaman", "To Gods Room"]],
+ ["Gods Room", ["To Shaman From Gods Room", "To Anansi From Gods Room"]],
["Anansi", ["To Gods Room From Anansi", "To Werewolf From Anansi"]],
["Werewolf", ["To Anansi From Werewolf", "To Night Staircase From Werewolf"]],
["Night Staircase", ["To Werewolf From Night Staircase", "To Janitor Closet", "To UFO"]],
@@ -109,13 +109,13 @@
["To Tar River", "Tar River"],
["To Tar River From Lobby", "Tar River"],
["To Burial From Egypt", "Burial"],
- ["To Burial From Tiki", "Burial"],
+ ["To Burial From Shaman", "Burial"],
["To Blue Maze From Three Floor Elevator", "Blue Maze"],
["To Blue Maze From Fortune Teller", "Blue Maze"],
["To Blue Maze From Inventions", "Blue Maze"],
["To Blue Maze From Egypt", "Blue Maze"],
- ["To Tiki From Burial", "Tiki"],
- ["To Tiki From Gods Room", "Tiki"],
+ ["To Shaman From Burial", "Shaman"],
+ ["To Shaman From Gods Room", "Shaman"],
["To Gods Room", "Gods Room" ],
["To Gods Room From Anansi", "Gods Room"],
["To Anansi From Gods Room", "Anansi"],
diff --git a/worlds/sm/Client.py b/worlds/sm/Client.py
index 756fd4bf36..ed3f2d5b3d 100644
--- a/worlds/sm/Client.py
+++ b/worlds/sm/Client.py
@@ -37,6 +37,7 @@ SM_REMOTE_ITEM_FLAG_ADDR = ROM_START + 0x277F06 # 1 byte
class SMSNIClient(SNIClient):
game = "Super Metroid"
+ patch_suffix = [".apsm", ".apm3"]
async def deathlink_kill_player(self, ctx):
from SNIClient import DeathState, snes_buffered_write, snes_flush_writes, snes_read
diff --git a/worlds/sm/docs/multiworld_en.md b/worlds/sm/docs/multiworld_en.md
index 0e82be7695..abd9f42f88 100644
--- a/worlds/sm/docs/multiworld_en.md
+++ b/worlds/sm/docs/multiworld_en.md
@@ -2,16 +2,18 @@
## Required Software
-- [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases).
-
-
-- Hardware or software capable of loading and playing SNES ROM files
- - An emulator capable of connecting to SNI such as:
- - snes9x-rr from: [snes9x rr](https://github.com/gocha/snes9x-rr/releases),
- - BizHawk from: [TASVideos](https://tasvideos.org/BizHawk)
- - RetroArch 1.10.1 or newer from: [RetroArch Website](https://retroarch.com?page=platforms). Or,
- - An SD2SNES, FXPak Pro ([FXPak Pro Store Page](https://krikzz.com/store/home/54-fxpak-pro.html)), or other
- compatible hardware
+- [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases).
+- [SNI](https://github.com/alttpo/sni/releases). This is automatically included with your Archipelago installation above.
+- SNI is not compatible with (Q)Usb2Snes.
+- Hardware or software capable of loading and playing SNES ROM files, including:
+ - An emulator capable of connecting to SNI
+ ([snes9x-nwa](https://github.com/Skarsnik/snes9x-emunwa/releases), [snes9x-rr](https://github.com/gocha/snes9x-rr/releases),
+ [BSNES-plus](https://github.com/black-sliver/bsnes-plus),
+ [BizHawk](http://tasvideos.org/BizHawk.html), or
+ [RetroArch](https://retroarch.com?page=platforms) 1.10.1 or newer)
+ - An SD2SNES, [FXPak Pro](https://krikzz.com/store/home/54-fxpak-pro.html), or other compatible hardware. **note:
+ modded SNES minis are currently not supported by SNI. Some users have claimed success with QUsb2Snes for this system,
+ but it is not supported.**
- Your legally obtained Super Metroid ROM file, probably named `Super Metroid (Japan, USA).sfc`
## Installation Procedures
@@ -81,6 +83,11 @@ client, and will also create your ROM in the same place as your patch file.
When the client launched automatically, SNI should have also automatically launched in the background. If this is its
first time launching, you may be prompted to allow it to communicate through the Windows Firewall.
+#### snes9x-nwa
+
+1. Click on the Network Menu and check **Enable Emu Network Control**
+2. Load your ROM file if it hasn't already been loaded.
+
##### snes9x-rr
1. Load your ROM file if it hasn't already been loaded.
@@ -92,6 +99,12 @@ first time launching, you may be prompted to allow it to communicate through the
6. If you see an error while loading the script that states `socket.dll missing` or similar, navigate to the folder of
the lua you are using in your file explorer and copy the `socket.dll` to the base folder of your snes9x install.
+#### BSNES-Plus
+
+1. Load your ROM file if it hasn't already been loaded.
+2. The emulator should automatically connect while SNI is running.
+
+
##### BizHawk
1. Ensure you have the BSNES core loaded. This is done with the main menubar, under:
diff --git a/worlds/smw/Aesthetics.py b/worlds/smw/Aesthetics.py
index 73ca616508..16b2b138f3 100644
--- a/worlds/smw/Aesthetics.py
+++ b/worlds/smw/Aesthetics.py
@@ -1,3 +1,82 @@
+import json
+import pkgutil
+
+from worlds.AutoWorld import World
+
+tileset_names = [
+ "grass_hills",
+ "grass_forest",
+ "grass_rocks",
+ "grass_clouds",
+ "grass_mountains",
+ "cave",
+ "cave_rocks",
+ "water",
+ "mushroom_rocks",
+ "mushroom_clouds",
+ "mushroom_forest",
+ "mushroom_hills",
+ "mushroom_stars",
+ "mushroom_cave",
+ "forest",
+ "logs",
+ "clouds",
+ "castle_pillars",
+ "castle_windows",
+ "castle_wall",
+ "castle_small_windows",
+ "ghost_house",
+ "ghost_house_exit",
+ "ship_exterior",
+ "ship_interior",
+ "switch_palace",
+ "yoshi_house"
+]
+
+map_names = [
+ "main",
+ "yoshi",
+ "vanilla",
+ "forest",
+ "valley",
+ "special",
+ "star"
+]
+
+level_palette_index = [
+ 0xFF,0x03,0x09,0x01,0x15,0x0A,0x04,0x12,0x19,0x06,0x07,0x12,0x09,0x0F,0x13,0x09, # Levels 000-00F
+ 0x03,0x07,0xFF,0x15,0x19,0x04,0x04,0xFF,0x17,0xFF,0x14,0x12,0x02,0x05,0xFF,0x11, # Levels 010-01F
+ 0x12,0x15,0x04,0x02,0x02,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 020-02F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 030-03F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 040-04F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 050-05F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 060-06F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 070-07F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 080-08F
+ 0xFF,0xFF,0xFF,0x12,0x12,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 090-09F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 0A0-0AF
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x19,0x08,0x09, # Levels 0B0-0BF
+ 0x02,0x08,0x05,0x04,0x16,0x1A,0x04,0x02,0x0C,0x19,0x19,0x09,0xFF,0x02,0x02,0x02, # Levels 0C0-0CF
+ 0x04,0x04,0x05,0x12,0x14,0xFF,0x12,0x10,0x05,0xFF,0x19,0x12,0x14,0x0F,0x15,0xFF, # Levels 0D0-0DF
+ 0x12,0x12,0xFF,0x04,0x15,0xFF,0x19,0x14,0x12,0x05,0x05,0x16,0x15,0x15,0x15,0x12, # Levels 0E0-0EF
+ 0x16,0x15,0x15,0x09,0x19,0x04,0x04,0x13,0x18,0x15,0x15,0x16,0x15,0x19,0x15,0x04, # Levels 0F0-0FF
+ 0xFF,0x11,0x08,0x02,0x1A,0x00,0x01,0x15,0xFF,0x05,0x05,0x05,0xFF,0x11,0x12,0x05, # Levels 100-10F
+ 0x12,0x14,0xFF,0x0D,0x15,0x06,0x05,0x05,0x05,0x0C,0x05,0x19,0x12,0x15,0x0E,0x01, # Levels 110-11F
+ 0x07,0x19,0x0E,0x0E,0xFF,0x04,0x0E,0x02,0x02,0xFF,0x09,0x04,0x0B,0x02,0xFF,0xFF, # Levels 120-12F
+ 0x07,0xFF,0x0C,0xFF,0x05,0x0C,0x0C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 130-13F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 140-14F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 150-15F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 160-16F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 170-17F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 180-18F
+ 0xFF,0xFF,0xFF,0x12,0x12,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 190-19F
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, # Levels 1A0-1AF
+ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x19,0x19,0x12,0x02,0x05, # Levels 1B0-1BF
+ 0x02,0x07,0x05,0x05,0x03,0x03,0x00,0xFF,0x0F,0x10,0x05,0x05,0x12,0x11,0x14,0x14, # Levels 1C0-1CF
+ 0x11,0x12,0x12,0x12,0x11,0x03,0x03,0x19,0x19,0x15,0x16,0x15,0x15,0x15,0xFF,0x05, # Levels 1D0-1DF
+ 0x10,0x02,0x06,0x06,0x19,0x05,0x16,0x16,0x15,0x15,0x15,0xFF,0x06,0x05,0x05,0x06, # Levels 1E0-1EF
+ 0x05,0x05,0x12,0x14,0x12,0x05,0xFF,0x19,0x05,0x16,0x15,0x15,0x11,0x05,0x12,0x09 # Levels 1F0-1FF
+]
mario_palettes = [
[0x5F, 0x63, 0x1D, 0x58, 0x0A, 0x00, 0x1F, 0x39, 0xC4, 0x44, 0x08, 0x4E, 0x70, 0x67, 0xB6, 0x30, 0xDF, 0x35, 0xFF, 0x03], # Mario
@@ -145,36 +224,413 @@ valid_ow_palettes = {
0x2D24: [0x00, 0x02, 0x03], # Star Road
}
-def generate_shuffled_level_music(world, player):
+valid_sfxs = [
+ [0x01, 1], # Jump
+ [0x01, 0], # Hit head
+ [0x02, 0], # Contact/Spinjump on an enemy
+ [0x03, 0], # Kick item
+ [0x04, 0], # Go in pipe, get hurt
+ [0x05, 0], # Midway point
+ [0x06, 0], # Yoshi gulp
+ [0x07, 0], # Dry bones collapse
+ [0x08, 0], # Kill enemy with a spin jump
+ [0x09, 0], # Fly with cape
+ [0x0A, 0], # Get powerup
+ [0x0B, 0], # ON/OFF switch
+ [0x0C, 0], # Carry item past the goal
+ [0x0D, 0], # Get cape
+ [0x0E, 0], # Swim
+ [0x0F, 0], # Hurt while flying
+ [0x10, 0], # Magikoopa shoot magic
+ [0x13, 0], # Enemy stomp #1
+ [0x14, 0], # Enemy stomp #2
+ [0x15, 0], # Enemy stomp #3
+ [0x16, 0], # Enemy stomp #4
+ [0x17, 0], # Enemy stomp #5
+ [0x18, 0], # Enemy stomp #6
+ [0x19, 0], # Enemy stomp #7
+ [0x1C, 0], # Yoshi Coin
+ [0x1E, 0], # P-Balloon
+ [0x1F, 0], # Koopaling defeated
+ [0x20, 0], # Yoshi spit
+ [0x23, 0], # Lemmy/Wendy falling
+ [0x25, 0], # Blargg roar
+ [0x26, 0], # Firework whistle
+ [0x27, 0], # Firework bang
+ [0x2A, 0], # Peach pops up from the Clown Car
+ [0x04, 1], # Grinder
+ [0x01, 3], # Coin
+ [0x02, 3], # Hit a ? block
+ [0x03, 3], # Hit a block with a vine inside
+ [0x04, 3], # Spin jump
+ [0x05, 3], # 1up
+ [0x06, 3], # Shatter block
+ [0x07, 3], # Shoot fireball
+ [0x08, 3], # Springboard
+ [0x09, 3], # Bullet bill
+ [0x0A, 3], # Egg hatch
+ [0x0B, 3], # Item going into item box
+ [0x0C, 3], # Item falls from item box
+ [0x0E, 3], # L/R scroll
+ [0x0F, 3], # Door
+ [0x13, 3], # Lose Yoshi
+ [0x14, 3], # SMW2: New level available
+ [0x15, 3], # OW tile reveal
+ [0x16, 3], # OW castle collapse
+ [0x17, 3], # Fire spit
+ [0x18, 3], # Thunder
+ [0x19, 3], # Clap
+ [0x1A, 3], # Castle bomb
+ [0x1C, 3], # OW switch palace block ejection
+ [0x1E, 3], # Whistle
+ [0x1F, 3], # Yoshi mount
+ [0x20, 3], # Lemmy/Wendy going in lava
+ [0x21, 3], # Yoshi's tongue
+ [0x22, 3], # Message box hit
+ [0x23, 3], # Landing in a level tile
+ [0x24, 3], # P-Switch running out
+ [0x25, 3], # Yoshi defeats an enemy
+ [0x26, 3], # Swooper
+ [0x27, 3], # Podoboo
+ [0x28, 3], # Enemy hurt
+ [0x29, 3], # Correct
+ [0x2A, 3], # Wrong
+ [0x2B, 3], # Firework whistle
+ [0x2C, 3] # Firework bang
+]
+
+game_sfx_calls = [
+ 0x0565E, # Jump
+ 0x1BABD, # Spin jump
+ 0x06D41, # Hit head on ceiling
+ 0x0B4F2, # Hit head on sprite
+ 0x07EB5, # Shooting a fireball
+ 0x0507B, # Cape spin
+ 0x058A8, # Cape smash
+ 0x075F3, # Taking damage
+ 0x075E2, # Taking damage while flying
+ 0x07919, # Something during a boss fight
+ 0x05AA9, # Swim
+ 0x1BC04, # Spin jump off water
+ 0x05BA5, # Jump off a net
+ 0x05BB2, # Punching a net
+ 0x06C10, # Entering a door
+ 0x05254, # Entering a pipe #1
+ 0x07439, # Entering a pipe #2
+ 0x052A5, # Shot from a diagonal pipe
+ 0x072E8, # Hit a midway point
+ 0x07236, # Hit a wrong block
+ 0x07B7D, # Spawn a powerup during the goal tape
+ 0x1C342, # Invisible mushroom spawn
+ 0x04E3F, # Scrolling the screen with L/R
+ 0x0AAFD, # Pressing a P-Switch
+ 0x04557, # P-Switch running out
+ 0x0BAD7, # Climbing door turning
+ 0x0C109, # Break goal tape
+ 0x0C548, # Putting item in item box
+ 0x10012, # Trigger item box
+ 0x2B34D, # Collecting a coin
+ 0x07358, # Collecting a Yoshi Coin
+ 0x0C57A, # Collecting a powerup (generic)
+ 0x0C59C, # Collecting a feather
+ 0x0C309, # Collecting a P-Balloon
+ 0x0E6A9, # Bouncing off a springboard
+ 0x1117D, # Bouncing off a note block
+ 0x14DEC, # Bouncing off a wall springboard
+ 0x1067F, # Block shattering
+ 0x1081E, # Activate ON/OFF switch #1
+ 0x1118C, # Activate ON/OFF switch #2
+ 0x12045, # Fireballs hitting a block/sprite
+ 0x12124, # Fireballs converting an enemy into a coin
+ 0x12106, # Fireballs defeating a Chuck
+ 0x18D7D, # Activating a message box
+ 0x1C209, # Activating a red question block
+ 0x0A290, # Baby Yoshi swallowing an item #1
+ 0x1C037, # Baby Yoshi swallowing an item #2
+ 0x0F756, # Yoshi egg hatching
+ 0x0A2C5, # Yoshi growing #1
+ 0x1C06C, # Yoshi growing #2
+ 0x0ED5F, # Mounting Yoshi
+ 0x0F71D, # Yoshi hurt
+ 0x12481, # Yoshi hurt (projectiles)
+ 0x0EF0E, # Yoshi flying
+ 0x06F90, # Yoshi stomping an enemy
+ 0x06FB6, # Yoshi ground pound (yellow shell)
+ 0x07024, # Yoshi bounces off a triangle
+ 0x11BE9, # Yoshi stomping the ground
+ 0x0F0D3, # Yoshi swallowing a sprite
+ 0x0F0FD, # Yoshi eating a green berry
+ 0x1BA7D, # Yoshi sticking out tongue
+ 0x0F5A1, # Yoshi unable to eat
+ 0x0F2DF, # Yoshi spitting out an item
+ 0x0F28F, # Yoshi spitting out flames
+ 0x0F3EC, # Collecting Yoshi's wings (eaten)
+ 0x0F6C8, # Collecting Yoshi's wings (touched)
+ 0x7FE04, # Defeated sprite combo #1 (using Y index)
+ 0x7FE0E, # Defeated sprite combo #2 (using Y index)
+ 0x7FE18, # Defeated sprite combo #3 (using Y index)
+ 0x7FE22, # Defeated sprite combo #4 (using Y index)
+ 0x7FE2C, # Defeated sprite combo #5 (using Y index)
+ 0x7FE36, # Defeated sprite combo #6 (using Y index)
+ 0x7FE40, # Defeated sprite combo #7 (using Y index)
+ 0x7FE4B, # Defeated sprite combo #1 (using X index)
+ 0x7FE55, # Defeated sprite combo #2 (using X index)
+ 0x7FE5F, # Defeated sprite combo #3 (using X index)
+ 0x7FE69, # Defeated sprite combo #4 (using X index)
+ 0x7FE73, # Defeated sprite combo #5 (using X index)
+ 0x7FE7D, # Defeated sprite combo #6 (using X index)
+ 0x7FE87, # Defeated sprite combo #7 (using X index)
+ 0x0A728, # Kicking a carryable item
+ 0x0B12F, # Kicking a stunned and vulnerable enemy
+ 0x0A8D8, # Performing a spinjump on a immune enemy
+ 0x0A93F, # Defeating an enemy via spinjump
+ 0x0999E, # Thrown sprite hitting the ground from the side
+ 0x192B8, # Creating/Eating block moving
+ 0x195EC, # Rex stomped
+ 0x134A7, # Bullet bill blaster shooting
+ 0x13088, # Bullet bill generator #1
+ 0x130DF, # Bullet bill generator #2
+ 0x09631, # Bob-omb explosion
+ 0x15918, # Popping a bubble
+ 0x15D64, # Sumo bro stomping the ground
+ 0x15ECC, # Sumo bro lightning spawning flames
+ 0x1726B, # Bouncing off wiggler
+ 0x08390, # Banzai bill spawn
+ 0x0AF17, # Thwomp hitting the ground
+ 0x0AFFC, # Thwimp hitting the ground
+ 0x14707, # Chuck running
+ 0x14381, # Chuck whistling
+ 0x144F8, # Chuck clapping
+ 0x14536, # Chuck jumping
+ 0x145AE, # Chuck splitting
+ 0x147D2, # Chuck bounce
+ 0x147F6, # Chuck hurt
+ 0x147B8, # Chuck defeated
+ 0x19D55, # Dino torch shooting fire
+ 0x19FFA, # Blargg attacking
+ 0x188FF, # Swooper bat swooping
+ 0x08584, # Bowser statue flame spawn
+ 0x18ADA, # Bowser statue shooting a flame
+ 0x13043, # Bowser statue flame from generator
+ 0x0BF28, # Magikoopa shooting a magic spell
+ 0x0BC5F, # Magikoopa's magic spell hitting the ground
+ 0x0D745, # Line guided sprites' motor
+ 0x0DB70, # Grinder sound
+ 0x0E0A1, # Podoboo jumping
+ 0x0E5F2, # Dry bones/Bony beetle collapsing
+ 0x15474, # Giant wooden pillar hitting the ground
+ 0x2C9C1, # Spiked columns hitting the ground
+ 0x19B03, # Reznor shooting a fireball
+ 0x19A66, # Reznor: Hitting a platform
+ 0x1D752, # Reznor: Bridge collapsing
+ 0x19ABB, # Reznor: Defeated
+ 0x180E9, # Big Boo: Reappearing
+ 0x18233, # Big Boo: Hurt
+ 0x181DE, # Big Boo: Defeated
+ 0x1CEC1, # Wendy/Lemmy: Hitting a dummy
+ 0x1CECB, # Wendy/Lemmy: Hurt
+ 0x1CE33, # Wendy/Lemmy: Hurt (correct)
+ 0x1CE46, # Wendy/Lemmy: Hurt (incorrect)
+ 0x1CE24, # Wendy/Lemmy: Defeated
+ 0x1CE7E, # Wendy/Lemmy: Falling into lava
+ 0x0CF0A, # Ludwig: Jumping
+ 0x0D059, # Ludwig: Shooting a fireball
+ 0x10414, # Morton/Roy: Pillar drop
+ 0x0D299, # Morton/Roy: Ground smash
+ 0x0D3AB, # Morton/Roy/Ludwig: Hit by a fireball
+ 0x0D2FD, # Morton/Roy/Ludwig: Bouncing off
+ 0x0D31E, # Morton/Roy/Ludwig: Bouncing off (immune)
+ 0x0D334, # Morton/Roy/Ludwig: Bouncing off (immune, going up a wall)
+ 0x0CFD0, # Morton/Roy/Ludwig: Defeated
+ 0x0FCCE, # Iggy/Larry: Being hit
+ 0x0FD40, # Iggy/Larry: Being hit by a fireball
+ 0x0FB60, # Iggy/Larry: Falling in lava
+ 0x1A8B2, # Peach emerging from Clown Car
+ 0x1A8E3, # Peach throwing an item
+ 0x1B0B8, # Bumping into Clown Car
+ 0x1B129, # Bowser: Hurt
+ 0x1AB8C, # Bowser: Slamming the ground (third phase)
+ 0x1A5D0, # Bowser: Throwing a Mechakoopa
+ 0x1A603, # Bowser: Dropping a ball
+ 0x1A7F6, # Bowser: Spawning a flame
+ 0x1B1A3, # Bowser's ball slam #1
+ 0x1B1B1, # Bowser's ball slam #2
+ 0x1E016, # Bowser's arena lightning effect
+ 0x26CAA, # Map: Level tile reveal
+ 0x26763, # Map: Terrain reveal
+ 0x21170, # Map: Using a star
+ 0x2666F, # Map: Castle destruction
+ 0x272A4, # Map: Switch palace blocks spawning
+ 0x203CC, # Map: Earthquake
+ 0x27A78, # Map: Fish jumping
+ 0x27736, # Map: Valley of bowser thunder
+ 0x013C0, # Menu: Nintendo presents
+ 0x01AE3, # Menu: File menu option select
+ 0x01AF9, # Menu: File menu option change
+ 0x01BBB, # Menu: Saving game
+ 0x273FF, # Menu: Map misc menu appearing
+ 0x27567, # Menu: Something during the map
+ 0x1767A, # Cutscene: Castle door opening
+ 0x17683, # Cutscene: Castle door closing
+ 0x17765, # Cutscene: Ghost house door opening
+ 0x1776E, # Cutscene: Ghost house door closing
+ 0x04720, # Cutscene: Detonator fuse
+ 0x04732, # Cutscene: Bouncing off something
+ 0x0475F, # Cutscene: Tossing the castle
+ 0x04798, # Cutscene: Picking up the castle
+ 0x047AC, # Cutscene: Huff
+ 0x047D1, # Cutscene: Hitting a castle
+ 0x1C830, # Cutscene: Shooting a firework
+ 0x625AF, # Cutscene: Egg shattering
+ 0x64F2C, # Cutscene: Hitting a hill
+ 0x6512A, # Cutscene: Castle crashing
+ 0x65295, # Cutscene: Explosion
+ 0x652B2, # Cutscene: Castle sinking
+ 0x652BD, # Cutscene: Castle flying
+ 0x652D8, # Cutscene: Fake explosion
+ 0x653E7, # Cutscene: Castle being hit by a hammer
+ 0x657D8 # Cutscene: Castle being mopped away
+]
+
+def generate_shuffled_sfx(rom, world: World):
+ # Adjust "hitting sprites in succession" codes
+ rom.write_bytes(0x0A60B, bytearray([0x22, 0x00, 0xFE, 0x0F, 0xEA, 0xEA])) # jsl $0FFE00 : nop #2 # Thrown sprites combo #1
+ rom.write_bytes(0x0A659, bytearray([0x22, 0x47, 0xFE, 0x0F, 0xEA, 0xEA])) # jsl $0FFE47 : nop #2 # Thrown sprites combo #2
+ rom.write_bytes(0x0A865, bytearray([0x22, 0x47, 0xFE, 0x0F, 0xEA, 0xEA])) # jsl $0FFE47 : nop #2 # Star combo
+ rom.write_bytes(0x0AB57, bytearray([0x22, 0x00, 0xFE, 0x0F, 0xEA, 0xEA])) # jsl $0FFE00 : nop #2 # Bouncing off enemies
+ rom.write_bytes(0x172C0, bytearray([0x22, 0x00, 0xFE, 0x0F, 0xEA, 0xEA])) # jsl $0FFE00 : nop #2 # Star combo (wigglers)
+ rom.write_bytes(0x1961D, bytearray([0x22, 0x00, 0xFE, 0x0F, 0xEA, 0xEA])) # jsl $0FFE00 : nop #2 # Star combo (rexes)
+ rom.write_bytes(0x19639, bytearray([0x22, 0x00, 0xFE, 0x0F, 0xEA, 0xEA])) # jsl $0FFE00 : nop #2 # Bouncing off rexes
+
+ COMBO_SFX_ADDR = 0x7FE00
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0000, bytearray([0xC0, 0x01])) # COMBO_Y: CPY #$01
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0002, bytearray([0xD0, 0x06])) # BNE label_0FFE0A
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0004, bytearray([0xA9, 0x13])) # LDA #$13
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0006, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0009, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x000A, bytearray([0xC0, 0x02])) # label_0FFE0A: CPY #$02
+ rom.write_bytes(COMBO_SFX_ADDR + 0x000C, bytearray([0xD0, 0x06])) # BNE label_0FFE14
+ rom.write_bytes(COMBO_SFX_ADDR + 0x000E, bytearray([0xA9, 0x14])) # LDA #$14
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0010, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0013, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0014, bytearray([0xC0, 0x03])) # label_0FFE14: CPY #$03
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0016, bytearray([0xD0, 0x06])) # BNE label_0FFE1E
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0018, bytearray([0xA9, 0x15])) # LDA #$15
+ rom.write_bytes(COMBO_SFX_ADDR + 0x001A, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x001D, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x001E, bytearray([0xC0, 0x04])) # label_0FFE1E: CPY #$04
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0020, bytearray([0xD0, 0x06])) # BNE label_0FFE28
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0022, bytearray([0xA9, 0x16])) # LDA #$16
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0024, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0027, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0028, bytearray([0xC0, 0x05])) # label_0FFE28: CPY #$05
+ rom.write_bytes(COMBO_SFX_ADDR + 0x002A, bytearray([0xD0, 0x06])) # BNE label_0FFE32
+ rom.write_bytes(COMBO_SFX_ADDR + 0x002C, bytearray([0xA9, 0x17])) # LDA #$17
+ rom.write_bytes(COMBO_SFX_ADDR + 0x002E, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0031, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0032, bytearray([0xC0, 0x06])) # label_0FFE32: CPY #$06
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0034, bytearray([0xD0, 0x06])) # BNE label_0FFE3C
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0036, bytearray([0xA9, 0x18])) # LDA #$18
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0038, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x003B, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x003C, bytearray([0xC0, 0x07])) # label_0FFE3C: CPY #$07
+ rom.write_bytes(COMBO_SFX_ADDR + 0x003E, bytearray([0xD0, 0x06])) # BNE label_0FFE46
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0040, bytearray([0xA9, 0x19])) # LDA #$19
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0042, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0045, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0046, bytearray([0x6B])) # label_0FFE46: RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0047, bytearray([0xE0, 0x01])) # COMBO_X: CPX #$01
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0049, bytearray([0xD0, 0x06])) # BNE label_0FFE51
+ rom.write_bytes(COMBO_SFX_ADDR + 0x004B, bytearray([0xA9, 0x13])) # LDA #$13
+ rom.write_bytes(COMBO_SFX_ADDR + 0x004D, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0050, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0051, bytearray([0xE0, 0x02])) # label_0FFE51: CPX #$02
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0053, bytearray([0xD0, 0x06])) # BNE label_0FFE5B
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0055, bytearray([0xA9, 0x14])) # LDA #$14
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0057, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x005A, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x005B, bytearray([0xE0, 0x03])) # label_0FFE5B: CPX #$03
+ rom.write_bytes(COMBO_SFX_ADDR + 0x005D, bytearray([0xD0, 0x06])) # BNE label_0FFE65
+ rom.write_bytes(COMBO_SFX_ADDR + 0x005F, bytearray([0xA9, 0x15])) # LDA #$15
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0061, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0064, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0065, bytearray([0xE0, 0x04])) # label_0FFE65: CPX #$04
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0067, bytearray([0xD0, 0x06])) # BNE label_0FFE6F
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0069, bytearray([0xA9, 0x16])) # LDA #$16
+ rom.write_bytes(COMBO_SFX_ADDR + 0x006B, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x006E, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x006F, bytearray([0xE0, 0x05])) # label_0FFE6F: CPX #$05
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0071, bytearray([0xD0, 0x06])) # BNE label_0FFE79
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0073, bytearray([0xA9, 0x17])) # LDA #$17
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0075, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0078, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0079, bytearray([0xE0, 0x06])) # label_0FFE79: CPX #$06
+ rom.write_bytes(COMBO_SFX_ADDR + 0x007B, bytearray([0xD0, 0x06])) # BNE label_0FFE83
+ rom.write_bytes(COMBO_SFX_ADDR + 0x007D, bytearray([0xA9, 0x18])) # LDA #$18
+ rom.write_bytes(COMBO_SFX_ADDR + 0x007F, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0082, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0083, bytearray([0xE0, 0x07])) # label_0FFE83: CPX #$07
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0085, bytearray([0xD0, 0x06])) # BNE label_0FFE8D
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0087, bytearray([0xA9, 0x19])) # LDA #$19
+ rom.write_bytes(COMBO_SFX_ADDR + 0x0089, bytearray([0x8D, 0xF9, 0x1D])) # STA $1DF9
+ rom.write_bytes(COMBO_SFX_ADDR + 0x008C, bytearray([0x6B])) # RTL
+ rom.write_bytes(COMBO_SFX_ADDR + 0x008D, bytearray([0x6B])) # label_0FFE8D: RTL
+
+ # Adjust "Hit head on ceiling" code
+ rom.write_bytes(0x06D41 + 0x00, bytearray([0xA9, 0x01])) # lda #$01
+ rom.write_bytes(0x06D41 + 0x02, bytearray([0x8D, 0xF9, 0x1D])) # sta $1DF9
+ rom.write_bytes(0x06D41 + 0x05, bytearray([0xEA, 0xEA, 0xEA, 0xEA])) # nop #4
+
+ # Manually add "Map: Stepping onto a level tile" random SFX
+ selected_sfx = world.random.choice(valid_sfxs)
+ rom.write_byte(0x2169F + 0x01, selected_sfx[0])
+ rom.write_byte(0x2169F + 0x04, selected_sfx[1] + 0xF9)
+
+ # Disable panning on Bowser's flames
+ rom.write_bytes(0x1A83D, bytearray([0xEA, 0xEA, 0xEA])) # nop #3
+
+ # Randomize SFX calls
+ for address in game_sfx_calls:
+ # Get random SFX
+ if world.options.sfx_shuffle != "singularity":
+ selected_sfx = world.random.choice(valid_sfxs)
+ # Write randomized SFX num
+ rom.write_byte(address + 0x01, selected_sfx[0])
+ # Write randomized SFX port
+ rom.write_byte(address + 0x03, selected_sfx[1] + 0xF9)
+
+def generate_shuffled_level_music(world: World):
shuffled_level_music = level_music_value_data.copy()
- if world.music_shuffle[player] == "consistent":
- world.per_slot_randoms[player].shuffle(shuffled_level_music)
- elif world.music_shuffle[player] == "singularity":
- single_song = world.per_slot_randoms[player].choice(shuffled_level_music)
+ if world.options.music_shuffle == "consistent":
+ world.random.shuffle(shuffled_level_music)
+ elif world.options.music_shuffle == "singularity":
+ single_song = world.random.choice(shuffled_level_music)
shuffled_level_music = [single_song for i in range(len(shuffled_level_music))]
return shuffled_level_music
-def generate_shuffled_ow_music(world, player):
+def generate_shuffled_ow_music(world: World):
shuffled_ow_music = ow_music_value_data.copy()
- if world.music_shuffle[player] == "consistent" or world.music_shuffle[player] == "full":
- world.per_slot_randoms[player].shuffle(shuffled_ow_music)
- elif world.music_shuffle[player] == "singularity":
- single_song = world.per_slot_randoms[player].choice(shuffled_ow_music)
+ if world.options.music_shuffle == "consistent" or world.options.music_shuffle == "full":
+ world.random.shuffle(shuffled_ow_music)
+ elif world.options.music_shuffle == "singularity":
+ single_song = world.random.choice(shuffled_ow_music)
shuffled_ow_music = [single_song for i in range(len(shuffled_ow_music))]
return shuffled_ow_music
-def generate_shuffled_ow_palettes(rom, world, player):
- if world.overworld_palette_shuffle[player]:
- for address, valid_palettes in valid_ow_palettes.items():
- chosen_palette = world.per_slot_randoms[player].choice(valid_palettes)
- rom.write_byte(address, chosen_palette)
+def generate_shuffled_ow_palettes(rom, world: World):
+ if world.options.overworld_palette_shuffle != "on_legacy":
+ return
-def generate_shuffled_header_data(rom, world, player):
- if world.music_shuffle[player] != "full" and not world.foreground_palette_shuffle[player] and not world.background_palette_shuffle[player]:
+ for address, valid_palettes in valid_ow_palettes.items():
+ chosen_palette = world.random.choice(valid_palettes)
+ rom.write_byte(address, chosen_palette)
+
+def generate_shuffled_header_data(rom, world: World):
+ if world.options.music_shuffle != "full" and world.options.level_palette_shuffle != "on_legacy":
return
for level_id in range(0, 0x200):
@@ -194,24 +650,425 @@ def generate_shuffled_header_data(rom, world, player):
tileset = level_header[4] & 0x0F
- if world.music_shuffle[player] == "full":
+ if world.options.music_shuffle == "full":
level_header[2] &= 0x8F
- level_header[2] |= (world.per_slot_randoms[player].randint(0, 7) << 5)
+ level_header[2] |= (world.random.randint(0, 7) << 5)
- if (world.foreground_palette_shuffle[player] and tileset in valid_foreground_palettes):
- level_header[3] &= 0xF8
- level_header[3] |= world.per_slot_randoms[player].choice(valid_foreground_palettes[tileset])
+ if world.options.level_palette_shuffle == "on_legacy":
+ if tileset in valid_foreground_palettes:
+ level_header[3] &= 0xF8
+ level_header[3] |= world.random.choice(valid_foreground_palettes[tileset])
- if world.background_palette_shuffle[player]:
layer2_ptr_list = list(rom.read_bytes(0x2E600 + level_id * 3, 3))
layer2_ptr = (layer2_ptr_list[2] << 16 | layer2_ptr_list[1] << 8 | layer2_ptr_list[0])
if layer2_ptr in valid_background_palettes:
level_header[0] &= 0x1F
- level_header[0] |= (world.per_slot_randoms[player].choice(valid_background_palettes[layer2_ptr]) << 5)
+ level_header[0] |= (world.random.choice(valid_background_palettes[layer2_ptr]) << 5)
if layer2_ptr in valid_background_colors:
level_header[1] &= 0x1F
- level_header[1] |= (world.per_slot_randoms[player].choice(valid_background_colors[layer2_ptr]) << 5)
+ level_header[1] |= (world.random.choice(valid_background_colors[layer2_ptr]) << 5)
rom.write_bytes(layer1_ptr, bytes(level_header))
+
+def generate_curated_level_palette_data(rom, world: World):
+ PALETTE_LEVEL_CODE_ADDR = 0x88000
+ PALETTE_INDEX_ADDR = 0x8F000
+ PALETTE_LEVEL_TILESET_ADDR = 0x8F200
+ PALETTE_LEVEL_PTR_ADDR = 0x92000
+ PALETTE_LEVEL_DATA_ADDR = 0xA8000
+
+ addr = pc_to_snes(PALETTE_LEVEL_PTR_ADDR)
+ snes_level_palette_pointers_1 = bytearray([0xBF, (addr)&0xFF, (addr>>8)&0xFF, (addr>>16)&0xFF])
+ snes_level_palette_pointers_2 = bytearray([0xBF, (addr+2)&0xFF, (addr>>8)&0xFF, (addr>>16)&0xFF])
+
+ # Enable curated palette loader
+ rom.write_bytes(0x02BED, bytearray([0x5C, 0x00, 0x80, 0x11])) # org $00ABED : jml custom_palettes
+ rom.write_bytes(0x02330, bytearray([0x5C, 0x02, 0x80, 0x11])) # org $00A318 : jml custom_palettes_original
+ rom.write_bytes(0x013D7, bytearray([0x20, 0x30, 0xA3])) # org $0093D7 : jmp $A330
+ rom.write_bytes(0x014DA, bytearray([0x20, 0x30, 0xA3])) # org $0094DA : jmp $A330
+ rom.write_bytes(0x015EC, bytearray([0x20, 0x30, 0xA3])) # org $0095EC : jmp $A330
+ rom.write_bytes(0x0165B, bytearray([0x20, 0x30, 0xA3])) # org $00965B : jmp $A330
+ rom.write_bytes(0x02DD9, bytearray([0x20, 0x30, 0xA3])) # org $00ADD9 : jmp $A330
+ rom.write_bytes(0x02E1F, bytearray([0x20, 0x30, 0xA3])) # org $00AE1F : jmp $A330
+
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0000, bytearray([0x80, 0x09])) # bra custom_palettes
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0002, bytearray([0xC2, 0x30])) # .original rep #$30
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0004, bytearray([0xA9, 0xDD, 0x7F])) # lda #$7FDD
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0007, bytearray([0x5C, 0xF2, 0xAB, 0x00])) # jml $00ABF2
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x000B, bytearray([0xC2, 0x30])) # custom_palettes: rep #$30
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x000D, bytearray([0xA9, 0x70, 0xB1])) # lda #$B170
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0010, bytearray([0x85, 0x0A])) # sta !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0012, bytearray([0x64, 0x0C])) # stz !_ptr+$02
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0014, bytearray([0xA9, 0x10, 0x00])) # lda.w #$0010
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0017, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0019, bytearray([0xA9, 0x07, 0x00])) # lda #$0007
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x001C, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x001E, bytearray([0xA9, 0x01, 0x00])) # lda #$0001
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0021, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0023, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0026, bytearray([0xAE, 0x0B, 0x01])) # .get_index ldx $010B
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0029, bytearray([0xBF, 0x00, 0xF2, 0x11])) # lda.l level_tilesets,x
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x002D, bytearray([0x29, 0xFF, 0x00])) # and #$00FF
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0030, bytearray([0xEB])) # xba
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0031, bytearray([0x85, 0x00])) # sta !_tileset
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0033, bytearray([0xBF, 0x00, 0xF0, 0x11])) # lda.l level_index,x
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0037, bytearray([0x29, 0xFF, 0x00])) # and #$00FF
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x003A, bytearray([0x05, 0x00])) # ora !_tileset
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x003C, bytearray([0x85, 0x0A])) # sta !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x003E, bytearray([0x0A])) # asl
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x003F, bytearray([0x18])) # clc
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0040, bytearray([0x65, 0x0A])) # adc !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0042, bytearray([0x85, 0x0E])) # sta !_num
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0044, bytearray([0xAA])) # tax
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0045, snes_level_palette_pointers_1) # .back_color lda.l palette_pointers,x
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0049, bytearray([0x85, 0x0A])) # sta !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x004B, snes_level_palette_pointers_2) # lda.l palette_pointers+$02,x
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x004F, bytearray([0x85, 0x0C])) # sta !_ptr+$02
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0051, bytearray([0xA7, 0x0A])) # lda [!_ptr]
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0053, bytearray([0x8D, 0x01, 0x07])) # sta $0701
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0056, bytearray([0xE6, 0x0A])) # inc !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0058, bytearray([0xE6, 0x0A])) # inc !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x005A, bytearray([0xA9, 0x02, 0x00])) # .background lda.w #$0001*$02
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x005D, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x005F, bytearray([0xA9, 0x06, 0x00])) # lda #$0006
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0062, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0064, bytearray([0xA9, 0x01, 0x00])) # lda #$0001
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0067, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0069, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x006C, bytearray([0xA9, 0x42, 0x00])) # .foreground lda.w #$0021*$02
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x006F, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0071, bytearray([0xA9, 0x06, 0x00])) # lda #$0006
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0074, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0076, bytearray([0xA9, 0x01, 0x00])) # lda #$0001
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0079, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x007B, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x007E, bytearray([0xA9, 0x52, 0x00])) # .berries lda.w #$0029*$02
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0081, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0083, bytearray([0xA9, 0x06, 0x00])) # lda #$0006
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0086, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0088, bytearray([0xA9, 0x02, 0x00])) # lda #$0002
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x008B, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x008D, bytearray([0xA5, 0x0A])) # lda !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x008F, bytearray([0x48])) # pha
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0090, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0093, bytearray([0x68])) # pla
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0094, bytearray([0x85, 0x0A])) # sta !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0096, bytearray([0xA9, 0x32, 0x01])) # lda.w #$0099*$02
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0099, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x009B, bytearray([0xA9, 0x06, 0x00])) # lda #$0006
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x009E, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00A0, bytearray([0xA9, 0x02, 0x00])) # lda #$0002
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00A3, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00A5, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00A8, bytearray([0xA9, 0x82, 0x00])) # .global lda.w #$0041*$02
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00AB, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00AD, bytearray([0xA9, 0x06, 0x00])) # lda #$0006
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00B0, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00B2, bytearray([0xA9, 0x0B, 0x00])) # lda #$000B
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00B5, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00B7, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00BA, bytearray([0xA5, 0x00])) # .sprite_specific lda !_tileset
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00BC, bytearray([0xC9, 0x00, 0x05])) # cmp #$0500
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00BF, bytearray([0xD0, 0x1D])) # bne .end
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00C1, bytearray([0xAD, 0x2E, 0x19])) # lda $192E
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00C4, bytearray([0x29, 0x0F, 0x00])) # and #$000F
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00C7, bytearray([0xC9, 0x02, 0x00])) # cmp #$0002
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00CA, bytearray([0xD0, 0x12])) # bne .end
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00CC, bytearray([0xA9, 0xC2, 0x01])) # lda.w #$00E1*$02
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00CF, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00D1, bytearray([0xA9, 0x06, 0x00])) # lda #$0006
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00D4, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00D6, bytearray([0xA9, 0x01, 0x00])) # lda #$0001
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00D9, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00DB, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00DE, bytearray([0xE2, 0x30])) # .end sep #$30
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00E0, bytearray([0x5C, 0xEC, 0xAC, 0x00])) # jml $00ACEC
+
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00E4, bytearray([0xA6, 0x04])) # load_colors: ldx !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00E6, bytearray([0xA4, 0x06])) # ldy !_x_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00E8, bytearray([0xA7, 0x0A])) # .x_loop lda [!_ptr]
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00EA, bytearray([0x9D, 0x03, 0x07])) # sta $0703,x
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00ED, bytearray([0xE6, 0x0A])) # inc !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00EF, bytearray([0xE6, 0x0A])) # inc !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F1, bytearray([0xE8])) # inx
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F2, bytearray([0xE8])) # inx
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F3, bytearray([0x88])) # dey
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F4, bytearray([0x10, 0xF2])) # bpl .x_loop
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F6, bytearray([0xA5, 0x04])) # lda !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F8, bytearray([0x18])) # clc
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F9, bytearray([0x69, 0x20, 0x00])) # adc #$0020
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00FC, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00FE, bytearray([0xC6, 0x08])) # dec !_y_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0100, bytearray([0x10, 0xE2])) # bpl load_colors
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0102, bytearray([0x60])) # rts
+
+ # Load palette paths
+ data = pkgutil.get_data(__name__, f"data/palettes/level/palettes.json").decode("utf-8")
+ tilesets = json.loads(data)
+
+ # Writes the level tileset index to ROM
+ rom.write_bytes(PALETTE_LEVEL_TILESET_ADDR, bytearray(level_palette_index))
+
+ # Builds the table in ROM that holds the palette index for each level, including sublevels
+ for level_id in range(0x200):
+ tileset_num = level_palette_index[level_id]
+ if tileset_num != 0xFF:
+ tileset = tileset_names[tileset_num]
+ else:
+ tileset = tileset_names[0x19]
+ palette = world.random.randint(0, len(tilesets[tileset])-1)
+ rom.write_bytes(PALETTE_INDEX_ADDR + level_id, bytearray([palette]))
+
+ # Writes the actual level palette data and pointer to said data to the ROM
+ pal_offset = 0x0000
+ tileset_num = 0
+ bank_palette_count = 0
+ for tileset in tilesets.keys():
+ for palette in range(len(tilesets[tileset])):
+ # Handle bank crossing
+ if bank_palette_count == 110:
+ pal_offset = (pal_offset & 0xF8000) + 0x8000
+ bank_palette_count = 0
+ # Write pointer
+ data_ptr = pc_to_snes(PALETTE_LEVEL_DATA_ADDR + pal_offset)
+ rom.write_bytes(PALETTE_LEVEL_PTR_ADDR + ((tileset_num*3)<<8) + (palette*3), bytearray([data_ptr & 0xFF, (data_ptr>>8)&0xFF, (data_ptr>>16)&0xFF]))
+ # Write data
+ rom.write_bytes(PALETTE_LEVEL_DATA_ADDR + pal_offset, read_palette_file(tileset, tilesets[tileset][palette], "level"))
+ pal_offset += 0x128
+ bank_palette_count += 1
+ tileset_num += 1
+
+ # Fix eaten berry tiles
+ EATEN_BERRY_ADDR = 0x68248
+ rom.write_byte(EATEN_BERRY_ADDR + 0x01, 0x04)
+ rom.write_byte(EATEN_BERRY_ADDR + 0x03, 0x04)
+ rom.write_byte(EATEN_BERRY_ADDR + 0x05, 0x04)
+ rom.write_byte(EATEN_BERRY_ADDR + 0x07, 0x04)
+
+ # Fix title screen changing background colors
+ rom.write_bytes(0x1D30, bytearray([0xEA, 0xEA, 0xEA]))
+
+ # Skips level intros automatically
+ rom.write_byte(0x4896, 0x80)
+
+def generate_curated_map_palette_data(rom, world: World):
+ PALETTE_MAP_CODE_ADDR = 0x88200
+ PALETTE_UPLOADER_EDIT = 0x88400
+ PALETTE_MAP_INDEX_ADDR = 0x8F400
+ PALETTE_MAP_PTR_ADDR = 0x90000
+ PALETTE_MAP_DATA_ADDR = 0x98000
+
+ addr = pc_to_snes(PALETTE_MAP_PTR_ADDR)
+ snes_map_palette_pointers_1 = bytearray([0xBF, (addr)&0xFF, (addr>>8)&0xFF, (addr>>16)&0xFF])
+ snes_map_palette_pointers_2 = bytearray([0xBF, (addr+2)&0xFF, (addr>>8)&0xFF, (addr>>16)&0xFF])
+
+ rom.write_bytes(0x02D25, bytearray([0x5C, 0x09, 0x82, 0x11])) # org $00AD25 : jml map_palettes
+
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0000, bytearray([0xC2, 0x30])) # map_og_palettes: rep #$30
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0002, bytearray([0xA0, 0xD8, 0xB3])) # ldy #$B3D8
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0005, bytearray([0x5C, 0x2A, 0xAD, 0x00])) # jml $00AD2A
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0009, bytearray([0xC2, 0x30])) # map_palettes: rep #$30
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x000B, bytearray([0xAD, 0x31, 0x19])) # .prepare_index lda $1931
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x000E, bytearray([0x29, 0x0F, 0x00])) # and #$000F
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0011, bytearray([0x3A])) # dec
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0012, bytearray([0xAA])) # tax
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0013, bytearray([0xEB])) # xba
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0014, bytearray([0x85, 0x0E])) # sta !_num
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0016, bytearray([0xBF, 0x00, 0xF4, 0x11])) # lda.l map_index,x
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x001A, bytearray([0x29, 0xFF, 0x00])) # and #$00FF
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x001D, bytearray([0x05, 0x0E])) # ora !_num
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x001F, bytearray([0x85, 0x0A])) # sta !_ptr
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0021, bytearray([0x0A])) # asl
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0022, bytearray([0x18])) # clc
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0023, bytearray([0x65, 0x0A])) # adc !_ptr
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0025, bytearray([0xAA])) # tax
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0026, snes_map_palette_pointers_1) # lda.l map_palette_pointers,x
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x002A, bytearray([0x85, 0x0A])) # sta !_ptr
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x002C, snes_map_palette_pointers_2) # lda.l map_palette_pointers+$02,x
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0030, bytearray([0x85, 0x0C])) # sta !_ptr+$02
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0032, bytearray([0xA7, 0x0A])) # .load_back_color lda [!_ptr]
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0034, bytearray([0x8D, 0x01, 0x07])) # sta $0701
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0037, bytearray([0xE6, 0x0A])) # inc !_ptr
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0039, bytearray([0xE6, 0x0A])) # inc !_ptr
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x003B, bytearray([0xA9, 0x82, 0x00])) # .load_layer_2 lda.w #$0041*$02
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x003E, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0040, bytearray([0xA9, 0x06, 0x00])) # lda #$0006
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0043, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0045, bytearray([0xA9, 0x03, 0x00])) # lda #$0003
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0048, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x004A, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x004D, bytearray([0xA9, 0x52, 0x00])) # .load_layer_1 lda.w #$0029*$02
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0050, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0052, bytearray([0xA9, 0x06, 0x00])) # lda #$0006
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0055, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0057, bytearray([0xA9, 0x05, 0x00])) # lda #$0005
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x005A, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x005C, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x005F, bytearray([0xA9, 0x10, 0x00])) # .load_layer_3 lda.w #$0008*$02
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0062, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0064, bytearray([0xA9, 0x07, 0x00])) # lda #$0007
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0067, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0069, bytearray([0xA9, 0x01, 0x00])) # lda #$0001
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x006C, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x006E, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0071, bytearray([0xA9, 0x02, 0x01])) # .load_sprites lda.w #$0081*$02
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0074, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0076, bytearray([0xA9, 0x06, 0x00])) # lda #$0006
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0079, bytearray([0x85, 0x06])) # sta !_x_span
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x007B, bytearray([0xA9, 0x07, 0x00])) # lda #$0007
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x007E, bytearray([0x85, 0x08])) # sta !_y_span
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0080, bytearray([0x20, 0xE4, 0x80])) # jsr load_colors
+ rom.write_bytes(PALETTE_MAP_CODE_ADDR + 0x0083, bytearray([0x5C, 0xA3, 0xAD, 0x00])) # .return jml $00ADA3
+
+ rom.write_bytes(0x2488, bytearray([0x5C, 0x00, 0x84, 0x11])) # org $00A488 : jml palette_upload
+
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0000, bytearray([0xAD, 0x00, 0x01])) # palette_upload: lda $0100
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0003, bytearray([0xC9, 0x0E])) # cmp #$0E
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0005, bytearray([0xF0, 0x0A])) # beq .map
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0007, bytearray([0xAC, 0x80, 0x06])) # .regular ldy $0680
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x000A, bytearray([0xBE, 0x81, 0xA4])) # ldx.w $A47F+2,y
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x000D, bytearray([0x5C, 0x8E, 0xA4, 0x00])) # jml $00A48E
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0011, bytearray([0xAD, 0xD9, 0x13])) # .map lda $13D9
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0014, bytearray([0xC9, 0x0A])) # cmp #$0A
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0016, bytearray([0xD0, 0xEF])) # bne .regular
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0018, bytearray([0xAD, 0xE8, 0x1D])) # lda $1DE8
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x001B, bytearray([0xC9, 0x06])) # cmp #$06
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x001D, bytearray([0xD0, 0xE8])) # bne .regular
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x001F, bytearray([0x9C, 0x03, 0x07])) # stz $0703
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0022, bytearray([0x9C, 0x04, 0x07])) # stz $0704
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0025, bytearray([0x9C, 0x21, 0x21])) # stz $2121
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0028, bytearray([0xA2, 0x06])) # ldx #$06
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x002A, bytearray([0xBD, 0x49, 0x92])) # .loop lda.w $9249,x
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x002D, bytearray([0x9D, 0x20, 0x43])) # sta $4320,x
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0030, bytearray([0xCA])) # dex
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0031, bytearray([0x10, 0xF7])) # bpl .loop
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0033, bytearray([0xA9, 0x04])) # lda #$04
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0035, bytearray([0x8D, 0x0B, 0x42])) # sta $420B
+ rom.write_bytes(PALETTE_UPLOADER_EDIT + 0x0038, bytearray([0x5C, 0xCF, 0xA4, 0x00])) # jml $00A4CF
+
+ # Insert this piece of ASM again in case levels are disabled
+ PALETTE_LEVEL_CODE_ADDR = 0x88000
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00E4, bytearray([0xA6, 0x04])) # load_colors: ldx !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00E6, bytearray([0xA4, 0x06])) # ldy !_x_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00E8, bytearray([0xA7, 0x0A])) # .x_loop lda [!_ptr]
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00EA, bytearray([0x9D, 0x03, 0x07])) # sta $0703,x
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00ED, bytearray([0xE6, 0x0A])) # inc !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00EF, bytearray([0xE6, 0x0A])) # inc !_ptr
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F1, bytearray([0xE8])) # inx
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F2, bytearray([0xE8])) # inx
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F3, bytearray([0x88])) # dey
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F4, bytearray([0x10, 0xF2])) # bpl .x_loop
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F6, bytearray([0xA5, 0x04])) # lda !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F8, bytearray([0x18])) # clc
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00F9, bytearray([0x69, 0x20, 0x00])) # adc #$0020
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00FC, bytearray([0x85, 0x04])) # sta !_index
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x00FE, bytearray([0xC6, 0x08])) # dec !_y_span
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0100, bytearray([0x10, 0xE2])) # bpl load_colors
+ rom.write_bytes(PALETTE_LEVEL_CODE_ADDR + 0x0102, bytearray([0x60])) # rts
+
+ # Load palette paths
+ data = pkgutil.get_data(__name__, f"data/palettes/map/palettes.json").decode("utf-8")
+ maps = json.loads(data)
+
+ for map_id in range(0x07):
+ current_map_name = map_names[map_id]
+ palette = world.random.randint(0, len(maps[current_map_name])-1)
+ rom.write_bytes(PALETTE_MAP_INDEX_ADDR + map_id, bytearray([palette]))
+
+ # Writes the actual map palette data and pointer to said data to the ROM
+ pal_offset = 0x0000
+ map_num = 0
+ bank_palette_count = 0
+ for current_map in maps.keys():
+ for palette in range(len(maps[current_map])):
+ # Handle bank crossing
+ if bank_palette_count == 113:
+ pal_offset = (pal_offset & 0xF8000) + 0x8000
+ bank_palette_count = 0
+ # Write pointer
+ data_ptr = pc_to_snes(PALETTE_MAP_DATA_ADDR + pal_offset)
+ rom.write_bytes(PALETTE_MAP_PTR_ADDR + ((map_num*3)<<8) + (palette*3), bytearray([data_ptr & 0xFF, (data_ptr>>8)&0xFF, (data_ptr>>16)&0xFF]))
+ # Write data
+ rom.write_bytes(PALETTE_MAP_DATA_ADDR + pal_offset, read_palette_file(current_map, maps[current_map][palette], "map"))
+ # Update map mario palette
+ chosen_palette = world.options.mario_palette.value
+ rom.write_bytes(PALETTE_MAP_DATA_ADDR + pal_offset + 206, bytes(ow_mario_palettes[chosen_palette]))
+ pal_offset += 0x11C
+ bank_palette_count += 1
+ map_num += 1
+
+
+def pc_to_snes(address):
+ return ((address << 1) & 0x7F0000) | (address & 0x7FFF) | 0x8000
+
+def read_palette_file(tileset, filename, type_):
+ palette_file = pkgutil.get_data(__name__, f"data/palettes/{type_}/{tileset}/{filename}")
+ colors = bytearray([])
+
+ # Copy back colors
+ colors += bytearray([palette_file[0x200], palette_file[0x201]])
+
+ if type_ == "level":
+ # Copy background colors
+ colors += bytearray([palette_file[(0x01*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x11*2)+(i)] for i in range(14)])
+
+ # Copy foreground colors
+ colors += bytearray([palette_file[(0x21*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x31*2)+(i)] for i in range(14)])
+
+ # Copy berry colors
+ colors += bytearray([palette_file[(0x29*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x39*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x49*2)+(i)] for i in range(14)])
+
+ # Copy global colors
+ colors += bytearray([palette_file[(0x41*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x51*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x61*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x71*2)+(i)] for i in range(14)])
+
+ # Copy sprite colors
+ colors += bytearray([palette_file[(0x81*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x91*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xA1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xB1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xC1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xD1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xE1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xF1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xE9*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xF9*2)+(i)] for i in range(14)])
+
+ elif type_ == "map":
+ # Copy layer 2 colors
+ colors += bytearray([palette_file[(0x41*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x51*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x61*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x71*2)+(i)] for i in range(14)])
+
+ # Copy layer 1 colors
+ colors += bytearray([palette_file[(0x29*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x39*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x49*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x59*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x69*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x79*2)+(i)] for i in range(14)])
+
+ # Copy layer 3 colors
+ colors += bytearray([palette_file[(0x08*2)+(i)] for i in range(16)])
+ colors += bytearray([palette_file[(0x18*2)+(i)] for i in range(16)])
+
+ # Copy sprite colors
+ colors += bytearray([palette_file[(0x81*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0x91*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xA1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xB1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xC1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xD1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xE1*2)+(i)] for i in range(14)])
+ colors += bytearray([palette_file[(0xF1*2)+(i)] for i in range(14)])
+
+ return colors
diff --git a/worlds/smw/Client.py b/worlds/smw/Client.py
index 92aeac4d4a..eb9b4ec3d3 100644
--- a/worlds/smw/Client.py
+++ b/worlds/smw/Client.py
@@ -1,5 +1,4 @@
import logging
-import asyncio
import time
from NetUtils import ClientStatus, color
@@ -17,11 +16,19 @@ SRAM_START = 0xE00000
SMW_ROMHASH_START = 0x7FC0
ROMHASH_SIZE = 0x15
-SMW_PROGRESS_DATA = WRAM_START + 0x1F02
-SMW_DRAGON_COINS_DATA = WRAM_START + 0x1F2F
-SMW_PATH_DATA = WRAM_START + 0x1EA2
-SMW_EVENT_ROM_DATA = ROM_START + 0x2D608
-SMW_ACTIVE_LEVEL_DATA = ROM_START + 0x37F70
+SMW_PROGRESS_DATA = WRAM_START + 0x1F02
+SMW_DRAGON_COINS_DATA = WRAM_START + 0x1F2F
+SMW_PATH_DATA = WRAM_START + 0x1EA2
+SMW_EVENT_ROM_DATA = ROM_START + 0x2D608
+SMW_ACTIVE_LEVEL_DATA = ROM_START + 0x37F70
+SMW_MOON_DATA = WRAM_START + 0x1FEE
+SMW_HIDDEN_1UP_DATA = WRAM_START + 0x1F3C
+SMW_BONUS_BLOCK_DATA = WRAM_START + 0x1A000
+SMW_BLOCKSANITY_DATA = WRAM_START + 0x1A400
+SMW_BLOCKSANITY_FLAGS = WRAM_START + 0x1A010
+SMW_LEVEL_CLEAR_FLAGS = WRAM_START + 0x1A200
+SMW_SPECIAL_WORLD_CLEAR = WRAM_START + 0x1F1E
+
SMW_GOAL_DATA = ROM_START + 0x01BFA0
SMW_REQUIRED_BOSSES_DATA = ROM_START + 0x01BFA1
@@ -31,22 +38,32 @@ SMW_RECEIVE_MSG_DATA = ROM_START + 0x01BFA4
SMW_DEATH_LINK_ACTIVE_ADDR = ROM_START + 0x01BFA5
SMW_DRAGON_COINS_ACTIVE_ADDR = ROM_START + 0x01BFA6
SMW_SWAMP_DONUT_GH_ADDR = ROM_START + 0x01BFA7
+SMW_MOON_ACTIVE_ADDR = ROM_START + 0x01BFA8
+SMW_HIDDEN_1UP_ACTIVE_ADDR = ROM_START + 0x01BFA9
+SMW_BONUS_BLOCK_ACTIVE_ADDR = ROM_START + 0x01BFAA
+SMW_BLOCKSANITY_ACTIVE_ADDR = ROM_START + 0x01BFAB
-SMW_GAME_STATE_ADDR = WRAM_START + 0x100
-SMW_MARIO_STATE_ADDR = WRAM_START + 0x71
-SMW_BOSS_STATE_ADDR = WRAM_START + 0xD9B
-SMW_ACTIVE_BOSS_ADDR = WRAM_START + 0x13FC
-SMW_CURRENT_LEVEL_ADDR = WRAM_START + 0x13BF
-SMW_MESSAGE_BOX_ADDR = WRAM_START + 0x1426
-SMW_BONUS_STAR_ADDR = WRAM_START + 0xF48
-SMW_EGG_COUNT_ADDR = WRAM_START + 0x1F24
-SMW_BOSS_COUNT_ADDR = WRAM_START + 0x1F26
-SMW_NUM_EVENTS_ADDR = WRAM_START + 0x1F2E
-SMW_SFX_ADDR = WRAM_START + 0x1DFC
-SMW_PAUSE_ADDR = WRAM_START + 0x13D4
-SMW_MESSAGE_QUEUE_ADDR = WRAM_START + 0xC391
-SMW_RECV_PROGRESS_ADDR = WRAM_START + 0x1F2B
+SMW_GAME_STATE_ADDR = WRAM_START + 0x100
+SMW_MARIO_STATE_ADDR = WRAM_START + 0x71
+SMW_BOSS_STATE_ADDR = WRAM_START + 0xD9B
+SMW_ACTIVE_BOSS_ADDR = WRAM_START + 0x13FC
+SMW_CURRENT_LEVEL_ADDR = WRAM_START + 0x13BF
+SMW_CURRENT_SUBLEVEL_ADDR = WRAM_START + 0x10B
+SMW_MESSAGE_BOX_ADDR = WRAM_START + 0x1426
+SMW_BONUS_STAR_ADDR = WRAM_START + 0xF48
+SMW_EGG_COUNT_ADDR = WRAM_START + 0x1F24
+SMW_BOSS_COUNT_ADDR = WRAM_START + 0x1F26
+SMW_NUM_EVENTS_ADDR = WRAM_START + 0x1F2E
+SMW_SFX_ADDR = WRAM_START + 0x1DFC
+SMW_PAUSE_ADDR = WRAM_START + 0x13D4
+SMW_MESSAGE_QUEUE_ADDR = WRAM_START + 0xC391
+SMW_ACTIVE_THWIMP_ADDR = WRAM_START + 0x0F3C
+SMW_GOAL_ITEM_COUNT = WRAM_START + 0x1A01E
+
+SMW_RECV_PROGRESS_ADDR = WRAM_START + 0x01F2B
+
+SMW_BLOCKSANITY_BLOCK_COUNT = 582
SMW_GOAL_LEVELS = [0x28, 0x31, 0x32]
SMW_INVALID_MARIO_STATES = [0x05, 0x06, 0x0A, 0x0C, 0x0D]
@@ -57,6 +74,7 @@ SMW_UNCOLLECTABLE_LEVELS = [0x25, 0x07, 0x0B, 0x40, 0x0E, 0x1F, 0x20, 0x1B, 0x1A
class SMWSNIClient(SNIClient):
game = "Super Mario World"
+ patch_suffix = ".apsmw"
async def deathlink_kill_player(self, ctx):
from SNIClient import DeathState, snes_buffered_write, snes_flush_writes, snes_read
@@ -114,6 +132,9 @@ class SMWSNIClient(SNIClient):
if death_link:
await ctx.update_death_link(bool(death_link[0] & 0b1))
+ if ctx.rom != rom_name:
+ ctx.current_sublevel_value = 0
+
ctx.rom = rom_name
return True
@@ -175,6 +196,11 @@ class SMWSNIClient(SNIClient):
self.trap_queue.append((trap_item, trap_msg))
+ def should_show_message(self, ctx, next_item):
+ return ctx.receive_option == 1 or \
+ (ctx.receive_option == 2 and ((next_item.flags & 1) != 0)) or \
+ (ctx.receive_option == 3 and ((next_item.flags & 1) != 0 and next_item.item != 0xBC0002))
+
async def handle_trap_queue(self, ctx):
from SNIClient import snes_buffered_write, snes_flush_writes, snes_read
@@ -216,6 +242,13 @@ class SMWSNIClient(SNIClient):
self.add_trap_to_queue(next_trap, message)
return
else:
+ if next_trap.item == 0xBC001D:
+ # Special case thwimp trap
+ # Do not fire if the previous thwimp hasn't reached the player's Y pos
+ active_thwimp = await snes_read(ctx, SMW_ACTIVE_THWIMP_ADDR, 0x1)
+ if active_thwimp[0] != 0xFF:
+ self.add_trap_to_queue(next_trap, message)
+ return
verify_game_state = await snes_read(ctx, SMW_GAME_STATE_ADDR, 0x1)
if verify_game_state[0] == 0x14 and len(trap_rom_data[next_trap.item]) > 2:
snes_buffered_write(ctx, SMW_SFX_ADDR, bytes([trap_rom_data[next_trap.item][2]]))
@@ -235,13 +268,14 @@ class SMWSNIClient(SNIClient):
if active_boss[0] != 0x00:
return
- if ctx.receive_option == 1 or (ctx.receive_option == 2 and ((next_trap.flags & 1) != 0)):
+ if self.should_show_message(ctx, next_trap):
self.add_message_to_queue(message)
async def game_watcher(self, ctx):
from SNIClient import snes_buffered_write, snes_flush_writes, snes_read
-
+
+ boss_state = await snes_read(ctx, SMW_BOSS_STATE_ADDR, 0x1)
game_state = await snes_read(ctx, SMW_GAME_STATE_ADDR, 0x1)
mario_state = await snes_read(ctx, SMW_MARIO_STATE_ADDR, 0x1)
if game_state is None:
@@ -258,6 +292,7 @@ class SMWSNIClient(SNIClient):
elif game_state[0] < 0x0B:
# We haven't loaded a save file
ctx.message_queue = []
+ ctx.current_sublevel_value = 0
return
elif mario_state[0] in SMW_INVALID_MARIO_STATES:
# Mario can't come to the phone right now
@@ -303,8 +338,18 @@ class SMWSNIClient(SNIClient):
progress_data = bytearray(await snes_read(ctx, SMW_PROGRESS_DATA, 0x0F))
dragon_coins_data = bytearray(await snes_read(ctx, SMW_DRAGON_COINS_DATA, 0x0C))
dragon_coins_active = await snes_read(ctx, SMW_DRAGON_COINS_ACTIVE_ADDR, 0x1)
- from worlds.smw.Rom import item_rom_data, ability_rom_data, trap_rom_data
- from worlds.smw.Levels import location_id_to_level_id, level_info_dict
+ moon_data = bytearray(await snes_read(ctx, SMW_MOON_DATA, 0x0C))
+ moon_active = await snes_read(ctx, SMW_MOON_ACTIVE_ADDR, 0x1)
+ hidden_1up_data = bytearray(await snes_read(ctx, SMW_HIDDEN_1UP_DATA, 0x0C))
+ hidden_1up_active = await snes_read(ctx, SMW_HIDDEN_1UP_ACTIVE_ADDR, 0x1)
+ bonus_block_data = bytearray(await snes_read(ctx, SMW_BONUS_BLOCK_DATA, 0x0C))
+ bonus_block_active = await snes_read(ctx, SMW_BONUS_BLOCK_ACTIVE_ADDR, 0x1)
+ blocksanity_data = bytearray(await snes_read(ctx, SMW_BLOCKSANITY_DATA, SMW_BLOCKSANITY_BLOCK_COUNT))
+ blocksanity_flags = bytearray(await snes_read(ctx, SMW_BLOCKSANITY_FLAGS, 0xC))
+ blocksanity_active = await snes_read(ctx, SMW_BLOCKSANITY_ACTIVE_ADDR, 0x1)
+ level_clear_flags = bytearray(await snes_read(ctx, SMW_LEVEL_CLEAR_FLAGS, 0x60))
+ from worlds.smw.Rom import item_rom_data, ability_rom_data, trap_rom_data, icon_rom_data
+ from worlds.smw.Levels import location_id_to_level_id, level_info_dict, level_blocks_data
from worlds import AutoWorldRegister
for loc_name, level_data in location_id_to_level_id.items():
loc_id = AutoWorldRegister.world_types[ctx.game].location_name_to_id[loc_name]
@@ -326,6 +371,54 @@ class SMWSNIClient(SNIClient):
if bit_set:
new_checks.append(loc_id)
+ elif level_data[1] == 3:
+ # Moon Check
+ if not moon_active or moon_active[0] == 0:
+ continue
+
+ progress_byte = (level_data[0] // 8)
+ progress_bit = 7 - (level_data[0] % 8)
+
+ data = moon_data[progress_byte]
+ masked_data = data & (1 << progress_bit)
+ bit_set = (masked_data != 0)
+
+ if bit_set:
+ new_checks.append(loc_id)
+ elif level_data[1] == 4:
+ # Hidden 1-Up Check
+ if not hidden_1up_active or hidden_1up_active[0] == 0:
+ continue
+
+ progress_byte = (level_data[0] // 8)
+ progress_bit = 7 - (level_data[0] % 8)
+
+ data = hidden_1up_data[progress_byte]
+ masked_data = data & (1 << progress_bit)
+ bit_set = (masked_data != 0)
+
+ if bit_set:
+ new_checks.append(loc_id)
+ elif level_data[1] == 5:
+ # Bonus Block Check
+ if not bonus_block_active or bonus_block_active[0] == 0:
+ continue
+
+ progress_byte = (level_data[0] // 8)
+ progress_bit = 7 - (level_data[0] % 8)
+
+ data = bonus_block_data[progress_byte]
+ masked_data = data & (1 << progress_bit)
+ bit_set = (masked_data != 0)
+
+ if bit_set:
+ new_checks.append(loc_id)
+ elif level_data[1] >= 100:
+ if not blocksanity_active or blocksanity_active[0] == 0:
+ continue
+ block_index = level_data[1] - 100
+ if blocksanity_data[block_index] != 0:
+ new_checks.append(loc_id)
else:
event_id_value = event_id + level_data[1]
@@ -359,12 +452,48 @@ class SMWSNIClient(SNIClient):
f'New Check: {location} ({len(ctx.locations_checked)}/{len(ctx.missing_locations) + len(ctx.checked_locations)})')
await ctx.send_msgs([{"cmd": 'LocationChecks', "locations": [new_check_id]}])
+ # Send Current Room for Tracker
+ current_sublevel_data = await snes_read(ctx, SMW_CURRENT_SUBLEVEL_ADDR, 2)
+ current_sublevel_value = current_sublevel_data[0] + (current_sublevel_data[1] << 8)
+
+ if game_state[0] != 0x14:
+ current_sublevel_value = 0
+
+ if ctx.current_sublevel_value != current_sublevel_value:
+ ctx.current_sublevel_value = current_sublevel_value
+
+ # Send level id data to tracker
+ await ctx.send_msgs(
+ [
+ {
+ "cmd": "Set",
+ "key": f"smw_curlevelid_{ctx.team}_{ctx.slot}",
+ "default": 0,
+ "want_reply": False,
+ "operations": [
+ {
+ "operation": "replace",
+ "value": ctx.current_sublevel_value,
+ }
+ ],
+ }
+ ]
+ )
+
if game_state[0] != 0x14:
# Don't receive items or collect locations outside of in-level mode
+ ctx.current_sublevel_value = 0
+ return
+
+ if boss_state[0] in SMW_BOSS_STATES:
+ # Don't receive items or collect locations inside boss battles
return
- recv_count = await snes_read(ctx, SMW_RECV_PROGRESS_ADDR, 1)
- recv_index = recv_count[0]
+ recv_count = await snes_read(ctx, SMW_RECV_PROGRESS_ADDR, 2)
+ if recv_count is None:
+ # Add a small failsafe in case we get a None. Other SNI games do this...
+ return
+ recv_index = recv_count[0] | (recv_count[1] << 8)
if recv_index < len(ctx.items_received):
item = ctx.items_received[recv_index]
@@ -374,7 +503,7 @@ class SMWSNIClient(SNIClient):
color(ctx.player_names[item.player], 'yellow'),
ctx.location_names[item.location], recv_index, len(ctx.items_received)))
- if ctx.receive_option == 1 or (ctx.receive_option == 2 and ((item.flags & 1) != 0)):
+ if self.should_show_message(ctx, item):
if item.item != 0xBC0012 and item.item not in trap_rom_data:
# Don't send messages for Boss Tokens
item_name = ctx.item_names[item.item]
@@ -383,7 +512,7 @@ class SMWSNIClient(SNIClient):
receive_message = generate_received_text(item_name, player_name)
self.add_message_to_queue(receive_message)
- snes_buffered_write(ctx, SMW_RECV_PROGRESS_ADDR, bytes([recv_index]))
+ snes_buffered_write(ctx, SMW_RECV_PROGRESS_ADDR, bytes([recv_index&0xFF, (recv_index>>8)&0xFF]))
if item.item in trap_rom_data:
item_name = ctx.item_names[item.item]
player_name = ctx.player_names[item.player]
@@ -404,6 +533,15 @@ class SMWSNIClient(SNIClient):
snes_buffered_write(ctx, SMW_SFX_ADDR, bytes([item_rom_data[item.item][2]]))
snes_buffered_write(ctx, WRAM_START + item_rom_data[item.item][0], bytes([new_item_count]))
+ elif item.item in icon_rom_data:
+ queue_addr = await snes_read(ctx, WRAM_START + icon_rom_data[item.item][0], 2)
+ queue_addr = queue_addr[0] + (queue_addr[1] << 8)
+ queue_addr += 1
+ snes_buffered_write(ctx, WRAM_START + icon_rom_data[item.item][0], bytes([queue_addr&0xFF, (queue_addr>>8)&0xFF]))
+ if (goal[0] == 0 and item.item == 0xBC0012) or (goal[0] == 1 and item.item == 0xBC0002):
+ goal_item_count = await snes_read(ctx, SMW_GOAL_ITEM_COUNT, 1)
+ snes_buffered_write(ctx, SMW_GOAL_ITEM_COUNT, bytes([goal_item_count[0] + 1]))
+
elif item.item in ability_rom_data:
# Handle Upgrades
for rom_data in ability_rom_data[item.item]:
@@ -448,6 +586,12 @@ class SMWSNIClient(SNIClient):
path_data = bytearray(await snes_read(ctx, SMW_PATH_DATA, 0x60))
donut_gh_swapped = await snes_read(ctx, SMW_SWAMP_DONUT_GH_ADDR, 0x1)
new_dragon_coin = False
+ new_moon = False
+ new_hidden_1up = False
+ new_bonus_block = False
+ new_blocksanity = False
+ new_blocksanity_flags = False
+
for loc_id in ctx.checked_locations:
if loc_id not in ctx.locations_checked:
ctx.locations_checked.add(loc_id)
@@ -469,10 +613,64 @@ class SMWSNIClient(SNIClient):
dragon_coins_data[progress_byte] = new_data
new_dragon_coin = True
+ elif level_data[1] == 3:
+ # Moon Check
+
+ progress_byte = (level_data[0] // 8)
+ progress_bit = 7 - (level_data[0] % 8)
+
+ data = moon_data[progress_byte]
+ new_data = data | (1 << progress_bit)
+ moon_data[progress_byte] = new_data
+
+ new_moon = True
+ elif level_data[1] == 4:
+ # Hidden 1-Up Check
+ progress_byte = (level_data[0] // 8)
+ progress_bit = 7 - (level_data[0] % 8)
+
+ data = hidden_1up_data[progress_byte]
+ new_data = data | (1 << progress_bit)
+ hidden_1up_data[progress_byte] = new_data
+
+ new_hidden_1up = True
+ elif level_data[1] == 5:
+ # Bonus block prize Check
+
+ progress_byte = (level_data[0] // 8)
+ progress_bit = 7 - (level_data[0] % 8)
+
+ data = bonus_block_data[progress_byte]
+ new_data = data | (1 << progress_bit)
+ bonus_block_data[progress_byte] = new_data
+
+ new_bonus_block = True
+ elif level_data[1] >= 100:
+ # Blocksanity flag Check
+ block_index = level_data[1] - 100
+ blocksanity_data[block_index] = 1
+ new_blocksanity = True
+
+ # All blocksanity blocks flag
+ new_blocksanity_flags = True
+ for block_id in level_blocks_data[level_data[0]]:
+ if blocksanity_data[block_id] != 1:
+ new_blocksanity_flags = False
+ continue
+ if new_blocksanity_flags is True:
+ progress_byte = (level_data[0] // 8)
+ progress_bit = 7 - (level_data[0] % 8)
+ data = blocksanity_flags[progress_byte]
+ new_data = data | (1 << progress_bit)
+ blocksanity_flags[progress_byte] = new_data
else:
if level_data[0] in SMW_UNCOLLECTABLE_LEVELS:
continue
+ # Handle map indicators
+ flag = 1 if level_data[1] == 0 else 2
+ level_clear_flags[level_data[0]] |= flag
+
event_id = event_data[level_data[0]]
event_id_value = event_id + level_data[1]
@@ -513,7 +711,18 @@ class SMWSNIClient(SNIClient):
if new_dragon_coin:
snes_buffered_write(ctx, SMW_DRAGON_COINS_DATA, bytes(dragon_coins_data))
+ if new_moon:
+ snes_buffered_write(ctx, SMW_MOON_DATA, bytes(moon_data))
+ if new_hidden_1up:
+ snes_buffered_write(ctx, SMW_HIDDEN_1UP_DATA, bytes(hidden_1up_data))
+ if new_bonus_block:
+ snes_buffered_write(ctx, SMW_BONUS_BLOCK_DATA, bytes(bonus_block_data))
+ if new_blocksanity:
+ snes_buffered_write(ctx, SMW_BLOCKSANITY_DATA, bytes(blocksanity_data))
+ if new_blocksanity_flags:
+ snes_buffered_write(ctx, SMW_BLOCKSANITY_FLAGS, bytes(blocksanity_flags))
if new_events > 0:
+ snes_buffered_write(ctx, SMW_LEVEL_CLEAR_FLAGS, bytes(level_clear_flags))
snes_buffered_write(ctx, SMW_PROGRESS_DATA, bytes(progress_data))
snes_buffered_write(ctx, SMW_PATH_DATA, bytes(path_data))
old_events = await snes_read(ctx, SMW_NUM_EVENTS_ADDR, 0x1)
diff --git a/worlds/smw/Items.py b/worlds/smw/Items.py
index 5b6cce5a7f..eaf58b9b8e 100644
--- a/worlds/smw/Items.py
+++ b/worlds/smw/Items.py
@@ -18,6 +18,10 @@ class SMWItem(Item):
# Separate tables for each type of item.
junk_table = {
+ ItemName.one_coin: ItemData(0xBC0017, False),
+ ItemName.five_coins: ItemData(0xBC0018, False),
+ ItemName.ten_coins: ItemData(0xBC0019, False),
+ ItemName.fifty_coins: ItemData(0xBC001A, False),
ItemName.one_up_mushroom: ItemData(0xBC0001, False),
}
@@ -36,6 +40,7 @@ upgrade_table = {
ItemName.progressive_powerup: ItemData(0xBC000A, True),
ItemName.p_balloon: ItemData(0xBC000B, True),
ItemName.super_star_active: ItemData(0xBC000D, True),
+ ItemName.special_world_clear: ItemData(0xBC001B, True),
}
switch_palace_table = {
@@ -46,10 +51,12 @@ switch_palace_table = {
}
trap_table = {
- ItemName.ice_trap: ItemData(0xBC0013, False, True),
- ItemName.stun_trap: ItemData(0xBC0014, False, True),
- ItemName.literature_trap: ItemData(0xBC0015, False, True),
- ItemName.timer_trap: ItemData(0xBC0016, False, True),
+ ItemName.ice_trap: ItemData(0xBC0013, False, True),
+ ItemName.stun_trap: ItemData(0xBC0014, False, True),
+ ItemName.literature_trap: ItemData(0xBC0015, False, True),
+ ItemName.timer_trap: ItemData(0xBC0016, False, True),
+ ItemName.reverse_controls_trap: ItemData(0xBC001C, False, True),
+ ItemName.thwimp_trap: ItemData(0xBC001D, False, True),
}
event_table = {
diff --git a/worlds/smw/Levels.py b/worlds/smw/Levels.py
index 3940a08c7c..7aa9428b91 100644
--- a/worlds/smw/Levels.py
+++ b/worlds/smw/Levels.py
@@ -1,4 +1,5 @@
+from worlds.AutoWorld import World
from .Names import LocationName
@@ -75,6 +76,103 @@ ow_boss_rooms = [
]
+level_blocks_data = {
+ 0x01: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11],
+ 0x02: [12, 13],
+ 0x04: [14, 15, 16, 17, 18, 19],
+ 0x05: [20, 21, 22, 23, 24, 25],
+ 0x06: [26, 27, 28, 29],
+ 0x07: [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
+ 0x09: [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
+ 0x0A: [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
+ 0x0B: [60, 61, 62],
+ 0x0C: [63, 64, 65, 66, 67, 68],
+ 0x0D: [69, 70, 71],
+ 0x0E: [72],
+ 0x0F: [73, 74, 75, 76],
+ 0x10: [77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
+ 109, 110, 111
+ ],
+ 0x11: [112],
+ 0x13: [113, 114, 115, 116, 117],
+ 0x15: [118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140
+ ],
+ 0x18: [141, 142],
+ 0x1A: [143, 144, 145],
+ 0x1B: [146, 147, 148, 149, 150],
+ 0x1C: [151, 152, 153, 154],
+ 0x1D: [155, 156, 157],
+ 0x1F: [158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168],
+ 0x20: [169],
+ 0x21: [170, 171, 172],
+ 0x22: [173, 174, 175, 176, 177],
+ 0x23: [178, 179, 180, 181, 182, 183, 184, 185, 186],
+ 0x24: [187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
+ 201, 202
+ ],
+ 0x25: [203, 204, 205, 206, 207, 208],
+ 0x26: [209, 210, 211, 212],
+ 0x27: [213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
+ 227, 228, 229
+ ],
+ 0x29: [230, 231, 232, 233],
+ 0x2A: [234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249
+ ],
+ 0x2B: [250, 251, 252, 253, 254],
+ 0x2D: [255, 256, 257, 258, 259, 260, 261, 262],
+ 0x2E: [263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
+ 277, 278, 279
+ ],
+ 0x2F: [280, 281, 282, 283, 284],
+ 0x33: [285, 286, 287, 288, 289, 290],
+ 0x34: [291, 292, 293],
+ 0x35: [294, 295],
+ 0x37: [296, 297],
+ 0x38: [298, 299, 300, 301],
+ 0x39: [302, 303, 304, 305],
+ 0x3A: [306, 307, 308, 309, 310, 311, 312, 313, 314],
+ 0x3B: [315, 316],
+ 0x3C: [317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330],
+ 0x3D: [331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341],
+ 0x3E: [342, 343, 344, 345, 346, 347, 348, 349, 350, 351],
+ 0x40: [352, 353, 354, 355, 356],
+ 0x41: [357, 358, 359, 360, 361],
+ 0x42: [362, 363, 364, 365, 366],
+ 0x43: [367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379],
+ 0x44: [380, 381, 382, 383, 384, 385, 386],
+ 0x46: [387, 388, 389],
+ 0x47: [390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403,
+ 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416
+ ],
+ 0x49: [417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430,
+ 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443,
+ 444, 445, 446
+ ],
+ 0x4A: [447, 448, 449, 450, 451],
+ 0x4B: [452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465,
+ 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478,
+ 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489
+ ],
+ 0x4C: [490],
+ 0x4E: [491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504,
+ 505, 506, 507, 508, 509, 510, 511, 512
+ ],
+ 0x4F: [513, 514, 515, 516, 517, 518, 519, 520, 521, 522],
+ 0x50: [523, 524, 525],
+ 0x51: [526, 527],
+ 0x54: [528],
+ 0x56: [529],
+ 0x59: [530, 531, 532, 533, 534, 535, 536, 537, 538],
+ 0x5A: [539, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552,
+ 553, 554, 555, 556, 557, 558, 559, 560, 561, 562, 563, 564, 565,
+ 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578,
+ 579, 580, 581
+ ]
+}
+
class SMWPath():
thisEndDirection: int
otherLevelID: int
@@ -330,12 +428,15 @@ switch_palace_levels = [
location_id_to_level_id = {
LocationName.yoshis_island_1_exit_1: [0x29, 0],
LocationName.yoshis_island_1_dragon: [0x29, 2],
+ LocationName.yoshis_island_1_moon: [0x29, 3],
LocationName.yoshis_island_2_exit_1: [0x2A, 0],
LocationName.yoshis_island_2_dragon: [0x2A, 2],
LocationName.yoshis_island_3_exit_1: [0x27, 0],
LocationName.yoshis_island_3_dragon: [0x27, 2],
+ LocationName.yoshis_island_3_bonus_block: [0x27, 5],
LocationName.yoshis_island_4_exit_1: [0x26, 0],
LocationName.yoshis_island_4_dragon: [0x26, 2],
+ LocationName.yoshis_island_4_hidden_1up: [0x26, 4],
LocationName.yoshis_island_castle: [0x25, 0],
LocationName.yoshis_island_koopaling: [0x25, 0],
LocationName.yellow_switch_palace: [0x14, 0],
@@ -343,13 +444,17 @@ location_id_to_level_id = {
LocationName.donut_plains_1_exit_1: [0x15, 0],
LocationName.donut_plains_1_exit_2: [0x15, 1],
LocationName.donut_plains_1_dragon: [0x15, 2],
+ LocationName.donut_plains_1_hidden_1up: [0x15, 4],
LocationName.donut_plains_2_exit_1: [0x09, 0],
LocationName.donut_plains_2_exit_2: [0x09, 1],
LocationName.donut_plains_2_dragon: [0x09, 2],
LocationName.donut_plains_3_exit_1: [0x05, 0],
LocationName.donut_plains_3_dragon: [0x05, 2],
+ LocationName.donut_plains_3_bonus_block: [0x05, 5],
LocationName.donut_plains_4_exit_1: [0x06, 0],
LocationName.donut_plains_4_dragon: [0x06, 2],
+ LocationName.donut_plains_4_moon: [0x06, 3],
+ LocationName.donut_plains_4_hidden_1up: [0x06, 4],
LocationName.donut_secret_1_exit_1: [0x0A, 0],
LocationName.donut_secret_1_exit_2: [0x0A, 1],
LocationName.donut_secret_1_dragon: [0x0A, 2],
@@ -360,6 +465,7 @@ location_id_to_level_id = {
LocationName.donut_secret_house_exit_1: [0x13, 0],
LocationName.donut_secret_house_exit_2: [0x13, 1],
LocationName.donut_plains_castle: [0x07, 0],
+ LocationName.donut_plains_castle_hidden_1up: [0x07, 4],
LocationName.donut_plains_koopaling: [0x07, 0],
LocationName.green_switch_palace: [0x08, 0],
@@ -371,8 +477,10 @@ location_id_to_level_id = {
LocationName.vanilla_dome_2_dragon: [0x3C, 2],
LocationName.vanilla_dome_3_exit_1: [0x2E, 0],
LocationName.vanilla_dome_3_dragon: [0x2E, 2],
+ LocationName.vanilla_dome_3_moon: [0x2E, 3],
LocationName.vanilla_dome_4_exit_1: [0x3D, 0],
LocationName.vanilla_dome_4_dragon: [0x3D, 2],
+ LocationName.vanilla_dome_4_hidden_1up: [0x3D, 4],
LocationName.vanilla_secret_1_exit_1: [0x2D, 0],
LocationName.vanilla_secret_1_exit_2: [0x2D, 1],
LocationName.vanilla_secret_1_dragon: [0x2D, 2],
@@ -382,7 +490,9 @@ location_id_to_level_id = {
LocationName.vanilla_secret_3_dragon: [0x02, 2],
LocationName.vanilla_ghost_house_exit_1: [0x2B, 0],
LocationName.vanilla_ghost_house_dragon: [0x2B, 2],
+ LocationName.vanilla_ghost_house_hidden_1up: [0x2B, 4],
LocationName.vanilla_fortress: [0x0B, 0],
+ LocationName.vanilla_fortress_hidden_1up: [0x0B, 4],
LocationName.vanilla_reznor: [0x0B, 0],
LocationName.vanilla_dome_castle: [0x40, 0],
LocationName.vanilla_dome_koopaling: [0x40, 0],
@@ -390,13 +500,16 @@ location_id_to_level_id = {
LocationName.butter_bridge_1_exit_1: [0x0C, 0],
LocationName.butter_bridge_1_dragon: [0x0C, 2],
+ LocationName.butter_bridge_1_bonus_block: [0x0C, 5],
LocationName.butter_bridge_2_exit_1: [0x0D, 0],
LocationName.butter_bridge_2_dragon: [0x0D, 2],
LocationName.cheese_bridge_exit_1: [0x0F, 0],
LocationName.cheese_bridge_exit_2: [0x0F, 1],
LocationName.cheese_bridge_dragon: [0x0F, 2],
+ LocationName.cheese_bridge_moon: [0x0F, 3],
LocationName.cookie_mountain_exit_1: [0x10, 0],
LocationName.cookie_mountain_dragon: [0x10, 2],
+ LocationName.cookie_mountain_hidden_1up: [0x10, 4],
LocationName.soda_lake_exit_1: [0x11, 0],
LocationName.soda_lake_dragon: [0x11, 2],
LocationName.twin_bridges_castle: [0x0E, 0],
@@ -410,12 +523,14 @@ location_id_to_level_id = {
LocationName.forest_of_illusion_3_exit_1: [0x47, 0],
LocationName.forest_of_illusion_3_exit_2: [0x47, 1],
LocationName.forest_of_illusion_3_dragon: [0x47, 2],
+ LocationName.forest_of_illusion_3_hidden_1up: [0x47, 4],
LocationName.forest_of_illusion_4_exit_1: [0x43, 0],
LocationName.forest_of_illusion_4_exit_2: [0x43, 1],
LocationName.forest_of_illusion_4_dragon: [0x43, 2],
LocationName.forest_ghost_house_exit_1: [0x41, 0],
LocationName.forest_ghost_house_exit_2: [0x41, 1],
LocationName.forest_ghost_house_dragon: [0x41, 2],
+ LocationName.forest_ghost_house_moon: [0x41, 3],
LocationName.forest_secret_exit_1: [0x46, 0],
LocationName.forest_secret_dragon: [0x46, 2],
LocationName.forest_fortress: [0x1F, 0],
@@ -427,12 +542,15 @@ location_id_to_level_id = {
LocationName.chocolate_island_1_exit_1: [0x22, 0],
LocationName.chocolate_island_1_dragon: [0x22, 2],
+ LocationName.chocolate_island_1_moon: [0x22, 3],
LocationName.chocolate_island_2_exit_1: [0x24, 0],
LocationName.chocolate_island_2_exit_2: [0x24, 1],
LocationName.chocolate_island_2_dragon: [0x24, 2],
+ LocationName.chocolate_island_2_hidden_1up: [0x24, 4],
LocationName.chocolate_island_3_exit_1: [0x23, 0],
LocationName.chocolate_island_3_exit_2: [0x23, 1],
LocationName.chocolate_island_3_dragon: [0x23, 2],
+ LocationName.chocolate_island_3_bonus_block: [0x23, 5],
LocationName.chocolate_island_4_exit_1: [0x1D, 0],
LocationName.chocolate_island_4_dragon: [0x1D, 2],
LocationName.chocolate_island_5_exit_1: [0x1C, 0],
@@ -442,6 +560,7 @@ location_id_to_level_id = {
LocationName.chocolate_fortress: [0x1B, 0],
LocationName.chocolate_reznor: [0x1B, 0],
LocationName.chocolate_castle: [0x1A, 0],
+ LocationName.chocolate_castle_hidden_1up: [0x1A, 4],
LocationName.chocolate_koopaling: [0x1A, 0],
LocationName.sunken_ghost_ship: [0x18, 0],
@@ -449,9 +568,11 @@ location_id_to_level_id = {
LocationName.valley_of_bowser_1_exit_1: [0x3A, 0],
LocationName.valley_of_bowser_1_dragon: [0x3A, 2],
+ LocationName.valley_of_bowser_1_moon: [0x3A, 3],
LocationName.valley_of_bowser_2_exit_1: [0x39, 0],
LocationName.valley_of_bowser_2_exit_2: [0x39, 1],
LocationName.valley_of_bowser_2_dragon: [0x39, 2],
+ LocationName.valley_of_bowser_2_hidden_1up: [0x39, 4],
LocationName.valley_of_bowser_3_exit_1: [0x37, 0],
LocationName.valley_of_bowser_3_dragon: [0x37, 2],
LocationName.valley_of_bowser_4_exit_1: [0x33, 0],
@@ -464,6 +585,7 @@ location_id_to_level_id = {
LocationName.valley_castle: [0x34, 0],
LocationName.valley_koopaling: [0x34, 0],
LocationName.valley_castle_dragon: [0x34, 2],
+ LocationName.valley_castle_hidden_1up: [0x34, 4],
LocationName.star_road_1_exit_1: [0x58, 0],
LocationName.star_road_1_exit_2: [0x58, 1],
@@ -479,6 +601,7 @@ location_id_to_level_id = {
LocationName.special_zone_1_exit_1: [0x4E, 0],
LocationName.special_zone_1_dragon: [0x4E, 2],
+ LocationName.special_zone_1_hidden_1up: [0x4E, 4],
LocationName.special_zone_2_exit_1: [0x4F, 0],
LocationName.special_zone_2_dragon: [0x4F, 2],
LocationName.special_zone_3_exit_1: [0x50, 0],
@@ -493,19 +616,602 @@ location_id_to_level_id = {
LocationName.special_zone_7_dragon: [0x4A, 2],
LocationName.special_zone_8_exit_1: [0x49, 0],
LocationName.special_zone_8_dragon: [0x49, 2],
+
+ LocationName.vanilla_secret_2_yoshi_block_1: [0x01, 100],
+ LocationName.vanilla_secret_2_green_block_1: [0x01, 101],
+ LocationName.vanilla_secret_2_powerup_block_1: [0x01, 102],
+ LocationName.vanilla_secret_2_powerup_block_2: [0x01, 103],
+ LocationName.vanilla_secret_2_multi_coin_block_1: [0x01, 104],
+ LocationName.vanilla_secret_2_gray_pow_block_1: [0x01, 105],
+ LocationName.vanilla_secret_2_coin_block_1: [0x01, 106],
+ LocationName.vanilla_secret_2_coin_block_2: [0x01, 107],
+ LocationName.vanilla_secret_2_coin_block_3: [0x01, 108],
+ LocationName.vanilla_secret_2_coin_block_4: [0x01, 109],
+ LocationName.vanilla_secret_2_coin_block_5: [0x01, 110],
+ LocationName.vanilla_secret_2_coin_block_6: [0x01, 111],
+ LocationName.vanilla_secret_3_powerup_block_1: [0x02, 112],
+ LocationName.vanilla_secret_3_powerup_block_2: [0x02, 113],
+ LocationName.donut_ghost_house_vine_block_1: [0x04, 114],
+ LocationName.donut_ghost_house_directional_coin_block_1: [0x04, 115],
+ LocationName.donut_ghost_house_life_block_1: [0x04, 116],
+ LocationName.donut_ghost_house_life_block_2: [0x04, 117],
+ LocationName.donut_ghost_house_life_block_3: [0x04, 118],
+ LocationName.donut_ghost_house_life_block_4: [0x04, 119],
+ LocationName.donut_plains_3_green_block_1: [0x05, 120],
+ LocationName.donut_plains_3_coin_block_1: [0x05, 121],
+ LocationName.donut_plains_3_coin_block_2: [0x05, 122],
+ LocationName.donut_plains_3_vine_block_1: [0x05, 123],
+ LocationName.donut_plains_3_powerup_block_1: [0x05, 124],
+ LocationName.donut_plains_3_bonus_block_1: [0x05, 125],
+ LocationName.donut_plains_4_coin_block_1: [0x06, 126],
+ LocationName.donut_plains_4_powerup_block_1: [0x06, 127],
+ LocationName.donut_plains_4_coin_block_2: [0x06, 128],
+ LocationName.donut_plains_4_yoshi_block_1: [0x06, 129],
+ LocationName.donut_plains_castle_yellow_block_1: [0x07, 130],
+ LocationName.donut_plains_castle_coin_block_1: [0x07, 131],
+ LocationName.donut_plains_castle_powerup_block_1: [0x07, 132],
+ LocationName.donut_plains_castle_coin_block_2: [0x07, 133],
+ LocationName.donut_plains_castle_vine_block_1: [0x07, 134],
+ LocationName.donut_plains_castle_invis_life_block_1: [0x07, 135],
+ LocationName.donut_plains_castle_coin_block_3: [0x07, 136],
+ LocationName.donut_plains_castle_coin_block_4: [0x07, 137],
+ LocationName.donut_plains_castle_coin_block_5: [0x07, 138],
+ LocationName.donut_plains_castle_green_block_1: [0x07, 139],
+ LocationName.donut_plains_2_coin_block_1: [0x09, 140],
+ LocationName.donut_plains_2_coin_block_2: [0x09, 141],
+ LocationName.donut_plains_2_coin_block_3: [0x09, 142],
+ LocationName.donut_plains_2_yellow_block_1: [0x09, 143],
+ LocationName.donut_plains_2_powerup_block_1: [0x09, 144],
+ LocationName.donut_plains_2_multi_coin_block_1: [0x09, 145],
+ LocationName.donut_plains_2_flying_block_1: [0x09, 146],
+ LocationName.donut_plains_2_green_block_1: [0x09, 147],
+ LocationName.donut_plains_2_yellow_block_2: [0x09, 148],
+ LocationName.donut_plains_2_vine_block_1: [0x09, 149],
+ LocationName.donut_secret_1_coin_block_1: [0x0A, 150],
+ LocationName.donut_secret_1_coin_block_2: [0x0A, 151],
+ LocationName.donut_secret_1_powerup_block_1: [0x0A, 152],
+ LocationName.donut_secret_1_coin_block_3: [0x0A, 153],
+ LocationName.donut_secret_1_powerup_block_2: [0x0A, 154],
+ LocationName.donut_secret_1_powerup_block_3: [0x0A, 155],
+ LocationName.donut_secret_1_life_block_1: [0x0A, 156],
+ LocationName.donut_secret_1_powerup_block_4: [0x0A, 157],
+ LocationName.donut_secret_1_powerup_block_5: [0x0A, 158],
+ LocationName.donut_secret_1_key_block_1: [0x0A, 159],
+ LocationName.vanilla_fortress_powerup_block_1: [0x0B, 160],
+ LocationName.vanilla_fortress_powerup_block_2: [0x0B, 161],
+ LocationName.vanilla_fortress_yellow_block_1: [0x0B, 162],
+ LocationName.butter_bridge_1_powerup_block_1: [0x0C, 163],
+ LocationName.butter_bridge_1_multi_coin_block_1: [0x0C, 164],
+ LocationName.butter_bridge_1_multi_coin_block_2: [0x0C, 165],
+ LocationName.butter_bridge_1_multi_coin_block_3: [0x0C, 166],
+ LocationName.butter_bridge_1_life_block_1: [0x0C, 167],
+ LocationName.butter_bridge_1_bonus_block_1: [0x0C, 168],
+ LocationName.butter_bridge_2_powerup_block_1: [0x0D, 169],
+ LocationName.butter_bridge_2_green_block_1: [0x0D, 170],
+ LocationName.butter_bridge_2_yoshi_block_1: [0x0D, 171],
+ LocationName.twin_bridges_castle_powerup_block_1: [0x0E, 172],
+ LocationName.cheese_bridge_powerup_block_1: [0x0F, 173],
+ LocationName.cheese_bridge_powerup_block_2: [0x0F, 174],
+ LocationName.cheese_bridge_wings_block_1: [0x0F, 175],
+ LocationName.cheese_bridge_powerup_block_3: [0x0F, 176],
+ LocationName.cookie_mountain_coin_block_1: [0x10, 177],
+ LocationName.cookie_mountain_coin_block_2: [0x10, 178],
+ LocationName.cookie_mountain_coin_block_3: [0x10, 179],
+ LocationName.cookie_mountain_coin_block_4: [0x10, 180],
+ LocationName.cookie_mountain_coin_block_5: [0x10, 181],
+ LocationName.cookie_mountain_coin_block_6: [0x10, 182],
+ LocationName.cookie_mountain_coin_block_7: [0x10, 183],
+ LocationName.cookie_mountain_coin_block_8: [0x10, 184],
+ LocationName.cookie_mountain_coin_block_9: [0x10, 185],
+ LocationName.cookie_mountain_powerup_block_1: [0x10, 186],
+ LocationName.cookie_mountain_life_block_1: [0x10, 187],
+ LocationName.cookie_mountain_vine_block_1: [0x10, 188],
+ LocationName.cookie_mountain_yoshi_block_1: [0x10, 189],
+ LocationName.cookie_mountain_coin_block_10: [0x10, 190],
+ LocationName.cookie_mountain_coin_block_11: [0x10, 191],
+ LocationName.cookie_mountain_powerup_block_2: [0x10, 192],
+ LocationName.cookie_mountain_coin_block_12: [0x10, 193],
+ LocationName.cookie_mountain_coin_block_13: [0x10, 194],
+ LocationName.cookie_mountain_coin_block_14: [0x10, 195],
+ LocationName.cookie_mountain_coin_block_15: [0x10, 196],
+ LocationName.cookie_mountain_coin_block_16: [0x10, 197],
+ LocationName.cookie_mountain_coin_block_17: [0x10, 198],
+ LocationName.cookie_mountain_coin_block_18: [0x10, 199],
+ LocationName.cookie_mountain_coin_block_19: [0x10, 200],
+ LocationName.cookie_mountain_coin_block_20: [0x10, 201],
+ LocationName.cookie_mountain_coin_block_21: [0x10, 202],
+ LocationName.cookie_mountain_coin_block_22: [0x10, 203],
+ LocationName.cookie_mountain_coin_block_23: [0x10, 204],
+ LocationName.cookie_mountain_coin_block_24: [0x10, 205],
+ LocationName.cookie_mountain_coin_block_25: [0x10, 206],
+ LocationName.cookie_mountain_coin_block_26: [0x10, 207],
+ LocationName.cookie_mountain_coin_block_27: [0x10, 208],
+ LocationName.cookie_mountain_coin_block_28: [0x10, 209],
+ LocationName.cookie_mountain_coin_block_29: [0x10, 210],
+ LocationName.cookie_mountain_coin_block_30: [0x10, 211],
+ LocationName.soda_lake_powerup_block_1: [0x11, 212],
+ LocationName.donut_secret_house_powerup_block_1: [0x13, 213],
+ LocationName.donut_secret_house_multi_coin_block_1: [0x13, 214],
+ LocationName.donut_secret_house_life_block_1: [0x13, 215],
+ LocationName.donut_secret_house_vine_block_1: [0x13, 216],
+ LocationName.donut_secret_house_directional_coin_block_1: [0x13, 217],
+ LocationName.donut_plains_1_coin_block_1: [0x15, 218],
+ LocationName.donut_plains_1_coin_block_2: [0x15, 219],
+ LocationName.donut_plains_1_yoshi_block_1: [0x15, 220],
+ LocationName.donut_plains_1_vine_block_1: [0x15, 221],
+ LocationName.donut_plains_1_green_block_1: [0x15, 222],
+ LocationName.donut_plains_1_green_block_2: [0x15, 223],
+ LocationName.donut_plains_1_green_block_3: [0x15, 224],
+ LocationName.donut_plains_1_green_block_4: [0x15, 225],
+ LocationName.donut_plains_1_green_block_5: [0x15, 226],
+ LocationName.donut_plains_1_green_block_6: [0x15, 227],
+ LocationName.donut_plains_1_green_block_7: [0x15, 228],
+ LocationName.donut_plains_1_green_block_8: [0x15, 229],
+ LocationName.donut_plains_1_green_block_9: [0x15, 230],
+ LocationName.donut_plains_1_green_block_10: [0x15, 231],
+ LocationName.donut_plains_1_green_block_11: [0x15, 232],
+ LocationName.donut_plains_1_green_block_12: [0x15, 233],
+ LocationName.donut_plains_1_green_block_13: [0x15, 234],
+ LocationName.donut_plains_1_green_block_14: [0x15, 235],
+ LocationName.donut_plains_1_green_block_15: [0x15, 236],
+ LocationName.donut_plains_1_green_block_16: [0x15, 237],
+ LocationName.donut_plains_1_yellow_block_1: [0x15, 238],
+ LocationName.donut_plains_1_yellow_block_2: [0x15, 239],
+ LocationName.donut_plains_1_yellow_block_3: [0x15, 240],
+ LocationName.sunken_ghost_ship_powerup_block_1: [0x18, 241],
+ LocationName.sunken_ghost_ship_star_block_1: [0x18, 242],
+ LocationName.chocolate_castle_yellow_block_1: [0x1A, 243],
+ LocationName.chocolate_castle_yellow_block_2: [0x1A, 244],
+ LocationName.chocolate_castle_green_block_1: [0x1A, 245],
+ LocationName.chocolate_fortress_powerup_block_1: [0x1B, 246],
+ LocationName.chocolate_fortress_powerup_block_2: [0x1B, 247],
+ LocationName.chocolate_fortress_coin_block_1: [0x1B, 248],
+ LocationName.chocolate_fortress_coin_block_2: [0x1B, 249],
+ LocationName.chocolate_fortress_green_block_1: [0x1B, 250],
+ LocationName.chocolate_island_5_yoshi_block_1: [0x1C, 251],
+ LocationName.chocolate_island_5_powerup_block_1: [0x1C, 252],
+ LocationName.chocolate_island_5_life_block_1: [0x1C, 253],
+ LocationName.chocolate_island_5_yellow_block_1: [0x1C, 254],
+ LocationName.chocolate_island_4_yellow_block_1: [0x1D, 255],
+ LocationName.chocolate_island_4_blue_pow_block_1: [0x1D, 256],
+ LocationName.chocolate_island_4_powerup_block_1: [0x1D, 257],
+ LocationName.forest_fortress_yellow_block_1: [0x1F, 258],
+ LocationName.forest_fortress_powerup_block_1: [0x1F, 259],
+ LocationName.forest_fortress_life_block_1: [0x1F, 260],
+ LocationName.forest_fortress_life_block_2: [0x1F, 261],
+ LocationName.forest_fortress_life_block_3: [0x1F, 262],
+ LocationName.forest_fortress_life_block_4: [0x1F, 263],
+ LocationName.forest_fortress_life_block_5: [0x1F, 264],
+ LocationName.forest_fortress_life_block_6: [0x1F, 265],
+ LocationName.forest_fortress_life_block_7: [0x1F, 266],
+ LocationName.forest_fortress_life_block_8: [0x1F, 267],
+ LocationName.forest_fortress_life_block_9: [0x1F, 268],
+ LocationName.forest_castle_green_block_1: [0x20, 269],
+ LocationName.chocolate_ghost_house_powerup_block_1: [0x21, 270],
+ LocationName.chocolate_ghost_house_powerup_block_2: [0x21, 271],
+ LocationName.chocolate_ghost_house_life_block_1: [0x21, 272],
+ LocationName.chocolate_island_1_flying_block_1: [0x22, 273],
+ LocationName.chocolate_island_1_flying_block_2: [0x22, 274],
+ LocationName.chocolate_island_1_yoshi_block_1: [0x22, 275],
+ LocationName.chocolate_island_1_green_block_1: [0x22, 276],
+ LocationName.chocolate_island_1_life_block_1: [0x22, 277],
+ LocationName.chocolate_island_3_powerup_block_1: [0x23, 278],
+ LocationName.chocolate_island_3_powerup_block_2: [0x23, 279],
+ LocationName.chocolate_island_3_powerup_block_3: [0x23, 280],
+ LocationName.chocolate_island_3_green_block_1: [0x23, 281],
+ LocationName.chocolate_island_3_bonus_block_1: [0x23, 282],
+ LocationName.chocolate_island_3_vine_block_1: [0x23, 283],
+ LocationName.chocolate_island_3_life_block_1: [0x23, 284],
+ LocationName.chocolate_island_3_life_block_2: [0x23, 285],
+ LocationName.chocolate_island_3_life_block_3: [0x23, 286],
+ LocationName.chocolate_island_2_multi_coin_block_1: [0x24, 287],
+ LocationName.chocolate_island_2_invis_coin_block_1: [0x24, 288],
+ LocationName.chocolate_island_2_yoshi_block_1: [0x24, 289],
+ LocationName.chocolate_island_2_coin_block_1: [0x24, 290],
+ LocationName.chocolate_island_2_coin_block_2: [0x24, 291],
+ LocationName.chocolate_island_2_multi_coin_block_2: [0x24, 292],
+ LocationName.chocolate_island_2_powerup_block_1: [0x24, 293],
+ LocationName.chocolate_island_2_blue_pow_block_1: [0x24, 294],
+ LocationName.chocolate_island_2_yellow_block_1: [0x24, 295],
+ LocationName.chocolate_island_2_yellow_block_2: [0x24, 296],
+ LocationName.chocolate_island_2_green_block_1: [0x24, 297],
+ LocationName.chocolate_island_2_green_block_2: [0x24, 298],
+ LocationName.chocolate_island_2_green_block_3: [0x24, 299],
+ LocationName.chocolate_island_2_green_block_4: [0x24, 300],
+ LocationName.chocolate_island_2_green_block_5: [0x24, 301],
+ LocationName.chocolate_island_2_green_block_6: [0x24, 302],
+ LocationName.yoshis_island_castle_coin_block_1: [0x25, 303],
+ LocationName.yoshis_island_castle_coin_block_2: [0x25, 304],
+ LocationName.yoshis_island_castle_powerup_block_1: [0x25, 305],
+ LocationName.yoshis_island_castle_coin_block_3: [0x25, 306],
+ LocationName.yoshis_island_castle_coin_block_4: [0x25, 307],
+ LocationName.yoshis_island_castle_flying_block_1: [0x25, 308],
+ LocationName.yoshis_island_4_yellow_block_1: [0x26, 309],
+ LocationName.yoshis_island_4_powerup_block_1: [0x26, 310],
+ LocationName.yoshis_island_4_multi_coin_block_1: [0x26, 311],
+ LocationName.yoshis_island_4_star_block_1: [0x26, 312],
+ LocationName.yoshis_island_3_yellow_block_1: [0x27, 313],
+ LocationName.yoshis_island_3_yellow_block_2: [0x27, 314],
+ LocationName.yoshis_island_3_yellow_block_3: [0x27, 315],
+ LocationName.yoshis_island_3_yellow_block_4: [0x27, 316],
+ LocationName.yoshis_island_3_yellow_block_5: [0x27, 317],
+ LocationName.yoshis_island_3_yellow_block_6: [0x27, 318],
+ LocationName.yoshis_island_3_yellow_block_7: [0x27, 319],
+ LocationName.yoshis_island_3_yellow_block_8: [0x27, 320],
+ LocationName.yoshis_island_3_yellow_block_9: [0x27, 321],
+ LocationName.yoshis_island_3_coin_block_1: [0x27, 322],
+ LocationName.yoshis_island_3_yoshi_block_1: [0x27, 323],
+ LocationName.yoshis_island_3_coin_block_2: [0x27, 324],
+ LocationName.yoshis_island_3_powerup_block_1: [0x27, 325],
+ LocationName.yoshis_island_3_yellow_block_10: [0x27, 326],
+ LocationName.yoshis_island_3_yellow_block_11: [0x27, 327],
+ LocationName.yoshis_island_3_yellow_block_12: [0x27, 328],
+ LocationName.yoshis_island_3_bonus_block_1: [0x27, 329],
+ LocationName.yoshis_island_1_flying_block_1: [0x29, 330],
+ LocationName.yoshis_island_1_yellow_block_1: [0x29, 331],
+ LocationName.yoshis_island_1_life_block_1: [0x29, 332],
+ LocationName.yoshis_island_1_powerup_block_1: [0x29, 333],
+ LocationName.yoshis_island_2_flying_block_1: [0x2A, 334],
+ LocationName.yoshis_island_2_flying_block_2: [0x2A, 335],
+ LocationName.yoshis_island_2_flying_block_3: [0x2A, 336],
+ LocationName.yoshis_island_2_flying_block_4: [0x2A, 337],
+ LocationName.yoshis_island_2_flying_block_5: [0x2A, 338],
+ LocationName.yoshis_island_2_flying_block_6: [0x2A, 339],
+ LocationName.yoshis_island_2_coin_block_1: [0x2A, 340],
+ LocationName.yoshis_island_2_yellow_block_1: [0x2A, 341],
+ LocationName.yoshis_island_2_coin_block_2: [0x2A, 342],
+ LocationName.yoshis_island_2_coin_block_3: [0x2A, 343],
+ LocationName.yoshis_island_2_yoshi_block_1: [0x2A, 344],
+ LocationName.yoshis_island_2_coin_block_4: [0x2A, 345],
+ LocationName.yoshis_island_2_yoshi_block_2: [0x2A, 346],
+ LocationName.yoshis_island_2_coin_block_5: [0x2A, 347],
+ LocationName.yoshis_island_2_vine_block_1: [0x2A, 348],
+ LocationName.yoshis_island_2_yellow_block_2: [0x2A, 349],
+ LocationName.vanilla_ghost_house_powerup_block_1: [0x2B, 350],
+ LocationName.vanilla_ghost_house_vine_block_1: [0x2B, 351],
+ LocationName.vanilla_ghost_house_powerup_block_2: [0x2B, 352],
+ LocationName.vanilla_ghost_house_multi_coin_block_1: [0x2B, 353],
+ LocationName.vanilla_ghost_house_blue_pow_block_1: [0x2B, 354],
+ LocationName.vanilla_secret_1_coin_block_1: [0x2D, 355],
+ LocationName.vanilla_secret_1_powerup_block_1: [0x2D, 356],
+ LocationName.vanilla_secret_1_multi_coin_block_1: [0x2D, 357],
+ LocationName.vanilla_secret_1_vine_block_1: [0x2D, 358],
+ LocationName.vanilla_secret_1_vine_block_2: [0x2D, 359],
+ LocationName.vanilla_secret_1_coin_block_2: [0x2D, 360],
+ LocationName.vanilla_secret_1_coin_block_3: [0x2D, 361],
+ LocationName.vanilla_secret_1_powerup_block_2: [0x2D, 362],
+ LocationName.vanilla_dome_3_coin_block_1: [0x2E, 363],
+ LocationName.vanilla_dome_3_flying_block_1: [0x2E, 364],
+ LocationName.vanilla_dome_3_flying_block_2: [0x2E, 365],
+ LocationName.vanilla_dome_3_powerup_block_1: [0x2E, 366],
+ LocationName.vanilla_dome_3_flying_block_3: [0x2E, 367],
+ LocationName.vanilla_dome_3_invis_coin_block_1: [0x2E, 368],
+ LocationName.vanilla_dome_3_powerup_block_2: [0x2E, 369],
+ LocationName.vanilla_dome_3_multi_coin_block_1: [0x2E, 370],
+ LocationName.vanilla_dome_3_powerup_block_3: [0x2E, 371],
+ LocationName.vanilla_dome_3_yoshi_block_1: [0x2E, 372],
+ LocationName.vanilla_dome_3_powerup_block_4: [0x2E, 373],
+ LocationName.vanilla_dome_3_pswitch_coin_block_1: [0x2E, 374],
+ LocationName.vanilla_dome_3_pswitch_coin_block_2: [0x2E, 375],
+ LocationName.vanilla_dome_3_pswitch_coin_block_3: [0x2E, 376],
+ LocationName.vanilla_dome_3_pswitch_coin_block_4: [0x2E, 377],
+ LocationName.vanilla_dome_3_pswitch_coin_block_5: [0x2E, 378],
+ LocationName.vanilla_dome_3_pswitch_coin_block_6: [0x2E, 379],
+ LocationName.donut_secret_2_directional_coin_block_1: [0x2F, 380],
+ LocationName.donut_secret_2_vine_block_1: [0x2F, 381],
+ LocationName.donut_secret_2_star_block_1: [0x2F, 382],
+ LocationName.donut_secret_2_powerup_block_1: [0x2F, 383],
+ LocationName.donut_secret_2_star_block_2: [0x2F, 384],
+ LocationName.valley_of_bowser_4_yellow_block_1: [0x33, 385],
+ LocationName.valley_of_bowser_4_powerup_block_1: [0x33, 386],
+ LocationName.valley_of_bowser_4_vine_block_1: [0x33, 387],
+ LocationName.valley_of_bowser_4_yoshi_block_1: [0x33, 388],
+ LocationName.valley_of_bowser_4_life_block_1: [0x33, 389],
+ LocationName.valley_of_bowser_4_powerup_block_2: [0x33, 390],
+ LocationName.valley_castle_yellow_block_1: [0x34, 391],
+ LocationName.valley_castle_yellow_block_2: [0x34, 392],
+ LocationName.valley_castle_green_block_1: [0x34, 393],
+ LocationName.valley_fortress_green_block_1: [0x35, 394],
+ LocationName.valley_fortress_yellow_block_1: [0x35, 395],
+ LocationName.valley_of_bowser_3_powerup_block_1: [0x37, 396],
+ LocationName.valley_of_bowser_3_powerup_block_2: [0x37, 397],
+ LocationName.valley_ghost_house_pswitch_coin_block_1: [0x38, 398],
+ LocationName.valley_ghost_house_multi_coin_block_1: [0x38, 399],
+ LocationName.valley_ghost_house_powerup_block_1: [0x38, 400],
+ LocationName.valley_ghost_house_directional_coin_block_1: [0x38, 401],
+ LocationName.valley_of_bowser_2_powerup_block_1: [0x39, 402],
+ LocationName.valley_of_bowser_2_yellow_block_1: [0x39, 403],
+ LocationName.valley_of_bowser_2_powerup_block_2: [0x39, 404],
+ LocationName.valley_of_bowser_2_wings_block_1: [0x39, 405],
+ LocationName.valley_of_bowser_1_green_block_1: [0x3A, 406],
+ LocationName.valley_of_bowser_1_invis_coin_block_1: [0x3A, 407],
+ LocationName.valley_of_bowser_1_invis_coin_block_2: [0x3A, 408],
+ LocationName.valley_of_bowser_1_invis_coin_block_3: [0x3A, 409],
+ LocationName.valley_of_bowser_1_yellow_block_1: [0x3A, 410],
+ LocationName.valley_of_bowser_1_yellow_block_2: [0x3A, 411],
+ LocationName.valley_of_bowser_1_yellow_block_3: [0x3A, 412],
+ LocationName.valley_of_bowser_1_yellow_block_4: [0x3A, 413],
+ LocationName.valley_of_bowser_1_vine_block_1: [0x3A, 414],
+ LocationName.chocolate_secret_powerup_block_1: [0x3B, 415],
+ LocationName.chocolate_secret_powerup_block_2: [0x3B, 416],
+ LocationName.vanilla_dome_2_coin_block_1: [0x3C, 417],
+ LocationName.vanilla_dome_2_powerup_block_1: [0x3C, 418],
+ LocationName.vanilla_dome_2_coin_block_2: [0x3C, 419],
+ LocationName.vanilla_dome_2_coin_block_3: [0x3C, 420],
+ LocationName.vanilla_dome_2_vine_block_1: [0x3C, 421],
+ LocationName.vanilla_dome_2_invis_life_block_1: [0x3C, 422],
+ LocationName.vanilla_dome_2_coin_block_4: [0x3C, 423],
+ LocationName.vanilla_dome_2_coin_block_5: [0x3C, 424],
+ LocationName.vanilla_dome_2_powerup_block_2: [0x3C, 425],
+ LocationName.vanilla_dome_2_powerup_block_3: [0x3C, 426],
+ LocationName.vanilla_dome_2_powerup_block_4: [0x3C, 427],
+ LocationName.vanilla_dome_2_powerup_block_5: [0x3C, 428],
+ LocationName.vanilla_dome_2_multi_coin_block_1: [0x3C, 429],
+ LocationName.vanilla_dome_2_multi_coin_block_2: [0x3C, 430],
+ LocationName.vanilla_dome_4_powerup_block_1: [0x3D, 431],
+ LocationName.vanilla_dome_4_powerup_block_2: [0x3D, 432],
+ LocationName.vanilla_dome_4_coin_block_1: [0x3D, 433],
+ LocationName.vanilla_dome_4_coin_block_2: [0x3D, 434],
+ LocationName.vanilla_dome_4_coin_block_3: [0x3D, 435],
+ LocationName.vanilla_dome_4_life_block_1: [0x3D, 436],
+ LocationName.vanilla_dome_4_coin_block_4: [0x3D, 437],
+ LocationName.vanilla_dome_4_coin_block_5: [0x3D, 438],
+ LocationName.vanilla_dome_4_coin_block_6: [0x3D, 439],
+ LocationName.vanilla_dome_4_coin_block_7: [0x3D, 440],
+ LocationName.vanilla_dome_4_coin_block_8: [0x3D, 441],
+ LocationName.vanilla_dome_1_flying_block_1: [0x3E, 442],
+ LocationName.vanilla_dome_1_powerup_block_1: [0x3E, 443],
+ LocationName.vanilla_dome_1_powerup_block_2: [0x3E, 444],
+ LocationName.vanilla_dome_1_coin_block_1: [0x3E, 445],
+ LocationName.vanilla_dome_1_life_block_1: [0x3E, 446],
+ LocationName.vanilla_dome_1_powerup_block_3: [0x3E, 447],
+ LocationName.vanilla_dome_1_vine_block_1: [0x3E, 448],
+ LocationName.vanilla_dome_1_star_block_1: [0x3E, 449],
+ LocationName.vanilla_dome_1_powerup_block_4: [0x3E, 450],
+ LocationName.vanilla_dome_1_coin_block_2: [0x3E, 451],
+ LocationName.vanilla_dome_castle_life_block_1: [0x40, 452],
+ LocationName.vanilla_dome_castle_life_block_2: [0x40, 453],
+ LocationName.vanilla_dome_castle_powerup_block_1: [0x40, 454],
+ LocationName.vanilla_dome_castle_life_block_3: [0x40, 455],
+ LocationName.vanilla_dome_castle_green_block_1: [0x40, 456],
+ LocationName.forest_ghost_house_coin_block_1: [0x41, 457],
+ LocationName.forest_ghost_house_powerup_block_1: [0x41, 458],
+ LocationName.forest_ghost_house_flying_block_1: [0x41, 459],
+ LocationName.forest_ghost_house_powerup_block_2: [0x41, 460],
+ LocationName.forest_ghost_house_life_block_1: [0x41, 461],
+ LocationName.forest_of_illusion_1_powerup_block_1: [0x42, 462],
+ LocationName.forest_of_illusion_1_yoshi_block_1: [0x42, 463],
+ LocationName.forest_of_illusion_1_powerup_block_2: [0x42, 464],
+ LocationName.forest_of_illusion_1_key_block_1: [0x42, 465],
+ LocationName.forest_of_illusion_1_life_block_1: [0x42, 466],
+ LocationName.forest_of_illusion_4_multi_coin_block_1: [0x43, 467],
+ LocationName.forest_of_illusion_4_coin_block_1: [0x43, 468],
+ LocationName.forest_of_illusion_4_coin_block_2: [0x43, 469],
+ LocationName.forest_of_illusion_4_coin_block_3: [0x43, 470],
+ LocationName.forest_of_illusion_4_coin_block_4: [0x43, 471],
+ LocationName.forest_of_illusion_4_powerup_block_1: [0x43, 472],
+ LocationName.forest_of_illusion_4_coin_block_5: [0x43, 473],
+ LocationName.forest_of_illusion_4_coin_block_6: [0x43, 474],
+ LocationName.forest_of_illusion_4_coin_block_7: [0x43, 475],
+ LocationName.forest_of_illusion_4_powerup_block_2: [0x43, 476],
+ LocationName.forest_of_illusion_4_coin_block_8: [0x43, 477],
+ LocationName.forest_of_illusion_4_coin_block_9: [0x43, 478],
+ LocationName.forest_of_illusion_4_coin_block_10: [0x43, 479],
+ LocationName.forest_of_illusion_2_green_block_1: [0x44, 480],
+ LocationName.forest_of_illusion_2_powerup_block_1: [0x44, 481],
+ LocationName.forest_of_illusion_2_invis_coin_block_1: [0x44, 482],
+ LocationName.forest_of_illusion_2_invis_coin_block_2: [0x44, 483],
+ LocationName.forest_of_illusion_2_invis_life_block_1: [0x44, 484],
+ LocationName.forest_of_illusion_2_invis_coin_block_3: [0x44, 485],
+ LocationName.forest_of_illusion_2_yellow_block_1: [0x44, 486],
+ LocationName.forest_secret_powerup_block_1: [0x46, 487],
+ LocationName.forest_secret_powerup_block_2: [0x46, 488],
+ LocationName.forest_secret_life_block_1: [0x46, 489],
+ LocationName.forest_of_illusion_3_yoshi_block_1: [0x47, 490],
+ LocationName.forest_of_illusion_3_coin_block_1: [0x47, 491],
+ LocationName.forest_of_illusion_3_multi_coin_block_1: [0x47, 492],
+ LocationName.forest_of_illusion_3_coin_block_2: [0x47, 493],
+ LocationName.forest_of_illusion_3_multi_coin_block_2: [0x47, 494],
+ LocationName.forest_of_illusion_3_coin_block_3: [0x47, 495],
+ LocationName.forest_of_illusion_3_coin_block_4: [0x47, 496],
+ LocationName.forest_of_illusion_3_coin_block_5: [0x47, 497],
+ LocationName.forest_of_illusion_3_coin_block_6: [0x47, 498],
+ LocationName.forest_of_illusion_3_coin_block_7: [0x47, 499],
+ LocationName.forest_of_illusion_3_coin_block_8: [0x47, 500],
+ LocationName.forest_of_illusion_3_coin_block_9: [0x47, 501],
+ LocationName.forest_of_illusion_3_coin_block_10: [0x47, 502],
+ LocationName.forest_of_illusion_3_coin_block_11: [0x47, 503],
+ LocationName.forest_of_illusion_3_coin_block_12: [0x47, 504],
+ LocationName.forest_of_illusion_3_coin_block_13: [0x47, 505],
+ LocationName.forest_of_illusion_3_coin_block_14: [0x47, 506],
+ LocationName.forest_of_illusion_3_coin_block_15: [0x47, 507],
+ LocationName.forest_of_illusion_3_coin_block_16: [0x47, 508],
+ LocationName.forest_of_illusion_3_coin_block_17: [0x47, 509],
+ LocationName.forest_of_illusion_3_coin_block_18: [0x47, 510],
+ LocationName.forest_of_illusion_3_coin_block_19: [0x47, 511],
+ LocationName.forest_of_illusion_3_coin_block_20: [0x47, 512],
+ LocationName.forest_of_illusion_3_coin_block_21: [0x47, 513],
+ LocationName.forest_of_illusion_3_coin_block_22: [0x47, 514],
+ LocationName.forest_of_illusion_3_coin_block_23: [0x47, 515],
+ LocationName.forest_of_illusion_3_coin_block_24: [0x47, 516],
+ LocationName.special_zone_8_yoshi_block_1: [0x49, 517],
+ LocationName.special_zone_8_coin_block_1: [0x49, 518],
+ LocationName.special_zone_8_coin_block_2: [0x49, 519],
+ LocationName.special_zone_8_coin_block_3: [0x49, 520],
+ LocationName.special_zone_8_coin_block_4: [0x49, 521],
+ LocationName.special_zone_8_coin_block_5: [0x49, 522],
+ LocationName.special_zone_8_blue_pow_block_1: [0x49, 523],
+ LocationName.special_zone_8_powerup_block_1: [0x49, 524],
+ LocationName.special_zone_8_star_block_1: [0x49, 525],
+ LocationName.special_zone_8_coin_block_6: [0x49, 526],
+ LocationName.special_zone_8_coin_block_7: [0x49, 527],
+ LocationName.special_zone_8_coin_block_8: [0x49, 528],
+ LocationName.special_zone_8_coin_block_9: [0x49, 529],
+ LocationName.special_zone_8_coin_block_10: [0x49, 530],
+ LocationName.special_zone_8_coin_block_11: [0x49, 531],
+ LocationName.special_zone_8_coin_block_12: [0x49, 532],
+ LocationName.special_zone_8_coin_block_13: [0x49, 533],
+ LocationName.special_zone_8_coin_block_14: [0x49, 534],
+ LocationName.special_zone_8_coin_block_15: [0x49, 535],
+ LocationName.special_zone_8_coin_block_16: [0x49, 536],
+ LocationName.special_zone_8_coin_block_17: [0x49, 537],
+ LocationName.special_zone_8_coin_block_18: [0x49, 538],
+ LocationName.special_zone_8_multi_coin_block_1: [0x49, 539],
+ LocationName.special_zone_8_coin_block_19: [0x49, 540],
+ LocationName.special_zone_8_coin_block_20: [0x49, 541],
+ LocationName.special_zone_8_coin_block_21: [0x49, 542],
+ LocationName.special_zone_8_coin_block_22: [0x49, 543],
+ LocationName.special_zone_8_coin_block_23: [0x49, 544],
+ LocationName.special_zone_8_powerup_block_2: [0x49, 545],
+ LocationName.special_zone_8_flying_block_1: [0x49, 546],
+ LocationName.special_zone_7_powerup_block_1: [0x4A, 547],
+ LocationName.special_zone_7_yoshi_block_1: [0x4A, 548],
+ LocationName.special_zone_7_coin_block_1: [0x4A, 549],
+ LocationName.special_zone_7_powerup_block_2: [0x4A, 550],
+ LocationName.special_zone_7_coin_block_2: [0x4A, 551],
+ LocationName.special_zone_6_powerup_block_1: [0x4B, 552],
+ LocationName.special_zone_6_coin_block_1: [0x4B, 553],
+ LocationName.special_zone_6_coin_block_2: [0x4B, 554],
+ LocationName.special_zone_6_yoshi_block_1: [0x4B, 555],
+ LocationName.special_zone_6_life_block_1: [0x4B, 556],
+ LocationName.special_zone_6_multi_coin_block_1: [0x4B, 557],
+ LocationName.special_zone_6_coin_block_3: [0x4B, 558],
+ LocationName.special_zone_6_coin_block_4: [0x4B, 559],
+ LocationName.special_zone_6_coin_block_5: [0x4B, 560],
+ LocationName.special_zone_6_coin_block_6: [0x4B, 561],
+ LocationName.special_zone_6_coin_block_7: [0x4B, 562],
+ LocationName.special_zone_6_coin_block_8: [0x4B, 563],
+ LocationName.special_zone_6_coin_block_9: [0x4B, 564],
+ LocationName.special_zone_6_coin_block_10: [0x4B, 565],
+ LocationName.special_zone_6_coin_block_11: [0x4B, 566],
+ LocationName.special_zone_6_coin_block_12: [0x4B, 567],
+ LocationName.special_zone_6_coin_block_13: [0x4B, 568],
+ LocationName.special_zone_6_coin_block_14: [0x4B, 569],
+ LocationName.special_zone_6_coin_block_15: [0x4B, 570],
+ LocationName.special_zone_6_coin_block_16: [0x4B, 571],
+ LocationName.special_zone_6_coin_block_17: [0x4B, 572],
+ LocationName.special_zone_6_coin_block_18: [0x4B, 573],
+ LocationName.special_zone_6_coin_block_19: [0x4B, 574],
+ LocationName.special_zone_6_coin_block_20: [0x4B, 575],
+ LocationName.special_zone_6_coin_block_21: [0x4B, 576],
+ LocationName.special_zone_6_coin_block_22: [0x4B, 577],
+ LocationName.special_zone_6_coin_block_23: [0x4B, 578],
+ LocationName.special_zone_6_coin_block_24: [0x4B, 579],
+ LocationName.special_zone_6_coin_block_25: [0x4B, 580],
+ LocationName.special_zone_6_coin_block_26: [0x4B, 581],
+ LocationName.special_zone_6_coin_block_27: [0x4B, 582],
+ LocationName.special_zone_6_coin_block_28: [0x4B, 583],
+ LocationName.special_zone_6_powerup_block_2: [0x4B, 584],
+ LocationName.special_zone_6_coin_block_29: [0x4B, 585],
+ LocationName.special_zone_6_coin_block_30: [0x4B, 586],
+ LocationName.special_zone_6_coin_block_31: [0x4B, 587],
+ LocationName.special_zone_6_coin_block_32: [0x4B, 588],
+ LocationName.special_zone_6_coin_block_33: [0x4B, 589],
+ LocationName.special_zone_5_yoshi_block_1: [0x4C, 590],
+ LocationName.special_zone_1_vine_block_1: [0x4E, 591],
+ LocationName.special_zone_1_vine_block_2: [0x4E, 592],
+ LocationName.special_zone_1_vine_block_3: [0x4E, 593],
+ LocationName.special_zone_1_vine_block_4: [0x4E, 594],
+ LocationName.special_zone_1_life_block_1: [0x4E, 595],
+ LocationName.special_zone_1_vine_block_5: [0x4E, 596],
+ LocationName.special_zone_1_blue_pow_block_1: [0x4E, 597],
+ LocationName.special_zone_1_vine_block_6: [0x4E, 598],
+ LocationName.special_zone_1_powerup_block_1: [0x4E, 599],
+ LocationName.special_zone_1_pswitch_coin_block_1: [0x4E, 600],
+ LocationName.special_zone_1_pswitch_coin_block_2: [0x4E, 601],
+ LocationName.special_zone_1_pswitch_coin_block_3: [0x4E, 602],
+ LocationName.special_zone_1_pswitch_coin_block_4: [0x4E, 603],
+ LocationName.special_zone_1_pswitch_coin_block_5: [0x4E, 604],
+ LocationName.special_zone_1_pswitch_coin_block_6: [0x4E, 605],
+ LocationName.special_zone_1_pswitch_coin_block_7: [0x4E, 606],
+ LocationName.special_zone_1_pswitch_coin_block_8: [0x4E, 607],
+ LocationName.special_zone_1_pswitch_coin_block_9: [0x4E, 608],
+ LocationName.special_zone_1_pswitch_coin_block_10: [0x4E, 609],
+ LocationName.special_zone_1_pswitch_coin_block_11: [0x4E, 610],
+ LocationName.special_zone_1_pswitch_coin_block_12: [0x4E, 611],
+ LocationName.special_zone_1_pswitch_coin_block_13: [0x4E, 612],
+ LocationName.special_zone_2_powerup_block_1: [0x4F, 613],
+ LocationName.special_zone_2_coin_block_1: [0x4F, 614],
+ LocationName.special_zone_2_coin_block_2: [0x4F, 615],
+ LocationName.special_zone_2_powerup_block_2: [0x4F, 616],
+ LocationName.special_zone_2_coin_block_3: [0x4F, 617],
+ LocationName.special_zone_2_coin_block_4: [0x4F, 618],
+ LocationName.special_zone_2_powerup_block_3: [0x4F, 619],
+ LocationName.special_zone_2_multi_coin_block_1: [0x4F, 620],
+ LocationName.special_zone_2_coin_block_5: [0x4F, 621],
+ LocationName.special_zone_2_coin_block_6: [0x4F, 622],
+ LocationName.special_zone_3_powerup_block_1: [0x50, 623],
+ LocationName.special_zone_3_yoshi_block_1: [0x50, 624],
+ LocationName.special_zone_3_wings_block_1: [0x50, 625],
+ LocationName.special_zone_4_powerup_block_1: [0x51, 626],
+ LocationName.special_zone_4_star_block_1: [0x51, 627],
+ LocationName.star_road_2_star_block_1: [0x54, 628],
+ LocationName.star_road_3_key_block_1: [0x56, 629],
+ LocationName.star_road_4_powerup_block_1: [0x59, 630],
+ LocationName.star_road_4_green_block_1: [0x59, 631],
+ LocationName.star_road_4_green_block_2: [0x59, 632],
+ LocationName.star_road_4_green_block_3: [0x59, 633],
+ LocationName.star_road_4_green_block_4: [0x59, 634],
+ LocationName.star_road_4_green_block_5: [0x59, 635],
+ LocationName.star_road_4_green_block_6: [0x59, 636],
+ LocationName.star_road_4_green_block_7: [0x59, 637],
+ LocationName.star_road_4_key_block_1: [0x59, 638],
+ LocationName.star_road_5_directional_coin_block_1: [0x5A, 639],
+ LocationName.star_road_5_life_block_1: [0x5A, 640],
+ LocationName.star_road_5_vine_block_1: [0x5A, 641],
+ LocationName.star_road_5_yellow_block_1: [0x5A, 642],
+ LocationName.star_road_5_yellow_block_2: [0x5A, 643],
+ LocationName.star_road_5_yellow_block_3: [0x5A, 644],
+ LocationName.star_road_5_yellow_block_4: [0x5A, 645],
+ LocationName.star_road_5_yellow_block_5: [0x5A, 646],
+ LocationName.star_road_5_yellow_block_6: [0x5A, 647],
+ LocationName.star_road_5_yellow_block_7: [0x5A, 648],
+ LocationName.star_road_5_yellow_block_8: [0x5A, 649],
+ LocationName.star_road_5_yellow_block_9: [0x5A, 650],
+ LocationName.star_road_5_yellow_block_10: [0x5A, 651],
+ LocationName.star_road_5_yellow_block_11: [0x5A, 652],
+ LocationName.star_road_5_yellow_block_12: [0x5A, 653],
+ LocationName.star_road_5_yellow_block_13: [0x5A, 654],
+ LocationName.star_road_5_yellow_block_14: [0x5A, 655],
+ LocationName.star_road_5_yellow_block_15: [0x5A, 656],
+ LocationName.star_road_5_yellow_block_16: [0x5A, 657],
+ LocationName.star_road_5_yellow_block_17: [0x5A, 658],
+ LocationName.star_road_5_yellow_block_18: [0x5A, 659],
+ LocationName.star_road_5_yellow_block_19: [0x5A, 660],
+ LocationName.star_road_5_yellow_block_20: [0x5A, 661],
+ LocationName.star_road_5_green_block_1: [0x5A, 662],
+ LocationName.star_road_5_green_block_2: [0x5A, 663],
+ LocationName.star_road_5_green_block_3: [0x5A, 664],
+ LocationName.star_road_5_green_block_4: [0x5A, 665],
+ LocationName.star_road_5_green_block_5: [0x5A, 666],
+ LocationName.star_road_5_green_block_6: [0x5A, 667],
+ LocationName.star_road_5_green_block_7: [0x5A, 668],
+ LocationName.star_road_5_green_block_8: [0x5A, 669],
+ LocationName.star_road_5_green_block_9: [0x5A, 670],
+ LocationName.star_road_5_green_block_10: [0x5A, 671],
+ LocationName.star_road_5_green_block_11: [0x5A, 672],
+ LocationName.star_road_5_green_block_12: [0x5A, 673],
+ LocationName.star_road_5_green_block_13: [0x5A, 674],
+ LocationName.star_road_5_green_block_14: [0x5A, 675],
+ LocationName.star_road_5_green_block_15: [0x5A, 676],
+ LocationName.star_road_5_green_block_16: [0x5A, 677],
+ LocationName.star_road_5_green_block_17: [0x5A, 678],
+ LocationName.star_road_5_green_block_18: [0x5A, 679],
+ LocationName.star_road_5_green_block_19: [0x5A, 680],
+ LocationName.star_road_5_green_block_20: [0x5A, 681]
}
-def generate_level_list(world, player):
+def generate_level_list(world: World):
- if not world.level_shuffle[player]:
+ if not world.options.level_shuffle:
out_level_list = full_level_list.copy()
out_level_list[0x00] = 0x03
out_level_list[0x11] = 0x28
- if world.bowser_castle_doors[player] == "fast":
+ if world.options.bowser_castle_doors == "fast":
out_level_list[0x41] = 0x82
out_level_list[0x42] = 0x32
- elif world.bowser_castle_doors[player] == "slow":
+ elif world.options.bowser_castle_doors == "slow":
out_level_list[0x41] = 0x31
out_level_list[0x42] = 0x81
@@ -552,7 +1258,7 @@ def generate_level_list(world, player):
shuffled_level_list.append(0x16)
single_levels_copy = (easy_single_levels_copy.copy() + hard_single_levels_copy.copy())
- if not world.exclude_special_zone[player]:
+ if not world.options.exclude_special_zone:
single_levels_copy.extend(special_zone_levels_copy)
world.random.shuffle(single_levels_copy)
@@ -619,10 +1325,10 @@ def generate_level_list(world, player):
shuffled_level_list.append(castle_fortress_levels_copy.pop(0))
# Front/Back Door
- if world.bowser_castle_doors[player] == "fast":
+ if world.options.bowser_castle_doors == "fast":
shuffled_level_list.append(0x82)
shuffled_level_list.append(0x32)
- elif world.bowser_castle_doors[player] == "slow":
+ elif world.options.bowser_castle_doors == "slow":
shuffled_level_list.append(0x31)
shuffled_level_list.append(0x81)
else:
@@ -646,7 +1352,7 @@ def generate_level_list(world, player):
# Special Zone
shuffled_level_list.append(0x4D)
- if not world.exclude_special_zone[player]:
+ if not world.options.exclude_special_zone:
shuffled_level_list.append(single_levels_copy.pop(0))
shuffled_level_list.append(single_levels_copy.pop(0))
shuffled_level_list.append(single_levels_copy.pop(0))
diff --git a/worlds/smw/Locations.py b/worlds/smw/Locations.py
index a8b7f7a4ec..47e821fc61 100644
--- a/worlds/smw/Locations.py
+++ b/worlds/smw/Locations.py
@@ -1,9 +1,9 @@
import typing
from BaseClasses import Location
+from worlds.AutoWorld import World
from .Names import LocationName
-
class SMWLocation(Location):
game: str = "Super Mario World"
@@ -197,6 +197,624 @@ dragon_coin_location_table = {
LocationName.special_zone_8_dragon: 0xBC0162,
}
+moon_location_table = {
+ LocationName.yoshis_island_1_moon: 0xBC0300,
+ LocationName.donut_plains_4_moon: 0xBC030B,
+ LocationName.vanilla_dome_3_moon: 0xBC0318,
+ LocationName.cheese_bridge_moon: 0xBC0325,
+ LocationName.forest_ghost_house_moon: 0xBC0332,
+ LocationName.chocolate_island_1_moon: 0xBC0338,
+ LocationName.valley_of_bowser_1_moon: 0xBC0345
+}
+
+hidden_1ups_location_table = {
+ LocationName.yoshis_island_4_hidden_1up: 0xBC0403,
+ LocationName.donut_plains_1_hidden_1up: 0xBC0406,
+ LocationName.donut_plains_4_hidden_1up: 0xBC040B,
+ LocationName.donut_plains_castle_hidden_1up: 0xBC0412,
+ LocationName.vanilla_dome_4_hidden_1up: 0xBC0419,
+ LocationName.vanilla_ghost_house_hidden_1up: 0xBC041E,
+ LocationName.vanilla_fortress_hidden_1up: 0xBC0420,
+ LocationName.cookie_mountain_hidden_1up: 0xBC0427,
+ LocationName.forest_of_illusion_3_hidden_1up: 0xBC042E,
+ LocationName.chocolate_island_2_hidden_1up: 0xBC0439,
+ LocationName.chocolate_castle_hidden_1up: 0xBC0443,
+ LocationName.valley_of_bowser_2_hidden_1up: 0xBC0446,
+ LocationName.valley_castle_hidden_1up: 0xBC044F,
+ LocationName.special_zone_1_hidden_1up: 0xBC045B
+}
+bonus_block_location_table = {
+ LocationName.yoshis_island_3_bonus_block: 0xBC0502,
+ LocationName.donut_plains_3_bonus_block: 0xBC050A,
+ LocationName.butter_bridge_1_bonus_block: 0xBC0523,
+ LocationName.chocolate_island_3_bonus_block: 0xBC053B
+}
+
+blocksanity_location_table = {
+ LocationName.vanilla_secret_2_yoshi_block_1: 0xBC0600,
+ LocationName.vanilla_secret_2_green_block_1: 0xBC0601,
+ LocationName.vanilla_secret_2_powerup_block_1: 0xBC0602,
+ LocationName.vanilla_secret_2_powerup_block_2: 0xBC0603,
+ LocationName.vanilla_secret_2_multi_coin_block_1: 0xBC0604,
+ LocationName.vanilla_secret_2_gray_pow_block_1: 0xBC0605,
+ LocationName.vanilla_secret_2_coin_block_1: 0xBC0606,
+ LocationName.vanilla_secret_2_coin_block_2: 0xBC0607,
+ LocationName.vanilla_secret_2_coin_block_3: 0xBC0608,
+ LocationName.vanilla_secret_2_coin_block_4: 0xBC0609,
+ LocationName.vanilla_secret_2_coin_block_5: 0xBC060A,
+ LocationName.vanilla_secret_2_coin_block_6: 0xBC060B,
+ LocationName.vanilla_secret_3_powerup_block_1: 0xBC060C,
+ LocationName.vanilla_secret_3_powerup_block_2: 0xBC060D,
+ LocationName.donut_ghost_house_vine_block_1: 0xBC060E,
+ LocationName.donut_ghost_house_directional_coin_block_1: 0xBC060F,
+ LocationName.donut_ghost_house_life_block_1: 0xBC0610,
+ LocationName.donut_ghost_house_life_block_2: 0xBC0611,
+ LocationName.donut_ghost_house_life_block_3: 0xBC0612,
+ LocationName.donut_ghost_house_life_block_4: 0xBC0613,
+ LocationName.donut_plains_3_green_block_1: 0xBC0614,
+ LocationName.donut_plains_3_coin_block_1: 0xBC0615,
+ LocationName.donut_plains_3_coin_block_2: 0xBC0616,
+ LocationName.donut_plains_3_vine_block_1: 0xBC0617,
+ LocationName.donut_plains_3_powerup_block_1: 0xBC0618,
+ LocationName.donut_plains_3_bonus_block_1: 0xBC0619,
+ LocationName.donut_plains_4_coin_block_1: 0xBC061A,
+ LocationName.donut_plains_4_powerup_block_1: 0xBC061B,
+ LocationName.donut_plains_4_coin_block_2: 0xBC061C,
+ LocationName.donut_plains_4_yoshi_block_1: 0xBC061D,
+ LocationName.donut_plains_castle_yellow_block_1: 0xBC061E,
+ LocationName.donut_plains_castle_coin_block_1: 0xBC061F,
+ LocationName.donut_plains_castle_powerup_block_1: 0xBC0620,
+ LocationName.donut_plains_castle_coin_block_2: 0xBC0621,
+ LocationName.donut_plains_castle_vine_block_1: 0xBC0622,
+ LocationName.donut_plains_castle_invis_life_block_1: 0xBC0623,
+ LocationName.donut_plains_castle_coin_block_3: 0xBC0624,
+ LocationName.donut_plains_castle_coin_block_4: 0xBC0625,
+ LocationName.donut_plains_castle_coin_block_5: 0xBC0626,
+ LocationName.donut_plains_castle_green_block_1: 0xBC0627,
+ LocationName.donut_plains_2_coin_block_1: 0xBC0628,
+ LocationName.donut_plains_2_coin_block_2: 0xBC0629,
+ LocationName.donut_plains_2_coin_block_3: 0xBC062A,
+ LocationName.donut_plains_2_yellow_block_1: 0xBC062B,
+ LocationName.donut_plains_2_powerup_block_1: 0xBC062C,
+ LocationName.donut_plains_2_multi_coin_block_1: 0xBC062D,
+ LocationName.donut_plains_2_flying_block_1: 0xBC062E,
+ LocationName.donut_plains_2_green_block_1: 0xBC062F,
+ LocationName.donut_plains_2_yellow_block_2: 0xBC0630,
+ LocationName.donut_plains_2_vine_block_1: 0xBC0631,
+ LocationName.donut_secret_1_coin_block_1: 0xBC0632,
+ LocationName.donut_secret_1_coin_block_2: 0xBC0633,
+ LocationName.donut_secret_1_powerup_block_1: 0xBC0634,
+ LocationName.donut_secret_1_coin_block_3: 0xBC0635,
+ LocationName.donut_secret_1_powerup_block_2: 0xBC0636,
+ LocationName.donut_secret_1_powerup_block_3: 0xBC0637,
+ LocationName.donut_secret_1_life_block_1: 0xBC0638,
+ LocationName.donut_secret_1_powerup_block_4: 0xBC0639,
+ LocationName.donut_secret_1_powerup_block_5: 0xBC063A,
+ LocationName.donut_secret_1_key_block_1: 0xBC063B,
+ LocationName.vanilla_fortress_powerup_block_1: 0xBC063C,
+ LocationName.vanilla_fortress_powerup_block_2: 0xBC063D,
+ LocationName.vanilla_fortress_yellow_block_1: 0xBC063E,
+ LocationName.butter_bridge_1_powerup_block_1: 0xBC063F,
+ LocationName.butter_bridge_1_multi_coin_block_1: 0xBC0640,
+ LocationName.butter_bridge_1_multi_coin_block_2: 0xBC0641,
+ LocationName.butter_bridge_1_multi_coin_block_3: 0xBC0642,
+ LocationName.butter_bridge_1_life_block_1: 0xBC0643,
+ LocationName.butter_bridge_1_bonus_block_1: 0xBC0644,
+ LocationName.butter_bridge_2_powerup_block_1: 0xBC0645,
+ LocationName.butter_bridge_2_green_block_1: 0xBC0646,
+ LocationName.butter_bridge_2_yoshi_block_1: 0xBC0647,
+ LocationName.twin_bridges_castle_powerup_block_1: 0xBC0648,
+ LocationName.cheese_bridge_powerup_block_1: 0xBC0649,
+ LocationName.cheese_bridge_powerup_block_2: 0xBC064A,
+ LocationName.cheese_bridge_wings_block_1: 0xBC064B,
+ LocationName.cheese_bridge_powerup_block_3: 0xBC064C,
+ LocationName.cookie_mountain_coin_block_1: 0xBC064D,
+ LocationName.cookie_mountain_coin_block_2: 0xBC064E,
+ LocationName.cookie_mountain_coin_block_3: 0xBC064F,
+ LocationName.cookie_mountain_coin_block_4: 0xBC0650,
+ LocationName.cookie_mountain_coin_block_5: 0xBC0651,
+ LocationName.cookie_mountain_coin_block_6: 0xBC0652,
+ LocationName.cookie_mountain_coin_block_7: 0xBC0653,
+ LocationName.cookie_mountain_coin_block_8: 0xBC0654,
+ LocationName.cookie_mountain_coin_block_9: 0xBC0655,
+ LocationName.cookie_mountain_powerup_block_1: 0xBC0656,
+ LocationName.cookie_mountain_life_block_1: 0xBC0657,
+ LocationName.cookie_mountain_vine_block_1: 0xBC0658,
+ LocationName.cookie_mountain_yoshi_block_1: 0xBC0659,
+ LocationName.cookie_mountain_coin_block_10: 0xBC065A,
+ LocationName.cookie_mountain_coin_block_11: 0xBC065B,
+ LocationName.cookie_mountain_powerup_block_2: 0xBC065C,
+ LocationName.cookie_mountain_coin_block_12: 0xBC065D,
+ LocationName.cookie_mountain_coin_block_13: 0xBC065E,
+ LocationName.cookie_mountain_coin_block_14: 0xBC065F,
+ LocationName.cookie_mountain_coin_block_15: 0xBC0660,
+ LocationName.cookie_mountain_coin_block_16: 0xBC0661,
+ LocationName.cookie_mountain_coin_block_17: 0xBC0662,
+ LocationName.cookie_mountain_coin_block_18: 0xBC0663,
+ LocationName.cookie_mountain_coin_block_19: 0xBC0664,
+ LocationName.cookie_mountain_coin_block_20: 0xBC0665,
+ LocationName.cookie_mountain_coin_block_21: 0xBC0666,
+ LocationName.cookie_mountain_coin_block_22: 0xBC0667,
+ LocationName.cookie_mountain_coin_block_23: 0xBC0668,
+ LocationName.cookie_mountain_coin_block_24: 0xBC0669,
+ LocationName.cookie_mountain_coin_block_25: 0xBC066A,
+ LocationName.cookie_mountain_coin_block_26: 0xBC066B,
+ LocationName.cookie_mountain_coin_block_27: 0xBC066C,
+ LocationName.cookie_mountain_coin_block_28: 0xBC066D,
+ LocationName.cookie_mountain_coin_block_29: 0xBC066E,
+ LocationName.cookie_mountain_coin_block_30: 0xBC066F,
+ LocationName.soda_lake_powerup_block_1: 0xBC0670,
+ LocationName.donut_secret_house_powerup_block_1: 0xBC0671,
+ LocationName.donut_secret_house_multi_coin_block_1: 0xBC0672,
+ LocationName.donut_secret_house_life_block_1: 0xBC0673,
+ LocationName.donut_secret_house_vine_block_1: 0xBC0674,
+ LocationName.donut_secret_house_directional_coin_block_1: 0xBC0675,
+ LocationName.donut_plains_1_coin_block_1: 0xBC0676,
+ LocationName.donut_plains_1_coin_block_2: 0xBC0677,
+ LocationName.donut_plains_1_yoshi_block_1: 0xBC0678,
+ LocationName.donut_plains_1_vine_block_1: 0xBC0679,
+ LocationName.donut_plains_1_green_block_1: 0xBC067A,
+ LocationName.donut_plains_1_green_block_2: 0xBC067B,
+ LocationName.donut_plains_1_green_block_3: 0xBC067C,
+ LocationName.donut_plains_1_green_block_4: 0xBC067D,
+ LocationName.donut_plains_1_green_block_5: 0xBC067E,
+ LocationName.donut_plains_1_green_block_6: 0xBC067F,
+ LocationName.donut_plains_1_green_block_7: 0xBC0680,
+ LocationName.donut_plains_1_green_block_8: 0xBC0681,
+ LocationName.donut_plains_1_green_block_9: 0xBC0682,
+ LocationName.donut_plains_1_green_block_10: 0xBC0683,
+ LocationName.donut_plains_1_green_block_11: 0xBC0684,
+ LocationName.donut_plains_1_green_block_12: 0xBC0685,
+ LocationName.donut_plains_1_green_block_13: 0xBC0686,
+ LocationName.donut_plains_1_green_block_14: 0xBC0687,
+ LocationName.donut_plains_1_green_block_15: 0xBC0688,
+ LocationName.donut_plains_1_green_block_16: 0xBC0689,
+ LocationName.donut_plains_1_yellow_block_1: 0xBC068A,
+ LocationName.donut_plains_1_yellow_block_2: 0xBC068B,
+ LocationName.donut_plains_1_yellow_block_3: 0xBC068C,
+ LocationName.sunken_ghost_ship_powerup_block_1: 0xBC068D,
+ LocationName.sunken_ghost_ship_star_block_1: 0xBC068E,
+ LocationName.chocolate_castle_yellow_block_1: 0xBC068F,
+ LocationName.chocolate_castle_yellow_block_2: 0xBC0690,
+ LocationName.chocolate_castle_green_block_1: 0xBC0691,
+ LocationName.chocolate_fortress_powerup_block_1: 0xBC0692,
+ LocationName.chocolate_fortress_powerup_block_2: 0xBC0693,
+ LocationName.chocolate_fortress_coin_block_1: 0xBC0694,
+ LocationName.chocolate_fortress_coin_block_2: 0xBC0695,
+ LocationName.chocolate_fortress_green_block_1: 0xBC0696,
+ LocationName.chocolate_island_5_yoshi_block_1: 0xBC0697,
+ LocationName.chocolate_island_5_powerup_block_1: 0xBC0698,
+ LocationName.chocolate_island_5_life_block_1: 0xBC0699,
+ LocationName.chocolate_island_5_yellow_block_1: 0xBC069A,
+ LocationName.chocolate_island_4_yellow_block_1: 0xBC069B,
+ LocationName.chocolate_island_4_blue_pow_block_1: 0xBC069C,
+ LocationName.chocolate_island_4_powerup_block_1: 0xBC069D,
+ LocationName.forest_fortress_yellow_block_1: 0xBC069E,
+ LocationName.forest_fortress_powerup_block_1: 0xBC069F,
+ LocationName.forest_fortress_life_block_1: 0xBC06A0,
+ LocationName.forest_fortress_life_block_2: 0xBC06A1,
+ LocationName.forest_fortress_life_block_3: 0xBC06A2,
+ LocationName.forest_fortress_life_block_4: 0xBC06A3,
+ LocationName.forest_fortress_life_block_5: 0xBC06A4,
+ LocationName.forest_fortress_life_block_6: 0xBC06A5,
+ LocationName.forest_fortress_life_block_7: 0xBC06A6,
+ LocationName.forest_fortress_life_block_8: 0xBC06A7,
+ LocationName.forest_fortress_life_block_9: 0xBC06A8,
+ LocationName.forest_castle_green_block_1: 0xBC06A9,
+ LocationName.chocolate_ghost_house_powerup_block_1: 0xBC06AA,
+ LocationName.chocolate_ghost_house_powerup_block_2: 0xBC06AB,
+ LocationName.chocolate_ghost_house_life_block_1: 0xBC06AC,
+ LocationName.chocolate_island_1_flying_block_1: 0xBC06AD,
+ LocationName.chocolate_island_1_flying_block_2: 0xBC06AE,
+ LocationName.chocolate_island_1_yoshi_block_1: 0xBC06AF,
+ LocationName.chocolate_island_1_green_block_1: 0xBC06B0,
+ LocationName.chocolate_island_1_life_block_1: 0xBC06B1,
+ LocationName.chocolate_island_3_powerup_block_1: 0xBC06B2,
+ LocationName.chocolate_island_3_powerup_block_2: 0xBC06B3,
+ LocationName.chocolate_island_3_powerup_block_3: 0xBC06B4,
+ LocationName.chocolate_island_3_green_block_1: 0xBC06B5,
+ LocationName.chocolate_island_3_bonus_block_1: 0xBC06B6,
+ LocationName.chocolate_island_3_vine_block_1: 0xBC06B7,
+ LocationName.chocolate_island_3_life_block_1: 0xBC06B8,
+ LocationName.chocolate_island_3_life_block_2: 0xBC06B9,
+ LocationName.chocolate_island_3_life_block_3: 0xBC06BA,
+ LocationName.chocolate_island_2_multi_coin_block_1: 0xBC06BB,
+ LocationName.chocolate_island_2_invis_coin_block_1: 0xBC06BC,
+ LocationName.chocolate_island_2_yoshi_block_1: 0xBC06BD,
+ LocationName.chocolate_island_2_coin_block_1: 0xBC06BE,
+ LocationName.chocolate_island_2_coin_block_2: 0xBC06BF,
+ LocationName.chocolate_island_2_multi_coin_block_2: 0xBC06C0,
+ LocationName.chocolate_island_2_powerup_block_1: 0xBC06C1,
+ LocationName.chocolate_island_2_blue_pow_block_1: 0xBC06C2,
+ LocationName.chocolate_island_2_yellow_block_1: 0xBC06C3,
+ LocationName.chocolate_island_2_yellow_block_2: 0xBC06C4,
+ LocationName.chocolate_island_2_green_block_1: 0xBC06C5,
+ LocationName.chocolate_island_2_green_block_2: 0xBC06C6,
+ LocationName.chocolate_island_2_green_block_3: 0xBC06C7,
+ LocationName.chocolate_island_2_green_block_4: 0xBC06C8,
+ LocationName.chocolate_island_2_green_block_5: 0xBC06C9,
+ LocationName.chocolate_island_2_green_block_6: 0xBC06CA,
+ LocationName.yoshis_island_castle_coin_block_1: 0xBC06CB,
+ LocationName.yoshis_island_castle_coin_block_2: 0xBC06CC,
+ LocationName.yoshis_island_castle_powerup_block_1: 0xBC06CD,
+ LocationName.yoshis_island_castle_coin_block_3: 0xBC06CE,
+ LocationName.yoshis_island_castle_coin_block_4: 0xBC06CF,
+ LocationName.yoshis_island_castle_flying_block_1: 0xBC06D0,
+ LocationName.yoshis_island_4_yellow_block_1: 0xBC06D1,
+ LocationName.yoshis_island_4_powerup_block_1: 0xBC06D2,
+ LocationName.yoshis_island_4_multi_coin_block_1: 0xBC06D3,
+ LocationName.yoshis_island_4_star_block_1: 0xBC06D4,
+ LocationName.yoshis_island_3_yellow_block_1: 0xBC06D5,
+ LocationName.yoshis_island_3_yellow_block_2: 0xBC06D6,
+ LocationName.yoshis_island_3_yellow_block_3: 0xBC06D7,
+ LocationName.yoshis_island_3_yellow_block_4: 0xBC06D8,
+ LocationName.yoshis_island_3_yellow_block_5: 0xBC06D9,
+ LocationName.yoshis_island_3_yellow_block_6: 0xBC06DA,
+ LocationName.yoshis_island_3_yellow_block_7: 0xBC06DB,
+ LocationName.yoshis_island_3_yellow_block_8: 0xBC06DC,
+ LocationName.yoshis_island_3_yellow_block_9: 0xBC06DD,
+ LocationName.yoshis_island_3_coin_block_1: 0xBC06DE,
+ LocationName.yoshis_island_3_yoshi_block_1: 0xBC06DF,
+ LocationName.yoshis_island_3_coin_block_2: 0xBC06E0,
+ LocationName.yoshis_island_3_powerup_block_1: 0xBC06E1,
+ LocationName.yoshis_island_3_yellow_block_10: 0xBC06E2,
+ LocationName.yoshis_island_3_yellow_block_11: 0xBC06E3,
+ LocationName.yoshis_island_3_yellow_block_12: 0xBC06E4,
+ LocationName.yoshis_island_3_bonus_block_1: 0xBC06E5,
+ LocationName.yoshis_island_1_flying_block_1: 0xBC06E6,
+ LocationName.yoshis_island_1_yellow_block_1: 0xBC06E7,
+ LocationName.yoshis_island_1_life_block_1: 0xBC06E8,
+ LocationName.yoshis_island_1_powerup_block_1: 0xBC06E9,
+ LocationName.yoshis_island_2_flying_block_1: 0xBC06EA,
+ LocationName.yoshis_island_2_flying_block_2: 0xBC06EB,
+ LocationName.yoshis_island_2_flying_block_3: 0xBC06EC,
+ LocationName.yoshis_island_2_flying_block_4: 0xBC06ED,
+ LocationName.yoshis_island_2_flying_block_5: 0xBC06EE,
+ LocationName.yoshis_island_2_flying_block_6: 0xBC06EF,
+ LocationName.yoshis_island_2_coin_block_1: 0xBC06F0,
+ LocationName.yoshis_island_2_yellow_block_1: 0xBC06F1,
+ LocationName.yoshis_island_2_coin_block_2: 0xBC06F2,
+ LocationName.yoshis_island_2_coin_block_3: 0xBC06F3,
+ LocationName.yoshis_island_2_yoshi_block_1: 0xBC06F4,
+ LocationName.yoshis_island_2_coin_block_4: 0xBC06F5,
+ LocationName.yoshis_island_2_yoshi_block_2: 0xBC06F6,
+ LocationName.yoshis_island_2_coin_block_5: 0xBC06F7,
+ LocationName.yoshis_island_2_vine_block_1: 0xBC06F8,
+ LocationName.yoshis_island_2_yellow_block_2: 0xBC06F9,
+ LocationName.vanilla_ghost_house_powerup_block_1: 0xBC06FA,
+ LocationName.vanilla_ghost_house_vine_block_1: 0xBC06FB,
+ LocationName.vanilla_ghost_house_powerup_block_2: 0xBC06FC,
+ LocationName.vanilla_ghost_house_multi_coin_block_1: 0xBC06FD,
+ LocationName.vanilla_ghost_house_blue_pow_block_1: 0xBC06FE,
+ LocationName.vanilla_secret_1_coin_block_1: 0xBC06FF,
+ LocationName.vanilla_secret_1_powerup_block_1: 0xBC0700,
+ LocationName.vanilla_secret_1_multi_coin_block_1: 0xBC0701,
+ LocationName.vanilla_secret_1_vine_block_1: 0xBC0702,
+ LocationName.vanilla_secret_1_vine_block_2: 0xBC0703,
+ LocationName.vanilla_secret_1_coin_block_2: 0xBC0704,
+ LocationName.vanilla_secret_1_coin_block_3: 0xBC0705,
+ LocationName.vanilla_secret_1_powerup_block_2: 0xBC0706,
+ LocationName.vanilla_dome_3_coin_block_1: 0xBC0707,
+ LocationName.vanilla_dome_3_flying_block_1: 0xBC0708,
+ LocationName.vanilla_dome_3_flying_block_2: 0xBC0709,
+ LocationName.vanilla_dome_3_powerup_block_1: 0xBC070A,
+ LocationName.vanilla_dome_3_flying_block_3: 0xBC070B,
+ LocationName.vanilla_dome_3_invis_coin_block_1: 0xBC070C,
+ LocationName.vanilla_dome_3_powerup_block_2: 0xBC070D,
+ LocationName.vanilla_dome_3_multi_coin_block_1: 0xBC070E,
+ LocationName.vanilla_dome_3_powerup_block_3: 0xBC070F,
+ LocationName.vanilla_dome_3_yoshi_block_1: 0xBC0710,
+ LocationName.vanilla_dome_3_powerup_block_4: 0xBC0711,
+ LocationName.vanilla_dome_3_pswitch_coin_block_1: 0xBC0712,
+ LocationName.vanilla_dome_3_pswitch_coin_block_2: 0xBC0713,
+ LocationName.vanilla_dome_3_pswitch_coin_block_3: 0xBC0714,
+ LocationName.vanilla_dome_3_pswitch_coin_block_4: 0xBC0715,
+ LocationName.vanilla_dome_3_pswitch_coin_block_5: 0xBC0716,
+ LocationName.vanilla_dome_3_pswitch_coin_block_6: 0xBC0717,
+ LocationName.donut_secret_2_directional_coin_block_1: 0xBC0718,
+ LocationName.donut_secret_2_vine_block_1: 0xBC0719,
+ LocationName.donut_secret_2_star_block_1: 0xBC071A,
+ LocationName.donut_secret_2_powerup_block_1: 0xBC071B,
+ LocationName.donut_secret_2_star_block_2: 0xBC071C,
+ LocationName.valley_of_bowser_4_yellow_block_1: 0xBC071D,
+ LocationName.valley_of_bowser_4_powerup_block_1: 0xBC071E,
+ LocationName.valley_of_bowser_4_vine_block_1: 0xBC071F,
+ LocationName.valley_of_bowser_4_yoshi_block_1: 0xBC0720,
+ LocationName.valley_of_bowser_4_life_block_1: 0xBC0721,
+ LocationName.valley_of_bowser_4_powerup_block_2: 0xBC0722,
+ LocationName.valley_castle_yellow_block_1: 0xBC0723,
+ LocationName.valley_castle_yellow_block_2: 0xBC0724,
+ LocationName.valley_castle_green_block_1: 0xBC0725,
+ LocationName.valley_fortress_green_block_1: 0xBC0726,
+ LocationName.valley_fortress_yellow_block_1: 0xBC0727,
+ LocationName.valley_of_bowser_3_powerup_block_1: 0xBC0728,
+ LocationName.valley_of_bowser_3_powerup_block_2: 0xBC0729,
+ LocationName.valley_ghost_house_pswitch_coin_block_1: 0xBC072A,
+ LocationName.valley_ghost_house_multi_coin_block_1: 0xBC072B,
+ LocationName.valley_ghost_house_powerup_block_1: 0xBC072C,
+ LocationName.valley_ghost_house_directional_coin_block_1: 0xBC072D,
+ LocationName.valley_of_bowser_2_powerup_block_1: 0xBC072E,
+ LocationName.valley_of_bowser_2_yellow_block_1: 0xBC072F,
+ LocationName.valley_of_bowser_2_powerup_block_2: 0xBC0730,
+ LocationName.valley_of_bowser_2_wings_block_1: 0xBC0731,
+ LocationName.valley_of_bowser_1_green_block_1: 0xBC0732,
+ LocationName.valley_of_bowser_1_invis_coin_block_1: 0xBC0733,
+ LocationName.valley_of_bowser_1_invis_coin_block_2: 0xBC0734,
+ LocationName.valley_of_bowser_1_invis_coin_block_3: 0xBC0735,
+ LocationName.valley_of_bowser_1_yellow_block_1: 0xBC0736,
+ LocationName.valley_of_bowser_1_yellow_block_2: 0xBC0737,
+ LocationName.valley_of_bowser_1_yellow_block_3: 0xBC0738,
+ LocationName.valley_of_bowser_1_yellow_block_4: 0xBC0739,
+ LocationName.valley_of_bowser_1_vine_block_1: 0xBC073A,
+ LocationName.chocolate_secret_powerup_block_1: 0xBC073B,
+ LocationName.chocolate_secret_powerup_block_2: 0xBC073C,
+ LocationName.vanilla_dome_2_coin_block_1: 0xBC073D,
+ LocationName.vanilla_dome_2_powerup_block_1: 0xBC073E,
+ LocationName.vanilla_dome_2_coin_block_2: 0xBC073F,
+ LocationName.vanilla_dome_2_coin_block_3: 0xBC0740,
+ LocationName.vanilla_dome_2_vine_block_1: 0xBC0741,
+ LocationName.vanilla_dome_2_invis_life_block_1: 0xBC0742,
+ LocationName.vanilla_dome_2_coin_block_4: 0xBC0743,
+ LocationName.vanilla_dome_2_coin_block_5: 0xBC0744,
+ LocationName.vanilla_dome_2_powerup_block_2: 0xBC0745,
+ LocationName.vanilla_dome_2_powerup_block_3: 0xBC0746,
+ LocationName.vanilla_dome_2_powerup_block_4: 0xBC0747,
+ LocationName.vanilla_dome_2_powerup_block_5: 0xBC0748,
+ LocationName.vanilla_dome_2_multi_coin_block_1: 0xBC0749,
+ LocationName.vanilla_dome_2_multi_coin_block_2: 0xBC074A,
+ LocationName.vanilla_dome_4_powerup_block_1: 0xBC074B,
+ LocationName.vanilla_dome_4_powerup_block_2: 0xBC074C,
+ LocationName.vanilla_dome_4_coin_block_1: 0xBC074D,
+ LocationName.vanilla_dome_4_coin_block_2: 0xBC074E,
+ LocationName.vanilla_dome_4_coin_block_3: 0xBC074F,
+ LocationName.vanilla_dome_4_life_block_1: 0xBC0750,
+ LocationName.vanilla_dome_4_coin_block_4: 0xBC0751,
+ LocationName.vanilla_dome_4_coin_block_5: 0xBC0752,
+ LocationName.vanilla_dome_4_coin_block_6: 0xBC0753,
+ LocationName.vanilla_dome_4_coin_block_7: 0xBC0754,
+ LocationName.vanilla_dome_4_coin_block_8: 0xBC0755,
+ LocationName.vanilla_dome_1_flying_block_1: 0xBC0756,
+ LocationName.vanilla_dome_1_powerup_block_1: 0xBC0757,
+ LocationName.vanilla_dome_1_powerup_block_2: 0xBC0758,
+ LocationName.vanilla_dome_1_coin_block_1: 0xBC0759,
+ LocationName.vanilla_dome_1_life_block_1: 0xBC075A,
+ LocationName.vanilla_dome_1_powerup_block_3: 0xBC075B,
+ LocationName.vanilla_dome_1_vine_block_1: 0xBC075C,
+ LocationName.vanilla_dome_1_star_block_1: 0xBC075D,
+ LocationName.vanilla_dome_1_powerup_block_4: 0xBC075E,
+ LocationName.vanilla_dome_1_coin_block_2: 0xBC075F,
+ LocationName.vanilla_dome_castle_life_block_1: 0xBC0760,
+ LocationName.vanilla_dome_castle_life_block_2: 0xBC0761,
+ LocationName.vanilla_dome_castle_powerup_block_1: 0xBC0762,
+ LocationName.vanilla_dome_castle_life_block_3: 0xBC0763,
+ LocationName.vanilla_dome_castle_green_block_1: 0xBC0764,
+ LocationName.forest_ghost_house_coin_block_1: 0xBC0765,
+ LocationName.forest_ghost_house_powerup_block_1: 0xBC0766,
+ LocationName.forest_ghost_house_flying_block_1: 0xBC0767,
+ LocationName.forest_ghost_house_powerup_block_2: 0xBC0768,
+ LocationName.forest_ghost_house_life_block_1: 0xBC0769,
+ LocationName.forest_of_illusion_1_powerup_block_1: 0xBC076A,
+ LocationName.forest_of_illusion_1_yoshi_block_1: 0xBC076B,
+ LocationName.forest_of_illusion_1_powerup_block_2: 0xBC076C,
+ LocationName.forest_of_illusion_1_key_block_1: 0xBC076D,
+ LocationName.forest_of_illusion_1_life_block_1: 0xBC076E,
+ LocationName.forest_of_illusion_4_multi_coin_block_1: 0xBC076F,
+ LocationName.forest_of_illusion_4_coin_block_1: 0xBC0770,
+ LocationName.forest_of_illusion_4_coin_block_2: 0xBC0771,
+ LocationName.forest_of_illusion_4_coin_block_3: 0xBC0772,
+ LocationName.forest_of_illusion_4_coin_block_4: 0xBC0773,
+ LocationName.forest_of_illusion_4_powerup_block_1: 0xBC0774,
+ LocationName.forest_of_illusion_4_coin_block_5: 0xBC0775,
+ LocationName.forest_of_illusion_4_coin_block_6: 0xBC0776,
+ LocationName.forest_of_illusion_4_coin_block_7: 0xBC0777,
+ LocationName.forest_of_illusion_4_powerup_block_2: 0xBC0778,
+ LocationName.forest_of_illusion_4_coin_block_8: 0xBC0779,
+ LocationName.forest_of_illusion_4_coin_block_9: 0xBC077A,
+ LocationName.forest_of_illusion_4_coin_block_10: 0xBC077B,
+ LocationName.forest_of_illusion_2_green_block_1: 0xBC077C,
+ LocationName.forest_of_illusion_2_powerup_block_1: 0xBC077D,
+ LocationName.forest_of_illusion_2_invis_coin_block_1: 0xBC077E,
+ LocationName.forest_of_illusion_2_invis_coin_block_2: 0xBC077F,
+ LocationName.forest_of_illusion_2_invis_life_block_1: 0xBC0780,
+ LocationName.forest_of_illusion_2_invis_coin_block_3: 0xBC0781,
+ LocationName.forest_of_illusion_2_yellow_block_1: 0xBC0782,
+ LocationName.forest_secret_powerup_block_1: 0xBC0783,
+ LocationName.forest_secret_powerup_block_2: 0xBC0784,
+ LocationName.forest_secret_life_block_1: 0xBC0785,
+ LocationName.forest_of_illusion_3_yoshi_block_1: 0xBC0786,
+ LocationName.forest_of_illusion_3_coin_block_1: 0xBC0787,
+ LocationName.forest_of_illusion_3_multi_coin_block_1: 0xBC0788,
+ LocationName.forest_of_illusion_3_coin_block_2: 0xBC0789,
+ LocationName.forest_of_illusion_3_multi_coin_block_2: 0xBC078A,
+ LocationName.forest_of_illusion_3_coin_block_3: 0xBC078B,
+ LocationName.forest_of_illusion_3_coin_block_4: 0xBC078C,
+ LocationName.forest_of_illusion_3_coin_block_5: 0xBC078D,
+ LocationName.forest_of_illusion_3_coin_block_6: 0xBC078E,
+ LocationName.forest_of_illusion_3_coin_block_7: 0xBC078F,
+ LocationName.forest_of_illusion_3_coin_block_8: 0xBC0790,
+ LocationName.forest_of_illusion_3_coin_block_9: 0xBC0791,
+ LocationName.forest_of_illusion_3_coin_block_10: 0xBC0792,
+ LocationName.forest_of_illusion_3_coin_block_11: 0xBC0793,
+ LocationName.forest_of_illusion_3_coin_block_12: 0xBC0794,
+ LocationName.forest_of_illusion_3_coin_block_13: 0xBC0795,
+ LocationName.forest_of_illusion_3_coin_block_14: 0xBC0796,
+ LocationName.forest_of_illusion_3_coin_block_15: 0xBC0797,
+ LocationName.forest_of_illusion_3_coin_block_16: 0xBC0798,
+ LocationName.forest_of_illusion_3_coin_block_17: 0xBC0799,
+ LocationName.forest_of_illusion_3_coin_block_18: 0xBC079A,
+ LocationName.forest_of_illusion_3_coin_block_19: 0xBC079B,
+ LocationName.forest_of_illusion_3_coin_block_20: 0xBC079C,
+ LocationName.forest_of_illusion_3_coin_block_21: 0xBC079D,
+ LocationName.forest_of_illusion_3_coin_block_22: 0xBC079E,
+ LocationName.forest_of_illusion_3_coin_block_23: 0xBC079F,
+ LocationName.forest_of_illusion_3_coin_block_24: 0xBC07A0,
+ LocationName.special_zone_8_yoshi_block_1: 0xBC07A1,
+ LocationName.special_zone_8_coin_block_1: 0xBC07A2,
+ LocationName.special_zone_8_coin_block_2: 0xBC07A3,
+ LocationName.special_zone_8_coin_block_3: 0xBC07A4,
+ LocationName.special_zone_8_coin_block_4: 0xBC07A5,
+ LocationName.special_zone_8_coin_block_5: 0xBC07A6,
+ LocationName.special_zone_8_blue_pow_block_1: 0xBC07A7,
+ LocationName.special_zone_8_powerup_block_1: 0xBC07A8,
+ LocationName.special_zone_8_star_block_1: 0xBC07A9,
+ LocationName.special_zone_8_coin_block_6: 0xBC07AA,
+ LocationName.special_zone_8_coin_block_7: 0xBC07AB,
+ LocationName.special_zone_8_coin_block_8: 0xBC07AC,
+ LocationName.special_zone_8_coin_block_9: 0xBC07AD,
+ LocationName.special_zone_8_coin_block_10: 0xBC07AE,
+ LocationName.special_zone_8_coin_block_11: 0xBC07AF,
+ LocationName.special_zone_8_coin_block_12: 0xBC07B0,
+ LocationName.special_zone_8_coin_block_13: 0xBC07B1,
+ LocationName.special_zone_8_coin_block_14: 0xBC07B2,
+ LocationName.special_zone_8_coin_block_15: 0xBC07B3,
+ LocationName.special_zone_8_coin_block_16: 0xBC07B4,
+ LocationName.special_zone_8_coin_block_17: 0xBC07B5,
+ LocationName.special_zone_8_coin_block_18: 0xBC07B6,
+ LocationName.special_zone_8_multi_coin_block_1: 0xBC07B7,
+ LocationName.special_zone_8_coin_block_19: 0xBC07B8,
+ LocationName.special_zone_8_coin_block_20: 0xBC07B9,
+ LocationName.special_zone_8_coin_block_21: 0xBC07BA,
+ LocationName.special_zone_8_coin_block_22: 0xBC07BB,
+ LocationName.special_zone_8_coin_block_23: 0xBC07BC,
+ LocationName.special_zone_8_powerup_block_2: 0xBC07BD,
+ LocationName.special_zone_8_flying_block_1: 0xBC07BE,
+ LocationName.special_zone_7_powerup_block_1: 0xBC07BF,
+ LocationName.special_zone_7_yoshi_block_1: 0xBC07C0,
+ LocationName.special_zone_7_coin_block_1: 0xBC07C1,
+ LocationName.special_zone_7_powerup_block_2: 0xBC07C2,
+ LocationName.special_zone_7_coin_block_2: 0xBC07C3,
+ LocationName.special_zone_6_powerup_block_1: 0xBC07C4,
+ LocationName.special_zone_6_coin_block_1: 0xBC07C5,
+ LocationName.special_zone_6_coin_block_2: 0xBC07C6,
+ LocationName.special_zone_6_yoshi_block_1: 0xBC07C7,
+ LocationName.special_zone_6_life_block_1: 0xBC07C8,
+ LocationName.special_zone_6_multi_coin_block_1: 0xBC07C9,
+ LocationName.special_zone_6_coin_block_3: 0xBC07CA,
+ LocationName.special_zone_6_coin_block_4: 0xBC07CB,
+ LocationName.special_zone_6_coin_block_5: 0xBC07CC,
+ LocationName.special_zone_6_coin_block_6: 0xBC07CD,
+ LocationName.special_zone_6_coin_block_7: 0xBC07CE,
+ LocationName.special_zone_6_coin_block_8: 0xBC07CF,
+ LocationName.special_zone_6_coin_block_9: 0xBC07D0,
+ LocationName.special_zone_6_coin_block_10: 0xBC07D1,
+ LocationName.special_zone_6_coin_block_11: 0xBC07D2,
+ LocationName.special_zone_6_coin_block_12: 0xBC07D3,
+ LocationName.special_zone_6_coin_block_13: 0xBC07D4,
+ LocationName.special_zone_6_coin_block_14: 0xBC07D5,
+ LocationName.special_zone_6_coin_block_15: 0xBC07D6,
+ LocationName.special_zone_6_coin_block_16: 0xBC07D7,
+ LocationName.special_zone_6_coin_block_17: 0xBC07D8,
+ LocationName.special_zone_6_coin_block_18: 0xBC07D9,
+ LocationName.special_zone_6_coin_block_19: 0xBC07DA,
+ LocationName.special_zone_6_coin_block_20: 0xBC07DB,
+ LocationName.special_zone_6_coin_block_21: 0xBC07DC,
+ LocationName.special_zone_6_coin_block_22: 0xBC07DD,
+ LocationName.special_zone_6_coin_block_23: 0xBC07DE,
+ LocationName.special_zone_6_coin_block_24: 0xBC07DF,
+ LocationName.special_zone_6_coin_block_25: 0xBC07E0,
+ LocationName.special_zone_6_coin_block_26: 0xBC07E1,
+ LocationName.special_zone_6_coin_block_27: 0xBC07E2,
+ LocationName.special_zone_6_coin_block_28: 0xBC07E3,
+ LocationName.special_zone_6_powerup_block_2: 0xBC07E4,
+ LocationName.special_zone_6_coin_block_29: 0xBC07E5,
+ LocationName.special_zone_6_coin_block_30: 0xBC07E6,
+ LocationName.special_zone_6_coin_block_31: 0xBC07E7,
+ LocationName.special_zone_6_coin_block_32: 0xBC07E8,
+ LocationName.special_zone_6_coin_block_33: 0xBC07E9,
+ LocationName.special_zone_5_yoshi_block_1: 0xBC07EA,
+ LocationName.special_zone_1_vine_block_1: 0xBC07EB,
+ LocationName.special_zone_1_vine_block_2: 0xBC07EC,
+ LocationName.special_zone_1_vine_block_3: 0xBC07ED,
+ LocationName.special_zone_1_vine_block_4: 0xBC07EE,
+ LocationName.special_zone_1_life_block_1: 0xBC07EF,
+ LocationName.special_zone_1_vine_block_5: 0xBC07F0,
+ LocationName.special_zone_1_blue_pow_block_1: 0xBC07F1,
+ LocationName.special_zone_1_vine_block_6: 0xBC07F2,
+ LocationName.special_zone_1_powerup_block_1: 0xBC07F3,
+ LocationName.special_zone_1_pswitch_coin_block_1: 0xBC07F4,
+ LocationName.special_zone_1_pswitch_coin_block_2: 0xBC07F5,
+ LocationName.special_zone_1_pswitch_coin_block_3: 0xBC07F6,
+ LocationName.special_zone_1_pswitch_coin_block_4: 0xBC07F7,
+ LocationName.special_zone_1_pswitch_coin_block_5: 0xBC07F8,
+ LocationName.special_zone_1_pswitch_coin_block_6: 0xBC07F9,
+ LocationName.special_zone_1_pswitch_coin_block_7: 0xBC07FA,
+ LocationName.special_zone_1_pswitch_coin_block_8: 0xBC07FB,
+ LocationName.special_zone_1_pswitch_coin_block_9: 0xBC07FC,
+ LocationName.special_zone_1_pswitch_coin_block_10: 0xBC07FD,
+ LocationName.special_zone_1_pswitch_coin_block_11: 0xBC07FE,
+ LocationName.special_zone_1_pswitch_coin_block_12: 0xBC07FF,
+ LocationName.special_zone_1_pswitch_coin_block_13: 0xBC0800,
+ LocationName.special_zone_2_powerup_block_1: 0xBC0801,
+ LocationName.special_zone_2_coin_block_1: 0xBC0802,
+ LocationName.special_zone_2_coin_block_2: 0xBC0803,
+ LocationName.special_zone_2_powerup_block_2: 0xBC0804,
+ LocationName.special_zone_2_coin_block_3: 0xBC0805,
+ LocationName.special_zone_2_coin_block_4: 0xBC0806,
+ LocationName.special_zone_2_powerup_block_3: 0xBC0807,
+ LocationName.special_zone_2_multi_coin_block_1: 0xBC0808,
+ LocationName.special_zone_2_coin_block_5: 0xBC0809,
+ LocationName.special_zone_2_coin_block_6: 0xBC080A,
+ LocationName.special_zone_3_powerup_block_1: 0xBC080B,
+ LocationName.special_zone_3_yoshi_block_1: 0xBC080C,
+ LocationName.special_zone_3_wings_block_1: 0xBC080D,
+ LocationName.special_zone_4_powerup_block_1: 0xBC080E,
+ LocationName.special_zone_4_star_block_1: 0xBC080F,
+ LocationName.star_road_2_star_block_1: 0xBC0810,
+ LocationName.star_road_3_key_block_1: 0xBC0811,
+ LocationName.star_road_4_powerup_block_1: 0xBC0812,
+ LocationName.star_road_4_green_block_1: 0xBC0813,
+ LocationName.star_road_4_green_block_2: 0xBC0814,
+ LocationName.star_road_4_green_block_3: 0xBC0815,
+ LocationName.star_road_4_green_block_4: 0xBC0816,
+ LocationName.star_road_4_green_block_5: 0xBC0817,
+ LocationName.star_road_4_green_block_6: 0xBC0818,
+ LocationName.star_road_4_green_block_7: 0xBC0819,
+ LocationName.star_road_4_key_block_1: 0xBC081A,
+ LocationName.star_road_5_directional_coin_block_1: 0xBC081B,
+ LocationName.star_road_5_life_block_1: 0xBC081C,
+ LocationName.star_road_5_vine_block_1: 0xBC081D,
+ LocationName.star_road_5_yellow_block_1: 0xBC081E,
+ LocationName.star_road_5_yellow_block_2: 0xBC081F,
+ LocationName.star_road_5_yellow_block_3: 0xBC0820,
+ LocationName.star_road_5_yellow_block_4: 0xBC0821,
+ LocationName.star_road_5_yellow_block_5: 0xBC0822,
+ LocationName.star_road_5_yellow_block_6: 0xBC0823,
+ LocationName.star_road_5_yellow_block_7: 0xBC0824,
+ LocationName.star_road_5_yellow_block_8: 0xBC0825,
+ LocationName.star_road_5_yellow_block_9: 0xBC0826,
+ LocationName.star_road_5_yellow_block_10: 0xBC0827,
+ LocationName.star_road_5_yellow_block_11: 0xBC0828,
+ LocationName.star_road_5_yellow_block_12: 0xBC0829,
+ LocationName.star_road_5_yellow_block_13: 0xBC082A,
+ LocationName.star_road_5_yellow_block_14: 0xBC082B,
+ LocationName.star_road_5_yellow_block_15: 0xBC082C,
+ LocationName.star_road_5_yellow_block_16: 0xBC082D,
+ LocationName.star_road_5_yellow_block_17: 0xBC082E,
+ LocationName.star_road_5_yellow_block_18: 0xBC082F,
+ LocationName.star_road_5_yellow_block_19: 0xBC0830,
+ LocationName.star_road_5_yellow_block_20: 0xBC0831,
+ LocationName.star_road_5_green_block_1: 0xBC0832,
+ LocationName.star_road_5_green_block_2: 0xBC0833,
+ LocationName.star_road_5_green_block_3: 0xBC0834,
+ LocationName.star_road_5_green_block_4: 0xBC0835,
+ LocationName.star_road_5_green_block_5: 0xBC0836,
+ LocationName.star_road_5_green_block_6: 0xBC0837,
+ LocationName.star_road_5_green_block_7: 0xBC0838,
+ LocationName.star_road_5_green_block_8: 0xBC0839,
+ LocationName.star_road_5_green_block_9: 0xBC083A,
+ LocationName.star_road_5_green_block_10: 0xBC083B,
+ LocationName.star_road_5_green_block_11: 0xBC083C,
+ LocationName.star_road_5_green_block_12: 0xBC083D,
+ LocationName.star_road_5_green_block_13: 0xBC083E,
+ LocationName.star_road_5_green_block_14: 0xBC083F,
+ LocationName.star_road_5_green_block_15: 0xBC0840,
+ LocationName.star_road_5_green_block_16: 0xBC0841,
+ LocationName.star_road_5_green_block_17: 0xBC0842,
+ LocationName.star_road_5_green_block_18: 0xBC0843,
+ LocationName.star_road_5_green_block_19: 0xBC0844,
+ LocationName.star_road_5_green_block_20: 0xBC0845
+}
+
bowser_location_table = {
LocationName.bowser: 0xBC0200,
}
@@ -208,6 +826,10 @@ yoshi_house_location_table = {
all_locations = {
**level_location_table,
**dragon_coin_location_table,
+ **moon_location_table,
+ **hidden_1ups_location_table,
+ **bonus_block_location_table,
+ **blocksanity_location_table,
**bowser_location_table,
**yoshi_house_location_table,
}
@@ -234,20 +856,149 @@ special_zone_dragon_coin_names = [
LocationName.special_zone_8_dragon,
]
+special_zone_hidden_1up_names = [
+ LocationName.special_zone_1_hidden_1up
+]
+
+special_zone_blocksanity_names = [
+ LocationName.special_zone_8_yoshi_block_1,
+ LocationName.special_zone_8_coin_block_1,
+ LocationName.special_zone_8_coin_block_2,
+ LocationName.special_zone_8_coin_block_3,
+ LocationName.special_zone_8_coin_block_4,
+ LocationName.special_zone_8_coin_block_5,
+ LocationName.special_zone_8_blue_pow_block_1,
+ LocationName.special_zone_8_powerup_block_1,
+ LocationName.special_zone_8_star_block_1,
+ LocationName.special_zone_8_coin_block_6,
+ LocationName.special_zone_8_coin_block_7,
+ LocationName.special_zone_8_coin_block_8,
+ LocationName.special_zone_8_coin_block_9,
+ LocationName.special_zone_8_coin_block_10,
+ LocationName.special_zone_8_coin_block_11,
+ LocationName.special_zone_8_coin_block_12,
+ LocationName.special_zone_8_coin_block_13,
+ LocationName.special_zone_8_coin_block_14,
+ LocationName.special_zone_8_coin_block_15,
+ LocationName.special_zone_8_coin_block_16,
+ LocationName.special_zone_8_coin_block_17,
+ LocationName.special_zone_8_coin_block_18,
+ LocationName.special_zone_8_multi_coin_block_1,
+ LocationName.special_zone_8_coin_block_19,
+ LocationName.special_zone_8_coin_block_20,
+ LocationName.special_zone_8_coin_block_21,
+ LocationName.special_zone_8_coin_block_22,
+ LocationName.special_zone_8_coin_block_23,
+ LocationName.special_zone_8_powerup_block_2,
+ LocationName.special_zone_8_flying_block_1,
+ LocationName.special_zone_7_powerup_block_1,
+ LocationName.special_zone_7_yoshi_block_1,
+ LocationName.special_zone_7_coin_block_1,
+ LocationName.special_zone_7_powerup_block_2,
+ LocationName.special_zone_7_coin_block_2,
+ LocationName.special_zone_6_powerup_block_1,
+ LocationName.special_zone_6_coin_block_1,
+ LocationName.special_zone_6_coin_block_2,
+ LocationName.special_zone_6_yoshi_block_1,
+ LocationName.special_zone_6_life_block_1,
+ LocationName.special_zone_6_multi_coin_block_1,
+ LocationName.special_zone_6_coin_block_3,
+ LocationName.special_zone_6_coin_block_4,
+ LocationName.special_zone_6_coin_block_5,
+ LocationName.special_zone_6_coin_block_6,
+ LocationName.special_zone_6_coin_block_7,
+ LocationName.special_zone_6_coin_block_8,
+ LocationName.special_zone_6_coin_block_9,
+ LocationName.special_zone_6_coin_block_10,
+ LocationName.special_zone_6_coin_block_11,
+ LocationName.special_zone_6_coin_block_12,
+ LocationName.special_zone_6_coin_block_13,
+ LocationName.special_zone_6_coin_block_14,
+ LocationName.special_zone_6_coin_block_15,
+ LocationName.special_zone_6_coin_block_16,
+ LocationName.special_zone_6_coin_block_17,
+ LocationName.special_zone_6_coin_block_18,
+ LocationName.special_zone_6_coin_block_19,
+ LocationName.special_zone_6_coin_block_20,
+ LocationName.special_zone_6_coin_block_21,
+ LocationName.special_zone_6_coin_block_22,
+ LocationName.special_zone_6_coin_block_23,
+ LocationName.special_zone_6_coin_block_24,
+ LocationName.special_zone_6_coin_block_25,
+ LocationName.special_zone_6_coin_block_26,
+ LocationName.special_zone_6_coin_block_27,
+ LocationName.special_zone_6_coin_block_28,
+ LocationName.special_zone_6_powerup_block_2,
+ LocationName.special_zone_6_coin_block_29,
+ LocationName.special_zone_6_coin_block_30,
+ LocationName.special_zone_6_coin_block_31,
+ LocationName.special_zone_6_coin_block_32,
+ LocationName.special_zone_6_coin_block_33,
+ LocationName.special_zone_5_yoshi_block_1,
+ LocationName.special_zone_1_vine_block_1,
+ LocationName.special_zone_1_vine_block_2,
+ LocationName.special_zone_1_vine_block_3,
+ LocationName.special_zone_1_vine_block_4,
+ LocationName.special_zone_1_life_block_1,
+ LocationName.special_zone_1_vine_block_5,
+ LocationName.special_zone_1_blue_pow_block_1,
+ LocationName.special_zone_1_vine_block_6,
+ LocationName.special_zone_1_powerup_block_1,
+ LocationName.special_zone_1_pswitch_coin_block_1,
+ LocationName.special_zone_1_pswitch_coin_block_2,
+ LocationName.special_zone_1_pswitch_coin_block_3,
+ LocationName.special_zone_1_pswitch_coin_block_4,
+ LocationName.special_zone_1_pswitch_coin_block_5,
+ LocationName.special_zone_1_pswitch_coin_block_6,
+ LocationName.special_zone_1_pswitch_coin_block_7,
+ LocationName.special_zone_1_pswitch_coin_block_8,
+ LocationName.special_zone_1_pswitch_coin_block_9,
+ LocationName.special_zone_1_pswitch_coin_block_10,
+ LocationName.special_zone_1_pswitch_coin_block_11,
+ LocationName.special_zone_1_pswitch_coin_block_12,
+ LocationName.special_zone_1_pswitch_coin_block_13,
+ LocationName.special_zone_2_powerup_block_1,
+ LocationName.special_zone_2_coin_block_1,
+ LocationName.special_zone_2_coin_block_2,
+ LocationName.special_zone_2_powerup_block_2,
+ LocationName.special_zone_2_coin_block_3,
+ LocationName.special_zone_2_coin_block_4,
+ LocationName.special_zone_2_powerup_block_3,
+ LocationName.special_zone_2_multi_coin_block_1,
+ LocationName.special_zone_2_coin_block_5,
+ LocationName.special_zone_2_coin_block_6,
+ LocationName.special_zone_3_powerup_block_1,
+ LocationName.special_zone_3_yoshi_block_1,
+ LocationName.special_zone_3_wings_block_1,
+ LocationName.special_zone_4_powerup_block_1,
+ LocationName.special_zone_4_star_block_1
+]
+
location_table = {}
-def setup_locations(world, player: int):
+def setup_locations(world: World):
location_table = {**level_location_table}
- # Dragon Coins here
- if world.dragon_coin_checks[player].value:
- location_table.update({**dragon_coin_location_table})
+ if world.options.dragon_coin_checks:
+ location_table.update(dragon_coin_location_table)
- if world.goal[player] == "yoshi_egg_hunt":
- location_table.update({**yoshi_house_location_table})
+ if world.options.moon_checks:
+ location_table.update(moon_location_table)
+
+ if world.options.hidden_1up_checks:
+ location_table.update(hidden_1ups_location_table)
+
+ if world.options.bonus_block_checks:
+ location_table.update(bonus_block_location_table)
+
+ if world.options.blocksanity:
+ location_table.update(blocksanity_location_table)
+
+ if world.options.goal == "yoshi_egg_hunt":
+ location_table.update(yoshi_house_location_table)
else:
- location_table.update({**bowser_location_table})
+ location_table.update(bowser_location_table)
return location_table
diff --git a/worlds/smw/Names/ItemName.py b/worlds/smw/Names/ItemName.py
index fecb18685e..e6eced4100 100644
--- a/worlds/smw/Names/ItemName.py
+++ b/worlds/smw/Names/ItemName.py
@@ -1,5 +1,9 @@
# Junk Definitions
one_up_mushroom = "1-Up Mushroom"
+one_coin = "1 coin"
+five_coins = "5 coins"
+ten_coins = "10 coins"
+fifty_coins = "50 coins"
# Collectable Definitions
yoshi_egg = "Yoshi Egg"
@@ -22,11 +26,16 @@ green_switch_palace = "Green Switch Palace"
red_switch_palace = "Red Switch Palace"
blue_switch_palace = "Blue Switch Palace"
+# Special Zone clear flag definition
+special_world_clear = "Special Zone Clear"
+
# Trap Definitions
-ice_trap = "Ice Trap"
-stun_trap = "Stun Trap"
-literature_trap = "Literature Trap"
-timer_trap = "Timer Trap"
+ice_trap = "Ice Trap"
+stun_trap = "Stun Trap"
+literature_trap = "Literature Trap"
+timer_trap = "Timer Trap"
+reverse_controls_trap = "Reverse Trap"
+thwimp_trap = "Thwimp Trap"
# Other Definitions
victory = "The Princess"
diff --git a/worlds/smw/Names/LocationName.py b/worlds/smw/Names/LocationName.py
index cc01b05ece..847b724f78 100644
--- a/worlds/smw/Names/LocationName.py
+++ b/worlds/smw/Names/LocationName.py
@@ -4,12 +4,15 @@ yoshis_house_tile = "Yoshi's House - Tile"
yoshis_island_1_exit_1 = "Yoshi's Island 1 - Normal Exit"
yoshis_island_1_dragon = "Yoshi's Island 1 - Dragon Coins"
+yoshis_island_1_moon = "Yoshi's Island 1 - 3-Up Moon"
yoshis_island_2_exit_1 = "Yoshi's Island 2 - Normal Exit"
yoshis_island_2_dragon = "Yoshi's Island 2 - Dragon Coins"
yoshis_island_3_exit_1 = "Yoshi's Island 3 - Normal Exit"
yoshis_island_3_dragon = "Yoshi's Island 3 - Dragon Coins"
+yoshis_island_3_bonus_block = "Yoshi's Island 3 - 1-Up from Bonus Block"
yoshis_island_4_exit_1 = "Yoshi's Island 4 - Normal Exit"
yoshis_island_4_dragon = "Yoshi's Island 4 - Dragon Coins"
+yoshis_island_4_hidden_1up = "Yoshi's Island 4 - Hidden 1-Up"
yoshis_island_castle = "#1 Iggy's Castle - Normal Exit"
yoshis_island_koopaling = "#1 Iggy's Castle - Boss"
@@ -18,13 +21,17 @@ yellow_switch_palace = "Yellow Switch Palace"
donut_plains_1_exit_1 = "Donut Plains 1 - Normal Exit"
donut_plains_1_exit_2 = "Donut Plains 1 - Secret Exit"
donut_plains_1_dragon = "Donut Plains 1 - Dragon Coins"
+donut_plains_1_hidden_1up = "Donut Plains 1 - Hidden 1-Up"
donut_plains_2_exit_1 = "Donut Plains 2 - Normal Exit"
donut_plains_2_exit_2 = "Donut Plains 2 - Secret Exit"
donut_plains_2_dragon = "Donut Plains 2 - Dragon Coins"
donut_plains_3_exit_1 = "Donut Plains 3 - Normal Exit"
donut_plains_3_dragon = "Donut Plains 3 - Dragon Coins"
+donut_plains_3_bonus_block = "Donut Plains 3 - 1-Up from Bonus Block"
donut_plains_4_exit_1 = "Donut Plains 4 - Normal Exit"
donut_plains_4_dragon = "Donut Plains 4 - Dragon Coins"
+donut_plains_4_moon = "Donut Plains 4 - 3-Up Moon"
+donut_plains_4_hidden_1up = "Donut Plains 4 - Hidden 1-Up"
donut_secret_1_exit_1 = "Donut Secret 1 - Normal Exit"
donut_secret_1_exit_2 = "Donut Secret 1 - Secret Exit"
donut_secret_1_dragon = "Donut Secret 1 - Dragon Coins"
@@ -35,6 +42,7 @@ donut_ghost_house_exit_2 = "Donut Ghost House - Secret Exit"
donut_secret_house_exit_1 = "Donut Secret House - Normal Exit"
donut_secret_house_exit_2 = "Donut Secret House - Secret Exit"
donut_plains_castle = "#2 Morton's Castle - Normal Exit"
+donut_plains_castle_hidden_1up = "#2 Morton's Castle - Hidden 1-Up"
donut_plains_koopaling = "#2 Morton's Castle - Boss"
green_switch_palace = "Green Switch Palace"
@@ -47,8 +55,10 @@ vanilla_dome_2_exit_2 = "Vanilla Dome 2 - Secret Exit"
vanilla_dome_2_dragon = "Vanilla Dome 2 - Dragon Coins"
vanilla_dome_3_exit_1 = "Vanilla Dome 3 - Normal Exit"
vanilla_dome_3_dragon = "Vanilla Dome 3 - Dragon Coins"
+vanilla_dome_3_moon = "Vanilla Dome 3 - 3-Up Moon"
vanilla_dome_4_exit_1 = "Vanilla Dome 4 - Normal Exit"
vanilla_dome_4_dragon = "Vanilla Dome 4 - Dragon Coins"
+vanilla_dome_4_hidden_1up = "Vanilla Dome 4 - Hidden 1-Up"
vanilla_secret_1_exit_1 = "Vanilla Secret 1 - Normal Exit"
vanilla_secret_1_exit_2 = "Vanilla Secret 1 - Secret Exit"
vanilla_secret_1_dragon = "Vanilla Secret 1 - Dragon Coins"
@@ -58,7 +68,9 @@ vanilla_secret_3_exit_1 = "Vanilla Secret 3 - Normal Exit"
vanilla_secret_3_dragon = "Vanilla Secret 3 - Dragon Coins"
vanilla_ghost_house_exit_1 = "Vanilla Ghost House - Normal Exit"
vanilla_ghost_house_dragon = "Vanilla Ghost House - Dragon Coins"
+vanilla_ghost_house_hidden_1up = "Vanilla Ghost House - Hidden 1-Up"
vanilla_fortress = "Vanilla Fortress - Normal Exit"
+vanilla_fortress_hidden_1up = "Vanilla Fortress - Hidden 1-Up"
vanilla_reznor = "Vanilla Fortress - Boss"
vanilla_dome_castle = "#3 Lemmy's Castle - Normal Exit"
vanilla_dome_koopaling = "#3 Lemmy's Castle - Boss"
@@ -67,13 +79,16 @@ red_switch_palace = "Red Switch Palace"
butter_bridge_1_exit_1 = "Butter Bridge 1 - Normal Exit"
butter_bridge_1_dragon = "Butter Bridge 1 - Dragon Coins"
+butter_bridge_1_bonus_block = "Butter Bridge 1 - 1-Up from Bonus Block"
butter_bridge_2_exit_1 = "Butter Bridge 2 - Normal Exit"
butter_bridge_2_dragon = "Butter Bridge 2 - Dragon Coins"
cheese_bridge_exit_1 = "Cheese Bridge - Normal Exit"
cheese_bridge_exit_2 = "Cheese Bridge - Secret Exit"
cheese_bridge_dragon = "Cheese Bridge - Dragon Coins"
+cheese_bridge_moon = "Cheese Bridge - 3-Up Moon"
cookie_mountain_exit_1 = "Cookie Mountain - Normal Exit"
cookie_mountain_dragon = "Cookie Mountain - Dragon Coins"
+cookie_mountain_hidden_1up = "Cookie Mountain - Hidden 1-Up"
soda_lake_exit_1 = "Soda Lake - Normal Exit"
soda_lake_dragon = "Soda Lake - Dragon Coins"
twin_bridges_castle = "#4 Ludwig's Castle - Normal Exit"
@@ -87,12 +102,14 @@ forest_of_illusion_2_dragon = "Forest of Illusion 2 - Dragon Coins"
forest_of_illusion_3_exit_1 = "Forest of Illusion 3 - Normal Exit"
forest_of_illusion_3_exit_2 = "Forest of Illusion 3 - Secret Exit"
forest_of_illusion_3_dragon = "Forest of Illusion 3 - Dragon Coins"
+forest_of_illusion_3_hidden_1up = "Forest of Illusion 3 - Hidden 1-Up"
forest_of_illusion_4_exit_1 = "Forest of Illusion 4 - Normal Exit"
forest_of_illusion_4_exit_2 = "Forest of Illusion 4 - Secret Exit"
forest_of_illusion_4_dragon = "Forest of Illusion 4 - Dragon Coins"
forest_ghost_house_exit_1 = "Forest Ghost House - Normal Exit"
forest_ghost_house_exit_2 = "Forest Ghost House - Secret Exit"
forest_ghost_house_dragon = "Forest Ghost House - Dragon Coins"
+forest_ghost_house_moon = "Forest Ghost House - 3-Up Moon"
forest_secret_exit_1 = "Forest Secret - Normal Exit"
forest_secret_dragon = "Forest Secret - Dragon Coins"
forest_fortress = "Forest Fortress - Normal Exit"
@@ -105,12 +122,15 @@ blue_switch_palace = "Blue Switch Palace"
chocolate_island_1_exit_1 = "Chocolate Island 1 - Normal Exit"
chocolate_island_1_dragon = "Chocolate Island 1 - Dragon Coins"
+chocolate_island_1_moon = "Chocolate Island 1 - 3-Up Moon"
chocolate_island_2_exit_1 = "Chocolate Island 2 - Normal Exit"
chocolate_island_2_exit_2 = "Chocolate Island 2 - Secret Exit"
chocolate_island_2_dragon = "Chocolate Island 2 - Dragon Coins"
+chocolate_island_2_hidden_1up = "Chocolate Island 2 - Hidden 1-Up"
chocolate_island_3_exit_1 = "Chocolate Island 3 - Normal Exit"
chocolate_island_3_exit_2 = "Chocolate Island 3 - Secret Exit"
chocolate_island_3_dragon = "Chocolate Island 3 - Dragon Coins"
+chocolate_island_3_bonus_block = "Chocolate Island 3 - 1-Up from Bonus Block"
chocolate_island_4_exit_1 = "Chocolate Island 4 - Normal Exit"
chocolate_island_4_dragon = "Chocolate Island 4 - Dragon Coins"
chocolate_island_5_exit_1 = "Chocolate Island 5 - Normal Exit"
@@ -120,6 +140,7 @@ chocolate_secret_exit_1 = "Chocolate Secret - Normal Exit"
chocolate_fortress = "Chocolate Fortress - Normal Exit"
chocolate_reznor = "Chocolate Fortress - Boss"
chocolate_castle = "#6 Wendy's Castle - Normal Exit"
+chocolate_castle_hidden_1up = "#6 Wendy's Castle - Hidden 1-Up"
chocolate_koopaling = "#6 Wendy's Castle - Boss"
sunken_ghost_ship = "Sunken Ghost Ship - Normal Exit"
@@ -127,9 +148,11 @@ sunken_ghost_ship_dragon = "Sunken Ghost Ship - Dragon Coins"
valley_of_bowser_1_exit_1 = "Valley of Bowser 1 - Normal Exit"
valley_of_bowser_1_dragon = "Valley of Bowser 1 - Dragon Coins"
+valley_of_bowser_1_moon = "Valley of Bowser 1 - 3-Up Moon"
valley_of_bowser_2_exit_1 = "Valley of Bowser 2 - Normal Exit"
valley_of_bowser_2_exit_2 = "Valley of Bowser 2 - Secret Exit"
valley_of_bowser_2_dragon = "Valley of Bowser 2 - Dragon Coins"
+valley_of_bowser_2_hidden_1up = "Valley of Bowser 2 - Hidden 1-Up"
valley_of_bowser_3_exit_1 = "Valley of Bowser 3 - Normal Exit"
valley_of_bowser_3_dragon = "Valley of Bowser 3 - Dragon Coins"
valley_of_bowser_4_exit_1 = "Valley of Bowser 4 - Normal Exit"
@@ -141,6 +164,7 @@ valley_fortress = "Valley Fortress - Normal Exit"
valley_reznor = "Valley Fortress - Boss"
valley_castle = "#7 Larry's Castle - Normal Exit"
valley_castle_dragon = "#7 Larry's Castle - Dragon Coins"
+valley_castle_hidden_1up = "#7 Larry's Castle - Hidden 1-Up"
valley_koopaling = "#7 Larry's Castle - Boss"
front_door = "Front Door"
@@ -161,6 +185,7 @@ star_road_5_exit_2 = "Star Road 5 - Secret Exit"
special_zone_1_exit_1 = "Gnarly - Normal Exit"
special_zone_1_dragon = "Gnarly - Dragon Coins"
+special_zone_1_hidden_1up = "Gnarly - Hidden 1-Up"
special_zone_2_exit_1 = "Tubular - Normal Exit"
special_zone_2_dragon = "Tubular - Dragon Coins"
special_zone_3_exit_1 = "Way Cool - Normal Exit"
@@ -362,3 +387,586 @@ special_zone_7_region = "Outrageous"
special_zone_8_tile = "Funky - Tile"
special_zone_8_region = "Funky"
special_complete = "Special Zone - Star Road - Complete"
+
+vanilla_secret_2_yoshi_block_1 = "Vanilla Secret 2 - Yoshi Block #1"
+vanilla_secret_2_green_block_1 = "Vanilla Secret 2 - Green Switch Palace Block #1"
+vanilla_secret_2_powerup_block_1 = "Vanilla Secret 2 - Powerup Block #1"
+vanilla_secret_2_powerup_block_2 = "Vanilla Secret 2 - Powerup Block #2"
+vanilla_secret_2_multi_coin_block_1 = "Vanilla Secret 2 - Multi Coin Block #1"
+vanilla_secret_2_gray_pow_block_1 = "Vanilla Secret 2 - Gray P-Switch Block #1"
+vanilla_secret_2_coin_block_1 = "Vanilla Secret 2 - Coin Block #1"
+vanilla_secret_2_coin_block_2 = "Vanilla Secret 2 - Coin Block #2"
+vanilla_secret_2_coin_block_3 = "Vanilla Secret 2 - Coin Block #3"
+vanilla_secret_2_coin_block_4 = "Vanilla Secret 2 - Coin Block #4"
+vanilla_secret_2_coin_block_5 = "Vanilla Secret 2 - Coin Block #5"
+vanilla_secret_2_coin_block_6 = "Vanilla Secret 2 - Coin Block #6"
+vanilla_secret_3_powerup_block_1 = "Vanilla Secret 3 - Powerup Block #1"
+vanilla_secret_3_powerup_block_2 = "Vanilla Secret 3 - Powerup Block #2"
+donut_ghost_house_vine_block_1 = "Donut Ghost House - Vine|P-Switch Block #1"
+donut_ghost_house_directional_coin_block_1 = "Donut Ghost House - Directional Coin Block #1"
+donut_ghost_house_life_block_1 = "Donut Ghost House - 1-Up Mushroom Block #1"
+donut_ghost_house_life_block_2 = "Donut Ghost House - 1-Up Mushroom Block #2"
+donut_ghost_house_life_block_3 = "Donut Ghost House - 1-Up Mushroom Block #3"
+donut_ghost_house_life_block_4 = "Donut Ghost House - 1-Up Mushroom Block #4"
+donut_plains_3_green_block_1 = "Donut Plains 3 - Green Switch Palace Block #1"
+donut_plains_3_coin_block_1 = "Donut Plains 3 - Coin Block #1"
+donut_plains_3_coin_block_2 = "Donut Plains 3 - Coin Block #2"
+donut_plains_3_vine_block_1 = "Donut Plains 3 - Vine Block #1"
+donut_plains_3_powerup_block_1 = "Donut Plains 3 - Powerup Block #1"
+donut_plains_3_bonus_block_1 = "Donut Plains 3 - Bonus Block #1"
+donut_plains_4_coin_block_1 = "Donut Plains 4 - Coin Block #1"
+donut_plains_4_powerup_block_1 = "Donut Plains 4 - Powerup Block #1"
+donut_plains_4_coin_block_2 = "Donut Plains 4 - Coin Block #2"
+donut_plains_4_yoshi_block_1 = "Donut Plains 4 - Yoshi Block #1"
+donut_plains_castle_yellow_block_1 = "#2 Morton's Castle - Yellow Switch Palace Block #1"
+donut_plains_castle_coin_block_1 = "#2 Morton's Castle - Coin Block #1"
+donut_plains_castle_powerup_block_1 = "#2 Morton's Castle - Powerup Block #1"
+donut_plains_castle_coin_block_2 = "#2 Morton's Castle - Coin Block #2"
+donut_plains_castle_vine_block_1 = "#2 Morton's Castle - Vine Block #1"
+donut_plains_castle_invis_life_block_1 = "#2 Morton's Castle - Invisible 1-Up Mushroom Block #1"
+donut_plains_castle_coin_block_3 = "#2 Morton's Castle - Coin Block #3"
+donut_plains_castle_coin_block_4 = "#2 Morton's Castle - Coin Block #4"
+donut_plains_castle_coin_block_5 = "#2 Morton's Castle - Coin Block #5"
+donut_plains_castle_green_block_1 = "#2 Morton's Castle - Green Switch Palace Block #1"
+donut_plains_2_coin_block_1 = "Donut Plains 2 - Coin Block #1"
+donut_plains_2_coin_block_2 = "Donut Plains 2 - Coin Block #2"
+donut_plains_2_coin_block_3 = "Donut Plains 2 - Coin Block #3"
+donut_plains_2_yellow_block_1 = "Donut Plains 2 - Yellow Switch Palace Block #1"
+donut_plains_2_powerup_block_1 = "Donut Plains 2 - Powerup Block #1"
+donut_plains_2_multi_coin_block_1 = "Donut Plains 2 - Multi Coin Block #1"
+donut_plains_2_flying_block_1 = "Donut Plains 2 - Flying Question Block #1"
+donut_plains_2_green_block_1 = "Donut Plains 2 - Green Switch Palace Block #1"
+donut_plains_2_yellow_block_2 = "Donut Plains 2 - Yellow Switch Palace Block #2"
+donut_plains_2_vine_block_1 = "Donut Plains 2 - Vine Block #1"
+donut_secret_1_coin_block_1 = "Donut Secret 1 - Coin Block #1"
+donut_secret_1_coin_block_2 = "Donut Secret 1 - Coin Block #2"
+donut_secret_1_powerup_block_1 = "Donut Secret 1 - Powerup Block #1"
+donut_secret_1_coin_block_3 = "Donut Secret 1 - Coin Block #3"
+donut_secret_1_powerup_block_2 = "Donut Secret 1 - Powerup Block #2"
+donut_secret_1_powerup_block_3 = "Donut Secret 1 - Powerup Block #3"
+donut_secret_1_life_block_1 = "Donut Secret 1 - 1-Up Mushroom Block #1"
+donut_secret_1_powerup_block_4 = "Donut Secret 1 - Powerup Block #4"
+donut_secret_1_powerup_block_5 = "Donut Secret 1 - Powerup Block #5"
+donut_secret_1_key_block_1 = "Donut Secret 1 - Key Block #1"
+vanilla_fortress_powerup_block_1 = "Vanilla Fortress - Powerup Block #1"
+vanilla_fortress_powerup_block_2 = "Vanilla Fortress - Powerup Block #2"
+vanilla_fortress_yellow_block_1 = "Vanilla Fortress - Yellow Switch Palace Block #1"
+butter_bridge_1_powerup_block_1 = "Butter Bridge 1 - Powerup Block #1"
+butter_bridge_1_multi_coin_block_1 = "Butter Bridge 1 - Multi Coin Block #1"
+butter_bridge_1_multi_coin_block_2 = "Butter Bridge 1 - Multi Coin Block #2"
+butter_bridge_1_multi_coin_block_3 = "Butter Bridge 1 - Multi Coin Block #3"
+butter_bridge_1_life_block_1 = "Butter Bridge 1 - 1-Up Mushroom Block #1"
+butter_bridge_1_bonus_block_1 = "Butter Bridge 1 - Bonus Block #1"
+butter_bridge_2_powerup_block_1 = "Butter Bridge 2 - Powerup Block #1"
+butter_bridge_2_green_block_1 = "Butter Bridge 2 - Green Switch Palace Block #1"
+butter_bridge_2_yoshi_block_1 = "Butter Bridge 2 - Yoshi Block #1"
+twin_bridges_castle_powerup_block_1 = "#4 Ludwig Castle - Powerup Block #1"
+cheese_bridge_powerup_block_1 = "Cheese Bridge Area - Powerup Block #1"
+cheese_bridge_powerup_block_2 = "Cheese Bridge Area - Powerup Block #2"
+cheese_bridge_wings_block_1 = "Cheese Bridge Area - Wings Block #1"
+cheese_bridge_powerup_block_3 = "Cheese Bridge Area - Powerup Block #3"
+cookie_mountain_coin_block_1 = "Cookie Mountain - Coin Block #1"
+cookie_mountain_coin_block_2 = "Cookie Mountain - Coin Block #2"
+cookie_mountain_coin_block_3 = "Cookie Mountain - Coin Block #3"
+cookie_mountain_coin_block_4 = "Cookie Mountain - Coin Block #4"
+cookie_mountain_coin_block_5 = "Cookie Mountain - Coin Block #5"
+cookie_mountain_coin_block_6 = "Cookie Mountain - Coin Block #6"
+cookie_mountain_coin_block_7 = "Cookie Mountain - Coin Block #7"
+cookie_mountain_coin_block_8 = "Cookie Mountain - Coin Block #8"
+cookie_mountain_coin_block_9 = "Cookie Mountain - Coin Block #9"
+cookie_mountain_powerup_block_1 = "Cookie Mountain - Powerup Block #1"
+cookie_mountain_life_block_1 = "Cookie Mountain - 1-Up Mushroom Block #1"
+cookie_mountain_vine_block_1 = "Cookie Mountain - Vine Block #1"
+cookie_mountain_yoshi_block_1 = "Cookie Mountain - Yoshi Block #1"
+cookie_mountain_coin_block_10 = "Cookie Mountain - Coin Block #10"
+cookie_mountain_coin_block_11 = "Cookie Mountain - Coin Block #11"
+cookie_mountain_powerup_block_2 = "Cookie Mountain - Powerup Block #2"
+cookie_mountain_coin_block_12 = "Cookie Mountain - Coin Block #12"
+cookie_mountain_coin_block_13 = "Cookie Mountain - Coin Block #13"
+cookie_mountain_coin_block_14 = "Cookie Mountain - Coin Block #14"
+cookie_mountain_coin_block_15 = "Cookie Mountain - Coin Block #15"
+cookie_mountain_coin_block_16 = "Cookie Mountain - Coin Block #16"
+cookie_mountain_coin_block_17 = "Cookie Mountain - Coin Block #17"
+cookie_mountain_coin_block_18 = "Cookie Mountain - Coin Block #18"
+cookie_mountain_coin_block_19 = "Cookie Mountain - Coin Block #19"
+cookie_mountain_coin_block_20 = "Cookie Mountain - Coin Block #20"
+cookie_mountain_coin_block_21 = "Cookie Mountain - Coin Block #21"
+cookie_mountain_coin_block_22 = "Cookie Mountain - Coin Block #22"
+cookie_mountain_coin_block_23 = "Cookie Mountain - Coin Block #23"
+cookie_mountain_coin_block_24 = "Cookie Mountain - Coin Block #24"
+cookie_mountain_coin_block_25 = "Cookie Mountain - Coin Block #25"
+cookie_mountain_coin_block_26 = "Cookie Mountain - Coin Block #26"
+cookie_mountain_coin_block_27 = "Cookie Mountain - Coin Block #27"
+cookie_mountain_coin_block_28 = "Cookie Mountain - Coin Block #28"
+cookie_mountain_coin_block_29 = "Cookie Mountain - Coin Block #29"
+cookie_mountain_coin_block_30 = "Cookie Mountain - Coin Block #30"
+soda_lake_powerup_block_1 = "Soda Lake - Powerup Block #1"
+donut_secret_house_powerup_block_1 = "Donut Secret House - Powerup Block #1"
+donut_secret_house_multi_coin_block_1 = "Donut Secret House - Multi Coin Block #1"
+donut_secret_house_life_block_1 = "Donut Secret House - 1-Up Mushroom Block #1"
+donut_secret_house_vine_block_1 = "Donut Secret House - Vine Block #1"
+donut_secret_house_directional_coin_block_1 = "Donut Secret House - Directional Coin Block #1"
+donut_plains_1_coin_block_1 = "Donut Plains 1 - Coin Block #1"
+donut_plains_1_coin_block_2 = "Donut Plains 1 - Coin Block #2"
+donut_plains_1_yoshi_block_1 = "Donut Plains 1 - Yoshi Block #1"
+donut_plains_1_vine_block_1 = "Donut Plains 1 - Vine Block #1"
+donut_plains_1_green_block_1 = "Donut Plains 1 - Green Switch Palace Block #1"
+donut_plains_1_green_block_2 = "Donut Plains 1 - Green Switch Palace Block #2"
+donut_plains_1_green_block_3 = "Donut Plains 1 - Green Switch Palace Block #3"
+donut_plains_1_green_block_4 = "Donut Plains 1 - Green Switch Palace Block #4"
+donut_plains_1_green_block_5 = "Donut Plains 1 - Green Switch Palace Block #5"
+donut_plains_1_green_block_6 = "Donut Plains 1 - Green Switch Palace Block #6"
+donut_plains_1_green_block_7 = "Donut Plains 1 - Green Switch Palace Block #7"
+donut_plains_1_green_block_8 = "Donut Plains 1 - Green Switch Palace Block #8"
+donut_plains_1_green_block_9 = "Donut Plains 1 - Green Switch Palace Block #9"
+donut_plains_1_green_block_10 = "Donut Plains 1 - Green Switch Palace Block #10"
+donut_plains_1_green_block_11 = "Donut Plains 1 - Green Switch Palace Block #11"
+donut_plains_1_green_block_12 = "Donut Plains 1 - Green Switch Palace Block #12"
+donut_plains_1_green_block_13 = "Donut Plains 1 - Green Switch Palace Block #13"
+donut_plains_1_green_block_14 = "Donut Plains 1 - Green Switch Palace Block #14"
+donut_plains_1_green_block_15 = "Donut Plains 1 - Green Switch Palace Block #15"
+donut_plains_1_green_block_16 = "Donut Plains 1 - Green Switch Palace Block #16"
+donut_plains_1_yellow_block_1 = "Donut Plains 1 - Yellow Switch Palace Block #1"
+donut_plains_1_yellow_block_2 = "Donut Plains 1 - Yellow Switch Palace Block #2"
+donut_plains_1_yellow_block_3 = "Donut Plains 1 - Yellow Switch Palace Block #3"
+sunken_ghost_ship_powerup_block_1 = "Sunken Ghost Ship - Powerup Block #1"
+sunken_ghost_ship_star_block_1 = "Sunken Ghost Ship - Star Block #1"
+chocolate_castle_yellow_block_1 = "#6 Wendy's Castle - Yellow Switch Palace Block #1"
+chocolate_castle_yellow_block_2 = "#6 Wendy's Castle - Yellow Switch Palace Block #2"
+chocolate_castle_green_block_1 = "#6 Wendy's Castle - Green Switch Palace Block #1"
+chocolate_fortress_powerup_block_1 = "Chocolate Fortress - Powerup Block #1"
+chocolate_fortress_powerup_block_2 = "Chocolate Fortress - Powerup Block #2"
+chocolate_fortress_coin_block_1 = "Chocolate Fortress - Coin Block #1"
+chocolate_fortress_coin_block_2 = "Chocolate Fortress - Coin Block #2"
+chocolate_fortress_green_block_1 = "Chocolate Fortress - Green Switch Palace Block #1"
+chocolate_island_5_yoshi_block_1 = "Chocolate Island 5 - Yoshi Block #1"
+chocolate_island_5_powerup_block_1 = "Chocolate Island 5 - Powerup Block #1"
+chocolate_island_5_life_block_1 = "Chocolate Island 5 - 1-Up Mushroom Block #1"
+chocolate_island_5_yellow_block_1 = "Chocolate Island 5 - Yellow Switch Palace Block #1"
+chocolate_island_4_yellow_block_1 = "Chocolate Island 4 - Yellow Switch Palace Block #1"
+chocolate_island_4_blue_pow_block_1 = "Chocolate Island 4 - Blue P-Switch Block #1"
+chocolate_island_4_powerup_block_1 = "Chocolate Island 4 - Powerup Block #1"
+forest_fortress_yellow_block_1 = "Forest Fortress - Yellow Switch Palace Block #1"
+forest_fortress_powerup_block_1 = "Forest Fortress - Powerup Block #1"
+forest_fortress_life_block_1 = "Forest Fortress - 1-Up Mushroom Block #1"
+forest_fortress_life_block_2 = "Forest Fortress - 1-Up Mushroom Block #2"
+forest_fortress_life_block_3 = "Forest Fortress - 1-Up Mushroom Block #3"
+forest_fortress_life_block_4 = "Forest Fortress - 1-Up Mushroom Block #4"
+forest_fortress_life_block_5 = "Forest Fortress - 1-Up Mushroom Block #5"
+forest_fortress_life_block_6 = "Forest Fortress - 1-Up Mushroom Block #6"
+forest_fortress_life_block_7 = "Forest Fortress - 1-Up Mushroom Block #7"
+forest_fortress_life_block_8 = "Forest Fortress - 1-Up Mushroom Block #8"
+forest_fortress_life_block_9 = "Forest Fortress - 1-Up Mushroom Block #9"
+forest_castle_green_block_1 = "#5 Roy's Castle - Green Switch Palace Block #1"
+chocolate_ghost_house_powerup_block_1 = "Choco Ghost House - Powerup Block #1"
+chocolate_ghost_house_powerup_block_2 = "Choco Ghost House - Powerup Block #2"
+chocolate_ghost_house_life_block_1 = "Choco Ghost House - 1-Up Mushroom Block #1"
+chocolate_island_1_flying_block_1 = "Chocolate Island 1 - Flying Question Block #1"
+chocolate_island_1_flying_block_2 = "Chocolate Island 1 - Flying Question Block #2"
+chocolate_island_1_yoshi_block_1 = "Chocolate Island 1 - Yoshi Block #1"
+chocolate_island_1_green_block_1 = "Chocolate Island 1 - Green|Yellow Switch Palace Block #1"
+chocolate_island_1_life_block_1 = "Chocolate Island 1 - 1-Up Mushroom Block #1"
+chocolate_island_3_powerup_block_1 = "Chocolate Island 3 - Powerup Block #1"
+chocolate_island_3_powerup_block_2 = "Chocolate Island 3 - Powerup Block #2"
+chocolate_island_3_powerup_block_3 = "Chocolate Island 3 - Powerup Block #3"
+chocolate_island_3_green_block_1 = "Chocolate Island 3 - Green Switch Palace Block #1"
+chocolate_island_3_bonus_block_1 = "Chocolate Island 3 - Bonus Block #1"
+chocolate_island_3_vine_block_1 = "Chocolate Island 3 - Vine Block #1"
+chocolate_island_3_life_block_1 = "Chocolate Island 3 - 1-Up Mushroom Block #1"
+chocolate_island_3_life_block_2 = "Chocolate Island 3 - 1-Up Mushroom Block #2"
+chocolate_island_3_life_block_3 = "Chocolate Island 3 - 1-Up Mushroom Block #3"
+chocolate_island_2_multi_coin_block_1 = "Chocolate Island 2 - Multi Coin Block #1"
+chocolate_island_2_invis_coin_block_1 = "Chocolate Island 2 - Invisible Coin Block #1"
+chocolate_island_2_yoshi_block_1 = "Chocolate Island 2 - Yoshi Block #1"
+chocolate_island_2_coin_block_1 = "Chocolate Island 2 - Coin Block #1"
+chocolate_island_2_coin_block_2 = "Chocolate Island 2 - Coin Block #2"
+chocolate_island_2_multi_coin_block_2 = "Chocolate Island 2 - Multi Coin Block #2"
+chocolate_island_2_powerup_block_1 = "Chocolate Island 2 - Powerup Block #1"
+chocolate_island_2_blue_pow_block_1 = "Chocolate Island 2 - Blue P-Switch Block #1"
+chocolate_island_2_yellow_block_1 = "Chocolate Island 2 - Yellow Switch Palace Block #1"
+chocolate_island_2_yellow_block_2 = "Chocolate Island 2 - Yellow Switch Palace Block #2"
+chocolate_island_2_green_block_1 = "Chocolate Island 2 - Green Switch Palace Block #1"
+chocolate_island_2_green_block_2 = "Chocolate Island 2 - Green Switch Palace Block #2"
+chocolate_island_2_green_block_3 = "Chocolate Island 2 - Green Switch Palace Block #3"
+chocolate_island_2_green_block_4 = "Chocolate Island 2 - Green Switch Palace Block #4"
+chocolate_island_2_green_block_5 = "Chocolate Island 2 - Green Switch Palace Block #5"
+chocolate_island_2_green_block_6 = "Chocolate Island 2 - Green Switch Palace Block #6"
+yoshis_island_castle_coin_block_1 = "#1 Iggy's Castle - Coin Block #1"
+yoshis_island_castle_coin_block_2 = "#1 Iggy's Castle - Coin Block #2"
+yoshis_island_castle_powerup_block_1 = "#1 Iggy's Castle - Powerup Block #1"
+yoshis_island_castle_coin_block_3 = "#1 Iggy's Castle - Coin Block #3"
+yoshis_island_castle_coin_block_4 = "#1 Iggy's Castle - Coin Block #4"
+yoshis_island_castle_flying_block_1 = "#1 Iggy's Castle - Flying Question Block #1"
+yoshis_island_4_yellow_block_1 = "Yoshi's Island 4 - Yellow Switch Palace Block #1"
+yoshis_island_4_powerup_block_1 = "Yoshi's Island 4 - Powerup Block #1"
+yoshis_island_4_multi_coin_block_1 = "Yoshi's Island 4 - Multi Coin Block #1"
+yoshis_island_4_star_block_1 = "Yoshi's Island 4 - Star Block #1"
+yoshis_island_3_yellow_block_1 = "Yoshi's Island 3 - Yellow Switch Palace Block #1"
+yoshis_island_3_yellow_block_2 = "Yoshi's Island 3 - Yellow Switch Palace Block #2"
+yoshis_island_3_yellow_block_3 = "Yoshi's Island 3 - Yellow Switch Palace Block #3"
+yoshis_island_3_yellow_block_4 = "Yoshi's Island 3 - Yellow Switch Palace Block #4"
+yoshis_island_3_yellow_block_5 = "Yoshi's Island 3 - Yellow Switch Palace Block #5"
+yoshis_island_3_yellow_block_6 = "Yoshi's Island 3 - Yellow Switch Palace Block #6"
+yoshis_island_3_yellow_block_7 = "Yoshi's Island 3 - Yellow Switch Palace Block #7"
+yoshis_island_3_yellow_block_8 = "Yoshi's Island 3 - Yellow Switch Palace Block #8"
+yoshis_island_3_yellow_block_9 = "Yoshi's Island 3 - Yellow Switch Palace Block #9"
+yoshis_island_3_coin_block_1 = "Yoshi's Island 3 - Coin Block #1"
+yoshis_island_3_yoshi_block_1 = "Yoshi's Island 3 - Yoshi Block #1"
+yoshis_island_3_coin_block_2 = "Yoshi's Island 3 - Coin Block #2"
+yoshis_island_3_powerup_block_1 = "Yoshi's Island 3 - Powerup Block #1"
+yoshis_island_3_yellow_block_10 = "Yoshi's Island 3 - Yellow Switch Palace Block #10"
+yoshis_island_3_yellow_block_11 = "Yoshi's Island 3 - Yellow Switch Palace Block #11"
+yoshis_island_3_yellow_block_12 = "Yoshi's Island 3 - Yellow Switch Palace Block #12"
+yoshis_island_3_bonus_block_1 = "Yoshi's Island 3 - Bonus Block #1"
+yoshis_island_1_flying_block_1 = "Yoshi's Island 1 - Flying Question Block #1"
+yoshis_island_1_yellow_block_1 = "Yoshi's Island 1 - Yellow Switch Palace Block #1"
+yoshis_island_1_life_block_1 = "Yoshi's Island 1 - 1-Up Mushroom Block #1"
+yoshis_island_1_powerup_block_1 = "Yoshi's Island 1 - Powerup Block #1"
+yoshis_island_2_flying_block_1 = "Yoshi's Island 2 - Flying Question Block #1"
+yoshis_island_2_flying_block_2 = "Yoshi's Island 2 - Flying Question Block #2"
+yoshis_island_2_flying_block_3 = "Yoshi's Island 2 - Flying Question Block #3"
+yoshis_island_2_flying_block_4 = "Yoshi's Island 2 - Flying Question Block #4"
+yoshis_island_2_flying_block_5 = "Yoshi's Island 2 - Flying Question Block #5"
+yoshis_island_2_flying_block_6 = "Yoshi's Island 2 - Flying Question Block #6"
+yoshis_island_2_coin_block_1 = "Yoshi's Island 2 - Coin Block #1"
+yoshis_island_2_yellow_block_1 = "Yoshi's Island 2 - Yellow Switch Palace Block #1"
+yoshis_island_2_coin_block_2 = "Yoshi's Island 2 - Coin Block #2"
+yoshis_island_2_coin_block_3 = "Yoshi's Island 2 - Coin Block #3"
+yoshis_island_2_yoshi_block_1 = "Yoshi's Island 2 - Yoshi Block #1"
+yoshis_island_2_coin_block_4 = "Yoshi's Island 2 - Coin Block #4"
+yoshis_island_2_yoshi_block_2 = "Yoshi's Island 2 - Yoshi Block #2"
+yoshis_island_2_coin_block_5 = "Yoshi's Island 2 - Coin Block #5"
+yoshis_island_2_vine_block_1 = "Yoshi's Island 2 - Vine Block #1"
+yoshis_island_2_yellow_block_2 = "Yoshi's Island 2 - Yellow Switch Palace Block #2"
+vanilla_ghost_house_powerup_block_1 = "Vanilla Ghost House - Powerup Block #1"
+vanilla_ghost_house_vine_block_1 = "Vanilla Ghost House - Vine Block #1"
+vanilla_ghost_house_powerup_block_2 = "Vanilla Ghost House - Powerup Block #2"
+vanilla_ghost_house_multi_coin_block_1 = "Vanilla Ghost House - Multi Coin Block #1"
+vanilla_ghost_house_blue_pow_block_1 = "Vanilla Ghost House - Blue P-Switch Block #1"
+vanilla_secret_1_coin_block_1 = "Vanilla Secret 1 - Coin Block #1"
+vanilla_secret_1_powerup_block_1 = "Vanilla Secret 1 - Powerup Block #1"
+vanilla_secret_1_multi_coin_block_1 = "Vanilla Secret 1 - Multi Coin Block #1"
+vanilla_secret_1_vine_block_1 = "Vanilla Secret 1 - Vine Block #1"
+vanilla_secret_1_vine_block_2 = "Vanilla Secret 1 - Vine Block #2"
+vanilla_secret_1_coin_block_2 = "Vanilla Secret 1 - Coin Block #2"
+vanilla_secret_1_coin_block_3 = "Vanilla Secret 1 - Coin Block #3"
+vanilla_secret_1_powerup_block_2 = "Vanilla Secret 1 - Powerup Block #2"
+vanilla_dome_3_coin_block_1 = "Vanilla Dome 3 - Coin Block #1"
+vanilla_dome_3_flying_block_1 = "Vanilla Dome 3 - Flying Question Block #1"
+vanilla_dome_3_flying_block_2 = "Vanilla Dome 3 - Flying Question Block #2"
+vanilla_dome_3_powerup_block_1 = "Vanilla Dome 3 - Powerup Block #1"
+vanilla_dome_3_flying_block_3 = "Vanilla Dome 3 - Flying Question Block #3"
+vanilla_dome_3_invis_coin_block_1 = "Vanilla Dome 3 - Invisible Coin Block #1"
+vanilla_dome_3_powerup_block_2 = "Vanilla Dome 3 - Powerup Block #2"
+vanilla_dome_3_multi_coin_block_1 = "Vanilla Dome 3 - Multi Coin Block #1"
+vanilla_dome_3_powerup_block_3 = "Vanilla Dome 3 - Powerup Block #3"
+vanilla_dome_3_yoshi_block_1 = "Vanilla Dome 3 - Yoshi Block #1"
+vanilla_dome_3_powerup_block_4 = "Vanilla Dome 3 - Powerup Block #4"
+vanilla_dome_3_pswitch_coin_block_1 = "Vanilla Dome 3 - P-Switch Coin Block #1"
+vanilla_dome_3_pswitch_coin_block_2 = "Vanilla Dome 3 - P-Switch Coin Block #2"
+vanilla_dome_3_pswitch_coin_block_3 = "Vanilla Dome 3 - P-Switch Coin Block #3"
+vanilla_dome_3_pswitch_coin_block_4 = "Vanilla Dome 3 - P-Switch Coin Block #4"
+vanilla_dome_3_pswitch_coin_block_5 = "Vanilla Dome 3 - P-Switch Coin Block #5"
+vanilla_dome_3_pswitch_coin_block_6 = "Vanilla Dome 3 - P-Switch Coin Block #6"
+donut_secret_2_directional_coin_block_1 = "Donut Secret 2 - Directional Coin Block #1"
+donut_secret_2_vine_block_1 = "Donut Secret 2 - Vine Block #1"
+donut_secret_2_star_block_1 = "Donut Secret 2 - Star Block #1"
+donut_secret_2_powerup_block_1 = "Donut Secret 2 - Powerup Block #1"
+donut_secret_2_star_block_2 = "Donut Secret 2 - Star Block #2"
+valley_of_bowser_4_yellow_block_1 = "Valley of Bowser 4 - Yellow Switch Palace Block #1"
+valley_of_bowser_4_powerup_block_1 = "Valley of Bowser 4 - Powerup Block #1"
+valley_of_bowser_4_vine_block_1 = "Valley of Bowser 4 - Vine Block #1"
+valley_of_bowser_4_yoshi_block_1 = "Valley of Bowser 4 - Yoshi Block #1"
+valley_of_bowser_4_life_block_1 = "Valley of Bowser 4 - 1-Up Mushroom Block #1"
+valley_of_bowser_4_powerup_block_2 = "Valley of Bowser 4 - Powerup Block #2"
+valley_castle_yellow_block_1 = "#7 Larry's Castle - Yellow Switch Palace Block #1"
+valley_castle_yellow_block_2 = "#7 Larry's Castle - Yellow Switch Palace Block #2"
+valley_castle_green_block_1 = "#7 Larry's Castle - Green Switch Palace Block #1"
+valley_fortress_green_block_1 = "Valley Fortress - Green Switch Palace Block #1"
+valley_fortress_yellow_block_1 = "Valley Fortress - Yellow Switch Palace Block #1"
+valley_of_bowser_3_powerup_block_1 = "Valley of Bowser 3 - Powerup Block #1"
+valley_of_bowser_3_powerup_block_2 = "Valley of Bowser 3 - Powerup Block #2"
+valley_ghost_house_pswitch_coin_block_1 = "Valley Ghost House - P-Switch Coin Block #1"
+valley_ghost_house_multi_coin_block_1 = "Valley Ghost House - Multi Coin Block #1"
+valley_ghost_house_powerup_block_1 = "Valley Ghost House - Powerup Block #1"
+valley_ghost_house_directional_coin_block_1 = "Valley Ghost House - Directional Coin Block #1"
+valley_of_bowser_2_powerup_block_1 = "Valley of Bowser 2 - Powerup Block #1"
+valley_of_bowser_2_yellow_block_1 = "Valley of Bowser 2 - Yellow Switch Palace Block #1"
+valley_of_bowser_2_powerup_block_2 = "Valley of Bowser 2 - Powerup Block #2"
+valley_of_bowser_2_wings_block_1 = "Valley of Bowser 2 - Wings Block #1"
+valley_of_bowser_1_green_block_1 = "Valley of Bowser 1 - Green Switch Palace Block #1"
+valley_of_bowser_1_invis_coin_block_1 = "Valley of Bowser 1 - Invisible Coin Block #1"
+valley_of_bowser_1_invis_coin_block_2 = "Valley of Bowser 1 - Invisible Coin Block #2"
+valley_of_bowser_1_invis_coin_block_3 = "Valley of Bowser 1 - Invisible Coin Block #3"
+valley_of_bowser_1_yellow_block_1 = "Valley of Bowser 1 - Yellow Switch Palace Block #1"
+valley_of_bowser_1_yellow_block_2 = "Valley of Bowser 1 - Yellow Switch Palace Block #2"
+valley_of_bowser_1_yellow_block_3 = "Valley of Bowser 1 - Yellow Switch Palace Block #3"
+valley_of_bowser_1_yellow_block_4 = "Valley of Bowser 1 - Yellow Switch Palace Block #4"
+valley_of_bowser_1_vine_block_1 = "Valley of Bowser 1 - Vine Block #1"
+chocolate_secret_powerup_block_1 = "Chocolate Secret - Powerup Block #1"
+chocolate_secret_powerup_block_2 = "Chocolate Secret - Powerup Block #2"
+vanilla_dome_2_coin_block_1 = "Vanilla Dome 2 - Coin Block #1"
+vanilla_dome_2_powerup_block_1 = "Vanilla Dome 2 - Powerup Block #1"
+vanilla_dome_2_coin_block_2 = "Vanilla Dome 2 - Coin Block #2"
+vanilla_dome_2_coin_block_3 = "Vanilla Dome 2 - Coin Block #3"
+vanilla_dome_2_vine_block_1 = "Vanilla Dome 2 - Vine Block #1"
+vanilla_dome_2_invis_life_block_1 = "Vanilla Dome 2 - Invisible 1-Up Mushroom Block #1"
+vanilla_dome_2_coin_block_4 = "Vanilla Dome 2 - Coin Block #4"
+vanilla_dome_2_coin_block_5 = "Vanilla Dome 2 - Coin Block #5"
+vanilla_dome_2_powerup_block_2 = "Vanilla Dome 2 - Powerup Block #2"
+vanilla_dome_2_powerup_block_3 = "Vanilla Dome 2 - Powerup Block #3"
+vanilla_dome_2_powerup_block_4 = "Vanilla Dome 2 - Powerup Block #4"
+vanilla_dome_2_powerup_block_5 = "Vanilla Dome 2 - Powerup Block #5"
+vanilla_dome_2_multi_coin_block_1 = "Vanilla Dome 2 - Multi Coin Block #1"
+vanilla_dome_2_multi_coin_block_2 = "Vanilla Dome 2 - Multi Coin Block #2"
+vanilla_dome_4_powerup_block_1 = "Vanilla Dome 4 - Powerup Block #1"
+vanilla_dome_4_powerup_block_2 = "Vanilla Dome 4 - Powerup Block #2"
+vanilla_dome_4_coin_block_1 = "Vanilla Dome 4 - Coin Block #1"
+vanilla_dome_4_coin_block_2 = "Vanilla Dome 4 - Coin Block #2"
+vanilla_dome_4_coin_block_3 = "Vanilla Dome 4 - Coin Block #3"
+vanilla_dome_4_life_block_1 = "Vanilla Dome 4 - 1-Up Mushroom Block #1"
+vanilla_dome_4_coin_block_4 = "Vanilla Dome 4 - Coin Block #4"
+vanilla_dome_4_coin_block_5 = "Vanilla Dome 4 - Coin Block #5"
+vanilla_dome_4_coin_block_6 = "Vanilla Dome 4 - Coin Block #6"
+vanilla_dome_4_coin_block_7 = "Vanilla Dome 4 - Coin Block #7"
+vanilla_dome_4_coin_block_8 = "Vanilla Dome 4 - Coin Block #8"
+vanilla_dome_1_flying_block_1 = "Vanilla Dome 1 - Flying Question Block #1"
+vanilla_dome_1_powerup_block_1 = "Vanilla Dome 1 - Powerup Block #1"
+vanilla_dome_1_powerup_block_2 = "Vanilla Dome 1 - Powerup Block #2"
+vanilla_dome_1_coin_block_1 = "Vanilla Dome 1 - Coin Block #1"
+vanilla_dome_1_life_block_1 = "Vanilla Dome 1 - 1-Up Mushroom Block #1"
+vanilla_dome_1_powerup_block_3 = "Vanilla Dome 1 - Powerup Block #3"
+vanilla_dome_1_vine_block_1 = "Vanilla Dome 1 - Vine Block #1"
+vanilla_dome_1_star_block_1 = "Vanilla Dome 1 - Star Block #1"
+vanilla_dome_1_powerup_block_4 = "Vanilla Dome 1 - Powerup Block #4"
+vanilla_dome_1_coin_block_2 = "Vanilla Dome 1 - Coin Block #2"
+vanilla_dome_castle_life_block_1 = "#3 Lemmy's Castle - 1-Up Mushroom Block #1"
+vanilla_dome_castle_life_block_2 = "#3 Lemmy's Castle - 1-Up Mushroom Block #2"
+vanilla_dome_castle_powerup_block_1 = "#3 Lemmy's Castle - Powerup Block #1"
+vanilla_dome_castle_life_block_3 = "#3 Lemmy's Castle - 1-Up Mushroom Block #3"
+vanilla_dome_castle_green_block_1 = "#3 Lemmy's Castle - Green Switch Palace Block #1"
+forest_ghost_house_coin_block_1 = "Forest Ghost House - Coin Block #1"
+forest_ghost_house_powerup_block_1 = "Forest Ghost House - Powerup Block #1"
+forest_ghost_house_flying_block_1 = "Forest Ghost House - Flying Question Block #1"
+forest_ghost_house_powerup_block_2 = "Forest Ghost House - Powerup Block #2"
+forest_ghost_house_life_block_1 = "Forest Ghost House - 1-Up Mushroom Block #1"
+forest_of_illusion_1_powerup_block_1 = "Forest of Illusion 1 - Powerup Block #1"
+forest_of_illusion_1_yoshi_block_1 = "Forest of Illusion 1 - Yoshi Block #1"
+forest_of_illusion_1_powerup_block_2 = "Forest of Illusion 1 - Powerup Block #2"
+forest_of_illusion_1_key_block_1 = "Forest of Illusion 1 - Key Block #1"
+forest_of_illusion_1_life_block_1 = "Forest of Illusion 1 - 1-Up Mushroom Block #1"
+forest_of_illusion_4_multi_coin_block_1 = "Forest of Illusion 4 - Multi Coin Block #1"
+forest_of_illusion_4_coin_block_1 = "Forest of Illusion 4 - Coin Block #1"
+forest_of_illusion_4_coin_block_2 = "Forest of Illusion 4 - Coin Block #2"
+forest_of_illusion_4_coin_block_3 = "Forest of Illusion 4 - Coin Block #3"
+forest_of_illusion_4_coin_block_4 = "Forest of Illusion 4 - Coin Block #4"
+forest_of_illusion_4_powerup_block_1 = "Forest of Illusion 4 - Powerup Block #1"
+forest_of_illusion_4_coin_block_5 = "Forest of Illusion 4 - Coin Block #5"
+forest_of_illusion_4_coin_block_6 = "Forest of Illusion 4 - Coin Block #6"
+forest_of_illusion_4_coin_block_7 = "Forest of Illusion 4 - Coin Block #7"
+forest_of_illusion_4_powerup_block_2 = "Forest of Illusion 4 - Powerup Block #2"
+forest_of_illusion_4_coin_block_8 = "Forest of Illusion 4 - Coin Block #8"
+forest_of_illusion_4_coin_block_9 = "Forest of Illusion 4 - Coin Block #9"
+forest_of_illusion_4_coin_block_10 = "Forest of Illusion 4 - Coin Block #10"
+forest_of_illusion_2_green_block_1 = "Forest of Illusion 2 - Green Switch Palace Block #1"
+forest_of_illusion_2_powerup_block_1 = "Forest of Illusion 2 - Powerup Block #1"
+forest_of_illusion_2_invis_coin_block_1 = "Forest of Illusion 2 - Invisible Coin Block #1"
+forest_of_illusion_2_invis_coin_block_2 = "Forest of Illusion 2 - Invisible Coin Block #2"
+forest_of_illusion_2_invis_life_block_1 = "Forest of Illusion 2 - Invisible 1-Up Mushroom Block #1"
+forest_of_illusion_2_invis_coin_block_3 = "Forest of Illusion 2 - Invisible Coin Block #3"
+forest_of_illusion_2_yellow_block_1 = "Forest of Illusion 2 - Yellow Switch Palace Block #1"
+forest_secret_powerup_block_1 = "Forest Secret Area - Powerup Block #1"
+forest_secret_powerup_block_2 = "Forest Secret Area - Powerup Block #2"
+forest_secret_life_block_1 = "Forest Secret Area - 1-Up Mushroom Block #1"
+forest_of_illusion_3_yoshi_block_1 = "Forest of Illusion 3 - Yoshi Block #1"
+forest_of_illusion_3_coin_block_1 = "Forest of Illusion 3 - Coin Block #1"
+forest_of_illusion_3_multi_coin_block_1 = "Forest of Illusion 3 - Multi Coin Block #1"
+forest_of_illusion_3_coin_block_2 = "Forest of Illusion 3 - Coin Block #2"
+forest_of_illusion_3_multi_coin_block_2 = "Forest of Illusion 3 - Multi Coin Block #2"
+forest_of_illusion_3_coin_block_3 = "Forest of Illusion 3 - Coin Block #3"
+forest_of_illusion_3_coin_block_4 = "Forest of Illusion 3 - Coin Block #4"
+forest_of_illusion_3_coin_block_5 = "Forest of Illusion 3 - Coin Block #5"
+forest_of_illusion_3_coin_block_6 = "Forest of Illusion 3 - Coin Block #6"
+forest_of_illusion_3_coin_block_7 = "Forest of Illusion 3 - Coin Block #7"
+forest_of_illusion_3_coin_block_8 = "Forest of Illusion 3 - Coin Block #8"
+forest_of_illusion_3_coin_block_9 = "Forest of Illusion 3 - Coin Block #9"
+forest_of_illusion_3_coin_block_10 = "Forest of Illusion 3 - Coin Block #10"
+forest_of_illusion_3_coin_block_11 = "Forest of Illusion 3 - Coin Block #11"
+forest_of_illusion_3_coin_block_12 = "Forest of Illusion 3 - Coin Block #12"
+forest_of_illusion_3_coin_block_13 = "Forest of Illusion 3 - Coin Block #13"
+forest_of_illusion_3_coin_block_14 = "Forest of Illusion 3 - Coin Block #14"
+forest_of_illusion_3_coin_block_15 = "Forest of Illusion 3 - Coin Block #15"
+forest_of_illusion_3_coin_block_16 = "Forest of Illusion 3 - Coin Block #16"
+forest_of_illusion_3_coin_block_17 = "Forest of Illusion 3 - Coin Block #17"
+forest_of_illusion_3_coin_block_18 = "Forest of Illusion 3 - Coin Block #18"
+forest_of_illusion_3_coin_block_19 = "Forest of Illusion 3 - Coin Block #19"
+forest_of_illusion_3_coin_block_20 = "Forest of Illusion 3 - Coin Block #20"
+forest_of_illusion_3_coin_block_21 = "Forest of Illusion 3 - Coin Block #21"
+forest_of_illusion_3_coin_block_22 = "Forest of Illusion 3 - Coin Block #22"
+forest_of_illusion_3_coin_block_23 = "Forest of Illusion 3 - Coin Block #23"
+forest_of_illusion_3_coin_block_24 = "Forest of Illusion 3 - Coin Block #24"
+special_zone_8_yoshi_block_1 = "Funky - Yoshi Block #1"
+special_zone_8_coin_block_1 = "Funky - Coin Block #1"
+special_zone_8_coin_block_2 = "Funky - Coin Block #2"
+special_zone_8_coin_block_3 = "Funky - Coin Block #3"
+special_zone_8_coin_block_4 = "Funky - Coin Block #4"
+special_zone_8_coin_block_5 = "Funky - Coin Block #5"
+special_zone_8_blue_pow_block_1 = "Funky - Blue P-Switch Block #1"
+special_zone_8_powerup_block_1 = "Funky - Powerup Block #1"
+special_zone_8_star_block_1 = "Funky - Star Block #1"
+special_zone_8_coin_block_6 = "Funky - Coin Block #6"
+special_zone_8_coin_block_7 = "Funky - Coin Block #7"
+special_zone_8_coin_block_8 = "Funky - Coin Block #8"
+special_zone_8_coin_block_9 = "Funky - Coin Block #9"
+special_zone_8_coin_block_10 = "Funky - Coin Block #10"
+special_zone_8_coin_block_11 = "Funky - Coin Block #11"
+special_zone_8_coin_block_12 = "Funky - Coin Block #12"
+special_zone_8_coin_block_13 = "Funky - Coin Block #13"
+special_zone_8_coin_block_14 = "Funky - Coin Block #14"
+special_zone_8_coin_block_15 = "Funky - Coin Block #15"
+special_zone_8_coin_block_16 = "Funky - Coin Block #16"
+special_zone_8_coin_block_17 = "Funky - Coin Block #17"
+special_zone_8_coin_block_18 = "Funky - Coin Block #18"
+special_zone_8_multi_coin_block_1 = "Funky - Multi Coin Block #1"
+special_zone_8_coin_block_19 = "Funky - Coin Block #19"
+special_zone_8_coin_block_20 = "Funky - Coin Block #20"
+special_zone_8_coin_block_21 = "Funky - Coin Block #21"
+special_zone_8_coin_block_22 = "Funky - Coin Block #22"
+special_zone_8_coin_block_23 = "Funky - Coin Block #23"
+special_zone_8_powerup_block_2 = "Funky - Powerup Block #2"
+special_zone_8_flying_block_1 = "Funky - Flying Question Block #1"
+special_zone_7_powerup_block_1 = "Outrageous - Powerup Block #1"
+special_zone_7_yoshi_block_1 = "Outrageous - Yoshi Block #1"
+special_zone_7_coin_block_1 = "Outrageous - Coin Block #1"
+special_zone_7_powerup_block_2 = "Outrageous - Powerup Block #2"
+special_zone_7_coin_block_2 = "Outrageous - Coin Block #2"
+special_zone_6_powerup_block_1 = "Mondo - Powerup Block #1"
+special_zone_6_coin_block_1 = "Mondo - Coin Block #1"
+special_zone_6_coin_block_2 = "Mondo - Coin Block #2"
+special_zone_6_yoshi_block_1 = "Mondo - Yoshi Block #1"
+special_zone_6_life_block_1 = "Mondo - 1-Up Mushroom Block #1"
+special_zone_6_multi_coin_block_1 = "Mondo - Multi Coin Block #1"
+special_zone_6_coin_block_3 = "Mondo - Coin Block #3"
+special_zone_6_coin_block_4 = "Mondo - Coin Block #4"
+special_zone_6_coin_block_5 = "Mondo - Coin Block #5"
+special_zone_6_coin_block_6 = "Mondo - Coin Block #6"
+special_zone_6_coin_block_7 = "Mondo - Coin Block #7"
+special_zone_6_coin_block_8 = "Mondo - Coin Block #8"
+special_zone_6_coin_block_9 = "Mondo - Coin Block #9"
+special_zone_6_coin_block_10 = "Mondo - Coin Block #10"
+special_zone_6_coin_block_11 = "Mondo - Coin Block #11"
+special_zone_6_coin_block_12 = "Mondo - Coin Block #12"
+special_zone_6_coin_block_13 = "Mondo - Coin Block #13"
+special_zone_6_coin_block_14 = "Mondo - Coin Block #14"
+special_zone_6_coin_block_15 = "Mondo - Coin Block #15"
+special_zone_6_coin_block_16 = "Mondo - Coin Block #16"
+special_zone_6_coin_block_17 = "Mondo - Coin Block #17"
+special_zone_6_coin_block_18 = "Mondo - Coin Block #18"
+special_zone_6_coin_block_19 = "Mondo - Coin Block #19"
+special_zone_6_coin_block_20 = "Mondo - Coin Block #20"
+special_zone_6_coin_block_21 = "Mondo - Coin Block #21"
+special_zone_6_coin_block_22 = "Mondo - Coin Block #22"
+special_zone_6_coin_block_23 = "Mondo - Coin Block #23"
+special_zone_6_coin_block_24 = "Mondo - Coin Block #24"
+special_zone_6_coin_block_25 = "Mondo - Coin Block #25"
+special_zone_6_coin_block_26 = "Mondo - Coin Block #26"
+special_zone_6_coin_block_27 = "Mondo - Coin Block #27"
+special_zone_6_coin_block_28 = "Mondo - Coin Block #28"
+special_zone_6_powerup_block_2 = "Mondo - Powerup Block #2"
+special_zone_6_coin_block_29 = "Mondo - Coin Block #29"
+special_zone_6_coin_block_30 = "Mondo - Coin Block #30"
+special_zone_6_coin_block_31 = "Mondo - Coin Block #31"
+special_zone_6_coin_block_32 = "Mondo - Coin Block #32"
+special_zone_6_coin_block_33 = "Mondo - Coin Block #33"
+special_zone_5_yoshi_block_1 = "Groovy - Yoshi Block #1"
+special_zone_1_vine_block_1 = "Gnarly - Vine Block #1"
+special_zone_1_vine_block_2 = "Gnarly - Vine Block #2"
+special_zone_1_vine_block_3 = "Gnarly - Vine Block #3"
+special_zone_1_vine_block_4 = "Gnarly - Vine Block #4"
+special_zone_1_life_block_1 = "Gnarly - 1-Up Mushroom Block #1"
+special_zone_1_vine_block_5 = "Gnarly - Vine Block #5"
+special_zone_1_blue_pow_block_1 = "Gnarly - Blue P-Switch Block #1"
+special_zone_1_vine_block_6 = "Gnarly - Vine Block #6"
+special_zone_1_powerup_block_1 = "Gnarly - Powerup Block #1"
+special_zone_1_pswitch_coin_block_1 = "Gnarly - P-Switch Coin Block #1"
+special_zone_1_pswitch_coin_block_2 = "Gnarly - P-Switch Coin Block #2"
+special_zone_1_pswitch_coin_block_3 = "Gnarly - P-Switch Coin Block #3"
+special_zone_1_pswitch_coin_block_4 = "Gnarly - P-Switch Coin Block #4"
+special_zone_1_pswitch_coin_block_5 = "Gnarly - P-Switch Coin Block #5"
+special_zone_1_pswitch_coin_block_6 = "Gnarly - P-Switch Coin Block #6"
+special_zone_1_pswitch_coin_block_7 = "Gnarly - P-Switch Coin Block #7"
+special_zone_1_pswitch_coin_block_8 = "Gnarly - P-Switch Coin Block #8"
+special_zone_1_pswitch_coin_block_9 = "Gnarly - P-Switch Coin Block #9"
+special_zone_1_pswitch_coin_block_10 = "Gnarly - P-Switch Coin Block #10"
+special_zone_1_pswitch_coin_block_11 = "Gnarly - P-Switch Coin Block #11"
+special_zone_1_pswitch_coin_block_12 = "Gnarly - P-Switch Coin Block #12"
+special_zone_1_pswitch_coin_block_13 = "Gnarly - P-Switch Coin Block #13"
+special_zone_2_powerup_block_1 = "Tubular - Powerup Block #1"
+special_zone_2_coin_block_1 = "Tubular - Coin Block #1"
+special_zone_2_coin_block_2 = "Tubular - Coin Block #2"
+special_zone_2_powerup_block_2 = "Tubular - Powerup Block #2"
+special_zone_2_coin_block_3 = "Tubular - Coin Block #3"
+special_zone_2_coin_block_4 = "Tubular - Coin Block #4"
+special_zone_2_powerup_block_3 = "Tubular - Powerup Block #3"
+special_zone_2_multi_coin_block_1 = "Tubular - Multi Coin Block #1"
+special_zone_2_coin_block_5 = "Tubular - Coin Block #5"
+special_zone_2_coin_block_6 = "Tubular - Coin Block #6"
+special_zone_3_powerup_block_1 = "Way Cool - Powerup Block #1"
+special_zone_3_yoshi_block_1 = "Way Cool - Yoshi Block #1"
+special_zone_3_wings_block_1 = "Way Cool - Wings Block #1"
+special_zone_4_powerup_block_1 = "Awesome - Powerup Block #1"
+special_zone_4_star_block_1 = "Awesome - Star Block #1"
+star_road_2_star_block_1 = "Star Road 2 - Star Block #1"
+star_road_3_key_block_1 = "Star Road 3 - Key Block #1"
+star_road_4_powerup_block_1 = "Star Road 4 - Powerup Block #1"
+star_road_4_green_block_1 = "Star Road 4 - Green Switch Palace Block #1"
+star_road_4_green_block_2 = "Star Road 4 - Green Switch Palace Block #2"
+star_road_4_green_block_3 = "Star Road 4 - Green Switch Palace Block #3"
+star_road_4_green_block_4 = "Star Road 4 - Green Switch Palace Block #4"
+star_road_4_green_block_5 = "Star Road 4 - Green Switch Palace Block #5"
+star_road_4_green_block_6 = "Star Road 4 - Green Switch Palace Block #6"
+star_road_4_green_block_7 = "Star Road 4 - Green Switch Palace Block #7"
+star_road_4_key_block_1 = "Star Road 4 - Key Block #1"
+star_road_5_directional_coin_block_1 = "Star Road 5 - Directional Coin Block #1"
+star_road_5_life_block_1 = "Star Road 5 - 1-Up Mushroom Block #1"
+star_road_5_vine_block_1 = "Star Road 5 - Vine Block #1"
+star_road_5_yellow_block_1 = "Star Road 5 - Yellow Switch Palace Block #1"
+star_road_5_yellow_block_2 = "Star Road 5 - Yellow Switch Palace Block #2"
+star_road_5_yellow_block_3 = "Star Road 5 - Yellow Switch Palace Block #3"
+star_road_5_yellow_block_4 = "Star Road 5 - Yellow Switch Palace Block #4"
+star_road_5_yellow_block_5 = "Star Road 5 - Yellow Switch Palace Block #5"
+star_road_5_yellow_block_6 = "Star Road 5 - Yellow Switch Palace Block #6"
+star_road_5_yellow_block_7 = "Star Road 5 - Yellow Switch Palace Block #7"
+star_road_5_yellow_block_8 = "Star Road 5 - Yellow Switch Palace Block #8"
+star_road_5_yellow_block_9 = "Star Road 5 - Yellow Switch Palace Block #9"
+star_road_5_yellow_block_10 = "Star Road 5 - Yellow Switch Palace Block #10"
+star_road_5_yellow_block_11 = "Star Road 5 - Yellow Switch Palace Block #11"
+star_road_5_yellow_block_12 = "Star Road 5 - Yellow Switch Palace Block #12"
+star_road_5_yellow_block_13 = "Star Road 5 - Yellow Switch Palace Block #13"
+star_road_5_yellow_block_14 = "Star Road 5 - Yellow Switch Palace Block #14"
+star_road_5_yellow_block_15 = "Star Road 5 - Yellow Switch Palace Block #15"
+star_road_5_yellow_block_16 = "Star Road 5 - Yellow Switch Palace Block #16"
+star_road_5_yellow_block_17 = "Star Road 5 - Yellow Switch Palace Block #17"
+star_road_5_yellow_block_18 = "Star Road 5 - Yellow Switch Palace Block #18"
+star_road_5_yellow_block_19 = "Star Road 5 - Yellow Switch Palace Block #19"
+star_road_5_yellow_block_20 = "Star Road 5 - Yellow Switch Palace Block #20"
+star_road_5_green_block_1 = "Star Road 5 - Green Switch Palace Block #1"
+star_road_5_green_block_2 = "Star Road 5 - Green Switch Palace Block #2"
+star_road_5_green_block_3 = "Star Road 5 - Green Switch Palace Block #3"
+star_road_5_green_block_4 = "Star Road 5 - Green Switch Palace Block #4"
+star_road_5_green_block_5 = "Star Road 5 - Green Switch Palace Block #5"
+star_road_5_green_block_6 = "Star Road 5 - Green Switch Palace Block #6"
+star_road_5_green_block_7 = "Star Road 5 - Green Switch Palace Block #7"
+star_road_5_green_block_8 = "Star Road 5 - Green Switch Palace Block #8"
+star_road_5_green_block_9 = "Star Road 5 - Green Switch Palace Block #9"
+star_road_5_green_block_10 = "Star Road 5 - Green Switch Palace Block #10"
+star_road_5_green_block_11 = "Star Road 5 - Green Switch Palace Block #11"
+star_road_5_green_block_12 = "Star Road 5 - Green Switch Palace Block #12"
+star_road_5_green_block_13 = "Star Road 5 - Green Switch Palace Block #13"
+star_road_5_green_block_14 = "Star Road 5 - Green Switch Palace Block #14"
+star_road_5_green_block_15 = "Star Road 5 - Green Switch Palace Block #15"
+star_road_5_green_block_16 = "Star Road 5 - Green Switch Palace Block #16"
+star_road_5_green_block_17 = "Star Road 5 - Green Switch Palace Block #17"
+star_road_5_green_block_18 = "Star Road 5 - Green Switch Palace Block #18"
+star_road_5_green_block_19 = "Star Road 5 - Green Switch Palace Block #19"
+star_road_5_green_block_20 = "Star Road 5 - Green Switch Palace Block #20"
diff --git a/worlds/smw/Names/TextBox.py b/worlds/smw/Names/TextBox.py
index cecf088661..2302a5f85f 100644
--- a/worlds/smw/Names/TextBox.py
+++ b/worlds/smw/Names/TextBox.py
@@ -1,5 +1,5 @@
-from BaseClasses import MultiWorld
+from worlds.AutoWorld import World
import math
@@ -63,21 +63,23 @@ def generate_text_box(input_string):
return out_bytes
-def generate_goal_text(world: MultiWorld, player: int):
+def generate_goal_text(world: World):
out_array = bytearray()
- if world.goal[player] == "yoshi_egg_hunt":
- required_yoshi_eggs = max(math.floor(
- world.number_of_yoshi_eggs[player].value * (world.percentage_of_yoshi_eggs[player].value / 100.0)), 1)
+ if world.options.goal == "yoshi_egg_hunt":
+ required_yoshi_eggs = world.required_egg_count
+ actual_yoshi_eggs = world.actual_egg_count
out_array += bytearray([0x9F, 0x9F])
out_array += string_to_bytes(" You must acquire")
out_array[-1] += 0x80
- out_array += string_to_bytes(f' {required_yoshi_eggs:02} Yoshi Eggs,')
+ out_array += string_to_bytes(f' {required_yoshi_eggs:03} of {actual_yoshi_eggs:03}')
+ out_array[-1] += 0x80
+ out_array += string_to_bytes(f' Yoshi Eggs,')
out_array[-1] += 0x80
out_array += string_to_bytes("then return here.")
out_array[-1] += 0x80
- out_array += bytearray([0x9F, 0x9F, 0x9F])
+ out_array += bytearray([0x9F, 0x9F])
else:
- bosses_required = world.bosses_required[player].value
+ bosses_required = world.options.bosses_required.value
out_array += bytearray([0x9F, 0x9F])
out_array += string_to_bytes(" You must defeat")
out_array[-1] += 0x80
diff --git a/worlds/smw/Options.py b/worlds/smw/Options.py
index 60135896c8..ab7fcccdba 100644
--- a/worlds/smw/Options.py
+++ b/worlds/smw/Options.py
@@ -1,6 +1,6 @@
-import typing
+from dataclasses import dataclass
-from Options import Choice, Range, Option, Toggle, DeathLink, DefaultOnToggle, OptionList
+from Options import Choice, Range, Toggle, DeathLink, DefaultOnToggle, PerGameCommonOptions
class Goal(Choice):
@@ -27,11 +27,13 @@ class BossesRequired(Range):
class NumberOfYoshiEggs(Range):
"""
- How many Yoshi Eggs are in the pool for Yoshi Egg Hunt
+ Maximum possible number of Yoshi Eggs that will be in the item pool
+ If fewer available locations exist in the pool than this number, the number of available locations will be used instead.
+ Required Percentage of Yoshi Eggs will be calculated based off of that number.
"""
- display_name = "Total Number of Yoshi Eggs"
+ display_name = "Max Number of Yoshi Eggs"
range_start = 1
- range_end = 80
+ range_end = 255
default = 50
@@ -52,6 +54,40 @@ class DragonCoinChecks(Toggle):
display_name = "Dragon Coin Checks"
+class MoonChecks(Toggle):
+ """
+ Whether collecting a 3-Up Moon in a level will grant a check
+ """
+ display_name = "3up Moon Checks"
+
+
+class Hidden1UpChecks(Toggle):
+ """
+ Whether collecting a hidden 1-Up mushroom in a level will grant a check
+ These checks are considered cryptic as there's no actual indicator that they're in their respective places
+ Enable this option at your own risk
+ """
+ display_name = "Hidden 1-Up Checks"
+
+
+class BonusBlockChecks(Toggle):
+ """
+ Whether collecting a 1-Up mushroom from a Bonus Block in a level will grant a check
+ """
+ display_name = "Bonus Block Checks"
+
+
+class Blocksanity(Toggle):
+ """
+ Whether hitting a block with an item or coin inside will grant a check
+ Note that some blocks are excluded due to how the option and the game works!
+ Exclusion list:
+ * Blocks in Top Secret Area & Front Door/Bowser Castle
+ * Blocks that are unreachable unless you glitch your way in
+ """
+ display_name = "Blocksanity"
+
+
class BowserCastleDoors(Choice):
"""
How the doors of Bowser's Castle behave
@@ -127,16 +163,6 @@ class SwapDonutGhostHouseExits(Toggle):
display_name = "Swap Donut GH Exits"
-class DisplaySentItemPopups(Choice):
- """
- What messages to display in-game for items sent
- """
- display_name = "Display Sent Item Popups"
- option_none = 0
- option_all = 1
- default = 1
-
-
class DisplayReceivedItemPopups(Choice):
"""
What messages to display in-game for items received
@@ -145,7 +171,18 @@ class DisplayReceivedItemPopups(Choice):
option_none = 0
option_all = 1
option_progression = 2
- default = 2
+ option_progression_minus_yoshi_eggs = 3
+ default = 3
+
+
+class JunkFillPercentage(Range):
+ """
+ Replace a percentage of non-required Yoshi Eggs in the item pool with random junk items (only applicable on Yoshi Egg Hunt goal)
+ """
+ display_name = "Junk Fill Percentage"
+ range_start = 0
+ range_end = 100
+ default = 0
class TrapFillPercentage(Range):
@@ -197,6 +234,20 @@ class TimerTrapWeight(BaseTrapWeight):
display_name = "Timer Trap Weight"
+class ReverseTrapWeight(BaseTrapWeight):
+ """
+ Likelihood of a receiving a trap which causes the controls to be reversed in the current level
+ """
+ display_name = "Reverse Trap Weight"
+
+
+class ThwimpTrapWeight(BaseTrapWeight):
+ """
+ Likelihood of a receiving a trap which causes a Thwimp to spawn above the player
+ """
+ display_name = "Thwimp Trap Weight"
+
+
class Autosave(DefaultOnToggle):
"""
Whether a save prompt will appear after every level
@@ -239,6 +290,21 @@ class MusicShuffle(Choice):
default = 0
+class SFXShuffle(Choice):
+ """
+ Shuffles almost every instance of sound effect playback
+ Archipelago elements that play sound effects aren't randomized
+ None: No SFX are shuffled
+ Full: Each individual SFX call has a random SFX
+ Singularity: The entire game uses one SFX for every SFX call
+ """
+ display_name = "Sound Effect Shuffle"
+ option_none = 0
+ option_full = 1
+ option_singularity = 2
+ default = 0
+
+
class MarioPalette(Choice):
"""
Mario palette color
@@ -255,25 +321,32 @@ class MarioPalette(Choice):
default = 0
-class ForegroundPaletteShuffle(Toggle):
+class LevelPaletteShuffle(Choice):
"""
- Whether to shuffle level foreground palettes
+ Whether to shuffle level palettes
+ Off: Do not shuffle palettes
+ On Legacy: Uses only the palette sets from the original game
+ On Curated: Uses custom, hand-crafted palette sets
"""
- display_name = "Foreground Palette Shuffle"
+ display_name = "Level Palette Shuffle"
+ option_off = 0
+ option_on_legacy = 1
+ option_on_curated = 2
+ default = 0
-class BackgroundPaletteShuffle(Toggle):
- """
- Whether to shuffle level background palettes
- """
- display_name = "Background Palette Shuffle"
-
-
-class OverworldPaletteShuffle(Toggle):
+class OverworldPaletteShuffle(Choice):
"""
Whether to shuffle overworld palettes
+ Off: Do not shuffle palettes
+ On Legacy: Uses only the palette sets from the original game
+ On Curated: Uses custom, hand-crafted palette sets
"""
display_name = "Overworld Palette Shuffle"
+ option_off = 0
+ option_on_legacy = 1
+ option_on_curated = 2
+ default = 0
class StartingLifeCount(Range):
@@ -286,34 +359,39 @@ class StartingLifeCount(Range):
default = 5
-
-smw_options: typing.Dict[str, type(Option)] = {
- "death_link": DeathLink,
- "goal": Goal,
- "bosses_required": BossesRequired,
- "number_of_yoshi_eggs": NumberOfYoshiEggs,
- "percentage_of_yoshi_eggs": PercentageOfYoshiEggs,
- "dragon_coin_checks": DragonCoinChecks,
- "bowser_castle_doors": BowserCastleDoors,
- "bowser_castle_rooms": BowserCastleRooms,
- "level_shuffle": LevelShuffle,
- "exclude_special_zone": ExcludeSpecialZone,
- "boss_shuffle": BossShuffle,
- "swap_donut_gh_exits": SwapDonutGhostHouseExits,
- #"display_sent_item_popups": DisplaySentItemPopups,
- "display_received_item_popups": DisplayReceivedItemPopups,
- "trap_fill_percentage": TrapFillPercentage,
- "ice_trap_weight": IceTrapWeight,
- "stun_trap_weight": StunTrapWeight,
- "literature_trap_weight": LiteratureTrapWeight,
- "timer_trap_weight": TimerTrapWeight,
- "autosave": Autosave,
- "early_climb": EarlyClimb,
- "overworld_speed": OverworldSpeed,
- "music_shuffle": MusicShuffle,
- "mario_palette": MarioPalette,
- "foreground_palette_shuffle": ForegroundPaletteShuffle,
- "background_palette_shuffle": BackgroundPaletteShuffle,
- "overworld_palette_shuffle": OverworldPaletteShuffle,
- "starting_life_count": StartingLifeCount,
-}
+@dataclass
+class SMWOptions(PerGameCommonOptions):
+ death_link: DeathLink
+ goal: Goal
+ bosses_required: BossesRequired
+ max_yoshi_egg_cap: NumberOfYoshiEggs
+ percentage_of_yoshi_eggs: PercentageOfYoshiEggs
+ dragon_coin_checks: DragonCoinChecks
+ moon_checks: MoonChecks
+ hidden_1up_checks: Hidden1UpChecks
+ bonus_block_checks: BonusBlockChecks
+ blocksanity: Blocksanity
+ bowser_castle_doors: BowserCastleDoors
+ bowser_castle_rooms: BowserCastleRooms
+ level_shuffle: LevelShuffle
+ exclude_special_zone: ExcludeSpecialZone
+ boss_shuffle: BossShuffle
+ swap_donut_gh_exits: SwapDonutGhostHouseExits
+ display_received_item_popups: DisplayReceivedItemPopups
+ junk_fill_percentage: JunkFillPercentage
+ trap_fill_percentage: TrapFillPercentage
+ ice_trap_weight: IceTrapWeight
+ stun_trap_weight: StunTrapWeight
+ literature_trap_weight: LiteratureTrapWeight
+ timer_trap_weight: TimerTrapWeight
+ reverse_trap_weight: ReverseTrapWeight
+ thwimp_trap_weight: ThwimpTrapWeight
+ autosave: Autosave
+ early_climb: EarlyClimb
+ overworld_speed: OverworldSpeed
+ music_shuffle: MusicShuffle
+ sfx_shuffle: SFXShuffle
+ mario_palette: MarioPalette
+ level_palette_shuffle: LevelPaletteShuffle
+ overworld_palette_shuffle: OverworldPaletteShuffle
+ starting_life_count: StartingLifeCount
diff --git a/worlds/smw/Regions.py b/worlds/smw/Regions.py
index 885f209aa7..2f8a128a56 100644
--- a/worlds/smw/Regions.py
+++ b/worlds/smw/Regions.py
@@ -1,467 +1,470 @@
import typing
-from BaseClasses import MultiWorld, Region, Entrance
+from BaseClasses import CollectionState, MultiWorld, Region, Entrance
from .Locations import SMWLocation
from .Levels import level_info_dict
from .Names import LocationName, ItemName
from worlds.generic.Rules import add_rule, set_rule
+from worlds.AutoWorld import World
-def create_regions(world, player: int, active_locations):
- menu_region = create_region(world, player, active_locations, 'Menu', None)
+def create_regions(world: World, active_locations):
+ multiworld: MultiWorld = world.multiworld
+ player: int = world.player
- yoshis_island_region = create_region(world, player, active_locations, LocationName.yoshis_island_region, None)
+ menu_region = create_region(multiworld, player, active_locations, 'Menu', None)
+ yoshis_island_region = create_region(multiworld, player, active_locations, LocationName.yoshis_island_region, None)
- yoshis_house_tile = create_region(world, player, active_locations, LocationName.yoshis_house_tile, None)
+ yoshis_house_tile = create_region(multiworld, player, active_locations, LocationName.yoshis_house_tile, None)
yoshis_house_region_locations = []
- if world.goal[player] == "yoshi_egg_hunt":
+ if world.options.goal == "yoshi_egg_hunt":
yoshis_house_region_locations.append(LocationName.yoshis_house)
- yoshis_house_region = create_region(world, player, active_locations, LocationName.yoshis_house,
+ yoshis_house_region = create_region(multiworld, player, active_locations, LocationName.yoshis_house,
yoshis_house_region_locations)
- yoshis_island_1_tile = create_region(world, player, active_locations, LocationName.yoshis_island_1_tile, None)
- yoshis_island_1_region = create_region(world, player, active_locations, LocationName.yoshis_island_1_region, None)
- yoshis_island_1_exit_1 = create_region(world, player, active_locations, LocationName.yoshis_island_1_exit_1,
+ yoshis_island_1_tile = create_region(multiworld, player, active_locations, LocationName.yoshis_island_1_tile, None)
+ yoshis_island_1_region = create_region(multiworld, player, active_locations, LocationName.yoshis_island_1_region, None)
+ yoshis_island_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.yoshis_island_1_exit_1,
[LocationName.yoshis_island_1_exit_1])
- yoshis_island_2_tile = create_region(world, player, active_locations, LocationName.yoshis_island_2_tile, None)
- yoshis_island_2_region = create_region(world, player, active_locations, LocationName.yoshis_island_2_region, None)
- yoshis_island_2_exit_1 = create_region(world, player, active_locations, LocationName.yoshis_island_2_exit_1,
+ yoshis_island_2_tile = create_region(multiworld, player, active_locations, LocationName.yoshis_island_2_tile, None)
+ yoshis_island_2_region = create_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, None)
+ yoshis_island_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.yoshis_island_2_exit_1,
[LocationName.yoshis_island_2_exit_1])
- yoshis_island_3_tile = create_region(world, player, active_locations, LocationName.yoshis_island_3_tile, None)
- yoshis_island_3_region = create_region(world, player, active_locations, LocationName.yoshis_island_3_region, None)
- yoshis_island_3_exit_1 = create_region(world, player, active_locations, LocationName.yoshis_island_3_exit_1,
+ yoshis_island_3_tile = create_region(multiworld, player, active_locations, LocationName.yoshis_island_3_tile, None)
+ yoshis_island_3_region = create_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, None)
+ yoshis_island_3_exit_1 = create_region(multiworld, player, active_locations, LocationName.yoshis_island_3_exit_1,
[LocationName.yoshis_island_3_exit_1])
- yoshis_island_4_tile = create_region(world, player, active_locations, LocationName.yoshis_island_4_tile, None)
- yoshis_island_4_region = create_region(world, player, active_locations, LocationName.yoshis_island_4_region, None)
- yoshis_island_4_exit_1 = create_region(world, player, active_locations, LocationName.yoshis_island_4_exit_1,
+ yoshis_island_4_tile = create_region(multiworld, player, active_locations, LocationName.yoshis_island_4_tile, None)
+ yoshis_island_4_region = create_region(multiworld, player, active_locations, LocationName.yoshis_island_4_region, None)
+ yoshis_island_4_exit_1 = create_region(multiworld, player, active_locations, LocationName.yoshis_island_4_exit_1,
[LocationName.yoshis_island_4_exit_1])
- yoshis_island_castle_tile = create_region(world, player, active_locations, LocationName.yoshis_island_castle_tile, None)
- yoshis_island_castle_region = create_region(world, player, active_locations, LocationName.yoshis_island_castle_region, None)
- yoshis_island_castle = create_region(world, player, active_locations, LocationName.yoshis_island_castle,
+ yoshis_island_castle_tile = create_region(multiworld, player, active_locations, LocationName.yoshis_island_castle_tile, None)
+ yoshis_island_castle_region = create_region(multiworld, player, active_locations, LocationName.yoshis_island_castle_region, None)
+ yoshis_island_castle = create_region(multiworld, player, active_locations, LocationName.yoshis_island_castle,
[LocationName.yoshis_island_castle, LocationName.yoshis_island_koopaling])
- yellow_switch_palace_tile = create_region(world, player, active_locations, LocationName.yellow_switch_palace_tile, None)
- yellow_switch_palace = create_region(world, player, active_locations, LocationName.yellow_switch_palace,
+ yellow_switch_palace_tile = create_region(multiworld, player, active_locations, LocationName.yellow_switch_palace_tile, None)
+ yellow_switch_palace = create_region(multiworld, player, active_locations, LocationName.yellow_switch_palace,
[LocationName.yellow_switch_palace])
- donut_plains_1_tile = create_region(world, player, active_locations, LocationName.donut_plains_1_tile, None)
- donut_plains_1_region = create_region(world, player, active_locations, LocationName.donut_plains_1_region, None)
- donut_plains_1_exit_1 = create_region(world, player, active_locations, LocationName.donut_plains_1_exit_1,
+ donut_plains_1_tile = create_region(multiworld, player, active_locations, LocationName.donut_plains_1_tile, None)
+ donut_plains_1_region = create_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, None)
+ donut_plains_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.donut_plains_1_exit_1,
[LocationName.donut_plains_1_exit_1])
- donut_plains_1_exit_2 = create_region(world, player, active_locations, LocationName.donut_plains_1_exit_2,
+ donut_plains_1_exit_2 = create_region(multiworld, player, active_locations, LocationName.donut_plains_1_exit_2,
[LocationName.donut_plains_1_exit_2])
- donut_plains_2_tile = create_region(world, player, active_locations, LocationName.donut_plains_2_tile, None)
- donut_plains_2_region = create_region(world, player, active_locations, LocationName.donut_plains_2_region, None)
- donut_plains_2_exit_1 = create_region(world, player, active_locations, LocationName.donut_plains_2_exit_1,
+ donut_plains_2_tile = create_region(multiworld, player, active_locations, LocationName.donut_plains_2_tile, None)
+ donut_plains_2_region = create_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, None)
+ donut_plains_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.donut_plains_2_exit_1,
[LocationName.donut_plains_2_exit_1])
- donut_plains_2_exit_2 = create_region(world, player, active_locations, LocationName.donut_plains_2_exit_2,
+ donut_plains_2_exit_2 = create_region(multiworld, player, active_locations, LocationName.donut_plains_2_exit_2,
[LocationName.donut_plains_2_exit_2])
- donut_plains_3_tile = create_region(world, player, active_locations, LocationName.donut_plains_3_tile, None)
- donut_plains_3_region = create_region(world, player, active_locations, LocationName.donut_plains_3_region, None)
- donut_plains_3_exit_1 = create_region(world, player, active_locations, LocationName.donut_plains_3_exit_1,
+ donut_plains_3_tile = create_region(multiworld, player, active_locations, LocationName.donut_plains_3_tile, None)
+ donut_plains_3_region = create_region(multiworld, player, active_locations, LocationName.donut_plains_3_region, None)
+ donut_plains_3_exit_1 = create_region(multiworld, player, active_locations, LocationName.donut_plains_3_exit_1,
[LocationName.donut_plains_3_exit_1])
- donut_plains_4_tile = create_region(world, player, active_locations, LocationName.donut_plains_4_tile, None)
- donut_plains_4_region = create_region(world, player, active_locations, LocationName.donut_plains_4_region, None)
- donut_plains_4_exit_1 = create_region(world, player, active_locations, LocationName.donut_plains_4_exit_1,
+ donut_plains_4_tile = create_region(multiworld, player, active_locations, LocationName.donut_plains_4_tile, None)
+ donut_plains_4_region = create_region(multiworld, player, active_locations, LocationName.donut_plains_4_region, None)
+ donut_plains_4_exit_1 = create_region(multiworld, player, active_locations, LocationName.donut_plains_4_exit_1,
[LocationName.donut_plains_4_exit_1])
- donut_secret_1_tile = create_region(world, player, active_locations, LocationName.donut_secret_1_tile, None)
- donut_secret_1_region = create_region(world, player, active_locations, LocationName.donut_secret_1_region, None)
- donut_secret_1_exit_1 = create_region(world, player, active_locations, LocationName.donut_secret_1_exit_1,
+ donut_secret_1_tile = create_region(multiworld, player, active_locations, LocationName.donut_secret_1_tile, None)
+ donut_secret_1_region = create_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, None)
+ donut_secret_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.donut_secret_1_exit_1,
[LocationName.donut_secret_1_exit_1])
- donut_secret_1_exit_2 = create_region(world, player, active_locations, LocationName.donut_secret_1_exit_2,
+ donut_secret_1_exit_2 = create_region(multiworld, player, active_locations, LocationName.donut_secret_1_exit_2,
[LocationName.donut_secret_1_exit_2])
- donut_secret_2_tile = create_region(world, player, active_locations, LocationName.donut_secret_2_tile, None)
- donut_secret_2_region = create_region(world, player, active_locations, LocationName.donut_secret_2_region, None)
- donut_secret_2_exit_1 = create_region(world, player, active_locations, LocationName.donut_secret_2_exit_1,
+ donut_secret_2_tile = create_region(multiworld, player, active_locations, LocationName.donut_secret_2_tile, None)
+ donut_secret_2_region = create_region(multiworld, player, active_locations, LocationName.donut_secret_2_region, None)
+ donut_secret_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.donut_secret_2_exit_1,
[LocationName.donut_secret_2_exit_1])
- donut_ghost_house_tile = create_region(world, player, active_locations, LocationName.donut_ghost_house_tile, None)
- donut_ghost_house_region = create_region(world, player, active_locations, LocationName.donut_ghost_house_region, None)
- donut_ghost_house_exit_1 = create_region(world, player, active_locations, LocationName.donut_ghost_house_exit_1,
+ donut_ghost_house_tile = create_region(multiworld, player, active_locations, LocationName.donut_ghost_house_tile, None)
+ donut_ghost_house_region = create_region(multiworld, player, active_locations, LocationName.donut_ghost_house_region, None)
+ donut_ghost_house_exit_1 = create_region(multiworld, player, active_locations, LocationName.donut_ghost_house_exit_1,
[LocationName.donut_ghost_house_exit_1])
- donut_ghost_house_exit_2 = create_region(world, player, active_locations, LocationName.donut_ghost_house_exit_2,
+ donut_ghost_house_exit_2 = create_region(multiworld, player, active_locations, LocationName.donut_ghost_house_exit_2,
[LocationName.donut_ghost_house_exit_2])
- donut_secret_house_tile = create_region(world, player, active_locations, LocationName.donut_secret_house_tile, None)
- donut_secret_house_region = create_region(world, player, active_locations, LocationName.donut_secret_house_region, None)
- donut_secret_house_exit_1 = create_region(world, player, active_locations, LocationName.donut_secret_house_exit_1,
+ donut_secret_house_tile = create_region(multiworld, player, active_locations, LocationName.donut_secret_house_tile, None)
+ donut_secret_house_region = create_region(multiworld, player, active_locations, LocationName.donut_secret_house_region, None)
+ donut_secret_house_exit_1 = create_region(multiworld, player, active_locations, LocationName.donut_secret_house_exit_1,
[LocationName.donut_secret_house_exit_1])
- donut_secret_house_exit_2 = create_region(world, player, active_locations, LocationName.donut_secret_house_exit_2,
+ donut_secret_house_exit_2 = create_region(multiworld, player, active_locations, LocationName.donut_secret_house_exit_2,
[LocationName.donut_secret_house_exit_2])
- donut_plains_castle_tile = create_region(world, player, active_locations, LocationName.donut_plains_castle_tile, None)
- donut_plains_castle_region = create_region(world, player, active_locations, LocationName.donut_plains_castle_region, None)
- donut_plains_castle = create_region(world, player, active_locations, LocationName.donut_plains_castle,
+ donut_plains_castle_tile = create_region(multiworld, player, active_locations, LocationName.donut_plains_castle_tile, None)
+ donut_plains_castle_region = create_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, None)
+ donut_plains_castle = create_region(multiworld, player, active_locations, LocationName.donut_plains_castle,
[LocationName.donut_plains_castle, LocationName.donut_plains_koopaling])
- green_switch_palace_tile = create_region(world, player, active_locations, LocationName.green_switch_palace_tile, None)
- green_switch_palace = create_region(world, player, active_locations, LocationName.green_switch_palace,
+ green_switch_palace_tile = create_region(multiworld, player, active_locations, LocationName.green_switch_palace_tile, None)
+ green_switch_palace = create_region(multiworld, player, active_locations, LocationName.green_switch_palace,
[LocationName.green_switch_palace])
- donut_plains_top_secret_tile = create_region(world, player, active_locations, LocationName.donut_plains_top_secret_tile, None)
- donut_plains_top_secret = create_region(world, player, active_locations, LocationName.donut_plains_top_secret, None)
+ donut_plains_top_secret_tile = create_region(multiworld, player, active_locations, LocationName.donut_plains_top_secret_tile, None)
+ donut_plains_top_secret = create_region(multiworld, player, active_locations, LocationName.donut_plains_top_secret, None)
- vanilla_dome_1_tile = create_region(world, player, active_locations, LocationName.vanilla_dome_1_tile, None)
- vanilla_dome_1_region = create_region(world, player, active_locations, LocationName.vanilla_dome_1_region, None)
- vanilla_dome_1_exit_1 = create_region(world, player, active_locations, LocationName.vanilla_dome_1_exit_1,
+ vanilla_dome_1_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_tile, None)
+ vanilla_dome_1_region = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, None)
+ vanilla_dome_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_exit_1,
[LocationName.vanilla_dome_1_exit_1])
- vanilla_dome_1_exit_2 = create_region(world, player, active_locations, LocationName.vanilla_dome_1_exit_2,
+ vanilla_dome_1_exit_2 = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_exit_2,
[LocationName.vanilla_dome_1_exit_2])
- vanilla_dome_2_tile = create_region(world, player, active_locations, LocationName.vanilla_dome_2_tile, None)
- vanilla_dome_2_region = create_region(world, player, active_locations, LocationName.vanilla_dome_2_region, None)
- vanilla_dome_2_exit_1 = create_region(world, player, active_locations, LocationName.vanilla_dome_2_exit_1,
+ vanilla_dome_2_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_tile, None)
+ vanilla_dome_2_region = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, None)
+ vanilla_dome_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_exit_1,
[LocationName.vanilla_dome_2_exit_1])
- vanilla_dome_2_exit_2 = create_region(world, player, active_locations, LocationName.vanilla_dome_2_exit_2,
+ vanilla_dome_2_exit_2 = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_exit_2,
[LocationName.vanilla_dome_2_exit_2])
- vanilla_dome_3_tile = create_region(world, player, active_locations, LocationName.vanilla_dome_3_tile, None)
- vanilla_dome_3_region = create_region(world, player, active_locations, LocationName.vanilla_dome_3_region, None)
- vanilla_dome_3_exit_1 = create_region(world, player, active_locations, LocationName.vanilla_dome_3_exit_1,
+ vanilla_dome_3_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_tile, None)
+ vanilla_dome_3_region = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, None)
+ vanilla_dome_3_exit_1 = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_exit_1,
[LocationName.vanilla_dome_3_exit_1])
- vanilla_dome_4_tile = create_region(world, player, active_locations, LocationName.vanilla_dome_4_tile, None)
- vanilla_dome_4_region = create_region(world, player, active_locations, LocationName.vanilla_dome_4_region, None)
- vanilla_dome_4_exit_1 = create_region(world, player, active_locations, LocationName.vanilla_dome_4_exit_1,
+ vanilla_dome_4_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_tile, None)
+ vanilla_dome_4_region = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, None)
+ vanilla_dome_4_exit_1 = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_exit_1,
[LocationName.vanilla_dome_4_exit_1])
- vanilla_secret_1_tile = create_region(world, player, active_locations, LocationName.vanilla_secret_1_tile, None)
- vanilla_secret_1_region = create_region(world, player, active_locations, LocationName.vanilla_secret_1_region, None)
- vanilla_secret_1_exit_1 = create_region(world, player, active_locations, LocationName.vanilla_secret_1_exit_1,
+ vanilla_secret_1_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_tile, None)
+ vanilla_secret_1_region = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, None)
+ vanilla_secret_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_exit_1,
[LocationName.vanilla_secret_1_exit_1])
- vanilla_secret_1_exit_2 = create_region(world, player, active_locations, LocationName.vanilla_secret_1_exit_2,
+ vanilla_secret_1_exit_2 = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_exit_2,
[LocationName.vanilla_secret_1_exit_2])
- vanilla_secret_2_tile = create_region(world, player, active_locations, LocationName.vanilla_secret_2_tile, None)
- vanilla_secret_2_region = create_region(world, player, active_locations, LocationName.vanilla_secret_2_region, None)
- vanilla_secret_2_exit_1 = create_region(world, player, active_locations, LocationName.vanilla_secret_2_exit_1,
+ vanilla_secret_2_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_tile, None)
+ vanilla_secret_2_region = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, None)
+ vanilla_secret_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_exit_1,
[LocationName.vanilla_secret_2_exit_1])
- vanilla_secret_3_tile = create_region(world, player, active_locations, LocationName.vanilla_secret_3_tile, None)
- vanilla_secret_3_region = create_region(world, player, active_locations, LocationName.vanilla_secret_3_region, None)
- vanilla_secret_3_exit_1 = create_region(world, player, active_locations, LocationName.vanilla_secret_3_exit_1,
+ vanilla_secret_3_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_3_tile, None)
+ vanilla_secret_3_region = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_3_region, None)
+ vanilla_secret_3_exit_1 = create_region(multiworld, player, active_locations, LocationName.vanilla_secret_3_exit_1,
[LocationName.vanilla_secret_3_exit_1])
- vanilla_ghost_house_tile = create_region(world, player, active_locations, LocationName.vanilla_ghost_house_tile, None)
- vanilla_ghost_house_region = create_region(world, player, active_locations, LocationName.vanilla_ghost_house_region, None)
- vanilla_ghost_house_exit_1 = create_region(world, player, active_locations, LocationName.vanilla_ghost_house_exit_1,
+ vanilla_ghost_house_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_tile, None)
+ vanilla_ghost_house_region = create_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_region, None)
+ vanilla_ghost_house_exit_1 = create_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_exit_1,
[LocationName.vanilla_ghost_house_exit_1])
- vanilla_fortress_tile = create_region(world, player, active_locations, LocationName.vanilla_fortress_tile, None)
- vanilla_fortress_region = create_region(world, player, active_locations, LocationName.vanilla_fortress_region, None)
- vanilla_fortress = create_region(world, player, active_locations, LocationName.vanilla_fortress,
+ vanilla_fortress_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_fortress_tile, None)
+ vanilla_fortress_region = create_region(multiworld, player, active_locations, LocationName.vanilla_fortress_region, None)
+ vanilla_fortress = create_region(multiworld, player, active_locations, LocationName.vanilla_fortress,
[LocationName.vanilla_fortress, LocationName.vanilla_reznor])
- vanilla_dome_castle_tile = create_region(world, player, active_locations, LocationName.vanilla_dome_castle_tile, None)
- vanilla_dome_castle_region = create_region(world, player, active_locations, LocationName.vanilla_dome_castle_region, None)
- vanilla_dome_castle = create_region(world, player, active_locations, LocationName.vanilla_dome_castle,
+ vanilla_dome_castle_tile = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_castle_tile, None)
+ vanilla_dome_castle_region = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_castle_region, None)
+ vanilla_dome_castle = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_castle,
[LocationName.vanilla_dome_castle, LocationName.vanilla_dome_koopaling])
- red_switch_palace_tile = create_region(world, player, active_locations, LocationName.red_switch_palace_tile, None)
- red_switch_palace = create_region(world, player, active_locations, LocationName.red_switch_palace,
+ red_switch_palace_tile = create_region(multiworld, player, active_locations, LocationName.red_switch_palace_tile, None)
+ red_switch_palace = create_region(multiworld, player, active_locations, LocationName.red_switch_palace,
[LocationName.red_switch_palace])
- butter_bridge_1_tile = create_region(world, player, active_locations, LocationName.butter_bridge_1_tile, None)
- butter_bridge_1_region = create_region(world, player, active_locations, LocationName.butter_bridge_1_region, None)
- butter_bridge_1_exit_1 = create_region(world, player, active_locations, LocationName.butter_bridge_1_exit_1,
+ butter_bridge_1_tile = create_region(multiworld, player, active_locations, LocationName.butter_bridge_1_tile, None)
+ butter_bridge_1_region = create_region(multiworld, player, active_locations, LocationName.butter_bridge_1_region, None)
+ butter_bridge_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.butter_bridge_1_exit_1,
[LocationName.butter_bridge_1_exit_1])
- butter_bridge_2_tile = create_region(world, player, active_locations, LocationName.butter_bridge_2_tile, None)
- butter_bridge_2_region = create_region(world, player, active_locations, LocationName.butter_bridge_2_region, None)
- butter_bridge_2_exit_1 = create_region(world, player, active_locations, LocationName.butter_bridge_2_exit_1,
+ butter_bridge_2_tile = create_region(multiworld, player, active_locations, LocationName.butter_bridge_2_tile, None)
+ butter_bridge_2_region = create_region(multiworld, player, active_locations, LocationName.butter_bridge_2_region, None)
+ butter_bridge_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.butter_bridge_2_exit_1,
[LocationName.butter_bridge_2_exit_1])
- cheese_bridge_tile = create_region(world, player, active_locations, LocationName.cheese_bridge_tile, None)
- cheese_bridge_region = create_region(world, player, active_locations, LocationName.cheese_bridge_region, None)
- cheese_bridge_exit_1 = create_region(world, player, active_locations, LocationName.cheese_bridge_exit_1,
+ cheese_bridge_tile = create_region(multiworld, player, active_locations, LocationName.cheese_bridge_tile, None)
+ cheese_bridge_region = create_region(multiworld, player, active_locations, LocationName.cheese_bridge_region, None)
+ cheese_bridge_exit_1 = create_region(multiworld, player, active_locations, LocationName.cheese_bridge_exit_1,
[LocationName.cheese_bridge_exit_1])
- cheese_bridge_exit_2 = create_region(world, player, active_locations, LocationName.cheese_bridge_exit_2,
+ cheese_bridge_exit_2 = create_region(multiworld, player, active_locations, LocationName.cheese_bridge_exit_2,
[LocationName.cheese_bridge_exit_2])
- cookie_mountain_tile = create_region(world, player, active_locations, LocationName.cookie_mountain_tile, None)
- cookie_mountain_region = create_region(world, player, active_locations, LocationName.cookie_mountain_region, None)
- cookie_mountain_exit_1 = create_region(world, player, active_locations, LocationName.cookie_mountain_exit_1,
+ cookie_mountain_tile = create_region(multiworld, player, active_locations, LocationName.cookie_mountain_tile, None)
+ cookie_mountain_region = create_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, None)
+ cookie_mountain_exit_1 = create_region(multiworld, player, active_locations, LocationName.cookie_mountain_exit_1,
[LocationName.cookie_mountain_exit_1])
- soda_lake_tile = create_region(world, player, active_locations, LocationName.soda_lake_tile, None)
- soda_lake_region = create_region(world, player, active_locations, LocationName.soda_lake_region, None)
- soda_lake_exit_1 = create_region(world, player, active_locations, LocationName.soda_lake_exit_1,
+ soda_lake_tile = create_region(multiworld, player, active_locations, LocationName.soda_lake_tile, None)
+ soda_lake_region = create_region(multiworld, player, active_locations, LocationName.soda_lake_region, None)
+ soda_lake_exit_1 = create_region(multiworld, player, active_locations, LocationName.soda_lake_exit_1,
[LocationName.soda_lake_exit_1])
- twin_bridges_castle_tile = create_region(world, player, active_locations, LocationName.twin_bridges_castle_tile, None)
- twin_bridges_castle_region = create_region(world, player, active_locations, LocationName.twin_bridges_castle_region, None)
- twin_bridges_castle = create_region(world, player, active_locations, LocationName.twin_bridges_castle,
+ twin_bridges_castle_tile = create_region(multiworld, player, active_locations, LocationName.twin_bridges_castle_tile, None)
+ twin_bridges_castle_region = create_region(multiworld, player, active_locations, LocationName.twin_bridges_castle_region, None)
+ twin_bridges_castle = create_region(multiworld, player, active_locations, LocationName.twin_bridges_castle,
[LocationName.twin_bridges_castle, LocationName.twin_bridges_koopaling])
- forest_of_illusion_1_tile = create_region(world, player, active_locations, LocationName.forest_of_illusion_1_tile, None)
- forest_of_illusion_1_region = create_region(world, player, active_locations, LocationName.forest_of_illusion_1_region, None)
- forest_of_illusion_1_exit_1 = create_region(world, player, active_locations, LocationName.forest_of_illusion_1_exit_1,
+ forest_of_illusion_1_tile = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_1_tile, None)
+ forest_of_illusion_1_region = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_1_region, None)
+ forest_of_illusion_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_1_exit_1,
[LocationName.forest_of_illusion_1_exit_1])
- forest_of_illusion_1_exit_2 = create_region(world, player, active_locations, LocationName.forest_of_illusion_1_exit_2,
+ forest_of_illusion_1_exit_2 = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_1_exit_2,
[LocationName.forest_of_illusion_1_exit_2])
- forest_of_illusion_2_tile = create_region(world, player, active_locations, LocationName.forest_of_illusion_2_tile, None)
- forest_of_illusion_2_region = create_region(world, player, active_locations, LocationName.forest_of_illusion_2_region, None)
- forest_of_illusion_2_exit_1 = create_region(world, player, active_locations, LocationName.forest_of_illusion_2_exit_1,
+ forest_of_illusion_2_tile = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_tile, None)
+ forest_of_illusion_2_region = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_region, None)
+ forest_of_illusion_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_exit_1,
[LocationName.forest_of_illusion_2_exit_1])
- forest_of_illusion_2_exit_2 = create_region(world, player, active_locations, LocationName.forest_of_illusion_2_exit_2,
+ forest_of_illusion_2_exit_2 = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_exit_2,
[LocationName.forest_of_illusion_2_exit_2])
- forest_of_illusion_3_tile = create_region(world, player, active_locations, LocationName.forest_of_illusion_3_tile, None)
- forest_of_illusion_3_region = create_region(world, player, active_locations, LocationName.forest_of_illusion_3_region, None)
- forest_of_illusion_3_exit_1 = create_region(world, player, active_locations, LocationName.forest_of_illusion_3_exit_1,
+ forest_of_illusion_3_tile = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_tile, None)
+ forest_of_illusion_3_region = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, None)
+ forest_of_illusion_3_exit_1 = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_exit_1,
[LocationName.forest_of_illusion_3_exit_1])
- forest_of_illusion_3_exit_2 = create_region(world, player, active_locations, LocationName.forest_of_illusion_3_exit_2,
+ forest_of_illusion_3_exit_2 = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_exit_2,
[LocationName.forest_of_illusion_3_exit_2])
- forest_of_illusion_4_tile = create_region(world, player, active_locations, LocationName.forest_of_illusion_4_tile, None)
- forest_of_illusion_4_region = create_region(world, player, active_locations, LocationName.forest_of_illusion_4_region, None)
- forest_of_illusion_4_exit_1 = create_region(world, player, active_locations, LocationName.forest_of_illusion_4_exit_1,
+ forest_of_illusion_4_tile = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_tile, None)
+ forest_of_illusion_4_region = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, None)
+ forest_of_illusion_4_exit_1 = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_exit_1,
[LocationName.forest_of_illusion_4_exit_1])
- forest_of_illusion_4_exit_2 = create_region(world, player, active_locations, LocationName.forest_of_illusion_4_exit_2,
+ forest_of_illusion_4_exit_2 = create_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_exit_2,
[LocationName.forest_of_illusion_4_exit_2])
- forest_ghost_house_tile = create_region(world, player, active_locations, LocationName.forest_ghost_house_tile, None)
- forest_ghost_house_region = create_region(world, player, active_locations, LocationName.forest_ghost_house_region, None)
- forest_ghost_house_exit_1 = create_region(world, player, active_locations, LocationName.forest_ghost_house_exit_1,
+ forest_ghost_house_tile = create_region(multiworld, player, active_locations, LocationName.forest_ghost_house_tile, None)
+ forest_ghost_house_region = create_region(multiworld, player, active_locations, LocationName.forest_ghost_house_region, None)
+ forest_ghost_house_exit_1 = create_region(multiworld, player, active_locations, LocationName.forest_ghost_house_exit_1,
[LocationName.forest_ghost_house_exit_1])
- forest_ghost_house_exit_2 = create_region(world, player, active_locations, LocationName.forest_ghost_house_exit_2,
+ forest_ghost_house_exit_2 = create_region(multiworld, player, active_locations, LocationName.forest_ghost_house_exit_2,
[LocationName.forest_ghost_house_exit_2])
- forest_secret_tile = create_region(world, player, active_locations, LocationName.forest_secret_tile, None)
- forest_secret_region = create_region(world, player, active_locations, LocationName.forest_secret_region, None)
- forest_secret_exit_1 = create_region(world, player, active_locations, LocationName.forest_secret_exit_1,
+ forest_secret_tile = create_region(multiworld, player, active_locations, LocationName.forest_secret_tile, None)
+ forest_secret_region = create_region(multiworld, player, active_locations, LocationName.forest_secret_region, None)
+ forest_secret_exit_1 = create_region(multiworld, player, active_locations, LocationName.forest_secret_exit_1,
[LocationName.forest_secret_exit_1])
- forest_fortress_tile = create_region(world, player, active_locations, LocationName.forest_fortress_tile, None)
- forest_fortress_region = create_region(world, player, active_locations, LocationName.forest_fortress_region, None)
- forest_fortress = create_region(world, player, active_locations, LocationName.forest_fortress,
+ forest_fortress_tile = create_region(multiworld, player, active_locations, LocationName.forest_fortress_tile, None)
+ forest_fortress_region = create_region(multiworld, player, active_locations, LocationName.forest_fortress_region, None)
+ forest_fortress = create_region(multiworld, player, active_locations, LocationName.forest_fortress,
[LocationName.forest_fortress, LocationName.forest_reznor])
- forest_castle_tile = create_region(world, player, active_locations, LocationName.forest_castle_tile, None)
- forest_castle_region = create_region(world, player, active_locations, LocationName.forest_castle_region, None)
- forest_castle = create_region(world, player, active_locations, LocationName.forest_castle,
+ forest_castle_tile = create_region(multiworld, player, active_locations, LocationName.forest_castle_tile, None)
+ forest_castle_region = create_region(multiworld, player, active_locations, LocationName.forest_castle_region, None)
+ forest_castle = create_region(multiworld, player, active_locations, LocationName.forest_castle,
[LocationName.forest_castle, LocationName.forest_koopaling])
- blue_switch_palace_tile = create_region(world, player, active_locations, LocationName.blue_switch_palace_tile, None)
- blue_switch_palace = create_region(world, player, active_locations, LocationName.blue_switch_palace,
+ blue_switch_palace_tile = create_region(multiworld, player, active_locations, LocationName.blue_switch_palace_tile, None)
+ blue_switch_palace = create_region(multiworld, player, active_locations, LocationName.blue_switch_palace,
[LocationName.blue_switch_palace])
- chocolate_island_1_tile = create_region(world, player, active_locations, LocationName.chocolate_island_1_tile, None)
- chocolate_island_1_region = create_region(world, player, active_locations, LocationName.chocolate_island_1_region, None)
- chocolate_island_1_exit_1 = create_region(world, player, active_locations, LocationName.chocolate_island_1_exit_1,
+ chocolate_island_1_tile = create_region(multiworld, player, active_locations, LocationName.chocolate_island_1_tile, None)
+ chocolate_island_1_region = create_region(multiworld, player, active_locations, LocationName.chocolate_island_1_region, None)
+ chocolate_island_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.chocolate_island_1_exit_1,
[LocationName.chocolate_island_1_exit_1])
- chocolate_island_2_tile = create_region(world, player, active_locations, LocationName.chocolate_island_2_tile, None)
- chocolate_island_2_region = create_region(world, player, active_locations, LocationName.chocolate_island_2_region, None)
- chocolate_island_2_exit_1 = create_region(world, player, active_locations, LocationName.chocolate_island_2_exit_1,
+ chocolate_island_2_tile = create_region(multiworld, player, active_locations, LocationName.chocolate_island_2_tile, None)
+ chocolate_island_2_region = create_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, None)
+ chocolate_island_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.chocolate_island_2_exit_1,
[LocationName.chocolate_island_2_exit_1])
- chocolate_island_2_exit_2 = create_region(world, player, active_locations, LocationName.chocolate_island_2_exit_2,
+ chocolate_island_2_exit_2 = create_region(multiworld, player, active_locations, LocationName.chocolate_island_2_exit_2,
[LocationName.chocolate_island_2_exit_2])
- chocolate_island_3_tile = create_region(world, player, active_locations, LocationName.chocolate_island_3_tile, None)
- chocolate_island_3_region = create_region(world, player, active_locations, LocationName.chocolate_island_3_region, None)
- chocolate_island_3_exit_1 = create_region(world, player, active_locations, LocationName.chocolate_island_3_exit_1,
+ chocolate_island_3_tile = create_region(multiworld, player, active_locations, LocationName.chocolate_island_3_tile, None)
+ chocolate_island_3_region = create_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, None)
+ chocolate_island_3_exit_1 = create_region(multiworld, player, active_locations, LocationName.chocolate_island_3_exit_1,
[LocationName.chocolate_island_3_exit_1])
- chocolate_island_3_exit_2 = create_region(world, player, active_locations, LocationName.chocolate_island_3_exit_2,
+ chocolate_island_3_exit_2 = create_region(multiworld, player, active_locations, LocationName.chocolate_island_3_exit_2,
[LocationName.chocolate_island_3_exit_2])
- chocolate_island_4_tile = create_region(world, player, active_locations, LocationName.chocolate_island_4_tile, None)
- chocolate_island_4_region = create_region(world, player, active_locations, LocationName.chocolate_island_4_region, None)
- chocolate_island_4_exit_1 = create_region(world, player, active_locations, LocationName.chocolate_island_4_exit_1,
+ chocolate_island_4_tile = create_region(multiworld, player, active_locations, LocationName.chocolate_island_4_tile, None)
+ chocolate_island_4_region = create_region(multiworld, player, active_locations, LocationName.chocolate_island_4_region, None)
+ chocolate_island_4_exit_1 = create_region(multiworld, player, active_locations, LocationName.chocolate_island_4_exit_1,
[LocationName.chocolate_island_4_exit_1])
- chocolate_island_5_tile = create_region(world, player, active_locations, LocationName.chocolate_island_5_tile, None)
- chocolate_island_5_region = create_region(world, player, active_locations, LocationName.chocolate_island_5_region, None)
- chocolate_island_5_exit_1 = create_region(world, player, active_locations, LocationName.chocolate_island_5_exit_1,
+ chocolate_island_5_tile = create_region(multiworld, player, active_locations, LocationName.chocolate_island_5_tile, None)
+ chocolate_island_5_region = create_region(multiworld, player, active_locations, LocationName.chocolate_island_5_region, None)
+ chocolate_island_5_exit_1 = create_region(multiworld, player, active_locations, LocationName.chocolate_island_5_exit_1,
[LocationName.chocolate_island_5_exit_1])
- chocolate_ghost_house_tile = create_region(world, player, active_locations, LocationName.chocolate_ghost_house_tile, None)
- chocolate_ghost_house_region = create_region(world, player, active_locations, LocationName.chocolate_ghost_house_region, None)
- chocolate_ghost_house_exit_1 = create_region(world, player, active_locations, LocationName.chocolate_ghost_house_exit_1,
+ chocolate_ghost_house_tile = create_region(multiworld, player, active_locations, LocationName.chocolate_ghost_house_tile, None)
+ chocolate_ghost_house_region = create_region(multiworld, player, active_locations, LocationName.chocolate_ghost_house_region, None)
+ chocolate_ghost_house_exit_1 = create_region(multiworld, player, active_locations, LocationName.chocolate_ghost_house_exit_1,
[LocationName.chocolate_ghost_house_exit_1])
- chocolate_secret_tile = create_region(world, player, active_locations, LocationName.chocolate_secret_tile, None)
- chocolate_secret_region = create_region(world, player, active_locations, LocationName.chocolate_secret_region, None)
- chocolate_secret_exit_1 = create_region(world, player, active_locations, LocationName.chocolate_secret_exit_1,
+ chocolate_secret_tile = create_region(multiworld, player, active_locations, LocationName.chocolate_secret_tile, None)
+ chocolate_secret_region = create_region(multiworld, player, active_locations, LocationName.chocolate_secret_region, None)
+ chocolate_secret_exit_1 = create_region(multiworld, player, active_locations, LocationName.chocolate_secret_exit_1,
[LocationName.chocolate_secret_exit_1])
- chocolate_fortress_tile = create_region(world, player, active_locations, LocationName.chocolate_fortress_tile, None)
- chocolate_fortress_region = create_region(world, player, active_locations, LocationName.chocolate_fortress_region, None)
- chocolate_fortress = create_region(world, player, active_locations, LocationName.chocolate_fortress,
+ chocolate_fortress_tile = create_region(multiworld, player, active_locations, LocationName.chocolate_fortress_tile, None)
+ chocolate_fortress_region = create_region(multiworld, player, active_locations, LocationName.chocolate_fortress_region, None)
+ chocolate_fortress = create_region(multiworld, player, active_locations, LocationName.chocolate_fortress,
[LocationName.chocolate_fortress, LocationName.chocolate_reznor])
- chocolate_castle_tile = create_region(world, player, active_locations, LocationName.chocolate_castle_tile, None)
- chocolate_castle_region = create_region(world, player, active_locations, LocationName.chocolate_castle_region, None)
- chocolate_castle = create_region(world, player, active_locations, LocationName.chocolate_castle,
+ chocolate_castle_tile = create_region(multiworld, player, active_locations, LocationName.chocolate_castle_tile, None)
+ chocolate_castle_region = create_region(multiworld, player, active_locations, LocationName.chocolate_castle_region, None)
+ chocolate_castle = create_region(multiworld, player, active_locations, LocationName.chocolate_castle,
[LocationName.chocolate_castle, LocationName.chocolate_koopaling])
- sunken_ghost_ship_tile = create_region(world, player, active_locations, LocationName.sunken_ghost_ship_tile, None)
- sunken_ghost_ship_region = create_region(world, player, active_locations, LocationName.sunken_ghost_ship_region, None)
- sunken_ghost_ship = create_region(world, player, active_locations, LocationName.sunken_ghost_ship,
+ sunken_ghost_ship_tile = create_region(multiworld, player, active_locations, LocationName.sunken_ghost_ship_tile, None)
+ sunken_ghost_ship_region = create_region(multiworld, player, active_locations, LocationName.sunken_ghost_ship_region, None)
+ sunken_ghost_ship = create_region(multiworld, player, active_locations, LocationName.sunken_ghost_ship,
[LocationName.sunken_ghost_ship])
- valley_of_bowser_1_tile = create_region(world, player, active_locations, LocationName.valley_of_bowser_1_tile, None)
- valley_of_bowser_1_region = create_region(world, player, active_locations, LocationName.valley_of_bowser_1_region, None)
- valley_of_bowser_1_exit_1 = create_region(world, player, active_locations, LocationName.valley_of_bowser_1_exit_1,
+ valley_of_bowser_1_tile = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_tile, None)
+ valley_of_bowser_1_region = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, None)
+ valley_of_bowser_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_exit_1,
[LocationName.valley_of_bowser_1_exit_1])
- valley_of_bowser_2_tile = create_region(world, player, active_locations, LocationName.valley_of_bowser_2_tile, None)
- valley_of_bowser_2_region = create_region(world, player, active_locations, LocationName.valley_of_bowser_2_region, None)
- valley_of_bowser_2_exit_1 = create_region(world, player, active_locations, LocationName.valley_of_bowser_2_exit_1,
+ valley_of_bowser_2_tile = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_tile, None)
+ valley_of_bowser_2_region = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_region, None)
+ valley_of_bowser_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_exit_1,
[LocationName.valley_of_bowser_2_exit_1])
- valley_of_bowser_2_exit_2 = create_region(world, player, active_locations, LocationName.valley_of_bowser_2_exit_2,
+ valley_of_bowser_2_exit_2 = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_exit_2,
[LocationName.valley_of_bowser_2_exit_2])
- valley_of_bowser_3_tile = create_region(world, player, active_locations, LocationName.valley_of_bowser_3_tile, None)
- valley_of_bowser_3_region = create_region(world, player, active_locations, LocationName.valley_of_bowser_3_region, None)
- valley_of_bowser_3_exit_1 = create_region(world, player, active_locations, LocationName.valley_of_bowser_3_exit_1,
+ valley_of_bowser_3_tile = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_3_tile, None)
+ valley_of_bowser_3_region = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_3_region, None)
+ valley_of_bowser_3_exit_1 = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_3_exit_1,
[LocationName.valley_of_bowser_3_exit_1])
- valley_of_bowser_4_tile = create_region(world, player, active_locations, LocationName.valley_of_bowser_4_tile, None)
- valley_of_bowser_4_region = create_region(world, player, active_locations, LocationName.valley_of_bowser_4_region, None)
- valley_of_bowser_4_exit_1 = create_region(world, player, active_locations, LocationName.valley_of_bowser_4_exit_1,
+ valley_of_bowser_4_tile = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_tile, None)
+ valley_of_bowser_4_region = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_region, None)
+ valley_of_bowser_4_exit_1 = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_exit_1,
[LocationName.valley_of_bowser_4_exit_1])
- valley_of_bowser_4_exit_2 = create_region(world, player, active_locations, LocationName.valley_of_bowser_4_exit_2,
+ valley_of_bowser_4_exit_2 = create_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_exit_2,
[LocationName.valley_of_bowser_4_exit_2])
- valley_ghost_house_tile = create_region(world, player, active_locations, LocationName.valley_ghost_house_tile, None)
- valley_ghost_house_region = create_region(world, player, active_locations, LocationName.valley_ghost_house_region, None)
- valley_ghost_house_exit_1 = create_region(world, player, active_locations, LocationName.valley_ghost_house_exit_1,
+ valley_ghost_house_tile = create_region(multiworld, player, active_locations, LocationName.valley_ghost_house_tile, None)
+ valley_ghost_house_region = create_region(multiworld, player, active_locations, LocationName.valley_ghost_house_region, None)
+ valley_ghost_house_exit_1 = create_region(multiworld, player, active_locations, LocationName.valley_ghost_house_exit_1,
[LocationName.valley_ghost_house_exit_1])
- valley_ghost_house_exit_2 = create_region(world, player, active_locations, LocationName.valley_ghost_house_exit_2,
+ valley_ghost_house_exit_2 = create_region(multiworld, player, active_locations, LocationName.valley_ghost_house_exit_2,
[LocationName.valley_ghost_house_exit_2])
- valley_fortress_tile = create_region(world, player, active_locations, LocationName.valley_fortress_tile, None)
- valley_fortress_region = create_region(world, player, active_locations, LocationName.valley_fortress_region, None)
- valley_fortress = create_region(world, player, active_locations, LocationName.valley_fortress,
+ valley_fortress_tile = create_region(multiworld, player, active_locations, LocationName.valley_fortress_tile, None)
+ valley_fortress_region = create_region(multiworld, player, active_locations, LocationName.valley_fortress_region, None)
+ valley_fortress = create_region(multiworld, player, active_locations, LocationName.valley_fortress,
[LocationName.valley_fortress, LocationName.valley_reznor])
- valley_castle_tile = create_region(world, player, active_locations, LocationName.valley_castle_tile, None)
- valley_castle_region = create_region(world, player, active_locations, LocationName.valley_castle_region, None)
- valley_castle = create_region(world, player, active_locations, LocationName.valley_castle,
+ valley_castle_tile = create_region(multiworld, player, active_locations, LocationName.valley_castle_tile, None)
+ valley_castle_region = create_region(multiworld, player, active_locations, LocationName.valley_castle_region, None)
+ valley_castle = create_region(multiworld, player, active_locations, LocationName.valley_castle,
[LocationName.valley_castle, LocationName.valley_koopaling])
- front_door_tile = create_region(world, player, active_locations, LocationName.front_door_tile, None)
- front_door_region = create_region(world, player, active_locations, LocationName.front_door, None)
- back_door_tile = create_region(world, player, active_locations, LocationName.back_door_tile, None)
- back_door_region = create_region(world, player, active_locations, LocationName.back_door, None)
+ front_door_tile = create_region(multiworld, player, active_locations, LocationName.front_door_tile, None)
+ front_door_region = create_region(multiworld, player, active_locations, LocationName.front_door, None)
+ back_door_tile = create_region(multiworld, player, active_locations, LocationName.back_door_tile, None)
+ back_door_region = create_region(multiworld, player, active_locations, LocationName.back_door, None)
bowser_region_locations = []
- if world.goal[player] == "bowser":
+ if world.options.goal == "bowser":
bowser_region_locations += [LocationName.bowser]
- bowser_region = create_region(world, player, active_locations, LocationName.bowser_region, bowser_region_locations)
+ bowser_region = create_region(multiworld, player, active_locations, LocationName.bowser_region, bowser_region_locations)
- donut_plains_star_road = create_region(world, player, active_locations, LocationName.donut_plains_star_road, None)
- vanilla_dome_star_road = create_region(world, player, active_locations, LocationName.vanilla_dome_star_road, None)
- twin_bridges_star_road = create_region(world, player, active_locations, LocationName.twin_bridges_star_road, None)
- forest_star_road = create_region(world, player, active_locations, LocationName.forest_star_road, None)
- valley_star_road = create_region(world, player, active_locations, LocationName.valley_star_road, None)
- star_road_donut = create_region(world, player, active_locations, LocationName.star_road_donut, None)
- star_road_vanilla = create_region(world, player, active_locations, LocationName.star_road_vanilla, None)
- star_road_twin_bridges = create_region(world, player, active_locations, LocationName.star_road_twin_bridges, None)
- star_road_forest = create_region(world, player, active_locations, LocationName.star_road_forest, None)
- star_road_valley = create_region(world, player, active_locations, LocationName.star_road_valley, None)
- star_road_special = create_region(world, player, active_locations, LocationName.star_road_special, None)
- special_star_road = create_region(world, player, active_locations, LocationName.special_star_road, None)
+ donut_plains_star_road = create_region(multiworld, player, active_locations, LocationName.donut_plains_star_road, None)
+ vanilla_dome_star_road = create_region(multiworld, player, active_locations, LocationName.vanilla_dome_star_road, None)
+ twin_bridges_star_road = create_region(multiworld, player, active_locations, LocationName.twin_bridges_star_road, None)
+ forest_star_road = create_region(multiworld, player, active_locations, LocationName.forest_star_road, None)
+ valley_star_road = create_region(multiworld, player, active_locations, LocationName.valley_star_road, None)
+ star_road_donut = create_region(multiworld, player, active_locations, LocationName.star_road_donut, None)
+ star_road_vanilla = create_region(multiworld, player, active_locations, LocationName.star_road_vanilla, None)
+ star_road_twin_bridges = create_region(multiworld, player, active_locations, LocationName.star_road_twin_bridges, None)
+ star_road_forest = create_region(multiworld, player, active_locations, LocationName.star_road_forest, None)
+ star_road_valley = create_region(multiworld, player, active_locations, LocationName.star_road_valley, None)
+ star_road_special = create_region(multiworld, player, active_locations, LocationName.star_road_special, None)
+ special_star_road = create_region(multiworld, player, active_locations, LocationName.special_star_road, None)
- star_road_1_tile = create_region(world, player, active_locations, LocationName.star_road_1_tile, None)
- star_road_1_region = create_region(world, player, active_locations, LocationName.star_road_1_region, None)
- star_road_1_exit_1 = create_region(world, player, active_locations, LocationName.star_road_1_exit_1,
+ star_road_1_tile = create_region(multiworld, player, active_locations, LocationName.star_road_1_tile, None)
+ star_road_1_region = create_region(multiworld, player, active_locations, LocationName.star_road_1_region, None)
+ star_road_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.star_road_1_exit_1,
[LocationName.star_road_1_exit_1])
- star_road_1_exit_2 = create_region(world, player, active_locations, LocationName.star_road_1_exit_2,
+ star_road_1_exit_2 = create_region(multiworld, player, active_locations, LocationName.star_road_1_exit_2,
[LocationName.star_road_1_exit_2])
- star_road_2_tile = create_region(world, player, active_locations, LocationName.star_road_2_tile, None)
- star_road_2_region = create_region(world, player, active_locations, LocationName.star_road_2_region, None)
- star_road_2_exit_1 = create_region(world, player, active_locations, LocationName.star_road_2_exit_1,
+ star_road_2_tile = create_region(multiworld, player, active_locations, LocationName.star_road_2_tile, None)
+ star_road_2_region = create_region(multiworld, player, active_locations, LocationName.star_road_2_region, None)
+ star_road_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.star_road_2_exit_1,
[LocationName.star_road_2_exit_1])
- star_road_2_exit_2 = create_region(world, player, active_locations, LocationName.star_road_2_exit_2,
+ star_road_2_exit_2 = create_region(multiworld, player, active_locations, LocationName.star_road_2_exit_2,
[LocationName.star_road_2_exit_2])
- star_road_3_tile = create_region(world, player, active_locations, LocationName.star_road_3_tile, None)
- star_road_3_region = create_region(world, player, active_locations, LocationName.star_road_3_region, None)
- star_road_3_exit_1 = create_region(world, player, active_locations, LocationName.star_road_3_exit_1,
+ star_road_3_tile = create_region(multiworld, player, active_locations, LocationName.star_road_3_tile, None)
+ star_road_3_region = create_region(multiworld, player, active_locations, LocationName.star_road_3_region, None)
+ star_road_3_exit_1 = create_region(multiworld, player, active_locations, LocationName.star_road_3_exit_1,
[LocationName.star_road_3_exit_1])
- star_road_3_exit_2 = create_region(world, player, active_locations, LocationName.star_road_3_exit_2,
+ star_road_3_exit_2 = create_region(multiworld, player, active_locations, LocationName.star_road_3_exit_2,
[LocationName.star_road_3_exit_2])
- star_road_4_tile = create_region(world, player, active_locations, LocationName.star_road_4_tile, None)
- star_road_4_region = create_region(world, player, active_locations, LocationName.star_road_4_region, None)
- star_road_4_exit_1 = create_region(world, player, active_locations, LocationName.star_road_4_exit_1,
+ star_road_4_tile = create_region(multiworld, player, active_locations, LocationName.star_road_4_tile, None)
+ star_road_4_region = create_region(multiworld, player, active_locations, LocationName.star_road_4_region, None)
+ star_road_4_exit_1 = create_region(multiworld, player, active_locations, LocationName.star_road_4_exit_1,
[LocationName.star_road_4_exit_1])
- star_road_4_exit_2 = create_region(world, player, active_locations, LocationName.star_road_4_exit_2,
+ star_road_4_exit_2 = create_region(multiworld, player, active_locations, LocationName.star_road_4_exit_2,
[LocationName.star_road_4_exit_2])
- star_road_5_tile = create_region(world, player, active_locations, LocationName.star_road_5_tile, None)
- star_road_5_region = create_region(world, player, active_locations, LocationName.star_road_5_region, None)
- star_road_5_exit_1 = create_region(world, player, active_locations, LocationName.star_road_5_exit_1,
+ star_road_5_tile = create_region(multiworld, player, active_locations, LocationName.star_road_5_tile, None)
+ star_road_5_region = create_region(multiworld, player, active_locations, LocationName.star_road_5_region, None)
+ star_road_5_exit_1 = create_region(multiworld, player, active_locations, LocationName.star_road_5_exit_1,
[LocationName.star_road_5_exit_1])
- star_road_5_exit_2 = create_region(world, player, active_locations, LocationName.star_road_5_exit_2,
+ star_road_5_exit_2 = create_region(multiworld, player, active_locations, LocationName.star_road_5_exit_2,
[LocationName.star_road_5_exit_2])
- special_zone_1_tile = create_region(world, player, active_locations, LocationName.special_zone_1_tile, None)
- special_zone_1_region = create_region(world, player, active_locations, LocationName.special_zone_1_region, None)
- special_zone_1_exit_1 = create_region(world, player, active_locations, LocationName.special_zone_1_exit_1,
+ special_zone_1_tile = create_region(multiworld, player, active_locations, LocationName.special_zone_1_tile, None)
+ special_zone_1_region = create_region(multiworld, player, active_locations, LocationName.special_zone_1_region, None)
+ special_zone_1_exit_1 = create_region(multiworld, player, active_locations, LocationName.special_zone_1_exit_1,
[LocationName.special_zone_1_exit_1])
- special_zone_2_tile = create_region(world, player, active_locations, LocationName.special_zone_2_tile, None)
- special_zone_2_region = create_region(world, player, active_locations, LocationName.special_zone_2_region, None)
- special_zone_2_exit_1 = create_region(world, player, active_locations, LocationName.special_zone_2_exit_1,
+ special_zone_2_tile = create_region(multiworld, player, active_locations, LocationName.special_zone_2_tile, None)
+ special_zone_2_region = create_region(multiworld, player, active_locations, LocationName.special_zone_2_region, None)
+ special_zone_2_exit_1 = create_region(multiworld, player, active_locations, LocationName.special_zone_2_exit_1,
[LocationName.special_zone_2_exit_1])
- special_zone_3_tile = create_region(world, player, active_locations, LocationName.special_zone_3_tile, None)
- special_zone_3_region = create_region(world, player, active_locations, LocationName.special_zone_3_region, None)
- special_zone_3_exit_1 = create_region(world, player, active_locations, LocationName.special_zone_3_exit_1,
+ special_zone_3_tile = create_region(multiworld, player, active_locations, LocationName.special_zone_3_tile, None)
+ special_zone_3_region = create_region(multiworld, player, active_locations, LocationName.special_zone_3_region, None)
+ special_zone_3_exit_1 = create_region(multiworld, player, active_locations, LocationName.special_zone_3_exit_1,
[LocationName.special_zone_3_exit_1])
- special_zone_4_tile = create_region(world, player, active_locations, LocationName.special_zone_4_tile, None)
- special_zone_4_region = create_region(world, player, active_locations, LocationName.special_zone_4_region, None)
- special_zone_4_exit_1 = create_region(world, player, active_locations, LocationName.special_zone_4_exit_1,
+ special_zone_4_tile = create_region(multiworld, player, active_locations, LocationName.special_zone_4_tile, None)
+ special_zone_4_region = create_region(multiworld, player, active_locations, LocationName.special_zone_4_region, None)
+ special_zone_4_exit_1 = create_region(multiworld, player, active_locations, LocationName.special_zone_4_exit_1,
[LocationName.special_zone_4_exit_1])
- special_zone_5_tile = create_region(world, player, active_locations, LocationName.special_zone_5_tile, None)
- special_zone_5_region = create_region(world, player, active_locations, LocationName.special_zone_5_region, None)
- special_zone_5_exit_1 = create_region(world, player, active_locations, LocationName.special_zone_5_exit_1,
+ special_zone_5_tile = create_region(multiworld, player, active_locations, LocationName.special_zone_5_tile, None)
+ special_zone_5_region = create_region(multiworld, player, active_locations, LocationName.special_zone_5_region, None)
+ special_zone_5_exit_1 = create_region(multiworld, player, active_locations, LocationName.special_zone_5_exit_1,
[LocationName.special_zone_5_exit_1])
- special_zone_6_tile = create_region(world, player, active_locations, LocationName.special_zone_6_tile, None)
- special_zone_6_region = create_region(world, player, active_locations, LocationName.special_zone_6_region, None)
- special_zone_6_exit_1 = create_region(world, player, active_locations, LocationName.special_zone_6_exit_1,
+ special_zone_6_tile = create_region(multiworld, player, active_locations, LocationName.special_zone_6_tile, None)
+ special_zone_6_region = create_region(multiworld, player, active_locations, LocationName.special_zone_6_region, None)
+ special_zone_6_exit_1 = create_region(multiworld, player, active_locations, LocationName.special_zone_6_exit_1,
[LocationName.special_zone_6_exit_1])
- special_zone_7_tile = create_region(world, player, active_locations, LocationName.special_zone_7_tile, None)
- special_zone_7_region = create_region(world, player, active_locations, LocationName.special_zone_7_region, None)
- special_zone_7_exit_1 = create_region(world, player, active_locations, LocationName.special_zone_7_exit_1,
+ special_zone_7_tile = create_region(multiworld, player, active_locations, LocationName.special_zone_7_tile, None)
+ special_zone_7_region = create_region(multiworld, player, active_locations, LocationName.special_zone_7_region, None)
+ special_zone_7_exit_1 = create_region(multiworld, player, active_locations, LocationName.special_zone_7_exit_1,
[LocationName.special_zone_7_exit_1])
- special_zone_8_tile = create_region(world, player, active_locations, LocationName.special_zone_8_tile, None)
- special_zone_8_region = create_region(world, player, active_locations, LocationName.special_zone_8_region, None)
- special_zone_8_exit_1 = create_region(world, player, active_locations, LocationName.special_zone_8_exit_1,
+ special_zone_8_tile = create_region(multiworld, player, active_locations, LocationName.special_zone_8_tile, None)
+ special_zone_8_region = create_region(multiworld, player, active_locations, LocationName.special_zone_8_region, None)
+ special_zone_8_exit_1 = create_region(multiworld, player, active_locations, LocationName.special_zone_8_exit_1,
[LocationName.special_zone_8_exit_1])
- special_complete = create_region(world, player, active_locations, LocationName.special_complete, None)
+ special_complete = create_region(multiworld, player, active_locations, LocationName.special_complete, None)
# Set up the regions correctly.
- world.regions += [
+ multiworld.regions += [
menu_region,
yoshis_island_region,
yoshis_house_tile,
@@ -725,323 +728,1327 @@ def create_regions(world, player: int, active_locations):
]
- if world.dragon_coin_checks[player]:
- add_location_to_region(world, player, active_locations, LocationName.yoshis_island_1_region, LocationName.yoshis_island_1_dragon,
+ if world.options.dragon_coin_checks:
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_1_region, LocationName.yoshis_island_1_dragon,
lambda state: (state.has(ItemName.mario_spin_jump, player) and
state.has(ItemName.progressive_powerup, player, 1)))
- add_location_to_region(world, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_dragon,
lambda state: (state.has(ItemName.yoshi_activate, player) or
state.has(ItemName.mario_climb, player)))
- add_location_to_region(world, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_dragon,
lambda state: state.has(ItemName.p_switch, player))
- add_location_to_region(world, player, active_locations, LocationName.yoshis_island_4_region, LocationName.yoshis_island_4_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_4_region, LocationName.yoshis_island_4_dragon,
lambda state: (state.has(ItemName.yoshi_activate, player) or
state.has(ItemName.mario_swim, player) or
(state.has(ItemName.mario_carry, player) and state.has(ItemName.p_switch, player))))
- add_location_to_region(world, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_dragon,
lambda state: (state.has(ItemName.mario_climb, player) or
state.has(ItemName.yoshi_activate, player) or
(state.has(ItemName.progressive_powerup, player, 3) and state.has(ItemName.mario_run, player))))
- add_location_to_region(world, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_dragon)
- add_location_to_region(world, player, active_locations, LocationName.donut_plains_3_region, LocationName.donut_plains_3_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_3_region, LocationName.donut_plains_3_dragon,
lambda state: ((state.has(ItemName.mario_spin_jump, player) and state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_climb, player) or
state.has(ItemName.yoshi_activate, player) or
(state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
- add_location_to_region(world, player, active_locations, LocationName.donut_plains_4_region, LocationName.donut_plains_4_dragon)
- add_location_to_region(world, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_4_region, LocationName.donut_plains_4_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_dragon,
lambda state: state.has(ItemName.mario_swim, player))
- add_location_to_region(world, player, active_locations, LocationName.donut_secret_2_region, LocationName.donut_secret_2_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_2_region, LocationName.donut_secret_2_dragon,
lambda state: (state.has(ItemName.mario_climb, player) or state.has(ItemName.yoshi_activate, player)))
- add_location_to_region(world, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_dragon,
lambda state: (state.has(ItemName.mario_carry, player) and
state.has(ItemName.mario_run, player) and
(state.has(ItemName.super_star_active, player) or
state.has(ItemName.progressive_powerup, player, 1))))
- add_location_to_region(world, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_dragon,
lambda state: (state.has(ItemName.mario_swim, player) and
state.has(ItemName.p_switch, player) and
(state.has(ItemName.mario_climb, player) or state.has(ItemName.yoshi_activate, player))))
- add_location_to_region(world, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_dragon)
- add_location_to_region(world, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_dragon)
- add_location_to_region(world, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_dragon,
lambda state: (state.has(ItemName.mario_climb, player) and
state.has(ItemName.mario_carry, player)))
- add_location_to_region(world, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_dragon,
lambda state: (state.has(ItemName.mario_run, player) and
state.has(ItemName.progressive_powerup, player, 3)))
- add_location_to_region(world, player, active_locations, LocationName.vanilla_secret_3_region, LocationName.vanilla_secret_3_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_3_region, LocationName.vanilla_secret_3_dragon,
lambda state: state.has(ItemName.mario_swim, player))
- add_location_to_region(world, player, active_locations, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_dragon,
lambda state: state.has(ItemName.mario_climb, player))
- add_location_to_region(world, player, active_locations, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_dragon)
- add_location_to_region(world, player, active_locations, LocationName.butter_bridge_2_region, LocationName.butter_bridge_2_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_2_region, LocationName.butter_bridge_2_dragon,
lambda state: (state.has(ItemName.mario_run, player) and
state.has(ItemName.progressive_powerup, player, 3)))
- add_location_to_region(world, player, active_locations, LocationName.cheese_bridge_region, LocationName.cheese_bridge_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.cheese_bridge_region, LocationName.cheese_bridge_dragon,
lambda state: (state.has(ItemName.yoshi_activate, player) or
state.has(ItemName.mario_climb, player)))
- add_location_to_region(world, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_dragon,
lambda state: (state.has(ItemName.yoshi_activate, player) or
state.has(ItemName.mario_climb, player)))
- add_location_to_region(world, player, active_locations, LocationName.soda_lake_region, LocationName.soda_lake_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.soda_lake_region, LocationName.soda_lake_dragon,
lambda state: state.has(ItemName.mario_swim, player))
- add_location_to_region(world, player, active_locations, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_dragon,
lambda state: state.has(ItemName.mario_swim, player))
- add_location_to_region(world, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_dragon,
lambda state: (state.has(ItemName.yoshi_activate, player) or
state.has(ItemName.mario_carry, player)))
- add_location_to_region(world, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_dragon,
lambda state: (state.has(ItemName.yoshi_activate, player) or
state.has(ItemName.mario_carry, player) or
state.has(ItemName.p_switch, player) or
state.has(ItemName.progressive_powerup, player, 2)))
- add_location_to_region(world, player, active_locations, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_dragon,
lambda state: state.has(ItemName.p_switch, player))
- add_location_to_region(world, player, active_locations, LocationName.forest_secret_region, LocationName.forest_secret_dragon)
- add_location_to_region(world, player, active_locations, LocationName.forest_castle_region, LocationName.forest_castle_dragon)
- add_location_to_region(world, player, active_locations, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_dragon,
- lambda state: state.has(ItemName.mario_swim, player))
- add_location_to_region(world, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_secret_region, LocationName.forest_secret_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_castle_region, LocationName.forest_castle_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_dragon,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_dragon,
lambda state: (state.has(ItemName.blue_switch_palace, player) and
(state.has(ItemName.p_switch, player) or
state.has(ItemName.green_switch_palace, player) or
(state.has(ItemName.yellow_switch_palace, player) or state.has(ItemName.red_switch_palace, player)))))
- add_location_to_region(world, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_dragon)
- add_location_to_region(world, player, active_locations, LocationName.chocolate_island_4_region, LocationName.chocolate_island_4_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_4_region, LocationName.chocolate_island_4_dragon,
lambda state: (state.has(ItemName.p_switch, player) and
state.has(ItemName.progressive_powerup, player, 3)))
- add_location_to_region(world, player, active_locations, LocationName.chocolate_island_5_region, LocationName.chocolate_island_5_dragon,
- lambda state: (state.has(ItemName.mario_swim, player) or
- (state.has(ItemName.mario_carry, player) and state.has(ItemName.p_switch, player))))
- add_location_to_region(world, player, active_locations, LocationName.sunken_ghost_ship_region, LocationName.sunken_ghost_ship_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_5_region, LocationName.chocolate_island_5_dragon,
+ lambda state: (state.has(ItemName.mario_carry, player) and state.has(ItemName.p_switch, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.sunken_ghost_ship_region, LocationName.sunken_ghost_ship_dragon,
lambda state: (state.has(ItemName.mario_swim, player) and
state.has(ItemName.super_star_active, player) and
state.has(ItemName.progressive_powerup, player, 3)))
- add_location_to_region(world, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_dragon)
- add_location_to_region(world, player, active_locations, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_dragon,
lambda state: state.has(ItemName.yoshi_activate, player))
- add_location_to_region(world, player, active_locations, LocationName.valley_of_bowser_3_region, LocationName.valley_of_bowser_3_dragon)
- add_location_to_region(world, player, active_locations, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_3_region, LocationName.valley_of_bowser_3_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_dragon,
lambda state: state.has(ItemName.p_switch, player))
- add_location_to_region(world, player, active_locations, LocationName.valley_castle_region, LocationName.valley_castle_dragon)
- add_location_to_region(world, player, active_locations, LocationName.star_road_1_region, LocationName.star_road_1_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_castle_region, LocationName.valley_castle_dragon)
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_1_region, LocationName.star_road_1_dragon,
lambda state: (state.has(ItemName.mario_spin_jump, player) and
state.has(ItemName.progressive_powerup, player, 1)))
- add_location_to_region(world, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_dragon,
lambda state: state.has(ItemName.mario_climb, player))
- add_location_to_region(world, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_dragon,
lambda state: state.has(ItemName.p_balloon, player))
- add_location_to_region(world, player, active_locations, LocationName.special_zone_3_region, LocationName.special_zone_3_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_3_region, LocationName.special_zone_3_dragon,
lambda state: state.has(ItemName.yoshi_activate, player))
- add_location_to_region(world, player, active_locations, LocationName.special_zone_4_region, LocationName.special_zone_4_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_4_region, LocationName.special_zone_4_dragon,
lambda state: state.has(ItemName.progressive_powerup, player, 1))
- add_location_to_region(world, player, active_locations, LocationName.special_zone_5_region, LocationName.special_zone_5_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_5_region, LocationName.special_zone_5_dragon,
lambda state: state.has(ItemName.progressive_powerup, player, 1))
- add_location_to_region(world, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_dragon,
lambda state: state.has(ItemName.mario_swim, player))
- add_location_to_region(world, player, active_locations, LocationName.special_zone_7_region, LocationName.special_zone_7_dragon,
- lambda state: state.has(ItemName.progressive_powerup, player, 1))
- add_location_to_region(world, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_dragon,
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_7_region, LocationName.special_zone_7_dragon,
lambda state: state.has(ItemName.progressive_powerup, player, 1))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_dragon,
+ lambda state: ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player)) or
+ state.has(ItemName.progressive_powerup, player, 3) or
+ state.has(ItemName.yoshi_activate, player) or
+ state.has(ItemName.mario_carry, player)))
+ if world.options.moon_checks:
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_1_region, LocationName.yoshis_island_1_moon,
+ lambda state: ((state.has(ItemName.mario_run, player) and
+ state.has(ItemName.progressive_powerup, player, 3)) or
+ state.has(ItemName.yoshi_activate, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_4_region, LocationName.donut_plains_4_moon,
+ lambda state: (state.has(ItemName.mario_run, player) and
+ state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_moon,
+ lambda state: (state.has(ItemName.mario_run, player) and
+ state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.cheese_bridge_region, LocationName.cheese_bridge_moon,
+ lambda state: (state.has(ItemName.mario_run, player) and
+ (state.has(ItemName.progressive_powerup, player, 3) or
+ state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_moon,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_moon,
+ lambda state: ((state.has(ItemName.mario_run, player) and
+ state.has(ItemName.progressive_powerup, player, 3)) or
+ state.has(ItemName.yoshi_activate, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_moon)
+ if world.options.hidden_1up_checks:
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_4_region, LocationName.yoshis_island_4_hidden_1up,
+ lambda state: (state.has(ItemName.yoshi_activate, player) or
+ (state.has(ItemName.mario_run, player, player) and
+ state.has(ItemName.progressive_powerup, player, 3))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_hidden_1up)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_4_region, LocationName.donut_plains_4_hidden_1up,
+ lambda state: (state.has(ItemName.mario_run, player) and
+ state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_hidden_1up)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_hidden_1up)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_hidden_1up)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_fortress_region, LocationName.vanilla_fortress_hidden_1up,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_hidden_1up,
+ lambda state: (state.has(ItemName.mario_swim, player) or
+ state.has(ItemName.yoshi_activate, player) or
+ (state.has(ItemName.mario_run, player, player) and
+ state.has(ItemName.progressive_powerup, player, 3))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_hidden_1up,
+ lambda state: (state.has(ItemName.mario_carry, player) or
+ state.has(ItemName.yoshi_activate, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_hidden_1up)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_castle_region, LocationName.chocolate_castle_hidden_1up,
+ lambda state: (state.has(ItemName.progressive_powerup, player, 1)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_hidden_1up)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_castle_region, LocationName.valley_castle_hidden_1up)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_hidden_1up,
+ lambda state: state.has(ItemName.mario_climb, player))
+
+ if world.options.bonus_block_checks:
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_bonus_block)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_3_region, LocationName.donut_plains_3_bonus_block)
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_bonus_block)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_bonus_block)
+
+ if world.options.blocksanity:
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_green_block_1,
+ lambda state:( ((state.has(ItemName.green_switch_palace, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_gray_pow_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_coin_block_4)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_coin_block_5)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_coin_block_6)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_3_region, LocationName.vanilla_secret_3_powerup_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_3_region, LocationName.vanilla_secret_3_powerup_block_2,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_directional_coin_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_life_block_1,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_life_block_2,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_life_block_3,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_life_block_4,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_3_region, LocationName.donut_plains_3_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_3_region, LocationName.donut_plains_3_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_3_region, LocationName.donut_plains_3_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_3_region, LocationName.donut_plains_3_vine_block_1,
+ lambda state: (state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_3_region, LocationName.donut_plains_3_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_3_region, LocationName.donut_plains_3_bonus_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_4_region, LocationName.donut_plains_4_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_4_region, LocationName.donut_plains_4_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_4_region, LocationName.donut_plains_4_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_4_region, LocationName.donut_plains_4_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_invis_life_block_1,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_coin_block_4)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_coin_block_5)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_flying_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_yellow_block_2,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_2_region, LocationName.donut_plains_2_vine_block_1,
+ lambda state:( ((state.has(ItemName.mario_climb, player) and state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_coin_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_coin_block_2,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_powerup_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_coin_block_3,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_powerup_block_2,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_powerup_block_3,
+ lambda state: (state.has(ItemName.mario_swim, player) and state.has(ItemName.p_balloon, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_life_block_1,
+ lambda state: (state.has(ItemName.mario_swim, player) and state.has(ItemName.p_balloon, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_powerup_block_4,
+ lambda state: (state.has(ItemName.mario_swim, player) and state.has(ItemName.p_balloon, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_powerup_block_5,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_1_region, LocationName.donut_secret_1_key_block_1,
+ lambda state: (state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.p_switch, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_fortress_region, LocationName.vanilla_fortress_powerup_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_fortress_region, LocationName.vanilla_fortress_powerup_block_2,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_fortress_region, LocationName.vanilla_fortress_yellow_block_1,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_swim, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_multi_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_multi_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_life_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_bonus_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_2_region, LocationName.butter_bridge_2_powerup_block_1,
+ lambda state: state.has(ItemName.mario_carry, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_2_region, LocationName.butter_bridge_2_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.butter_bridge_2_region, LocationName.butter_bridge_2_yoshi_block_1,
+ lambda state: state.has(ItemName.mario_carry, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.twin_bridges_castle_region, LocationName.twin_bridges_castle_powerup_block_1,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.cheese_bridge_region, LocationName.cheese_bridge_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cheese_bridge_region, LocationName.cheese_bridge_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cheese_bridge_region, LocationName.cheese_bridge_wings_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cheese_bridge_region, LocationName.cheese_bridge_powerup_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_4)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_5)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_6)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_7)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_8)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_9)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_life_block_1,
+ lambda state:( (state.has(ItemName.mario_climb, player)) or (state.has(ItemName.mario_swim, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_yoshi_block_1,
+ lambda state: state.has(ItemName.red_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_10)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_11)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_12)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_13)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_14)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_15)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_16)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_17)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_18)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_19)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_20)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_21)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_22)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_23)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_24)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_25)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_26)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_27)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_28)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_29)
+ add_location_to_region(multiworld, player, active_locations, LocationName.cookie_mountain_region, LocationName.cookie_mountain_coin_block_30)
+ add_location_to_region(multiworld, player, active_locations, LocationName.soda_lake_region, LocationName.soda_lake_powerup_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_house_region, LocationName.donut_secret_house_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_house_region, LocationName.donut_secret_house_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_house_region, LocationName.donut_secret_house_life_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_house_region, LocationName.donut_secret_house_vine_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_house_region, LocationName.donut_secret_house_directional_coin_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_1,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_2,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_3,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_4,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_5,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_6,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_7,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_8,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_9,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_10,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_11,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_12,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_13,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_14,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_15,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_green_block_16,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_yellow_block_2,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_plains_1_region, LocationName.donut_plains_1_yellow_block_3,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.sunken_ghost_ship_region, LocationName.sunken_ghost_ship_powerup_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.sunken_ghost_ship_region, LocationName.sunken_ghost_ship_star_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_castle_region, LocationName.chocolate_castle_yellow_block_1,
+ lambda state: (state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.yellow_switch_palace, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_castle_region, LocationName.chocolate_castle_yellow_block_2,
+ lambda state: (state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.yellow_switch_palace, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_castle_region, LocationName.chocolate_castle_green_block_1,
+ lambda state: (state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.yellow_switch_palace, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_fortress_region, LocationName.chocolate_fortress_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_fortress_region, LocationName.chocolate_fortress_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_fortress_region, LocationName.chocolate_fortress_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_fortress_region, LocationName.chocolate_fortress_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_fortress_region, LocationName.chocolate_fortress_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_5_region, LocationName.chocolate_island_5_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_5_region, LocationName.chocolate_island_5_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_5_region, LocationName.chocolate_island_5_life_block_1,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.progressive_powerup, player, 3))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_5_region, LocationName.chocolate_island_5_yellow_block_1,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.mario_carry, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_4_region, LocationName.chocolate_island_4_yellow_block_1,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.blue_switch_palace, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_4_region, LocationName.chocolate_island_4_blue_pow_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_4_region, LocationName.chocolate_island_4_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_life_block_1,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_life_block_2,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_life_block_3,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_life_block_4,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_life_block_5,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_life_block_6,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_life_block_7,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_life_block_8,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_fortress_region, LocationName.forest_fortress_life_block_9,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_castle_region, LocationName.forest_castle_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_ghost_house_region, LocationName.chocolate_ghost_house_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_ghost_house_region, LocationName.chocolate_ghost_house_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_ghost_house_region, LocationName.chocolate_ghost_house_life_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_flying_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_flying_block_2,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_yoshi_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_green_block_1,
+ lambda state:( ((state.has(ItemName.green_switch_palace, player) and state.has(ItemName.blue_switch_palace, player) and state.has(ItemName.p_switch, player))) or ((state.has(ItemName.green_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3) and state.has(ItemName.p_switch, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.blue_switch_palace, player) and state.has(ItemName.p_switch, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3) and state.has(ItemName.p_switch, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_life_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_powerup_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_bonus_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_life_block_1,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_life_block_2,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_life_block_3,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_invis_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_multi_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_blue_pow_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_yellow_block_2,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_green_block_2,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_green_block_3,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_green_block_4,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_green_block_5,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_green_block_6,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_castle_region, LocationName.yoshis_island_castle_coin_block_1,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_castle_region, LocationName.yoshis_island_castle_coin_block_2,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_castle_region, LocationName.yoshis_island_castle_powerup_block_1,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_castle_region, LocationName.yoshis_island_castle_coin_block_3,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_castle_region, LocationName.yoshis_island_castle_coin_block_4,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_castle_region, LocationName.yoshis_island_castle_flying_block_1,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_4_region, LocationName.yoshis_island_4_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_4_region, LocationName.yoshis_island_4_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_4_region, LocationName.yoshis_island_4_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_4_region, LocationName.yoshis_island_4_star_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_2,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_3,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_4,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_5,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_6,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_7,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_8,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_9,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_10,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_11,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_yellow_block_12,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_bonus_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_1_region, LocationName.yoshis_island_1_flying_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_1_region, LocationName.yoshis_island_1_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_1_region, LocationName.yoshis_island_1_life_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_1_region, LocationName.yoshis_island_1_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_flying_block_1,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_flying_block_2,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_flying_block_3,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_flying_block_4,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_flying_block_5,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_flying_block_6,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_coin_block_4)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_yoshi_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_coin_block_5)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_yellow_block_2,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_blue_pow_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_vine_block_2,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_coin_block_2,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_coin_block_3,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_powerup_block_2,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_flying_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_flying_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_flying_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_invis_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_powerup_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_yoshi_block_1,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_powerup_block_4)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_pswitch_coin_block_1,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3) and state.has(ItemName.p_switch, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_pswitch_coin_block_2,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3) and state.has(ItemName.p_switch, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_pswitch_coin_block_3,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3) and state.has(ItemName.p_switch, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_pswitch_coin_block_4,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3) and state.has(ItemName.p_switch, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_pswitch_coin_block_5,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3) and state.has(ItemName.p_switch, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_pswitch_coin_block_6,
+ lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3) and state.has(ItemName.p_switch, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_2_region, LocationName.donut_secret_2_directional_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_2_region, LocationName.donut_secret_2_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_2_region, LocationName.donut_secret_2_star_block_1,
+ lambda state:( (state.has(ItemName.mario_climb, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_2_region, LocationName.donut_secret_2_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.donut_secret_2_region, LocationName.donut_secret_2_star_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_yoshi_block_1,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_life_block_1,
+ lambda state: (state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player) and state.has(ItemName.mario_climb, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_powerup_block_2,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_climb, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_castle_region, LocationName.valley_castle_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_castle_region, LocationName.valley_castle_yellow_block_2,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_castle_region, LocationName.valley_castle_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_fortress_region, LocationName.valley_fortress_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_fortress_region, LocationName.valley_fortress_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_3_region, LocationName.valley_of_bowser_3_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_3_region, LocationName.valley_of_bowser_3_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_pswitch_coin_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_multi_coin_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_directional_coin_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_yellow_block_1,
+ lambda state: state.has(ItemName.yellow_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_wings_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_invis_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_invis_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_invis_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_yellow_block_1,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_yellow_block_2,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_yellow_block_3,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_yellow_block_4,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_secret_region, LocationName.chocolate_secret_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.chocolate_secret_region, LocationName.chocolate_secret_powerup_block_2,
+ lambda state: state.has(ItemName.mario_run, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_coin_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_powerup_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_coin_block_2,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_coin_block_3,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_vine_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_invis_life_block_1,
+ lambda state:( ((state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_climb, player))) or ((state.has(ItemName.mario_swim, player) and state.has(ItemName.yoshi_activate, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_coin_block_4,
+ lambda state:( ((state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_climb, player))) or ((state.has(ItemName.mario_swim, player) and state.has(ItemName.yoshi_activate, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_coin_block_5,
+ lambda state:( ((state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_climb, player))) or ((state.has(ItemName.mario_swim, player) and state.has(ItemName.yoshi_activate, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_powerup_block_2,
+ lambda state:( ((state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_climb, player))) or ((state.has(ItemName.mario_swim, player) and state.has(ItemName.yoshi_activate, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_powerup_block_3,
+ lambda state:( ((state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_climb, player))) or ((state.has(ItemName.mario_swim, player) and state.has(ItemName.yoshi_activate, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_powerup_block_4,
+ lambda state:( ((state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_climb, player))) or ((state.has(ItemName.mario_swim, player) and state.has(ItemName.yoshi_activate, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_powerup_block_5,
+ lambda state:( ((state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_climb, player))) or ((state.has(ItemName.mario_swim, player) and state.has(ItemName.yoshi_activate, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_multi_coin_block_1,
+ lambda state:( ((state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_climb, player))) or ((state.has(ItemName.mario_swim, player) and state.has(ItemName.yoshi_activate, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_multi_coin_block_2,
+ lambda state:( ((state.has(ItemName.mario_swim, player) and state.has(ItemName.mario_climb, player))) or ((state.has(ItemName.mario_swim, player) and state.has(ItemName.yoshi_activate, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_life_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_coin_block_4)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_coin_block_5)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_coin_block_6)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_coin_block_7)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_coin_block_8,
+ lambda state: state.has(ItemName.mario_carry, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_flying_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_life_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_powerup_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_vine_block_1,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.red_switch_palace, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_star_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_powerup_block_4,
+ lambda state:( ((state.has(ItemName.mario_run, player) and state.has(ItemName.super_star_active, player))) or ((state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 1)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_coin_block_2,
+ lambda state:( ((state.has(ItemName.mario_run, player) and state.has(ItemName.super_star_active, player))) or ((state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 1)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_castle_region, LocationName.vanilla_dome_castle_life_block_1,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.progressive_powerup, player, 1))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_castle_region, LocationName.vanilla_dome_castle_life_block_2,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.progressive_powerup, player, 1))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_castle_region, LocationName.vanilla_dome_castle_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_castle_region, LocationName.vanilla_dome_castle_life_block_3,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.vanilla_dome_castle_region, LocationName.vanilla_dome_castle_green_block_1,
+ lambda state: state.has(ItemName.green_switch_palace, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_flying_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_life_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_1_region, LocationName.forest_of_illusion_1_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_1_region, LocationName.forest_of_illusion_1_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_1_region, LocationName.forest_of_illusion_1_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_1_region, LocationName.forest_of_illusion_1_key_block_1,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_1_region, LocationName.forest_of_illusion_1_life_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_4)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_5)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_6)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_7)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_8)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_9)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_coin_block_10)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_green_block_1,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.mario_carry, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_powerup_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_invis_coin_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_invis_coin_block_2,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_invis_life_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_invis_coin_block_3,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_yellow_block_1,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.mario_swim, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_secret_region, LocationName.forest_secret_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_secret_region, LocationName.forest_secret_powerup_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_secret_region, LocationName.forest_secret_life_block_1,
+ lambda state:( (state.has(ItemName.blue_switch_palace, player)) or (state.has(ItemName.mario_carry, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_multi_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_2,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_multi_coin_block_2,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_3,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_4,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_5,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_6,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_7,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_8,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_9,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_10,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_11,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_12,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_13,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_14,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_15,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_16,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_17,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_18,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_19,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_20,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_21,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_22,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_23,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_coin_block_24,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_yoshi_block_1,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_4)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_5)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_blue_pow_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_star_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_6,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_7,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_8,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_9,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_10,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_11,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_12,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_13,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_14,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_15,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_16,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_17,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_18,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_multi_coin_block_1,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_19,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_20,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_21,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_22,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_coin_block_23,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_powerup_block_2,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_8_region, LocationName.special_zone_8_flying_block_1,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player))) or (state.has(ItemName.progressive_powerup, player, 3)) or (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.yoshi_activate, player))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_7_region, LocationName.special_zone_7_powerup_block_1,
+ lambda state: state.has(ItemName.progressive_powerup, player, 1))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_7_region, LocationName.special_zone_7_yoshi_block_1,
+ lambda state: state.has(ItemName.progressive_powerup, player, 1))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_7_region, LocationName.special_zone_7_coin_block_1,
+ lambda state: state.has(ItemName.progressive_powerup, player, 1))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_7_region, LocationName.special_zone_7_powerup_block_2,
+ lambda state: state.has(ItemName.progressive_powerup, player, 1))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_7_region, LocationName.special_zone_7_coin_block_2,
+ lambda state: state.has(ItemName.progressive_powerup, player, 1))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_powerup_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_2,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_yoshi_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_life_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_multi_coin_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_3,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_4,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_5,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_6,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_7,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_8,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_9,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_10,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_11,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_12,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_13,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_14,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_15,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_16,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_17,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_18,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_19,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_20,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_21,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_22,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_23,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_24,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_25,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_26,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_27,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_28,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_powerup_block_2,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_29,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_30,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_31,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_32,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_6_region, LocationName.special_zone_6_coin_block_33,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_5_region, LocationName.special_zone_5_yoshi_block_1,
+ lambda state: state.has(ItemName.progressive_powerup, player, 1))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_vine_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_vine_block_2)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_vine_block_3)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_vine_block_4)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_life_block_1,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_vine_block_5,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_blue_pow_block_1,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_vine_block_6,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_powerup_block_1,
+ lambda state: state.has(ItemName.mario_climb, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_1,
+ lambda state: (state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_2,
+ lambda state: (state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_3,
+ lambda state: (state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_4,
+ lambda state: (state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_5,
+ lambda state: (state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_6,
+ lambda state: (state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_7,
+ lambda state: (state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_8,
+ lambda state: (state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_9,
+ lambda state: (state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_10,
+ lambda state:( ((state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3))) or ((state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.mario_carry, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_11,
+ lambda state:( ((state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3))) or ((state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.mario_carry, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_12,
+ lambda state:( ((state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3))) or ((state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.mario_carry, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_1_region, LocationName.special_zone_1_pswitch_coin_block_13,
+ lambda state:( ((state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.progressive_powerup, player, 3))) or ((state.has(ItemName.mario_climb, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.mario_carry, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_coin_block_1,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_coin_block_2,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_powerup_block_2,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_coin_block_3,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_coin_block_4,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_powerup_block_3,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_multi_coin_block_1,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_coin_block_5,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_2_region, LocationName.special_zone_2_coin_block_6,
+ lambda state: state.has(ItemName.p_balloon, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_3_region, LocationName.special_zone_3_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_3_region, LocationName.special_zone_3_yoshi_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_3_region, LocationName.special_zone_3_wings_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_4_region, LocationName.special_zone_4_powerup_block_1,
+ lambda state: state.has(ItemName.progressive_powerup, player, 2))
+ add_location_to_region(multiworld, player, active_locations, LocationName.special_zone_4_region, LocationName.special_zone_4_star_block_1,
+ lambda state:( ((state.has(ItemName.progressive_powerup, player, 2) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.progressive_powerup, player, 2) and state.has(ItemName.p_switch, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_2_region, LocationName.star_road_2_star_block_1,
+ lambda state: state.has(ItemName.mario_swim, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_3_region, LocationName.star_road_3_key_block_1,
+ lambda state:( (state.has(ItemName.mario_carry, player)) or (state.has(ItemName.progressive_powerup, player, 2))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_4_region, LocationName.star_road_4_powerup_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_4_region, LocationName.star_road_4_green_block_1,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_4_region, LocationName.star_road_4_green_block_2,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_4_region, LocationName.star_road_4_green_block_3,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_4_region, LocationName.star_road_4_green_block_4,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_4_region, LocationName.star_road_4_green_block_5,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_4_region, LocationName.star_road_4_green_block_6,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_4_region, LocationName.star_road_4_green_block_7,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_4_region, LocationName.star_road_4_key_block_1,
+ lambda state:( ((state.has(ItemName.mario_climb, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.green_switch_palace, player) and state.has(ItemName.red_switch_palace, player) and state.has(ItemName.mario_climb, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_directional_coin_block_1)
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_life_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_vine_block_1,
+ lambda state: state.has(ItemName.p_switch, player))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_1,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.mario_climb, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_2,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_3,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_4,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_5,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_6,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_7,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_8,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_9,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_10,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_11,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_12,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_13,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_14,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_15,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_16,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_17,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_18,
+ lambda state: (state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_19,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.green_switch_palace, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.mario_climb, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_yellow_block_20,
+ lambda state:( ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player))) or ((state.has(ItemName.yellow_switch_palace, player) and state.has(ItemName.green_switch_palace, player) and state.has(ItemName.p_switch, player) and state.has(ItemName.mario_climb, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.progressive_powerup, player, 3)))))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_1,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_2,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_3,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_4,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_5,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_6,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_7,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_8,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_9,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_10,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_11,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_12,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_13,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_14,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_15,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_16,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_17,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_18,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_19,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+ add_location_to_region(multiworld, player, active_locations, LocationName.star_road_5_region, LocationName.star_road_5_green_block_20,
+ lambda state: (state.has(ItemName.green_switch_palace, player) and state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_carry, player) and state.has(ItemName.special_world_clear, player)))
+
+def connect_regions(world: World, level_to_tile_dict):
+ multiworld: MultiWorld = world.multiworld
+ player: int = world.player
-def connect_regions(world, player, level_to_tile_dict):
names: typing.Dict[str, int] = {}
- connect(world, player, names, "Menu", LocationName.yoshis_island_region)
- connect(world, player, names, LocationName.yoshis_island_region, LocationName.yoshis_house_tile)
- connect(world, player, names, LocationName.yoshis_house_tile, LocationName.donut_plains_top_secret)
- connect(world, player, names, LocationName.yoshis_island_region, LocationName.yoshis_island_1_tile)
- connect(world, player, names, LocationName.yoshis_island_region, LocationName.yoshis_island_2_tile)
+ connect(world, "Menu", LocationName.yoshis_island_region)
+ connect(world, LocationName.yoshis_island_region, LocationName.yoshis_house_tile)
+ connect(world, LocationName.yoshis_island_region, LocationName.yoshis_island_1_tile)
+ connect(world, LocationName.yoshis_island_region, LocationName.yoshis_island_2_tile)
# Connect regions within levels using rules
- connect(world, player, names, LocationName.yoshis_island_1_region, LocationName.yoshis_island_1_exit_1)
- connect(world, player, names, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_exit_1)
- connect(world, player, names, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_exit_1)
- connect(world, player, names, LocationName.yoshis_island_4_region, LocationName.yoshis_island_4_exit_1)
- connect(world, player, names, LocationName.yoshis_island_castle_region, LocationName.yoshis_island_castle,
+ connect(world, LocationName.yoshis_island_1_region, LocationName.yoshis_island_1_exit_1)
+ connect(world, LocationName.yoshis_island_2_region, LocationName.yoshis_island_2_exit_1)
+ connect(world, LocationName.yoshis_island_3_region, LocationName.yoshis_island_3_exit_1)
+ connect(world, LocationName.yoshis_island_4_region, LocationName.yoshis_island_4_exit_1)
+ connect(world, LocationName.yoshis_island_castle_region, LocationName.yoshis_island_castle,
lambda state: (state.has(ItemName.mario_climb, player)))
- connect(world, player, names, LocationName.donut_plains_1_region, LocationName.donut_plains_1_exit_1)
- connect(world, player, names, LocationName.donut_plains_1_region, LocationName.donut_plains_1_exit_2,
+ connect(world, LocationName.donut_plains_1_region, LocationName.donut_plains_1_exit_1)
+ connect(world, LocationName.donut_plains_1_region, LocationName.donut_plains_1_exit_2,
lambda state: (state.has(ItemName.mario_carry, player) and
(state.has(ItemName.yoshi_activate, player) or
state.has(ItemName.green_switch_palace, player) or
(state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
- connect(world, player, names, LocationName.donut_plains_2_region, LocationName.donut_plains_2_exit_1)
- connect(world, player, names, LocationName.donut_plains_2_region, LocationName.donut_plains_2_exit_2,
+ connect(world, LocationName.donut_plains_2_region, LocationName.donut_plains_2_exit_1)
+ connect(world, LocationName.donut_plains_2_region, LocationName.donut_plains_2_exit_2,
lambda state: (state.has(ItemName.mario_carry, player) and
(state.has(ItemName.yoshi_activate, player) or
(state.has(ItemName.mario_spin_jump, player) and state.has(ItemName.mario_climb, player) and state.has(ItemName.progressive_powerup, player, 1)))))
- connect(world, player, names, LocationName.donut_secret_1_region, LocationName.donut_secret_1_exit_1,
+ connect(world, LocationName.donut_secret_1_region, LocationName.donut_secret_1_exit_1,
lambda state: state.has(ItemName.mario_swim, player))
- connect(world, player, names, LocationName.donut_secret_1_region, LocationName.donut_secret_1_exit_2,
+ connect(world, LocationName.donut_secret_1_region, LocationName.donut_secret_1_exit_2,
lambda state: (state.has(ItemName.mario_carry, player) and
state.has(ItemName.mario_swim, player) and
state.has(ItemName.p_switch, player)))
- connect(world, player, names, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_exit_1,
+ connect(world, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_exit_1,
lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
- connect(world, player, names, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_exit_2,
+ connect(world, LocationName.donut_ghost_house_region, LocationName.donut_ghost_house_exit_2,
lambda state: (state.has(ItemName.mario_climb, player) or
(state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3))))
- connect(world, player, names, LocationName.donut_secret_house_region, LocationName.donut_secret_house_exit_1,
+ connect(world, LocationName.donut_secret_house_region, LocationName.donut_secret_house_exit_1,
lambda state: state.has(ItemName.p_switch, player))
- connect(world, player, names, LocationName.donut_secret_house_region, LocationName.donut_secret_house_exit_2,
+ connect(world, LocationName.donut_secret_house_region, LocationName.donut_secret_house_exit_2,
lambda state: (state.has(ItemName.p_switch, player) and state.has(ItemName.mario_carry, player) and
(state.has(ItemName.mario_climb, player) or
(state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
- connect(world, player, names, LocationName.donut_plains_3_region, LocationName.donut_plains_3_exit_1)
- connect(world, player, names, LocationName.donut_plains_4_region, LocationName.donut_plains_4_exit_1)
- connect(world, player, names, LocationName.donut_secret_2_region, LocationName.donut_secret_2_exit_1)
- connect(world, player, names, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle)
+ connect(world, LocationName.donut_plains_3_region, LocationName.donut_plains_3_exit_1)
+ connect(world, LocationName.donut_plains_4_region, LocationName.donut_plains_4_exit_1)
+ connect(world, LocationName.donut_secret_2_region, LocationName.donut_secret_2_exit_1)
+ connect(world, LocationName.donut_plains_castle_region, LocationName.donut_plains_castle)
- connect(world, player, names, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_exit_1,
+ connect(world, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_exit_1,
lambda state: (state.has(ItemName.mario_run, player) and
(state.has(ItemName.super_star_active, player) or
state.has(ItemName.progressive_powerup, player, 1))))
- connect(world, player, names, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_exit_2,
+ connect(world, LocationName.vanilla_dome_1_region, LocationName.vanilla_dome_1_exit_2,
lambda state: (state.has(ItemName.mario_carry, player) and
((state.has(ItemName.yoshi_activate, player) and state.has(ItemName.mario_climb, player)) or
(state.has(ItemName.yoshi_activate, player) and state.has(ItemName.red_switch_palace, player)) or
(state.has(ItemName.red_switch_palace, player) and state.has(ItemName.mario_climb, player)))))
- connect(world, player, names, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_exit_1,
+ connect(world, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_exit_1,
lambda state: (state.has(ItemName.mario_swim, player) and
(state.has(ItemName.mario_climb, player) or state.has(ItemName.yoshi_activate, player))))
- connect(world, player, names, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_exit_2,
+ connect(world, LocationName.vanilla_dome_2_region, LocationName.vanilla_dome_2_exit_2,
lambda state: (state.has(ItemName.mario_swim, player) and
state.has(ItemName.p_switch, player) and
state.has(ItemName.mario_carry, player) and
(state.has(ItemName.mario_climb, player) or state.has(ItemName.yoshi_activate, player))))
- connect(world, player, names, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_exit_1,
+ connect(world, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_exit_1,
lambda state: state.has(ItemName.mario_climb, player))
- connect(world, player, names, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_exit_2,
+ connect(world, LocationName.vanilla_secret_1_region, LocationName.vanilla_secret_1_exit_2,
lambda state: (state.has(ItemName.mario_climb, player) and
(state.has(ItemName.mario_carry, player) and state.has(ItemName.blue_switch_palace, player))))
- connect(world, player, names, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_exit_1,
+ connect(world, LocationName.vanilla_ghost_house_region, LocationName.vanilla_ghost_house_exit_1,
lambda state: state.has(ItemName.p_switch, player))
- connect(world, player, names, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_exit_1)
- connect(world, player, names, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_exit_1)
- connect(world, player, names, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_exit_1)
- connect(world, player, names, LocationName.vanilla_secret_3_region, LocationName.vanilla_secret_3_exit_1,
+ connect(world, LocationName.vanilla_dome_3_region, LocationName.vanilla_dome_3_exit_1)
+ connect(world, LocationName.vanilla_dome_4_region, LocationName.vanilla_dome_4_exit_1)
+ connect(world, LocationName.vanilla_secret_2_region, LocationName.vanilla_secret_2_exit_1)
+ connect(world, LocationName.vanilla_secret_3_region, LocationName.vanilla_secret_3_exit_1,
lambda state: state.has(ItemName.mario_swim, player))
- connect(world, player, names, LocationName.vanilla_fortress_region, LocationName.vanilla_fortress,
+ connect(world, LocationName.vanilla_fortress_region, LocationName.vanilla_fortress,
lambda state: state.has(ItemName.mario_swim, player))
- connect(world, player, names, LocationName.vanilla_dome_castle_region, LocationName.vanilla_dome_castle)
+ connect(world, LocationName.vanilla_dome_castle_region, LocationName.vanilla_dome_castle)
- connect(world, player, names, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_exit_1)
- connect(world, player, names, LocationName.butter_bridge_2_region, LocationName.butter_bridge_2_exit_1)
- connect(world, player, names, LocationName.cheese_bridge_region, LocationName.cheese_bridge_exit_1,
+ connect(world, LocationName.butter_bridge_1_region, LocationName.butter_bridge_1_exit_1)
+ connect(world, LocationName.butter_bridge_2_region, LocationName.butter_bridge_2_exit_1)
+ connect(world, LocationName.cheese_bridge_region, LocationName.cheese_bridge_exit_1,
lambda state: state.has(ItemName.mario_climb, player))
- connect(world, player, names, LocationName.cheese_bridge_region, LocationName.cheese_bridge_exit_2,
- lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
- connect(world, player, names, LocationName.soda_lake_region, LocationName.soda_lake_exit_1,
+ connect(world, LocationName.cheese_bridge_region, LocationName.cheese_bridge_exit_2,
+ lambda state: (state.has(ItemName.mario_run, player) and
+ (state.has(ItemName.progressive_powerup, player, 3) or
+ state.has(ItemName.yoshi_activate, player))))
+ connect(world, LocationName.soda_lake_region, LocationName.soda_lake_exit_1,
lambda state: state.has(ItemName.mario_swim, player))
- connect(world, player, names, LocationName.cookie_mountain_region, LocationName.cookie_mountain_exit_1)
- connect(world, player, names, LocationName.twin_bridges_castle_region, LocationName.twin_bridges_castle,
+ connect(world, LocationName.cookie_mountain_region, LocationName.cookie_mountain_exit_1)
+ connect(world, LocationName.twin_bridges_castle_region, LocationName.twin_bridges_castle,
lambda state: (state.has(ItemName.mario_run, player) and
state.has(ItemName.mario_climb, player)))
- connect(world, player, names, LocationName.forest_of_illusion_1_region, LocationName.forest_of_illusion_1_exit_1)
- connect(world, player, names, LocationName.forest_of_illusion_1_region, LocationName.forest_of_illusion_1_exit_2,
+ connect(world, LocationName.forest_of_illusion_1_region, LocationName.forest_of_illusion_1_exit_1)
+ connect(world, LocationName.forest_of_illusion_1_region, LocationName.forest_of_illusion_1_exit_2,
lambda state: (state.has(ItemName.mario_carry, player) and
state.has(ItemName.p_balloon, player)))
- connect(world, player, names, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_exit_1,
+ connect(world, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_exit_1,
lambda state: state.has(ItemName.mario_swim, player))
- connect(world, player, names, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_exit_2,
+ connect(world, LocationName.forest_of_illusion_2_region, LocationName.forest_of_illusion_2_exit_2,
lambda state: (state.has(ItemName.mario_swim, player) and
state.has(ItemName.mario_carry, player)))
- connect(world, player, names, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_exit_1,
+ connect(world, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_exit_1,
lambda state: (state.has(ItemName.mario_carry, player) or
state.has(ItemName.yoshi_activate, player)))
- connect(world, player, names, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_exit_2,
+ connect(world, LocationName.forest_of_illusion_3_region, LocationName.forest_of_illusion_3_exit_2,
lambda state: (state.has(ItemName.mario_spin_jump, player) and
state.has(ItemName.mario_carry, player) and
state.has(ItemName.progressive_powerup, player, 1)))
- connect(world, player, names, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_exit_1)
- connect(world, player, names, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_exit_2,
+ connect(world, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_exit_1)
+ connect(world, LocationName.forest_of_illusion_4_region, LocationName.forest_of_illusion_4_exit_2,
lambda state: state.has(ItemName.mario_carry, player))
- connect(world, player, names, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_exit_1,
+ connect(world, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_exit_1,
lambda state: state.has(ItemName.p_switch, player))
- connect(world, player, names, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_exit_2,
+ connect(world, LocationName.forest_ghost_house_region, LocationName.forest_ghost_house_exit_2,
lambda state: state.has(ItemName.p_switch, player))
- connect(world, player, names, LocationName.forest_secret_region, LocationName.forest_secret_exit_1)
- connect(world, player, names, LocationName.forest_fortress_region, LocationName.forest_fortress)
- connect(world, player, names, LocationName.forest_castle_region, LocationName.forest_castle)
+ connect(world, LocationName.forest_secret_region, LocationName.forest_secret_exit_1)
+ connect(world, LocationName.forest_fortress_region, LocationName.forest_fortress)
+ connect(world, LocationName.forest_castle_region, LocationName.forest_castle)
- connect(world, player, names, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_exit_1,
+ connect(world, LocationName.chocolate_island_1_region, LocationName.chocolate_island_1_exit_1,
lambda state: state.has(ItemName.p_switch, player))
- connect(world, player, names, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_exit_1)
- connect(world, player, names, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_exit_2,
+ connect(world, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_exit_1)
+ connect(world, LocationName.chocolate_island_2_region, LocationName.chocolate_island_2_exit_2,
lambda state: state.has(ItemName.mario_carry, player))
- connect(world, player, names, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_exit_1,
+ connect(world, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_exit_1,
lambda state: (state.has(ItemName.mario_climb, player) or
(state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3))))
- connect(world, player, names, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_exit_2,
+ connect(world, LocationName.chocolate_island_3_region, LocationName.chocolate_island_3_exit_2,
lambda state: (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))
- connect(world, player, names, LocationName.chocolate_island_4_region, LocationName.chocolate_island_4_exit_1)
- connect(world, player, names, LocationName.chocolate_island_5_region, LocationName.chocolate_island_5_exit_1)
- connect(world, player, names, LocationName.chocolate_ghost_house_region, LocationName.chocolate_ghost_house_exit_1)
- connect(world, player, names, LocationName.chocolate_fortress_region, LocationName.chocolate_fortress)
- connect(world, player, names, LocationName.chocolate_secret_region, LocationName.chocolate_secret_exit_1,
+ connect(world, LocationName.chocolate_island_4_region, LocationName.chocolate_island_4_exit_1)
+ connect(world, LocationName.chocolate_island_5_region, LocationName.chocolate_island_5_exit_1)
+ connect(world, LocationName.chocolate_ghost_house_region, LocationName.chocolate_ghost_house_exit_1)
+ connect(world, LocationName.chocolate_fortress_region, LocationName.chocolate_fortress)
+ connect(world, LocationName.chocolate_secret_region, LocationName.chocolate_secret_exit_1,
lambda state: state.has(ItemName.mario_run, player))
- connect(world, player, names, LocationName.chocolate_castle_region, LocationName.chocolate_castle,
+ connect(world, LocationName.chocolate_castle_region, LocationName.chocolate_castle,
lambda state: (state.has(ItemName.progressive_powerup, player, 1)))
- connect(world, player, names, LocationName.sunken_ghost_ship_region, LocationName.sunken_ghost_ship,
+ connect(world, LocationName.sunken_ghost_ship_region, LocationName.sunken_ghost_ship,
lambda state: state.has(ItemName.mario_swim, player))
- connect(world, player, names, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_exit_1)
- connect(world, player, names, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_exit_1)
- connect(world, player, names, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_exit_2,
+ connect(world, LocationName.valley_of_bowser_1_region, LocationName.valley_of_bowser_1_exit_1)
+ connect(world, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_exit_1)
+ connect(world, LocationName.valley_of_bowser_2_region, LocationName.valley_of_bowser_2_exit_2,
lambda state: state.has(ItemName.mario_carry, player))
- connect(world, player, names, LocationName.valley_of_bowser_3_region, LocationName.valley_of_bowser_3_exit_1)
- connect(world, player, names, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_exit_1,
+ connect(world, LocationName.valley_of_bowser_3_region, LocationName.valley_of_bowser_3_exit_1)
+ connect(world, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_exit_1,
lambda state: state.has(ItemName.mario_climb, player))
- connect(world, player, names, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_exit_2,
+ connect(world, LocationName.valley_of_bowser_4_region, LocationName.valley_of_bowser_4_exit_2,
lambda state: (state.has(ItemName.mario_climb, player) and
state.has(ItemName.mario_carry, player) and
state.has(ItemName.yoshi_activate, player)))
- connect(world, player, names, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_exit_1,
+ connect(world, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_exit_1,
lambda state: state.has(ItemName.p_switch, player))
- connect(world, player, names, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_exit_2,
+ connect(world, LocationName.valley_ghost_house_region, LocationName.valley_ghost_house_exit_2,
lambda state: (state.has(ItemName.p_switch, player) and
state.has(ItemName.mario_carry, player) and
state.has(ItemName.mario_run, player)))
- connect(world, player, names, LocationName.valley_fortress_region, LocationName.valley_fortress,
+ connect(world, LocationName.valley_fortress_region, LocationName.valley_fortress,
lambda state: state.has(ItemName.progressive_powerup, player, 1))
- connect(world, player, names, LocationName.valley_castle_region, LocationName.valley_castle)
- connect(world, player, names, LocationName.front_door, LocationName.bowser_region,
+ connect(world, LocationName.valley_castle_region, LocationName.valley_castle)
+ connect(world, LocationName.front_door, LocationName.bowser_region,
lambda state: (state.has(ItemName.mario_climb, player) and
state.has(ItemName.mario_run, player) and
state.has(ItemName.mario_swim, player) and
state.has(ItemName.progressive_powerup, player, 1) and
- state.has(ItemName.koopaling, player, world.bosses_required[player].value)))
- connect(world, player, names, LocationName.back_door, LocationName.bowser_region,
- lambda state: state.has(ItemName.koopaling, player, world.bosses_required[player].value))
+ state.has(ItemName.koopaling, player, world.options.bosses_required.value)))
+ connect(world, LocationName.back_door, LocationName.bowser_region,
+ lambda state: state.has(ItemName.koopaling, player, world.options.bosses_required.value))
- connect(world, player, names, LocationName.star_road_1_region, LocationName.star_road_1_exit_1,
+ connect(world, LocationName.star_road_1_region, LocationName.star_road_1_exit_1,
lambda state: (state.has(ItemName.mario_spin_jump, player) and
state.has(ItemName.progressive_powerup, player, 1)))
- connect(world, player, names, LocationName.star_road_1_region, LocationName.star_road_1_exit_2,
+ connect(world, LocationName.star_road_1_region, LocationName.star_road_1_exit_2,
lambda state: (state.has(ItemName.mario_spin_jump, player) and
state.has(ItemName.mario_carry, player) and
state.has(ItemName.progressive_powerup, player, 1)))
- connect(world, player, names, LocationName.star_road_2_region, LocationName.star_road_2_exit_1,
+ connect(world, LocationName.star_road_2_region, LocationName.star_road_2_exit_1,
lambda state: state.has(ItemName.mario_swim, player))
- connect(world, player, names, LocationName.star_road_2_region, LocationName.star_road_2_exit_2,
+ connect(world, LocationName.star_road_2_region, LocationName.star_road_2_exit_2,
lambda state: (state.has(ItemName.mario_swim, player) and
state.has(ItemName.mario_carry, player)))
- connect(world, player, names, LocationName.star_road_3_region, LocationName.star_road_3_exit_1)
- connect(world, player, names, LocationName.star_road_3_region, LocationName.star_road_3_exit_2,
+ connect(world, LocationName.star_road_3_region, LocationName.star_road_3_exit_1)
+ connect(world, LocationName.star_road_3_region, LocationName.star_road_3_exit_2,
lambda state: state.has(ItemName.mario_carry, player))
- connect(world, player, names, LocationName.star_road_4_region, LocationName.star_road_4_exit_1)
- connect(world, player, names, LocationName.star_road_4_region, LocationName.star_road_4_exit_2,
+ connect(world, LocationName.star_road_4_region, LocationName.star_road_4_exit_1)
+ connect(world, LocationName.star_road_4_region, LocationName.star_road_4_exit_2,
lambda state: (state.has(ItemName.mario_carry, player) and
(state.has(ItemName.yoshi_activate, player) or
(state.has(ItemName.green_switch_palace, player) and state.has(ItemName.red_switch_palace, player)))))
- connect(world, player, names, LocationName.star_road_5_region, LocationName.star_road_5_exit_1,
+ connect(world, LocationName.star_road_5_region, LocationName.star_road_5_exit_1,
lambda state: state.has(ItemName.p_switch, player))
- connect(world, player, names, LocationName.star_road_5_region, LocationName.star_road_5_exit_2,
+ connect(world, LocationName.star_road_5_region, LocationName.star_road_5_exit_2,
lambda state: (state.has(ItemName.mario_carry, player) and
state.has(ItemName.mario_climb, player) and
state.has(ItemName.p_switch, player) and
@@ -1050,26 +2057,29 @@ def connect_regions(world, player, level_to_tile_dict):
state.has(ItemName.red_switch_palace, player) and
state.has(ItemName.blue_switch_palace, player)))
- connect(world, player, names, LocationName.special_zone_1_region, LocationName.special_zone_1_exit_1,
+ connect(world, LocationName.special_zone_1_region, LocationName.special_zone_1_exit_1,
lambda state: (state.has(ItemName.mario_climb, player) and
(state.has(ItemName.p_switch, player) or
(state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3)))))
- connect(world, player, names, LocationName.special_zone_2_region, LocationName.special_zone_2_exit_1,
+ connect(world, LocationName.special_zone_2_region, LocationName.special_zone_2_exit_1,
lambda state: state.has(ItemName.p_balloon, player))
- connect(world, player, names, LocationName.special_zone_3_region, LocationName.special_zone_3_exit_1,
+ connect(world, LocationName.special_zone_3_region, LocationName.special_zone_3_exit_1,
lambda state: (state.has(ItemName.mario_climb, player) or
- state.has(ItemName.p_switch, player) or
- (state.has(ItemName.mario_run, player) and state.has(ItemName.progressive_powerup, player, 3))))
- connect(world, player, names, LocationName.special_zone_4_region, LocationName.special_zone_4_exit_1,
+ state.has(ItemName.yoshi_activate, player)))
+ connect(world, LocationName.special_zone_4_region, LocationName.special_zone_4_exit_1,
+ lambda state: (state.has(ItemName.progressive_powerup, player, 2) or
+ state.has(ItemName.super_star_active, player)))
+ connect(world, LocationName.special_zone_5_region, LocationName.special_zone_5_exit_1,
lambda state: state.has(ItemName.progressive_powerup, player, 1))
- connect(world, player, names, LocationName.special_zone_5_region, LocationName.special_zone_5_exit_1,
- lambda state: state.has(ItemName.progressive_powerup, player, 1))
- connect(world, player, names, LocationName.special_zone_6_region, LocationName.special_zone_6_exit_1,
+ connect(world, LocationName.special_zone_6_region, LocationName.special_zone_6_exit_1,
lambda state: state.has(ItemName.mario_swim, player))
- connect(world, player, names, LocationName.special_zone_7_region, LocationName.special_zone_7_exit_1,
- lambda state: state.has(ItemName.progressive_powerup, player, 1))
- connect(world, player, names, LocationName.special_zone_8_region, LocationName.special_zone_8_exit_1,
+ connect(world, LocationName.special_zone_7_region, LocationName.special_zone_7_exit_1,
lambda state: state.has(ItemName.progressive_powerup, player, 1))
+ connect(world, LocationName.special_zone_8_region, LocationName.special_zone_8_exit_1,
+ lambda state: ((state.has(ItemName.progressive_powerup, player, 1) and state.has(ItemName.mario_spin_jump, player)) or
+ state.has(ItemName.progressive_powerup, player, 3) or
+ state.has(ItemName.yoshi_activate, player) or
+ state.has(ItemName.mario_carry, player)))
@@ -1085,52 +2095,52 @@ def connect_regions(world, player, level_to_tile_dict):
current_tile_name = current_tile_data.levelName
if ("Star Road - " not in current_tile_name) and (" - Star Road" not in current_tile_name):
current_tile_name += " - Tile"
- connect(world, player, names, current_tile_name, current_level_data.levelName)
+ connect(world, current_tile_name, current_level_data.levelName)
# Connect Exit regions to next tile regions
if current_tile_data.exit1Path:
next_tile_id = current_tile_data.exit1Path.otherLevelID
- if world.swap_donut_gh_exits[player] and current_tile_id == 0x04:
+ if world.options.swap_donut_gh_exits and current_tile_id == 0x04:
next_tile_id = current_tile_data.exit2Path.otherLevelID
next_tile_name = level_info_dict[next_tile_id].levelName
if ("Star Road - " not in next_tile_name) and (" - Star Road" not in next_tile_name):
next_tile_name += " - Tile"
current_exit_name = (current_level_data.levelName + " - Normal Exit")
- connect(world, player, names, current_exit_name, next_tile_name)
+ connect(world, current_exit_name, next_tile_name)
if current_tile_data.exit2Path:
next_tile_id = current_tile_data.exit2Path.otherLevelID
- if world.swap_donut_gh_exits[player] and current_tile_id == 0x04:
+ if world.options.swap_donut_gh_exits and current_tile_id == 0x04:
next_tile_id = current_tile_data.exit1Path.otherLevelID
next_tile_name = level_info_dict[next_tile_id].levelName
if ("Star Road - " not in next_tile_name) and (" - Star Road" not in next_tile_name):
next_tile_name += " - Tile"
current_exit_name = (current_level_data.levelName + " - Secret Exit")
- connect(world, player, names, current_exit_name, next_tile_name)
+ connect(world, current_exit_name, next_tile_name)
- connect(world, player, names, LocationName.donut_plains_star_road, LocationName.star_road_donut)
- connect(world, player, names, LocationName.star_road_donut, LocationName.donut_plains_star_road)
- connect(world, player, names, LocationName.star_road_donut, LocationName.star_road_1_tile)
- connect(world, player, names, LocationName.vanilla_dome_star_road, LocationName.star_road_vanilla)
- connect(world, player, names, LocationName.star_road_vanilla, LocationName.vanilla_dome_star_road)
- connect(world, player, names, LocationName.star_road_vanilla, LocationName.star_road_2_tile)
- connect(world, player, names, LocationName.twin_bridges_star_road, LocationName.star_road_twin_bridges)
- connect(world, player, names, LocationName.star_road_twin_bridges, LocationName.twin_bridges_star_road)
- connect(world, player, names, LocationName.star_road_twin_bridges, LocationName.star_road_3_tile)
- connect(world, player, names, LocationName.forest_star_road, LocationName.star_road_forest)
- connect(world, player, names, LocationName.star_road_forest, LocationName.forest_star_road)
- connect(world, player, names, LocationName.star_road_forest, LocationName.star_road_4_tile)
- connect(world, player, names, LocationName.valley_star_road, LocationName.star_road_valley)
- connect(world, player, names, LocationName.star_road_valley, LocationName.valley_star_road)
- connect(world, player, names, LocationName.star_road_valley, LocationName.star_road_5_tile)
- connect(world, player, names, LocationName.star_road_special, LocationName.special_star_road)
- connect(world, player, names, LocationName.special_star_road, LocationName.star_road_special)
- connect(world, player, names, LocationName.special_star_road, LocationName.special_zone_1_tile)
+ connect(world, LocationName.donut_plains_star_road, LocationName.star_road_donut)
+ connect(world, LocationName.star_road_donut, LocationName.donut_plains_star_road)
+ connect(world, LocationName.star_road_donut, LocationName.star_road_1_tile)
+ connect(world, LocationName.vanilla_dome_star_road, LocationName.star_road_vanilla)
+ connect(world, LocationName.star_road_vanilla, LocationName.vanilla_dome_star_road)
+ connect(world, LocationName.star_road_vanilla, LocationName.star_road_2_tile)
+ connect(world, LocationName.twin_bridges_star_road, LocationName.star_road_twin_bridges)
+ connect(world, LocationName.star_road_twin_bridges, LocationName.twin_bridges_star_road)
+ connect(world, LocationName.star_road_twin_bridges, LocationName.star_road_3_tile)
+ connect(world, LocationName.forest_star_road, LocationName.star_road_forest)
+ connect(world, LocationName.star_road_forest, LocationName.forest_star_road)
+ connect(world, LocationName.star_road_forest, LocationName.star_road_4_tile)
+ connect(world, LocationName.valley_star_road, LocationName.star_road_valley)
+ connect(world, LocationName.star_road_valley, LocationName.valley_star_road)
+ connect(world, LocationName.star_road_valley, LocationName.star_road_5_tile)
+ connect(world, LocationName.star_road_special, LocationName.special_star_road)
+ connect(world, LocationName.special_star_road, LocationName.star_road_special)
+ connect(world, LocationName.special_star_road, LocationName.special_zone_1_tile)
- connect(world, player, names, LocationName.star_road_valley, LocationName.front_door_tile)
+ connect(world, LocationName.star_road_valley, LocationName.front_door_tile)
-def create_region(world: MultiWorld, player: int, active_locations, name: str, locations=None):
- ret = Region(name, player, world)
+def create_region(multiworld: MultiWorld, player: int, active_locations, name: str, locations=None):
+ ret = Region(name, player, multiworld)
if locations:
for locationName in locations:
loc_id = active_locations.get(locationName, 0)
@@ -1140,9 +2150,9 @@ def create_region(world: MultiWorld, player: int, active_locations, name: str, l
return ret
-def add_location_to_region(world: MultiWorld, player: int, active_locations, region_name: str, location_name: str,
+def add_location_to_region(multiworld: MultiWorld, player: int, active_locations, region_name: str, location_name: str,
rule: typing.Optional[typing.Callable] = None):
- region = world.get_region(region_name, player)
+ region = multiworld.get_region(region_name, player)
loc_id = active_locations.get(location_name, 0)
if loc_id:
location = SMWLocation(player, location_name, loc_id, region)
@@ -1151,23 +2161,8 @@ def add_location_to_region(world: MultiWorld, player: int, active_locations, reg
add_rule(location, rule)
-
-def connect(world: MultiWorld, player: int, used_names: typing.Dict[str, int], source: str, target: str,
+def connect(world: World, source: str, target: str,
rule: typing.Optional[typing.Callable] = None):
- source_region = world.get_region(source, player)
- target_region = world.get_region(target, player)
-
- if target not in used_names:
- used_names[target] = 1
- name = target
- else:
- used_names[target] += 1
- name = target + (' ' * used_names[target])
-
- connection = Entrance(player, name, source_region)
-
- if rule:
- connection.access_rule = rule
-
- source_region.exits.append(connection)
- connection.connect(target_region)
+ source_region: Region = world.get_region(source)
+ target_region: Region = world.get_region(target)
+ source_region.connect(target_region, rule=rule)
diff --git a/worlds/smw/Rom.py b/worlds/smw/Rom.py
index 0f5ec7e4f0..66226d5036 100644
--- a/worlds/smw/Rom.py
+++ b/worlds/smw/Rom.py
@@ -1,6 +1,7 @@
import Utils
+from worlds.AutoWorld import World
from worlds.Files import APDeltaPatch
-from .Aesthetics import generate_shuffled_header_data, generate_shuffled_ow_palettes
+from .Aesthetics import generate_shuffled_header_data, generate_shuffled_ow_palettes, generate_curated_level_palette_data, generate_curated_map_palette_data, generate_shuffled_sfx
from .Levels import level_info_dict, full_bowser_rooms, standard_bowser_rooms, submap_boss_rooms, ow_boss_rooms
from .Names.TextBox import generate_goal_text, title_text_mapping, generate_text_box
@@ -10,38 +11,48 @@ ROM_PLAYER_LIMIT = 65535
import hashlib
import os
import math
+import pkgutil
ability_rom_data = {
- 0xBC0003: [[0x1F2C, 0x7]], # Run 0x80
- 0xBC0004: [[0x1F2C, 0x6]], # Carry 0x40
- 0xBC0005: [[0x1F2C, 0x2]], # Swim 0x04
- 0xBC0006: [[0x1F2C, 0x3]], # Spin Jump 0x08
- 0xBC0007: [[0x1F2C, 0x5]], # Climb 0x20
- 0xBC0008: [[0x1F2C, 0x1]], # Yoshi 0x02
- 0xBC0009: [[0x1F2C, 0x4]], # P-Switch 0x10
+ 0xBC0003: [[0x1F1C, 0x7]], # Run 0x80
+ 0xBC0004: [[0x1F1C, 0x6]], # Carry 0x40
+ 0xBC0005: [[0x1F1C, 0x2]], # Swim 0x04
+ 0xBC0006: [[0x1F1C, 0x3]], # Spin Jump 0x08
+ 0xBC0007: [[0x1F1C, 0x5]], # Climb 0x20
+ 0xBC0008: [[0x1F1C, 0x1]], # Yoshi 0x02
+ 0xBC0009: [[0x1F1C, 0x4]], # P-Switch 0x10
#0xBC000A: [[]]
0xBC000B: [[0x1F2D, 0x3]], # P-Balloon 0x08
- 0xBC000D: [[0x1F2D, 0x4]], # Super Star 0x10
+ 0xBC000D: [[0x1F2D, 0x4]] # Super Star 0x10
}
+icon_rom_data = {
+ 0xBC0002: [0x1B00C], # Yoshi Egg
+ 0xBC0012: [0x1B00E], # Boss Token
+ 0xBC0017: [0x1B004], # 1 coin
+ 0xBC0018: [0x1B006], # 5 coins
+ 0xBC0019: [0x1B008], # 10 coins
+ 0xBC001A: [0x1B00A], # 50 coins
+
+ 0xBC0001: [0x1B010] # 1-Up Mushroom
+}
+
item_rom_data = {
- 0xBC0001: [0x18E4, 0x1], # 1-Up Mushroom
-
- 0xBC0002: [0x1F24, 0x1, 0x1F], # Yoshi Egg
- 0xBC0012: [0x1F26, 0x1, 0x09], # Boss Token
-
- 0xBC000E: [0x1F28, 0x1, 0x1C], # Yellow Switch Palace
- 0xBC000F: [0x1F27, 0x1, 0x1C], # Green Switch Palace
- 0xBC0010: [0x1F2A, 0x1, 0x1C], # Red Switch Palace
- 0xBC0011: [0x1F29, 0x1, 0x1C], # Blue Switch Palace
+ 0xBC000E: [0x1F28, 0x1, 0x1C], # Yellow Switch Palace
+ 0xBC000F: [0x1F27, 0x1, 0x1C], # Green Switch Palace
+ 0xBC0010: [0x1F2A, 0x1, 0x1C], # Red Switch Palace
+ 0xBC0011: [0x1F29, 0x1, 0x1C], # Blue Switch Palace
+ 0xBC001B: [0x1F1E, 0x80, 0x39] # Special Zone Clear
}
trap_rom_data = {
- 0xBC0013: [0x0086, 0x1, 0x0E], # Ice Trap
+ 0xBC0013: [0x0086, 0x1, 0x0E], # Ice Trap
0xBC0014: [0x18BD, 0x7F, 0x18], # Stun Trap
- 0xBC0016: [0x0F31, 0x1], # Timer Trap
+ 0xBC0016: [0x0F31, 0x1], # Timer Trap
+ 0xBC001C: [0x18B4, 0x1, 0x44], # Reverse controls trap
+ 0xBC001D: [0x18B7, 0x1], # Thwimp Trap
}
@@ -109,7 +120,7 @@ def handle_ability_code(rom):
rom.write_bytes(RUN_SUB_ADDR + 0x04, bytearray([0xC8])) # INY
rom.write_bytes(RUN_SUB_ADDR + 0x05, bytearray([0xA9, 0x70])) # LDA #70
rom.write_bytes(RUN_SUB_ADDR + 0x07, bytearray([0xAA])) # TAX
- rom.write_bytes(RUN_SUB_ADDR + 0x08, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(RUN_SUB_ADDR + 0x08, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(RUN_SUB_ADDR + 0x0B, bytearray([0x89, 0x80])) # BIT #80
rom.write_bytes(RUN_SUB_ADDR + 0x0D, bytearray([0xF0, 0x04])) # BEQ +0x04
rom.write_bytes(RUN_SUB_ADDR + 0x0F, bytearray([0x8A])) # TXA
@@ -126,7 +137,7 @@ def handle_ability_code(rom):
PURPLE_BLOCK_CARRY_SUB_ADDR = 0x01BA28
rom.write_bytes(PURPLE_BLOCK_CARRY_SUB_ADDR + 0x00, bytearray([0x08])) # PHP
- rom.write_bytes(PURPLE_BLOCK_CARRY_SUB_ADDR + 0x01, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(PURPLE_BLOCK_CARRY_SUB_ADDR + 0x01, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(PURPLE_BLOCK_CARRY_SUB_ADDR + 0x04, bytearray([0x89, 0x40])) # BIT #40
rom.write_bytes(PURPLE_BLOCK_CARRY_SUB_ADDR + 0x06, bytearray([0xF0, 0x09])) # BEQ +0x09
rom.write_bytes(PURPLE_BLOCK_CARRY_SUB_ADDR + 0x08, bytearray([0x28])) # PLP
@@ -145,7 +156,7 @@ def handle_ability_code(rom):
SPRINGBOARD_CARRY_SUB_ADDR = 0x01BA40
rom.write_bytes(SPRINGBOARD_CARRY_SUB_ADDR + 0x00, bytearray([0x48])) # PHA
rom.write_bytes(SPRINGBOARD_CARRY_SUB_ADDR + 0x01, bytearray([0x08])) # PHP
- rom.write_bytes(SPRINGBOARD_CARRY_SUB_ADDR + 0x02, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(SPRINGBOARD_CARRY_SUB_ADDR + 0x02, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(SPRINGBOARD_CARRY_SUB_ADDR + 0x05, bytearray([0x89, 0x40])) # BIT #40
rom.write_bytes(SPRINGBOARD_CARRY_SUB_ADDR + 0x07, bytearray([0xF0, 0x08])) # BEQ +0x08
rom.write_bytes(SPRINGBOARD_CARRY_SUB_ADDR + 0x09, bytearray([0xA9, 0x0B])) # LDA #0B
@@ -157,7 +168,7 @@ def handle_ability_code(rom):
# End Springboard Carry
# Shell Carry
- rom.write_bytes(0xAA66, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(0xAA66, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(0xAA69, bytearray([0x89, 0x40])) # BIT #40
rom.write_bytes(0xAA6B, bytearray([0xF0, 0x07])) # BEQ +0x07
rom.write_bytes(0xAA6D, bytearray([0x22, 0x60, 0xBA, 0x03])) # JSL $03BA60
@@ -180,7 +191,7 @@ def handle_ability_code(rom):
YOSHI_CARRY_SUB_ADDR = 0x01BA70
rom.write_bytes(YOSHI_CARRY_SUB_ADDR + 0x00, bytearray([0x08])) # PHP
- rom.write_bytes(YOSHI_CARRY_SUB_ADDR + 0x01, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(YOSHI_CARRY_SUB_ADDR + 0x01, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(YOSHI_CARRY_SUB_ADDR + 0x04, bytearray([0x89, 0x40])) # BIT #40
rom.write_bytes(YOSHI_CARRY_SUB_ADDR + 0x06, bytearray([0xF0, 0x0A])) # BEQ +0x0A
rom.write_bytes(YOSHI_CARRY_SUB_ADDR + 0x08, bytearray([0xA9, 0x12])) # LDA #12
@@ -197,7 +208,7 @@ def handle_ability_code(rom):
CLIMB_SUB_ADDR = 0x01BA88
rom.write_bytes(CLIMB_SUB_ADDR + 0x00, bytearray([0x08])) # PHP
- rom.write_bytes(CLIMB_SUB_ADDR + 0x01, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(CLIMB_SUB_ADDR + 0x01, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(CLIMB_SUB_ADDR + 0x04, bytearray([0x89, 0x20])) # BIT #20
rom.write_bytes(CLIMB_SUB_ADDR + 0x06, bytearray([0xF0, 0x09])) # BEQ +0x09
rom.write_bytes(CLIMB_SUB_ADDR + 0x08, bytearray([0xA5, 0x8B])) # LDA $8B
@@ -213,7 +224,7 @@ def handle_ability_code(rom):
CLIMB_ROPE_SUB_ADDR = 0x01BC70
rom.write_bytes(CLIMB_ROPE_SUB_ADDR + 0x00, bytearray([0x08])) # PHP
- rom.write_bytes(CLIMB_ROPE_SUB_ADDR + 0x01, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(CLIMB_ROPE_SUB_ADDR + 0x01, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(CLIMB_ROPE_SUB_ADDR + 0x04, bytearray([0x89, 0x20])) # BIT #20
rom.write_bytes(CLIMB_ROPE_SUB_ADDR + 0x06, bytearray([0xF0, 0x07])) # BEQ +0x07
rom.write_bytes(CLIMB_ROPE_SUB_ADDR + 0x08, bytearray([0x28])) # PLP
@@ -230,7 +241,7 @@ def handle_ability_code(rom):
P_SWITCH_SUB_ADDR = 0x01BAA0
rom.write_bytes(P_SWITCH_SUB_ADDR + 0x00, bytearray([0x08])) # PHP
- rom.write_bytes(P_SWITCH_SUB_ADDR + 0x01, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(P_SWITCH_SUB_ADDR + 0x01, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(P_SWITCH_SUB_ADDR + 0x04, bytearray([0x89, 0x10])) # BIT #10
rom.write_bytes(P_SWITCH_SUB_ADDR + 0x06, bytearray([0xF0, 0x04])) # BEQ +0x04
rom.write_bytes(P_SWITCH_SUB_ADDR + 0x08, bytearray([0xA9, 0xB0])) # LDA #B0
@@ -242,7 +253,7 @@ def handle_ability_code(rom):
# End P-Switch
# Spin Jump
- rom.write_bytes(0x5645, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(0x5645, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(0x5648, bytearray([0x89, 0x08])) # BIT #08
rom.write_bytes(0x564A, bytearray([0xF0, 0x12])) # BEQ +0x12
rom.write_bytes(0x564C, bytearray([0x22, 0xB8, 0xBA, 0x03])) # JSL $03BAB8
@@ -264,7 +275,7 @@ def handle_ability_code(rom):
SPIN_JUMP_WATER_SUB_ADDR = 0x01BBF8
rom.write_bytes(SPIN_JUMP_WATER_SUB_ADDR + 0x00, bytearray([0x08])) # PHP
- rom.write_bytes(SPIN_JUMP_WATER_SUB_ADDR + 0x01, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(SPIN_JUMP_WATER_SUB_ADDR + 0x01, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(SPIN_JUMP_WATER_SUB_ADDR + 0x04, bytearray([0x89, 0x08])) # BIT #08
rom.write_bytes(SPIN_JUMP_WATER_SUB_ADDR + 0x06, bytearray([0xF0, 0x09])) # BEQ +0x09
rom.write_bytes(SPIN_JUMP_WATER_SUB_ADDR + 0x08, bytearray([0x1A])) # INC
@@ -281,7 +292,7 @@ def handle_ability_code(rom):
SPIN_JUMP_SPRING_SUB_ADDR = 0x01BC0C
rom.write_bytes(SPIN_JUMP_SPRING_SUB_ADDR + 0x00, bytearray([0x08])) # PHP
- rom.write_bytes(SPIN_JUMP_SPRING_SUB_ADDR + 0x01, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(SPIN_JUMP_SPRING_SUB_ADDR + 0x01, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(SPIN_JUMP_SPRING_SUB_ADDR + 0x04, bytearray([0x89, 0x08])) # BIT #08
rom.write_bytes(SPIN_JUMP_SPRING_SUB_ADDR + 0x06, bytearray([0xF0, 0x05])) # BEQ +0x05
rom.write_bytes(SPIN_JUMP_SPRING_SUB_ADDR + 0x08, bytearray([0xA9, 0x01])) # LDA #01
@@ -297,7 +308,7 @@ def handle_ability_code(rom):
SWIM_SUB_ADDR = 0x01BAC8
rom.write_bytes(SWIM_SUB_ADDR + 0x00, bytearray([0x48])) # PHA
rom.write_bytes(SWIM_SUB_ADDR + 0x01, bytearray([0x08])) # PHP
- rom.write_bytes(SWIM_SUB_ADDR + 0x02, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(SWIM_SUB_ADDR + 0x02, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(SWIM_SUB_ADDR + 0x05, bytearray([0x89, 0x04])) # BIT #04
rom.write_bytes(SWIM_SUB_ADDR + 0x07, bytearray([0xF0, 0x0C])) # BEQ +0x0C
rom.write_bytes(SWIM_SUB_ADDR + 0x09, bytearray([0x28])) # PLP
@@ -321,7 +332,7 @@ def handle_ability_code(rom):
SWIM_SUB_ADDR = 0x01BAE8
rom.write_bytes(SWIM_SUB_ADDR + 0x00, bytearray([0x48])) # PHA
rom.write_bytes(SWIM_SUB_ADDR + 0x01, bytearray([0x08])) # PHP
- rom.write_bytes(SWIM_SUB_ADDR + 0x02, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(SWIM_SUB_ADDR + 0x02, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(SWIM_SUB_ADDR + 0x05, bytearray([0x89, 0x04])) # BIT #04
rom.write_bytes(SWIM_SUB_ADDR + 0x07, bytearray([0xF0, 0x0A])) # BEQ +0x0A
rom.write_bytes(SWIM_SUB_ADDR + 0x09, bytearray([0x28])) # PLP
@@ -344,7 +355,7 @@ def handle_ability_code(rom):
YOSHI_SUB_ADDR = 0x01BB08
rom.write_bytes(YOSHI_SUB_ADDR + 0x00, bytearray([0x08])) # PHP
- rom.write_bytes(YOSHI_SUB_ADDR + 0x01, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(YOSHI_SUB_ADDR + 0x01, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(YOSHI_SUB_ADDR + 0x04, bytearray([0x89, 0x02])) # BIT #02
rom.write_bytes(YOSHI_SUB_ADDR + 0x06, bytearray([0xF0, 0x06])) # BEQ +0x06
rom.write_bytes(YOSHI_SUB_ADDR + 0x08, bytearray([0x28])) # PLP
@@ -366,7 +377,7 @@ def handle_ability_code(rom):
YOSHI_SUB_ADDR = 0x01BB20
rom.write_bytes(YOSHI_SUB_ADDR + 0x00, bytearray([0x08])) # PHP
rom.write_bytes(YOSHI_SUB_ADDR + 0x01, bytearray([0x9C, 0x1E, 0x14])) # STZ $141E
- rom.write_bytes(YOSHI_SUB_ADDR + 0x04, bytearray([0xAD, 0x2C, 0x1F])) # LDA $1F2C
+ rom.write_bytes(YOSHI_SUB_ADDR + 0x04, bytearray([0xAD, 0x1C, 0x1F])) # LDA $1F1C
rom.write_bytes(YOSHI_SUB_ADDR + 0x07, bytearray([0x89, 0x02])) # BIT #02
rom.write_bytes(YOSHI_SUB_ADDR + 0x09, bytearray([0xF0, 0x05])) # BEQ +0x05
rom.write_bytes(YOSHI_SUB_ADDR + 0x0B, bytearray([0x28])) # PLP
@@ -654,6 +665,7 @@ def handle_level_shuffle(rom, active_level_dict):
for level_id, tile_id in active_level_dict.items():
rom.write_byte(0x37F70 + level_id, tile_id)
+ rom.write_byte(0x37F00 + tile_id, level_id)
def handle_collected_paths(rom):
@@ -673,38 +685,2139 @@ def handle_collected_paths(rom):
def handle_vertical_scroll(rom):
- rom.write_bytes(0x285BA, bytearray([0x22, 0x90, 0xBC, 0x03])) # JSL $03BC90
+ rom.write_bytes(0x285BA, bytearray([0x22, 0x80, 0xF4, 0x0F])) # JSL $0FF480
- VERTICAL_SCROLL_SUB_ADDR = 0x01BC90
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x00, bytearray([0x4A])) # LSR
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x01, bytearray([0x4A])) # LSR
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x02, bytearray([0x4A])) # LSR
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x03, bytearray([0x4A])) # LSR
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x04, bytearray([0x08])) # PHP
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x05, bytearray([0xC9, 0x02])) # CMP #02
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x07, bytearray([0xD0, 0x02])) # BNE +0x02
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x09, bytearray([0xA9, 0x01])) # LDA #01
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0B, bytearray([0x28])) # PLP
- rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0C, bytearray([0x6B])) # RTL
+ VERTICAL_SCROLL_SUB_ADDR = 0x7F480
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0000, bytearray([0x4A])) # vertical_scroll: lsr
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0001, bytearray([0x4A])) # lsr
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0002, bytearray([0x4A])) # lsr
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0003, bytearray([0x4A])) # lsr
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0004, bytearray([0x08])) # php
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0005, bytearray([0xC9, 0x02])) # cmp #$02
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0007, bytearray([0xD0, 0x0B])) # bne +
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0009, bytearray([0xC2, 0x10])) # rep #$10
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x000B, bytearray([0xDA])) # phx
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x000C, bytearray([0xAE, 0x0B, 0x01])) # ldx $010B
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x000F, bytearray([0xBF, 0x00, 0xF5, 0x0F])) # lda.l vertical_scroll_levels,x
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0013, bytearray([0xFA])) # plx
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0014, bytearray([0x28])) # + plp
+ rom.write_bytes(VERTICAL_SCROLL_SUB_ADDR + 0x0015, bytearray([0x6B])) # rtl
+
+ vertical_scroll_table = [
+ 0x02, 0x01, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, # Levels 000-00F
+ 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, # Levels 010-01F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 020-02F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 030-03F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 040-04F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 050-05F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 060-06F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 070-07F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 080-08F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 090-09F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 0A0-0AF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 0B0-0BF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 0C0-0CF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, # Levels 0D0-0DF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, # Levels 0E0-0EF
+ 0x02, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, # Levels 0F0-0FF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x01, # Levels 100-10F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 110-11F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 120-12F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 130-13F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 140-14F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 150-15F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 160-16F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 170-17F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 180-18F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 190-19F
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 1A0-1AF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 1B0-1BF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 1C0-1CF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 1D0-1DF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, # Levels 1E0-1EF
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x02] # Levels 1F0-1FF
+
+ rom.write_bytes(0x7F500, bytes(vertical_scroll_table))
-def handle_music_shuffle(rom, world, player):
+def handle_bonus_block(rom):
+ rom.write_bytes(0x71A5, bytearray([0x5C, 0x19, 0x8E, 0x05])) # JML $058E19
+
+ BONUS_BLOCK_ADDR = 0x28E19
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x00, bytearray([0xA9, 0x06])) # LDA #$06
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x02, bytearray([0xAC, 0xC0, 0x0D])) # LDY $0DC0
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x05, bytearray([0xD0, 0x1E])) # BNE IGNORE
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x07, bytearray([0xDA])) # PHX
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x08, bytearray([0xAD, 0xBF, 0x13])) # LDA $13BF
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x0B, bytearray([0x4A])) # LSR
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x0C, bytearray([0x4A])) # LSR
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x0D, bytearray([0x4A])) # LSR
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x0E, bytearray([0x48])) # PHA
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x0F, bytearray([0xAD, 0xBF, 0x13])) # LDA $13BF
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x12, bytearray([0x29, 0x07])) # AND #$07
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x14, bytearray([0xAA])) # TAX
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x15, bytearray([0xBF, 0x5B, 0xB3, 0x05])) # LDA $05B35B,x
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x19, bytearray([0xFA])) # PLX
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x1A, bytearray([0x1F, 0x00, 0xA0, 0x7F])) # ORA $7FA000,x
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x1E, bytearray([0x9F, 0x00, 0xA0, 0x7F])) # STA $7FA000,x
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x22, bytearray([0xFA])) # PLX
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x23, bytearray([0xA9, 0x05])) # LDA #$05
+ rom.write_bytes(BONUS_BLOCK_ADDR + 0x25, bytearray([0x5C, 0xD0, 0xF1, 0x00])) # IGNORE: JML $00F1D0
+
+
+def handle_blocksanity(rom):
+ import json
+ blocksanity_data = pkgutil.get_data(__name__, f"data/blocksanity.json").decode("utf-8")
+ blocksanity_data = json.loads(blocksanity_data)
+ blocksanity_coords = bytearray([])
+ blocksanity_bytes = bytearray([])
+
+ block_count = 0
+ entries = 0
+ for level_name, level_data in blocksanity_data.items():
+ # Calculate blocksanity pointer
+ if level_data == []:
+ # Skip if the level doesn't have any data
+ blocksanity_bytes += bytearray([0xFF, 0xFF])
+ continue
+ level_ptr = 0x80C0 + entries
+ blocksanity_bytes += bytearray([level_ptr & 0xFF, (level_ptr >> 8) & 0xFF])
+
+ # Get block data
+ block_coords = bytearray([])
+ for x in range(len(level_data)):
+ block_coords += bytearray([
+ int(level_data[x][1], 16) & 0xFF, (int(level_data[x][1], 16) >> 8) & 0xFF,
+ int(level_data[x][2], 16) & 0xFF, (int(level_data[x][2], 16) >> 8) & 0xFF,
+ block_count & 0xFF, (block_count >> 8) & 0xFF])
+ entries += 6
+ block_count += 1
+ block_coords += bytearray([0xFF, 0xFF])
+ entries += 2
+
+ blocksanity_coords += block_coords
+
+ blocksanity_bytes += blocksanity_coords
+
+ rom.write_bytes(0x80000, blocksanity_bytes)
+ rom.write_bytes(0x071D0, bytearray([0x5C, 0x00, 0xF7, 0x0F])) # org $00F1D0 : jml blocksanity_main
+ rom.write_bytes(0x0AD59, bytearray([0x5C, 0x15, 0xF7, 0x0F])) # org $01AD5C : jml blocksanity_flying_init
+ rom.write_bytes(0x0AE16, bytearray([0x22, 0x39, 0xF7, 0x0F])) # org $01AE16 : jsl blocksanity_flying_main
+
+ BLOCKSANITY_ADDR = 0x7F700
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0000, bytearray([0x85, 0x05])) # blocksanity_main: sta $05
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0002, bytearray([0x8B])) # phb
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0003, bytearray([0xA9, 0x10])) # lda.b #blocksanity_pointers>>16
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0005, bytearray([0x48])) # pha
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0006, bytearray([0xAB])) # plb
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0007, bytearray([0x5A])) # phy
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0008, bytearray([0x20, 0x63, 0xF7])) # jsr process_block
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x000B, bytearray([0x7A])) # ply
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x000C, bytearray([0xAB])) # plb
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x000D, bytearray([0xA5, 0x05])) # lda $05
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x000F, bytearray([0xC9, 0x05])) # cmp #$05
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0011, bytearray([0x5C, 0xD4, 0xF1, 0x00])) # jml $00F1D4
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0015, bytearray([0xB5, 0xD8])) # blocksanity_flying_init: lda $D8,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0017, bytearray([0x29, 0xF0])) # and #$F0
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0019, bytearray([0x9F, 0x20, 0xB8, 0x7F])) # sta !sprite_blocksanity_y_lo,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x001D, bytearray([0xBD, 0xD4, 0x14])) # lda $14D4,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0020, bytearray([0x9F, 0x30, 0xB8, 0x7F])) # sta !sprite_blocksanity_y_hi,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0024, bytearray([0xBD, 0xE0, 0x14])) # lda $14E0,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0027, bytearray([0x9F, 0x10, 0xB8, 0x7F])) # sta !sprite_blocksanity_x_hi,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x002B, bytearray([0xB5, 0xE4])) # lda $E4,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x002D, bytearray([0x29, 0xF0])) # and #$F0
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x002F, bytearray([0x9F, 0x00, 0xB8, 0x7F])) # sta !sprite_blocksanity_x_lo,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0033, bytearray([0x4A])) # lsr
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0034, bytearray([0x4A])) # lsr
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0035, bytearray([0x5C, 0x5D, 0xAD, 0x01])) # jml $01AD5D
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0039, bytearray([0xBF, 0x20, 0xB8, 0x7F])) # blocksanity_flying_main: lda !sprite_blocksanity_y_lo,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x003D, bytearray([0x85, 0x98])) # sta $98
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x003F, bytearray([0xBF, 0x30, 0xB8, 0x7F])) # lda !sprite_blocksanity_y_hi,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0043, bytearray([0x85, 0x99])) # sta $99
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0045, bytearray([0xBF, 0x00, 0xB8, 0x7F])) # lda !sprite_blocksanity_x_lo,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0049, bytearray([0x85, 0x9A])) # sta $9A
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x004B, bytearray([0xBF, 0x10, 0xB8, 0x7F])) # lda !sprite_blocksanity_x_hi,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x004F, bytearray([0x85, 0x9B])) # sta $9B
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0051, bytearray([0x8B])) # phb
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0052, bytearray([0xA9, 0x10])) # lda.b #blocksanity_pointers>>16
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0054, bytearray([0x48])) # pha
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0055, bytearray([0xAB])) # plb
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0056, bytearray([0x5A])) # phy
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0057, bytearray([0xDA])) # phx
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0058, bytearray([0x20, 0x63, 0xF7])) # jsr process_block
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x005B, bytearray([0xFA])) # plx
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x005C, bytearray([0x7A])) # ply
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x005D, bytearray([0xAB])) # plb
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x005E, bytearray([0xB5, 0xE4])) # lda $E4,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0060, bytearray([0x85, 0x9A])) # sta $9A
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0062, bytearray([0x6B])) # rtl
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0063, bytearray([0xA9, 0x0F])) # process_block: lda #$0F
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0065, bytearray([0x14, 0x98])) # trb $98
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0067, bytearray([0x14, 0x9A])) # trb $9A
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0069, bytearray([0xC2, 0x30])) # rep #$30
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x006B, bytearray([0xA5, 0x60])) # lda $60
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x006D, bytearray([0x29, 0xFF, 0x00])) # and #$00FF
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0070, bytearray([0x0A])) # asl
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0071, bytearray([0x18])) # clc
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0072, bytearray([0x69, 0x00, 0x80])) # adc.w #blocksanity_pointers
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0075, bytearray([0x48])) # pha
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0076, bytearray([0xA0, 0x00, 0x00])) # ldy #$0000
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0079, bytearray([0xB3, 0x01])) # lda ($01,s),y
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x007B, bytearray([0x48])) # pha
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x007C, bytearray([0xB3, 0x01])) # .loop lda ($01,s),y
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x007E, bytearray([0xC9, 0xFF, 0xFF])) # cmp #$FFFF
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0081, bytearray([0xF0, 0x16])) # beq .return
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0083, bytearray([0xC5, 0x9A])) # cmp $9A
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0085, bytearray([0xD0, 0x0A])) # bne .next_block_x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0087, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0088, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0089, bytearray([0xB3, 0x01])) # lda ($01,s),y
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x008B, bytearray([0xC5, 0x98])) # cmp $98
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x008D, bytearray([0xF0, 0x0F])) # beq .valid_block
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x008F, bytearray([0x80, 0x02])) # bra .next_block_y
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0091, bytearray([0xC8])) # .next_block_x iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0092, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0093, bytearray([0xC8])) # .next_block_y iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0094, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0095, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0096, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0097, bytearray([0x80, 0xE3])) # bra .loop
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x0099, bytearray([0x68])) # .return pla
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x009A, bytearray([0x68])) # pla
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x009B, bytearray([0xE2, 0x30])) # sep #$30
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x009D, bytearray([0x60])) # rts
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x009E, bytearray([0xC8])) # .valid_block iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x009F, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00A0, bytearray([0xB3, 0x01])) # lda ($01,s),y
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00A2, bytearray([0xAA])) # tax
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00A3, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00A5, bytearray([0xDA])) # phx
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00A6, bytearray([0xBF, 0x00, 0xA4, 0x7F])) # lda !blocksanity_data_flags,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00AA, bytearray([0xD0, 0x08])) # bne .processed
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00AC, bytearray([0x1A])) # inc
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00AD, bytearray([0x9F, 0x00, 0xA4, 0x7F])) # sta !blocksanity_data_flags,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00B1, bytearray([0x20, 0xBA, 0xF7])) # jsr blocksanity_check_flags
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00B4, bytearray([0xFA])) # .processed plx
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00B5, bytearray([0xFA])) # plx
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00B6, bytearray([0xFA])) # plx
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00B7, bytearray([0xE2, 0x10])) # sep #$10
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00B9, bytearray([0x60])) # rts
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00BA, bytearray([0xC2, 0x20])) # blocksanity_check_flags: rep #$20
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00BC, bytearray([0xA0, 0x00, 0x00])) # ldy #$0000
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00BF, bytearray([0xB3, 0x05])) # .loop lda ($05,s),y
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00C1, bytearray([0xC9, 0xFF, 0xFF])) # cmp #$FFFF
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00C4, bytearray([0xF0, 0x14])) # beq .check
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00C6, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00C7, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00C8, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00C9, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00CA, bytearray([0xB3, 0x05])) # lda ($05,s),y
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00CC, bytearray([0xAA])) # tax
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00CD, bytearray([0xBF, 0x00, 0xA4, 0x7F])) # lda !blocksanity_data_flags,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00D1, bytearray([0x29, 0xFF, 0x00])) # and #$00FF
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00D4, bytearray([0xF0, 0x22])) # beq .invalid
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00D6, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00D7, bytearray([0xC8])) # iny
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00D8, bytearray([0x80, 0xE5])) # bra .loop
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00DA, bytearray([0xE2, 0x20])) # .check sep #$20
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00DC, bytearray([0xA9, 0x00])) # lda #$00
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00DE, bytearray([0xEB])) # xba
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00DF, bytearray([0xA5, 0x60])) # lda $60
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00E1, bytearray([0x4A])) # lsr
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00E2, bytearray([0x4A])) # lsr
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00E3, bytearray([0x4A])) # lsr
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00E4, bytearray([0xA8])) # tay
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00E5, bytearray([0xA5, 0x60])) # lda $60
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00E7, bytearray([0x29, 0x07])) # and #$07
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00E9, bytearray([0xAA])) # tax
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00EA, bytearray([0xBF, 0x5B, 0xB3, 0x05])) # lda.l $05B35B,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00EE, bytearray([0xBB])) # tyx
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00EF, bytearray([0x1F, 0x10, 0xA0, 0x7F])) # ora !blocksanity_flags,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00F3, bytearray([0x9F, 0x10, 0xA0, 0x7F])) # sta !blocksanity_flags,x
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00F7, bytearray([0x60])) # rts
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00F8, bytearray([0xE2, 0x20])) # .invalid sep #$20
+ rom.write_bytes(BLOCKSANITY_ADDR + 0x00FA, bytearray([0x60])) # rts
+
+def handle_ram(rom):
+ rom.write_byte(0x07FD8, 0x02) # Expand SRAM
+ rom.write_bytes(0x01CF5, bytearray([0x5C, 0x00, 0xF2, 0x0F])) # org $009CF5 : jml init_sram
+ rom.write_bytes(0x01C0F, bytearray([0x5C, 0x00, 0xF3, 0x0F])) # org $009C0F : jml save_sram
+ rom.write_bytes(0x013BB, bytearray([0x5C, 0xA0, 0xF0, 0x0F])) # org $0093BB : jml init_ram
+
+ INIT_SRAM_ADDR = 0x7F200
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0000, bytearray([0xD0, 0x74])) # init_sram: bne .clear
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0002, bytearray([0x9C, 0x09, 0x01])) # stz $0109
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0005, bytearray([0xDA])) # phx
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0006, bytearray([0x08])) # php
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0007, bytearray([0xE2, 0x10])) # sep #$10
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0009, bytearray([0xA2, 0x5F])) # ldx.b #$5F
+ rom.write_bytes(INIT_SRAM_ADDR + 0x000B, bytearray([0xBF, 0x00, 0x08, 0x70])) # - lda !level_clears_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x000F, bytearray([0x9F, 0x00, 0xA2, 0x7F])) # sta !level_clears,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0013, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0014, bytearray([0x10, 0xF5])) # bpl -
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0016, bytearray([0xA2, 0x0B])) # ldx #$0B
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0018, bytearray([0xBF, 0x40, 0x09, 0x70])) # - lda !blocksanity_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x001C, bytearray([0x9F, 0x10, 0xA0, 0x7F])) # sta !blocksanity_flags,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0020, bytearray([0xBF, 0x10, 0x09, 0x70])) # lda !moons_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0024, bytearray([0x9D, 0xEE, 0x1F])) # sta !moons_flags,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0027, bytearray([0xBF, 0x00, 0x09, 0x70])) # lda !yoshi_coins_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x002B, bytearray([0x9D, 0x2F, 0x1F])) # sta !yoshi_coins_flags,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x002E, bytearray([0xBF, 0x30, 0x09, 0x70])) # lda !bonus_block_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0032, bytearray([0x9F, 0x00, 0xA0, 0x7F])) # sta !bonus_block_flags,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0036, bytearray([0xBF, 0x20, 0x09, 0x70])) # lda !checkpoints_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x003A, bytearray([0x9D, 0x3C, 0x1F])) # sta !checkpoints_flags,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x003D, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_SRAM_ADDR + 0x003E, bytearray([0x10, 0xD8])) # bpl -
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0040, bytearray([0xC2, 0x10])) # rep #$10
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0042, bytearray([0xA2, 0x45, 0x02])) # ldx.w #!blocksanity_locs-1
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0045, bytearray([0xBF, 0x00, 0x0A, 0x70])) # - lda !blocksanity_data_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0049, bytearray([0x9F, 0x00, 0xA4, 0x7F])) # sta !blocksanity_data_flags,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x004D, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_SRAM_ADDR + 0x004E, bytearray([0x10, 0xF5])) # bpl -
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0050, bytearray([0xE2, 0x10])) # sep #$10
+ #rom.write_bytes(INIT_SRAM_ADDR + 0x0052, bytearray([0xAF, 0x50, 0x09, 0x70])) # lda !received_items_count_sram+$00
+ #rom.write_bytes(INIT_SRAM_ADDR + 0x0056, bytearray([0x8F, 0x0E, 0xA0, 0x7F])) # sta !received_items_count+$00
+ #rom.write_bytes(INIT_SRAM_ADDR + 0x005A, bytearray([0xAF, 0x51, 0x09, 0x70])) # lda !received_items_count_sram+$01
+ #rom.write_bytes(INIT_SRAM_ADDR + 0x005E, bytearray([0x8F, 0x0F, 0xA0, 0x7F])) # sta !received_items_count+$01
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0052, bytearray([0xEA] * 0x17)) # Ugly, will apply be better when we port everything to a Base Patch
+ #rom.write_bytes(INIT_SRAM_ADDR + 0x0062, bytearray([0xAF, 0x52, 0x09, 0x70])) # lda !special_world_clear_sram
+ #rom.write_bytes(INIT_SRAM_ADDR + 0x0066, bytearray([0x8D, 0xFF, 0x1F])) # sta !special_world_clear_flag
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0069, bytearray([0xAF, 0x54, 0x09, 0x70])) # lda !goal_item_count_sram
+ rom.write_bytes(INIT_SRAM_ADDR + 0x006D, bytearray([0x8F, 0x1E, 0xA0, 0x7F])) # sta !goal_item_count
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0071, bytearray([0x28])) # plp
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0072, bytearray([0x5C, 0xFB, 0x9C, 0x00])) # jml $009CFB
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0076, bytearray([0xDA])) # .clear phx
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0077, bytearray([0xA2, 0x5F, 0x00])) # ldx.w #$005F
+ rom.write_bytes(INIT_SRAM_ADDR + 0x007A, bytearray([0xA9, 0x00])) # lda #$00
+ rom.write_bytes(INIT_SRAM_ADDR + 0x007C, bytearray([0x9F, 0x00, 0x08, 0x70])) # - sta !level_clears_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0080, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0081, bytearray([0x10, 0xF9])) # bpl -
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0083, bytearray([0xA2, 0x0B, 0x00])) # ldx.w #$000B
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0086, bytearray([0x9F, 0x40, 0x09, 0x70])) # - sta !blocksanity_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x008A, bytearray([0x9F, 0x00, 0x09, 0x70])) # sta !yoshi_coins_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x008E, bytearray([0x9F, 0x30, 0x09, 0x70])) # sta !bonus_block_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0092, bytearray([0x9F, 0x10, 0x09, 0x70])) # sta !moons_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x0096, bytearray([0x9F, 0x20, 0x09, 0x70])) # sta !checkpoints_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x009A, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_SRAM_ADDR + 0x009B, bytearray([0x10, 0xE9])) # bpl -
+ rom.write_bytes(INIT_SRAM_ADDR + 0x009D, bytearray([0xA2, 0x45, 0x02])) # ldx.w #!blocksanity_locs-1
+ rom.write_bytes(INIT_SRAM_ADDR + 0x00A0, bytearray([0x9F, 0x00, 0x0A, 0x70])) # - sta !blocksanity_data_sram,x
+ rom.write_bytes(INIT_SRAM_ADDR + 0x00A4, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_SRAM_ADDR + 0x00A5, bytearray([0x10, 0xF9])) # bpl -
+ rom.write_bytes(INIT_SRAM_ADDR + 0x00A7, bytearray([0x8F, 0x52, 0x09, 0x70])) # sta !special_world_clear_sram
+ rom.write_bytes(INIT_SRAM_ADDR + 0x00AB, bytearray([0x8F, 0x50, 0x09, 0x70])) # sta !received_items_count_sram+$00
+ rom.write_bytes(INIT_SRAM_ADDR + 0x00AF, bytearray([0x8F, 0x51, 0x09, 0x70])) # sta !received_items_count_sram+$01
+ rom.write_bytes(INIT_SRAM_ADDR + 0x00B3, bytearray([0x8F, 0x54, 0x09, 0x70])) # sta !goal_item_count_sram
+ rom.write_bytes(INIT_SRAM_ADDR + 0x00B7, bytearray([0xFA])) # plx
+ rom.write_bytes(INIT_SRAM_ADDR + 0x00B8, bytearray([0x5C, 0x22, 0x9D, 0x00])) # jml $009D22
+
+ SAVE_SRAM_ADDR = 0x7F300
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0000, bytearray([0xE2, 0x30])) # save_sram: sep #$30
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0002, bytearray([0xAB])) # plb
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0003, bytearray([0xA2, 0x5F])) # ldx.b #$5F
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0005, bytearray([0xBF, 0x00, 0xA2, 0x7F])) # - lda !level_clears,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0009, bytearray([0x9F, 0x00, 0x08, 0x70])) # sta !level_clears_sram,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x000D, bytearray([0xCA])) # dex
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x000E, bytearray([0x10, 0xF5])) # bpl -
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0010, bytearray([0xA2, 0x0B])) # ldx #$0B
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0012, bytearray([0xBF, 0x10, 0xA0, 0x7F])) # - lda !blocksanity_flags,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0016, bytearray([0x9F, 0x40, 0x09, 0x70])) # sta !blocksanity_sram,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x001A, bytearray([0xBD, 0x2F, 0x1F])) # lda !yoshi_coins_flags,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x001D, bytearray([0x9F, 0x00, 0x09, 0x70])) # sta !yoshi_coins_sram,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0021, bytearray([0xBD, 0xEE, 0x1F])) # lda !moons_flags,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0024, bytearray([0x9F, 0x10, 0x09, 0x70])) # sta !moons_sram,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0028, bytearray([0xBF, 0x00, 0xA0, 0x7F])) # lda !bonus_block_flags,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x002C, bytearray([0x9F, 0x30, 0x09, 0x70])) # sta !bonus_block_sram,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0030, bytearray([0xBD, 0x3C, 0x1F])) # lda !checkpoints_flags,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0033, bytearray([0x9F, 0x20, 0x09, 0x70])) # sta !checkpoints_sram,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0037, bytearray([0xCA])) # dex
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0038, bytearray([0x10, 0xD8])) # bpl -
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x003A, bytearray([0xC2, 0x10])) # rep #$10
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x003C, bytearray([0xA2, 0x45, 0x02])) # ldx.w #!blocksanity_locs-1
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x003F, bytearray([0xBF, 0x00, 0xA4, 0x7F])) # - lda !blocksanity_data_flags,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0043, bytearray([0x9F, 0x00, 0x0A, 0x70])) # sta !blocksanity_data_sram,x
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0047, bytearray([0xCA])) # dex
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0048, bytearray([0x10, 0xF5])) # bpl -
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x004A, bytearray([0xE2, 0x10])) # sep #$10
+ #rom.write_bytes(SAVE_SRAM_ADDR + 0x004C, bytearray([0xAD, 0xFF, 0x1F])) # lda !special_world_clear_flag
+ #rom.write_bytes(SAVE_SRAM_ADDR + 0x004F, bytearray([0x8F, 0x52, 0x09, 0x70])) # sta !special_world_clear_sram
+ #rom.write_bytes(SAVE_SRAM_ADDR + 0x0053, bytearray([0xAF, 0x0E, 0xA0, 0x7F])) # lda !received_items_count+$00
+ #rom.write_bytes(SAVE_SRAM_ADDR + 0x0057, bytearray([0x8F, 0x50, 0x09, 0x70])) # sta !received_items_count_sram+$00
+ #rom.write_bytes(SAVE_SRAM_ADDR + 0x005B, bytearray([0xAF, 0x0F, 0xA0, 0x7F])) # lda !received_items_count+$01
+ #rom.write_bytes(SAVE_SRAM_ADDR + 0x005F, bytearray([0x8F, 0x51, 0x09, 0x70])) # sta !received_items_count_sram+$01
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x004C, bytearray([0xEA] * 0x17)) # Ugly, will apply be better when we port everything to a Base Patch
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0063, bytearray([0xAF, 0x0F, 0xA0, 0x7F])) # lda !goal_item_count
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x0067, bytearray([0x8F, 0x51, 0x09, 0x70])) # sta !goal_item_count_sram
+ rom.write_bytes(SAVE_SRAM_ADDR + 0x006B, bytearray([0x6B])) # rtl
+
+ INIT_RAM_ADDR = 0x7F0A0
+ rom.write_bytes(INIT_RAM_ADDR + 0x0000, bytearray([0xA9, 0xAA])) # init_ram: lda #$AA
+ rom.write_bytes(INIT_RAM_ADDR + 0x0002, bytearray([0x8D, 0x00, 0x04])) # sta $0400
+ rom.write_bytes(INIT_RAM_ADDR + 0x0005, bytearray([0xA9, 0x00])) # clear_level_data: lda #$00
+ rom.write_bytes(INIT_RAM_ADDR + 0x0007, bytearray([0xA2, 0x5F])) # ldx #$5F
+ rom.write_bytes(INIT_RAM_ADDR + 0x0009, bytearray([0x9F, 0x00, 0xA2, 0x7F])) # .loop sta !level_clears,x
+ rom.write_bytes(INIT_RAM_ADDR + 0x000D, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_RAM_ADDR + 0x000E, bytearray([0x10, 0xF9])) # bpl .loop
+ rom.write_bytes(INIT_RAM_ADDR + 0x0010, bytearray([0xC2, 0x10])) # rep #$10
+ rom.write_bytes(INIT_RAM_ADDR + 0x0012, bytearray([0xA2, 0x0B, 0x00])) # ldx.w #$000B
+ rom.write_bytes(INIT_RAM_ADDR + 0x0015, bytearray([0x9F, 0x10, 0xA0, 0x7F])) # - sta !blocksanity_flags,x
+ rom.write_bytes(INIT_RAM_ADDR + 0x0019, bytearray([0x9D, 0x2F, 0x1F])) # sta !yoshi_coins_flags,x
+ rom.write_bytes(INIT_RAM_ADDR + 0x001C, bytearray([0x9D, 0xEE, 0x1F])) # sta !moons_flags,x
+ rom.write_bytes(INIT_RAM_ADDR + 0x001F, bytearray([0x9F, 0x00, 0xA0, 0x7F])) # sta !bonus_block_flags,x
+ rom.write_bytes(INIT_RAM_ADDR + 0x0023, bytearray([0x9D, 0x3C, 0x1F])) # sta !checkpoints_flags,x
+ rom.write_bytes(INIT_RAM_ADDR + 0x0026, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_RAM_ADDR + 0x0027, bytearray([0x10, 0xEC])) # bpl -
+ rom.write_bytes(INIT_RAM_ADDR + 0x0029, bytearray([0xA2, 0x45, 0x02])) # ldx.w #!blocksanity_locs-1
+ rom.write_bytes(INIT_RAM_ADDR + 0x002C, bytearray([0x9F, 0x00, 0xA4, 0x7F])) # - sta !blocksanity_data_flags,x
+ rom.write_bytes(INIT_RAM_ADDR + 0x0030, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_RAM_ADDR + 0x0031, bytearray([0x10, 0xF9])) # bpl -
+ rom.write_bytes(INIT_RAM_ADDR + 0x0033, bytearray([0xA2, 0x22, 0x04])) # ldx #$0422
+ rom.write_bytes(INIT_RAM_ADDR + 0x0036, bytearray([0x9F, 0x00, 0xB0, 0x7F])) # - sta !score_sprite_count,x
+ rom.write_bytes(INIT_RAM_ADDR + 0x003A, bytearray([0xCA])) # dex
+ rom.write_bytes(INIT_RAM_ADDR + 0x003B, bytearray([0x10, 0xF9])) # bpl -
+ #rom.write_bytes(INIT_RAM_ADDR + 0x003D, bytearray([0x8D, 0xFF, 0x1F])) # sta !special_world_clear_flag
+ rom.write_bytes(INIT_RAM_ADDR + 0x003D, bytearray([0xEA, 0xEA, 0xEA])) # sta !special_world_clear_flag
+ rom.write_bytes(INIT_RAM_ADDR + 0x0040, bytearray([0x8F, 0x0E, 0xA0, 0x7F])) # sta !received_items_count+$00
+ rom.write_bytes(INIT_RAM_ADDR + 0x0044, bytearray([0x8F, 0x0F, 0xA0, 0x7F])) # sta !received_items_count+$01
+ rom.write_bytes(INIT_RAM_ADDR + 0x0048, bytearray([0x8F, 0x1E, 0xA0, 0x7F])) # sta !goal_item_count
+ rom.write_bytes(INIT_RAM_ADDR + 0x004C, bytearray([0xA9, 0xFF])) # lda #$FF
+ rom.write_bytes(INIT_RAM_ADDR + 0x004E, bytearray([0x8D, 0x3C, 0x0F])) # sta !thwimp_index
+ rom.write_bytes(INIT_RAM_ADDR + 0x0051, bytearray([0xE2, 0x10])) # sep #$10
+ rom.write_bytes(INIT_RAM_ADDR + 0x0053, bytearray([0x22, 0x20, 0xF1, 0x0F])) # jsl clear_tilemap
+ rom.write_bytes(INIT_RAM_ADDR + 0x0057, bytearray([0x5C, 0xC0, 0x93, 0x00])) # jml $0093C0
+
+def handle_map_indicators(rom):
+ rom.write_bytes(0x265EE, bytearray([0x4C, 0x00, 0xA3])) # org $04E5EE : jmp check_events
+
+ GET_MAP_LEVEL_NUM_ADDR = 0x22340
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0000, bytearray([0xC2, 0x30])) # get_translevel_num: rep #$30
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0002, bytearray([0xAE, 0xD6, 0x0D])) # ldx $0DD6
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0005, bytearray([0xBD, 0x1F, 0x1F])) # lda $1F1F,x
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0008, bytearray([0x85, 0x00])) # sta $00
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x000A, bytearray([0xBD, 0x21, 0x1F])) # lda $1F21,x
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x000D, bytearray([0x85, 0x02])) # sta $02
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x000F, bytearray([0x8A])) # txa
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0010, bytearray([0x4A])) # lsr
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0011, bytearray([0x4A])) # lsr
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0012, bytearray([0xAA])) # tax
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0013, bytearray([0x20, 0x85, 0x98])) # jsr $9885
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0016, bytearray([0xA6, 0x04])) # ldx $04
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0018, bytearray([0xBF, 0x00, 0xD0, 0x7E])) # lda $7ED000,x
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x001C, bytearray([0xE2, 0x30])) # sep #$30
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x001E, bytearray([0x85, 0x60])) # sta $60
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0020, bytearray([0xAA])) # tax
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0021, bytearray([0xBF, 0x00, 0xFF, 0x06])) # lda $06FF00,x
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0025, bytearray([0xC9, 0xFF])) # cmp #$FF
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0027, bytearray([0xF0, 0x02])) # beq +
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x0029, bytearray([0x85, 0x60])) # sta $60
+ rom.write_bytes(GET_MAP_LEVEL_NUM_ADDR + 0x002B, bytearray([0x60])) # + rts
+
+ GET_MAP_LEVEL_BIT_ADDR = 0x22380
+ rom.write_bytes(GET_MAP_LEVEL_BIT_ADDR + 0x0000, bytearray([0xA5, 0x60])) # get_translevel_bit: lda $60
+ rom.write_bytes(GET_MAP_LEVEL_BIT_ADDR + 0x0002, bytearray([0x4A])) # lsr
+ rom.write_bytes(GET_MAP_LEVEL_BIT_ADDR + 0x0003, bytearray([0x4A])) # lsr
+ rom.write_bytes(GET_MAP_LEVEL_BIT_ADDR + 0x0004, bytearray([0x4A])) # lsr
+ rom.write_bytes(GET_MAP_LEVEL_BIT_ADDR + 0x0005, bytearray([0xA8])) # tay
+ rom.write_bytes(GET_MAP_LEVEL_BIT_ADDR + 0x0006, bytearray([0xA5, 0x60])) # lda $60
+ rom.write_bytes(GET_MAP_LEVEL_BIT_ADDR + 0x0008, bytearray([0x29, 0x07])) # and #$07
+ rom.write_bytes(GET_MAP_LEVEL_BIT_ADDR + 0x000A, bytearray([0xAA])) # tax
+ rom.write_bytes(GET_MAP_LEVEL_BIT_ADDR + 0x000B, bytearray([0x60])) # rts
+
+ UPDATE_MAP_PTRS_ADDR = 0x223C0
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x0000, bytearray([0xE6, 0x00])) # update_flag_pointers: inc $00
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x0002, bytearray([0xE6, 0x00])) # inc $00
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x0004, bytearray([0xE6, 0x03])) # inc $03
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x0006, bytearray([0xE6, 0x03])) # inc $03
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x0008, bytearray([0xE6, 0x06])) # inc $06
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x000A, bytearray([0xE6, 0x06])) # inc $06
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x000C, bytearray([0xE6, 0x62])) # inc $62
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x000E, bytearray([0xE6, 0x62])) # inc $62
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x0010, bytearray([0xE6, 0x63])) # inc $63
+ rom.write_bytes(UPDATE_MAP_PTRS_ADDR + 0x0012, bytearray([0x60])) # rts
+
+ CLEAR_TILEMAP_ADDR = 0x7F120
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0000, bytearray([0xC2, 0x20])) # clear_tilemap: rep #$20
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0002, bytearray([0xA9, 0x1F, 0x39])) # lda.w #$3900+!icon_disabled
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0005, bytearray([0xA2, 0x1E])) # ldx #$1E
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0007, bytearray([0x9F, 0x20, 0xA1, 0x7F])) # .loop sta !ow_tilemap_switches,x
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x000B, bytearray([0x9F, 0x00, 0xA1, 0x7F])) # sta !ow_tilemap_abilities,x
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x000F, bytearray([0x9F, 0x40, 0xA1, 0x7F])) # sta !ow_tilemap_flags_top,x
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0013, bytearray([0x9F, 0x60, 0xA1, 0x7F])) # sta !ow_tilemap_flags_mid,x
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0017, bytearray([0x9F, 0x80, 0xA1, 0x7F])) # sta !ow_tilemap_flags_bot,x
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x001B, bytearray([0xCA])) # dex
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x001C, bytearray([0xCA])) # dex
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x001D, bytearray([0x10, 0xE8])) # bpl .loop
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x001F, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0021, bytearray([0xA9, 0x07])) # lda #$07
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0023, bytearray([0x85, 0x63])) # sta $63
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0025, bytearray([0x0A])) # asl
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0026, bytearray([0x85, 0x62])) # sta $62
+ rom.write_bytes(CLEAR_TILEMAP_ADDR + 0x0028, bytearray([0x6B])) # rtl
+
+ CLEAR_TILEMAP_FLAGS_ADDR = 0x7F180
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0000, bytearray([0xC2, 0x20])) # clear_tilemap_flags: rep #$20
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0002, bytearray([0xA9, 0x1F, 0x39])) # lda.w #$3900+!icon_disabled
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0005, bytearray([0xA2, 0x0C])) # ldx.b #($07*2)-2
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0007, bytearray([0x9F, 0x40, 0xA1, 0x7F])) # .loop sta !ow_tilemap_flags_top,x
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x000B, bytearray([0x9F, 0x60, 0xA1, 0x7F])) # sta !ow_tilemap_flags_mid,x
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x000F, bytearray([0x9F, 0x80, 0xA1, 0x7F])) # sta !ow_tilemap_flags_bot,x
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0013, bytearray([0xCA])) # dex
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0014, bytearray([0xCA])) # dex
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0015, bytearray([0x10, 0xF0])) # bpl .loop
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0017, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0019, bytearray([0xA9, 0x06])) # lda #$06
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x001B, bytearray([0x85, 0x63])) # sta $63
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x001D, bytearray([0x0A])) # asl
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x001E, bytearray([0x85, 0x62])) # sta $62
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0020, bytearray([0xA9, 0xFF])) # lda #$FF
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0022, bytearray([0x8D, 0x3C, 0x0F])) # sta !thwimp_index
+ rom.write_bytes(CLEAR_TILEMAP_FLAGS_ADDR + 0x0025, bytearray([0x6B])) # rtl
+
+ CHECK_EVENTS_ADDR = 0x22300
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0000, bytearray([0xDA])) # check_events: phx
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0001, bytearray([0x20, 0x40, 0xA3])) # jsr get_translevel_num
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0004, bytearray([0xAD, 0xD5, 0x0D])) # lda $0DD5
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0007, bytearray([0xF0, 0x17])) # beq .dont_sync
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0009, bytearray([0x30, 0x15])) # bmi .dont_sync
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x000B, bytearray([0xC9, 0x05])) # cmp #$05
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x000D, bytearray([0xB0, 0x11])) # bcs .dont_sync
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x000F, bytearray([0x29, 0x07])) # and #$07
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0011, bytearray([0xAA])) # tax
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0012, bytearray([0xBF, 0x7D, 0x9E, 0x00])) # lda.l $009E7D,x
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0016, bytearray([0xA6, 0x60])) # ldx $60
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0018, bytearray([0x1F, 0x00, 0xA2, 0x7F])) # ora !level_clears,x
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x001C, bytearray([0x9F, 0x00, 0xA2, 0x7F])) # sta !level_clears,x
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0020, bytearray([0xFA])) # .dont_sync plx
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0021, bytearray([0xAD, 0xD5, 0x0D])) # lda $0DD5
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0024, bytearray([0xC9, 0x02])) # cmp #$02
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0026, bytearray([0xD0, 0x03])) # bne .no_secret
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x0028, bytearray([0xEE, 0xEA, 0x1D])) # inc $1DEA
+ rom.write_bytes(CHECK_EVENTS_ADDR + 0x002B, bytearray([0x4C, 0xF8, 0xE5])) # .no_secret jmp $E5F8
+
+ DRAW_MAP_TILEMAP_ADDR = 0x221B6
+ rom.write_bytes(0x00222, bytearray([0x5C, 0xB6, 0xA1, 0x04])) # org $008222 : jml draw_ow_tilemap
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0000, bytearray([0xAD, 0xD9, 0x13])) # draw_ow_tilemap: lda $13D9
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0003, bytearray([0xC9, 0x0A])) # cmp #$0A
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0005, bytearray([0xD0, 0x04])) # bne write_tilemap
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0007, bytearray([0x5C, 0x29, 0x82, 0x00])) # jml $008229
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x000B, bytearray([0xC2, 0x20])) # write_tilemap: rep #$20
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x000D, bytearray([0xA0, 0x80])) # ldy #$80
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x000F, bytearray([0x8C, 0x15, 0x21])) # sty $2115
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0012, bytearray([0xA9, 0x27, 0x50])) # write_abilities: lda #!vram_abilities_top
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0015, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0018, bytearray([0xA2, 0x00])) # ldx.b #$00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x001A, bytearray([0xBF, 0xA2, 0xA2, 0x04])) # ..loop lda.l abilities_top,x
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x001E, bytearray([0x8D, 0x18, 0x21])) # sta $2118
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0021, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0022, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0023, bytearray([0xE0, 0x14])) # cpx.b #$0A*2
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0025, bytearray([0x90, 0xF3])) # bcc ..loop
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0027, bytearray([0xA9, 0x47, 0x50])) # .mid lda #!vram_abilities_mid
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x002A, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x002D, bytearray([0xA2, 0x00])) # ldx.b #$00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x002F, bytearray([0xBF, 0xB6, 0xA2, 0x04])) # ..loop lda.l abilities_bottom,x
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0033, bytearray([0x8D, 0x18, 0x21])) # sta $2118
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0036, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0037, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0038, bytearray([0xE0, 0x14])) # cpx.b #$0A*2
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x003A, bytearray([0x90, 0xF3])) # bcc ..loop
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x003C, bytearray([0xA9, 0x67, 0x50])) # .bot lda #!vram_abilities_bot
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x003F, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0042, bytearray([0xA2, 0x00])) # ldx.b #$00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0044, bytearray([0xBF, 0x00, 0xA1, 0x7F])) # ..loop lda !ow_tilemap_abilities,x
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0048, bytearray([0x8D, 0x18, 0x21])) # sta $2118
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x004B, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x004C, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x004D, bytearray([0xE0, 0x14])) # cpx.b #$0A*2
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x004F, bytearray([0x90, 0xF3])) # bcc ..loop
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0051, bytearray([0xA9, 0x32, 0x50])) # write_switches: lda #!vram_switches_top
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0054, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0057, bytearray([0xA2, 0x00])) # ldx.b #$00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0059, bytearray([0xBF, 0xCA, 0xA2, 0x04])) # ..loop lda.l switches_top,x
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x005D, bytearray([0x8D, 0x18, 0x21])) # sta $2118
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0060, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0061, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0062, bytearray([0xE0, 0x0A])) # cpx.b #$05*2
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0064, bytearray([0x90, 0xF3])) # bcc ..loop
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0066, bytearray([0xA9, 0x52, 0x50])) # .mid lda #!vram_switches_mid
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0069, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x006C, bytearray([0xA2, 0x00])) # ldx.b #$00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x006E, bytearray([0xBF, 0xD4, 0xA2, 0x04])) # ..loop lda.l switches_bottom,x
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0072, bytearray([0x8D, 0x18, 0x21])) # sta $2118
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0075, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0076, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0077, bytearray([0xE0, 0x0A])) # cpx.b #$05*2
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0079, bytearray([0x90, 0xF3])) # bcc ..loop
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x007B, bytearray([0xA9, 0x72, 0x50])) # .bot lda #!vram_switches_bot
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x007E, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0081, bytearray([0xA2, 0x00])) # ldx.b #$00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0083, bytearray([0xBF, 0x20, 0xA1, 0x7F])) # ..loop lda !ow_tilemap_switches,x
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0087, bytearray([0x8D, 0x18, 0x21])) # sta $2118
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x008A, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x008B, bytearray([0xE8])) # inx
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x008C, bytearray([0xE0, 0x0A])) # cpx.b #$05*2
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x008E, bytearray([0x90, 0xF3])) # bcc ..loop
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0090, bytearray([0xD4, 0x00])) # write_level_data: pei ($00)
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0092, bytearray([0xA5, 0x63])) # lda $63
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0094, bytearray([0x29, 0xFF, 0x00])) # and #$00FF
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0097, bytearray([0x85, 0x00])) # sta $00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0099, bytearray([0xF0, 0x48])) # beq .skip_flags
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x009B, bytearray([0xA9, 0x3E, 0x50])) # .top lda.w #!vram_level_data_top+$01
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x009E, bytearray([0x38])) # sec
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x009F, bytearray([0xE5, 0x00])) # sbc $00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00A1, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00A4, bytearray([0xA6, 0x62])) # ldx.b $62
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00A6, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00A7, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00A8, bytearray([0xBF, 0x40, 0xA1, 0x7F])) # ..loop lda.l !ow_tilemap_flags_top,x
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00AC, bytearray([0x8D, 0x18, 0x21])) # sta $2118
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00AF, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00B0, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00B1, bytearray([0x10, 0xF5])) # bpl ..loop
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00B3, bytearray([0xA9, 0x5E, 0x50])) # .mid lda.w #!vram_level_data_mid+$01
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00B6, bytearray([0x38])) # sec
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00B7, bytearray([0xE5, 0x00])) # sbc $00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00B9, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00BC, bytearray([0xA6, 0x62])) # ldx.b $62
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00BE, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00BF, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00C0, bytearray([0xBF, 0x60, 0xA1, 0x7F])) # ..loop lda.l !ow_tilemap_flags_mid,x
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00C4, bytearray([0x8D, 0x18, 0x21])) # sta $2118
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00C7, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00C8, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00C9, bytearray([0x10, 0xF5])) # bpl ..loop
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00CB, bytearray([0xA9, 0x7E, 0x50])) # .bot lda.w #!vram_level_data_bot+$01
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00CE, bytearray([0x38])) # sec
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00CF, bytearray([0xE5, 0x00])) # sbc $00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00D1, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00D4, bytearray([0xA6, 0x62])) # ldx.b $62
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00D6, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00D7, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00D8, bytearray([0xBF, 0x80, 0xA1, 0x7F])) # ..loop lda.l !ow_tilemap_flags_bot,x
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00DC, bytearray([0x8D, 0x18, 0x21])) # sta $2118
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00DF, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00E0, bytearray([0xCA])) # dex
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00E1, bytearray([0x10, 0xF5])) # bpl ..loop
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00E3, bytearray([0x68])) # .skip_flags pla
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00E4, bytearray([0x85, 0x00])) # sta $00
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00E6, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00E8, bytearray([0x5C, 0x37, 0x82, 0x00])) # jml $008237
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00EC, bytearray([0x0F, 0x39, 0x12, 0x39])) # abilities_top: dw $390F,$3912
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00F0, bytearray([0x11, 0x39, 0x02, 0x39])) # dw $3911,$3902
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00F4, bytearray([0x12, 0x39, 0x02, 0x39])) # dw $3912,$3902
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00F8, bytearray([0x18, 0x39, 0x0F, 0x39])) # dw $3918,$390F
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x00FC, bytearray([0x0F, 0x39, 0x12, 0x39])) # dw $390F,$3912
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0100, bytearray([0x4E, 0x39, 0x4F, 0x39])) # abilities_bottom: dw $394E,$394F
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0104, bytearray([0x54, 0x39, 0x40, 0x39])) # dw $3954,$3940
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0108, bytearray([0x56, 0x39, 0x4B, 0x39])) # dw $3956,$394B
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x010C, bytearray([0x4E, 0x39, 0x52, 0x39])) # dw $394E,$3952
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0110, bytearray([0x41, 0x39, 0x53, 0x39])) # dw $3941,$3953
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0114, bytearray([0x18, 0x39, 0x06, 0x39])) # switches_top: dw $3918,$3906
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0118, bytearray([0x11, 0x39, 0x01, 0x39])) # dw $3911,$3901
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x011C, bytearray([0x12, 0x39])) # dw $3912
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x011E, bytearray([0x12, 0x39, 0x12, 0x39])) # switches_bottom: dw $3912,$3912
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0122, bytearray([0x12, 0x39, 0x12, 0x39])) # dw $3912,$3912
+ rom.write_bytes(DRAW_MAP_TILEMAP_ADDR + 0x0126, bytearray([0x4F, 0x39])) # dw $394F
+
+ BUILD_TILEMAP_ADDR = 0x26F3E
+ rom.write_bytes(0x021C7, bytearray([0x22, 0x3E, 0xEF, 0x04])) # org $00A1C7 : jsl prepare_dynamic_tilemap
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0000, bytearray([0x22, 0x41, 0x82, 0x04])) # prepare_dynamic_tilemap: jsl $048241
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0004, bytearray([0xA0, 0x22])) # .handle_powerup: ldy #$22
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0006, bytearray([0xAD, 0x2D, 0x1F])) # lda $1F2D
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0009, bytearray([0x4A])) # lsr
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x000A, bytearray([0x90, 0x01])) # bcc $01
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x000C, bytearray([0xC8])) # iny
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x000D, bytearray([0x4A])) # lsr
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x000E, bytearray([0x90, 0x01])) # bcc $01
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0010, bytearray([0xC8])) # iny
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0011, bytearray([0x4A])) # lsr
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0012, bytearray([0x90, 0x01])) # bcc $01
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0014, bytearray([0xC8])) # iny
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0015, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0016, bytearray([0x8F, 0x00, 0xA1, 0x7F])) # sta !ow_tilemap_abilities ; Progressive powerup
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x001A, bytearray([0xA0, 0x5E])) # .handle_spinjump: ldy #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x001C, bytearray([0xAD, 0x1C, 0x1F])) # lda $1F1C
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x001F, bytearray([0x29, 0x08])) # and #$08
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0021, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0023, bytearray([0xA0, 0x3F])) # ldy #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0025, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0026, bytearray([0x8F, 0x02, 0xA1, 0x7F])) # sta !ow_tilemap_abilities+$02 ; Spin jump
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x002A, bytearray([0xA0, 0x5E])) # .handle_run: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x002C, bytearray([0xAD, 0x1C, 0x1F])) # lda $1F1C
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x002F, bytearray([0x29, 0x80])) # and #$80
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0031, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0033, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0035, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0036, bytearray([0x8F, 0x04, 0xA1, 0x7F])) # sta !ow_tilemap_abilities+$04 ; Run
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x003A, bytearray([0xA0, 0x5E])) # .handle_carry: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x003C, bytearray([0xAD, 0x1C, 0x1F])) # lda $1F1C
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x003F, bytearray([0x29, 0x40])) # and #$40
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0041, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0043, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0045, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0046, bytearray([0x8F, 0x06, 0xA1, 0x7F])) # sta !ow_tilemap_abilities+$06 ; Carry
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x004A, bytearray([0xA0, 0x5E])) # .handle_swim: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x004C, bytearray([0xAD, 0x1C, 0x1F])) # lda $1F1C
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x004F, bytearray([0x29, 0x04])) # and #$04
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0051, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0053, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0055, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0056, bytearray([0x8F, 0x08, 0xA1, 0x7F])) # sta !ow_tilemap_abilities+$08 ; Swim
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x005A, bytearray([0xA0, 0x5E])) # .handle_climb: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x005C, bytearray([0xAD, 0x1C, 0x1F])) # lda $1F1C
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x005F, bytearray([0x29, 0x20])) # and #$20
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0061, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0063, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0065, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0066, bytearray([0x8F, 0x0A, 0xA1, 0x7F])) # sta !ow_tilemap_abilities+$0A ; Climb
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x006A, bytearray([0xA0, 0x5E])) # .handle_yoshi: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x006C, bytearray([0xAD, 0x1C, 0x1F])) # lda $1F1C
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x006F, bytearray([0x29, 0x02])) # and #$02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0071, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0073, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0075, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0076, bytearray([0x8F, 0x0C, 0xA1, 0x7F])) # sta !ow_tilemap_abilities+$0C ; Yoshi
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x007A, bytearray([0xA0, 0x5E])) # .handle_pswitch: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x007C, bytearray([0xAD, 0x1C, 0x1F])) # lda $1F1C
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x007F, bytearray([0x29, 0x10])) # and #$10
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0081, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0083, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0085, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0086, bytearray([0x8F, 0x0E, 0xA1, 0x7F])) # sta !ow_tilemap_abilities+$0E ; P-Switch
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x008A, bytearray([0xA0, 0x5E])) # .handle_pballoon: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x008C, bytearray([0xAD, 0x2D, 0x1F])) # lda $1F2D
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x008F, bytearray([0x29, 0x08])) # and #$08
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0091, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0093, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0095, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0096, bytearray([0x8F, 0x10, 0xA1, 0x7F])) # sta !ow_tilemap_abilities+$10 ; P-Balloon
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x009A, bytearray([0xA0, 0x5E])) # .handle_star: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x009C, bytearray([0xAD, 0x2D, 0x1F])) # lda $1F2D
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x009F, bytearray([0x29, 0x10])) # and #$10
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00A1, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00A3, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00A5, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00A6, bytearray([0x8F, 0x12, 0xA1, 0x7F])) # sta !ow_tilemap_abilities+$12 ; Star
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00AA, bytearray([0xA0, 0x5E])) # .handle_yellow_switch: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00AC, bytearray([0xAD, 0x28, 0x1F])) # lda $1F28
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00AF, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00B1, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00B3, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00B4, bytearray([0x8F, 0x20, 0xA1, 0x7F])) # sta !ow_tilemap_switches+$00
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00B8, bytearray([0xA0, 0x5E])) # .handle_green_switch: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00BA, bytearray([0xAD, 0x27, 0x1F])) # lda $1F27
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00BD, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00BF, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00C1, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00C2, bytearray([0x8F, 0x22, 0xA1, 0x7F])) # sta !ow_tilemap_switches+$02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00C6, bytearray([0xA0, 0x5E])) # .handle_red_switch: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00C8, bytearray([0xAD, 0x2A, 0x1F])) # lda $1F2A
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00CB, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00CD, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00CF, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00D0, bytearray([0x8F, 0x24, 0xA1, 0x7F])) # sta !ow_tilemap_switches+$04
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00D4, bytearray([0xA0, 0x5E])) # .handle_blue_switch: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00D6, bytearray([0xAD, 0x29, 0x1F])) # lda $1F29
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00D9, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00DB, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00DD, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00DE, bytearray([0x8F, 0x26, 0xA1, 0x7F])) # sta !ow_tilemap_switches+$06
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00E2, bytearray([0xA0, 0x5E])) # .handle_special_world_clear: ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00E4, bytearray([0xAD, 0x1E, 0x1F])) # lda !special_world_clear_flag
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00E7, bytearray([0xF0, 0x02])) # beq $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00E9, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00EB, bytearray([0x98])) # tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00EC, bytearray([0x8F, 0x28, 0xA1, 0x7F])) # sta !ow_tilemap_switches+$08
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00F0, bytearray([0x22, 0x80, 0xF1, 0x0F])) # jsl clear_tilemap_flags
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00F4, bytearray([0xAD, 0xD9, 0x13])) # lda $13D9
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00F7, bytearray([0xC9, 0x01])) # cmp #$01
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00F9, bytearray([0xF0, 0x05])) # beq process_level
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00FB, bytearray([0xC9, 0x03])) # cmp #$03
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00FD, bytearray([0xF0, 0x01])) # beq process_level
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x00FF, bytearray([0x6B])) # rtl
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0100, bytearray([0x20, 0x40, 0xA3])) # process_level: jsr get_translevel_num
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0103, bytearray([0xA6, 0x60])) # ldx $60
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0105, bytearray([0xBF, 0x00, 0xF4, 0x0F])) # lda.l level_data,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0109, bytearray([0x10, 0x01])) # bpl .handle_data
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x010B, bytearray([0x6B])) # rtl
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x010C, bytearray([0x64, 0x62])) # .handle_data stz $62
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x010E, bytearray([0x64, 0x63])) # stz $63
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0110, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0112, bytearray([0xA9, 0x40, 0xA1])) # lda.w #!ow_tilemap_flags_top
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0115, bytearray([0x85, 0x00])) # sta $00
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0117, bytearray([0xA9, 0x60, 0xA1])) # lda.w #!ow_tilemap_flags_mid
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x011A, bytearray([0x85, 0x03])) # sta $03
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x011C, bytearray([0xA9, 0x80, 0xA1])) # lda.w #!ow_tilemap_flags_bot
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x011F, bytearray([0x85, 0x06])) # sta $06
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0121, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0123, bytearray([0xA9, 0x7F])) # lda.b #!ow_tilemap_flags_top>>16
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0125, bytearray([0x85, 0x02])) # sta $02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0127, bytearray([0x85, 0x05])) # sta $05
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0129, bytearray([0x85, 0x08])) # sta $08
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x012B, bytearray([0xAF, 0xAB, 0xBF, 0x03])) # handle_blocksanity: lda.l blocksanity_enabled_flag
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x012F, bytearray([0xF0, 0x30])) # beq handle_bonus_blocks
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0131, bytearray([0xA6, 0x60])) # ldx $60
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0133, bytearray([0xA0, 0x1F])) # ldy.b #!icon_disabled
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0135, bytearray([0xBF, 0x00, 0xF4, 0x0F])) # lda.l level_data,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0139, bytearray([0x29, 0x40])) # and #$40
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x013B, bytearray([0xF0, 0x24])) # beq handle_bonus_blocks
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x013D, bytearray([0xA0, 0x5E])) # ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x013F, bytearray([0x5A])) # phy
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0140, bytearray([0x20, 0x80, 0xA3])) # jsr get_translevel_bit
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0143, bytearray([0xDA])) # phx
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0144, bytearray([0xBB])) # tyx
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0145, bytearray([0xBF, 0x10, 0xA0, 0x7F])) # lda.l !blocksanity_flags,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0149, bytearray([0xFA])) # plx
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x014A, bytearray([0x7A])) # ply
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x014B, bytearray([0x3F, 0xA6, 0xA8, 0x0D])) # and.l $0DA8A6,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x014F, bytearray([0xF0, 0x02])) # beq .write
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0151, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0153, bytearray([0x98])) # .write tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0154, bytearray([0x87, 0x06])) # sta [$06]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0156, bytearray([0xA9, 0x01])) # lda #$01
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0158, bytearray([0x87, 0x00])) # sta [$00]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x015A, bytearray([0xA9, 0x12])) # lda #$12
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x015C, bytearray([0x87, 0x03])) # sta [$03]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x015E, bytearray([0x20, 0xC0, 0xA3])) # jsr update_flag_pointers
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0161, bytearray([0xAF, 0xAA, 0xBF, 0x03])) # handle_bonus_blocks: lda.l bonus_block_enabled_flag
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0165, bytearray([0xF0, 0x30])) # beq handle_checkpoints
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0167, bytearray([0xA6, 0x60])) # ldx $60
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0169, bytearray([0xA0, 0x1F])) # ldy.b #!icon_disabled
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x016B, bytearray([0xBF, 0x00, 0xF4, 0x0F])) # lda.l level_data,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x016F, bytearray([0x29, 0x20])) # and #$20
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0171, bytearray([0xF0, 0x24])) # beq handle_checkpoints
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0173, bytearray([0xA0, 0x5E])) # ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0175, bytearray([0x5A])) # phy
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0176, bytearray([0x20, 0x80, 0xA3])) # jsr get_translevel_bit
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0179, bytearray([0xDA])) # phx
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x017A, bytearray([0xBB])) # tyx
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x017B, bytearray([0xBF, 0x00, 0xA0, 0x7F])) # lda !bonus_block_flags,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x017F, bytearray([0xFA])) # plx
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0180, bytearray([0x7A])) # ply
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0181, bytearray([0x3F, 0xA6, 0xA8, 0x0D])) # and.l $0DA8A6,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0185, bytearray([0xF0, 0x02])) # beq .write
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0187, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0189, bytearray([0x98])) # .write tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x018A, bytearray([0x87, 0x06])) # sta [$06]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x018C, bytearray([0xA9, 0x01])) # lda #$01
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x018E, bytearray([0x87, 0x00])) # sta [$00]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0190, bytearray([0xA9, 0x4E])) # lda #$4E
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0192, bytearray([0x87, 0x03])) # sta [$03]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0194, bytearray([0x20, 0xC0, 0xA3])) # jsr update_flag_pointers
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0197, bytearray([0xAF, 0xA9, 0xBF, 0x03])) # handle_checkpoints: lda.l checkpoints_enabled_flag
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x019B, bytearray([0xF0, 0x2A])) # beq handle_moons
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x019D, bytearray([0xA6, 0x60])) # ldx $60
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x019F, bytearray([0xBF, 0x00, 0xF4, 0x0F])) # lda.l level_data,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01A3, bytearray([0x29, 0x10])) # and #$10
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01A5, bytearray([0xF0, 0x20])) # beq handle_moons
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01A7, bytearray([0xA0, 0x5E])) # ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01A9, bytearray([0x5A])) # phy
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01AA, bytearray([0x20, 0x80, 0xA3])) # jsr get_translevel_bit
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01AD, bytearray([0xB9, 0x3C, 0x1F])) # lda !checkpoints_flags,y
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01B0, bytearray([0x7A])) # ply
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01B1, bytearray([0x3F, 0xA6, 0xA8, 0x0D])) # and.l $0DA8A6,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01B5, bytearray([0xF0, 0x02])) # beq .write
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01B7, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01B9, bytearray([0x98])) # .write tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01BA, bytearray([0x87, 0x06])) # sta [$06]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01BC, bytearray([0xA9, 0x07])) # lda #$07
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01BE, bytearray([0x87, 0x00])) # sta [$00]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01C0, bytearray([0xA9, 0x48])) # lda #$48
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01C2, bytearray([0x87, 0x03])) # sta [$03]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01C4, bytearray([0x20, 0xC0, 0xA3])) # jsr update_flag_pointers
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01C7, bytearray([0xAF, 0xA8, 0xBF, 0x03])) # handle_moons: lda.l moon_enabled_flag
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01CB, bytearray([0xF0, 0x2A])) # beq handle_dragon_coins
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01CD, bytearray([0xA6, 0x60])) # ldx $60
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01CF, bytearray([0xBF, 0x00, 0xF4, 0x0F])) # lda.l level_data,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01D3, bytearray([0x29, 0x08])) # and #$08
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01D5, bytearray([0xF0, 0x20])) # beq handle_dragon_coins
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01D7, bytearray([0xA0, 0x5E])) # ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01D9, bytearray([0x5A])) # phy
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01DA, bytearray([0x20, 0x80, 0xA3])) # jsr get_translevel_bit
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01DD, bytearray([0xB9, 0xEE, 0x1F])) # lda !moons_flags,y
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01E0, bytearray([0x7A])) # ply
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01E1, bytearray([0x3F, 0xA6, 0xA8, 0x0D])) # and.l $0DA8A6,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01E5, bytearray([0xF0, 0x02])) # beq .write
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01E7, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01E9, bytearray([0x98])) # .write tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01EA, bytearray([0x87, 0x06])) # sta [$06]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01EC, bytearray([0xA9, 0x0C])) # lda #$0C
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01EE, bytearray([0x87, 0x00])) # sta [$00]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01F0, bytearray([0xA9, 0x4E])) # lda #$4E
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01F2, bytearray([0x87, 0x03])) # sta [$03]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01F4, bytearray([0x20, 0xC0, 0xA3])) # jsr update_flag_pointers
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01F7, bytearray([0xAF, 0xA6, 0xBF, 0x03])) # handle_dragon_coins: lda.l dragon_coin_enabled_flag
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01FB, bytearray([0xF0, 0x2A])) # beq handle_exit_2
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01FD, bytearray([0xA6, 0x60])) # ldx $60
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x01FF, bytearray([0xBF, 0x00, 0xF4, 0x0F])) # lda.l level_data,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0203, bytearray([0x29, 0x04])) # and #$04
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0205, bytearray([0xF0, 0x20])) # beq handle_exit_2
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0207, bytearray([0xA0, 0x5E])) # ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0209, bytearray([0x5A])) # phy
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x020A, bytearray([0x20, 0x80, 0xA3])) # jsr get_translevel_bit
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x020D, bytearray([0xB9, 0x2F, 0x1F])) # lda !yoshi_coins_flags,y
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0210, bytearray([0x7A])) # ply
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0211, bytearray([0x3F, 0xA6, 0xA8, 0x0D])) # and.l $0DA8A6,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0215, bytearray([0xF0, 0x02])) # beq .write
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0217, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0219, bytearray([0x98])) # .write tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x021A, bytearray([0x87, 0x06])) # sta [$06]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x021C, bytearray([0xA9, 0x03])) # lda #$03
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x021E, bytearray([0x87, 0x00])) # sta [$00]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0220, bytearray([0xA9, 0x02])) # lda #$02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0222, bytearray([0x87, 0x03])) # sta [$03]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0224, bytearray([0x20, 0xC0, 0xA3])) # jsr update_flag_pointers
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0227, bytearray([0xA6, 0x60])) # handle_exit_2: ldx $60
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0229, bytearray([0xBF, 0x00, 0xF4, 0x0F])) # lda.l level_data,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x022D, bytearray([0x29, 0x02])) # and #$02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x022F, bytearray([0xF0, 0x1A])) # beq handle_exit_1
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0231, bytearray([0xA0, 0x5E])) # ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0233, bytearray([0xBF, 0x00, 0xA2, 0x7F])) # lda !level_clears,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0237, bytearray([0x29, 0x02])) # and #$02
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0239, bytearray([0xF0, 0x02])) # beq .write
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x023B, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x023D, bytearray([0x98])) # .write tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x023E, bytearray([0x87, 0x06])) # sta [$06]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0240, bytearray([0xA9, 0x04])) # lda #$04
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0242, bytearray([0x87, 0x00])) # sta [$00]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0244, bytearray([0xA9, 0x24])) # lda #$24
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0246, bytearray([0x87, 0x03])) # sta [$03]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0248, bytearray([0x20, 0xC0, 0xA3])) # jsr update_flag_pointers
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x024B, bytearray([0xA6, 0x60])) # handle_exit_1: ldx $60
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x024D, bytearray([0xBF, 0x00, 0xF4, 0x0F])) # lda.l level_data,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0251, bytearray([0x29, 0x01])) # and #$01
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0253, bytearray([0xF0, 0x1A])) # beq .dont_draw
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0255, bytearray([0xA0, 0x5E])) # ldy.b #!icon_not_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0257, bytearray([0xBF, 0x00, 0xA2, 0x7F])) # lda !level_clears,x
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x025B, bytearray([0x29, 0x01])) # and #$01
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x025D, bytearray([0xF0, 0x02])) # beq .write
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x025F, bytearray([0xA0, 0x3F])) # ldy.b #!icon_obtained
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0261, bytearray([0x98])) # .write tya
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0262, bytearray([0x87, 0x06])) # sta [$06]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0264, bytearray([0xA9, 0x04])) # lda #$04
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0266, bytearray([0x87, 0x00])) # sta [$00]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x0268, bytearray([0xA9, 0x23])) # lda #$23
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x026A, bytearray([0x87, 0x03])) # sta [$03]
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x026C, bytearray([0x20, 0xC0, 0xA3])) # jsr update_flag_pointers
+ rom.write_bytes(BUILD_TILEMAP_ADDR + 0x026F, bytearray([0x6B])) # .dont_draw rtl
+
+ LEVEL_INDICATOR_DATA_ADDR = 0x7F400
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0000, bytearray([0x80,0x45,0x45,0x80,0x43,0x65,0x5D,0x51]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0008, bytearray([0x01,0x47,0x47,0x51,0x65,0x45,0x41,0x4F]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0010, bytearray([0x55,0x45,0x80,0x43,0x01,0x57,0x80,0x80]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0018, bytearray([0x45,0x80,0x51,0x41,0x45,0x45,0x80,0x41]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0020, bytearray([0x45,0x41,0x4D,0x67,0x57,0x41,0x55,0x65]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0028, bytearray([0x80,0x4D,0x45,0x55,0x80,0x47,0x4D,0x45]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0030, bytearray([0x80,0x80,0x80,0x43,0x55,0x41,0x80,0x45]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0038, bytearray([0x47,0x57,0x4D,0x41,0x47,0x55,0x47,0x01]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0040, bytearray([0x41,0x4F,0x43,0x47,0x47,0x01,0x45,0x57]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0048, bytearray([0x80,0x45,0x45,0x45,0x45,0x80,0x55,0x45]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0050, bytearray([0x45,0x45,0x80,0x80,0x43,0x80,0x43,0x80]))
+ rom.write_bytes(LEVEL_INDICATOR_DATA_ADDR + 0x0058, bytearray([0x07,0x43,0x43,0x80,0x80,0x80,0x80,0x80]))
+
+
+def handle_indicators(rom):
+ INDICATOR_QUEUE_CODE = 0x86000
+ rom.write_bytes(0x022E6, bytearray([0x22, 0x00, 0xE0, 0x10])) # org $00A2E6 : jsl gm14_hijack
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0000, bytearray([0xAD, 0x00, 0x01])) # gm14_hijack: lda $0100
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0003, bytearray([0xC9, 0x14])) # cmp #$14
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0005, bytearray([0xD0, 0x04])) # bne .invalid
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0007, bytearray([0xA5, 0x71])) # lda $71
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0009, bytearray([0xF0, 0x04])) # beq .valid
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x000B, bytearray([0x5C, 0xB1, 0x8A, 0x02])) # .invalid jml $028AB1
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x000F, bytearray([0xC2, 0x30])) # .valid rep #$30
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0011, bytearray([0xAF, 0x04, 0xB0, 0x7F])) # lda !score_sprite_add_1_coin
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0015, bytearray([0xF0, 0x03])) # beq .no_1_coin
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0017, bytearray([0x20, 0xC1, 0xE0])) # jsr add_1_coin
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x001A, bytearray([0xAF, 0x06, 0xB0, 0x7F])) # .no_1_coin lda !score_sprite_add_5_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x001E, bytearray([0xF0, 0x03])) # beq .no_5_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0020, bytearray([0x20, 0xDF, 0xE0])) # jsr add_5_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0023, bytearray([0xAF, 0x08, 0xB0, 0x7F])) # .no_5_coins lda !score_sprite_add_10_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0027, bytearray([0xF0, 0x03])) # beq .no_10_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0029, bytearray([0x20, 0xFD, 0xE0])) # jsr add_10_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x002C, bytearray([0xAF, 0x0A, 0xB0, 0x7F])) # .no_10_coins lda !score_sprite_add_15_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0030, bytearray([0xF0, 0x03])) # beq .no_15_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0032, bytearray([0x20, 0x1B, 0xE1])) # jsr add_15_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0035, bytearray([0xAF, 0x10, 0xB0, 0x7F])) # .no_15_coins lda !score_sprite_add_1up
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0039, bytearray([0xF0, 0x03])) # beq .no_1up
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x003B, bytearray([0x20, 0x39, 0xE1])) # jsr add_1up
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x003E, bytearray([0xAF, 0x0C, 0xB0, 0x7F])) # .no_1up lda !score_sprite_add_yoshi_egg
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0042, bytearray([0xF0, 0x03])) # beq .no_yoshi_egg
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0044, bytearray([0x20, 0x57, 0xE1])) # jsr add_yoshi_egg
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0047, bytearray([0xAF, 0x0E, 0xB0, 0x7F])) # .no_yoshi_egg lda !score_sprite_add_boss_token
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x004B, bytearray([0xF0, 0x03])) # beq .no_boss_token
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x004D, bytearray([0x20, 0xCF, 0xE1])) # jsr add_boss_token
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0050, bytearray([0xE2, 0x30])) # .no_boss_token sep #$30
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0052, bytearray([0x20, 0xED, 0xE1])) # jsr goal_sanity_check
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0055, bytearray([0x20, 0x5C, 0xE0])) # jsr score_sprite_queue
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0058, bytearray([0x5C, 0xB1, 0x8A, 0x02])) # jml $028AB1
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x005C, bytearray([0xAF, 0x20, 0xB0, 0x7F])) # score_sprite_queue: lda !score_sprite_queue_delay
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0060, bytearray([0xF0, 0x06])) # beq .spawn
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0062, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0063, bytearray([0x8F, 0x20, 0xB0, 0x7F])) # sta !score_sprite_queue_delay
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0067, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0068, bytearray([0xA9, 0x08])) # .spawn lda #$08
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x006A, bytearray([0x8F, 0x20, 0xB0, 0x7F])) # sta !score_sprite_queue_delay
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x006E, bytearray([0xC2, 0x30])) # rep #$30
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0070, bytearray([0xAF, 0x02, 0xB0, 0x7F])) # lda !score_sprite_index
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0074, bytearray([0xCF, 0x00, 0xB0, 0x7F])) # cmp !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0078, bytearray([0xD0, 0x03])) # bne .check_slots
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x007A, bytearray([0xE2, 0x30])) # sep #$30
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x007C, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x007D, bytearray([0xA0, 0x05, 0x00])) # .check_slots ldy #$0005
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0080, bytearray([0xB9, 0xE1, 0x16])) # ..loop lda !score_sprite_num,y
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0083, bytearray([0x29, 0xFF, 0x00])) # and #$00FF
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0086, bytearray([0xF0, 0x06])) # beq .found_free
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0088, bytearray([0x88])) # dey
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0089, bytearray([0x10, 0xF5])) # bpl ..loop
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x008B, bytearray([0xE2, 0x30])) # sep #$30
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x008D, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x008E, bytearray([0xAF, 0x02, 0xB0, 0x7F])) # .found_free lda !score_sprite_index
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0092, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0093, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0094, bytearray([0x8F, 0x02, 0xB0, 0x7F])) # sta !score_sprite_index
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0098, bytearray([0xBF, 0x22, 0xB0, 0x7F])) # lda !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x009C, bytearray([0xE2, 0x30])) # sep #$30
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x009E, bytearray([0x99, 0xE1, 0x16])) # sta !score_sprite_num,y
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00A1, bytearray([0xA5, 0x94])) # lda $94
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00A3, bytearray([0x99, 0xED, 0x16])) # sta !score_sprite_x_lo,y
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00A6, bytearray([0xA5, 0x95])) # lda $95
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00A8, bytearray([0x99, 0xF3, 0x16])) # sta !score_sprite_x_hi,y
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00AB, bytearray([0xA5, 0x96])) # lda $96
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00AD, bytearray([0x99, 0xE7, 0x16])) # sta !score_sprite_y_lo,y
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00B0, bytearray([0xA5, 0x97])) # lda $97
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00B2, bytearray([0x99, 0xF9, 0x16])) # sta !score_sprite_y_hi,y
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00B5, bytearray([0xA9, 0x30])) # lda #$30
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00B7, bytearray([0x99, 0xFF, 0x16])) # sta !score_sprite_timer,y
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00BA, bytearray([0xAD, 0xF9, 0x13])) # lda $13F9
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00BD, bytearray([0x99, 0x05, 0x17])) # sta !score_sprite_layer,y
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00C0, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00C1, bytearray([0xAF, 0x04, 0xB0, 0x7F])) # add_1_coin: lda !score_sprite_add_1_coin
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00C5, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00C6, bytearray([0x8F, 0x04, 0xB0, 0x7F])) # sta !score_sprite_add_1_coin
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00CA, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00CE, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00CF, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00D3, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00D4, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00D6, bytearray([0xA9, 0x11])) # lda #$11
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00D8, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00DC, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00DE, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00DF, bytearray([0xAF, 0x06, 0xB0, 0x7F])) # add_5_coins: lda !score_sprite_add_5_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00E3, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00E4, bytearray([0x8F, 0x06, 0xB0, 0x7F])) # sta !score_sprite_add_5_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00E8, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00EC, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00ED, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00F1, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00F2, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00F4, bytearray([0xA9, 0x12])) # lda #$12
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00F6, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00FA, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00FC, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x00FD, bytearray([0xAF, 0x08, 0xB0, 0x7F])) # add_10_coins: lda !score_sprite_add_10_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0101, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0102, bytearray([0x8F, 0x08, 0xB0, 0x7F])) # sta !score_sprite_add_10_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0106, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x010A, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x010B, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x010F, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0110, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0112, bytearray([0xA9, 0x13])) # lda #$13
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0114, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0118, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x011A, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x011B, bytearray([0xAF, 0x0A, 0xB0, 0x7F])) # add_15_coins: lda !score_sprite_add_15_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x011F, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0120, bytearray([0x8F, 0x0A, 0xB0, 0x7F])) # sta !score_sprite_add_15_coins
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0124, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0128, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0129, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x012D, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x012E, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0130, bytearray([0xA9, 0x14])) # lda #$14
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0132, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0136, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0138, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0139, bytearray([0xAF, 0x10, 0xB0, 0x7F])) # add_1up: lda !score_sprite_add_1up
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x013D, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x013E, bytearray([0x8F, 0x10, 0xB0, 0x7F])) # sta !score_sprite_add_1up
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0142, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0146, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0147, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x014B, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x014C, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x014E, bytearray([0xA9, 0x16])) # lda #$16
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0150, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0154, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0156, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0157, bytearray([0xAF, 0x0C, 0xB0, 0x7F])) # add_yoshi_egg: lda !score_sprite_add_yoshi_egg
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x015B, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x015C, bytearray([0x8F, 0x0C, 0xB0, 0x7F])) # sta !score_sprite_add_yoshi_egg
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0160, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0164, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0165, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0169, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x016A, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x016C, bytearray([0xA9, 0x15])) # lda #$15
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x016E, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0172, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0174, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0175, bytearray([0xAF, 0x12, 0xB0, 0x7F])) # add_mushroom: lda !score_sprite_add_mushroom
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0179, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x017A, bytearray([0x8F, 0x12, 0xB0, 0x7F])) # sta !score_sprite_add_mushroom
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x017E, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0182, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0183, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0187, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0188, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x018A, bytearray([0xA9, 0x17])) # lda #$17
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x018C, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0190, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0192, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0193, bytearray([0xAF, 0x14, 0xB0, 0x7F])) # add_flower: lda !score_sprite_add_flower
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0197, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0198, bytearray([0x8F, 0x14, 0xB0, 0x7F])) # sta !score_sprite_add_flower
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x019C, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01A0, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01A1, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01A5, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01A6, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01A8, bytearray([0xA9, 0x18])) # lda #$18
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01AA, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01AE, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01B0, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01B1, bytearray([0xAF, 0x16, 0xB0, 0x7F])) # add_feather: lda !score_sprite_add_feather
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01B5, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01B6, bytearray([0x8F, 0x16, 0xB0, 0x7F])) # sta !score_sprite_add_feather
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01BA, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01BE, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01BF, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01C3, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01C4, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01C6, bytearray([0xA9, 0x19])) # lda #$19
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01C8, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01CC, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01CE, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01CF, bytearray([0xAF, 0x0E, 0xB0, 0x7F])) # add_boss_token: lda !score_sprite_add_boss_token
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01D3, bytearray([0x3A])) # dec
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01D4, bytearray([0x8F, 0x0E, 0xB0, 0x7F])) # sta !score_sprite_add_boss_token
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01D8, bytearray([0xAF, 0x00, 0xB0, 0x7F])) # lda !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01DC, bytearray([0x1A])) # inc
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01DD, bytearray([0x8F, 0x00, 0xB0, 0x7F])) # sta !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01E1, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01E2, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01E4, bytearray([0xA9, 0x1A])) # lda #$1A
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01E6, bytearray([0x9F, 0x22, 0xB0, 0x7F])) # sta !score_sprite_queue,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01EA, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01EC, bytearray([0x60])) # rts
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01ED, bytearray([0xAF, 0xA0, 0xBF, 0x03])) # goal_sanity_check: lda $03BFA0
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01F1, bytearray([0x29, 0x01])) # and #$01
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01F3, bytearray([0x49, 0x01])) # eor #$01
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01F5, bytearray([0x0A])) # asl
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01F6, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01F8, bytearray([0xBF, 0x0C, 0xB0, 0x7F])) # lda !score_sprite_add_yoshi_egg,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01FC, bytearray([0xD0, 0x18])) # bne .return
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x01FE, bytearray([0xAF, 0x02, 0xB0, 0x7F])) # .check_queue lda !score_sprite_index
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0202, bytearray([0xCF, 0x00, 0xB0, 0x7F])) # cmp !score_sprite_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0206, bytearray([0xD0, 0x0E])) # bne .return
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0208, bytearray([0xE2, 0x20])) # .check_count sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x020A, bytearray([0xAF, 0x1E, 0xA0, 0x7F])) # lda !goal_item_count
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x020E, bytearray([0xDD, 0x24, 0x1F])) # cmp $1F24,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0211, bytearray([0xF0, 0x03])) # beq .return
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0213, bytearray([0x9D, 0x24, 0x1F])) # sta $1F24,x
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0216, bytearray([0xE2, 0x20])) # .return sep #$20
+ rom.write_bytes(INDICATOR_QUEUE_CODE + 0x0218, bytearray([0x60])) # rts
+
+ # Add code for indicators when receiving items during levels
+ INDICATOR_CODE = 0x84000
+ rom.write_bytes(0x12DBA, bytearray([0x5C, 0x00, 0xC0, 0x10])) # org $02ADBA : jsl score_sprites
+ rom.write_bytes(INDICATOR_CODE + 0x0000, bytearray([0xBD, 0xE1, 0x16])) # score_sprites: lda !score_sprite_num,x
+ rom.write_bytes(INDICATOR_CODE + 0x0003, bytearray([0xF0, 0x2D])) # beq .return
+ rom.write_bytes(INDICATOR_CODE + 0x0005, bytearray([0x8E, 0xE9, 0x15])) # stx $15E9
+ rom.write_bytes(INDICATOR_CODE + 0x0008, bytearray([0xC2, 0x30])) # rep #$30
+ rom.write_bytes(INDICATOR_CODE + 0x000A, bytearray([0x29, 0x1F, 0x00])) # and #$001F
+ rom.write_bytes(INDICATOR_CODE + 0x000D, bytearray([0x85, 0x00])) # sta $00
+ rom.write_bytes(INDICATOR_CODE + 0x000F, bytearray([0x0A])) # asl
+ rom.write_bytes(INDICATOR_CODE + 0x0010, bytearray([0x18])) # clc
+ rom.write_bytes(INDICATOR_CODE + 0x0011, bytearray([0x65, 0x00])) # adc $00
+ rom.write_bytes(INDICATOR_CODE + 0x0013, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_CODE + 0x0014, bytearray([0xBF, 0x37, 0xC0, 0x10])) # lda.l .pointers-3,x
+ rom.write_bytes(INDICATOR_CODE + 0x0018, bytearray([0x85, 0x00])) # sta $00
+ rom.write_bytes(INDICATOR_CODE + 0x001A, bytearray([0xE2, 0x30])) # sep #$30
+ rom.write_bytes(INDICATOR_CODE + 0x001C, bytearray([0xBF, 0x39, 0xC0, 0x10])) # lda.l .pointers-3+2,x
+ rom.write_bytes(INDICATOR_CODE + 0x0020, bytearray([0x85, 0x02])) # sta $02
+ rom.write_bytes(INDICATOR_CODE + 0x0022, bytearray([0xE2, 0x10])) # sep #$10
+ rom.write_bytes(INDICATOR_CODE + 0x0024, bytearray([0xAE, 0xE9, 0x15])) # ldx $15E9
+ rom.write_bytes(INDICATOR_CODE + 0x0027, bytearray([0x8B])) # phb
+ rom.write_bytes(INDICATOR_CODE + 0x0028, bytearray([0x48])) # pha
+ rom.write_bytes(INDICATOR_CODE + 0x0029, bytearray([0xAB])) # plb
+ rom.write_bytes(INDICATOR_CODE + 0x002A, bytearray([0x4B])) # phk
+ rom.write_bytes(INDICATOR_CODE + 0x002B, bytearray([0xF4, 0x30, 0xC0])) # pea.w .return_code-1
+ rom.write_bytes(INDICATOR_CODE + 0x002E, bytearray([0xDC, 0x00, 0x00])) # jml [$0000]
+ rom.write_bytes(INDICATOR_CODE + 0x0031, bytearray([0xAB])) # .return_code plb
+ rom.write_bytes(INDICATOR_CODE + 0x0032, bytearray([0x5C, 0xC5, 0xAD, 0x02])) # .return jml $02ADC5
+ rom.write_bytes(INDICATOR_CODE + 0x0036, bytearray([0x9E, 0xE1, 0x16])) # .kill stz !score_sprite_num,x
+ rom.write_bytes(INDICATOR_CODE + 0x0039, bytearray([0x6B])) # rtl
+ rom.write_bytes(INDICATOR_CODE + 0x003A, bytearray([0x97, 0xC0, 0x10])) # .pointers dl original_score_sprites ; 01 - 10 points
+ rom.write_bytes(INDICATOR_CODE + 0x003D, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 02 - 20 points
+ rom.write_bytes(INDICATOR_CODE + 0x0040, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 03 - 40 points
+ rom.write_bytes(INDICATOR_CODE + 0x0043, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 04 - 80 points
+ rom.write_bytes(INDICATOR_CODE + 0x0046, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 05 - 100 points
+ rom.write_bytes(INDICATOR_CODE + 0x0049, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 06 - 200 points
+ rom.write_bytes(INDICATOR_CODE + 0x004C, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 07 - 400 points
+ rom.write_bytes(INDICATOR_CODE + 0x004F, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 08 - 800 points
+ rom.write_bytes(INDICATOR_CODE + 0x0052, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 09 - 1000 points
+ rom.write_bytes(INDICATOR_CODE + 0x0055, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 0A - 2000 points
+ rom.write_bytes(INDICATOR_CODE + 0x0058, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 0B - 4000 points
+ rom.write_bytes(INDICATOR_CODE + 0x005B, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 0C - 8000 points
+ rom.write_bytes(INDICATOR_CODE + 0x005E, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 0D - 1-up
+ rom.write_bytes(INDICATOR_CODE + 0x0061, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 0E - 2-up
+ rom.write_bytes(INDICATOR_CODE + 0x0064, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 0F - 3-up
+ rom.write_bytes(INDICATOR_CODE + 0x0067, bytearray([0x97, 0xC0, 0x10])) # dl original_score_sprites ; 10 - 5-up
+ rom.write_bytes(INDICATOR_CODE + 0x006A, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 11 - 1 coin
+ rom.write_bytes(INDICATOR_CODE + 0x006D, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 12 - 5 coins
+ rom.write_bytes(INDICATOR_CODE + 0x0070, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 13 - 10 coins
+ rom.write_bytes(INDICATOR_CODE + 0x0073, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 14 - 15 coins
+ rom.write_bytes(INDICATOR_CODE + 0x0076, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 15 - Yoshi Egg
+ rom.write_bytes(INDICATOR_CODE + 0x0079, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 16 - 1up Mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x007C, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 17 - Mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x007F, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 18 - Flower
+ rom.write_bytes(INDICATOR_CODE + 0x0082, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 19 - Feather
+ rom.write_bytes(INDICATOR_CODE + 0x0085, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 1A - Boss token
+ rom.write_bytes(INDICATOR_CODE + 0x0088, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 1B -
+ rom.write_bytes(INDICATOR_CODE + 0x008B, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 1C -
+ rom.write_bytes(INDICATOR_CODE + 0x008E, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 1D -
+ rom.write_bytes(INDICATOR_CODE + 0x0091, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 1E -
+ rom.write_bytes(INDICATOR_CODE + 0x0094, bytearray([0xA7, 0xC0, 0x10])) # dl icon_score ; 1F -
+ rom.write_bytes(INDICATOR_CODE + 0x0097, bytearray([0xA9, 0x02])) # original_score_sprites: lda #$02
+ rom.write_bytes(INDICATOR_CODE + 0x0099, bytearray([0x48])) # pha
+ rom.write_bytes(INDICATOR_CODE + 0x009A, bytearray([0xAB])) # plb
+ rom.write_bytes(INDICATOR_CODE + 0x009B, bytearray([0x4B])) # phk
+ rom.write_bytes(INDICATOR_CODE + 0x009C, bytearray([0xF4, 0xA5, 0xC0])) # pea.w .jslrtsreturn-1
+ rom.write_bytes(INDICATOR_CODE + 0x009F, bytearray([0xF4, 0x88, 0xB8])) # pea.w $B889-1
+ rom.write_bytes(INDICATOR_CODE + 0x00A2, bytearray([0x5C, 0xC9, 0xAD, 0x02])) # jml $02ADC9
+ rom.write_bytes(INDICATOR_CODE + 0x00A6, bytearray([0x6B])) # .jslrtsreturn rtl
+ rom.write_bytes(INDICATOR_CODE + 0x00A7, bytearray([0xBD, 0xFF, 0x16])) # icon_score: lda !score_sprite_timer,x
+ rom.write_bytes(INDICATOR_CODE + 0x00AA, bytearray([0xD0, 0x04])) # bne .active
+ rom.write_bytes(INDICATOR_CODE + 0x00AC, bytearray([0x9E, 0xE1, 0x16])) # stz !score_sprite_num,x
+ rom.write_bytes(INDICATOR_CODE + 0x00AF, bytearray([0x6B])) # rtl
+ rom.write_bytes(INDICATOR_CODE + 0x00B0, bytearray([0xDE, 0xFF, 0x16])) # .active dec !score_sprite_timer,x
+ rom.write_bytes(INDICATOR_CODE + 0x00B3, bytearray([0xC9, 0x30])) # cmp #$30
+ rom.write_bytes(INDICATOR_CODE + 0x00B5, bytearray([0xD0, 0x14])) # bne .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x00B7, bytearray([0xBD, 0xE1, 0x16])) # lda !score_sprite_num,x
+ rom.write_bytes(INDICATOR_CODE + 0x00BA, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x00BB, bytearray([0xE9, 0x11])) # sbc #$11
+ rom.write_bytes(INDICATOR_CODE + 0x00BD, bytearray([0x0A])) # asl
+ rom.write_bytes(INDICATOR_CODE + 0x00BE, bytearray([0xA8])) # tay
+ rom.write_bytes(INDICATOR_CODE + 0x00BF, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_CODE + 0x00C1, bytearray([0xB9, 0x4B, 0xC2])) # lda .reward_ptrs,y
+ rom.write_bytes(INDICATOR_CODE + 0x00C4, bytearray([0x85, 0x00])) # sta $00
+ rom.write_bytes(INDICATOR_CODE + 0x00C6, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_CODE + 0x00C8, bytearray([0x6C, 0x00, 0x00])) # jmp ($0000)
+ rom.write_bytes(INDICATOR_CODE + 0x00CB, bytearray([0xBD, 0xFF, 0x16])) # .handle_movement lda !score_sprite_timer,x
+ rom.write_bytes(INDICATOR_CODE + 0x00CE, bytearray([0x4A])) # lsr
+ rom.write_bytes(INDICATOR_CODE + 0x00CF, bytearray([0x4A])) # lsr
+ rom.write_bytes(INDICATOR_CODE + 0x00D0, bytearray([0x4A])) # lsr
+ rom.write_bytes(INDICATOR_CODE + 0x00D1, bytearray([0x4A])) # lsr
+ rom.write_bytes(INDICATOR_CODE + 0x00D2, bytearray([0xA8])) # tay
+ rom.write_bytes(INDICATOR_CODE + 0x00D3, bytearray([0xA5, 0x13])) # lda $13
+ rom.write_bytes(INDICATOR_CODE + 0x00D5, bytearray([0x39, 0xF0, 0xC0])) # and .speed,y
+ rom.write_bytes(INDICATOR_CODE + 0x00D8, bytearray([0xD0, 0x14])) # bne ..skip_update
+ rom.write_bytes(INDICATOR_CODE + 0x00DA, bytearray([0xBD, 0xE7, 0x16])) # lda !score_sprite_y_lo,x
+ rom.write_bytes(INDICATOR_CODE + 0x00DD, bytearray([0xA8])) # tay
+ rom.write_bytes(INDICATOR_CODE + 0x00DE, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x00DF, bytearray([0xE5, 0x1C])) # sbc $1C
+ rom.write_bytes(INDICATOR_CODE + 0x00E1, bytearray([0xC9, 0x04])) # cmp #$04
+ rom.write_bytes(INDICATOR_CODE + 0x00E3, bytearray([0x90, 0x09])) # bcc ..skip_update
+ rom.write_bytes(INDICATOR_CODE + 0x00E5, bytearray([0xDE, 0xE7, 0x16])) # dec !score_sprite_y_lo,x
+ rom.write_bytes(INDICATOR_CODE + 0x00E8, bytearray([0x98])) # tya
+ rom.write_bytes(INDICATOR_CODE + 0x00E9, bytearray([0xD0, 0x03])) # bne ..skip_update
+ rom.write_bytes(INDICATOR_CODE + 0x00EB, bytearray([0xDE, 0xF9, 0x16])) # dec !score_sprite_y_hi,x
+ rom.write_bytes(INDICATOR_CODE + 0x00EE, bytearray([0x80, 0x05])) # ..skip_update bra .gfx
+ rom.write_bytes(INDICATOR_CODE + 0x00F0, bytearray([0x03, 0x01, 0x00, 0x00])) # .speed db $03,$01,$00,$00
+ rom.write_bytes(INDICATOR_CODE + 0x00F4, bytearray([0x6B])) # .return rtl
+ rom.write_bytes(INDICATOR_CODE + 0x00F5, bytearray([0xBD, 0x05, 0x17])) # .gfx lda !score_sprite_layer,x
+ rom.write_bytes(INDICATOR_CODE + 0x00F8, bytearray([0x0A])) # asl
+ rom.write_bytes(INDICATOR_CODE + 0x00F9, bytearray([0x0A])) # asl
+ rom.write_bytes(INDICATOR_CODE + 0x00FA, bytearray([0xA8])) # tay
+ rom.write_bytes(INDICATOR_CODE + 0x00FB, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_CODE + 0x00FD, bytearray([0xB9, 0x1C, 0x00])) # lda $001C,y
+ rom.write_bytes(INDICATOR_CODE + 0x0100, bytearray([0x85, 0x02])) # sta $02
+ rom.write_bytes(INDICATOR_CODE + 0x0102, bytearray([0xB9, 0x1A, 0x00])) # lda $001A,y
+ rom.write_bytes(INDICATOR_CODE + 0x0105, bytearray([0x85, 0x04])) # sta $04
+ rom.write_bytes(INDICATOR_CODE + 0x0107, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_CODE + 0x0109, bytearray([0xBD, 0xF3, 0x16])) # lda !score_sprite_x_hi,x
+ rom.write_bytes(INDICATOR_CODE + 0x010C, bytearray([0xEB])) # xba
+ rom.write_bytes(INDICATOR_CODE + 0x010D, bytearray([0xBD, 0xED, 0x16])) # lda !score_sprite_x_lo,x
+ rom.write_bytes(INDICATOR_CODE + 0x0110, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(INDICATOR_CODE + 0x0112, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x0113, bytearray([0xE5, 0x04])) # sbc $04
+ rom.write_bytes(INDICATOR_CODE + 0x0115, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x0116, bytearray([0xE9, 0x06, 0x00])) # sbc #$0006
+ rom.write_bytes(INDICATOR_CODE + 0x0119, bytearray([0xC9, 0xEA, 0x00])) # cmp #$00EA
+ rom.write_bytes(INDICATOR_CODE + 0x011C, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(INDICATOR_CODE + 0x011E, bytearray([0xB0, 0xD4])) # bcs .return
+ rom.write_bytes(INDICATOR_CODE + 0x0120, bytearray([0xBD, 0xE7, 0x16])) # lda !score_sprite_y_lo,x
+ rom.write_bytes(INDICATOR_CODE + 0x0123, bytearray([0xC5, 0x02])) # cmp $02
+ rom.write_bytes(INDICATOR_CODE + 0x0125, bytearray([0xBD, 0xF9, 0x16])) # lda !score_sprite_y_hi,x
+ rom.write_bytes(INDICATOR_CODE + 0x0128, bytearray([0xE5, 0x03])) # sbc $03
+ rom.write_bytes(INDICATOR_CODE + 0x012A, bytearray([0xD0, 0xC8])) # bne .return
+ rom.write_bytes(INDICATOR_CODE + 0x012C, bytearray([0xBF, 0x9E, 0xAD, 0x02])) # lda $02AD9E,x
+ rom.write_bytes(INDICATOR_CODE + 0x0130, bytearray([0xA8])) # tay
+ rom.write_bytes(INDICATOR_CODE + 0x0131, bytearray([0xBD, 0xE7, 0x16])) # lda !score_sprite_y_lo,x
+ rom.write_bytes(INDICATOR_CODE + 0x0134, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x0135, bytearray([0xE5, 0x02])) # sbc $02
+ rom.write_bytes(INDICATOR_CODE + 0x0137, bytearray([0x99, 0x01, 0x02])) # sta $0201,y
+ rom.write_bytes(INDICATOR_CODE + 0x013A, bytearray([0x99, 0x05, 0x02])) # sta $0205,y
+ rom.write_bytes(INDICATOR_CODE + 0x013D, bytearray([0xBD, 0xED, 0x16])) # lda !score_sprite_x_lo,x
+ rom.write_bytes(INDICATOR_CODE + 0x0140, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x0141, bytearray([0xE5, 0x04])) # sbc $04
+ rom.write_bytes(INDICATOR_CODE + 0x0143, bytearray([0x18])) # clc
+ rom.write_bytes(INDICATOR_CODE + 0x0144, bytearray([0x69, 0x09])) # adc #$09
+ rom.write_bytes(INDICATOR_CODE + 0x0146, bytearray([0x99, 0x00, 0x02])) # sta $0200,y
+ rom.write_bytes(INDICATOR_CODE + 0x0149, bytearray([0x18])) # clc
+ rom.write_bytes(INDICATOR_CODE + 0x014A, bytearray([0x69, 0x05])) # adc #$05
+ rom.write_bytes(INDICATOR_CODE + 0x014C, bytearray([0x99, 0x04, 0x02])) # sta $0204,y
+ rom.write_bytes(INDICATOR_CODE + 0x014F, bytearray([0xDA])) # phx
+ rom.write_bytes(INDICATOR_CODE + 0x0150, bytearray([0xBD, 0xE1, 0x16])) # lda !score_sprite_num,x
+ rom.write_bytes(INDICATOR_CODE + 0x0153, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x0154, bytearray([0xE9, 0x11])) # sbc #$11
+ rom.write_bytes(INDICATOR_CODE + 0x0156, bytearray([0x0A])) # asl
+ rom.write_bytes(INDICATOR_CODE + 0x0157, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_CODE + 0x0158, bytearray([0xBD, 0x09, 0xC2])) # lda ..num_tile+$00,x
+ rom.write_bytes(INDICATOR_CODE + 0x015B, bytearray([0x99, 0x02, 0x02])) # sta $0202,y
+ rom.write_bytes(INDICATOR_CODE + 0x015E, bytearray([0xBD, 0x0A, 0xC2])) # lda ..num_tile+$01,x
+ rom.write_bytes(INDICATOR_CODE + 0x0161, bytearray([0x99, 0x06, 0x02])) # sta $0206,y
+ rom.write_bytes(INDICATOR_CODE + 0x0164, bytearray([0xBD, 0x27, 0xC2])) # lda ..num_props+$00,x
+ rom.write_bytes(INDICATOR_CODE + 0x0167, bytearray([0x99, 0x03, 0x02])) # sta $0203,y
+ rom.write_bytes(INDICATOR_CODE + 0x016A, bytearray([0xBD, 0x28, 0xC2])) # lda ..num_props+$01,x
+ rom.write_bytes(INDICATOR_CODE + 0x016D, bytearray([0x99, 0x07, 0x02])) # sta $0207,y
+ rom.write_bytes(INDICATOR_CODE + 0x0170, bytearray([0xFA])) # plx
+ rom.write_bytes(INDICATOR_CODE + 0x0171, bytearray([0x98])) # tya
+ rom.write_bytes(INDICATOR_CODE + 0x0172, bytearray([0x4A])) # lsr
+ rom.write_bytes(INDICATOR_CODE + 0x0173, bytearray([0x4A])) # lsr
+ rom.write_bytes(INDICATOR_CODE + 0x0174, bytearray([0xA8])) # tay
+ rom.write_bytes(INDICATOR_CODE + 0x0175, bytearray([0xA9, 0x00])) # lda #$00
+ rom.write_bytes(INDICATOR_CODE + 0x0177, bytearray([0x99, 0x20, 0x04])) # sta $0420,y
+ rom.write_bytes(INDICATOR_CODE + 0x017A, bytearray([0x99, 0x21, 0x04])) # sta $0421,y
+ rom.write_bytes(INDICATOR_CODE + 0x017D, bytearray([0xBF, 0x45, 0xC2, 0x10])) # lda.l ..oam_2,x
+ rom.write_bytes(INDICATOR_CODE + 0x0181, bytearray([0xA8])) # tay
+ rom.write_bytes(INDICATOR_CODE + 0x0182, bytearray([0xBD, 0xE7, 0x16])) # lda !score_sprite_y_lo,x
+ rom.write_bytes(INDICATOR_CODE + 0x0185, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x0186, bytearray([0xE5, 0x02])) # sbc $02
+ rom.write_bytes(INDICATOR_CODE + 0x0188, bytearray([0x99, 0x01, 0x02])) # sta $0201,y
+ rom.write_bytes(INDICATOR_CODE + 0x018B, bytearray([0x99, 0x05, 0x02])) # sta $0205,y
+ rom.write_bytes(INDICATOR_CODE + 0x018E, bytearray([0xBD, 0xED, 0x16])) # lda !score_sprite_x_lo,x
+ rom.write_bytes(INDICATOR_CODE + 0x0191, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x0192, bytearray([0xE5, 0x04])) # sbc $04
+ rom.write_bytes(INDICATOR_CODE + 0x0194, bytearray([0xE9, 0x07])) # sbc #$07
+ rom.write_bytes(INDICATOR_CODE + 0x0196, bytearray([0x99, 0x00, 0x02])) # sta $0200,y
+ rom.write_bytes(INDICATOR_CODE + 0x0199, bytearray([0x18])) # clc
+ rom.write_bytes(INDICATOR_CODE + 0x019A, bytearray([0x69, 0x08])) # adc #$08
+ rom.write_bytes(INDICATOR_CODE + 0x019C, bytearray([0x99, 0x04, 0x02])) # sta $0204,y
+ rom.write_bytes(INDICATOR_CODE + 0x019F, bytearray([0xDA])) # phx
+ rom.write_bytes(INDICATOR_CODE + 0x01A0, bytearray([0xBD, 0xE1, 0x16])) # lda !score_sprite_num,x
+ rom.write_bytes(INDICATOR_CODE + 0x01A3, bytearray([0x38])) # sec
+ rom.write_bytes(INDICATOR_CODE + 0x01A4, bytearray([0xE9, 0x11])) # sbc #$11
+ rom.write_bytes(INDICATOR_CODE + 0x01A6, bytearray([0xAA])) # tax
+ rom.write_bytes(INDICATOR_CODE + 0x01A7, bytearray([0xBD, 0xCD, 0xC1])) # lda ..icon_tile,x
+ rom.write_bytes(INDICATOR_CODE + 0x01AA, bytearray([0x99, 0x02, 0x02])) # sta $0202,y
+ rom.write_bytes(INDICATOR_CODE + 0x01AD, bytearray([0xBD, 0xDC, 0xC1])) # lda ..icon_props,x
+ rom.write_bytes(INDICATOR_CODE + 0x01B0, bytearray([0x99, 0x03, 0x02])) # sta $0203,y
+ rom.write_bytes(INDICATOR_CODE + 0x01B3, bytearray([0xBD, 0xFA, 0xC1])) # lda ..plus_props,x
+ rom.write_bytes(INDICATOR_CODE + 0x01B6, bytearray([0x99, 0x07, 0x02])) # sta $0207,y
+ rom.write_bytes(INDICATOR_CODE + 0x01B9, bytearray([0xBD, 0xEB, 0xC1])) # lda ..plus_tile,x
+ rom.write_bytes(INDICATOR_CODE + 0x01BC, bytearray([0x99, 0x06, 0x02])) # sta $0206,y
+ rom.write_bytes(INDICATOR_CODE + 0x01BF, bytearray([0xFA])) # plx
+ rom.write_bytes(INDICATOR_CODE + 0x01C0, bytearray([0x98])) # tya
+ rom.write_bytes(INDICATOR_CODE + 0x01C1, bytearray([0x4A])) # lsr
+ rom.write_bytes(INDICATOR_CODE + 0x01C2, bytearray([0x4A])) # lsr
+ rom.write_bytes(INDICATOR_CODE + 0x01C3, bytearray([0xA8])) # tay
+ rom.write_bytes(INDICATOR_CODE + 0x01C4, bytearray([0xA9, 0x00])) # lda #$00
+ rom.write_bytes(INDICATOR_CODE + 0x01C6, bytearray([0x99, 0x20, 0x04])) # sta $0420,y
+ rom.write_bytes(INDICATOR_CODE + 0x01C9, bytearray([0x99, 0x21, 0x04])) # sta $0421,y
+ rom.write_bytes(INDICATOR_CODE + 0x01CC, bytearray([0x6B])) # rtl
+ rom.write_bytes(INDICATOR_CODE + 0x01CD, bytearray([0x1B])) # ..icon_tile db $1B ; 1 coin
+ rom.write_bytes(INDICATOR_CODE + 0x01CE, bytearray([0x1B])) # db $1B ; 5 coins
+ rom.write_bytes(INDICATOR_CODE + 0x01CF, bytearray([0x1B])) # db $1B ; 10 coins
+ rom.write_bytes(INDICATOR_CODE + 0x01D0, bytearray([0x1B])) # db $1B ; 15 coins
+ rom.write_bytes(INDICATOR_CODE + 0x01D1, bytearray([0x0A])) # db $0A ; yoshi egg
+ rom.write_bytes(INDICATOR_CODE + 0x01D2, bytearray([0x0B])) # db $0B ; 1up mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x01D3, bytearray([0x0B])) # db $0B ; mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x01D4, bytearray([0x7E])) # db $7E ; flower
+ rom.write_bytes(INDICATOR_CODE + 0x01D5, bytearray([0x7F])) # db $7F ; feather
+ rom.write_bytes(INDICATOR_CODE + 0x01D6, bytearray([0x38])) # db $38 ; boss token
+ rom.write_bytes(INDICATOR_CODE + 0x01D7, bytearray([0x5A])) # db $5A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01D8, bytearray([0x5A])) # db $5A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01D9, bytearray([0x5A])) # db $5A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01DA, bytearray([0x5A])) # db $5A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01DB, bytearray([0x0B])) # db $0B ;
+ rom.write_bytes(INDICATOR_CODE + 0x01DC, bytearray([0x34])) # ..icon_props db $34 ; coin
+ rom.write_bytes(INDICATOR_CODE + 0x01DD, bytearray([0x34])) # db $34 ; coin
+ rom.write_bytes(INDICATOR_CODE + 0x01DE, bytearray([0x34])) # db $34 ; coin
+ rom.write_bytes(INDICATOR_CODE + 0x01DF, bytearray([0x34])) # db $34 ; coin
+ rom.write_bytes(INDICATOR_CODE + 0x01E0, bytearray([0x3A])) # db $3A ; yoshi egg
+ rom.write_bytes(INDICATOR_CODE + 0x01E1, bytearray([0x3A])) # db $3A ; 1up mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x01E2, bytearray([0x38])) # db $38 ; mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x01E3, bytearray([0x3A])) # db $3A ; flower
+ rom.write_bytes(INDICATOR_CODE + 0x01E4, bytearray([0x34])) # db $34 ; feather
+ rom.write_bytes(INDICATOR_CODE + 0x01E5, bytearray([0x34])) # db $34 ; boss token
+ rom.write_bytes(INDICATOR_CODE + 0x01E6, bytearray([0x34])) # db $34 ;
+ rom.write_bytes(INDICATOR_CODE + 0x01E7, bytearray([0x3A])) # db $3A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01E8, bytearray([0x38])) # db $38 ;
+ rom.write_bytes(INDICATOR_CODE + 0x01E9, bytearray([0x36])) # db $36 ;
+ rom.write_bytes(INDICATOR_CODE + 0x01EA, bytearray([0x36])) # db $36 ;
+ rom.write_bytes(INDICATOR_CODE + 0x01EB, bytearray([0x1A])) # ..plus_tile db $1A ; 1 coin
+ rom.write_bytes(INDICATOR_CODE + 0x01EC, bytearray([0x1A])) # db $1A ; 3 coins
+ rom.write_bytes(INDICATOR_CODE + 0x01ED, bytearray([0x1A])) # db $1A ; 5 coins
+ rom.write_bytes(INDICATOR_CODE + 0x01EE, bytearray([0x1A])) # db $1A ; 10 coins
+ rom.write_bytes(INDICATOR_CODE + 0x01EF, bytearray([0x1A])) # db $1A ; yoshi egg
+ rom.write_bytes(INDICATOR_CODE + 0x01F0, bytearray([0x1A])) # db $1A ; 1up mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x01F1, bytearray([0x1A])) # db $1A ; mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x01F2, bytearray([0x1A])) # db $1A ; flower
+ rom.write_bytes(INDICATOR_CODE + 0x01F3, bytearray([0x1A])) # db $1A ; feather
+ rom.write_bytes(INDICATOR_CODE + 0x01F4, bytearray([0x1A])) # db $1A ; boss token
+ rom.write_bytes(INDICATOR_CODE + 0x01F5, bytearray([0x1A])) # db $1A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01F6, bytearray([0x1A])) # db $1A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01F7, bytearray([0x1A])) # db $1A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01F8, bytearray([0x1A])) # db $1A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01F9, bytearray([0x1A])) # db $1A ;
+ rom.write_bytes(INDICATOR_CODE + 0x01FA, bytearray([0x32])) # ..plus_props db $32 ; 1 coin
+ rom.write_bytes(INDICATOR_CODE + 0x01FB, bytearray([0x32])) # db $32 ; 5 coins
+ rom.write_bytes(INDICATOR_CODE + 0x01FC, bytearray([0x32])) # db $32 ; 10 coins
+ rom.write_bytes(INDICATOR_CODE + 0x01FD, bytearray([0x32])) # db $32 ; 50 coins
+ rom.write_bytes(INDICATOR_CODE + 0x01FE, bytearray([0x32])) # db $32 ; yoshi egg
+ rom.write_bytes(INDICATOR_CODE + 0x01FF, bytearray([0x32])) # db $32 ; 1up mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x0200, bytearray([0x32])) # db $32 ; mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x0201, bytearray([0x32])) # db $32 ; flower
+ rom.write_bytes(INDICATOR_CODE + 0x0202, bytearray([0x32])) # db $32 ; feather
+ rom.write_bytes(INDICATOR_CODE + 0x0203, bytearray([0x32])) # db $32 ; boss token
+ rom.write_bytes(INDICATOR_CODE + 0x0204, bytearray([0x32])) # db $32 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0205, bytearray([0x32])) # db $32 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0206, bytearray([0x32])) # db $32 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0207, bytearray([0x32])) # db $32 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0208, bytearray([0x32])) # db $32 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0209, bytearray([0x4B, 0x69])) # ..num_tile db $4B,$69 ; 1 coin
+ rom.write_bytes(INDICATOR_CODE + 0x020B, bytearray([0x5B, 0x69])) # db $5B,$69 ; 5 coins
+ rom.write_bytes(INDICATOR_CODE + 0x020D, bytearray([0x4B, 0x4A])) # db $4B,$4A ; 10 coins
+ rom.write_bytes(INDICATOR_CODE + 0x020F, bytearray([0x5B, 0x4A])) # db $4B,$5B ; 50 coins
+ rom.write_bytes(INDICATOR_CODE + 0x0211, bytearray([0x4B, 0x69])) # db $4B,$69 ; yoshi egg
+ rom.write_bytes(INDICATOR_CODE + 0x0213, bytearray([0x4B, 0x69])) # db $4B,$69 ; 1up mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x0215, bytearray([0x4B, 0x69])) # db $4B,$69 ; mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x0217, bytearray([0x4B, 0x69])) # db $4B,$69 ; flower
+ rom.write_bytes(INDICATOR_CODE + 0x0219, bytearray([0x4B, 0x69])) # db $4B,$69 ; feather
+ rom.write_bytes(INDICATOR_CODE + 0x021B, bytearray([0x4B, 0x69])) # db $4B,$69 ; boss token
+ rom.write_bytes(INDICATOR_CODE + 0x021D, bytearray([0x69, 0x69])) # db $69,$69 ;
+ rom.write_bytes(INDICATOR_CODE + 0x021F, bytearray([0x69, 0x69])) # db $69,$69 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0221, bytearray([0x69, 0x69])) # db $69,$69 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0223, bytearray([0x69, 0x69])) # db $69,$69 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0225, bytearray([0x69, 0x69])) # db $69,$69 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0227, bytearray([0x34, 0x34])) # ..num_props db $34,$34 ; 1 coin
+ rom.write_bytes(INDICATOR_CODE + 0x0229, bytearray([0x34, 0x34])) # db $34,$34 ; 5 coins
+ rom.write_bytes(INDICATOR_CODE + 0x022B, bytearray([0x34, 0x34])) # db $34,$34 ; 10 coins
+ rom.write_bytes(INDICATOR_CODE + 0x022D, bytearray([0x34, 0x34])) # db $34,$34 ; 50 coins
+ rom.write_bytes(INDICATOR_CODE + 0x022F, bytearray([0x34, 0x34])) # db $34,$34 ; yoshi egg
+ rom.write_bytes(INDICATOR_CODE + 0x0231, bytearray([0x34, 0x34])) # db $34,$34 ; 1up mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x0233, bytearray([0x34, 0x34])) # db $34,$34 ; mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x0235, bytearray([0x34, 0x34])) # db $34,$34 ; flower
+ rom.write_bytes(INDICATOR_CODE + 0x0237, bytearray([0x34, 0x34])) # db $34,$34 ; feather
+ rom.write_bytes(INDICATOR_CODE + 0x0239, bytearray([0x34, 0x34])) # db $34,$34 ; boss token
+ rom.write_bytes(INDICATOR_CODE + 0x023B, bytearray([0x34, 0x34])) # db $34,$34 ;
+ rom.write_bytes(INDICATOR_CODE + 0x023D, bytearray([0x34, 0x34])) # db $34,$34 ;
+ rom.write_bytes(INDICATOR_CODE + 0x023F, bytearray([0x34, 0x34])) # db $34,$34 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0241, bytearray([0x34, 0x34])) # db $34,$34 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0243, bytearray([0x34, 0x34])) # db $34,$34 ;
+ rom.write_bytes(INDICATOR_CODE + 0x0245, bytearray([0x50, 0x58, 0x60, 0x68, 0x70, 0x78]))# ..oam_2 db $50,$58,$60,$68,$70,$78
+ rom.write_bytes(INDICATOR_CODE + 0x024B, bytearray([0x69, 0xC2])) # .reward_ptrs dw .one_coin
+ rom.write_bytes(INDICATOR_CODE + 0x024D, bytearray([0x6D, 0xC2])) # dw .five_coins
+ rom.write_bytes(INDICATOR_CODE + 0x024F, bytearray([0x71, 0xC2])) # dw .ten_coins
+ rom.write_bytes(INDICATOR_CODE + 0x0251, bytearray([0x75, 0xC2])) # dw .fifty_coins
+ rom.write_bytes(INDICATOR_CODE + 0x0253, bytearray([0x8A, 0xC2])) # dw .yoshi_egg
+ rom.write_bytes(INDICATOR_CODE + 0x0255, bytearray([0xA7, 0xC2])) # dw .green_mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x0257, bytearray([0xAD, 0xC2])) # dw .mushroom
+ rom.write_bytes(INDICATOR_CODE + 0x0259, bytearray([0xAF, 0xC2])) # dw .flower
+ rom.write_bytes(INDICATOR_CODE + 0x025B, bytearray([0xB1, 0xC2])) # dw .shared_item
+ rom.write_bytes(INDICATOR_CODE + 0x025D, bytearray([0x9C, 0xC2])) # dw .boss_token
+ rom.write_bytes(INDICATOR_CODE + 0x025F, bytearray([0xCB, 0xC0])) # dw .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x0261, bytearray([0xCB, 0xC0])) # dw .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x0263, bytearray([0xCB, 0xC0])) # dw .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x0265, bytearray([0xCB, 0xC0])) # dw .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x0267, bytearray([0xCB, 0xC0])) # dw .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x0269, bytearray([0xA9, 0x01])) # .one_coin lda #$01
+ rom.write_bytes(INDICATOR_CODE + 0x026B, bytearray([0x80, 0x0A])) # bra .shared_coins
+ rom.write_bytes(INDICATOR_CODE + 0x026D, bytearray([0xA9, 0x05])) # .five_coins lda #$05
+ rom.write_bytes(INDICATOR_CODE + 0x026F, bytearray([0x80, 0x06])) # bra .shared_coins
+ rom.write_bytes(INDICATOR_CODE + 0x0271, bytearray([0xA9, 0x0A])) # .ten_coins lda #$0A
+ rom.write_bytes(INDICATOR_CODE + 0x0273, bytearray([0x80, 0x02])) # bra .shared_coins
+ rom.write_bytes(INDICATOR_CODE + 0x0275, bytearray([0xA9, 0x32])) # .fifty_coins lda #$32
+ rom.write_bytes(INDICATOR_CODE + 0x0277, bytearray([0x18])) # .shared_coins clc
+ rom.write_bytes(INDICATOR_CODE + 0x0278, bytearray([0x6D, 0xCC, 0x13])) # adc $13CC
+ rom.write_bytes(INDICATOR_CODE + 0x027B, bytearray([0x90, 0x02])) # bcc +
+ rom.write_bytes(INDICATOR_CODE + 0x027D, bytearray([0xA9, 0xFF])) # lda #$FF
+ rom.write_bytes(INDICATOR_CODE + 0x027F, bytearray([0x8D, 0xCC, 0x13])) # + sta $13CC
+ rom.write_bytes(INDICATOR_CODE + 0x0282, bytearray([0xA9, 0x01])) # lda #$01
+ rom.write_bytes(INDICATOR_CODE + 0x0284, bytearray([0x8D, 0xFC, 0x1D])) # sta $1DFC
+ rom.write_bytes(INDICATOR_CODE + 0x0287, bytearray([0x4C, 0xCB, 0xC0])) # jmp .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x028A, bytearray([0xAD, 0x24, 0x1F])) # .yoshi_egg lda $1F24
+ rom.write_bytes(INDICATOR_CODE + 0x028D, bytearray([0xC9, 0xFF])) # cmp #$FF
+ rom.write_bytes(INDICATOR_CODE + 0x028F, bytearray([0xF0, 0x03])) # beq ..nope
+ rom.write_bytes(INDICATOR_CODE + 0x0291, bytearray([0xEE, 0x24, 0x1F])) # inc $1F24
+ rom.write_bytes(INDICATOR_CODE + 0x0294, bytearray([0xA9, 0x1F])) # ..nope lda #$1F
+ rom.write_bytes(INDICATOR_CODE + 0x0296, bytearray([0x8D, 0xFC, 0x1D])) # sta $1DFC
+ rom.write_bytes(INDICATOR_CODE + 0x0299, bytearray([0x4C, 0xCB, 0xC0])) # jmp .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x029C, bytearray([0xEE, 0x26, 0x1F])) # .boss_token inc $1F26
+ rom.write_bytes(INDICATOR_CODE + 0x029F, bytearray([0xA9, 0x09])) # lda #$09
+ rom.write_bytes(INDICATOR_CODE + 0x02A1, bytearray([0x8D, 0xFC, 0x1D])) # sta $1DFC
+ rom.write_bytes(INDICATOR_CODE + 0x02A4, bytearray([0x4C, 0xCB, 0xC0])) # jmp .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x02A7, bytearray([0xEE, 0xE4, 0x18])) # .green_mushroom inc $18E4
+ rom.write_bytes(INDICATOR_CODE + 0x02AA, bytearray([0x4C, 0xCB, 0xC0])) # jmp .handle_movement
+ rom.write_bytes(INDICATOR_CODE + 0x02AD, bytearray([0x80, 0x02])) # .mushroom bra .shared_item
+ rom.write_bytes(INDICATOR_CODE + 0x02AF, bytearray([0x80, 0x00])) # .flower bra .shared_item
+ rom.write_bytes(INDICATOR_CODE + 0x02B1, bytearray([0xA9, 0x0B])) # .shared_item lda #$0B
+ rom.write_bytes(INDICATOR_CODE + 0x02B3, bytearray([0x8D, 0xFC, 0x1D])) # sta $1DFC
+ rom.write_bytes(INDICATOR_CODE + 0x02B6, bytearray([0x4C, 0xCB, 0xC0])) # jmp .handle_movement
+
+def handle_traps(rom):
+ TRAPS_CODE = 0x86C00
+ rom.write_bytes(0x022D8, bytearray([0x22, 0x00, 0xEC, 0x10])) # org $00A2D8 : jsl score_sprites
+ rom.write_bytes(TRAPS_CODE + 0x0000, bytearray([0xAD, 0x00, 0x01])) # handle_traps: lda $0100
+ rom.write_bytes(TRAPS_CODE + 0x0003, bytearray([0xC9, 0x14])) # cmp #$14
+ rom.write_bytes(TRAPS_CODE + 0x0005, bytearray([0xD0, 0x04])) # bne .invalid
+ rom.write_bytes(TRAPS_CODE + 0x0007, bytearray([0xA5, 0x71])) # lda $71
+ rom.write_bytes(TRAPS_CODE + 0x0009, bytearray([0xF0, 0x09])) # beq .valid
+ rom.write_bytes(TRAPS_CODE + 0x000B, bytearray([0xA9, 0xFF])) # .invalid lda #$FF
+ rom.write_bytes(TRAPS_CODE + 0x000D, bytearray([0x8D, 0x3C, 0x0F])) # sta !thwimp_index
+ rom.write_bytes(TRAPS_CODE + 0x0010, bytearray([0x5C, 0xBD, 0xE2, 0x00])) # jml $00E2BD
+ rom.write_bytes(TRAPS_CODE + 0x0014, bytearray([0xAD, 0xB4, 0x18])) # .valid lda !reverse_controls_trap
+ rom.write_bytes(TRAPS_CODE + 0x0017, bytearray([0xF0, 0x03])) # beq .no_reverse_controls
+ rom.write_bytes(TRAPS_CODE + 0x0019, bytearray([0x20, 0x2B, 0xEC])) # jsr reverse_controls_trap
+ rom.write_bytes(TRAPS_CODE + 0x001C, bytearray([0xAD, 0xB7, 0x18])) # .no_reverse_controls lda !thwimp_trap
+ rom.write_bytes(TRAPS_CODE + 0x001F, bytearray([0xF0, 0x03])) # beq .no_thwimp
+ rom.write_bytes(TRAPS_CODE + 0x0021, bytearray([0x20, 0x86, 0xEC])) # jsr spawn_thwimp
+ rom.write_bytes(TRAPS_CODE + 0x0024, bytearray([0x20, 0xCB, 0xEC])) # .no_thwimp jsr handle_thwimp
+ rom.write_bytes(TRAPS_CODE + 0x0027, bytearray([0x5C, 0xBD, 0xE2, 0x00])) # jml $00E2BD
+ rom.write_bytes(TRAPS_CODE + 0x002B, bytearray([0xA5, 0x15])) # reverse_controls_trap: lda $15
+ rom.write_bytes(TRAPS_CODE + 0x002D, bytearray([0x89, 0x03])) # bit #$03
+ rom.write_bytes(TRAPS_CODE + 0x002F, bytearray([0xF0, 0x04])) # beq ..no_swap_hold
+ rom.write_bytes(TRAPS_CODE + 0x0031, bytearray([0x49, 0x03])) # eor #$03
+ rom.write_bytes(TRAPS_CODE + 0x0033, bytearray([0x85, 0x15])) # sta $15
+ rom.write_bytes(TRAPS_CODE + 0x0035, bytearray([0xA5, 0x16])) # ..no_swap_hold lda $16
+ rom.write_bytes(TRAPS_CODE + 0x0037, bytearray([0x89, 0x03])) # bit #$03
+ rom.write_bytes(TRAPS_CODE + 0x0039, bytearray([0xF0, 0x04])) # beq ..no_swap_press
+ rom.write_bytes(TRAPS_CODE + 0x003B, bytearray([0x49, 0x03])) # eor #$03
+ rom.write_bytes(TRAPS_CODE + 0x003D, bytearray([0x85, 0x16])) # sta $16
+ rom.write_bytes(TRAPS_CODE + 0x003F, bytearray([0xA5, 0x15])) # .swap_up_and_down lda $15
+ rom.write_bytes(TRAPS_CODE + 0x0041, bytearray([0x89, 0x0C])) # bit #$0C
+ rom.write_bytes(TRAPS_CODE + 0x0043, bytearray([0xF0, 0x04])) # beq .no_swap_hold
+ rom.write_bytes(TRAPS_CODE + 0x0045, bytearray([0x49, 0x0C])) # eor #$0C
+ rom.write_bytes(TRAPS_CODE + 0x0047, bytearray([0x85, 0x15])) # sta $15
+ rom.write_bytes(TRAPS_CODE + 0x0049, bytearray([0xA5, 0x16])) # .no_swap_hold lda $16
+ rom.write_bytes(TRAPS_CODE + 0x004B, bytearray([0x89, 0x0C])) # bit #$0C
+ rom.write_bytes(TRAPS_CODE + 0x004D, bytearray([0xF0, 0x04])) # beq ..no_swap_press
+ rom.write_bytes(TRAPS_CODE + 0x004F, bytearray([0x49, 0x0C])) # eor #$0C
+ rom.write_bytes(TRAPS_CODE + 0x0051, bytearray([0x85, 0x16])) # sta $16
+ rom.write_bytes(TRAPS_CODE + 0x0053, bytearray([0xA5, 0x16])) # .swap_a_and_b lda $16
+ rom.write_bytes(TRAPS_CODE + 0x0055, bytearray([0x10, 0x0C])) # bpl ..no_swap_b
+ rom.write_bytes(TRAPS_CODE + 0x0057, bytearray([0x49, 0x80])) # eor #$80
+ rom.write_bytes(TRAPS_CODE + 0x0059, bytearray([0x85, 0x16])) # sta $16
+ rom.write_bytes(TRAPS_CODE + 0x005B, bytearray([0xA5, 0x18])) # lda $18
+ rom.write_bytes(TRAPS_CODE + 0x005D, bytearray([0x49, 0x80])) # eor #$80
+ rom.write_bytes(TRAPS_CODE + 0x005F, bytearray([0x85, 0x18])) # sta $18
+ rom.write_bytes(TRAPS_CODE + 0x0061, bytearray([0x80, 0x0E])) # bra .swap_l_and_r
+ rom.write_bytes(TRAPS_CODE + 0x0063, bytearray([0xA5, 0x18])) # ..no_swap_b lda $18
+ rom.write_bytes(TRAPS_CODE + 0x0065, bytearray([0x10, 0x0A])) # bpl .swap_l_and_r
+ rom.write_bytes(TRAPS_CODE + 0x0067, bytearray([0x49, 0x80])) # eor #$80
+ rom.write_bytes(TRAPS_CODE + 0x0069, bytearray([0x85, 0x18])) # sta $18
+ rom.write_bytes(TRAPS_CODE + 0x006B, bytearray([0xA5, 0x16])) # lda $16
+ rom.write_bytes(TRAPS_CODE + 0x006D, bytearray([0x49, 0x80])) # eor #$80
+ rom.write_bytes(TRAPS_CODE + 0x006F, bytearray([0x85, 0x16])) # sta $16
+ rom.write_bytes(TRAPS_CODE + 0x0071, bytearray([0xA5, 0x17])) # .swap_l_and_r lda $17
+ rom.write_bytes(TRAPS_CODE + 0x0073, bytearray([0x89, 0x30])) # bit #$30
+ rom.write_bytes(TRAPS_CODE + 0x0075, bytearray([0xF0, 0x04])) # beq ..no_swap_hold
+ rom.write_bytes(TRAPS_CODE + 0x0077, bytearray([0x49, 0x30])) # eor #$30
+ rom.write_bytes(TRAPS_CODE + 0x0079, bytearray([0x85, 0x17])) # sta $17
+ rom.write_bytes(TRAPS_CODE + 0x007B, bytearray([0xA5, 0x18])) # ..no_swap_hold lda $18
+ rom.write_bytes(TRAPS_CODE + 0x007D, bytearray([0x89, 0x30])) # bit #$30
+ rom.write_bytes(TRAPS_CODE + 0x007F, bytearray([0xF0, 0x04])) # beq ..no_swap_press
+ rom.write_bytes(TRAPS_CODE + 0x0081, bytearray([0x49, 0x30])) # eor #$30
+ rom.write_bytes(TRAPS_CODE + 0x0083, bytearray([0x85, 0x18])) # sta $18
+ rom.write_bytes(TRAPS_CODE + 0x0085, bytearray([0x60])) # ..no_swap_press rts
+ rom.write_bytes(TRAPS_CODE + 0x0086, bytearray([0xAE, 0x3C, 0x0F])) # spawn_thwimp: ldx !thwimp_index
+ rom.write_bytes(TRAPS_CODE + 0x0089, bytearray([0x10, 0x06])) # bpl .return
+ rom.write_bytes(TRAPS_CODE + 0x008B, bytearray([0x22, 0xE4, 0xA9, 0x02])) # jsl $02A9E4
+ rom.write_bytes(TRAPS_CODE + 0x008F, bytearray([0x10, 0x01])) # bpl .found
+ rom.write_bytes(TRAPS_CODE + 0x0091, bytearray([0x60])) # .return rts
+ rom.write_bytes(TRAPS_CODE + 0x0092, bytearray([0xBB])) # .found tyx
+ rom.write_bytes(TRAPS_CODE + 0x0093, bytearray([0x9C, 0xB7, 0x18])) # stz !thwimp_trap
+ rom.write_bytes(TRAPS_CODE + 0x0096, bytearray([0xA9, 0x10])) # lda #$10
+ rom.write_bytes(TRAPS_CODE + 0x0098, bytearray([0x8D, 0xF9, 0x1D])) # sta $1DF9
+ rom.write_bytes(TRAPS_CODE + 0x009B, bytearray([0xA9, 0x27])) # lda #$27
+ rom.write_bytes(TRAPS_CODE + 0x009D, bytearray([0x95, 0x9E])) # sta $9E,x
+ rom.write_bytes(TRAPS_CODE + 0x009F, bytearray([0xA9, 0x08])) # lda #$08
+ rom.write_bytes(TRAPS_CODE + 0x00A1, bytearray([0x9D, 0xC8, 0x14])) # sta $14C8,x
+ rom.write_bytes(TRAPS_CODE + 0x00A4, bytearray([0x22, 0xD2, 0xF7, 0x07])) # jsl $07F7D2
+ rom.write_bytes(TRAPS_CODE + 0x00A8, bytearray([0xA5, 0x94])) # lda $94
+ rom.write_bytes(TRAPS_CODE + 0x00AA, bytearray([0x95, 0xE4])) # sta $E4,x
+ rom.write_bytes(TRAPS_CODE + 0x00AC, bytearray([0xA5, 0x95])) # lda $95
+ rom.write_bytes(TRAPS_CODE + 0x00AE, bytearray([0x9D, 0xE0, 0x14])) # sta $14E0,x
+ rom.write_bytes(TRAPS_CODE + 0x00B1, bytearray([0xA5, 0x1C])) # lda $1C
+ rom.write_bytes(TRAPS_CODE + 0x00B3, bytearray([0x38])) # sec
+ rom.write_bytes(TRAPS_CODE + 0x00B4, bytearray([0xE9, 0x0F])) # sbc #$0F
+ rom.write_bytes(TRAPS_CODE + 0x00B6, bytearray([0x95, 0xD8])) # sta $D8,x
+ rom.write_bytes(TRAPS_CODE + 0x00B8, bytearray([0xA5, 0x1D])) # lda $1D
+ rom.write_bytes(TRAPS_CODE + 0x00BA, bytearray([0xE9, 0x00])) # sbc #$00
+ rom.write_bytes(TRAPS_CODE + 0x00BC, bytearray([0x9D, 0xD4, 0x14])) # sta $14D4,x
+ rom.write_bytes(TRAPS_CODE + 0x00BF, bytearray([0xBD, 0x86, 0x16])) # lda $1686,x
+ rom.write_bytes(TRAPS_CODE + 0x00C2, bytearray([0x09, 0x80])) # ora #$80
+ rom.write_bytes(TRAPS_CODE + 0x00C4, bytearray([0x9D, 0x86, 0x16])) # sta $1686,x
+ rom.write_bytes(TRAPS_CODE + 0x00C7, bytearray([0x8E, 0x3C, 0x0F])) # stx !thwimp_index
+ rom.write_bytes(TRAPS_CODE + 0x00CA, bytearray([0x60])) # rts
+ rom.write_bytes(TRAPS_CODE + 0x00CB, bytearray([0xAE, 0x3C, 0x0F])) # handle_thwimp: ldx !thwimp_index
+ rom.write_bytes(TRAPS_CODE + 0x00CE, bytearray([0x30, 0x1C])) # bmi .return
+ rom.write_bytes(TRAPS_CODE + 0x00D0, bytearray([0xBD, 0xD4, 0x14])) # lda $14D4,x
+ rom.write_bytes(TRAPS_CODE + 0x00D3, bytearray([0xEB])) # xba
+ rom.write_bytes(TRAPS_CODE + 0x00D4, bytearray([0xB5, 0xD8])) # lda $D8,x
+ rom.write_bytes(TRAPS_CODE + 0x00D6, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(TRAPS_CODE + 0x00D8, bytearray([0x38])) # sec
+ rom.write_bytes(TRAPS_CODE + 0x00D9, bytearray([0xE5, 0x96])) # sbc $96
+ rom.write_bytes(TRAPS_CODE + 0x00DB, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(TRAPS_CODE + 0x00DD, bytearray([0x30, 0x0D])) # bmi .return
+ rom.write_bytes(TRAPS_CODE + 0x00DF, bytearray([0xA9, 0xFF])) # lda #$FF
+ rom.write_bytes(TRAPS_CODE + 0x00E1, bytearray([0x8D, 0x3C, 0x0F])) # sta !thwimp_index
+ rom.write_bytes(TRAPS_CODE + 0x00E4, bytearray([0xBD, 0x86, 0x16])) # lda $1686,x
+ rom.write_bytes(TRAPS_CODE + 0x00E7, bytearray([0x29, 0x7F])) # and #$7F
+ rom.write_bytes(TRAPS_CODE + 0x00E9, bytearray([0x9D, 0x86, 0x16])) # sta $1686,x
+ rom.write_bytes(TRAPS_CODE + 0x00EC, bytearray([0x60])) # .return rts
+
+
+
+def read_graphics_file(filename):
+ return pkgutil.get_data(__name__, f"data/graphics/{filename}")
+
+def handle_uncompressed_player_gfx(rom):
+ # Decompresses and moves into a expanded region the player, yoshi and animated graphics
+ # This should make swapping the graphics a lot easier.
+ # Maybe I should look into making a 32x32 version at some point...
+ # It also moves some 8x8 tiles in GFX00, thus making some free space for indicators and other stuff
+ # in VRAM during gameplay, will come super handy later.
+ #
+ # FOR FUTURE REFERENCE
+ # Player graphics are now located at 0xE0000
+ # Player auxiliary tiles are now located at 0xE6000
+ # Yoshi graphics are now located at 0xE8800
+ SMW_COMPRESSED_PLAYER_GFX = 0x40000
+ SMW_COMPRESSED_ANIMATED_GFX = 0x43FC0
+ SMW_COMPRESSED_GFX_00 = 0x459F9
+ SMW_COMPRESSED_GFX_10 = 0x4EF1E
+ SMW_COMPRESSED_GFX_28 = 0x5C06C
+ compressed_player_gfx = rom.read_bytes(SMW_COMPRESSED_PLAYER_GFX, 0x3FC0)
+ compressed_animated_gfx = rom.read_bytes(SMW_COMPRESSED_ANIMATED_GFX, 0x1A39)
+ compressed_gfx_00 = rom.read_bytes(SMW_COMPRESSED_GFX_00, 0x0838)
+ compressed_gfx_10 = rom.read_bytes(SMW_COMPRESSED_GFX_10, 0x0891)
+ compressed_gfx_28 = rom.read_bytes(SMW_COMPRESSED_GFX_28, 0x0637)
+ decompressed_player_gfx = decompress_gfx(compressed_player_gfx)
+ decompressed_animated_gfx = convert_3bpp(decompress_gfx(compressed_animated_gfx))
+ decompressed_gfx_00 = convert_3bpp(decompress_gfx(compressed_gfx_00))
+ decompressed_gfx_10 = convert_3bpp(decompress_gfx(compressed_gfx_10))
+ decompressed_gfx_28 = decompress_gfx(compressed_gfx_28)
+
+ # Copy berry tiles
+ order = [0x26C, 0x26D, 0x26E, 0x26F,
+ 0x27C, 0x27D, 0x27E, 0x27F,
+ 0x2E0, 0x2E1, 0x2E2, 0x2E3,
+ 0x2E4, 0x2E5, 0x2E6, 0x2E7]
+ decompressed_animated_gfx += copy_gfx_tiles(decompressed_player_gfx, order, [5, 32])
+
+ # Copy Mario's auxiliary tiles
+ order = [0x80, 0x91, 0x81, 0x90, 0x82, 0x83]
+ decompressed_gfx_00 += copy_gfx_tiles(decompressed_player_gfx, order, [5, 32])
+ order = [0x69, 0x69, 0x0C, 0x69, 0x1A, 0x1B, 0x0D, 0x69, 0x22, 0x23, 0x32, 0x33, 0x0A, 0x0B, 0x20, 0x21,
+ 0x30, 0x31, 0x7E, 0x69, 0x80, 0x4A, 0x81, 0x5B, 0x82, 0x4B, 0x83, 0x5A, 0x84, 0x69, 0x85, 0x85]
+ player_small_tiles = copy_gfx_tiles(decompressed_gfx_00, order, [5, 32])
+
+ # Copy OW mario tiles
+ order = [0x06, 0x07, 0x16, 0x17,
+ 0x08, 0x09, 0x18, 0x19,
+ 0x0A, 0x0B, 0x1A, 0x1B,
+ 0x0C, 0x0D, 0x1C, 0x1D,
+ 0x0E, 0x0F, 0x1E, 0x1F,
+ 0x20, 0x21, 0x30, 0x31,
+ 0x24, 0x25, 0x34, 0x35,
+ 0x46, 0x47, 0x56, 0x57,
+ 0x64, 0x65, 0x74, 0x75,
+ 0x66, 0x67, 0x76, 0x77,
+ 0x2E, 0x2F, 0x3E, 0x3F,
+ 0x40, 0x41, 0x50, 0x51,
+ 0x42, 0x43, 0x52, 0x53]
+ player_map_tiles = copy_gfx_tiles(decompressed_gfx_10, order, [5, 32])
+
+ # Copy HUD mario tiles
+ order = [0x30, 0x31, 0x32, 0x33, 0x34]
+ player_name_tiles = copy_gfx_tiles(decompressed_gfx_28, order, [4, 16])
+
+ rom.write_bytes(0xE0000, decompressed_player_gfx)
+ rom.write_bytes(0xE8000, decompressed_animated_gfx)
+ rom.write_bytes(0xE6000, player_small_tiles)
+ rom.write_bytes(0xE6400, player_map_tiles)
+ rom.write_bytes(0xE6C00, player_name_tiles)
+
+ # Skip Player & Animated tile decompression
+ rom.write_bytes(0x03888, bytearray([0x60])) # RTS
+
+ # Edit Mario DMA routine
+ MARIO_GFX_DMA_ADDR = 0x02300
+ rom.write_bytes(MARIO_GFX_DMA_ADDR + 0x0000, bytearray([0xA2, 0x04])) # LDX #$04
+ rom.write_bytes(MARIO_GFX_DMA_ADDR + 0x0002, bytearray([0x22, 0x00, 0xF0, 0x10])) # JSL $10F000 ; upload_score_sprite_gfx
+ rom.write_bytes(MARIO_GFX_DMA_ADDR + 0x0006, bytearray([0x22, 0x00, 0xF8, 0x0F])) # JSL $0FF800 ; player_code
+ rom.write_bytes(MARIO_GFX_DMA_ADDR + 0x000A, bytearray([0x60])) # RTS
+
+ PLAYER_UPLOAD_ADDR = 0x7F800
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0000, bytearray([0xC2, 0x20])) # player_code: rep #$20
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0002, bytearray([0xAC, 0x84, 0x0D])) # ldy $0D84
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0005, bytearray([0xD0, 0x03])) # bne .upload_player_palette
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0007, bytearray([0x4C, 0xD2, 0xF8])) # jmp .skip_everything
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x000A, bytearray([0xA0, 0x86])) # .upload_player_palette ldy #$86
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x000C, bytearray([0x8C, 0x21, 0x21])) # sty $2121
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x000F, bytearray([0xA9, 0x00, 0x22])) # lda #$2200
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0012, bytearray([0x8D, 0x20, 0x43])) # sta $4320
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0015, bytearray([0xA8])) # tay
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0016, bytearray([0xAD, 0x82, 0x0D])) # lda $0D82
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0019, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x001C, bytearray([0x8C, 0x24, 0x43])) # sty $4324
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x001F, bytearray([0xA9, 0x14, 0x00])) # lda #$0014
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0022, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0025, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0028, bytearray([0xA0, 0x80])) # ldy #$80
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x002A, bytearray([0x8C, 0x15, 0x21])) # sty $2115
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x002D, bytearray([0xA9, 0x01, 0x18])) # lda #$1801
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0030, bytearray([0x8D, 0x20, 0x43])) # sta $4320
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0033, bytearray([0xA0, 0x1C])) # ldy.b #player_gfx>>16
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0035, bytearray([0x8C, 0x24, 0x43])) # sty $4324
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0038, bytearray([0xA9, 0x00, 0x60])) # .upload_player_top lda #$6000
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x003B, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x003E, bytearray([0xA8])) # tay
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x003F, bytearray([0xB9, 0x85, 0x0D])) # - lda $0D85,y
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0042, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0045, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0048, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x004B, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x004E, bytearray([0xC8])) # iny
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x004F, bytearray([0xC8])) # iny
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0050, bytearray([0xC0, 0x06])) # cpy #$06
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0052, bytearray([0xD0, 0xEB])) # bne -
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0054, bytearray([0xA9, 0x00, 0x61])) # .upload_player_bottom lda #$6100
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0057, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x005A, bytearray([0xA8])) # tay
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x005B, bytearray([0xB9, 0x8F, 0x0D])) # - lda $0D8F,y
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x005E, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0061, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0064, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0067, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x006A, bytearray([0xC8])) # iny
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x006B, bytearray([0xC8])) # iny
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x006C, bytearray([0xC0, 0x06])) # cpy #$06
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x006E, bytearray([0xD0, 0xEB])) # bne -
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0070, bytearray([0xAC, 0x9B, 0x0D])) # .upload_player_extended ldy $0D9B
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0073, bytearray([0xC0, 0x02])) # cpy #$02
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0075, bytearray([0xF0, 0x5B])) # beq .skip_everything
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0077, bytearray([0xA9, 0xC0, 0x60])) # lda #$60C0
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x007A, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x007D, bytearray([0xAD, 0x99, 0x0D])) # lda $0D99
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0080, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0083, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0086, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0089, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x008C, bytearray([0xA0, 0x1D])) # .upload_misc_tiles ldy.b #animated_tiles>>16
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x008E, bytearray([0x8C, 0x24, 0x43])) # sty $4324
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0091, bytearray([0xA9, 0x60, 0x60])) # lda #$6060
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0094, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0097, bytearray([0xA0, 0x06])) # ldy #$06
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x0099, bytearray([0xCC, 0x84, 0x0D])) # cpy $0D84
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x009C, bytearray([0xB0, 0x34])) # bcs .skip_everything
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x009E, bytearray([0xB9, 0x85, 0x0D])) # - lda $0D85,y
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00A1, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00A4, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00A7, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00AA, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00AD, bytearray([0xC8])) # iny
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00AE, bytearray([0xC8])) # iny
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00AF, bytearray([0xCC, 0x84, 0x0D])) # cpy $0D84
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00B2, bytearray([0x90, 0xEA])) # bcc -
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00B4, bytearray([0xA9, 0x60, 0x61])) # lda #$6160
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00B7, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00BA, bytearray([0xA0, 0x06])) # ldy #$06
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00BC, bytearray([0xB9, 0x8F, 0x0D])) # - lda $0D8F,y
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00BF, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00C2, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00C5, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00C8, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00CB, bytearray([0xC8])) # iny
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00CC, bytearray([0xC8])) # iny
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00CD, bytearray([0xCC, 0x84, 0x0D])) # cpy $0D84
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00D0, bytearray([0x90, 0xEA])) # bcc -
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00D2, bytearray([0xE2, 0x20])) # .skip_everything sep #$20
+ rom.write_bytes(PLAYER_UPLOAD_ADDR + 0x00D4, bytearray([0x6B])) # rtl
+
+ # Obtain data for new 8x8 tile
+ CHAR_TILE_CODE_ADDR = 0x05FE2
+ rom.write_bytes(0x063B1, bytearray([0x20, 0xE2, 0xDF])) # jsr $DFE2
+ rom.write_bytes(CHAR_TILE_CODE_ADDR + 0x0000, bytearray([0xB9, 0x1A, 0xDF])) # lda $DF1A,y
+ rom.write_bytes(CHAR_TILE_CODE_ADDR + 0x0003, bytearray([0x10, 0x06])) # bpl $06
+ rom.write_bytes(CHAR_TILE_CODE_ADDR + 0x0005, bytearray([0x29, 0x7F])) # and #$7F
+ rom.write_bytes(CHAR_TILE_CODE_ADDR + 0x0007, bytearray([0x85, 0x0D])) # sta $0D
+ rom.write_bytes(CHAR_TILE_CODE_ADDR + 0x0009, bytearray([0xA9, 0x04])) # lda #$04
+ rom.write_bytes(CHAR_TILE_CODE_ADDR + 0x000B, bytearray([0x60])) # rts
+
+ rom.write_bytes(0x0640D, bytearray([0x20, 0xEE, 0xDF])) # jsr $DFEE
+ CAPE_TILE_CODE_ADDR = 0x05FEE
+ rom.write_bytes(CAPE_TILE_CODE_ADDR + 0x0000, bytearray([0xA5, 0x0D])) # lda $0D
+ rom.write_bytes(CAPE_TILE_CODE_ADDR + 0x0002, bytearray([0xE0, 0x2B])) # cpx #$2B
+ rom.write_bytes(CAPE_TILE_CODE_ADDR + 0x0004, bytearray([0x90, 0x07])) # bcc $07
+ rom.write_bytes(CAPE_TILE_CODE_ADDR + 0x0006, bytearray([0xE0, 0x40])) # cpx #$40
+ rom.write_bytes(CAPE_TILE_CODE_ADDR + 0x0008, bytearray([0xB0, 0x03])) # bcs $03
+ rom.write_bytes(CAPE_TILE_CODE_ADDR + 0x000A, bytearray([0xBD, 0xD7, 0xE1])) # lda $E1D7,x
+ rom.write_bytes(CAPE_TILE_CODE_ADDR + 0x000D, bytearray([0x60])) # rts
+
+ # Edit Mario's 8x8 tile data
+ MARIO_AUX_TILE_DATA_ADDR = 0x05F1A
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0000, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0008, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0010, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0018, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0020, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0028, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0030, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0038, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0040, bytearray([0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0048, bytearray([0x00,0x00,0x82,0x82,0x82,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0050, bytearray([0x00,0x00,0x84,0x00,0x00,0x00,0x00,0x86]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0058, bytearray([0x86,0x86,0x00,0x00,0x88,0x88,0x8A,0x8A]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0060, bytearray([0x8C,0x8C,0x00,0x00,0x90,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0068, bytearray([0x00,0x8E,0x00,0x00,0x00,0x00,0x92,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0070, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0078, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0080, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0088, bytearray([0x82,0x82,0x00,0x00,0x00,0x00,0x00,0x84]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0090, bytearray([0x00,0x00,0x00,0x00,0x86,0x86,0x86,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x0098, bytearray([0x00,0x88,0x88,0x8A,0x8A,0x8C,0x8C,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x00A0, bytearray([0x00,0x90,0x00,0x00,0x00,0x00,0x8E,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x00A8, bytearray([0x00,0x00,0x00,0x92,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x00B0, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+ rom.write_bytes(MARIO_AUX_TILE_DATA_ADDR + 0x00B8, bytearray([0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]))
+
+ MARIO_AUX_TILE_OFFSETS_ADDR = 0x05FDA # ends at $00E00C
+ rom.write_bytes(MARIO_AUX_TILE_OFFSETS_ADDR + 0x0000, bytearray([0x00,0x02,0x80,0x80,0x00,0x02,0x0C,0x0D]))
+ rom.write_bytes(MARIO_AUX_TILE_OFFSETS_ADDR + 0x0022, bytearray([0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x02]))
+ rom.write_bytes(MARIO_AUX_TILE_OFFSETS_ADDR + 0x002A, bytearray([0x02,0x80,0x04,0x0C,0x0D,0xFF,0xFF,0xFF]))
+
+ MARIO_AUX_CAPE_TILE_DATA_ADDR = 0x061FF
+ rom.write_bytes(MARIO_AUX_CAPE_TILE_DATA_ADDR + 0x0000, bytearray([0x00,0x8C,0x14,0x14,0x2E]))
+ rom.write_bytes(MARIO_AUX_CAPE_TILE_DATA_ADDR + 0x0005, bytearray([0x00,0xCA,0x16,0x16,0x2E]))
+ rom.write_bytes(MARIO_AUX_CAPE_TILE_DATA_ADDR + 0x000A, bytearray([0x00,0x8E,0x18,0x18,0x2E]))
+ rom.write_bytes(MARIO_AUX_CAPE_TILE_DATA_ADDR + 0x000F, bytearray([0x00,0xEB,0x1A,0x1A,0x2E]))
+ rom.write_bytes(MARIO_AUX_CAPE_TILE_DATA_ADDR + 0x0014, bytearray([0x04,0xED,0x1C,0x1C]))
+
+ # Edit player data offsets
+ rom.write_bytes(0x07649, bytearray([0x69, 0x00, 0x80])) # adc #$8000
+ rom.write_bytes(0x07667, bytearray([0x69, 0x00, 0x80])) # adc #$8000
+ rom.write_bytes(0x0767C, bytearray([0x69, 0x00, 0x80])) # adc #$8000
+ rom.write_bytes(0x07691, bytearray([0x69, 0x00, 0xE0])) # adc #$E000
+
+ # Fix berries
+ FIX_BERRIES_ADDR = 0x7FFE0
+ rom.write_bytes(FIX_BERRIES_ADDR + 0x0000, bytearray([0xA0, 0x1D])) # fix_berries: ldy.b #animated_tiles>>16
+ rom.write_bytes(FIX_BERRIES_ADDR + 0x0002, bytearray([0x8C, 0x24, 0x43])) # sty $4324
+ rom.write_bytes(FIX_BERRIES_ADDR + 0x0005, bytearray([0xAD, 0x76, 0x0D])) # lda $0D76
+ rom.write_bytes(FIX_BERRIES_ADDR + 0x0008, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(FIX_BERRIES_ADDR + 0x000B, bytearray([0x6B])) # rtl
+
+ # Fix animated graphics
+ rom.write_bytes(0x018D1, bytearray([0x1D])) # db $1D
+ rom.write_bytes(0x0239E, bytearray([0x1D])) # db $1D
+
+ rom.write_bytes(0x023F0, bytearray([0x22, 0xE0, 0xFF, 0x0F])) # jsl $0FFFE0
+ rom.write_bytes(0x023F4, bytearray([0xEA])) # nop
+ rom.write_bytes(0x023F5, bytearray([0xEA])) # nop
+
+ rom.write_bytes(0x0E1A8, bytearray([0x69, 0x00, 0x88])) # adc #$8800
+ rom.write_bytes(0x0EEB4, bytearray([0x69, 0x00, 0x88])) # adc #$8800
+ rom.write_bytes(0x0EEC9, bytearray([0x69, 0x00, 0x88])) # adc #$8800
+ rom.write_bytes(0x16A3E, bytearray([0x69, 0x00, 0x88])) # adc #$8800
+
+ ANIMATED_TILE_DATA_ADDR = 0x2B999
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0000, bytearray([0x00,0x98,0x00,0x9A,0x00,0x9C,0x00,0x9E]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0008, bytearray([0x80,0x98,0x80,0x9A,0x80,0x9C,0x80,0x9E]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0010, bytearray([0x00,0x99,0x00,0x99,0x00,0x99,0x00,0x99]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0018, bytearray([0x80,0xA0,0x80,0xA2,0x80,0xA4,0x80,0xA6]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0020, bytearray([0x00,0x99,0x00,0x9B,0x00,0x9D,0x00,0x9F]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0028, bytearray([0x00,0xB0,0x80,0xB0,0x00,0xB1,0x80,0xB1]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0030, bytearray([0x20,0xAF,0x20,0xAF,0x20,0xAF,0x20,0xAF]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0038, bytearray([0x20,0xAF,0x20,0xAF,0x20,0xAF,0x20,0xAF]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0040, bytearray([0x80,0x96,0x80,0x96,0x80,0x96,0x80,0x96]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0048, bytearray([0x00,0xA7,0x80,0xA7,0x00,0xA7,0x80,0xA7]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0050, bytearray([0x20,0xAF,0x20,0xAF,0x20,0xAF,0x20,0xAF]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0058, bytearray([0x00,0xAF,0x00,0xAF,0x00,0xAF,0x00,0xAF]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0060, bytearray([0x00,0x94,0x00,0x94,0x00,0x94,0x00,0x94]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0068, bytearray([0x80,0x99,0x80,0x9B,0x80,0x9D,0x80,0x9F]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0070, bytearray([0x00,0xA0,0x00,0xA2,0x00,0xA4,0x00,0xA6]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0078, bytearray([0x80,0x91,0x80,0x93,0x80,0x95,0x80,0x97]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0080, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0088, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0090, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0098, bytearray([0x00,0xA0,0x00,0xA2,0x00,0xA4,0x00,0xA6]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00A0, bytearray([0x80,0x91,0x80,0x93,0x80,0x95,0x80,0x97]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00A8, bytearray([0x00,0x80,0x00,0x82,0x00,0x84,0x00,0x86]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00B0, bytearray([0x00,0x86,0x00,0x84,0x00,0x82,0x00,0x80]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00B8, bytearray([0x00,0xA1,0x00,0xA3,0x00,0xA5,0x00,0xA3]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00C0, bytearray([0x00,0xA0,0x00,0xA2,0x00,0xA4,0x00,0xA6]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00C8, bytearray([0x00,0xA8,0x00,0xAA,0x00,0xAC,0x00,0xAE]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00D0, bytearray([0x80,0xA8,0x80,0xAA,0x80,0xAC,0x80,0xAE]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00D8, bytearray([0x80,0xAE,0x80,0xAC,0x80,0xAA,0x80,0xA8]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00E0, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00E8, bytearray([0x80,0xA1,0x80,0xA3,0x80,0xA5,0x80,0xA3]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00F0, bytearray([0x80,0x80,0x80,0x82,0x80,0x84,0x80,0x86]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x00F8, bytearray([0x00,0x81,0x00,0x83,0x00,0x85,0x00,0x87]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0100, bytearray([0x80,0x81,0x80,0x83,0x80,0x85,0x80,0x87]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0108, bytearray([0x80,0x86,0x80,0x84,0x80,0x82,0x80,0x80]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0110, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0118, bytearray([0x80,0xA9,0x80,0xAB,0x80,0xAD,0x80,0xAB]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0120, bytearray([0x00,0x91,0x00,0x93,0x00,0x95,0x00,0x97]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0128, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0130, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0138, bytearray([0x80,0xA1,0x80,0xA3,0x80,0xA5,0x80,0xA3]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0140, bytearray([0x00,0xA9,0x00,0xAB,0x00,0xAD,0x00,0xAB]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0148, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0150, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0158, bytearray([0x00,0x98,0x00,0x98,0x00,0x98,0x00,0x98]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0160, bytearray([0x80,0x94,0x80,0x94,0x80,0x94,0x80,0x94]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0168, bytearray([0x80,0x99,0x80,0x9B,0x80,0x9D,0x80,0x9F]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0170, bytearray([0x80,0x99,0x80,0x9B,0x80,0x9D,0x80,0x9F]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0178, bytearray([0x80,0x99,0x80,0x9B,0x80,0x9D,0x80,0x9F]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0180, bytearray([0x00,0x98,0x00,0x9A,0x00,0x9C,0x00,0x9E]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0188, bytearray([0x80,0xAF,0x80,0xAF,0x80,0xAF,0x80,0xAF]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0190, bytearray([0x00,0x96,0x00,0x96,0x00,0x96,0x00,0x96]))
+ rom.write_bytes(ANIMATED_TILE_DATA_ADDR + 0x0198, bytearray([0x80,0x96,0x80,0x96,0x80,0x96,0x80,0x96]))
+
+ # Insert hand drawn graphics for in level indicators
+ rom.write_bytes(0xE7000, read_graphics_file("indicators.bin"))
+ # Upload indicator GFX
+ UPLOAD_INDICATOR_GFX = 0x87000
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0000, bytearray([0xAD, 0x00, 0x01])) # upload_score_sprite_gfx: lda $0100
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0003, bytearray([0xC9, 0x13])) # cmp #$13
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0005, bytearray([0xF0, 0x03])) # beq .check_level
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0007, bytearray([0x4C, 0x9D, 0xF0])) # jmp .check_map
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x000A, bytearray([0xA5, 0x7C])) # .check_level lda $7C
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x000C, bytearray([0xF0, 0x03])) # beq ..perform
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x000E, bytearray([0x4C, 0x9C, 0xF0])) # jmp .skip
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0011, bytearray([0xE6, 0x7C])) # ..perform inc $7C
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0013, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0015, bytearray([0xA0, 0x80])) # ldy #$80
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0017, bytearray([0x8C, 0x15, 0x21])) # sty $2115
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x001A, bytearray([0xA9, 0x01, 0x18])) # lda #$1801
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x001D, bytearray([0x8D, 0x20, 0x43])) # sta $4320
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0020, bytearray([0xA0, 0x1C])) # ldy.b #$1C
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0022, bytearray([0x8C, 0x24, 0x43])) # sty $4324
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0025, bytearray([0xA9, 0x00, 0xF0])) # lda.w #$F000
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0028, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x002B, bytearray([0xA9, 0xA0, 0x64])) # .nums_01 lda #$64A0
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x002E, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0031, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0034, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0037, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x003A, bytearray([0xA9, 0xA0, 0x65])) # .nums_35 lda #$65A0
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x003D, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0040, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0043, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0046, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0049, bytearray([0xA9, 0xA0, 0x61])) # .plus_coin lda #$61A0
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x004C, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x004F, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0052, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0055, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0058, bytearray([0xA9, 0xA0, 0x60])) # .egg_mushroom lda #$60A0
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x005B, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x005E, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0061, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0064, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0067, bytearray([0xA9, 0xE0, 0x67])) # .thwimp lda #$67E0
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x006A, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x006D, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0070, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0073, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0076, bytearray([0xA9, 0x80, 0x63])) # .token lda #$6380
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0079, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x007C, bytearray([0xA9, 0x20, 0x00])) # lda #$0020
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x007F, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0082, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0085, bytearray([0xA9, 0x00, 0xEC])) # .layer_3 lda #$EC00
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0088, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x008B, bytearray([0xA9, 0x80, 0x41])) # lda #$4180
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x008E, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0091, bytearray([0xA9, 0x50, 0x00])) # lda #$0050
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0094, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0097, bytearray([0x8E, 0x0B, 0x42])) # stx $420B
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x009A, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x009C, bytearray([0x6B])) # .skip rtl
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x009D, bytearray([0xC9, 0x0E])) # .check_map cmp #$0E
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x009F, bytearray([0xF0, 0x51])) # beq .map_pal
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00A1, bytearray([0xC9, 0x0D])) # cmp #$0D
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00A3, bytearray([0xD0, 0xF7])) # bne .skip
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00A5, bytearray([0xA5, 0x7C])) # lda $7C
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00A7, bytearray([0xD0, 0xF3])) # bne .skip
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00A9, bytearray([0xE6, 0x7C])) # inc $7C
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00AB, bytearray([0xC2, 0x20])) # rep #$20
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00AD, bytearray([0xA0, 0x80])) # ldy #$80
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00AF, bytearray([0x8C, 0x15, 0x21])) # sty $2115
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00B2, bytearray([0xA9, 0x01, 0x18])) # lda #$1801
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00B5, bytearray([0x8D, 0x20, 0x43])) # sta $4320
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00B8, bytearray([0xA0, 0x1C])) # ldy.b #$1C
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00BA, bytearray([0x8C, 0x24, 0x43])) # sty $4324
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00BD, bytearray([0xA9, 0x00, 0xE4])) # lda.w #$E400
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00C0, bytearray([0x8D, 0x22, 0x43])) # sta $4322
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00C3, bytearray([0xDA])) # phx
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00C4, bytearray([0x9B])) # txy
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00C5, bytearray([0xA2, 0x18])) # ldx.b #(.map_targets_end-.map_targets-1)*2
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00C7, bytearray([0xA9, 0x40, 0x00])) # ..loop lda #$0040
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00CA, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00CD, bytearray([0xBF, 0x80, 0xFF, 0x10])) # lda.l .map_targets,x
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00D1, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00D4, bytearray([0x8C, 0x0B, 0x42])) # sty $420B
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00D7, bytearray([0xBF, 0x80, 0xFF, 0x10])) # lda.l .map_targets,x
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00DB, bytearray([0x18])) # clc
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00DC, bytearray([0x69, 0x00, 0x01])) # adc #$0100
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00DF, bytearray([0x8D, 0x16, 0x21])) # sta $2116
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00E2, bytearray([0xA9, 0x40, 0x00])) # lda #$0040
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00E5, bytearray([0x8D, 0x25, 0x43])) # sta $4325
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00E8, bytearray([0x8C, 0x0B, 0x42])) # sty $420B
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00EB, bytearray([0xCA])) # dex
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00EC, bytearray([0xCA])) # dex
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00ED, bytearray([0x10, 0xD8])) # bpl .loop
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00EF, bytearray([0xFA])) # plx
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00F0, bytearray([0xE2, 0x20])) # sep #$20
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00F2, bytearray([0xA9, 0xA3])) # .map_pal lda #$A3
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00F4, bytearray([0x8D, 0x21, 0x21])) # sta $2121
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00F7, bytearray([0xAF, 0x9C, 0xB5, 0x00])) # lda $00B59C
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00FB, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x00FE, bytearray([0xAF, 0x9D, 0xB5, 0x00])) # lda $00B59D
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0102, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0105, bytearray([0xAF, 0x9E, 0xB5, 0x00])) # lda $00B59E
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0109, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x010C, bytearray([0xAF, 0x9F, 0xB5, 0x00])) # lda $00B59F
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0110, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0113, bytearray([0xAF, 0xA0, 0xB5, 0x00])) # lda $00B5A0
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0117, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x011A, bytearray([0xAF, 0xA1, 0xB5, 0x00])) # lda $00B5A1
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x011E, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0121, bytearray([0xAF, 0xA2, 0xB5, 0x00])) # lda $00B5A2
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0125, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0128, bytearray([0xAF, 0xA3, 0xB5, 0x00])) # lda $00B5A3
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x012C, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x012F, bytearray([0xAF, 0xA4, 0xB5, 0x00])) # lda $00B5A4
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0133, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x0136, bytearray([0xAF, 0xA5, 0xB5, 0x00])) # lda $00B5A5
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x013A, bytearray([0x8D, 0x22, 0x21])) # sta $2122
+ rom.write_bytes(UPLOAD_INDICATOR_GFX + 0x013D, bytearray([0x6B])) # rtl
+
+ vram_targets = bytearray([
+ 0x20,0x64, 0x00,0x64, 0xE0,0x62,
+ 0x60,0x66, 0x40,0x66,
+ 0x60,0x64,
+ 0x40,0x62, 0x00,0x62,
+ 0xE0,0x60, 0xC0,0x60, 0xA0,0x60, 0x80,0x60, 0x60,0x60
+ ])
+ rom.write_bytes(0x87F80, vram_targets)
+
+def decompress_gfx(compressed_graphics):
+ # This code decompresses graphics in LC_LZ2 format in order to be able to swap player and yoshi's graphics with ease.
+ decompressed_gfx = bytearray([])
+ i = 0
+ while True:
+ cmd = compressed_graphics[i]
+ i += 1
+ if cmd == 0xFF:
+ break
+ else:
+ if (cmd >> 5) == 0x07:
+ size = ((cmd & 0x03) << 8) + compressed_graphics[i] + 1
+ cmd = (cmd & 0x1C) >> 2
+ i += 1
+ else:
+ size = (cmd & 0x1F) + 1
+ cmd = cmd >> 5
+ if cmd == 0x00:
+ decompressed_gfx += bytearray([compressed_graphics[i+j] for j in range(size)])
+ i += size
+ elif cmd == 0x01:
+ byte_fill = compressed_graphics[i]
+ i += 1
+ decompressed_gfx += bytearray([byte_fill for j in range(size)])
+ elif cmd == 0x02:
+ byte_fill_1 = compressed_graphics[i]
+ i += 1
+ byte_fill_2 = compressed_graphics[i]
+ i += 1
+ for j in range(size):
+ if (j & 0x1) == 0x00:
+ decompressed_gfx += bytearray([byte_fill_1])
+ else:
+ decompressed_gfx += bytearray([byte_fill_2])
+ elif cmd == 0x03:
+ byte_read = compressed_graphics[i]
+ i += 1
+ decompressed_gfx += bytearray([(byte_read + j) for j in range(size)])
+ elif cmd == 0x04:
+ position = (compressed_graphics[i] << 8) + compressed_graphics[i+1]
+ i += 2
+ for j in range(size):
+ copy_byte = decompressed_gfx[position+j]
+ decompressed_gfx += bytearray([copy_byte])
+ return decompressed_gfx
+
+
+def convert_3bpp(decompressed_gfx):
+ i = 0
+ converted_gfx = bytearray([])
+ while i < len(decompressed_gfx):
+ converted_gfx += bytearray([decompressed_gfx[i+j] for j in range(16)])
+ i += 16
+ for j in range(8):
+ converted_gfx += bytearray([decompressed_gfx[i]])
+ converted_gfx += bytearray([0x00])
+ i += 1
+ return converted_gfx
+
+
+def copy_gfx_tiles(original, order, size):
+ result = bytearray([])
+ for x in range(len(order)):
+ z = order[x] << size[0]
+ result += bytearray([original[z+y] for y in range(size[1])])
+ return result
+
+
+def file_to_bytes(filename):
+ return open(os.path.dirname(__file__)+filename, "rb").read()
+
+
+def handle_music_shuffle(rom, world: World):
from .Aesthetics import generate_shuffled_level_music, generate_shuffled_ow_music, level_music_address_data, ow_music_address_data
- shuffled_level_music = generate_shuffled_level_music(world, player)
+ shuffled_level_music = generate_shuffled_level_music(world)
for i in range(len(shuffled_level_music)):
rom.write_byte(level_music_address_data[i], shuffled_level_music[i])
- shuffled_ow_music = generate_shuffled_ow_music(world, player)
+ shuffled_ow_music = generate_shuffled_ow_music(world)
for i in range(len(shuffled_ow_music)):
for addr in ow_music_address_data[i]:
rom.write_byte(addr, shuffled_ow_music[i])
-def handle_mario_palette(rom, world, player):
+def handle_mario_palette(rom, world: World):
from .Aesthetics import mario_palettes, fire_mario_palettes, ow_mario_palettes
- chosen_palette = world.mario_palette[player].value
+ chosen_palette = world.options.mario_palette.value
rom.write_bytes(0x32C8, bytes(mario_palettes[chosen_palette]))
rom.write_bytes(0x32F0, bytes(fire_mario_palettes[chosen_palette]))
@@ -723,9 +2836,9 @@ def handle_swap_donut_gh_exits(rom):
rom.write_bytes(0x26371, bytes([0x32]))
-def handle_bowser_rooms(rom, world, player: int):
- if world.bowser_castle_rooms[player] == "random_two_room":
- chosen_rooms = world.per_slot_randoms[player].sample(standard_bowser_rooms, 2)
+def handle_bowser_rooms(rom, world: World):
+ if world.options.bowser_castle_rooms == "random_two_room":
+ chosen_rooms = world.random.sample(standard_bowser_rooms, 2)
rom.write_byte(0x3A680, chosen_rooms[0].roomID)
rom.write_byte(0x3A684, chosen_rooms[0].roomID)
@@ -737,8 +2850,8 @@ def handle_bowser_rooms(rom, world, player: int):
rom.write_byte(chosen_rooms[len(chosen_rooms)-1].exitAddress, 0xBD)
- elif world.bowser_castle_rooms[player] == "random_five_room":
- chosen_rooms = world.per_slot_randoms[player].sample(standard_bowser_rooms, 5)
+ elif world.options.bowser_castle_rooms == "random_five_room":
+ chosen_rooms = world.random.sample(standard_bowser_rooms, 5)
rom.write_byte(0x3A680, chosen_rooms[0].roomID)
rom.write_byte(0x3A684, chosen_rooms[0].roomID)
@@ -750,9 +2863,9 @@ def handle_bowser_rooms(rom, world, player: int):
rom.write_byte(chosen_rooms[len(chosen_rooms)-1].exitAddress, 0xBD)
- elif world.bowser_castle_rooms[player] == "gauntlet":
+ elif world.options.bowser_castle_rooms == "gauntlet":
chosen_rooms = standard_bowser_rooms.copy()
- world.per_slot_randoms[player].shuffle(chosen_rooms)
+ world.random.shuffle(chosen_rooms)
rom.write_byte(0x3A680, chosen_rooms[0].roomID)
rom.write_byte(0x3A684, chosen_rooms[0].roomID)
@@ -763,12 +2876,12 @@ def handle_bowser_rooms(rom, world, player: int):
rom.write_byte(chosen_rooms[i-1].exitAddress, chosen_rooms[i].roomID)
rom.write_byte(chosen_rooms[len(chosen_rooms)-1].exitAddress, 0xBD)
- elif world.bowser_castle_rooms[player] == "labyrinth":
+ elif world.options.bowser_castle_rooms == "labyrinth":
bowser_rooms_copy = full_bowser_rooms.copy()
entrance_point = bowser_rooms_copy.pop(0)
- world.per_slot_randoms[player].shuffle(bowser_rooms_copy)
+ world.random.shuffle(bowser_rooms_copy)
rom.write_byte(entrance_point.exitAddress, bowser_rooms_copy[0].roomID)
for i in range(0, len(bowser_rooms_copy) - 1):
@@ -777,13 +2890,13 @@ def handle_bowser_rooms(rom, world, player: int):
rom.write_byte(bowser_rooms_copy[len(bowser_rooms_copy)-1].exitAddress, 0xBD)
-def handle_boss_shuffle(rom, world, player):
- if world.boss_shuffle[player] == "simple":
+def handle_boss_shuffle(rom, world: World):
+ if world.options.boss_shuffle == "simple":
submap_boss_rooms_copy = submap_boss_rooms.copy()
ow_boss_rooms_copy = ow_boss_rooms.copy()
- world.per_slot_randoms[player].shuffle(submap_boss_rooms_copy)
- world.per_slot_randoms[player].shuffle(ow_boss_rooms_copy)
+ world.random.shuffle(submap_boss_rooms_copy)
+ world.random.shuffle(ow_boss_rooms_copy)
for i in range(len(submap_boss_rooms_copy)):
rom.write_byte(submap_boss_rooms[i].exitAddress, submap_boss_rooms_copy[i].roomID)
@@ -794,21 +2907,21 @@ def handle_boss_shuffle(rom, world, player):
if ow_boss_rooms[i].exitAddressAlt is not None:
rom.write_byte(ow_boss_rooms[i].exitAddressAlt, ow_boss_rooms_copy[i].roomID)
- elif world.boss_shuffle[player] == "full":
+ elif world.options.boss_shuffle == "full":
for i in range(len(submap_boss_rooms)):
- chosen_boss = world.per_slot_randoms[player].choice(submap_boss_rooms)
+ chosen_boss = world.random.choice(submap_boss_rooms)
rom.write_byte(submap_boss_rooms[i].exitAddress, chosen_boss.roomID)
for i in range(len(ow_boss_rooms)):
- chosen_boss = world.per_slot_randoms[player].choice(ow_boss_rooms)
+ chosen_boss = world.random.choice(ow_boss_rooms)
rom.write_byte(ow_boss_rooms[i].exitAddress, chosen_boss.roomID)
if ow_boss_rooms[i].exitAddressAlt is not None:
rom.write_byte(ow_boss_rooms[i].exitAddressAlt, chosen_boss.roomID)
- elif world.boss_shuffle[player] == "singularity":
- chosen_submap_boss = world.per_slot_randoms[player].choice(submap_boss_rooms)
- chosen_ow_boss = world.per_slot_randoms[player].choice(ow_boss_rooms)
+ elif world.options.boss_shuffle == "singularity":
+ chosen_submap_boss = world.random.choice(submap_boss_rooms)
+ chosen_ow_boss = world.random.choice(ow_boss_rooms)
for i in range(len(submap_boss_rooms)):
rom.write_byte(submap_boss_rooms[i].exitAddress, chosen_submap_boss.roomID)
@@ -820,8 +2933,8 @@ def handle_boss_shuffle(rom, world, player):
rom.write_byte(ow_boss_rooms[i].exitAddressAlt, chosen_ow_boss.roomID)
-def patch_rom(world, rom, player, active_level_dict):
- goal_text = generate_goal_text(world, player)
+def patch_rom(world: World, rom, player, active_level_dict):
+ goal_text = generate_goal_text(world)
rom.write_bytes(0x2A6E2, goal_text)
rom.write_byte(0x2B1D8, 0x80)
@@ -829,19 +2942,23 @@ def patch_rom(world, rom, player, active_level_dict):
intro_text = generate_text_box("Bowser has stolen all of Mario's abilities. Can you help Mario travel across Dinosaur land to get them back and save the Princess from him?")
rom.write_bytes(0x2A5D9, intro_text)
- handle_bowser_rooms(rom, world, player)
- handle_boss_shuffle(rom, world, player)
+ handle_bowser_rooms(rom, world)
+ handle_boss_shuffle(rom, world)
+
+ # Handle ROM expansion
+ rom.write_bytes(0x07FD7, bytearray([0x0A]))
+ rom.write_bytes(0x80000, bytearray([0x00 for _ in range(0x80000)]))
# Prevent Title Screen Deaths
rom.write_byte(0x1C6A, 0x80)
# Title Screen Text
player_name_bytes = bytearray()
- player_name = world.get_player_name(player)
+ player_name = world.multiworld.get_player_name(player)
for i in range(16):
char = " "
if i < len(player_name):
- char = world.get_player_name(player)[i]
+ char = player_name[i]
upper_char = char.upper()
if upper_char not in title_text_mapping:
for byte in title_text_mapping["."]:
@@ -869,33 +2986,58 @@ def patch_rom(world, rom, player, active_level_dict):
rom.write_bytes(0x2B88E, bytearray([0x2C, 0x31, 0x73, 0x31, 0x75, 0x31, 0x82, 0x30, 0x30, 0x31, 0xFC, 0x38, 0x31, 0x31, 0x73, 0x31,
0x73, 0x31, 0x7C, 0x30, 0xFC, 0x38, 0xFC, 0x38, 0xFC, 0x38])) # 1 Player Game
- rom.write_bytes(0x2B6D7, bytearray([0xFC, 0x38, 0xFC, 0x38, 0x16, 0x38, 0x18, 0x38, 0x0D, 0x38, 0xFC, 0x38, 0x0B, 0x38, 0x22, 0x38,
+ rom.write_bytes(0x2B6D7, bytearray([0x16, 0x38, 0x18, 0x38, 0x0D, 0x38, 0xFC, 0x38, 0x0B, 0x38, 0x22, 0x38,
0xFC, 0x38, 0x19, 0x38, 0x18, 0x38, 0x1B, 0x38, 0x22, 0x38, 0x10, 0x38, 0x18, 0x38, 0x17, 0x38,
- 0x0E, 0x38, 0xFC, 0x38, 0xFC, 0x38])) # Mod by PoryGone
+ 0x0E, 0x38, 0xFC, 0x38, 0x15, 0x38, 0x21, 0x38, 0x05, 0x38])) # Mod by PoryGone + lx5
# Title Options
rom.write_bytes(0x1E6A, bytearray([0x01]))
rom.write_bytes(0x1E6C, bytearray([0x01]))
rom.write_bytes(0x1E6E, bytearray([0x01]))
+ # Save current level number to RAM (not translevel)
+ rom.write_bytes(0x2D8B9, bytearray([0x20, 0x46, 0xDC])) # org $05D8B9 : jsr level_num
+ rom.write_bytes(0x2DC46 + 0x0000, bytearray([0xA5, 0x0E])) # level_num: lda $0E
+ rom.write_bytes(0x2DC46 + 0x0002, bytearray([0x8D, 0x0B, 0x01])) # sta $010B
+ rom.write_bytes(0x2DC46 + 0x0005, bytearray([0x0A])) # asl
+ rom.write_bytes(0x2DC46 + 0x0006, bytearray([0x60])) # rts
+
# Always allow Start+Select
rom.write_bytes(0x2267, bytearray([0xEA, 0xEA]))
# Always bring up save prompt on beating a level
- if world.autosave[player]:
+ if world.options.autosave:
rom.write_bytes(0x20F93, bytearray([0x00]))
- if world.overworld_speed[player] == "fast":
+ if world.options.overworld_speed == "fast":
rom.write_bytes(0x21414, bytearray([0x20, 0x10]))
- elif world.overworld_speed[player] == "slow":
+ elif world.options.overworld_speed == "slow":
rom.write_bytes(0x21414, bytearray([0x05, 0x05]))
# Starting Life Count
- rom.write_bytes(0x1E25, bytearray([world.starting_life_count[player].value - 1]))
+ rom.write_bytes(0x1E25, bytearray([world.options.starting_life_count.value - 1]))
# Repurpose Bonus Stars counter for Boss Token or Yoshi Eggs
rom.write_bytes(0x3F1AA, bytearray([0x00] * 0x20))
+ # Make bonus star counter go up to 255 (999 in theory, but can't load a 16-bit addr there)
+ rom.write_bytes(0x00F5B, bytearray([0x4C, 0x73, 0x8F]))
+ rom.write_byte(0x00F95, 0x08)
+ rom.write_byte(0x00F97, 0x0C)
+ rom.write_byte(0x00FAC, 0x02)
+ rom.write_byte(0x00F9E, 0x1D)
+ rom.write_byte(0x00FA5, 0x1D)
+ rom.write_byte(0x00FA8, 0x02)
+ rom.write_byte(0x00FB0, 0x1D)
+ rom.write_byte(0x00FB8, 0x02)
+ rom.write_byte(0x00FBE, 0x1D)
+ rom.write_byte(0x00FC2, 0x03)
+
+ # Move Dragon coins one spot to the left & fix tilemap
+ rom.write_byte(0x00FF0, 0xFE)
+ rom.write_byte(0x00C94, 0x3C)
+ rom.write_byte(0x00C9C, 0x38)
+
# Delete Routine that would copy Mario position data over repurposed Luigi save data
rom.write_bytes(0x20F9F, bytearray([0xEA] * 0x3D))
@@ -904,6 +3046,10 @@ def patch_rom(world, rom, player, active_level_dict):
rom.write_bytes(0x6EB1, bytearray([0xEA, 0xEA]))
rom.write_bytes(0x6EB4, bytearray([0xEA, 0xEA, 0xEA]))
+ # Move Thwimps tilemap to another spot in VRAM in order to make them global
+ rom.write_bytes(0x09C13, bytearray([0x7E, 0x7E, 0x7F, 0x7F]))
+ rom.write_byte(0x3F425, 0x32)
+
handle_ability_code(rom)
handle_yoshi_box(rom)
@@ -913,44 +3059,97 @@ def patch_rom(world, rom, player, active_level_dict):
handle_vertical_scroll(rom)
+ handle_ram(rom)
+ handle_bonus_block(rom)
+ handle_blocksanity(rom)
+
+ handle_uncompressed_player_gfx(rom)
+
+ # Handle Special Zone Clear flag
+ rom.write_bytes(0x02A74, bytearray([0x1E, 0x1F]))
+ rom.write_bytes(0x09826, bytearray([0x1E, 0x1F]))
+ rom.write_bytes(0x0B9CD, bytearray([0x1E, 0x1F]))
+ rom.write_bytes(0x12986, bytearray([0x1E, 0x1F]))
+ rom.write_bytes(0x62E0F, bytearray([0x1E, 0x1F]))
+
+ handle_indicators(rom)
+ handle_map_indicators(rom)
+
+ # Handle extra traps
+ handle_traps(rom)
+
+ # Mario Start! -> Player Start!
+ text_data_top_tiles = bytearray([
+ 0x00,0xFF,0x4D,0x4C,0x03,0x4D,0x5D,0xFF,0x4C,0x4B,
+ 0x4A,0x03,0x4E,0x01,0x00,0x02,0x00,0x4a,0x4E,0xFF
+ ])
+ text_data_top_props = bytearray([
+ 0x34,0x30,0x34,0x34,0x34,0x34,0x34,0x30,0x34,0x34,
+ 0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x34,0x30
+ ])
+ text_data_bottom_tiles = bytearray([
+ 0x10,0xFF,0x00,0x5C,0x13,0x00,0x5D,0xFF,0x5C,0x5B,
+ 0x00,0x13,0x5E,0x11,0x00,0x12,0x00,0x03,0x5E,0xFF
+ ])
+ text_data_bottom_props = bytearray([
+ 0x34,0x30,0xb4,0x34,0x34,0xb4,0xf4,0x30,0x34,0x34,
+ 0xB4,0x34,0x34,0x34,0xb4,0x34,0xb4,0xb4,0x34,0x30
+ ])
+
+ rom.write_bytes(0x010D1, text_data_top_tiles)
+ rom.write_bytes(0x01139, text_data_top_props)
+ rom.write_bytes(0x01105, text_data_bottom_tiles)
+ rom.write_bytes(0x0116A, text_data_bottom_props)
+
# Handle Level Shuffle
handle_level_shuffle(rom, active_level_dict)
# Handle Music Shuffle
- if world.music_shuffle[player] != "none":
- handle_music_shuffle(rom, world, player)
+ if world.options.music_shuffle != "none":
+ handle_music_shuffle(rom, world)
- generate_shuffled_ow_palettes(rom, world, player)
+ generate_shuffled_ow_palettes(rom, world)
- generate_shuffled_header_data(rom, world, player)
+ generate_shuffled_header_data(rom, world)
- if world.swap_donut_gh_exits[player]:
+ if world.options.level_palette_shuffle == "on_curated":
+ generate_curated_level_palette_data(rom, world)
+
+ if world.options.overworld_palette_shuffle == "on_curated":
+ generate_curated_map_palette_data(rom, world)
+
+ if world.options.sfx_shuffle != "none":
+ generate_shuffled_sfx(rom, world)
+
+ if world.options.swap_donut_gh_exits:
handle_swap_donut_gh_exits(rom)
- handle_mario_palette(rom, world, player)
+ handle_mario_palette(rom, world)
# Store all relevant option results in ROM
- rom.write_byte(0x01BFA0, world.goal[player].value)
- if world.goal[player].value == 0:
- rom.write_byte(0x01BFA1, world.bosses_required[player].value)
+ rom.write_byte(0x01BFA0, world.options.goal.value)
+ if world.options.goal.value == 0:
+ rom.write_byte(0x01BFA1, world.options.bosses_required.value)
else:
rom.write_byte(0x01BFA1, 0x7F)
- required_yoshi_eggs = max(math.floor(
- world.number_of_yoshi_eggs[player].value * (world.percentage_of_yoshi_eggs[player].value / 100.0)), 1)
+ required_yoshi_eggs = world.required_egg_count
rom.write_byte(0x01BFA2, required_yoshi_eggs)
- #rom.write_byte(0x01BFA3, world.display_sent_item_popups[player].value)
- rom.write_byte(0x01BFA4, world.display_received_item_popups[player].value)
- rom.write_byte(0x01BFA5, world.death_link[player].value)
- rom.write_byte(0x01BFA6, world.dragon_coin_checks[player].value)
- rom.write_byte(0x01BFA7, world.swap_donut_gh_exits[player].value)
+ #rom.write_byte(0x01BFA3, world.options.display_sent_item_popups.value)
+ rom.write_byte(0x01BFA4, world.options.display_received_item_popups.value)
+ rom.write_byte(0x01BFA5, world.options.death_link.value)
+ rom.write_byte(0x01BFA6, world.options.dragon_coin_checks.value)
+ rom.write_byte(0x01BFA7, world.options.swap_donut_gh_exits.value)
+ rom.write_byte(0x01BFA8, world.options.moon_checks.value)
+ rom.write_byte(0x01BFA9, world.options.hidden_1up_checks.value)
+ rom.write_byte(0x01BFAA, world.options.bonus_block_checks.value)
+ rom.write_byte(0x01BFAB, world.options.blocksanity.value)
from Utils import __version__
- rom.name = bytearray(f'SMW{__version__.replace(".", "")[0:3]}_{player}_{world.seed:11}\0', 'utf8')[:21]
+ rom.name = bytearray(f'SMW{__version__.replace(".", "")[0:3]}_{player}_{world.multiworld.seed:11}\0', 'utf8')[:21]
rom.name.extend([0] * (21 - len(rom.name)))
rom.write_bytes(0x7FC0, rom.name)
-
def get_base_rom_bytes(file_name: str = "") -> bytes:
base_rom_bytes = getattr(get_base_rom_bytes, "base_rom_bytes", None)
if not base_rom_bytes:
diff --git a/worlds/smw/Rules.py b/worlds/smw/Rules.py
index 82f22c3a34..a900b4fd20 100644
--- a/worlds/smw/Rules.py
+++ b/worlds/smw/Rules.py
@@ -2,19 +2,18 @@ import math
from BaseClasses import MultiWorld
from .Names import LocationName, ItemName
-from worlds.AutoWorld import LogicMixin
+from worlds.AutoWorld import World
from worlds.generic.Rules import add_rule, set_rule
-def set_rules(world: MultiWorld, player: int):
+def set_rules(world: World):
- if world.goal[player] == "yoshi_egg_hunt":
- required_yoshi_eggs = max(math.floor(
- world.number_of_yoshi_eggs[player].value * (world.percentage_of_yoshi_eggs[player].value / 100.0)), 1)
+ if world.options.goal == "yoshi_egg_hunt":
+ required_yoshi_eggs = world.required_egg_count
- add_rule(world.get_location(LocationName.yoshis_house, player),
- lambda state: state.has(ItemName.yoshi_egg, player, required_yoshi_eggs))
+ add_rule(world.multiworld.get_location(LocationName.yoshis_house, world.player),
+ lambda state: state.has(ItemName.yoshi_egg, world.player, required_yoshi_eggs))
else:
- add_rule(world.get_location(LocationName.bowser, player), lambda state: state.has(ItemName.mario_carry, player))
+ add_rule(world.multiworld.get_location(LocationName.bowser, world.player), lambda state: state.has(ItemName.mario_carry, world.player))
- world.completion_condition[player] = lambda state: state.has(ItemName.victory, player)
+ world.multiworld.completion_condition[world.player] = lambda state: state.has(ItemName.victory, world.player)
diff --git a/worlds/smw/__init__.py b/worlds/smw/__init__.py
index 431287c32b..1916108102 100644
--- a/worlds/smw/__init__.py
+++ b/worlds/smw/__init__.py
@@ -1,3 +1,4 @@
+import dataclasses
import os
import typing
import math
@@ -5,9 +6,9 @@ import settings
import threading
from BaseClasses import Item, MultiWorld, Tutorial, ItemClassification
-from .Items import SMWItem, ItemData, item_table
-from .Locations import SMWLocation, all_locations, setup_locations, special_zone_level_names, special_zone_dragon_coin_names
-from .Options import smw_options
+from .Items import SMWItem, ItemData, item_table, junk_table
+from .Locations import SMWLocation, all_locations, setup_locations, special_zone_level_names, special_zone_dragon_coin_names, special_zone_hidden_1up_names, special_zone_blocksanity_names
+from .Options import SMWOptions
from .Regions import create_regions, connect_regions
from .Levels import full_level_list, generate_level_list, location_id_to_level_id
from .Rules import set_rules
@@ -50,11 +51,14 @@ class SMWWorld(World):
lost all of his abilities. Can he get them back in time to save the Princess?
"""
game: str = "Super Mario World"
- option_definitions = smw_options
+
settings: typing.ClassVar[SMWSettings]
+
+ options_dataclass = SMWOptions
+ options: SMWOptions
+
topology_present = False
- data_version = 3
- required_client_version = (0, 3, 5)
+ required_client_version = (0, 4, 4)
item_name_to_id = {name: data.code for name, data in item_table.items()}
location_name_to_id = all_locations
@@ -62,9 +66,9 @@ class SMWWorld(World):
active_level_dict: typing.Dict[int,int]
web = SMWWeb()
- def __init__(self, world: MultiWorld, player: int):
+ def __init__(self, multiworld: MultiWorld, player: int):
self.rom_name_available_event = threading.Event()
- super().__init__(world, player)
+ super().__init__(multiworld, player)
@classmethod
def stage_assert_generate(cls, multiworld: MultiWorld):
@@ -72,37 +76,34 @@ class SMWWorld(World):
if not os.path.exists(rom_file):
raise FileNotFoundError(rom_file)
- def _get_slot_data(self):
- return {
- #"death_link": self.multiworld.death_link[self.player].value,
- "active_levels": self.active_level_dict,
- }
-
def fill_slot_data(self) -> dict:
- slot_data = self._get_slot_data()
- for option_name in smw_options:
- option = getattr(self.multiworld, option_name)[self.player]
- slot_data[option_name] = option.value
+ slot_data = self.options.as_dict(
+ "dragon_coin_checks",
+ "moon_checks",
+ "hidden_1up_checks",
+ "bonus_block_checks",
+ "blocksanity",
+ )
+ slot_data["active_levels"] = self.active_level_dict
return slot_data
def generate_early(self):
- if self.multiworld.early_climb[self.player]:
+ if self.options.early_climb:
self.multiworld.local_early_items[self.player][ItemName.mario_climb] = 1
-
def create_regions(self):
- location_table = setup_locations(self.multiworld, self.player)
- create_regions(self.multiworld, self.player, location_table)
+ location_table = setup_locations(self)
+ create_regions(self, location_table)
# Not generate basic
itempool: typing.List[SMWItem] = []
- self.active_level_dict = dict(zip(generate_level_list(self.multiworld, self.player), full_level_list))
- self.topology_present = self.multiworld.level_shuffle[self.player]
+ self.active_level_dict = dict(zip(generate_level_list(self), full_level_list))
+ self.topology_present = self.options.level_shuffle
+
+ connect_regions(self, self.active_level_dict)
- connect_regions(self.multiworld, self.player, self.active_level_dict)
-
# Add Boss Token amount requirements for Worlds
add_rule(self.multiworld.get_region(LocationName.donut_plains_1_tile, self.player).entrances[0], lambda state: state.has(ItemName.koopaling, self.player, 1))
add_rule(self.multiworld.get_region(LocationName.vanilla_dome_1_tile, self.player).entrances[0], lambda state: state.has(ItemName.koopaling, self.player, 2))
@@ -110,18 +111,29 @@ class SMWWorld(World):
add_rule(self.multiworld.get_region(LocationName.chocolate_island_1_tile, self.player).entrances[0], lambda state: state.has(ItemName.koopaling, self.player, 5))
add_rule(self.multiworld.get_region(LocationName.valley_of_bowser_1_tile, self.player).entrances[0], lambda state: state.has(ItemName.koopaling, self.player, 6))
- if self.multiworld.exclude_special_zone[self.player]:
- exclusion_pool = set()
- if self.multiworld.dragon_coin_checks[self.player]:
- exclusion_pool.update(special_zone_level_names)
+ exclusion_pool = set()
+ if self.options.exclude_special_zone:
+ exclusion_pool.update(special_zone_level_names)
+ if self.options.dragon_coin_checks:
exclusion_pool.update(special_zone_dragon_coin_names)
- elif self.multiworld.number_of_yoshi_eggs[self.player].value <= 72:
- exclusion_pool.update(special_zone_level_names)
+ if self.options.hidden_1up_checks:
+ exclusion_pool.update(special_zone_hidden_1up_names)
+ if self.options.blocksanity:
+ exclusion_pool.update(special_zone_blocksanity_names)
+
exclusion_rules(self.multiworld, self.player, exclusion_pool)
total_required_locations = 96
- if self.multiworld.dragon_coin_checks[self.player]:
+ if self.options.dragon_coin_checks:
total_required_locations += 49
+ if self.options.moon_checks:
+ total_required_locations += 7
+ if self.options.hidden_1up_checks:
+ total_required_locations += 14
+ if self.options.bonus_block_checks:
+ total_required_locations += 4
+ if self.options.blocksanity:
+ total_required_locations += 582
itempool += [self.create_item(ItemName.mario_run)]
itempool += [self.create_item(ItemName.mario_carry)]
@@ -137,31 +149,53 @@ class SMWWorld(World):
itempool += [self.create_item(ItemName.green_switch_palace)]
itempool += [self.create_item(ItemName.red_switch_palace)]
itempool += [self.create_item(ItemName.blue_switch_palace)]
+ itempool += [self.create_item(ItemName.special_world_clear)]
- if self.multiworld.goal[self.player] == "yoshi_egg_hunt":
- itempool += [self.create_item(ItemName.yoshi_egg)
- for _ in range(self.multiworld.number_of_yoshi_eggs[self.player])]
+ if self.options.goal == "yoshi_egg_hunt":
+ raw_egg_count = total_required_locations - len(itempool) - len(exclusion_pool)
+ total_egg_count = min(raw_egg_count, self.options.max_yoshi_egg_cap.value)
+ self.required_egg_count = max(math.floor(total_egg_count * (self.options.percentage_of_yoshi_eggs.value / 100.0)), 1)
+ extra_egg_count = total_egg_count - self.required_egg_count
+ removed_egg_count = math.floor(extra_egg_count * (self.options.junk_fill_percentage.value / 100.0))
+ self.actual_egg_count = total_egg_count - removed_egg_count
+
+ itempool += [self.create_item(ItemName.yoshi_egg) for _ in range(self.actual_egg_count)]
+
self.multiworld.get_location(LocationName.yoshis_house, self.player).place_locked_item(self.create_item(ItemName.victory))
else:
+ self.actual_egg_count = 0
+ self.required_egg_count = 0
+
self.multiworld.get_location(LocationName.bowser, self.player).place_locked_item(self.create_item(ItemName.victory))
junk_count = total_required_locations - len(itempool)
trap_weights = []
- trap_weights += ([ItemName.ice_trap] * self.multiworld.ice_trap_weight[self.player].value)
- trap_weights += ([ItemName.stun_trap] * self.multiworld.stun_trap_weight[self.player].value)
- trap_weights += ([ItemName.literature_trap] * self.multiworld.literature_trap_weight[self.player].value)
- trap_weights += ([ItemName.timer_trap] * self.multiworld.timer_trap_weight[self.player].value)
- trap_count = 0 if (len(trap_weights) == 0) else math.ceil(junk_count * (self.multiworld.trap_fill_percentage[self.player].value / 100.0))
+ trap_weights += ([ItemName.ice_trap] * self.options.ice_trap_weight.value)
+ trap_weights += ([ItemName.stun_trap] * self.options.stun_trap_weight.value)
+ trap_weights += ([ItemName.literature_trap] * self.options.literature_trap_weight.value)
+ trap_weights += ([ItemName.timer_trap] * self.options.timer_trap_weight.value)
+ trap_weights += ([ItemName.reverse_controls_trap] * self.options.reverse_trap_weight.value)
+ trap_weights += ([ItemName.thwimp_trap] * self.options.thwimp_trap_weight.value)
+ trap_count = 0 if (len(trap_weights) == 0) else math.ceil(junk_count * (self.options.trap_fill_percentage.value / 100.0))
junk_count -= trap_count
trap_pool = []
for i in range(trap_count):
- trap_item = self.multiworld.random.choice(trap_weights)
+ trap_item = self.random.choice(trap_weights)
trap_pool.append(self.create_item(trap_item))
itempool += trap_pool
- itempool += [self.create_item(ItemName.one_up_mushroom) for _ in range(junk_count)]
+ junk_weights = []
+ junk_weights += ([ItemName.one_coin] * 15)
+ junk_weights += ([ItemName.five_coins] * 15)
+ junk_weights += ([ItemName.ten_coins] * 25)
+ junk_weights += ([ItemName.fifty_coins] * 25)
+ junk_weights += ([ItemName.one_up_mushroom] * 20)
+
+ junk_pool = [self.create_item(self.random.choice(junk_weights)) for _ in range(junk_count)]
+
+ itempool += junk_pool
boss_location_names = [LocationName.yoshis_island_koopaling, LocationName.donut_plains_koopaling, LocationName.vanilla_dome_koopaling,
LocationName.twin_bridges_koopaling, LocationName.forest_koopaling, LocationName.chocolate_koopaling,
@@ -176,18 +210,18 @@ class SMWWorld(World):
def generate_output(self, output_directory: str):
rompath = "" # if variable is not declared finally clause may fail
try:
- world = self.multiworld
+ multiworld = self.multiworld
player = self.player
rom = LocalRom(get_base_rom_path())
- patch_rom(self.multiworld, rom, self.player, self.active_level_dict)
+ patch_rom(self, rom, self.player, self.active_level_dict)
rompath = os.path.join(output_directory, f"{self.multiworld.get_out_file_name_base(self.player)}.sfc")
rom.write_to_file(rompath)
self.rom_name = rom.name
patch = SMWDeltaPatch(os.path.splitext(rompath)[0]+SMWDeltaPatch.patch_file_ending, player=player,
- player_name=world.player_name[player], patched_path=rompath)
+ player_name=multiworld.player_name[player], patched_path=rompath)
patch.write()
except:
raise
@@ -243,7 +277,15 @@ class SMWWorld(World):
if level_index >= world_cutoffs[i]:
continue
- if self.multiworld.dragon_coin_checks[self.player].value == 0 and "Dragon Coins" in loc_name:
+ if not self.options.dragon_coin_checks and "Dragon Coins" in loc_name:
+ continue
+ if not self.options.moon_checks and "3-Up Moon" in loc_name:
+ continue
+ if not self.options.hidden_1up_checks and "Hidden 1-Up" in loc_name:
+ continue
+ if not self.options.bonus_block_checks and "1-Up from Bonus Block" in loc_name:
+ continue
+ if not self.options.blocksanity and "Block #" in loc_name:
continue
location = self.multiworld.get_location(loc_name, self.player)
@@ -271,7 +313,7 @@ class SMWWorld(World):
return created_item
def get_filler_item_name(self) -> str:
- return ItemName.one_up_mushroom
+ return self.random.choice(list(junk_table.keys()))
def set_rules(self):
- set_rules(self.multiworld, self.player)
+ set_rules(self)
diff --git a/worlds/smw/data/blocksanity.json b/worlds/smw/data/blocksanity.json
new file mode 100644
index 0000000000..e3737d2597
--- /dev/null
+++ b/worlds/smw/data/blocksanity.json
@@ -0,0 +1,747 @@
+{
+ "000_bonus": [],
+ "001_vanilla_secret_2": [
+ ["yoshi", "0170", "0130", []],
+ ["green", "02F0", "0170", ["greenswitch carry", "greenswitch cape"]],
+ ["power", "0660", "0110", []],
+ ["power", "0B70", "0100", []],
+ ["multi", "0DC0", "0120", []],
+ ["gray", "0E70", "0120", []],
+ ["single", "1180", "0130", []],
+ ["single", "1190", "0130", []],
+ ["single", "11A0", "0130", []],
+ ["single", "11B0", "0130", []],
+ ["single", "11C0", "0130", []],
+ ["single", "11D0", "0130", []]
+ ],
+ "002_vanilla_secret_3": [
+ ["power", "0270", "00D0", ["swim"]],
+ ["power", "06E0", "00E0", ["swim"]]
+ ],
+ "003_top_secret_area": [],
+ "004_donut_ghost_house": [
+ ["vine", "0120", "0120", []],
+ ["dir", "0070", "0140", ["pswitch"]],
+ ["life", "0610", "0140", ["run cape"]],
+ ["life", "0640", "0140", ["run cape"]],
+ ["life", "0670", "0140", ["run cape"]],
+ ["life", "06A0", "0140", ["run cape"]]
+ ],
+ "005_donut_plains_3": [
+ ["green", "01B0", "00E0", ["greenswitch"]],
+ ["single", "0450", "00F0", []],
+ ["single", "0480", "00F0", []],
+ ["vine", "04E0", "0130", ["mushroom spin"]],
+ ["power", "0BD0", "0140", []],
+ ["bonus", "1250", "00F0", []]
+ ],
+ "006_donut_plains_4": [
+ ["single", "0660", "0130", []],
+ ["power", "0670", "0130", []],
+ ["single", "0680", "0130", []],
+ ["yoshi", "0AF0", "0150", []]
+ ],
+ "007_donut_plains_castle": [
+ ["yellow", "01E0", "00C0", ["yellowswitch"]],
+ ["single", "00A0", "0680", []],
+ ["power", "00B0", "0680", []],
+ ["single", "00C0", "0680", []],
+ ["vine", "0050", "0450", []],
+ ["inlife", "0030", "0320", ["climb"]],
+ ["single", "0050", "0250", []],
+ ["single", "0080", "0250", []],
+ ["single", "00B0", "0250", []],
+ ["green", "0090", "0060", ["greenswitch"]]
+ ],
+ "008_green_switch_palace": [],
+ "009_donut_plains_2": [
+ ["single", "00D0", "0120", []],
+ ["single", "00E0", "0120", []],
+ ["single", "00F0", "0120", []],
+ ["yellow", "0100", "0120", ["yellowswitch"]],
+ ["power", "0330", "00D0", []],
+ ["multi", "03C0", "00C0", []],
+ ["fly", "0820", "00E0", []],
+ ["green", "0560", "00E0", ["greenswitch"]],
+ ["yellow", "0050", "0140", ["yellowswitch"]],
+ ["vine", "02B0", "00E0", ["carry spin mushroom", "yoshi"]]
+ ],
+ "00A_donut_secret_1": [
+ ["single", "02C0", "0130", ["swim"]],
+ ["single", "02D0", "0130", ["swim"]],
+ ["power", "02E0", "0130", ["swim"]],
+ ["single", "02F0", "0130", ["swim"]],
+ ["power", "00E0", "0480", ["swim"]],
+ ["power", "0060", "0250", ["swim balloon"]],
+ ["life", "0110", "0070", ["swim balloon"]],
+ ["power", "01A0", "0250", ["swim balloon"]],
+ ["power", "0570", "0150", ["swim"]],
+ ["key", "0940", "0150", ["swim carry pswitch"]]
+ ],
+ "00B_vanilla_fortress": [
+ ["power", "04E0", "0130", ["swim"]],
+ ["power", "0220", "0130", ["swim"]],
+ ["yellow", "0780", "0110", ["yellowswitch swim"]]
+ ],
+ "00C_butter_bridge_1": [
+ ["power", "08A0", "0110", []],
+ ["multi", "08B0", "00D0", []],
+ ["multi", "0860", "0090", []],
+ ["multi", "08E0", "0050", []],
+ ["life", "0840", "0050", []],
+ ["bonus", "0BD0", "0130", []]
+ ],
+ "00D_butter_bridge_2": [
+ ["power", "0310", "0100", ["carry"]],
+ ["green", "0AC0", "0120", ["greenswitch"]],
+ ["yoshi", "0C70", "0110", ["carry"]]
+ ],
+ "00E_twin_bridges_castle": [
+ ["power", "01B0", "0370", ["climb"]]
+ ],
+ "00F_cheese_bridge": [
+ ["power", "00C0", "0140", []],
+ ["power", "0560", "00E0", []],
+ ["wings", "0A10", "0140", []],
+ ["power", "0B60", "0150", []]
+ ],
+ "010_cookie_mountain": [
+ ["single", "01C0", "0130", []],
+ ["single", "01D0", "0130", []],
+ ["single", "01E0", "0130", []],
+ ["single", "01F0", "0130", []],
+ ["single", "0200", "0130", []],
+ ["single", "0210", "0130", []],
+ ["single", "0220", "0130", []],
+ ["single", "0230", "0130", []],
+ ["single", "0240", "0130", []],
+ ["power", "0200", "00F0", []],
+ ["life", "0A40", "0070", ["climb", "swim"]],
+ ["vine", "0B20", "0140", []],
+ ["yoshi", "0C40", "0140", ["redswitch"]],
+ ["single", "11C0", "0140", []],
+ ["single", "11D0", "0140", []],
+ ["power", "11E0", "0140", []],
+ ["single", "11F0", "0140", []],
+ ["single", "1200", "0140", []],
+ ["single", "1210", "0140", []],
+ ["single", "1220", "0140", []],
+ ["single", "1230", "0140", []],
+ ["single", "1240", "0140", []],
+ ["single", "1250", "0140", []],
+ ["single", "11B0", "0100", []],
+ ["single", "11C0", "0100", []],
+ ["single", "11D0", "0100", []],
+ ["single", "11E0", "0100", []],
+ ["single", "11F0", "0100", []],
+ ["single", "1200", "0100", []],
+ ["single", "1210", "0100", []],
+ ["single", "1220", "0100", []],
+ ["single", "1230", "0100", []],
+ ["single", "1240", "0100", []],
+ ["single", "1250", "0100", []],
+ ["single", "1360", "0140", []]
+ ],
+ "011_soda_lake": [
+ ["power", "0200", "0110", ["swim"]]
+ ],
+ "012_test": [],
+ "013_donut_secret_house": [
+ ["power", "0480", "0140", []],
+ ["multi", "0310", "0140", []],
+ ["life", "04A0", "0140", ["pswitch"]],
+ ["vine", "01E0", "0110", ["pswitch"]],
+ ["dir", "0180", "0130", ["pswitch"]]
+ ],
+ "014_yellow_switch_palace": [],
+ "015_donut_plains_1": [
+ ["single", "0710", "0140", []],
+ ["single", "0720", "0140", []],
+ ["yoshi", "0D20", "00F0", []],
+ ["vine", "0DB0", "0130", []],
+ ["green", "11A0", "0070", ["greenswitch cape"]],
+ ["green", "11A0", "0080", ["greenswitch cape"]],
+ ["green", "11A0", "0090", ["greenswitch cape"]],
+ ["green", "11A0", "00A0", ["greenswitch cape"]],
+ ["green", "11A0", "00B0", ["greenswitch cape"]],
+ ["green", "11A0", "00C0", ["greenswitch cape"]],
+ ["green", "11A0", "00D0", ["greenswitch cape"]],
+ ["green", "11A0", "00E0", ["greenswitch cape"]],
+ ["green", "11A0", "00F0", ["greenswitch cape"]],
+ ["green", "11A0", "0100", ["greenswitch cape"]],
+ ["green", "11A0", "0110", ["greenswitch cape"]],
+ ["green", "11A0", "0120", ["greenswitch cape"]],
+ ["green", "11A0", "0130", ["greenswitch cape"]],
+ ["green", "11A0", "0140", ["greenswitch cape"]],
+ ["green", "11A0", "0150", ["greenswitch cape"]],
+ ["green", "11A0", "0160", ["greenswitch cape"]],
+ ["yellow", "1240", "0120", ["yellowswitch"]],
+ ["yellow", "1280", "0140", ["yellowswitch"]],
+ ["yellow", "1290", "0140", ["yellowswitch"]]
+ ],
+ "016_test": [],
+ "017_test": [],
+ "018_sunken_ghost_ship": [
+ ["power", "0110", "0070", ["swim"]],
+ ["star", "0100", "0C80", ["swim"]]
+ ],
+ "019_test": [],
+ "01A_chocolate_castle": [
+ ["yellow", "09C0", "0110", ["yellowswitch"]],
+ ["yellow", "0150", "0110", ["yellowswitch"]],
+ ["green", "0750", "0140", ["greenswitch"]]
+ ],
+ "01B_chocolate_fortress": [
+ ["power", "0380", "0140", []],
+ ["power", "0360", "0150", []],
+ ["single", "0370", "0150", []],
+ ["single", "0380", "0150", []],
+ ["green", "0AC0", "0130", ["greenswitch"]]
+ ],
+ "01C_chocolate_island_5": [
+ ["yoshi", "0170", "0130", []],
+ ["power", "0180", "0150", []],
+ ["life", "0340", "0170", ["carry", "cape"]],
+ ["yellow", "0560", "0140", ["yellowswitch pswitch"]]
+ ],
+ "01D_chocolate_island_4": [
+ ["yellow", "0700", "0140", ["yellowswitch blueswitch"]],
+ ["pow", "0920", "00A0", []],
+ ["power", "0B50", "0040", []]
+ ],
+ "01E_test": [],
+ "01F_forest_fortress": [
+ ["yellow", "02B0", "00E0", ["yellowswitch"]],
+ ["power", "0750", "00D0", []],
+ ["life", "0ED0", "0140", ["run cape"]],
+ ["life", "0F10", "0140", ["run cape"]],
+ ["life", "0F10", "0100", ["run cape"]],
+ ["life", "0F40", "0130", ["run cape"]],
+ ["life", "0F70", "0140", ["run cape"]],
+ ["life", "0F70", "00F0", ["run cape"]],
+ ["life", "0FA0", "0130", ["run cape"]],
+ ["life", "0FD0", "0140", ["run cape"]],
+ ["life", "0FD0", "0100", ["run cape"]]
+ ],
+ "020_forest_castle": [
+ ["green", "0CC0", "0120", ["greenswitch"]]
+ ],
+ "021_chocolate_ghost_house": [
+ ["power", "0910", "0140", []],
+ ["power", "0110", "0140", []],
+ ["life", "05D0", "0140", []]
+ ],
+ "022_chocolate_island_1": [
+ ["fly", "0490", "0120", ["pswitch"]],
+ ["fly", "0CD0", "0100", ["pswitch"]],
+ ["yoshi", "0E10", "0110", ["pswitch"]],
+ ["green", "0F00", "0140", ["greenswitch blueswitch", "greenswitch cape", "yellowswitch blueswitch", "yellowswitch cape"]],
+ ["life", "0070", "0120", ["pswitch"]]
+ ],
+ "023_chocolate_island_3": [
+ ["power", "0530", "0140", []],
+ ["power", "0A20", "0140", []],
+ ["power", "0F50", "00F0", []],
+ ["green", "1080", "00F0", ["greenswitch"]],
+ ["bonus", "11D0", "0140", []],
+ ["vine", "1220", "0140", []],
+ ["life", "1640", "0140", ["run cape"]],
+ ["life", "1670", "0140", ["run cape"]],
+ ["life", "16A0", "0140", ["run cape"]]
+ ],
+ "024_chocolate_island_2": [
+ ["multi", "00E0", "00A0", []],
+ ["invis", "00F0", "00D0", []],
+ ["yoshi", "0280", "0040", []],
+ ["single", "0080", "0140", []],
+ ["single", "05C0", "0140", []],
+ ["multi" , "05F0", "0120", []],
+ ["power", "0620", "0100", []],
+ ["pow", "0040", "0140", []],
+ ["yellow", "0190", "0110", ["yellowswitch"]],
+ ["yellow", "01A0", "0110", ["yellowswitch"]],
+ ["green", "0240", "0110", ["greenswitch"]],
+ ["green", "0250", "0110", ["greenswitch"]],
+ ["green", "0260", "0110", ["greenswitch"]],
+ ["green", "0270", "0110", ["greenswitch"]],
+ ["green", "0280", "0110", ["greenswitch"]],
+ ["green", "0290", "0110", ["greenswitch"]]
+ ],
+ "101_yoshis_island_castle": [
+ ["single", "0280", "00F0", ["climb"]],
+ ["single", "0290", "00F0", ["climb"]],
+ ["power", "02A0", "00F0", ["climb"]],
+ ["single", "02B0", "00F0", ["climb"]],
+ ["single", "02C0", "00F0", ["climb"]],
+ ["fly", "0250", "0150", ["climb"]]
+ ],
+ "102_yoshis_island_4": [
+ ["yellow", "00D0", "00F0", ["yellowswitch"]],
+ ["power", "0160", "0140", []],
+ ["multi", "0290", "0140", []],
+ ["star", "04E0", "0120", []]
+ ],
+ "103_yoshis_island_3": [
+ ["yellow", "0250", "00C0", ["yellowswitch"]],
+ ["yellow", "0290", "0140", ["yellowswitch"]],
+ ["yellow", "02F0", "00E0", ["yellowswitch carry", "yellowswitch yoshi", "yellowswitch run cape"]],
+ ["yellow", "0300", "00E0", ["yellowswitch carry", "yellowswitch yoshi", "yellowswitch run cape"]],
+ ["yellow", "0310", "00E0", ["yellowswitch carry", "yellowswitch yoshi", "yellowswitch run cape"]],
+ ["yellow", "0320", "00E0", ["yellowswitch carry", "yellowswitch yoshi", "yellowswitch run cape"]],
+ ["yellow", "0330", "00E0", ["yellowswitch carry", "yellowswitch yoshi", "yellowswitch run cape"]],
+ ["yellow", "0340", "00E0", ["yellowswitch carry", "yellowswitch yoshi", "yellowswitch run cape"]],
+ ["yellow", "0350", "00E0", ["yellowswitch carry", "yellowswitch yoshi", "yellowswitch run cape"]],
+ ["single", "04B0", "00A0", []],
+ ["yoshi", "04C0", "00A0", []],
+ ["single", "0AC0", "0140", []],
+ ["power", "0B00", "00C0", []],
+ ["yellow", "0CD0", "0120", ["yellowswitch"]],
+ ["yellow", "0CE0", "0120", ["yellowswitch"]],
+ ["yellow", "0DA0", "00F0", ["yellowswitch"]],
+ ["bonus", "10A0", "0080", []]
+ ],
+ "104_yoshis_house": [],
+ "105_yoshis_island_1": [
+ ["fly", "0250", "0140", []],
+ ["yellow", "09C0", "0140", ["yellowswitch"]],
+ ["life", "0D10", "00F0", []],
+ ["power", "0F30", "0110", []]
+ ],
+ "106_yoshis_island_2": [
+ ["fly", "0080", "00F0", ["carry", "yoshi"]],
+ ["fly", "00C0", "00E0", ["carry", "yoshi"]],
+ ["fly", "0130", "00F0", ["carry", "yoshi"]],
+ ["fly", "0140", "00D0", ["carry", "yoshi"]],
+ ["fly", "0180", "0100", ["carry", "yoshi"]],
+ ["fly", "01C0", "00E0", ["carry", "yoshi"]],
+ ["single", "0260", "0140", []],
+ ["yellow", "0270", "0140", ["yellowswitch"]],
+ ["single", "0280", "0140", []],
+ ["single", "0350", "0150", []],
+ ["yoshi", "0360", "0150", []],
+ ["single", "0B20", "0150", []],
+ ["yoshi", "0B30", "0150", []],
+ ["single", "0B40", "0150", []],
+ ["vine", "0C80", "0100", []],
+ ["yellow", "0DF0", "0120", ["yellowswitch"]]
+ ],
+ "107_vanilla_ghost_house": [
+ ["power", "0200", "0100", []],
+ ["vine", "0750", "0150", []],
+ ["power", "0860", "0140", []],
+ ["multi", "0A00", "0140", []],
+ ["pow", "05E0", "0120", []]
+ ],
+ "108_test": [],
+ "109_vanilla_secret_1": [
+ ["single", "0030", "0590", []],
+ ["power", "0040", "0590", []],
+ ["multi", "0110", "0490", []],
+ ["vine", "01B0", "0520", []],
+ ["vine", "0180", "0470", ["climb"]],
+ ["single", "0190", "0350", ["climb"]],
+ ["single", "01A0", "0350", ["climb"]],
+ ["power", "01B0", "0350", ["climb"]]
+ ],
+ "10A_vanilla_dome_3": [
+ ["single", "01C0", "0140", []],
+ ["fly", "0200", "0160", []],
+ ["fly", "0230", "0120", []],
+ ["power", "02D0", "0110", []],
+ ["fly", "0480", "0150", []],
+ ["invis", "0800", "0130", []],
+ ["power", "0830", "0130", []],
+ ["multi", "0D90", "0120", []],
+ ["power", "03D0", "0130", []],
+ ["yoshi", "10A0", "0100", ["carry", "yoshi"]],
+ ["power", "1A60", "0140", []],
+ ["pswitch", "1E40", "0090", ["run cape pswitch"]],
+ ["pswitch", "1E50", "00A0", ["run cape pswitch"]],
+ ["pswitch", "1E60", "00B0", ["run cape pswitch"]],
+ ["pswitch", "1E70", "00C0", ["run cape pswitch"]],
+ ["pswitch", "1E80", "00D0", ["run cape pswitch"]],
+ ["pswitch", "1E90", "00E0", ["run cape pswitch"]]
+ ],
+ "10B_donut_secret_2": [
+ ["dir", "00A0", "0170", []],
+ ["vine", "0220", "0100", []],
+ ["star", "0250", "0040", ["climb", "yoshi"]],
+ ["power", "0060", "0140", []],
+ ["star", "0B00", "0140", []]
+ ],
+ "10C_test": [],
+ "10D_front_door": [],
+ "10E_back_door": [],
+ "10F_valley_of_bowser_4": [
+ ["yellow", "0370", "0130", ["yellowswitch"]],
+ ["power", "0210", "0130", []],
+ ["vine", "05E0", "0110", []],
+ ["yoshi", "0610", "0040", ["climb"]],
+ ["life", "07A0", "00D0", ["mushroom spin climb"]],
+ ["power", "0B60", "0110", ["yellowswitch climb"]]
+ ],
+ "110_valley_castle": [
+ ["yellow", "0290", "0030", ["yellowswitch"]],
+ ["yellow", "0330", "0110", ["yellowswitch"]],
+ ["green", "0980", "0140", ["greenswitch"]]
+ ],
+ "111_valley_fortress": [
+ ["green", "0220", "0140", ["greenswitch"]],
+ ["yellow", "0940", "0100", ["yellowswitch"]]
+ ],
+ "112_test": [],
+ "113_valley_of_bowser_3": [
+ ["power", "0130", "0110", []],
+ ["power", "08A0", "00E0", []]
+ ],
+ "114_valley_ghost_house": [
+ ["pswitch", "0160", "0100", ["pswitch"]],
+ ["multi", "0570", "0110", ["pswitch"]],
+ ["power", "00E0", "0100", []],
+ ["dir", "0270", "0140", ["pswitch"]]
+ ],
+ "115_valley_of_bowser_2": [
+ ["power", "0330", "0130", []],
+ ["yellow", "0720", "0140", ["yellowswitch"]],
+ ["power", "0010", "00A0", []],
+ ["wings", "00D0", "0140", []]
+ ],
+ "116_valley_of_bowser_1": [
+ ["green", "0810", "0140", ["greenswitch"]],
+ ["invis", "0D40", "0100", []],
+ ["invis", "0D50", "0100", []],
+ ["invis", "0D60", "0100", []],
+ ["yellow", "0D60", "0080", ["yellowswitch cape"]],
+ ["yellow", "0D60", "0090", ["yellowswitch cape"]],
+ ["yellow", "0D60", "00A0", ["yellowswitch cape"]],
+ ["yellow", "0D60", "00B0", ["yellowswitch cape"]],
+ ["vine", "0F20", "0120", []]
+ ],
+ "117_chocolate_secret": [
+ ["power", "04A0", "0120", []],
+ ["power", "0960", "0140", []]
+ ],
+ "118_vanilla_dome_2": [
+ ["single", "0240", "0100", ["swim"]],
+ ["power", "0250", "0100", ["swim"]],
+ ["single", "0260", "0100", ["swim"]],
+ ["single", "0270", "0100", ["swim"]],
+ ["vine", "03B0", "0100", ["swim"]],
+ ["inlife", "0720", "00F0", ["swim climb", "swim yoshi"]],
+ ["single", "0760", "00F0", ["swim climb", "swim yoshi"]],
+ ["single", "0770", "00F0", ["swim climb", "swim yoshi"]],
+ ["power", "0780", "00F0", ["swim climb", "swim yoshi"]],
+ ["power", "0880", "0100", ["swim climb", "swim yoshi"]],
+ ["power", "0730", "0040", ["swim climb", "swim yoshi"]],
+ ["power", "0D10", "0100", ["swim climb", "swim yoshi"]],
+ ["multi", "0290", "0130", ["swim climb", "swim yoshi"]],
+ ["multi", "1150", "0140", ["swim climb", "swim yoshi"]]
+ ],
+ "119_vanilla_dome_4": [
+ ["power", "0690", "0100", []],
+ ["power", "0CB0", "0140", []],
+ ["single", "0E10", "0120", []],
+ ["single", "0E20", "0120", []],
+ ["single", "0E30", "0120", []],
+ ["life", "0E40", "0120", []],
+ ["single", "0E50", "0120", []],
+ ["single", "0E60", "0120", []],
+ ["single", "0E70", "0120", []],
+ ["single", "0E80", "0120", []],
+ ["single", "0E90", "0120", ["carry"]]
+ ],
+ "11A_vanilla_dome_1": [
+ ["fly", "0250", "0110", []],
+ ["power", "0400", "0120", []],
+ ["power", "0450", "00E0", []],
+ ["single", "0460", "0120", []],
+ ["life", "04D0", "0120", []],
+ ["power", "0640", "0180", []],
+ ["vine", "0680", "00E0", ["carry", "redswitch"]],
+ ["star", "00F0", "00E0", []],
+ ["power", "13A0", "0140", ["run star", "run mushroom"]],
+ ["single", "17D0", "0150", ["run star", "run mushroom"]]
+ ],
+ "11B_red_switch_palace": [],
+ "11C_vanilla_dome_castle": [
+ ["life", "0110", "0100", ["carry", "mushroom"]],
+ ["life", "0210", "0100", ["carry", "mushroom"]],
+ ["power", "03A0", "0130", []],
+ ["life", "0170", "0140", ["pswitch"]],
+ ["green", "0B90", "0140", ["greenswitch"]]
+ ],
+ "11D_forest_ghost_house": [
+ ["single", "0950", "0110", []],
+ ["power", "0990", "0110", []],
+ ["fly", "0190", "0150", []],
+ ["power", "0370", "0140", []],
+ ["life", "0640", "0160", []]
+ ],
+ "11E_forest_of_illusion_1": [
+ ["power", "01A0", "0110", []],
+ ["yoshi", "0360", "0130", []],
+ ["power", "0FA0", "0150", []],
+ ["key", "0E00", "0160", ["pballoon"]],
+ ["life", "0610", "0130", []]
+ ],
+ "11F_forest_of_illusion_4": [
+ ["multi", "0540", "0140", []],
+ ["single", "05E0", "0140", []],
+ ["single", "05F0", "0140", []],
+ ["single", "0600", "0140", []],
+ ["single", "0620", "0140", []],
+ ["power", "0630", "0140", []],
+ ["single", "0640", "0140", []],
+ ["single", "0E30", "0140", []],
+ ["single", "0E40", "0140", []],
+ ["power", "0E40", "0100", []],
+ ["single", "0EF0", "0140", []],
+ ["single", "0F00", "0140", []],
+ ["single", "0EF0", "0100", []]
+ ],
+ "120_forest_of_illusion_2": [
+ ["green", "0070", "0130", ["greenswitch swim"]],
+ ["power", "0480", "0040", ["swim"]],
+ ["invis", "0600", "0120", ["swim"]],
+ ["invis", "0610", "0120", ["swim"]],
+ ["inlife", "0620", "0120", ["swim"]],
+ ["invis", "0630", "0120", ["swim"]],
+ ["yellow", "0950", "0160", ["yellowswitch swim"]]
+ ],
+ "121_blue_switch_palace": [],
+ "122_forest_secret": [
+ ["power", "0330", "00A0", []],
+ ["power", "0450", "0110", []],
+ ["life", "06A0", "00B0", ["blueswitch", "carry"]]
+ ],
+ "123_forest_of_illusion_3": [
+ ["yoshi", "0350", "0150", []],
+ ["single", "04C0", "0150", []],
+ ["multi", "04D0", "0140", []],
+ ["single", "04F0", "0120", ["carry", "yoshi"]],
+ ["multi", "0D90", "0110", ["carry", "yoshi"]],
+ ["single", "0D80", "0150", ["carry", "yoshi"]],
+ ["single", "0D90", "0150", ["carry", "yoshi"]],
+ ["single", "0DA0", "0150", ["carry", "yoshi"]],
+ ["single", "0E40", "0140", ["carry", "yoshi"]],
+ ["single", "0E50", "0120", ["carry", "yoshi"]],
+ ["single", "0E70", "0150", ["carry", "yoshi"]],
+ ["single", "0E90", "0110", ["carry", "yoshi"]],
+ ["single", "0EB0", "0130", ["carry", "yoshi"]],
+ ["single", "0EE0", "0140", ["carry", "yoshi"]],
+ ["single", "0EF0", "0100", ["carry", "yoshi"]],
+ ["single", "0F10", "0120", ["carry", "yoshi"]],
+ ["single", "0F50", "0130", ["carry", "yoshi"]],
+ ["single", "0F70", "0150", ["carry", "yoshi"]],
+ ["single", "0F80", "0110", ["carry", "yoshi"]],
+ ["single", "0F90", "0130", ["carry", "yoshi"]],
+ ["single", "0FC0", "0150", ["carry", "yoshi"]],
+ ["single", "0FD0", "0120", ["carry", "yoshi"]],
+ ["single", "11A0", "0150", ["carry", "yoshi"]],
+ ["single", "11B0", "0120", ["carry", "yoshi"]],
+ ["single", "1230", "0150", ["carry", "yoshi"]],
+ ["single", "1240", "0140", ["carry", "yoshi"]],
+ ["single", "1250", "0130", ["carry", "yoshi"]]
+ ],
+ "124_test": [],
+ "125_special_zone_8": [
+ ["yoshi", "0390", "0100", ["carry", "yoshi"]],
+ ["single", "04A0", "0130", []],
+ ["single", "04B0", "0130", []],
+ ["single", "04C0", "0130", []],
+ ["single", "04D0", "0130", []],
+ ["single", "04E0", "0130", []],
+ ["pow", "0560", "0140", []],
+ ["power", "05D0", "0140", []],
+ ["star", "0750", "00F0", []],
+ ["single", "0670", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "0680", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "0690", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "06A0", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "06B0", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "06C0", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "06F0", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "0700", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "0710", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "0720", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "0730", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "0740", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "0750", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["multi", "0CA0", "0100", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "1100", "0120", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "1110", "0120", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "1120", "0120", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "1130", "0120", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["single", "1140", "0120", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["power", "13F0", "0140", ["mushroom spin", "cape", "carry", "yoshi"]],
+ ["fly", "1570", "00F0", ["mushroom spin", "cape", "carry", "yoshi"]]
+ ],
+ "126_special_zone_7": [
+ ["power", "0350", "0150", ["mushroom"]],
+ ["yoshi", "0C80", "0140", ["mushroom"]],
+ ["single", "0F90", "0140", ["mushroom"]],
+ ["power", "0FA0", "0140", ["mushroom"]],
+ ["single", "0FB0", "0140", ["mushroom"]]
+ ],
+ "127_special_zone_6": [
+ ["power", "0370", "00F0", ["swim"]],
+ ["single", "0610", "0140", ["swim"]],
+ ["single", "0630", "0120", ["swim"]],
+ ["yoshi", "0650", "0100", ["swim"]],
+ ["life", "07D0", "0140", ["swim"]],
+ ["multi", "0950", "0140", ["swim"]],
+ ["single", "0D80", "0140", ["swim"]],
+ ["single", "0D90", "0140", ["swim"]],
+ ["single", "0DA0", "0140", ["swim"]],
+ ["single", "0DB0", "0140", ["swim"]],
+ ["single", "0DC0", "0140", ["swim"]],
+ ["single", "0DD0", "0140", ["swim"]],
+ ["single", "0DE0", "0140", ["swim"]],
+ ["single", "0DF0", "0140", ["swim"]],
+ ["single", "0E00", "0140", ["swim"]],
+ ["single", "0E10", "0140", ["swim"]],
+ ["single", "0E20", "0140", ["swim"]],
+ ["single", "0E30", "0140", ["swim"]],
+ ["single", "0E40", "0140", ["swim"]],
+ ["single", "0E50", "0140", ["swim"]],
+ ["single", "0E60", "0140", ["swim"]],
+ ["single", "0E70", "0140", ["swim"]],
+ ["single", "0D80", "0100", ["swim"]],
+ ["single", "0D90", "0100", ["swim"]],
+ ["single", "0DA0", "0100", ["swim"]],
+ ["single", "0DB0", "0100", ["swim"]],
+ ["single", "0DC0", "0100", ["swim"]],
+ ["single", "0DD0", "0100", ["swim"]],
+ ["single", "0DE0", "0100", ["swim"]],
+ ["single", "0DF0", "0100", ["swim"]],
+ ["single", "0E00", "0100", ["swim"]],
+ ["single", "0E10", "0100", ["swim"]],
+ ["power", "0E20", "0100", ["swim"]],
+ ["single", "0E30", "0100", ["swim"]],
+ ["single", "0E40", "0100", ["swim"]],
+ ["single", "0E50", "0100", ["swim"]],
+ ["single", "0E60", "0100", ["swim"]],
+ ["single", "0E70", "0100", ["swim"]]
+ ],
+ "128_special_zone_5": [
+ ["yoshi", "01D0", "0160", ["mushroom"]]
+ ],
+ "129_test": [],
+ "12A_special_zone_1": [
+ ["vine", "0020", "03C0", []],
+ ["vine", "0050", "03C0", []],
+ ["vine", "0080", "03C0", []],
+ ["vine", "00B0", "03C0", []],
+ ["life", "0110", "0340", ["climb"]],
+ ["vine", "0120", "0280", ["climb"]],
+ ["pow", "0080", "01F0", ["climb"]],
+ ["vine", "00B0", "01F0", ["climb"]],
+ ["power", "00F0", "00D0", ["climb"]],
+ ["pswitch", "0190", "00C0", ["climb pswitch cape"]],
+ ["pswitch", "01C0", "0130", ["climb pswitch cape"]],
+ ["pswitch", "0180", "01A0", ["climb pswitch cape"]],
+ ["pswitch", "01D0", "01A0", ["climb pswitch cape"]],
+ ["pswitch", "01C0", "0270", ["climb pswitch cape"]],
+ ["pswitch", "01A0", "02C0", ["climb pswitch cape"]],
+ ["pswitch", "0190", "0310", ["climb pswitch cape"]],
+ ["pswitch", "01B0", "0370", ["climb pswitch cape"]],
+ ["pswitch", "0180", "03D0", ["climb pswitch cape"]],
+ ["pswitch", "0200", "0120", ["climb pswitch cape", "climb pswitch carry"]],
+ ["pswitch", "0210", "0130", ["climb pswitch cape", "climb pswitch carry"]],
+ ["pswitch", "0220", "0140", ["climb pswitch cape", "climb pswitch carry"]],
+ ["pswitch", "0230", "0150", ["climb pswitch cape", "climb pswitch carry"]]
+ ],
+ "12B_special_zone_2": [
+ ["power", "02E0", "0120", []],
+ ["single", "0380", "0110", ["pballoon"]],
+ ["single", "0450", "0140", ["pballoon"]],
+ ["power", "04A0", "00F0", ["pballoon"]],
+ ["single", "05C0", "0150", ["pballoon"]],
+ ["single", "05C0", "00F0", ["pballoon"]],
+ ["power", "0760", "0140", ["pballoon"]],
+ ["multi", "07E0", "00E0", ["pballoon"]],
+ ["single", "0850", "0100", ["pballoon"]],
+ ["single", "0920", "0140", ["pballoon"]]
+ ],
+ "12C_special_zone_3": [
+ ["power", "03F0", "0110", []],
+ ["yoshi", "0080", "0140", []],
+ ["wings", "0A50", "0140", []]
+ ],
+ "12D_special_zone_4": [
+ ["power", "0490", "0140", ["flower"]],
+ ["star", "0AF0", "00F0", ["flower carry", "flower pswitch"]]
+ ],
+ "12E_test": [],
+ "12F_test": [],
+ "130_star_road_2": [
+ ["star", "0460", "0130", ["swim"]]
+ ],
+ "131_test": [],
+ "132_star_road_3": [
+ ["key", "0080", "0030", ["carry"]]
+ ],
+ "133_test": [],
+ "134_star_road_1": [],
+ "135_star_road_4": [
+ ["power", "0540", "0090", []],
+ ["green", "0C00", "0140", ["greenswitch yoshi carry"]],
+ ["green", "0C10", "0140", ["greenswitch yoshi carry"]],
+ ["green", "0C20", "0140", ["greenswitch yoshi carry"]],
+ ["green", "0C30", "0140", ["greenswitch yoshi carry"]],
+ ["green", "0C40", "0140", ["greenswitch yoshi carry"]],
+ ["green", "0C50", "0140", ["greenswitch yoshi carry"]],
+ ["green", "0C60", "0140", ["greenswitch yoshi carry"]],
+ ["key", "0D40", "0160", ["carry yoshi", "greenswitch redswitch carry"]]
+ ],
+ "136_star_road_5": [
+ ["dir", "0510", "0140", []],
+ ["life", "07D0", "0150", ["pswitch"]],
+ ["vine", "08E0", "0100", ["pswitch"]],
+ ["yellow", "08F0", "0050", ["yellowswitch pswitch climb carry", "yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0900", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0910", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0920", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0930", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0940", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0950", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0960", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0970", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0980", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0990", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "09A0", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "09B0", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "09C0", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "09D0", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "09E0", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "09F0", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0A00", "0050", ["yellowswitch specialworld yoshi carry"]],
+ ["yellow", "0A10", "0050", ["yellowswitch greenswitch yoshi carry", "yellowswitch greenswitch pswitch climb carry cape"]],
+ ["yellow", "0A10", "0060", ["yellowswitch greenswitch yoshi carry", "yellowswitch greenswitch pswitch climb carry cape"]],
+ ["green", "0A20", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0A30", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0A40", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0A50", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0A60", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0A70", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0A80", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0A90", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0AA0", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0AB0", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0AC0", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0AD0", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0AE0", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0AF0", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0B00", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0B10", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0B20", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0B30", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0B40", "0080", ["greenswitch specialworld yoshi carry"]],
+ ["green", "0B50", "0080", ["greenswitch specialworld yoshi carry"]]
+ ],
+ "137_test": [],
+ "138_test": [],
+ "139_test": [],
+ "13A_test": [],
+ "13B_test": []
+}
\ No newline at end of file
diff --git a/worlds/smw/data/graphics/indicators.bin b/worlds/smw/data/graphics/indicators.bin
new file mode 100644
index 0000000000..70e7036533
Binary files /dev/null and b/worlds/smw/data/graphics/indicators.bin differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/agnus_castle.mw3 b/worlds/smw/data/palettes/level/castle_pillars/agnus_castle.mw3
new file mode 100644
index 0000000000..99924e1fac
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/agnus_castle.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/cheese.mw3 b/worlds/smw/data/palettes/level/castle_pillars/cheese.mw3
new file mode 100644
index 0000000000..e9b83f1bc9
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/cheese.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/chocolate_blue.mw3 b/worlds/smw/data/palettes/level/castle_pillars/chocolate_blue.mw3
new file mode 100644
index 0000000000..51073a1674
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/chocolate_blue.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/dark_aqua_marine.mw3 b/worlds/smw/data/palettes/level/castle_pillars/dark_aqua_marine.mw3
new file mode 100644
index 0000000000..a482231a04
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/dark_aqua_marine.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/dollhouse.mw3 b/worlds/smw/data/palettes/level/castle_pillars/dollhouse.mw3
new file mode 100644
index 0000000000..06849ceaf1
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/dollhouse.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/gold_caslte.mw3 b/worlds/smw/data/palettes/level/castle_pillars/gold_caslte.mw3
new file mode 100644
index 0000000000..f4c03d2cb1
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/gold_caslte.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/keves_castle.mw3 b/worlds/smw/data/palettes/level/castle_pillars/keves_castle.mw3
new file mode 100644
index 0000000000..a1ab883c34
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/keves_castle.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/original_gray.mw3 b/worlds/smw/data/palettes/level/castle_pillars/original_gray.mw3
new file mode 100644
index 0000000000..37143fb2b8
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/original_gray.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/original_green.mw3 b/worlds/smw/data/palettes/level/castle_pillars/original_green.mw3
new file mode 100644
index 0000000000..4124e19001
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/original_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/original_mustard.mw3 b/worlds/smw/data/palettes/level/castle_pillars/original_mustard.mw3
new file mode 100644
index 0000000000..1ce7a0f3ea
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/original_mustard.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/original_white.mw3 b/worlds/smw/data/palettes/level/castle_pillars/original_white.mw3
new file mode 100644
index 0000000000..f235216f1d
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/original_white.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/pink_purple.mw3 b/worlds/smw/data/palettes/level/castle_pillars/pink_purple.mw3
new file mode 100644
index 0000000000..591ce013c9
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/pink_purple.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/purple_pink.mw3 b/worlds/smw/data/palettes/level/castle_pillars/purple_pink.mw3
new file mode 100644
index 0000000000..5bea724830
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/purple_pink.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/sand_gray.mw3 b/worlds/smw/data/palettes/level/castle_pillars/sand_gray.mw3
new file mode 100644
index 0000000000..eff02a49e1
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/sand_gray.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/sand_green.mw3 b/worlds/smw/data/palettes/level/castle_pillars/sand_green.mw3
new file mode 100644
index 0000000000..5757d8fbfa
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/sand_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/shenhe.mw3 b/worlds/smw/data/palettes/level/castle_pillars/shenhe.mw3
new file mode 100644
index 0000000000..93dc170a52
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/shenhe.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_pillars/whatsapp.mw3 b/worlds/smw/data/palettes/level/castle_pillars/whatsapp.mw3
new file mode 100644
index 0000000000..198f46eca8
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_pillars/whatsapp.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/dark_lava.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/dark_lava.mw3
new file mode 100644
index 0000000000..477701e86a
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/dark_lava.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/dark_purple.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/dark_purple.mw3
new file mode 100644
index 0000000000..29eff5aeff
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/dark_purple.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/dollhouse.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/dollhouse.mw3
new file mode 100644
index 0000000000..73f6924020
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/dollhouse.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/forgotten_temple.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/forgotten_temple.mw3
new file mode 100644
index 0000000000..35d97033f8
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/forgotten_temple.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/original_gray.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/original_gray.mw3
new file mode 100644
index 0000000000..37143fb2b8
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/original_gray.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/original_volcanic.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/original_volcanic.mw3
new file mode 100644
index 0000000000..21d82d7c84
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/original_volcanic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/original_water.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/original_water.mw3
new file mode 100644
index 0000000000..20ee47e8bc
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/original_water.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/sand_gray.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/sand_gray.mw3
new file mode 100644
index 0000000000..5b11808ae6
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/sand_gray.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/sand_green.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/sand_green.mw3
new file mode 100644
index 0000000000..2a5ff0ed85
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/sand_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/shenhe.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/shenhe.mw3
new file mode 100644
index 0000000000..93dc170a52
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/shenhe.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/water.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/water.mw3
new file mode 100644
index 0000000000..9822a3c2ea
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/water.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_small_windows/whatsapp.mw3 b/worlds/smw/data/palettes/level/castle_small_windows/whatsapp.mw3
new file mode 100644
index 0000000000..198f46eca8
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_small_windows/whatsapp.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_wall/cheese.mw3 b/worlds/smw/data/palettes/level/castle_wall/cheese.mw3
new file mode 100644
index 0000000000..913ad39778
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_wall/cheese.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_wall/dollhouse.mw3 b/worlds/smw/data/palettes/level/castle_wall/dollhouse.mw3
new file mode 100644
index 0000000000..73f6924020
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_wall/dollhouse.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_wall/grand_marshall.mw3 b/worlds/smw/data/palettes/level/castle_wall/grand_marshall.mw3
new file mode 100644
index 0000000000..574d557f1e
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_wall/grand_marshall.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_wall/hot_wall.mw3 b/worlds/smw/data/palettes/level/castle_wall/hot_wall.mw3
new file mode 100644
index 0000000000..44703fe4f6
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_wall/hot_wall.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_wall/original.mw3 b/worlds/smw/data/palettes/level/castle_wall/original.mw3
new file mode 100644
index 0000000000..395fb66a01
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_wall/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_wall/sand_green.mw3 b/worlds/smw/data/palettes/level/castle_wall/sand_green.mw3
new file mode 100644
index 0000000000..5757d8fbfa
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_wall/sand_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_wall/shenhe.mw3 b/worlds/smw/data/palettes/level/castle_wall/shenhe.mw3
new file mode 100644
index 0000000000..93dc170a52
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_wall/shenhe.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_wall/water.mw3 b/worlds/smw/data/palettes/level/castle_wall/water.mw3
new file mode 100644
index 0000000000..a0955e8203
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_wall/water.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/brawler_pink.mw3 b/worlds/smw/data/palettes/level/castle_windows/brawler_pink.mw3
new file mode 100644
index 0000000000..69c496fc5d
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/brawler_pink.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/cheese.mw3 b/worlds/smw/data/palettes/level/castle_windows/cheese.mw3
new file mode 100644
index 0000000000..d91826e864
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/cheese.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/dark_aqua_marine.mw3 b/worlds/smw/data/palettes/level/castle_windows/dark_aqua_marine.mw3
new file mode 100644
index 0000000000..501f11d1a9
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/dark_aqua_marine.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/dollhouse.mw3 b/worlds/smw/data/palettes/level/castle_windows/dollhouse.mw3
new file mode 100644
index 0000000000..d3e5fe4b40
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/dollhouse.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/original_brown.mw3 b/worlds/smw/data/palettes/level/castle_windows/original_brown.mw3
new file mode 100644
index 0000000000..0bcc7305b7
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/original_brown.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/original_gray.mw3 b/worlds/smw/data/palettes/level/castle_windows/original_gray.mw3
new file mode 100644
index 0000000000..37143fb2b8
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/original_gray.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/original_water.mw3 b/worlds/smw/data/palettes/level/castle_windows/original_water.mw3
new file mode 100644
index 0000000000..d61f6dba36
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/original_water.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/red_castle.mw3 b/worlds/smw/data/palettes/level/castle_windows/red_castle.mw3
new file mode 100644
index 0000000000..666c17f66f
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/red_castle.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/shenhe.mw3 b/worlds/smw/data/palettes/level/castle_windows/shenhe.mw3
new file mode 100644
index 0000000000..93dc170a52
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/shenhe.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/underwater.mw3 b/worlds/smw/data/palettes/level/castle_windows/underwater.mw3
new file mode 100644
index 0000000000..db5c1a996c
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/underwater.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/water.mw3 b/worlds/smw/data/palettes/level/castle_windows/water.mw3
new file mode 100644
index 0000000000..a0955e8203
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/water.mw3 differ
diff --git a/worlds/smw/data/palettes/level/castle_windows/whatsapp.mw3 b/worlds/smw/data/palettes/level/castle_windows/whatsapp.mw3
new file mode 100644
index 0000000000..198f46eca8
Binary files /dev/null and b/worlds/smw/data/palettes/level/castle_windows/whatsapp.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/brawler_dark.mw3 b/worlds/smw/data/palettes/level/cave/brawler_dark.mw3
new file mode 100644
index 0000000000..9197e99e15
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/brawler_dark.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/brawler_purple.mw3 b/worlds/smw/data/palettes/level/cave/brawler_purple.mw3
new file mode 100644
index 0000000000..0bd5a1bf10
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/brawler_purple.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/brawler_red.mw3 b/worlds/smw/data/palettes/level/cave/brawler_red.mw3
new file mode 100644
index 0000000000..e3f5cdfaaf
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/brawler_red.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/brawler_teal.mw3 b/worlds/smw/data/palettes/level/cave/brawler_teal.mw3
new file mode 100644
index 0000000000..1927ac99ed
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/brawler_teal.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/bright_magma.mw3 b/worlds/smw/data/palettes/level/cave/bright_magma.mw3
new file mode 100644
index 0000000000..92e059d863
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/bright_magma.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/dark_red.mw3 b/worlds/smw/data/palettes/level/cave/dark_red.mw3
new file mode 100644
index 0000000000..b2cc606805
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/dark_red.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/glowing_mushroom.mw3 b/worlds/smw/data/palettes/level/cave/glowing_mushroom.mw3
new file mode 100644
index 0000000000..5b5531c7ef
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/glowing_mushroom.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/green_depths.mw3 b/worlds/smw/data/palettes/level/cave/green_depths.mw3
new file mode 100644
index 0000000000..7f7593d2e3
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/green_depths.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/ice.mw3 b/worlds/smw/data/palettes/level/cave/ice.mw3
new file mode 100644
index 0000000000..23b0b2ef08
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/ice.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/magma_cave.mw3 b/worlds/smw/data/palettes/level/cave/magma_cave.mw3
new file mode 100644
index 0000000000..ca297deb25
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/magma_cave.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/original_chocolate.mw3 b/worlds/smw/data/palettes/level/cave/original_chocolate.mw3
new file mode 100644
index 0000000000..db2693d6be
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/original_chocolate.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/original_gray.mw3 b/worlds/smw/data/palettes/level/cave/original_gray.mw3
new file mode 100644
index 0000000000..2e01f09820
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/original_gray.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/original_ice.mw3 b/worlds/smw/data/palettes/level/cave/original_ice.mw3
new file mode 100644
index 0000000000..6d17d16efe
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/original_ice.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/original_mustard.mw3 b/worlds/smw/data/palettes/level/cave/original_mustard.mw3
new file mode 100644
index 0000000000..001ed13319
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/original_mustard.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/original_volcanic.mw3 b/worlds/smw/data/palettes/level/cave/original_volcanic.mw3
new file mode 100644
index 0000000000..96befdfa3d
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/original_volcanic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/snow.mw3 b/worlds/smw/data/palettes/level/cave/snow.mw3
new file mode 100644
index 0000000000..2328e1a214
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/snow.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/toxic.mw3 b/worlds/smw/data/palettes/level/cave/toxic.mw3
new file mode 100644
index 0000000000..a78538ddba
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/toxic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave/toxic_moss.mw3 b/worlds/smw/data/palettes/level/cave/toxic_moss.mw3
new file mode 100644
index 0000000000..9afe611030
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave/toxic_moss.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave_rocks/bocchi_rock_hair_cube_things.mw3 b/worlds/smw/data/palettes/level/cave_rocks/bocchi_rock_hair_cube_things.mw3
new file mode 100644
index 0000000000..0fb33b2d6a
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave_rocks/bocchi_rock_hair_cube_things.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave_rocks/brawler_volcanic.mw3 b/worlds/smw/data/palettes/level/cave_rocks/brawler_volcanic.mw3
new file mode 100644
index 0000000000..5a3cf230f0
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave_rocks/brawler_volcanic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave_rocks/ice.mw3 b/worlds/smw/data/palettes/level/cave_rocks/ice.mw3
new file mode 100644
index 0000000000..baa52fbf0b
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave_rocks/ice.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave_rocks/layer_2.mw3 b/worlds/smw/data/palettes/level/cave_rocks/layer_2.mw3
new file mode 100644
index 0000000000..ff354e34fe
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave_rocks/layer_2.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave_rocks/original_gray.mw3 b/worlds/smw/data/palettes/level/cave_rocks/original_gray.mw3
new file mode 100644
index 0000000000..bf50bed408
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave_rocks/original_gray.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave_rocks/original_mustard.mw3 b/worlds/smw/data/palettes/level/cave_rocks/original_mustard.mw3
new file mode 100644
index 0000000000..8150d46875
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave_rocks/original_mustard.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave_rocks/pyra_mythra_ft_pneuma.mw3 b/worlds/smw/data/palettes/level/cave_rocks/pyra_mythra_ft_pneuma.mw3
new file mode 100644
index 0000000000..8f2b2817d8
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave_rocks/pyra_mythra_ft_pneuma.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave_rocks/snow.mw3 b/worlds/smw/data/palettes/level/cave_rocks/snow.mw3
new file mode 100644
index 0000000000..b36bff4fef
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave_rocks/snow.mw3 differ
diff --git a/worlds/smw/data/palettes/level/cave_rocks/toxic.mw3 b/worlds/smw/data/palettes/level/cave_rocks/toxic.mw3
new file mode 100644
index 0000000000..4f98b11bc1
Binary files /dev/null and b/worlds/smw/data/palettes/level/cave_rocks/toxic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/clouds/atardecer.mw3 b/worlds/smw/data/palettes/level/clouds/atardecer.mw3
new file mode 100644
index 0000000000..bb1754963e
Binary files /dev/null and b/worlds/smw/data/palettes/level/clouds/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/clouds/charcoal.mw3 b/worlds/smw/data/palettes/level/clouds/charcoal.mw3
new file mode 100644
index 0000000000..755f9af87a
Binary files /dev/null and b/worlds/smw/data/palettes/level/clouds/charcoal.mw3 differ
diff --git a/worlds/smw/data/palettes/level/clouds/cloudy.mw3 b/worlds/smw/data/palettes/level/clouds/cloudy.mw3
new file mode 100644
index 0000000000..b7d07d348c
Binary files /dev/null and b/worlds/smw/data/palettes/level/clouds/cloudy.mw3 differ
diff --git a/worlds/smw/data/palettes/level/clouds/cotton_candy.mw3 b/worlds/smw/data/palettes/level/clouds/cotton_candy.mw3
new file mode 100644
index 0000000000..f9ddeb89c8
Binary files /dev/null and b/worlds/smw/data/palettes/level/clouds/cotton_candy.mw3 differ
diff --git a/worlds/smw/data/palettes/level/clouds/original_green.mw3 b/worlds/smw/data/palettes/level/clouds/original_green.mw3
new file mode 100644
index 0000000000..79af508740
Binary files /dev/null and b/worlds/smw/data/palettes/level/clouds/original_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/clouds/original_orange.mw3 b/worlds/smw/data/palettes/level/clouds/original_orange.mw3
new file mode 100644
index 0000000000..453b717b90
Binary files /dev/null and b/worlds/smw/data/palettes/level/clouds/original_orange.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/agnian_queen.mw3 b/worlds/smw/data/palettes/level/forest/agnian_queen.mw3
new file mode 100644
index 0000000000..f187d8a1ab
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/agnian_queen.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/atardecer.mw3 b/worlds/smw/data/palettes/level/forest/atardecer.mw3
new file mode 100644
index 0000000000..95e07701c2
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/frozen.mw3 b/worlds/smw/data/palettes/level/forest/frozen.mw3
new file mode 100644
index 0000000000..f6dc97c106
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/frozen.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/halloween.mw3 b/worlds/smw/data/palettes/level/forest/halloween.mw3
new file mode 100644
index 0000000000..2e23b6dd6f
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/halloween.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/kevesi_queen.mw3 b/worlds/smw/data/palettes/level/forest/kevesi_queen.mw3
new file mode 100644
index 0000000000..1a4cd413d3
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/kevesi_queen.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/original_dark.mw3 b/worlds/smw/data/palettes/level/forest/original_dark.mw3
new file mode 100644
index 0000000000..7c28daa0d3
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/original_dark.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/original_fall.mw3 b/worlds/smw/data/palettes/level/forest/original_fall.mw3
new file mode 100644
index 0000000000..4b67c03d93
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/original_fall.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/original_green.mw3 b/worlds/smw/data/palettes/level/forest/original_green.mw3
new file mode 100644
index 0000000000..9139338c31
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/original_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/sakura.mw3 b/worlds/smw/data/palettes/level/forest/sakura.mw3
new file mode 100644
index 0000000000..df694e2bd3
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/sakura.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/snow_dark_leaves.mw3 b/worlds/smw/data/palettes/level/forest/snow_dark_leaves.mw3
new file mode 100644
index 0000000000..3202569860
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/snow_dark_leaves.mw3 differ
diff --git a/worlds/smw/data/palettes/level/forest/snow_green_leaves.mw3 b/worlds/smw/data/palettes/level/forest/snow_green_leaves.mw3
new file mode 100644
index 0000000000..a2346ca3c3
Binary files /dev/null and b/worlds/smw/data/palettes/level/forest/snow_green_leaves.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/brawler_cyan.mw3 b/worlds/smw/data/palettes/level/ghost_house/brawler_cyan.mw3
new file mode 100644
index 0000000000..cb6590850f
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/brawler_cyan.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/brawler_orange.mw3 b/worlds/smw/data/palettes/level/ghost_house/brawler_orange.mw3
new file mode 100644
index 0000000000..750def41f9
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/brawler_orange.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/brawler_purple.mw3 b/worlds/smw/data/palettes/level/ghost_house/brawler_purple.mw3
new file mode 100644
index 0000000000..60ac884bf7
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/brawler_purple.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/creepypasta.mw3 b/worlds/smw/data/palettes/level/ghost_house/creepypasta.mw3
new file mode 100644
index 0000000000..92876c3c0e
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/creepypasta.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/crimson_house.mw3 b/worlds/smw/data/palettes/level/ghost_house/crimson_house.mw3
new file mode 100644
index 0000000000..fc7369f7ef
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/crimson_house.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/golden_house.mw3 b/worlds/smw/data/palettes/level/ghost_house/golden_house.mw3
new file mode 100644
index 0000000000..5d4e153bd1
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/golden_house.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/halloween_pallet.mw3 b/worlds/smw/data/palettes/level/ghost_house/halloween_pallet.mw3
new file mode 100644
index 0000000000..f73c16e461
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/halloween_pallet.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/orange_lights.mw3 b/worlds/smw/data/palettes/level/ghost_house/orange_lights.mw3
new file mode 100644
index 0000000000..8eddf82fd3
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/orange_lights.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/original_aqua.mw3 b/worlds/smw/data/palettes/level/ghost_house/original_aqua.mw3
new file mode 100644
index 0000000000..fec63947be
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/original_aqua.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/original_blue.mw3 b/worlds/smw/data/palettes/level/ghost_house/original_blue.mw3
new file mode 100644
index 0000000000..b46979edd8
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/original_blue.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/original_dark.mw3 b/worlds/smw/data/palettes/level/ghost_house/original_dark.mw3
new file mode 100644
index 0000000000..eb6152098a
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/original_dark.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house/original_white.mw3 b/worlds/smw/data/palettes/level/ghost_house/original_white.mw3
new file mode 100644
index 0000000000..0d5c43f3b9
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house/original_white.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house_exit/evening_exit.mw3 b/worlds/smw/data/palettes/level/ghost_house_exit/evening_exit.mw3
new file mode 100644
index 0000000000..98a5f92a60
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house_exit/evening_exit.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house_exit/golden_house.mw3 b/worlds/smw/data/palettes/level/ghost_house_exit/golden_house.mw3
new file mode 100644
index 0000000000..45f5c6701a
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house_exit/golden_house.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house_exit/original.mw3 b/worlds/smw/data/palettes/level/ghost_house_exit/original.mw3
new file mode 100644
index 0000000000..3856df591a
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house_exit/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house_exit/original_blue_door.mw3 b/worlds/smw/data/palettes/level/ghost_house_exit/original_blue_door.mw3
new file mode 100644
index 0000000000..b43818c578
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house_exit/original_blue_door.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ghost_house_exit/underwater.mw3 b/worlds/smw/data/palettes/level/ghost_house_exit/underwater.mw3
new file mode 100644
index 0000000000..a92bc7a1ba
Binary files /dev/null and b/worlds/smw/data/palettes/level/ghost_house_exit/underwater.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/atardecer.mw3 b/worlds/smw/data/palettes/level/grass_clouds/atardecer.mw3
new file mode 100644
index 0000000000..2b055f2fe6
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/crimson.mw3 b/worlds/smw/data/palettes/level/grass_clouds/crimson.mw3
new file mode 100644
index 0000000000..aefeb5d356
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/crimson.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/electro.mw3 b/worlds/smw/data/palettes/level/grass_clouds/electro.mw3
new file mode 100644
index 0000000000..8a39719820
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/electro.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/geo.mw3 b/worlds/smw/data/palettes/level/grass_clouds/geo.mw3
new file mode 100644
index 0000000000..f085c6f368
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/geo.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/miku.mw3 b/worlds/smw/data/palettes/level/grass_clouds/miku.mw3
new file mode 100644
index 0000000000..3b009fbc0f
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/miku.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/original_blue.mw3 b/worlds/smw/data/palettes/level/grass_clouds/original_blue.mw3
new file mode 100644
index 0000000000..bcf57d822c
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/original_blue.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/original_green.mw3 b/worlds/smw/data/palettes/level/grass_clouds/original_green.mw3
new file mode 100644
index 0000000000..e896e0dce3
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/original_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/pizza.mw3 b/worlds/smw/data/palettes/level/grass_clouds/pizza.mw3
new file mode 100644
index 0000000000..2be2f2db72
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/pizza.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/sakura.mw3 b/worlds/smw/data/palettes/level/grass_clouds/sakura.mw3
new file mode 100644
index 0000000000..9a0d8d8687
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/sakura.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/shukfr.mw3 b/worlds/smw/data/palettes/level/grass_clouds/shukfr.mw3
new file mode 100644
index 0000000000..635d22c98a
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/shukfr.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/snow_day.mw3 b/worlds/smw/data/palettes/level/grass_clouds/snow_day.mw3
new file mode 100644
index 0000000000..8a7c632110
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/snow_day.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_clouds/volcanic_rock.mw3 b/worlds/smw/data/palettes/level/grass_clouds/volcanic_rock.mw3
new file mode 100644
index 0000000000..224bfed2cb
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_clouds/volcanic_rock.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/atardecer.mw3 b/worlds/smw/data/palettes/level/grass_forest/atardecer.mw3
new file mode 100644
index 0000000000..cf97cf05e9
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/autumn.mw3 b/worlds/smw/data/palettes/level/grass_forest/autumn.mw3
new file mode 100644
index 0000000000..89d75ed27f
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/autumn.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/brawler.mw3 b/worlds/smw/data/palettes/level/grass_forest/brawler.mw3
new file mode 100644
index 0000000000..85db596ea5
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/brawler.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/brawler_atardecer.mw3 b/worlds/smw/data/palettes/level/grass_forest/brawler_atardecer.mw3
new file mode 100644
index 0000000000..39b7364657
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/brawler_atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/brawler_green.mw3 b/worlds/smw/data/palettes/level/grass_forest/brawler_green.mw3
new file mode 100644
index 0000000000..8ada9a25c4
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/brawler_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/crimson.mw3 b/worlds/smw/data/palettes/level/grass_forest/crimson.mw3
new file mode 100644
index 0000000000..48465a548a
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/crimson.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/deep_forest.mw3 b/worlds/smw/data/palettes/level/grass_forest/deep_forest.mw3
new file mode 100644
index 0000000000..91517aa15e
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/deep_forest.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/electro.mw3 b/worlds/smw/data/palettes/level/grass_forest/electro.mw3
new file mode 100644
index 0000000000..d462646a48
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/electro.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/geo.mw3 b/worlds/smw/data/palettes/level/grass_forest/geo.mw3
new file mode 100644
index 0000000000..f085c6f368
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/geo.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/miku.mw3 b/worlds/smw/data/palettes/level/grass_forest/miku.mw3
new file mode 100644
index 0000000000..5eeaf6c571
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/miku.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/myon.mw3 b/worlds/smw/data/palettes/level/grass_forest/myon.mw3
new file mode 100644
index 0000000000..8420ad56ec
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/myon.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/original_aqua.mw3 b/worlds/smw/data/palettes/level/grass_forest/original_aqua.mw3
new file mode 100644
index 0000000000..ba8ffc90ae
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/original_aqua.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/original_green.mw3 b/worlds/smw/data/palettes/level/grass_forest/original_green.mw3
new file mode 100644
index 0000000000..607d80cc9b
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/original_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/pizza.mw3 b/worlds/smw/data/palettes/level/grass_forest/pizza.mw3
new file mode 100644
index 0000000000..2be2f2db72
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/pizza.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/sakura.mw3 b/worlds/smw/data/palettes/level/grass_forest/sakura.mw3
new file mode 100644
index 0000000000..5b7627fe74
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/sakura.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/snow_dark_leaves.mw3 b/worlds/smw/data/palettes/level/grass_forest/snow_dark_leaves.mw3
new file mode 100644
index 0000000000..47bbd42b97
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/snow_dark_leaves.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/snow_green.mw3 b/worlds/smw/data/palettes/level/grass_forest/snow_green.mw3
new file mode 100644
index 0000000000..50364a4a79
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/snow_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_forest/winter.mw3 b/worlds/smw/data/palettes/level/grass_forest/winter.mw3
new file mode 100644
index 0000000000..63109c24b8
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_forest/winter.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/atardecer.mw3 b/worlds/smw/data/palettes/level/grass_hills/atardecer.mw3
new file mode 100644
index 0000000000..0c32989c5e
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/brawler_green.mw3 b/worlds/smw/data/palettes/level/grass_hills/brawler_green.mw3
new file mode 100644
index 0000000000..612dcce98c
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/brawler_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/crimson.mw3 b/worlds/smw/data/palettes/level/grass_hills/crimson.mw3
new file mode 100644
index 0000000000..9f56757809
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/crimson.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/electro.mw3 b/worlds/smw/data/palettes/level/grass_hills/electro.mw3
new file mode 100644
index 0000000000..c0796b530a
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/electro.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/geo.mw3 b/worlds/smw/data/palettes/level/grass_hills/geo.mw3
new file mode 100644
index 0000000000..ac56278a9f
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/geo.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/miku.mw3 b/worlds/smw/data/palettes/level/grass_hills/miku.mw3
new file mode 100644
index 0000000000..49c78fadba
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/miku.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/mogumogu.mw3 b/worlds/smw/data/palettes/level/grass_hills/mogumogu.mw3
new file mode 100644
index 0000000000..88af74ceaf
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/mogumogu.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/nocturno.mw3 b/worlds/smw/data/palettes/level/grass_hills/nocturno.mw3
new file mode 100644
index 0000000000..f0eeaee1e6
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/nocturno.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/original.mw3 b/worlds/smw/data/palettes/level/grass_hills/original.mw3
new file mode 100644
index 0000000000..705c6602f7
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/sakura.mw3 b/worlds/smw/data/palettes/level/grass_hills/sakura.mw3
new file mode 100644
index 0000000000..6c65dc4ff0
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/sakura.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/snow.mw3 b/worlds/smw/data/palettes/level/grass_hills/snow.mw3
new file mode 100644
index 0000000000..38d1146812
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/snow.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/sunsetish_grass_hills.mw3 b/worlds/smw/data/palettes/level/grass_hills/sunsetish_grass_hills.mw3
new file mode 100644
index 0000000000..c51bdfc6a7
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/sunsetish_grass_hills.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_hills/toothpaste.mw3 b/worlds/smw/data/palettes/level/grass_hills/toothpaste.mw3
new file mode 100644
index 0000000000..7c108ae348
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_hills/toothpaste.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/brawler_lifeless.mw3 b/worlds/smw/data/palettes/level/grass_mountains/brawler_lifeless.mw3
new file mode 100644
index 0000000000..b9979692f0
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/brawler_lifeless.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/classic_sm.mw3 b/worlds/smw/data/palettes/level/grass_mountains/classic_sm.mw3
new file mode 100644
index 0000000000..0e77cc0170
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/classic_sm.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/crimson.mw3 b/worlds/smw/data/palettes/level/grass_mountains/crimson.mw3
new file mode 100644
index 0000000000..9527a0a24a
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/crimson.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/dry_hills.mw3 b/worlds/smw/data/palettes/level/grass_mountains/dry_hills.mw3
new file mode 100644
index 0000000000..61bdc7b82e
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/dry_hills.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/electro.mw3 b/worlds/smw/data/palettes/level/grass_mountains/electro.mw3
new file mode 100644
index 0000000000..684b84a6af
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/electro.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/geo.mw3 b/worlds/smw/data/palettes/level/grass_mountains/geo.mw3
new file mode 100644
index 0000000000..f085c6f368
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/geo.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/late_sandish.mw3 b/worlds/smw/data/palettes/level/grass_mountains/late_sandish.mw3
new file mode 100644
index 0000000000..d94156adda
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/late_sandish.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/miku.mw3 b/worlds/smw/data/palettes/level/grass_mountains/miku.mw3
new file mode 100644
index 0000000000..5eeaf6c571
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/miku.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/original_aqua.mw3 b/worlds/smw/data/palettes/level/grass_mountains/original_aqua.mw3
new file mode 100644
index 0000000000..fda1d358f7
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/original_aqua.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/original_blue.mw3 b/worlds/smw/data/palettes/level/grass_mountains/original_blue.mw3
new file mode 100644
index 0000000000..29404f64bc
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/original_blue.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/original_green.mw3 b/worlds/smw/data/palettes/level/grass_mountains/original_green.mw3
new file mode 100644
index 0000000000..607d80cc9b
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/original_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/original_white.mw3 b/worlds/smw/data/palettes/level/grass_mountains/original_white.mw3
new file mode 100644
index 0000000000..7ecd4e3ccb
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/original_white.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/recksfr.mw3 b/worlds/smw/data/palettes/level/grass_mountains/recksfr.mw3
new file mode 100644
index 0000000000..b5da161c2c
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/recksfr.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/sakura_hills.mw3 b/worlds/smw/data/palettes/level/grass_mountains/sakura_hills.mw3
new file mode 100644
index 0000000000..0f8144cd23
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/sakura_hills.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_mountains/snow_day.mw3 b/worlds/smw/data/palettes/level/grass_mountains/snow_day.mw3
new file mode 100644
index 0000000000..3b182c3b7b
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_mountains/snow_day.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/atardecer.mw3 b/worlds/smw/data/palettes/level/grass_rocks/atardecer.mw3
new file mode 100644
index 0000000000..2212fc60ce
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/crimson.mw3 b/worlds/smw/data/palettes/level/grass_rocks/crimson.mw3
new file mode 100644
index 0000000000..9527a0a24a
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/crimson.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/dark.mw3 b/worlds/smw/data/palettes/level/grass_rocks/dark.mw3
new file mode 100644
index 0000000000..1f6aa06a19
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/dark.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/electro.mw3 b/worlds/smw/data/palettes/level/grass_rocks/electro.mw3
new file mode 100644
index 0000000000..684b84a6af
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/electro.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/geo.mw3 b/worlds/smw/data/palettes/level/grass_rocks/geo.mw3
new file mode 100644
index 0000000000..f085c6f368
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/geo.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/ice.mw3 b/worlds/smw/data/palettes/level/grass_rocks/ice.mw3
new file mode 100644
index 0000000000..349ce8e099
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/ice.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/miku.mw3 b/worlds/smw/data/palettes/level/grass_rocks/miku.mw3
new file mode 100644
index 0000000000..5eeaf6c571
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/miku.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/napolitano.mw3 b/worlds/smw/data/palettes/level/grass_rocks/napolitano.mw3
new file mode 100644
index 0000000000..bc6ebc6621
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/napolitano.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/original_aqua.mw3 b/worlds/smw/data/palettes/level/grass_rocks/original_aqua.mw3
new file mode 100644
index 0000000000..fda1d358f7
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/original_aqua.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/original_choco_volcanic.mw3 b/worlds/smw/data/palettes/level/grass_rocks/original_choco_volcanic.mw3
new file mode 100644
index 0000000000..4b4631e841
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/original_choco_volcanic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/original_ice.mw3 b/worlds/smw/data/palettes/level/grass_rocks/original_ice.mw3
new file mode 100644
index 0000000000..041aa9edb1
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/original_ice.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/original_volcanic.mw3 b/worlds/smw/data/palettes/level/grass_rocks/original_volcanic.mw3
new file mode 100644
index 0000000000..d7a19dc3bc
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/original_volcanic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/original_volcanic_green.mw3 b/worlds/smw/data/palettes/level/grass_rocks/original_volcanic_green.mw3
new file mode 100644
index 0000000000..86b038d6e4
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/original_volcanic_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/original_white.mw3 b/worlds/smw/data/palettes/level/grass_rocks/original_white.mw3
new file mode 100644
index 0000000000..53d76fe530
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/original_white.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/original_white_2.mw3 b/worlds/smw/data/palettes/level/grass_rocks/original_white_2.mw3
new file mode 100644
index 0000000000..596e5b93b4
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/original_white_2.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/recks.mw3 b/worlds/smw/data/palettes/level/grass_rocks/recks.mw3
new file mode 100644
index 0000000000..57ed9fcb37
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/recks.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/sakura.mw3 b/worlds/smw/data/palettes/level/grass_rocks/sakura.mw3
new file mode 100644
index 0000000000..a339b4a62d
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/sakura.mw3 differ
diff --git a/worlds/smw/data/palettes/level/grass_rocks/thanks_doc.mw3 b/worlds/smw/data/palettes/level/grass_rocks/thanks_doc.mw3
new file mode 100644
index 0000000000..2359c277f3
Binary files /dev/null and b/worlds/smw/data/palettes/level/grass_rocks/thanks_doc.mw3 differ
diff --git a/worlds/smw/data/palettes/level/logs/brawler.mw3 b/worlds/smw/data/palettes/level/logs/brawler.mw3
new file mode 100644
index 0000000000..ed25ef9794
Binary files /dev/null and b/worlds/smw/data/palettes/level/logs/brawler.mw3 differ
diff --git a/worlds/smw/data/palettes/level/logs/evening.mw3 b/worlds/smw/data/palettes/level/logs/evening.mw3
new file mode 100644
index 0000000000..a5cb1bf58a
Binary files /dev/null and b/worlds/smw/data/palettes/level/logs/evening.mw3 differ
diff --git a/worlds/smw/data/palettes/level/logs/mahogany.mw3 b/worlds/smw/data/palettes/level/logs/mahogany.mw3
new file mode 100644
index 0000000000..80d5c2c1ad
Binary files /dev/null and b/worlds/smw/data/palettes/level/logs/mahogany.mw3 differ
diff --git a/worlds/smw/data/palettes/level/logs/not_quite_dawnbreak.mw3 b/worlds/smw/data/palettes/level/logs/not_quite_dawnbreak.mw3
new file mode 100644
index 0000000000..ecce214b80
Binary files /dev/null and b/worlds/smw/data/palettes/level/logs/not_quite_dawnbreak.mw3 differ
diff --git a/worlds/smw/data/palettes/level/logs/original.mw3 b/worlds/smw/data/palettes/level/logs/original.mw3
new file mode 100644
index 0000000000..a104893870
Binary files /dev/null and b/worlds/smw/data/palettes/level/logs/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/logs/riesgo_de_chubascos.mw3 b/worlds/smw/data/palettes/level/logs/riesgo_de_chubascos.mw3
new file mode 100644
index 0000000000..0a7e877996
Binary files /dev/null and b/worlds/smw/data/palettes/level/logs/riesgo_de_chubascos.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_cave/argent_cave.mw3 b/worlds/smw/data/palettes/level/mushroom_cave/argent_cave.mw3
new file mode 100644
index 0000000000..872685ebc8
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_cave/argent_cave.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_cave/glowing_mushroom.mw3 b/worlds/smw/data/palettes/level/mushroom_cave/glowing_mushroom.mw3
new file mode 100644
index 0000000000..b3ed246dc1
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_cave/glowing_mushroom.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_cave/green_aqua.mw3 b/worlds/smw/data/palettes/level/mushroom_cave/green_aqua.mw3
new file mode 100644
index 0000000000..dcd6d0f094
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_cave/green_aqua.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_cave/ice.mw3 b/worlds/smw/data/palettes/level/mushroom_cave/ice.mw3
new file mode 100644
index 0000000000..ec308ed93b
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_cave/ice.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_cave/original.mw3 b/worlds/smw/data/palettes/level/mushroom_cave/original.mw3
new file mode 100644
index 0000000000..7d97ca3640
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_cave/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_cave/really_dark.mw3 b/worlds/smw/data/palettes/level/mushroom_cave/really_dark.mw3
new file mode 100644
index 0000000000..696f6df3bb
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_cave/really_dark.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_cave/toxic.mw3 b/worlds/smw/data/palettes/level/mushroom_cave/toxic.mw3
new file mode 100644
index 0000000000..75f87d3c38
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_cave/toxic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_clouds/atardecer.mw3 b/worlds/smw/data/palettes/level/mushroom_clouds/atardecer.mw3
new file mode 100644
index 0000000000..8e3b464f8b
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_clouds/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_clouds/greenshroom.mw3 b/worlds/smw/data/palettes/level/mushroom_clouds/greenshroom.mw3
new file mode 100644
index 0000000000..4ad23210af
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_clouds/greenshroom.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_clouds/oilshroom.mw3 b/worlds/smw/data/palettes/level/mushroom_clouds/oilshroom.mw3
new file mode 100644
index 0000000000..5013182a3e
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_clouds/oilshroom.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_clouds/original_aqua.mw3 b/worlds/smw/data/palettes/level/mushroom_clouds/original_aqua.mw3
new file mode 100644
index 0000000000..2448aa8534
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_clouds/original_aqua.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_clouds/original_blue.mw3 b/worlds/smw/data/palettes/level/mushroom_clouds/original_blue.mw3
new file mode 100644
index 0000000000..268518d3a6
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_clouds/original_blue.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_clouds/original_yellow.mw3 b/worlds/smw/data/palettes/level/mushroom_clouds/original_yellow.mw3
new file mode 100644
index 0000000000..7241f8e954
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_clouds/original_yellow.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_clouds/riesgo_de_chubascos.mw3 b/worlds/smw/data/palettes/level/mushroom_clouds/riesgo_de_chubascos.mw3
new file mode 100644
index 0000000000..d515e876d3
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_clouds/riesgo_de_chubascos.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_forest/atardecer.mw3 b/worlds/smw/data/palettes/level/mushroom_forest/atardecer.mw3
new file mode 100644
index 0000000000..a78e54d23f
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_forest/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_forest/autumn.mw3 b/worlds/smw/data/palettes/level/mushroom_forest/autumn.mw3
new file mode 100644
index 0000000000..499e038e9e
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_forest/autumn.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_forest/count_shroomcula.mw3 b/worlds/smw/data/palettes/level/mushroom_forest/count_shroomcula.mw3
new file mode 100644
index 0000000000..74e336cf6f
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_forest/count_shroomcula.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_forest/cursed_gold.mw3 b/worlds/smw/data/palettes/level/mushroom_forest/cursed_gold.mw3
new file mode 100644
index 0000000000..f0c7d6124f
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_forest/cursed_gold.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_forest/dark_green.mw3 b/worlds/smw/data/palettes/level/mushroom_forest/dark_green.mw3
new file mode 100644
index 0000000000..2b1f15cbb1
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_forest/dark_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_forest/lifeless_gray.mw3 b/worlds/smw/data/palettes/level/mushroom_forest/lifeless_gray.mw3
new file mode 100644
index 0000000000..4690266bc6
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_forest/lifeless_gray.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_forest/original.mw3 b/worlds/smw/data/palettes/level/mushroom_forest/original.mw3
new file mode 100644
index 0000000000..cab6dd1348
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_forest/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_forest/snow_dark.mw3 b/worlds/smw/data/palettes/level/mushroom_forest/snow_dark.mw3
new file mode 100644
index 0000000000..cf3390d5f1
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_forest/snow_dark.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_forest/snow_green.mw3 b/worlds/smw/data/palettes/level/mushroom_forest/snow_green.mw3
new file mode 100644
index 0000000000..850630f921
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_forest/snow_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_hills/atardecer.mw3 b/worlds/smw/data/palettes/level/mushroom_hills/atardecer.mw3
new file mode 100644
index 0000000000..19d9d32451
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_hills/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_hills/atardecer_naranjo.mw3 b/worlds/smw/data/palettes/level/mushroom_hills/atardecer_naranjo.mw3
new file mode 100644
index 0000000000..dfb9d3b4de
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_hills/atardecer_naranjo.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_hills/atardecer_verde.mw3 b/worlds/smw/data/palettes/level/mushroom_hills/atardecer_verde.mw3
new file mode 100644
index 0000000000..2c59282acb
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_hills/atardecer_verde.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_hills/future.mw3 b/worlds/smw/data/palettes/level/mushroom_hills/future.mw3
new file mode 100644
index 0000000000..4b0e3cc59f
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_hills/future.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_hills/original.mw3 b/worlds/smw/data/palettes/level/mushroom_hills/original.mw3
new file mode 100644
index 0000000000..3e48545848
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_hills/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_hills/riesgo_de_chubascos_azul.mw3 b/worlds/smw/data/palettes/level/mushroom_hills/riesgo_de_chubascos_azul.mw3
new file mode 100644
index 0000000000..02bfc3fbfe
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_hills/riesgo_de_chubascos_azul.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_hills/riesgo_de_chubascos_cafe.mw3 b/worlds/smw/data/palettes/level/mushroom_hills/riesgo_de_chubascos_cafe.mw3
new file mode 100644
index 0000000000..e3f6885c27
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_hills/riesgo_de_chubascos_cafe.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_hills/riesgo_de_chubascos_negro.mw3 b/worlds/smw/data/palettes/level/mushroom_hills/riesgo_de_chubascos_negro.mw3
new file mode 100644
index 0000000000..ce79e6ac66
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_hills/riesgo_de_chubascos_negro.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_hills/watermelon_skies.mw3 b/worlds/smw/data/palettes/level/mushroom_hills/watermelon_skies.mw3
new file mode 100644
index 0000000000..c4b24625ed
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_hills/watermelon_skies.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_rocks/atardecer.mw3 b/worlds/smw/data/palettes/level/mushroom_rocks/atardecer.mw3
new file mode 100644
index 0000000000..4540f32bf5
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_rocks/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_rocks/brightshroom.mw3 b/worlds/smw/data/palettes/level/mushroom_rocks/brightshroom.mw3
new file mode 100644
index 0000000000..2b0b66ac4b
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_rocks/brightshroom.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_rocks/original_green.mw3 b/worlds/smw/data/palettes/level/mushroom_rocks/original_green.mw3
new file mode 100644
index 0000000000..3c4ba93067
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_rocks/original_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_rocks/original_ice.mw3 b/worlds/smw/data/palettes/level/mushroom_rocks/original_ice.mw3
new file mode 100644
index 0000000000..82b72af520
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_rocks/original_ice.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_rocks/original_volcanic.mw3 b/worlds/smw/data/palettes/level/mushroom_rocks/original_volcanic.mw3
new file mode 100644
index 0000000000..b366b224fa
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_rocks/original_volcanic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_rocks/original_white.mw3 b/worlds/smw/data/palettes/level/mushroom_rocks/original_white.mw3
new file mode 100644
index 0000000000..9ab8fe7eaa
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_rocks/original_white.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_rocks/riesgo_de_chubascos_cafe.mw3 b/worlds/smw/data/palettes/level/mushroom_rocks/riesgo_de_chubascos_cafe.mw3
new file mode 100644
index 0000000000..c8da0fa178
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_rocks/riesgo_de_chubascos_cafe.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_rocks/riesgo_de_chubascos_negro.mw3 b/worlds/smw/data/palettes/level/mushroom_rocks/riesgo_de_chubascos_negro.mw3
new file mode 100644
index 0000000000..868945e9f4
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_rocks/riesgo_de_chubascos_negro.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_rocks/shuk_ft_reyn.mw3 b/worlds/smw/data/palettes/level/mushroom_rocks/shuk_ft_reyn.mw3
new file mode 100644
index 0000000000..4fa3e7600a
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_rocks/shuk_ft_reyn.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/atardecer.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/atardecer.mw3
new file mode 100644
index 0000000000..d64a4bb229
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/cool.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/cool.mw3
new file mode 100644
index 0000000000..326b693e14
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/cool.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/dark_night.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/dark_night.mw3
new file mode 100644
index 0000000000..a4c0442e27
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/dark_night.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/halloween.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/halloween.mw3
new file mode 100644
index 0000000000..1fcbd56102
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/halloween.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/light_pollution.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/light_pollution.mw3
new file mode 100644
index 0000000000..17c47d6891
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/light_pollution.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/midas.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/midas.mw3
new file mode 100644
index 0000000000..9adffb69bd
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/midas.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/original_green.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/original_green.mw3
new file mode 100644
index 0000000000..9abb791506
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/original_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/original_night.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/original_night.mw3
new file mode 100644
index 0000000000..c60a87abc8
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/original_night.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/purpleish_night.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/purpleish_night.mw3
new file mode 100644
index 0000000000..5757d04f55
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/purpleish_night.mw3 differ
diff --git a/worlds/smw/data/palettes/level/mushroom_stars/riesgo_de_chubascos.mw3 b/worlds/smw/data/palettes/level/mushroom_stars/riesgo_de_chubascos.mw3
new file mode 100644
index 0000000000..b17323af65
Binary files /dev/null and b/worlds/smw/data/palettes/level/mushroom_stars/riesgo_de_chubascos.mw3 differ
diff --git a/worlds/smw/data/palettes/level/palettes.json b/worlds/smw/data/palettes/level/palettes.json
new file mode 100644
index 0000000000..9690c2069d
--- /dev/null
+++ b/worlds/smw/data/palettes/level/palettes.json
@@ -0,0 +1,358 @@
+{
+ "grass_hills": [
+ "atardecer.mw3",
+ "brawler_green.mw3",
+ "crimson.mw3",
+ "electro.mw3",
+ "geo.mw3",
+ "miku.mw3",
+ "mogumogu.mw3",
+ "nocturno.mw3",
+ "original.mw3",
+ "sakura.mw3",
+ "snow.mw3",
+ "sunsetish_grass_hills.mw3",
+ "toothpaste.mw3"
+ ],
+ "grass_forest": [
+ "atardecer.mw3",
+ "autumn.mw3",
+ "brawler.mw3",
+ "brawler_atardecer.mw3",
+ "brawler_green.mw3",
+ "crimson.mw3",
+ "deep_forest.mw3",
+ "electro.mw3",
+ "geo.mw3",
+ "miku.mw3",
+ "myon.mw3",
+ "original_aqua.mw3",
+ "original_green.mw3",
+ "pizza.mw3",
+ "sakura.mw3",
+ "snow_dark_leaves.mw3",
+ "snow_green.mw3",
+ "winter.mw3"
+ ],
+ "grass_rocks": [
+ "atardecer.mw3",
+ "crimson.mw3",
+ "dark.mw3",
+ "electro.mw3",
+ "geo.mw3",
+ "ice.mw3",
+ "miku.mw3",
+ "napolitano.mw3",
+ "original_aqua.mw3",
+ "original_choco_volcanic.mw3",
+ "original_ice.mw3",
+ "original_volcanic.mw3",
+ "original_volcanic_green.mw3",
+ "original_white.mw3",
+ "original_white_2.mw3",
+ "recks.mw3",
+ "sakura.mw3",
+ "thanks_doc.mw3"
+ ],
+ "grass_clouds": [
+ "atardecer.mw3",
+ "crimson.mw3",
+ "electro.mw3",
+ "geo.mw3",
+ "miku.mw3",
+ "original_blue.mw3",
+ "original_green.mw3",
+ "pizza.mw3",
+ "sakura.mw3",
+ "shukfr.mw3",
+ "snow_day.mw3",
+ "volcanic_rock.mw3"
+ ],
+ "grass_mountains": [
+ "brawler_lifeless.mw3",
+ "classic_sm.mw3",
+ "crimson.mw3",
+ "dry_hills.mw3",
+ "electro.mw3",
+ "geo.mw3",
+ "late_sandish.mw3",
+ "miku.mw3",
+ "original_aqua.mw3",
+ "original_blue.mw3",
+ "original_green.mw3",
+ "original_white.mw3",
+ "recksfr.mw3",
+ "sakura_hills.mw3",
+ "snow_day.mw3"
+ ],
+ "cave": [
+ "brawler_dark.mw3",
+ "brawler_purple.mw3",
+ "brawler_red.mw3",
+ "brawler_teal.mw3",
+ "bright_magma.mw3",
+ "dark_red.mw3",
+ "glowing_mushroom.mw3",
+ "green_depths.mw3",
+ "ice.mw3",
+ "magma_cave.mw3",
+ "original_chocolate.mw3",
+ "original_gray.mw3",
+ "original_ice.mw3",
+ "original_mustard.mw3",
+ "original_volcanic.mw3",
+ "snow.mw3",
+ "toxic.mw3",
+ "toxic_moss.mw3"
+ ],
+ "cave_rocks": [
+ "bocchi_rock_hair_cube_things.mw3",
+ "brawler_volcanic.mw3",
+ "ice.mw3",
+ "layer_2.mw3",
+ "original_gray.mw3",
+ "original_mustard.mw3",
+ "pyra_mythra_ft_pneuma.mw3",
+ "snow.mw3",
+ "toxic.mw3"
+ ],
+ "water": [
+ "dark_water.mw3",
+ "deep_aqua.mw3",
+ "deep_chocolate.mw3",
+ "harmless_magma.mw3",
+ "murky.mw3",
+ "oil_spill.mw3",
+ "original_brown.mw3",
+ "original_gray.mw3",
+ "original_green.mw3",
+ "original_mustard.mw3",
+ "original_volcanic.mw3",
+ "pickle_juice.mw3"
+ ],
+ "mushroom_rocks": [
+ "atardecer.mw3",
+ "brightshroom.mw3",
+ "original_green.mw3",
+ "original_ice.mw3",
+ "original_volcanic.mw3",
+ "original_white.mw3",
+ "riesgo_de_chubascos_cafe.mw3",
+ "riesgo_de_chubascos_negro.mw3",
+ "shuk_ft_reyn.mw3"
+ ],
+ "mushroom_clouds": [
+ "atardecer.mw3",
+ "greenshroom.mw3",
+ "oilshroom.mw3",
+ "original_aqua.mw3",
+ "original_blue.mw3",
+ "original_yellow.mw3",
+ "riesgo_de_chubascos.mw3"
+ ],
+ "mushroom_forest": [
+ "atardecer.mw3",
+ "autumn.mw3",
+ "count_shroomcula.mw3",
+ "cursed_gold.mw3",
+ "dark_green.mw3",
+ "lifeless_gray.mw3",
+ "original.mw3",
+ "snow_dark.mw3",
+ "snow_green.mw3"
+ ],
+ "mushroom_hills": [
+ "atardecer.mw3",
+ "atardecer_naranjo.mw3",
+ "atardecer_verde.mw3",
+ "future.mw3",
+ "original.mw3",
+ "riesgo_de_chubascos_azul.mw3",
+ "riesgo_de_chubascos_cafe.mw3",
+ "riesgo_de_chubascos_negro.mw3",
+ "watermelon_skies.mw3"
+ ],
+ "mushroom_stars": [
+ "atardecer.mw3",
+ "cool.mw3",
+ "dark_night.mw3",
+ "halloween.mw3",
+ "light_pollution.mw3",
+ "midas.mw3",
+ "original_green.mw3",
+ "original_night.mw3",
+ "purpleish_night.mw3",
+ "riesgo_de_chubascos.mw3"
+ ],
+ "mushroom_cave": [
+ "argent_cave.mw3",
+ "glowing_mushroom.mw3",
+ "green_aqua.mw3",
+ "ice.mw3",
+ "original.mw3",
+ "really_dark.mw3",
+ "toxic.mw3"
+ ],
+ "forest": [
+ "agnian_queen.mw3",
+ "atardecer.mw3",
+ "frozen.mw3",
+ "halloween.mw3",
+ "kevesi_queen.mw3",
+ "original_dark.mw3",
+ "original_fall.mw3",
+ "original_green.mw3",
+ "sakura.mw3",
+ "snow_dark_leaves.mw3",
+ "snow_green_leaves.mw3"
+ ],
+ "logs": [
+ "brawler.mw3",
+ "evening.mw3",
+ "mahogany.mw3",
+ "not_quite_dawnbreak.mw3",
+ "original.mw3",
+ "riesgo_de_chubascos.mw3"
+ ],
+ "clouds": [
+ "atardecer.mw3",
+ "charcoal.mw3",
+ "cloudy.mw3",
+ "cotton_candy.mw3",
+ "original_green.mw3",
+ "original_orange.mw3"
+ ],
+ "castle_pillars": [
+ "agnus_castle.mw3",
+ "cheese.mw3",
+ "chocolate_blue.mw3",
+ "dark_aqua_marine.mw3",
+ "dollhouse.mw3",
+ "gold_caslte.mw3",
+ "keves_castle.mw3",
+ "original_gray.mw3",
+ "original_green.mw3",
+ "original_mustard.mw3",
+ "original_white.mw3",
+ "pink_purple.mw3",
+ "purple_pink.mw3",
+ "sand_gray.mw3",
+ "sand_green.mw3",
+ "shenhe.mw3",
+ "whatsapp.mw3"
+ ],
+ "castle_windows": [
+ "brawler_pink.mw3",
+ "cheese.mw3",
+ "dark_aqua_marine.mw3",
+ "dollhouse.mw3",
+ "original_brown.mw3",
+ "original_gray.mw3",
+ "original_water.mw3",
+ "red_castle.mw3",
+ "shenhe.mw3",
+ "underwater.mw3",
+ "water.mw3",
+ "whatsapp.mw3"
+ ],
+ "castle_wall": [
+ "cheese.mw3",
+ "dollhouse.mw3",
+ "grand_marshall.mw3",
+ "hot_wall.mw3",
+ "original.mw3",
+ "sand_green.mw3",
+ "shenhe.mw3",
+ "water.mw3"
+ ],
+ "castle_small_windows": [
+ "dark_lava.mw3",
+ "dark_purple.mw3",
+ "dollhouse.mw3",
+ "forgotten_temple.mw3",
+ "original_gray.mw3",
+ "original_volcanic.mw3",
+ "original_water.mw3",
+ "sand_gray.mw3",
+ "sand_green.mw3",
+ "shenhe.mw3",
+ "water.mw3",
+ "whatsapp.mw3"
+ ],
+ "ghost_house": [
+ "brawler_cyan.mw3",
+ "brawler_orange.mw3",
+ "brawler_purple.mw3",
+ "creepypasta.mw3",
+ "crimson_house.mw3",
+ "golden_house.mw3",
+ "halloween_pallet.mw3",
+ "orange_lights.mw3",
+ "original_aqua.mw3",
+ "original_blue.mw3",
+ "original_dark.mw3",
+ "original_white.mw3"
+ ],
+ "ghost_house_exit": [
+ "evening_exit.mw3",
+ "golden_house.mw3",
+ "original.mw3",
+ "original_blue_door.mw3",
+ "underwater.mw3"
+ ],
+ "ship_exterior": [
+ "blue_purple.mw3",
+ "doc_ship.mw3",
+ "grey_ship.mw3",
+ "original.mw3",
+ "reddish.mw3"
+ ],
+ "ship_interior": [
+ "blue_purple.mw3",
+ "bocchi_hitori.mw3",
+ "bocchi_rock.mw3",
+ "brawler.mw3",
+ "grey_ship.mw3",
+ "original.mw3"
+ ],
+ "switch_palace": [
+ "blue_grid.mw3",
+ "brawler_brown.mw3",
+ "cafe_claro.mw3",
+ "color_del_gato_2.mw3",
+ "color_de_gato.mw3",
+ "green_grid.mw3",
+ "gris.mw3",
+ "mario_pants.mw3",
+ "monado.mw3",
+ "morado.mw3",
+ "negro.mw3",
+ "onigiria.mw3",
+ "original.mw3",
+ "original_bonus.mw3",
+ "pink.mw3",
+ "red_grid.mw3",
+ "verde.mw3",
+ "verde_agua.mw3",
+ "yellow_grid.mw3",
+ "youbonus.mw3"
+ ],
+ "yoshi_house": [
+ "atardecer.mw3",
+ "brawler_green.mw3",
+ "choco.mw3",
+ "crimson.mw3",
+ "miku.mw3",
+ "mogumogu.mw3",
+ "monocromo.mw3",
+ "neon.mw3",
+ "nieve.mw3",
+ "night.mw3",
+ "nocturno.mw3",
+ "original.mw3",
+ "sakura.mw3",
+ "snow.mw3",
+ "strong_sun.mw3",
+ "sunsetish_grass_hills.mw3"
+ ]
+}
\ No newline at end of file
diff --git a/worlds/smw/data/palettes/level/ship_exterior/blue_purple.mw3 b/worlds/smw/data/palettes/level/ship_exterior/blue_purple.mw3
new file mode 100644
index 0000000000..2e098de764
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_exterior/blue_purple.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_exterior/doc_ship.mw3 b/worlds/smw/data/palettes/level/ship_exterior/doc_ship.mw3
new file mode 100644
index 0000000000..8946830bb7
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_exterior/doc_ship.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_exterior/grey_ship.mw3 b/worlds/smw/data/palettes/level/ship_exterior/grey_ship.mw3
new file mode 100644
index 0000000000..406656ff64
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_exterior/grey_ship.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_exterior/original.mw3 b/worlds/smw/data/palettes/level/ship_exterior/original.mw3
new file mode 100644
index 0000000000..20eec6ee80
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_exterior/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_exterior/reddish.mw3 b/worlds/smw/data/palettes/level/ship_exterior/reddish.mw3
new file mode 100644
index 0000000000..674aafd0c0
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_exterior/reddish.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_interior/blue_purple.mw3 b/worlds/smw/data/palettes/level/ship_interior/blue_purple.mw3
new file mode 100644
index 0000000000..9ac0f022af
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_interior/blue_purple.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_interior/bocchi_hitori.mw3 b/worlds/smw/data/palettes/level/ship_interior/bocchi_hitori.mw3
new file mode 100644
index 0000000000..646c240f68
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_interior/bocchi_hitori.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_interior/bocchi_rock.mw3 b/worlds/smw/data/palettes/level/ship_interior/bocchi_rock.mw3
new file mode 100644
index 0000000000..4d45708585
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_interior/bocchi_rock.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_interior/brawler.mw3 b/worlds/smw/data/palettes/level/ship_interior/brawler.mw3
new file mode 100644
index 0000000000..d1f3f03d7e
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_interior/brawler.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_interior/grey_ship.mw3 b/worlds/smw/data/palettes/level/ship_interior/grey_ship.mw3
new file mode 100644
index 0000000000..786802304f
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_interior/grey_ship.mw3 differ
diff --git a/worlds/smw/data/palettes/level/ship_interior/original.mw3 b/worlds/smw/data/palettes/level/ship_interior/original.mw3
new file mode 100644
index 0000000000..a208db211f
Binary files /dev/null and b/worlds/smw/data/palettes/level/ship_interior/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/blue_grid.mw3 b/worlds/smw/data/palettes/level/switch_palace/blue_grid.mw3
new file mode 100644
index 0000000000..d613b8061d
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/blue_grid.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/brawler_brown.mw3 b/worlds/smw/data/palettes/level/switch_palace/brawler_brown.mw3
new file mode 100644
index 0000000000..a3073c31ad
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/brawler_brown.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/cafe_claro.mw3 b/worlds/smw/data/palettes/level/switch_palace/cafe_claro.mw3
new file mode 100644
index 0000000000..90ffc5cf73
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/cafe_claro.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/color_de_gato.mw3 b/worlds/smw/data/palettes/level/switch_palace/color_de_gato.mw3
new file mode 100644
index 0000000000..b5ba743bfa
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/color_de_gato.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/color_del_gato_2.mw3 b/worlds/smw/data/palettes/level/switch_palace/color_del_gato_2.mw3
new file mode 100644
index 0000000000..9c52a56a87
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/color_del_gato_2.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/green_grid.mw3 b/worlds/smw/data/palettes/level/switch_palace/green_grid.mw3
new file mode 100644
index 0000000000..3a8ded956b
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/green_grid.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/gris.mw3 b/worlds/smw/data/palettes/level/switch_palace/gris.mw3
new file mode 100644
index 0000000000..8e8df8008b
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/gris.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/mario_pants.mw3 b/worlds/smw/data/palettes/level/switch_palace/mario_pants.mw3
new file mode 100644
index 0000000000..b18aee2e18
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/mario_pants.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/monado.mw3 b/worlds/smw/data/palettes/level/switch_palace/monado.mw3
new file mode 100644
index 0000000000..c37acf9898
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/monado.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/morado.mw3 b/worlds/smw/data/palettes/level/switch_palace/morado.mw3
new file mode 100644
index 0000000000..ab495c8b33
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/morado.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/negro.mw3 b/worlds/smw/data/palettes/level/switch_palace/negro.mw3
new file mode 100644
index 0000000000..dd9db46ffd
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/negro.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/onigiria.mw3 b/worlds/smw/data/palettes/level/switch_palace/onigiria.mw3
new file mode 100644
index 0000000000..7632dc08b2
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/onigiria.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/original.mw3 b/worlds/smw/data/palettes/level/switch_palace/original.mw3
new file mode 100644
index 0000000000..9cc5a26c04
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/original_bonus.mw3 b/worlds/smw/data/palettes/level/switch_palace/original_bonus.mw3
new file mode 100644
index 0000000000..b793117f4a
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/original_bonus.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/pink.mw3 b/worlds/smw/data/palettes/level/switch_palace/pink.mw3
new file mode 100644
index 0000000000..aaa49aa32f
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/pink.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/red_grid.mw3 b/worlds/smw/data/palettes/level/switch_palace/red_grid.mw3
new file mode 100644
index 0000000000..1336dc8346
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/red_grid.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/verde.mw3 b/worlds/smw/data/palettes/level/switch_palace/verde.mw3
new file mode 100644
index 0000000000..92515d0c32
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/verde.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/verde_agua.mw3 b/worlds/smw/data/palettes/level/switch_palace/verde_agua.mw3
new file mode 100644
index 0000000000..f845850fba
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/verde_agua.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/yellow_grid.mw3 b/worlds/smw/data/palettes/level/switch_palace/yellow_grid.mw3
new file mode 100644
index 0000000000..c41276492e
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/yellow_grid.mw3 differ
diff --git a/worlds/smw/data/palettes/level/switch_palace/youbonus.mw3 b/worlds/smw/data/palettes/level/switch_palace/youbonus.mw3
new file mode 100644
index 0000000000..b213f56607
Binary files /dev/null and b/worlds/smw/data/palettes/level/switch_palace/youbonus.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/dark_water.mw3 b/worlds/smw/data/palettes/level/water/dark_water.mw3
new file mode 100644
index 0000000000..e0af55f5d2
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/dark_water.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/deep_aqua.mw3 b/worlds/smw/data/palettes/level/water/deep_aqua.mw3
new file mode 100644
index 0000000000..7407102bf7
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/deep_aqua.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/deep_chocolate.mw3 b/worlds/smw/data/palettes/level/water/deep_chocolate.mw3
new file mode 100644
index 0000000000..19d645e39f
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/deep_chocolate.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/harmless_magma.mw3 b/worlds/smw/data/palettes/level/water/harmless_magma.mw3
new file mode 100644
index 0000000000..043870cf82
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/harmless_magma.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/murky.mw3 b/worlds/smw/data/palettes/level/water/murky.mw3
new file mode 100644
index 0000000000..57ea1ce44f
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/murky.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/oil_spill.mw3 b/worlds/smw/data/palettes/level/water/oil_spill.mw3
new file mode 100644
index 0000000000..ac1ffed27f
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/oil_spill.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/original_brown.mw3 b/worlds/smw/data/palettes/level/water/original_brown.mw3
new file mode 100644
index 0000000000..5f5366cebd
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/original_brown.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/original_gray.mw3 b/worlds/smw/data/palettes/level/water/original_gray.mw3
new file mode 100644
index 0000000000..b5087eccbe
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/original_gray.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/original_green.mw3 b/worlds/smw/data/palettes/level/water/original_green.mw3
new file mode 100644
index 0000000000..6697f2839e
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/original_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/original_mustard.mw3 b/worlds/smw/data/palettes/level/water/original_mustard.mw3
new file mode 100644
index 0000000000..bf14a8cb15
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/original_mustard.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/original_volcanic.mw3 b/worlds/smw/data/palettes/level/water/original_volcanic.mw3
new file mode 100644
index 0000000000..ef22bf7bf6
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/original_volcanic.mw3 differ
diff --git a/worlds/smw/data/palettes/level/water/pickle_juice.mw3 b/worlds/smw/data/palettes/level/water/pickle_juice.mw3
new file mode 100644
index 0000000000..a27ebcfd89
Binary files /dev/null and b/worlds/smw/data/palettes/level/water/pickle_juice.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/atardecer.mw3 b/worlds/smw/data/palettes/level/yoshi_house/atardecer.mw3
new file mode 100644
index 0000000000..561b3f4902
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/brawler_green.mw3 b/worlds/smw/data/palettes/level/yoshi_house/brawler_green.mw3
new file mode 100644
index 0000000000..96c93099f3
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/brawler_green.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/choco.mw3 b/worlds/smw/data/palettes/level/yoshi_house/choco.mw3
new file mode 100644
index 0000000000..cd4ebe585d
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/choco.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/crimson.mw3 b/worlds/smw/data/palettes/level/yoshi_house/crimson.mw3
new file mode 100644
index 0000000000..e334904a37
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/crimson.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/miku.mw3 b/worlds/smw/data/palettes/level/yoshi_house/miku.mw3
new file mode 100644
index 0000000000..5d3b9e8114
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/miku.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/mogumogu.mw3 b/worlds/smw/data/palettes/level/yoshi_house/mogumogu.mw3
new file mode 100644
index 0000000000..cf76396c8f
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/mogumogu.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/monocromo.mw3 b/worlds/smw/data/palettes/level/yoshi_house/monocromo.mw3
new file mode 100644
index 0000000000..8e1529f514
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/monocromo.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/neon.mw3 b/worlds/smw/data/palettes/level/yoshi_house/neon.mw3
new file mode 100644
index 0000000000..d3e183a770
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/neon.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/nieve.mw3 b/worlds/smw/data/palettes/level/yoshi_house/nieve.mw3
new file mode 100644
index 0000000000..07db0b1339
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/nieve.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/night.mw3 b/worlds/smw/data/palettes/level/yoshi_house/night.mw3
new file mode 100644
index 0000000000..7cc0122339
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/night.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/nocturno.mw3 b/worlds/smw/data/palettes/level/yoshi_house/nocturno.mw3
new file mode 100644
index 0000000000..de764ef9e8
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/nocturno.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/original.mw3 b/worlds/smw/data/palettes/level/yoshi_house/original.mw3
new file mode 100644
index 0000000000..051d266fbd
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/original.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/sakura.mw3 b/worlds/smw/data/palettes/level/yoshi_house/sakura.mw3
new file mode 100644
index 0000000000..d099ba9353
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/sakura.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/snow.mw3 b/worlds/smw/data/palettes/level/yoshi_house/snow.mw3
new file mode 100644
index 0000000000..4fea26a690
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/snow.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/strong_sun.mw3 b/worlds/smw/data/palettes/level/yoshi_house/strong_sun.mw3
new file mode 100644
index 0000000000..7c671aa368
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/strong_sun.mw3 differ
diff --git a/worlds/smw/data/palettes/level/yoshi_house/sunsetish_grass_hills.mw3 b/worlds/smw/data/palettes/level/yoshi_house/sunsetish_grass_hills.mw3
new file mode 100644
index 0000000000..c51bdfc6a7
Binary files /dev/null and b/worlds/smw/data/palettes/level/yoshi_house/sunsetish_grass_hills.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/atardecer.mw3 b/worlds/smw/data/palettes/map/forest/atardecer.mw3
new file mode 100644
index 0000000000..5ce855399b
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/burnt_forest.mw3 b/worlds/smw/data/palettes/map/forest/burnt_forest.mw3
new file mode 100644
index 0000000000..58b0648f18
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/burnt_forest.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/dark_forest.mw3 b/worlds/smw/data/palettes/map/forest/dark_forest.mw3
new file mode 100644
index 0000000000..90b9b18809
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/dark_forest.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/halloween.mw3 b/worlds/smw/data/palettes/map/forest/halloween.mw3
new file mode 100644
index 0000000000..c3899751bf
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/halloween.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/ice_forest.mw3 b/worlds/smw/data/palettes/map/forest/ice_forest.mw3
new file mode 100644
index 0000000000..32d62829bd
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/ice_forest.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/lost_woods.mw3 b/worlds/smw/data/palettes/map/forest/lost_woods.mw3
new file mode 100644
index 0000000000..ba9486b627
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/lost_woods.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/mono.mw3 b/worlds/smw/data/palettes/map/forest/mono.mw3
new file mode 100644
index 0000000000..32bce2c463
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/mono.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/original.mw3 b/worlds/smw/data/palettes/map/forest/original.mw3
new file mode 100644
index 0000000000..766522e065
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/original.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/original_special.mw3 b/worlds/smw/data/palettes/map/forest/original_special.mw3
new file mode 100644
index 0000000000..57fcf7dea5
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/original_special.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/sepia.mw3 b/worlds/smw/data/palettes/map/forest/sepia.mw3
new file mode 100644
index 0000000000..b265f97806
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/sepia.mw3 differ
diff --git a/worlds/smw/data/palettes/map/forest/snow_day.mw3 b/worlds/smw/data/palettes/map/forest/snow_day.mw3
new file mode 100644
index 0000000000..c76540325b
Binary files /dev/null and b/worlds/smw/data/palettes/map/forest/snow_day.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/atardecer.mw3 b/worlds/smw/data/palettes/map/main/atardecer.mw3
new file mode 100644
index 0000000000..5252db002d
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/brawler.mw3 b/worlds/smw/data/palettes/map/main/brawler.mw3
new file mode 100644
index 0000000000..731696fcfc
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/brawler.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/cake_frosting.mw3 b/worlds/smw/data/palettes/map/main/cake_frosting.mw3
new file mode 100644
index 0000000000..aec0fd7e40
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/cake_frosting.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/invertido.mw3 b/worlds/smw/data/palettes/map/main/invertido.mw3
new file mode 100644
index 0000000000..79a7147acd
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/invertido.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/mono.mw3 b/worlds/smw/data/palettes/map/main/mono.mw3
new file mode 100644
index 0000000000..d4d0f72d29
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/mono.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/morning.mw3 b/worlds/smw/data/palettes/map/main/morning.mw3
new file mode 100644
index 0000000000..b2fe88e2cf
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/morning.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/night.mw3 b/worlds/smw/data/palettes/map/main/night.mw3
new file mode 100644
index 0000000000..a5e84ec80c
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/night.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/night_time.mw3 b/worlds/smw/data/palettes/map/main/night_time.mw3
new file mode 100644
index 0000000000..13a5af30c2
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/night_time.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/original.mw3 b/worlds/smw/data/palettes/map/main/original.mw3
new file mode 100644
index 0000000000..cb655d882e
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/original.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/original_special.mw3 b/worlds/smw/data/palettes/map/main/original_special.mw3
new file mode 100644
index 0000000000..5c1e63e8fc
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/original_special.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/sepia.mw3 b/worlds/smw/data/palettes/map/main/sepia.mw3
new file mode 100644
index 0000000000..3a6ece7743
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/sepia.mw3 differ
diff --git a/worlds/smw/data/palettes/map/main/snow_day.mw3 b/worlds/smw/data/palettes/map/main/snow_day.mw3
new file mode 100644
index 0000000000..1ad307f078
Binary files /dev/null and b/worlds/smw/data/palettes/map/main/snow_day.mw3 differ
diff --git a/worlds/smw/data/palettes/map/palettes.json b/worlds/smw/data/palettes/map/palettes.json
new file mode 100644
index 0000000000..a926418cf9
--- /dev/null
+++ b/worlds/smw/data/palettes/map/palettes.json
@@ -0,0 +1,92 @@
+{
+ "main": [
+ "atardecer.mw3",
+ "brawler.mw3",
+ "cake_frosting.mw3",
+ "invertido.mw3",
+ "mono.mw3",
+ "morning.mw3",
+ "night.mw3",
+ "night_time.mw3",
+ "original.mw3",
+ "original_special.mw3",
+ "sepia.mw3",
+ "snow_day.mw3"
+ ],
+ "yoshi": [
+ "atardecer.mw3",
+ "gum.mw3",
+ "lava_island.mw3",
+ "mono.mw3",
+ "original.mw3",
+ "original_special.mw3",
+ "sepia.mw3",
+ "snow_day.mw3",
+ "sunset.mw3",
+ "tritanopia.mw3",
+ "yochis_ailand.mw3"
+ ],
+ "vanilla": [
+ "aqua_marine.mw3",
+ "dark cave.mw3",
+ "DOMO.mw3",
+ "fire cave.mw3",
+ "gold_mine.mw3",
+ "invertido.mw3",
+ "mono.mw3",
+ "original.mw3",
+ "original_special.mw3",
+ "purple.mw3",
+ "sepia.mw3",
+ "witches_cauldron.mw3"
+ ],
+ "forest": [
+ "atardecer.mw3",
+ "burnt_forest.mw3",
+ "dark_forest.mw3",
+ "halloween.mw3",
+ "ice_forest.mw3",
+ "lost_woods.mw3",
+ "mono.mw3",
+ "original.mw3",
+ "original_special.mw3",
+ "sepia.mw3",
+ "snow_day.mw3"
+ ],
+ "valley": [
+ "bowser.mw3",
+ "castle_colors.mw3",
+ "dark cave.mw3",
+ "dream_world.mw3",
+ "fire cave.mw3",
+ "invertido.mw3",
+ "mono.mw3",
+ "orange.mw3",
+ "original.mw3",
+ "original_special.mw3",
+ "purple_blue.mw3",
+ "sepia.mw3",
+ "snow.mw3",
+ "Tamaulipas.mw3"
+ ],
+ "special": [
+ "black_out.mw3",
+ "blood_star.mw3",
+ "brawler.mw3",
+ "green.mw3",
+ "light_pollution_map.mw3",
+ "original.mw3",
+ "purple.mw3",
+ "white_special.mw3"
+ ],
+ "star": [
+ "blood_moon.mw3",
+ "mono.mw3",
+ "mountain_top.mw3",
+ "original.mw3",
+ "original_special.mw3",
+ "pink_star.mw3",
+ "sepia.mw3",
+ "yellow_star.mw3"
+ ]
+}
\ No newline at end of file
diff --git a/worlds/smw/data/palettes/map/special/black_out.mw3 b/worlds/smw/data/palettes/map/special/black_out.mw3
new file mode 100644
index 0000000000..52d4e6d4a4
Binary files /dev/null and b/worlds/smw/data/palettes/map/special/black_out.mw3 differ
diff --git a/worlds/smw/data/palettes/map/special/blood_star.mw3 b/worlds/smw/data/palettes/map/special/blood_star.mw3
new file mode 100644
index 0000000000..bc778b202b
Binary files /dev/null and b/worlds/smw/data/palettes/map/special/blood_star.mw3 differ
diff --git a/worlds/smw/data/palettes/map/special/brawler.mw3 b/worlds/smw/data/palettes/map/special/brawler.mw3
new file mode 100644
index 0000000000..595edb0493
Binary files /dev/null and b/worlds/smw/data/palettes/map/special/brawler.mw3 differ
diff --git a/worlds/smw/data/palettes/map/special/green.mw3 b/worlds/smw/data/palettes/map/special/green.mw3
new file mode 100644
index 0000000000..2bdb5fd4e0
Binary files /dev/null and b/worlds/smw/data/palettes/map/special/green.mw3 differ
diff --git a/worlds/smw/data/palettes/map/special/light_pollution_map.mw3 b/worlds/smw/data/palettes/map/special/light_pollution_map.mw3
new file mode 100644
index 0000000000..a1bc6bbcf9
Binary files /dev/null and b/worlds/smw/data/palettes/map/special/light_pollution_map.mw3 differ
diff --git a/worlds/smw/data/palettes/map/special/original.mw3 b/worlds/smw/data/palettes/map/special/original.mw3
new file mode 100644
index 0000000000..0a75a99a04
Binary files /dev/null and b/worlds/smw/data/palettes/map/special/original.mw3 differ
diff --git a/worlds/smw/data/palettes/map/special/purple.mw3 b/worlds/smw/data/palettes/map/special/purple.mw3
new file mode 100644
index 0000000000..122b5c785a
Binary files /dev/null and b/worlds/smw/data/palettes/map/special/purple.mw3 differ
diff --git a/worlds/smw/data/palettes/map/special/white_special.mw3 b/worlds/smw/data/palettes/map/special/white_special.mw3
new file mode 100644
index 0000000000..e4d2613aa9
Binary files /dev/null and b/worlds/smw/data/palettes/map/special/white_special.mw3 differ
diff --git a/worlds/smw/data/palettes/map/star/blood_moon.mw3 b/worlds/smw/data/palettes/map/star/blood_moon.mw3
new file mode 100644
index 0000000000..42f155ef33
Binary files /dev/null and b/worlds/smw/data/palettes/map/star/blood_moon.mw3 differ
diff --git a/worlds/smw/data/palettes/map/star/mono.mw3 b/worlds/smw/data/palettes/map/star/mono.mw3
new file mode 100644
index 0000000000..15d33bdf3a
Binary files /dev/null and b/worlds/smw/data/palettes/map/star/mono.mw3 differ
diff --git a/worlds/smw/data/palettes/map/star/mountain_top.mw3 b/worlds/smw/data/palettes/map/star/mountain_top.mw3
new file mode 100644
index 0000000000..d2b96b0e3d
Binary files /dev/null and b/worlds/smw/data/palettes/map/star/mountain_top.mw3 differ
diff --git a/worlds/smw/data/palettes/map/star/original.mw3 b/worlds/smw/data/palettes/map/star/original.mw3
new file mode 100644
index 0000000000..2107a5555e
Binary files /dev/null and b/worlds/smw/data/palettes/map/star/original.mw3 differ
diff --git a/worlds/smw/data/palettes/map/star/original_special.mw3 b/worlds/smw/data/palettes/map/star/original_special.mw3
new file mode 100644
index 0000000000..d2bd439c97
Binary files /dev/null and b/worlds/smw/data/palettes/map/star/original_special.mw3 differ
diff --git a/worlds/smw/data/palettes/map/star/pink_star.mw3 b/worlds/smw/data/palettes/map/star/pink_star.mw3
new file mode 100644
index 0000000000..55f68ecf6c
Binary files /dev/null and b/worlds/smw/data/palettes/map/star/pink_star.mw3 differ
diff --git a/worlds/smw/data/palettes/map/star/sepia.mw3 b/worlds/smw/data/palettes/map/star/sepia.mw3
new file mode 100644
index 0000000000..4c6a5f3c1d
Binary files /dev/null and b/worlds/smw/data/palettes/map/star/sepia.mw3 differ
diff --git a/worlds/smw/data/palettes/map/star/yellow_star.mw3 b/worlds/smw/data/palettes/map/star/yellow_star.mw3
new file mode 100644
index 0000000000..9602890395
Binary files /dev/null and b/worlds/smw/data/palettes/map/star/yellow_star.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/Tamaulipas.mw3 b/worlds/smw/data/palettes/map/valley/Tamaulipas.mw3
new file mode 100644
index 0000000000..0cb18cc2fd
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/Tamaulipas.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/bowser.mw3 b/worlds/smw/data/palettes/map/valley/bowser.mw3
new file mode 100644
index 0000000000..f3d6c23aa0
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/bowser.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/castle_colors.mw3 b/worlds/smw/data/palettes/map/valley/castle_colors.mw3
new file mode 100644
index 0000000000..7e245cc64e
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/castle_colors.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/dark cave.mw3 b/worlds/smw/data/palettes/map/valley/dark cave.mw3
new file mode 100644
index 0000000000..2b6c0f57cc
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/dark cave.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/dream_world.mw3 b/worlds/smw/data/palettes/map/valley/dream_world.mw3
new file mode 100644
index 0000000000..bcf8d95142
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/dream_world.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/fire cave.mw3 b/worlds/smw/data/palettes/map/valley/fire cave.mw3
new file mode 100644
index 0000000000..2980210dd2
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/fire cave.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/invertido.mw3 b/worlds/smw/data/palettes/map/valley/invertido.mw3
new file mode 100644
index 0000000000..37cf2e9f50
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/invertido.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/mono.mw3 b/worlds/smw/data/palettes/map/valley/mono.mw3
new file mode 100644
index 0000000000..f96409bebb
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/mono.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/orange.mw3 b/worlds/smw/data/palettes/map/valley/orange.mw3
new file mode 100644
index 0000000000..c9f6ac2ff2
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/orange.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/original.mw3 b/worlds/smw/data/palettes/map/valley/original.mw3
new file mode 100644
index 0000000000..c165e81b81
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/original.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/original_special.mw3 b/worlds/smw/data/palettes/map/valley/original_special.mw3
new file mode 100644
index 0000000000..a4a0acda9e
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/original_special.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/purple_blue.mw3 b/worlds/smw/data/palettes/map/valley/purple_blue.mw3
new file mode 100644
index 0000000000..2342f0acd2
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/purple_blue.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/sepia.mw3 b/worlds/smw/data/palettes/map/valley/sepia.mw3
new file mode 100644
index 0000000000..aa5aeb51d3
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/sepia.mw3 differ
diff --git a/worlds/smw/data/palettes/map/valley/snow.mw3 b/worlds/smw/data/palettes/map/valley/snow.mw3
new file mode 100644
index 0000000000..185d0d42c7
Binary files /dev/null and b/worlds/smw/data/palettes/map/valley/snow.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/DOMO.mw3 b/worlds/smw/data/palettes/map/vanilla/DOMO.mw3
new file mode 100644
index 0000000000..5956380770
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/DOMO.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/aqua_marine.mw3 b/worlds/smw/data/palettes/map/vanilla/aqua_marine.mw3
new file mode 100644
index 0000000000..b382964de0
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/aqua_marine.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/dark cave.mw3 b/worlds/smw/data/palettes/map/vanilla/dark cave.mw3
new file mode 100644
index 0000000000..2b6c0f57cc
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/dark cave.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/fire cave.mw3 b/worlds/smw/data/palettes/map/vanilla/fire cave.mw3
new file mode 100644
index 0000000000..2980210dd2
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/fire cave.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/gold_mine.mw3 b/worlds/smw/data/palettes/map/vanilla/gold_mine.mw3
new file mode 100644
index 0000000000..ad5460a75e
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/gold_mine.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/invertido.mw3 b/worlds/smw/data/palettes/map/vanilla/invertido.mw3
new file mode 100644
index 0000000000..37cf2e9f50
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/invertido.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/mono.mw3 b/worlds/smw/data/palettes/map/vanilla/mono.mw3
new file mode 100644
index 0000000000..f96409bebb
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/mono.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/original.mw3 b/worlds/smw/data/palettes/map/vanilla/original.mw3
new file mode 100644
index 0000000000..c165e81b81
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/original.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/original_special.mw3 b/worlds/smw/data/palettes/map/vanilla/original_special.mw3
new file mode 100644
index 0000000000..a4a0acda9e
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/original_special.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/purple.mw3 b/worlds/smw/data/palettes/map/vanilla/purple.mw3
new file mode 100644
index 0000000000..db0008bca7
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/purple.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/sepia.mw3 b/worlds/smw/data/palettes/map/vanilla/sepia.mw3
new file mode 100644
index 0000000000..aa5aeb51d3
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/sepia.mw3 differ
diff --git a/worlds/smw/data/palettes/map/vanilla/witches_cauldron.mw3 b/worlds/smw/data/palettes/map/vanilla/witches_cauldron.mw3
new file mode 100644
index 0000000000..ef6a81e5d4
Binary files /dev/null and b/worlds/smw/data/palettes/map/vanilla/witches_cauldron.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/atardecer.mw3 b/worlds/smw/data/palettes/map/yoshi/atardecer.mw3
new file mode 100644
index 0000000000..a75c898cee
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/atardecer.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/gum.mw3 b/worlds/smw/data/palettes/map/yoshi/gum.mw3
new file mode 100644
index 0000000000..cfde2f53bb
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/gum.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/lava_island.mw3 b/worlds/smw/data/palettes/map/yoshi/lava_island.mw3
new file mode 100644
index 0000000000..570bdee3aa
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/lava_island.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/mono.mw3 b/worlds/smw/data/palettes/map/yoshi/mono.mw3
new file mode 100644
index 0000000000..62c9761b46
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/mono.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/original.mw3 b/worlds/smw/data/palettes/map/yoshi/original.mw3
new file mode 100644
index 0000000000..eb9451b1fe
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/original.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/original_special.mw3 b/worlds/smw/data/palettes/map/yoshi/original_special.mw3
new file mode 100644
index 0000000000..269b45db61
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/original_special.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/sepia.mw3 b/worlds/smw/data/palettes/map/yoshi/sepia.mw3
new file mode 100644
index 0000000000..3cbf6b0390
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/sepia.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/snow_day.mw3 b/worlds/smw/data/palettes/map/yoshi/snow_day.mw3
new file mode 100644
index 0000000000..464b32bad1
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/snow_day.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/sunset.mw3 b/worlds/smw/data/palettes/map/yoshi/sunset.mw3
new file mode 100644
index 0000000000..9477a08cb8
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/sunset.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/tritanopia.mw3 b/worlds/smw/data/palettes/map/yoshi/tritanopia.mw3
new file mode 100644
index 0000000000..c90b7f9af0
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/tritanopia.mw3 differ
diff --git a/worlds/smw/data/palettes/map/yoshi/yochis_ailand.mw3 b/worlds/smw/data/palettes/map/yoshi/yochis_ailand.mw3
new file mode 100644
index 0000000000..3e1de6680d
Binary files /dev/null and b/worlds/smw/data/palettes/map/yoshi/yochis_ailand.mw3 differ
diff --git a/worlds/smz3/Client.py b/worlds/smz3/Client.py
index b07aa850c3..0a248aa5d3 100644
--- a/worlds/smz3/Client.py
+++ b/worlds/smz3/Client.py
@@ -32,6 +32,7 @@ SMZ3_RECV_ITEM_PLAYER_ADDR = SAVEDATA_START + 0x4D3 # 1 byte
class SMZ3SNIClient(SNIClient):
game = "SMZ3"
+ patch_suffix = ".apsmz3"
async def validate_rom(self, ctx):
from SNIClient import snes_buffered_write, snes_flush_writes, snes_read
diff --git a/worlds/smz3/docs/multiworld_en.md b/worlds/smz3/docs/multiworld_en.md
index fadd55028f..5e226798a3 100644
--- a/worlds/smz3/docs/multiworld_en.md
+++ b/worlds/smz3/docs/multiworld_en.md
@@ -2,16 +2,18 @@
## Required Software
-- One of the client programs:
- - [SNIClient](https://github.com/ArchipelagoMW/Archipelago/releases), included with the main
- Archipelago install.
-- Hardware or software capable of loading and playing SNES ROM files
- - An emulator capable of connecting to SNI such as:
- - snes9x-rr from: [snes9x rr](https://github.com/gocha/snes9x-rr/releases),
- - BizHawk from: [TASVideos](https://tasvideos.org/BizHawk), or
- - RetroArch 1.10.3 or newer from: [RetroArch Website](https://retroarch.com?page=platforms). Or,
- - An SD2SNES, FXPak Pro ([FXPak Pro Store Page](https://krikzz.com/store/home/54-fxpak-pro.html)), or other
- compatible hardware
+- [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases).
+- [SNI](https://github.com/alttpo/sni/releases). This is automatically included with your Archipelago installation above.
+- SNI is not compatible with (Q)Usb2Snes.
+- Hardware or software capable of loading and playing SNES ROM files, including:
+ - An emulator capable of connecting to SNI
+ ([snes9x-nwa](https://github.com/Skarsnik/snes9x-emunwa/releases), [snes9x-rr](https://github.com/gocha/snes9x-rr/releases),
+ [BSNES-plus](https://github.com/black-sliver/bsnes-plus),
+ [BizHawk](http://tasvideos.org/BizHawk.html), or
+ [RetroArch](https://retroarch.com?page=platforms) 1.10.1 or newer)
+ - An SD2SNES, [FXPak Pro](https://krikzz.com/store/home/54-fxpak-pro.html), or other compatible hardware. **note:
+ modded SNES minis are currently not supported by SNI. Some users have claimed success with QUsb2Snes for this system,
+ but it is not supported.**
- Your legally obtained Super Metroid ROM file, probably named `Super Metroid (Japan, USA).sfc` and
Your Japanese Zelda3 v1.0 ROM file, probably named `Zelda no Densetsu - Kamigami no Triforce (Japan).sfc`
@@ -78,6 +80,11 @@ client, and will also create your ROM in the same place as your patch file.
When the client launched automatically, SNI should have also automatically launched in the background. If this is its
first time launching, you may be prompted to allow it to communicate through the Windows Firewall.
+#### snes9x-nwa
+
+1. Click on the Network Menu and check **Enable Emu Network Control**
+2. Load your ROM file if it hasn't already been loaded.
+
##### snes9x-rr
1. Load your ROM file if it hasn't already been loaded.
@@ -89,6 +96,11 @@ first time launching, you may be prompted to allow it to communicate through the
6. If you see an error while loading the script that states `socket.dll missing` or similar, navigate to the folder of
the lua you are using in your file explorer and copy the `socket.dll` to the base folder of your snes9x install.
+#### BSNES-Plus
+
+1. Load your ROM file if it hasn't already been loaded.
+2. The emulator should automatically connect while SNI is running.
+
##### BizHawk
1. Ensure you have the BSNES core loaded. This is done with the main menubar, under:
diff --git a/worlds/soe/docs/multiworld_en.md b/worlds/soe/docs/multiworld_en.md
index 58b9aabf6a..89b1ff9fd9 100644
--- a/worlds/soe/docs/multiworld_en.md
+++ b/worlds/soe/docs/multiworld_en.md
@@ -2,16 +2,18 @@
## Required Software
-- SNI from: [SNI Releases Page](https://github.com/alttpo/sni/releases)
- - v0.0.59 or newer (included in Archipelago 0.2.1 setup)
-- Hardware or software capable of loading and playing SNES ROM files
- - An emulator capable of connecting to SNI with ROM access. Any one of the following will work:
- - snes9x-rr from: [snes9x-rr Releases Page](https://github.com/gocha/snes9x-rr/releases)
- - BizHawk from: [TASVideos](https://tasvideos.org/BizHawk)
- - bsnes-plus-nwa from: [bsnes-plus GitHub](https://github.com/black-sliver/bsnes-plus)
- - RetroArch from: [RetroArch Website](https://retroarch.com?page=platforms). Or,
- - Or SD2SNES, FXPak Pro ([FXPak Pro Store Page](https://krikzz.com/store/home/54-fxpak-pro.html)), or other
- compatible hardware.
+- [Archipelago](https://github.com/ArchipelagoMW/Archipelago/releases).
+- [SNI](https://github.com/alttpo/sni/releases). This is automatically included with your Archipelago installation above.
+- SNI is not compatible with (Q)Usb2Snes.
+- Hardware or software capable of loading and playing SNES ROM files, including:
+ - An emulator capable of connecting to SNI
+ ([snes9x-nwa](https://github.com/Skarsnik/snes9x-emunwa/releases), [snes9x-rr](https://github.com/gocha/snes9x-rr/releases),
+ [BSNES-plus](https://github.com/black-sliver/bsnes-plus),
+ [BizHawk](http://tasvideos.org/BizHawk.html), or
+ [RetroArch](https://retroarch.com?page=platforms) 1.10.1 or newer)
+ - An SD2SNES, [FXPak Pro](https://krikzz.com/store/home/54-fxpak-pro.html), or other compatible hardware. **note:
+ modded SNES minis are currently not supported by SNI. Some users have claimed success with QUsb2Snes for this system,
+ but it is not supported.**
- Your legally obtained Secret of Evermore US ROM file, probably named `Secret of Evermore (USA).sfc`
## Create a Config (.yaml) File
@@ -63,6 +65,11 @@ page: [Evermizer apbpatch Page](https://evermizer.com/apbpatch)
Start SNI either from the Archipelago install folder or the stand-alone version. If this is its first time launching,
you may be prompted to allow it to communicate through the Windows Firewall.
+#### snes9x-nwa
+
+1. Click on the Network Menu and check **Enable Emu Network Control**
+2. Load your ROM file if it hasn't already been loaded.
+
##### snes9x-rr
1. Load your ROM file if it hasn't already been loaded.
diff --git a/worlds/soe/options.py b/worlds/soe/options.py
index cb9e9bb6de..c5ac02c22d 100644
--- a/worlds/soe/options.py
+++ b/worlds/soe/options.py
@@ -1,5 +1,5 @@
from dataclasses import dataclass, fields
-from typing import Any, cast, Dict, Iterator, List, Tuple, Protocol
+from typing import Any, ClassVar, cast, Dict, Iterator, List, Tuple, Protocol
from Options import AssembleOptions, Choice, DeathLink, DefaultOnToggle, Option, PerGameCommonOptions, \
ProgressionBalancing, Range, Toggle
@@ -8,13 +8,13 @@ from Options import AssembleOptions, Choice, DeathLink, DefaultOnToggle, Option,
# typing boilerplate
class FlagsProtocol(Protocol):
value: int
- default: int
+ default: ClassVar[int]
flags: List[str]
class FlagProtocol(Protocol):
value: int
- default: int
+ default: ClassVar[int]
flag: str
diff --git a/worlds/stardew_valley/test/__init__.py b/worlds/stardew_valley/test/__init__.py
index ba037f7a65..948fb83b0b 100644
--- a/worlds/stardew_valley/test/__init__.py
+++ b/worlds/stardew_valley/test/__init__.py
@@ -124,8 +124,7 @@ def setup_solo_multiworld(test_options=None, seed=None,
if frozen_options in _cache:
return _cache[frozen_options]
- multiworld = setup_base_solo_multiworld(StardewValleyWorld, ())
- multiworld.set_seed(seed)
+ multiworld = setup_base_solo_multiworld(StardewValleyWorld, (), seed=seed)
# print(f"Seed: {multiworld.seed}") # Uncomment to print the seed for every test
args = Namespace()
for name, option in StardewValleyWorld.options_dataclass.type_hints.items():
diff --git a/worlds/terraria/Rules.dsv b/worlds/terraria/Rules.dsv
index 43a21b4957..38ca4e575f 100644
--- a/worlds/terraria/Rules.dsv
+++ b/worlds/terraria/Rules.dsv
@@ -207,7 +207,7 @@ Clothier; Npc;
Dungeon; ; Skeletron;
Dungeon Heist; Achievement; Dungeon;
Bone; ; Dungeon | (@calamity & #Skeletron);
-Bewitching Table; Minions(1); Dungeon;
+Bewitching Table; Minions(1); Dungeon | (Witch Doctor & Wizard);
Mechanic; ; Dungeon;
Wire; ; Mechanic;
Decryption Computer; Calamity; Mysterious Circuitry & Dubious Plating & Wire;
diff --git a/worlds/witness/WitnessItems.txt b/worlds/witness/WitnessItems.txt
index 6f63eccc95..28dc4a4d97 100644
--- a/worlds/witness/WitnessItems.txt
+++ b/worlds/witness/WitnessItems.txt
@@ -265,6 +265,13 @@ Doors:
2165 - Caves Panels - 0x3369D,0x00FF8,0x0A16E,0x335AB,0x335AC
2170 - Tunnels Panels - 0x09E85,0x039B4
+2200 - Desert Obelisk Key - 0x0332B,0x03367,0x28B8A,0x037B6,0x037B2,0x000F7,0x3351D,0x0053C,0x00771,0x335C8,0x335C9,0x337F8,0x037BB,0x220E4,0x220E5,0x334B9,0x334BC,0x22106,0x0A14C,0x0A14D,0x00359
+2201 - Monastery Obelisk Key - 0x03ABC,0x03ABE,0x03AC0,0x03AC4,0x03AC5,0x03BE2,0x03BE3,0x0A409,0x006E5,0x006E6,0x006E7,0x034A7,0x034AD,0x034AF,0x03DAB,0x03DAC,0x03DAD,0x03E01,0x289F4,0x289F5,0x00263
+2202 - Treehouse Obelisk Key - 0x0053D,0x0053E,0x00769,0x33721,0x220A7,0x220BD,0x03B22,0x03B23,0x03B24,0x03B25,0x03A79,0x28ABD,0x28ABE,0x3388F,0x28B29,0x28B2A,0x018B6,0x033BE,0x033BF,0x033DD,0x033E5,0x28AE9,0x3348F,0x00097
+2203 - Mountainside Obelisk Key - 0x001A3,0x335AE,0x000D3,0x035F5,0x09D5D,0x09D5E,0x09D63,0x3370E,0x035DE,0x03601,0x03603,0x03D0D,0x3369A,0x336C8,0x33505,0x03A9E,0x016B2,0x3365F,0x03731,0x036CE,0x03C07,0x03A93,0x03AA6,0x3397C,0x0105D,0x0A304,0x035CB,0x035CF,0x00367
+2204 - Quarry Obelisk Key - 0x28A7B,0x005F6,0x00859,0x17CB9,0x28A4A,0x334B6,0x00614,0x0069D,0x28A4C,0x289CF,0x289D1,0x33692,0x03E77,0x03E7C,0x22073
+2205 - Town Obelisk Key - 0x035C7,0x01848,0x03D06,0x33530,0x33600,0x28A2F,0x28A37,0x334A3,0x3352F,0x33857,0x33879,0x03C19,0x28B30,0x035C9,0x03335,0x03412,0x038A6,0x038AA,0x03E3F,0x03E40,0x28B8E,0x28B91,0x03BCE,0x03BCF,0x03BD1,0x339B6,0x33A20,0x33A29,0x33A2A,0x33B06,0x0A16C
+
Lasers:
1500 - Symmetry Laser - 0x00509
1501 - Desert Laser - 0x012FB
diff --git a/worlds/witness/__init__.py b/worlds/witness/__init__.py
index bd877a16ef..88de0f3134 100644
--- a/worlds/witness/__init__.py
+++ b/worlds/witness/__init__.py
@@ -89,6 +89,46 @@ class WitnessWorld(World):
'entity_to_name': StaticWitnessLogic.ENTITY_ID_TO_NAME,
}
+ def determine_sufficient_progression(self):
+ """
+ Determine whether there are enough progression items in this world to consider it "interactive".
+ In the case of singleplayer, this just outputs a warning.
+ In the case of multiplayer, the requirements are a bit stricter and an Exception is raised.
+ """
+
+ # A note on Obelisk Keys:
+ # Obelisk Keys are never relevant in singleplayer, because the locations they lock are irrelevant to in-game
+ # progress and irrelevant to all victory conditions. Thus, I consider them "fake progression" for singleplayer.
+ # However, those locations could obviously contain big items needed for other players, so I consider
+ # "Obelisk Keys only" valid for multiworld.
+
+ # A note on Laser Shuffle:
+ # In singleplayer, I don't mind "Ice Rod Hunt" type gameplay, so "laser shuffle only" is valid.
+ # However, I do not want to allow "Ice Rod Hunt" style gameplay in multiworld, so "laser shuffle only" is
+ # not considered interactive enough for multiworld.
+
+ interacts_sufficiently_with_multiworld = (
+ self.options.shuffle_symbols
+ or self.options.shuffle_doors
+ or self.options.obelisk_keys and self.options.shuffle_EPs
+ )
+
+ has_locally_relevant_progression = (
+ self.options.shuffle_symbols
+ or self.options.shuffle_doors
+ or self.options.shuffle_lasers
+ or self.options.shuffle_boat
+ or self.options.early_caves == "add_to_pool" and self.options.victory_condition == "challenge"
+ )
+
+ if not has_locally_relevant_progression and self.multiworld.players == 1:
+ warning(f"{self.multiworld.get_player_name(self.player)}'s Witness world doesn't have any progression"
+ f" items. Please turn on Symbol Shuffle, Door Shuffle or Laser Shuffle if that doesn't seem right.")
+ elif not interacts_sufficiently_with_multiworld and self.multiworld.players > 1:
+ raise Exception(f"{self.multiworld.get_player_name(self.player)}'s Witness world doesn't have enough"
+ f" progression items that can be placed in other players' worlds. Please turn on Symbol"
+ f" Shuffle, Door Shuffle or Obelisk Keys.")
+
def generate_early(self):
disabled_locations = self.options.exclude_locations.value
@@ -102,26 +142,9 @@ class WitnessWorld(World):
)
self.regio: WitnessRegions = WitnessRegions(self.locat, self)
- interacts_with_multiworld = (
- self.options.shuffle_symbols or
- self.options.shuffle_doors or
- self.options.shuffle_lasers == "anywhere"
- )
+ self.log_ids_to_hints = dict()
- has_progression = (
- interacts_with_multiworld
- or self.options.shuffle_lasers == "local"
- or self.options.shuffle_boat
- or self.options.early_caves == "add_to_pool"
- )
-
- if not has_progression and self.multiworld.players == 1:
- warning(f"{self.multiworld.get_player_name(self.player)}'s Witness world doesn't have any progression"
- f" items. Please turn on Symbol Shuffle, Door Shuffle or Laser Shuffle if that doesn't seem right.")
- elif not interacts_with_multiworld and self.multiworld.players > 1:
- raise Exception(f"{self.multiworld.get_player_name(self.player)}'s Witness world doesn't have enough"
- f" progression items that can be placed in other players' worlds. Please turn on Symbol"
- f" Shuffle, Door Shuffle or non-local Laser Shuffle.")
+ self.determine_sufficient_progression()
if self.options.shuffle_lasers == "local":
self.options.local_items.value |= self.item_name_groups["Lasers"]
@@ -306,7 +329,6 @@ class WitnessWorld(World):
duplicates = min(3, len(audio_logs) // hint_amount)
for hint in generated_hints:
- hint = generated_hints.pop(0)
compact_hint_data = make_compact_hint_data(hint, self.player)
for _ in range(0, duplicates):
diff --git a/worlds/witness/options.py b/worlds/witness/options.py
index a24896e1d0..5bce3e3a22 100644
--- a/worlds/witness/options.py
+++ b/worlds/witness/options.py
@@ -23,8 +23,11 @@ class EarlyCaves(Choice):
If you choose "add_to_pool" and you are already playing a remote Door Shuffle mode, this setting will do nothing."""
display_name = "Early Caves"
option_off = 0
+ alias_false = 0
option_add_to_pool = 1
option_starting_inventory = 2
+ alias_true = 2
+ alias_on = 2
class ShuffleSymbols(DefaultOnToggle):
@@ -39,8 +42,11 @@ class ShuffleLasers(Choice):
be redirected as normal, for both applications of redirection."""
display_name = "Shuffle Lasers"
option_off = 0
+ alias_false = 0
option_local = 1
option_anywhere = 2
+ alias_true = 2
+ alias_on = 2
class ShuffleDoors(Choice):
@@ -114,6 +120,14 @@ class EnvironmentalPuzzlesDifficulty(Choice):
option_eclipse = 2
+class ObeliskKeys(DefaultOnToggle):
+ """
+ Add one Obelisk Key item per Obelisk, locking you out of solving any of the associated Environmental Puzzles.
+ Does nothing if "Shuffle Environmental Puzzles" is set to "off".
+ """
+ display_name = "Obelisk Keys"
+
+
class ShufflePostgame(Toggle):
"""Adds locations into the pool that are guaranteed to become accessible after or at the same time as your goal.
Use this if you don't play with release on victory. IMPORTANT NOTE: The possibility of your second
@@ -257,6 +271,7 @@ class TheWitnessOptions(PerGameCommonOptions):
disable_non_randomized_puzzles: DisableNonRandomizedPuzzles
shuffle_discarded_panels: ShuffleDiscardedPanels
shuffle_vault_boxes: ShuffleVaultBoxes
+ obelisk_keys: ObeliskKeys
shuffle_EPs: ShuffleEnvironmentalPuzzles
EP_difficulty: EnvironmentalPuzzlesDifficulty
shuffle_postgame: ShufflePostgame
diff --git a/worlds/witness/player_logic.py b/worlds/witness/player_logic.py
index 229da0a287..099a3a64e6 100644
--- a/worlds/witness/player_logic.py
+++ b/worlds/witness/player_logic.py
@@ -63,26 +63,30 @@ class WitnessPlayerLogic:
if panel_hex in self.DOOR_ITEMS_BY_ID:
door_items = frozenset({frozenset([item]) for item in self.DOOR_ITEMS_BY_ID[panel_hex]})
- all_options = set()
+ all_options: Set[FrozenSet[str]] = set()
for dependentItem in door_items:
self.PROG_ITEMS_ACTUALLY_IN_THE_GAME_NO_MULTI.update(dependentItem)
for items_option in these_items:
all_options.add(items_option.union(dependentItem))
- # 0x28A0D depends on another entity for *non-power* reasons -> This dependency needs to be preserved,
- # except in Expert, where that dependency doesn't exist, but now there *is* a power dependency.
- # In the future, it would be wise to make a distinction between "power dependencies" and other dependencies.
- if panel_hex == "0x28A0D" and not any("0x28998" in option for option in these_panels):
- these_items = all_options
+ # If this entity is not an EP, and it has an associated door item, ignore the original power dependencies
+ if StaticWitnessLogic.ENTITIES_BY_HEX[panel_hex]["entityType"] != "EP":
+ # 0x28A0D depends on another entity for *non-power* reasons -> This dependency needs to be preserved,
+ # except in Expert, where that dependency doesn't exist, but now there *is* a power dependency.
+ # In the future, it'd be wise to make a distinction between "power dependencies" and other dependencies.
+ if panel_hex == "0x28A0D" and not any("0x28998" in option for option in these_panels):
+ these_items = all_options
- # Another dependency that is not power-based: The Symmetry Island Upper Panel latches
- elif panel_hex == "0x1C349":
- these_items = all_options
+ # Another dependency that is not power-based: The Symmetry Island Upper Panel latches
+ elif panel_hex == "0x1C349":
+ these_items = all_options
+
+ else:
+ return frozenset(all_options)
- # For any other door entity, we just return a set with the item that opens it & disregard power dependencies
else:
- return frozenset(all_options)
+ these_items = all_options
disabled_eps = {eHex for eHex in self.COMPLETELY_DISABLED_ENTITIES
if self.REFERENCE_LOGIC.ENTITIES_BY_HEX[eHex]["entityType"] == "EP"}
@@ -429,6 +433,9 @@ class WitnessPlayerLogic:
if lasers:
adjustment_linesets_in_order.append(get_laser_shuffle())
+ if world.options.shuffle_EPs and world.options.obelisk_keys:
+ adjustment_linesets_in_order.append(get_obelisk_keys())
+
if world.options.shuffle_EPs == "obelisk_sides":
ep_gen = ((ep_hex, ep_obj) for (ep_hex, ep_obj) in self.REFERENCE_LOGIC.ENTITIES_BY_HEX.items()
if ep_obj["entityType"] == "EP")
@@ -442,7 +449,7 @@ class WitnessPlayerLogic:
adjustment_linesets_in_order.append(["Disabled Locations:"] + get_ep_obelisks()[1:])
if not world.options.shuffle_EPs:
- adjustment_linesets_in_order.append(["Irrelevant Locations:"] + get_ep_all_individual()[1:])
+ adjustment_linesets_in_order.append(["Disabled Locations:"] + get_ep_all_individual()[1:])
for yaml_disabled_location in self.YAML_DISABLED_LOCATIONS:
if yaml_disabled_location not in self.REFERENCE_LOGIC.ENTITIES_BY_NAME:
diff --git a/worlds/witness/presets.py b/worlds/witness/presets.py
index 0f37fd50a3..2a53484a4c 100644
--- a/worlds/witness/presets.py
+++ b/worlds/witness/presets.py
@@ -14,6 +14,7 @@ witness_option_presets: Dict[str, Dict[str, Any]] = {
"door_groupings": DoorGroupings.option_off,
"shuffle_boat": True,
"shuffle_lasers": ShuffleLasers.option_local,
+ "obelisk_keys": ObeliskKeys.option_false,
"disable_non_randomized_puzzles": True,
"shuffle_discarded_panels": False,
@@ -35,6 +36,7 @@ witness_option_presets: Dict[str, Dict[str, Any]] = {
"area_hint_percentage": AreaHintPercentage.default,
"laser_hints": LaserHints.default,
"death_link": DeathLink.default,
+ "death_link_amnesty": DeathLinkAmnesty.default,
},
# For relative beginners who want to move to the next step.
@@ -48,6 +50,7 @@ witness_option_presets: Dict[str, Dict[str, Any]] = {
"door_groupings": DoorGroupings.option_regional,
"shuffle_boat": True,
"shuffle_lasers": ShuffleLasers.option_off,
+ "obelisk_keys": ObeliskKeys.option_false,
"disable_non_randomized_puzzles": False,
"shuffle_discarded_panels": True,
@@ -69,6 +72,7 @@ witness_option_presets: Dict[str, Dict[str, Any]] = {
"area_hint_percentage": AreaHintPercentage.default,
"laser_hints": LaserHints.default,
"death_link": DeathLink.default,
+ "death_link_amnesty": DeathLinkAmnesty.default,
},
# Allsanity but without the BS (no expert, no tedious EPs).
@@ -82,6 +86,7 @@ witness_option_presets: Dict[str, Dict[str, Any]] = {
"door_groupings": DoorGroupings.option_off,
"shuffle_boat": True,
"shuffle_lasers": ShuffleLasers.option_anywhere,
+ "obelisk_keys": ObeliskKeys.option_true,
"disable_non_randomized_puzzles": False,
"shuffle_discarded_panels": True,
@@ -103,5 +108,6 @@ witness_option_presets: Dict[str, Dict[str, Any]] = {
"area_hint_percentage": AreaHintPercentage.default,
"laser_hints": LaserHints.default,
"death_link": DeathLink.default,
+ "death_link_amnesty": DeathLinkAmnesty.default,
},
}
diff --git a/worlds/witness/settings/Door_Shuffle/Obelisk_Keys.txt b/worlds/witness/settings/Door_Shuffle/Obelisk_Keys.txt
new file mode 100644
index 0000000000..9ebcc9fa2f
--- /dev/null
+++ b/worlds/witness/settings/Door_Shuffle/Obelisk_Keys.txt
@@ -0,0 +1,7 @@
+Items:
+Desert Obelisk Key
+Monastery Obelisk Key
+Treehouse Obelisk Key
+Mountainside Obelisk Key
+Quarry Obelisk Key
+Town Obelisk Key
\ No newline at end of file
diff --git a/worlds/witness/utils.py b/worlds/witness/utils.py
index b1f1b6d831..43e039475d 100644
--- a/worlds/witness/utils.py
+++ b/worlds/witness/utils.py
@@ -177,6 +177,10 @@ def get_ep_obelisks() -> List[str]:
return get_adjustment_file("settings/EP_Shuffle/EP_Sides.txt")
+def get_obelisk_keys() -> List[str]:
+ return get_adjustment_file("settings/Door_Shuffle/Obelisk_Keys.txt")
+
+
def get_ep_easy() -> List[str]:
return get_adjustment_file("settings/EP_Shuffle/EP_Easy.txt")