Module pyboy.plugins.game_wrapper_pokemon_gen1_constants

Constants to use

Expand source code
#
# License: See LICENSE.md file
# GitHub: https://github.com/Baekalfen/PyBoy
#

"""
Constants to use

"""

# Constants found in disassembly: https://github.com/pret/pokered
PARTY_COUNT_ADDRESS = 0xD163
PARTY_SPECIES_ADDRESS = 0xD164
PARTY_MONS_ADDRESS = 0xD16B
PARTY_MON_SIZE = 0x2C
PARTY_LENGTH = 6
PARTY_SPECIES_SENTINEL = 0xFF
PLAYER_MONEY_ADDRESS = 0xD347
BAG_ITEM_COUNT_ADDRESS = 0xD31D
BAG_ITEMS_ADDRESS = 0xD31E
BAG_ITEM_CAPACITY = 20
ITEM_QUANTITY_MAX = 99
MAX_MONEY = 999999
NAME_LENGTH = 11
TEXT_TERMINATOR = 0x50
PLAYER_NAME_ADDRESS = 0xD158
PARTY_MON_OT_ADDRESS = 0xD273
PARTY_MON_NICKNAME_ADDRESS = 0xD2B5

DESTINATION_WARP_ID_ADDRESS = 0xD42F
STATUS_FLAGS3_ADDRESS = 0xD72D
WARP_DESTINATION_MAP_ADDRESS = 0xFF8B
BIT_WARP_FROM_CURRENT_SCRIPT = 3
CURRENT_OPPONENT_ADDRESS = 0xD059
BATTLE_TYPE_ADDRESS = 0xD05A
TRAINER_NUMBER_ADDRESS = 0xD05D
CURRENT_ENEMY_LEVEL_ADDRESS = 0xD127
OPPONENT_ID_OFFSET = 200
TRAINER_CLASS_COUNT = 0x2F
EVENT_FLAGS_ADDRESS = 0xD747
OBTAINED_BADGES_ADDRESS = 0xD356


BADGES = {
    "boulder": 0,
    "cascade": 1,
    "thunder": 2,
    "rainbow": 3,
    "soul": 4,
    "marsh": 5,
    "volcano": 6,
    "earth": 7,
}
"""Badge names mapped to their bit positions in the obtained-badges byte."""


ITEMS = {
    "MASTER_BALL": 0x01,
    "ULTRA_BALL": 0x02,
    "GREAT_BALL": 0x03,
    "POKE_BALL": 0x04,
    "TOWN_MAP": 0x05,
    "BICYCLE": 0x06,
    "SURFBOARD": 0x07,
    "SAFARI_BALL": 0x08,
    "POKEDEX": 0x09,
    "MOON_STONE": 0x0A,
    "ANTIDOTE": 0x0B,
    "BURN_HEAL": 0x0C,
    "ICE_HEAL": 0x0D,
    "AWAKENING": 0x0E,
    "PARLYZ_HEAL": 0x0F,
    "FULL_RESTORE": 0x10,
    "MAX_POTION": 0x11,
    "HYPER_POTION": 0x12,
    "SUPER_POTION": 0x13,
    "POTION": 0x14,
    "BOULDERBADGE": 0x15,
    "CASCADEBADGE": 0x16,
    "THUNDERBADGE": 0x17,
    "RAINBOWBADGE": 0x18,
    "SOULBADGE": 0x19,
    "MARSHBADGE": 0x1A,
    "VOLCANOBADGE": 0x1B,
    "EARTHBADGE": 0x1C,
    "ESCAPE_ROPE": 0x1D,
    "REPEL": 0x1E,
    "OLD_AMBER": 0x1F,
    "FIRE_STONE": 0x20,
    "THUNDER_STONE": 0x21,
    "WATER_STONE": 0x22,
    "HP_UP": 0x23,
    "PROTEIN": 0x24,
    "IRON": 0x25,
    "CARBOS": 0x26,
    "CALCIUM": 0x27,
    "RARE_CANDY": 0x28,
    "DOME_FOSSIL": 0x29,
    "HELIX_FOSSIL": 0x2A,
    "SECRET_KEY": 0x2B,
    "BIKE_VOUCHER": 0x2D,
    "X_ACCURACY": 0x2E,
    "LEAF_STONE": 0x2F,
    "CARD_KEY": 0x30,
    "NUGGET": 0x31,
    "POKE_DOLL": 0x33,
    "FULL_HEAL": 0x34,
    "REVIVE": 0x35,
    "MAX_REVIVE": 0x36,
    "GUARD_SPEC": 0x37,
    "SUPER_REPEL": 0x38,
    "MAX_REPEL": 0x39,
    "DIRE_HIT": 0x3A,
    "COIN": 0x3B,
    "FRESH_WATER": 0x3C,
    "SODA_POP": 0x3D,
    "LEMONADE": 0x3E,
    "S_S_TICKET": 0x3F,
    "GOLD_TEETH": 0x40,
    "X_ATTACK": 0x41,
    "X_DEFEND": 0x42,
    "X_SPEED": 0x43,
    "X_SPECIAL": 0x44,
    "COIN_CASE": 0x45,
    "OAKS_PARCEL": 0x46,
    "ITEMFINDER": 0x47,
    "SILPH_SCOPE": 0x48,
    "POKE_FLUTE": 0x49,
    "LIFT_KEY": 0x4A,
    "EXP_ALL": 0x4B,
    "OLD_ROD": 0x4C,
    "GOOD_ROD": 0x4D,
    "SUPER_ROD": 0x4E,
    "PP_UP": 0x4F,
    "ETHER": 0x50,
    "MAX_ETHER": 0x51,
    "ELIXER": 0x52,
    "MAX_ELIXER": 0x53,
}
"""Pokémon Red/Blue item names mapped to their pokered item IDs."""


TRAINER_CLASSES = {
    "NOBODY": 0x00,
    "YOUNGSTER": 0x01,
    "BUG_CATCHER": 0x02,
    "LASS": 0x03,
    "SAILOR": 0x04,
    "JR_TRAINER_M": 0x05,
    "JR_TRAINER_F": 0x06,
    "POKEMANIAC": 0x07,
    "SUPER_NERD": 0x08,
    "HIKER": 0x09,
    "BIKER": 0x0A,
    "BURGLAR": 0x0B,
    "ENGINEER": 0x0C,
    "UNUSED_JUGGLER": 0x0D,
    "FISHER": 0x0E,
    "SWIMMER": 0x0F,
    "CUE_BALL": 0x10,
    "GAMBLER": 0x11,
    "BEAUTY": 0x12,
    "PSYCHIC_TR": 0x13,
    "ROCKER": 0x14,
    "JUGGLER": 0x15,
    "TAMER": 0x16,
    "BIRD_KEEPER": 0x17,
    "BLACKBELT": 0x18,
    "RIVAL1": 0x19,
    "PROF_OAK": 0x1A,
    "CHIEF": 0x1B,
    "SCIENTIST": 0x1C,
    "GIOVANNI": 0x1D,
    "ROCKET": 0x1E,
    "COOLTRAINER_M": 0x1F,
    "COOLTRAINER_F": 0x20,
    "BRUNO": 0x21,
    "BROCK": 0x22,
    "MISTY": 0x23,
    "LT_SURGE": 0x24,
    "ERIKA": 0x25,
    "KOGA": 0x26,
    "BLAINE": 0x27,
    "SABRINA": 0x28,
    "GENTLEMAN": 0x29,
    "RIVAL2": 0x2A,
    "RIVAL3": 0x2B,
    "LORELEI": 0x2C,
    "CHANNELER": 0x2D,
    "AGATHA": 0x2E,
    "LANCE": 0x2F,
}
"""Trainer class names mapped to their pokered class IDs."""

TRAINER_CLASS_NAMES = {trainer_class: name for name, trainer_class in TRAINER_CLASSES.items()}
"""Trainer class IDs mapped back to their names."""


TRAINER_SET_COUNTS = {
    "NOBODY": 0,
    "YOUNGSTER": 13,
    "BUG_CATCHER": 14,
    "LASS": 18,
    "SAILOR": 8,
    "JR_TRAINER_M": 9,
    "JR_TRAINER_F": 24,
    "POKEMANIAC": 7,
    "SUPER_NERD": 12,
    "HIKER": 14,
    "BIKER": 15,
    "BURGLAR": 9,
    "ENGINEER": 3,
    "UNUSED_JUGGLER": 0,
    "FISHER": 11,
    "SWIMMER": 15,
    "CUE_BALL": 9,
    "GAMBLER": 7,
    "BEAUTY": 15,
    "PSYCHIC_TR": 4,
    "ROCKER": 2,
    "JUGGLER": 8,
    "TAMER": 6,
    "BIRD_KEEPER": 17,
    "BLACKBELT": 9,
    "RIVAL1": 9,
    "PROF_OAK": 3,
    "CHIEF": 0,
    "SCIENTIST": 13,
    "GIOVANNI": 3,
    "ROCKET": 41,
    "COOLTRAINER_M": 10,
    "COOLTRAINER_F": 8,
    "BRUNO": 1,
    "BROCK": 1,
    "MISTY": 1,
    "LT_SURGE": 1,
    "ERIKA": 1,
    "KOGA": 1,
    "BLAINE": 1,
    "SABRINA": 1,
    "GENTLEMAN": 5,
    "RIVAL2": 12,
    "RIVAL3": 3,
    "LORELEI": 1,
    "CHANNELER": 24,
    "AGATHA": 1,
    "LANCE": 1,
}
"""Number of party sets available for each trainer class."""


MAPS = {
    "pallet_town": 0x00,
    "viridian_city": 0x01,
    "pewter_city": 0x02,
    "cerulean_city": 0x03,
    "lavender_town": 0x04,
    "vermilion_city": 0x05,
    "celadon_city": 0x06,
    "fuchsia_city": 0x07,
    "cinnabar_island": 0x08,
    "indigo_plateau": 0x09,
    "saffron_city": 0x0A,
    "unused_map_0b": 0x0B,
    "route_1": 0x0C,
    "route_2": 0x0D,
    "route_3": 0x0E,
    "route_4": 0x0F,
    "route_5": 0x10,
    "route_6": 0x11,
    "route_7": 0x12,
    "route_8": 0x13,
    "route_9": 0x14,
    "route_10": 0x15,
    "route_11": 0x16,
    "route_12": 0x17,
    "route_13": 0x18,
    "route_14": 0x19,
    "route_15": 0x1A,
    "route_16": 0x1B,
    "route_17": 0x1C,
    "route_18": 0x1D,
    "route_19": 0x1E,
    "route_20": 0x1F,
    "route_21": 0x20,
    "route_22": 0x21,
    "route_23": 0x22,
    "route_24": 0x23,
    "route_25": 0x24,
    "reds_house_1f": 0x25,
    "reds_house_2f": 0x26,
    "blues_house": 0x27,
    "oaks_lab": 0x28,
    "viridian_pokecenter": 0x29,
    "viridian_mart": 0x2A,
    "viridian_school_house": 0x2B,
    "viridian_nickname_house": 0x2C,
    "viridian_gym": 0x2D,
    "digletts_cave_route_2": 0x2E,
    "viridian_forest_north_gate": 0x2F,
    "route_2_trade_house": 0x30,
    "route_2_gate": 0x31,
    "viridian_forest_south_gate": 0x32,
    "viridian_forest": 0x33,
    "museum_1f": 0x34,
    "museum_2f": 0x35,
    "pewter_gym": 0x36,
    "pewter_nidoran_house": 0x37,
    "pewter_mart": 0x38,
    "pewter_speech_house": 0x39,
    "pewter_pokecenter": 0x3A,
    "mt_moon_1f": 0x3B,
    "mt_moon_b1f": 0x3C,
    "mt_moon_b2f": 0x3D,
    "cerulean_trashed_house": 0x3E,
    "cerulean_trade_house": 0x3F,
    "cerulean_pokecenter": 0x40,
    "cerulean_gym": 0x41,
    "bike_shop": 0x42,
    "cerulean_mart": 0x43,
    "mt_moon_pokecenter": 0x44,
    "cerulean_trashed_house_copy": 0x45,
    "route_5_gate": 0x46,
    "underground_path_route_5": 0x47,
    "daycare": 0x48,
    "route_6_gate": 0x49,
    "underground_path_route_6": 0x4A,
    "underground_path_route_6_copy": 0x4B,
    "route_7_gate": 0x4C,
    "underground_path_route_7": 0x4D,
    "underground_path_route_7_copy": 0x4E,
    "route_8_gate": 0x4F,
    "underground_path_route_8": 0x50,
    "rock_tunnel_pokecenter": 0x51,
    "rock_tunnel_1f": 0x52,
    "power_plant": 0x53,
    "route_11_gate_1f": 0x54,
    "digletts_cave_route_11": 0x55,
    "route_11_gate_2f": 0x56,
    "route_12_gate_1f": 0x57,
    "bills_house": 0x58,
    "vermilion_pokecenter": 0x59,
    "pokemon_fan_club": 0x5A,
    "vermilion_mart": 0x5B,
    "vermilion_gym": 0x5C,
    "vermilion_pidgey_house": 0x5D,
    "vermilion_dock": 0x5E,
    "ss_anne_1f": 0x5F,
    "ss_anne_2f": 0x60,
    "ss_anne_3f": 0x61,
    "ss_anne_b1f": 0x62,
    "ss_anne_bow": 0x63,
    "ss_anne_kitchen": 0x64,
    "ss_anne_captains_room": 0x65,
    "ss_anne_1f_rooms": 0x66,
    "ss_anne_2f_rooms": 0x67,
    "ss_anne_b1f_rooms": 0x68,
    "unused_map_69": 0x69,
    "unused_map_6a": 0x6A,
    "unused_map_6b": 0x6B,
    "victory_road_1f": 0x6C,
    "unused_map_6d": 0x6D,
    "unused_map_6e": 0x6E,
    "unused_map_6f": 0x6F,
    "unused_map_70": 0x70,
    "lances_room": 0x71,
    "unused_map_72": 0x72,
    "unused_map_73": 0x73,
    "unused_map_74": 0x74,
    "unused_map_75": 0x75,
    "hall_of_fame": 0x76,
    "underground_path_north_south": 0x77,
    "champions_room": 0x78,
    "underground_path_west_east": 0x79,
    "celadon_mart_1f": 0x7A,
    "celadon_mart_2f": 0x7B,
    "celadon_mart_3f": 0x7C,
    "celadon_mart_4f": 0x7D,
    "celadon_mart_roof": 0x7E,
    "celadon_mart_elevator": 0x7F,
    "celadon_mansion_1f": 0x80,
    "celadon_mansion_2f": 0x81,
    "celadon_mansion_3f": 0x82,
    "celadon_mansion_roof": 0x83,
    "celadon_mansion_roof_house": 0x84,
    "celadon_pokecenter": 0x85,
    "celadon_gym": 0x86,
    "game_corner": 0x87,
    "celadon_mart_5f": 0x88,
    "game_corner_prize_room": 0x89,
    "celadon_diner": 0x8A,
    "celadon_chief_house": 0x8B,
    "celadon_hotel": 0x8C,
    "lavender_pokecenter": 0x8D,
    "pokemon_tower_1f": 0x8E,
    "pokemon_tower_2f": 0x8F,
    "pokemon_tower_3f": 0x90,
    "pokemon_tower_4f": 0x91,
    "pokemon_tower_5f": 0x92,
    "pokemon_tower_6f": 0x93,
    "pokemon_tower_7f": 0x94,
    "mr_fujis_house": 0x95,
    "lavender_mart": 0x96,
    "lavender_cubone_house": 0x97,
    "fuchsia_mart": 0x98,
    "fuchsia_bills_grandpas_house": 0x99,
    "fuchsia_pokecenter": 0x9A,
    "wardens_house": 0x9B,
    "safari_zone_gate": 0x9C,
    "fuchsia_gym": 0x9D,
    "fuchsia_meeting_room": 0x9E,
    "seafoam_islands_b1f": 0x9F,
    "seafoam_islands_b2f": 0xA0,
    "seafoam_islands_b3f": 0xA1,
    "seafoam_islands_b4f": 0xA2,
    "vermilion_old_rod_house": 0xA3,
    "fuchsia_good_rod_house": 0xA4,
    "pokemon_mansion_1f": 0xA5,
    "cinnabar_gym": 0xA6,
    "cinnabar_lab": 0xA7,
    "cinnabar_lab_trade_room": 0xA8,
    "cinnabar_lab_metronome_room": 0xA9,
    "cinnabar_lab_fossil_room": 0xAA,
    "cinnabar_pokecenter": 0xAB,
    "cinnabar_mart": 0xAC,
    "cinnabar_mart_copy": 0xAD,
    "indigo_plateau_lobby": 0xAE,
    "copycats_house_1f": 0xAF,
    "copycats_house_2f": 0xB0,
    "fighting_dojo": 0xB1,
    "saffron_gym": 0xB2,
    "saffron_pidgey_house": 0xB3,
    "saffron_mart": 0xB4,
    "silph_co_1f": 0xB5,
    "saffron_pokecenter": 0xB6,
    "mr_psychics_house": 0xB7,
    "route_15_gate_1f": 0xB8,
    "route_15_gate_2f": 0xB9,
    "route_16_gate_1f": 0xBA,
    "route_16_gate_2f": 0xBB,
    "route_16_fly_house": 0xBC,
    "route_12_super_rod_house": 0xBD,
    "route_18_gate_1f": 0xBE,
    "route_18_gate_2f": 0xBF,
    "seafoam_islands_1f": 0xC0,
    "route_22_gate": 0xC1,
    "victory_road_2f": 0xC2,
    "route_12_gate_2f": 0xC3,
    "vermilion_trade_house": 0xC4,
    "digletts_cave": 0xC5,
    "victory_road_3f": 0xC6,
    "rocket_hideout_b1f": 0xC7,
    "rocket_hideout_b2f": 0xC8,
    "rocket_hideout_b3f": 0xC9,
    "rocket_hideout_b4f": 0xCA,
    "rocket_hideout_elevator": 0xCB,
    "unused_map_cc": 0xCC,
    "unused_map_cd": 0xCD,
    "unused_map_ce": 0xCE,
    "silph_co_2f": 0xCF,
    "silph_co_3f": 0xD0,
    "silph_co_4f": 0xD1,
    "silph_co_5f": 0xD2,
    "silph_co_6f": 0xD3,
    "silph_co_7f": 0xD4,
    "silph_co_8f": 0xD5,
    "pokemon_mansion_2f": 0xD6,
    "pokemon_mansion_3f": 0xD7,
    "pokemon_mansion_b1f": 0xD8,
    "safari_zone_east": 0xD9,
    "safari_zone_north": 0xDA,
    "safari_zone_west": 0xDB,
    "safari_zone_center": 0xDC,
    "safari_zone_center_rest_house": 0xDD,
    "safari_zone_secret_house": 0xDE,
    "safari_zone_west_rest_house": 0xDF,
    "safari_zone_east_rest_house": 0xE0,
    "safari_zone_north_rest_house": 0xE1,
    "cerulean_cave_2f": 0xE2,
    "cerulean_cave_b1f": 0xE3,
    "cerulean_cave_1f": 0xE4,
    "name_raters_house": 0xE5,
    "cerulean_badge_house": 0xE6,
    "unused_map_e7": 0xE7,
    "rock_tunnel_b1f": 0xE8,
    "silph_co_9f": 0xE9,
    "silph_co_10f": 0xEA,
    "silph_co_11f": 0xEB,
    "silph_co_elevator": 0xEC,
    "unused_map_ed": 0xED,
    "unused_map_ee": 0xEE,
    "trade_center": 0xEF,
    "colosseum": 0xF0,
    "unused_map_f1": 0xF1,
    "unused_map_f2": 0xF2,
    "unused_map_f3": 0xF3,
    "unused_map_f4": 0xF4,
    "loreleis_room": 0xF5,
    "brunos_room": 0xF6,
    "agathas_room": 0xF7,
}
"""Map names mapped to their pokered map IDs."""


EVENT_FLAGS = {
    "followed_oak_into_lab": 0x000,
    "hall_of_fame_dex_rating": 0x003,
    "pallet_after_getting_pokeballs": 0x006,
    "got_town_map": 0x018,
    "entered_blues_house": 0x019,
    "daisy_walking": 0x01A,
    "followed_oak_into_lab_2": 0x020,
    "oak_asked_to_choose_mon": 0x021,
    "got_starter": 0x022,
    "battled_rival_in_oaks_lab": 0x023,
    "got_pokeballs_from_oak": 0x024,
    "got_pokedex": 0x025,
    "pallet_after_getting_pokeballs_2": 0x026,
    "oak_appeared_in_pallet": 0x027,
    "viridian_gym_open": 0x028,
    "got_tm42": 0x029,
    "oak_got_parcel": 0x038,
    "got_oaks_parcel": 0x039,
    "got_tm27": 0x050,
    "beat_viridian_gym_giovanni": 0x051,
    "beat_viridian_gym_trainer_0": 0x052,
    "beat_viridian_gym_trainer_1": 0x053,
    "beat_viridian_gym_trainer_2": 0x054,
    "beat_viridian_gym_trainer_3": 0x055,
    "beat_viridian_gym_trainer_4": 0x056,
    "beat_viridian_gym_trainer_5": 0x057,
    "beat_viridian_gym_trainer_6": 0x058,
    "beat_viridian_gym_trainer_7": 0x059,
    "bought_museum_ticket": 0x068,
    "got_old_amber": 0x069,
    "beat_pewter_gym_trainer_0": 0x072,
    "got_tm34": 0x076,
    "beat_brock": 0x077,
    "beat_cerulean_rival": 0x098,
    "beat_cerulean_rocket_thief": 0x0A7,
    "beat_cerulean_gym_trainer_0": 0x0BA,
    "beat_cerulean_gym_trainer_1": 0x0BB,
    "got_tm11": 0x0BE,
    "beat_misty": 0x0BF,
    "got_bicycle": 0x0C0,
    "pokemon_tower_rival_on_left": 0x0EE,
    "beat_pokemon_tower_rival": 0x0EF,
    "beat_pokemontower_3_trainer_0": 0x0F1,
    "beat_pokemontower_3_trainer_1": 0x0F2,
    "beat_pokemontower_3_trainer_2": 0x0F3,
    "beat_pokemontower_4_trainer_0": 0x0F9,
    "beat_pokemontower_4_trainer_1": 0x0FA,
    "beat_pokemontower_4_trainer_2": 0x0FB,
    "beat_pokemontower_5_trainer_0": 0x102,
    "beat_pokemontower_5_trainer_1": 0x103,
    "beat_pokemontower_5_trainer_2": 0x104,
    "beat_pokemontower_5_trainer_3": 0x105,
    "in_purified_zone": 0x107,
    "beat_pokemontower_6_trainer_0": 0x109,
    "beat_pokemontower_6_trainer_1": 0x10A,
    "beat_pokemontower_6_trainer_2": 0x10B,
    "beat_ghost_marowak": 0x10F,
    "beat_pokemontower_7_trainer_0": 0x111,
    "beat_pokemontower_7_trainer_1": 0x112,
    "beat_pokemontower_7_trainer_2": 0x113,
    "rescued_mr_fuji_2": 0x117,
    "got_poke_flute": 0x128,
    "got_bike_voucher": 0x151,
    "seel_fan_boast": 0x156,
    "pikachu_fan_boast": 0x157,
    "2nd_lock_opened": 0x160,
    "1st_lock_opened": 0x161,
    "beat_vermilion_gym_trainer_0": 0x162,
    "beat_vermilion_gym_trainer_1": 0x163,
    "beat_vermilion_gym_trainer_2": 0x164,
    "got_tm24": 0x166,
    "beat_lt_surge": 0x167,
    "got_tm41": 0x180,
    "got_tm13": 0x18C,
    "got_tm48": 0x18D,
    "got_tm49": 0x18E,
    "got_tm18": 0x18F,
    "got_tm21": 0x1A8,
    "beat_erika": 0x1A9,
    "beat_celadon_gym_trainer_0": 0x1AA,
    "beat_celadon_gym_trainer_1": 0x1AB,
    "beat_celadon_gym_trainer_2": 0x1AC,
    "beat_celadon_gym_trainer_3": 0x1AD,
    "beat_celadon_gym_trainer_4": 0x1AE,
    "beat_celadon_gym_trainer_5": 0x1AF,
    "beat_celadon_gym_trainer_6": 0x1B0,
    "1b8": 0x1B8,
    "found_rocket_hideout": 0x1B9,
    "got_10_coins": 0x1BA,
    "got_20_coins": 0x1BB,
    "got_20_coins_2": 0x1BC,
    "1bf": 0x1BF,
    "got_coin_case": 0x1E0,
    "got_hm04": 0x238,
    "gave_gold_teeth": 0x239,
    "safari_game_over": 0x24E,
    "in_safari_zone": 0x24F,
    "got_tm06": 0x258,
    "beat_koga": 0x259,
    "beat_fuchsia_gym_trainer_0": 0x25A,
    "beat_fuchsia_gym_trainer_1": 0x25B,
    "beat_fuchsia_gym_trainer_2": 0x25C,
    "beat_fuchsia_gym_trainer_3": 0x25D,
    "beat_fuchsia_gym_trainer_4": 0x25E,
    "beat_fuchsia_gym_trainer_5": 0x25F,
    "mansion_switch_on": 0x278,
    "beat_mansion_1_trainer_0": 0x289,
    "got_tm38": 0x298,
    "beat_blaine": 0x299,
    "beat_cinnabar_gym_trainer_0": 0x29A,
    "beat_cinnabar_gym_trainer_1": 0x29B,
    "beat_cinnabar_gym_trainer_2": 0x29C,
    "beat_cinnabar_gym_trainer_3": 0x29D,
    "beat_cinnabar_gym_trainer_4": 0x29E,
    "beat_cinnabar_gym_trainer_5": 0x29F,
    "beat_cinnabar_gym_trainer_6": 0x2A0,
    "2a7": 0x2A7,
    "cinnabar_gym_gate0_unlocked": 0x2A8,
    "cinnabar_gym_gate1_unlocked": 0x2A9,
    "cinnabar_gym_gate2_unlocked": 0x2AA,
    "cinnabar_gym_gate3_unlocked": 0x2AB,
    "cinnabar_gym_gate4_unlocked": 0x2AC,
    "cinnabar_gym_gate5_unlocked": 0x2AD,
    "cinnabar_gym_gate6_unlocked": 0x2AE,
    "got_tm35": 0x2D7,
    "gave_fossil_to_lab": 0x2E0,
    "lab_still_reviving_fossil": 0x2E1,
    "lab_handing_over_fossil_mon": 0x2E2,
    "got_tm31": 0x340,
    "defeated_fighting_dojo": 0x350,
    "beat_karate_master": 0x351,
    "beat_fighting_dojo_trainer_0": 0x352,
    "beat_fighting_dojo_trainer_1": 0x353,
    "beat_fighting_dojo_trainer_2": 0x354,
    "beat_fighting_dojo_trainer_3": 0x355,
    "got_hitmonlee": 0x356,
    "got_hitmonchan": 0x357,
    "got_tm46": 0x360,
    "beat_sabrina": 0x361,
    "beat_saffron_gym_trainer_0": 0x362,
    "beat_saffron_gym_trainer_1": 0x363,
    "beat_saffron_gym_trainer_2": 0x364,
    "beat_saffron_gym_trainer_3": 0x365,
    "beat_saffron_gym_trainer_4": 0x366,
    "beat_saffron_gym_trainer_5": 0x367,
    "beat_saffron_gym_trainer_6": 0x368,
    "silph_co_receptionist_at_desk": 0x397,
    "got_tm29": 0x3B0,
    "got_potion_sample": 0x3C0,
    "got_hm05": 0x3D8,
    "beat_route_3_trainer_0": 0x3E2,
    "beat_route_3_trainer_1": 0x3E3,
    "beat_route_3_trainer_2": 0x3E4,
    "beat_route_3_trainer_3": 0x3E5,
    "beat_route_3_trainer_4": 0x3E6,
    "beat_route_3_trainer_5": 0x3E7,
    "beat_route_3_trainer_6": 0x3E8,
    "beat_route_3_trainer_7": 0x3E9,
    "beat_route_4_trainer_0": 0x3F2,
    "bought_magikarp": 0x3FF,
    "beat_route_6_trainer_0": 0x411,
    "beat_route_6_trainer_1": 0x412,
    "beat_route_6_trainer_2": 0x413,
    "beat_route_6_trainer_3": 0x414,
    "beat_route_6_trainer_4": 0x415,
    "beat_route_6_trainer_5": 0x416,
    "beat_route_8_trainer_0": 0x431,
    "beat_route_8_trainer_1": 0x432,
    "beat_route_8_trainer_2": 0x433,
    "beat_route_8_trainer_3": 0x434,
    "beat_route_8_trainer_4": 0x435,
    "beat_route_8_trainer_5": 0x436,
    "beat_route_8_trainer_6": 0x437,
    "beat_route_8_trainer_7": 0x438,
    "beat_route_8_trainer_8": 0x439,
    "beat_route_9_trainer_0": 0x441,
    "beat_route_9_trainer_1": 0x442,
    "beat_route_9_trainer_2": 0x443,
    "beat_route_9_trainer_3": 0x444,
    "beat_route_9_trainer_4": 0x445,
    "beat_route_9_trainer_5": 0x446,
    "beat_route_9_trainer_6": 0x447,
    "beat_route_9_trainer_7": 0x448,
    "beat_route_9_trainer_8": 0x449,
    "beat_route_10_trainer_0": 0x451,
    "beat_route_10_trainer_1": 0x452,
    "beat_route_10_trainer_2": 0x453,
    "beat_route_10_trainer_3": 0x454,
    "beat_route_10_trainer_4": 0x455,
    "beat_route_10_trainer_5": 0x456,
    "beat_rock_tunnel_1_trainer_0": 0x459,
    "beat_rock_tunnel_1_trainer_1": 0x45A,
    "beat_rock_tunnel_1_trainer_2": 0x45B,
    "beat_rock_tunnel_1_trainer_3": 0x45C,
    "beat_rock_tunnel_1_trainer_4": 0x45D,
    "beat_rock_tunnel_1_trainer_5": 0x45E,
    "beat_rock_tunnel_1_trainer_6": 0x45F,
    "beat_power_plant_voltorb_0": 0x461,
    "beat_power_plant_voltorb_1": 0x462,
    "beat_power_plant_voltorb_2": 0x463,
    "beat_power_plant_voltorb_3": 0x464,
    "beat_power_plant_voltorb_4": 0x465,
    "beat_power_plant_voltorb_5": 0x466,
    "beat_power_plant_voltorb_6": 0x467,
    "beat_power_plant_voltorb_7": 0x468,
    "beat_zapdos": 0x469,
    "beat_route_11_trainer_0": 0x471,
    "beat_route_11_trainer_1": 0x472,
    "beat_route_11_trainer_2": 0x473,
    "beat_route_11_trainer_3": 0x474,
    "beat_route_11_trainer_4": 0x475,
    "beat_route_11_trainer_5": 0x476,
    "beat_route_11_trainer_6": 0x477,
    "beat_route_11_trainer_7": 0x478,
    "beat_route_11_trainer_8": 0x479,
    "beat_route_11_trainer_9": 0x47A,
    "got_itemfinder": 0x47F,
    "got_tm39": 0x480,
    "beat_route_12_trainer_0": 0x482,
    "beat_route_12_trainer_1": 0x483,
    "beat_route_12_trainer_2": 0x484,
    "beat_route_12_trainer_3": 0x485,
    "beat_route_12_trainer_4": 0x486,
    "beat_route_12_trainer_5": 0x487,
    "beat_route_12_trainer_6": 0x488,
    "fight_route12_snorlax": 0x48E,
    "beat_route12_snorlax": 0x48F,
    "beat_route_13_trainer_0": 0x491,
    "beat_route_13_trainer_1": 0x492,
    "beat_route_13_trainer_2": 0x493,
    "beat_route_13_trainer_3": 0x494,
    "beat_route_13_trainer_4": 0x495,
    "beat_route_13_trainer_5": 0x496,
    "beat_route_13_trainer_6": 0x497,
    "beat_route_13_trainer_7": 0x498,
    "beat_route_13_trainer_8": 0x499,
    "beat_route_13_trainer_9": 0x49A,
    "beat_route_14_trainer_0": 0x4A1,
    "beat_route_14_trainer_1": 0x4A2,
    "beat_route_14_trainer_2": 0x4A3,
    "beat_route_14_trainer_3": 0x4A4,
    "beat_route_14_trainer_4": 0x4A5,
    "beat_route_14_trainer_5": 0x4A6,
    "beat_route_14_trainer_6": 0x4A7,
    "beat_route_14_trainer_7": 0x4A8,
    "beat_route_14_trainer_8": 0x4A9,
    "beat_route_14_trainer_9": 0x4AA,
    "got_exp_all": 0x4B0,
    "beat_route_15_trainer_0": 0x4B1,
    "beat_route_15_trainer_1": 0x4B2,
    "beat_route_15_trainer_2": 0x4B3,
    "beat_route_15_trainer_3": 0x4B4,
    "beat_route_15_trainer_4": 0x4B5,
    "beat_route_15_trainer_5": 0x4B6,
    "beat_route_15_trainer_6": 0x4B7,
    "beat_route_15_trainer_7": 0x4B8,
    "beat_route_15_trainer_8": 0x4B9,
    "beat_route_15_trainer_9": 0x4BA,
    "beat_route_16_trainer_0": 0x4C1,
    "beat_route_16_trainer_1": 0x4C2,
    "beat_route_16_trainer_2": 0x4C3,
    "beat_route_16_trainer_3": 0x4C4,
    "beat_route_16_trainer_4": 0x4C5,
    "beat_route_16_trainer_5": 0x4C6,
    "fight_route16_snorlax": 0x4C8,
    "beat_route16_snorlax": 0x4C9,
    "got_hm02": 0x4CE,
    "rescued_mr_fuji": 0x4CF,
    "beat_route_17_trainer_0": 0x4D1,
    "beat_route_17_trainer_1": 0x4D2,
    "beat_route_17_trainer_2": 0x4D3,
    "beat_route_17_trainer_3": 0x4D4,
    "beat_route_17_trainer_4": 0x4D5,
    "beat_route_17_trainer_5": 0x4D6,
    "beat_route_17_trainer_6": 0x4D7,
    "beat_route_17_trainer_7": 0x4D8,
    "beat_route_17_trainer_8": 0x4D9,
    "beat_route_17_trainer_9": 0x4DA,
    "beat_route_18_trainer_0": 0x4E1,
    "beat_route_18_trainer_1": 0x4E2,
    "beat_route_18_trainer_2": 0x4E3,
    "beat_route_19_trainer_0": 0x4F1,
    "beat_route_19_trainer_1": 0x4F2,
    "beat_route_19_trainer_2": 0x4F3,
    "beat_route_19_trainer_3": 0x4F4,
    "beat_route_19_trainer_4": 0x4F5,
    "beat_route_19_trainer_5": 0x4F6,
    "beat_route_19_trainer_6": 0x4F7,
    "beat_route_19_trainer_7": 0x4F8,
    "beat_route_19_trainer_8": 0x4F9,
    "beat_route_19_trainer_9": 0x4FA,
    "in_seafoam_islands": 0x500,
    "beat_route_20_trainer_0": 0x501,
    "beat_route_20_trainer_1": 0x502,
    "beat_route_20_trainer_2": 0x503,
    "beat_route_20_trainer_3": 0x504,
    "beat_route_20_trainer_4": 0x505,
    "beat_route_20_trainer_5": 0x506,
    "beat_route_20_trainer_6": 0x507,
    "beat_route_20_trainer_7": 0x508,
    "beat_route_20_trainer_8": 0x509,
    "beat_route_20_trainer_9": 0x50A,
    "seafoam1_boulder1_down_hole": 0x50E,
    "seafoam1_boulder2_down_hole": 0x50F,
    "beat_route_21_trainer_0": 0x511,
    "beat_route_21_trainer_1": 0x512,
    "beat_route_21_trainer_2": 0x513,
    "beat_route_21_trainer_3": 0x514,
    "beat_route_21_trainer_4": 0x515,
    "beat_route_21_trainer_5": 0x516,
    "beat_route_21_trainer_6": 0x517,
    "beat_route_21_trainer_7": 0x518,
    "beat_route_21_trainer_8": 0x519,
    "1st_route22_rival_battle": 0x520,
    "2nd_route22_rival_battle": 0x521,
    "beat_route22_rival_1st_battle": 0x525,
    "beat_route22_rival_2nd_battle": 0x526,
    "route22_rival_wants_battle": 0x527,
    "passed_cascadebadge_check": 0x530,
    "passed_thunderbadge_check": 0x531,
    "passed_rainbowbadge_check": 0x532,
    "passed_soulbadge_check": 0x533,
    "passed_marshbadge_check": 0x534,
    "passed_volcanobadge_check": 0x535,
    "passed_earthbadge_check": 0x536,
    "victory_road_2_boulder_on_switch1": 0x538,
    "beat_victory_road_2_trainer_0": 0x539,
    "beat_victory_road_2_trainer_1": 0x53A,
    "beat_victory_road_2_trainer_2": 0x53B,
    "beat_victory_road_2_trainer_3": 0x53C,
    "beat_victory_road_2_trainer_4": 0x53D,
    "beat_moltres": 0x53E,
    "victory_road_2_boulder_on_switch2": 0x53F,
    "got_nugget": 0x540,
    "beat_route24_rocket": 0x541,
    "beat_route_24_trainer_0": 0x542,
    "beat_route_24_trainer_1": 0x543,
    "beat_route_24_trainer_2": 0x544,
    "beat_route_24_trainer_3": 0x545,
    "beat_route_24_trainer_4": 0x546,
    "beat_route_24_trainer_5": 0x547,
    "nugget_reward_available": 0x549,
    "met_bill": 0x550,
    "beat_route_25_trainer_0": 0x551,
    "beat_route_25_trainer_1": 0x552,
    "beat_route_25_trainer_2": 0x553,
    "beat_route_25_trainer_3": 0x554,
    "beat_route_25_trainer_4": 0x555,
    "beat_route_25_trainer_5": 0x556,
    "beat_route_25_trainer_6": 0x557,
    "beat_route_25_trainer_7": 0x558,
    "beat_route_25_trainer_8": 0x559,
    "used_cell_separator_on_bill": 0x55B,
    "got_ss_ticket": 0x55C,
    "met_bill_2": 0x55D,
    "bill_said_use_cell_separator": 0x55E,
    "left_bills_house_after_helping": 0x55F,
    "beat_viridian_forest_trainer_0": 0x562,
    "beat_viridian_forest_trainer_1": 0x563,
    "beat_viridian_forest_trainer_2": 0x564,
    "beat_mt_moon_1_trainer_0": 0x571,
    "beat_mt_moon_1_trainer_1": 0x572,
    "beat_mt_moon_1_trainer_2": 0x573,
    "beat_mt_moon_1_trainer_3": 0x574,
    "beat_mt_moon_1_trainer_4": 0x575,
    "beat_mt_moon_1_trainer_5": 0x576,
    "beat_mt_moon_1_trainer_6": 0x577,
    "beat_mt_moon_exit_super_nerd": 0x579,
    "beat_mt_moon_3_trainer_0": 0x57A,
    "beat_mt_moon_3_trainer_1": 0x57B,
    "beat_mt_moon_3_trainer_2": 0x57C,
    "beat_mt_moon_3_trainer_3": 0x57D,
    "got_dome_fossil": 0x57E,
    "got_helix_fossil": 0x57F,
    "beat_ss_anne_5_trainer_0": 0x5C4,
    "beat_ss_anne_5_trainer_1": 0x5C5,
    "got_hm01": 0x5E0,
    "rubbed_captains_back": 0x5E1,
    "ss_anne_left": 0x5E2,
    "walked_past_guard_after_ss_anne_left": 0x5E3,
    "started_walking_out_of_dock": 0x5E4,
    "walked_out_of_dock": 0x5E5,
    "beat_ss_anne_8_trainer_0": 0x5F1,
    "beat_ss_anne_8_trainer_1": 0x5F2,
    "beat_ss_anne_8_trainer_2": 0x5F3,
    "beat_ss_anne_8_trainer_3": 0x5F4,
    "beat_ss_anne_9_trainer_0": 0x601,
    "beat_ss_anne_9_trainer_1": 0x602,
    "beat_ss_anne_9_trainer_2": 0x603,
    "beat_ss_anne_9_trainer_3": 0x604,
    "beat_ss_anne_10_trainer_0": 0x611,
    "beat_ss_anne_10_trainer_1": 0x612,
    "beat_ss_anne_10_trainer_2": 0x613,
    "beat_ss_anne_10_trainer_3": 0x614,
    "beat_ss_anne_10_trainer_4": 0x615,
    "beat_ss_anne_10_trainer_5": 0x616,
    "victory_road_3_boulder_on_switch1": 0x660,
    "beat_victory_road_3_trainer_0": 0x661,
    "beat_victory_road_3_trainer_1": 0x662,
    "beat_victory_road_3_trainer_2": 0x663,
    "beat_victory_road_3_trainer_3": 0x664,
    "victory_road_3_boulder_on_switch2": 0x666,
    "beat_rocket_hideout_1_trainer_0": 0x671,
    "beat_rocket_hideout_1_trainer_1": 0x672,
    "beat_rocket_hideout_1_trainer_2": 0x673,
    "beat_rocket_hideout_1_trainer_3": 0x674,
    "beat_rocket_hideout_1_trainer_4": 0x675,
    "entered_rocket_hideout": 0x677,
    "67f": 0x67F,
    "beat_rocket_hideout_2_trainer_0": 0x681,
    "beat_rocket_hideout_3_trainer_0": 0x691,
    "beat_rocket_hideout_3_trainer_1": 0x692,
    "beat_rocket_hideout_4_trainer_0": 0x6A2,
    "beat_rocket_hideout_4_trainer_1": 0x6A3,
    "beat_rocket_hideout_4_trainer_2": 0x6A4,
    "rocket_hideout_4_door_unlocked": 0x6A5,
    "rocket_dropped_lift_key": 0x6A6,
    "beat_rocket_hideout_giovanni": 0x6A7,
    "beat_silph_co_2f_trainer_0": 0x6F2,
    "beat_silph_co_2f_trainer_1": 0x6F3,
    "beat_silph_co_2f_trainer_2": 0x6F4,
    "beat_silph_co_2f_trainer_3": 0x6F5,
    "silph_co_2_unlocked_door1": 0x6FD,
    "silph_co_2_unlocked_door2": 0x6FE,
    "got_tm36": 0x6FF,
    "beat_silph_co_3f_trainer_0": 0x702,
    "beat_silph_co_3f_trainer_1": 0x703,
    "silph_co_3_unlocked_door1": 0x708,
    "silph_co_3_unlocked_door2": 0x709,
    "beat_silph_co_4f_trainer_0": 0x712,
    "beat_silph_co_4f_trainer_1": 0x713,
    "beat_silph_co_4f_trainer_2": 0x714,
    "silph_co_4_unlocked_door1": 0x718,
    "silph_co_4_unlocked_door2": 0x719,
    "beat_silph_co_5f_trainer_0": 0x722,
    "beat_silph_co_5f_trainer_1": 0x723,
    "beat_silph_co_5f_trainer_2": 0x724,
    "beat_silph_co_5f_trainer_3": 0x725,
    "silph_co_5_unlocked_door1": 0x728,
    "silph_co_5_unlocked_door2": 0x729,
    "silph_co_5_unlocked_door3": 0x72A,
    "beat_silph_co_6f_trainer_0": 0x736,
    "beat_silph_co_6f_trainer_1": 0x737,
    "beat_silph_co_6f_trainer_2": 0x738,
    "silph_co_6_unlocked_door": 0x73F,
    "beat_silph_co_rival": 0x740,
    "beat_silph_co_7f_trainer_0": 0x745,
    "beat_silph_co_7f_trainer_1": 0x746,
    "beat_silph_co_7f_trainer_2": 0x747,
    "beat_silph_co_7f_trainer_3": 0x748,
    "silph_co_7_unlocked_door1": 0x74C,
    "silph_co_7_unlocked_door2": 0x74D,
    "silph_co_7_unlocked_door3": 0x74E,
    "beat_silph_co_8f_trainer_0": 0x752,
    "beat_silph_co_8f_trainer_1": 0x753,
    "beat_silph_co_8f_trainer_2": 0x754,
    "silph_co_8_unlocked_door": 0x758,
    "beat_silph_co_9f_trainer_0": 0x762,
    "beat_silph_co_9f_trainer_1": 0x763,
    "beat_silph_co_9f_trainer_2": 0x764,
    "silph_co_9_unlocked_door1": 0x768,
    "silph_co_9_unlocked_door2": 0x769,
    "silph_co_9_unlocked_door3": 0x76A,
    "silph_co_9_unlocked_door4": 0x76B,
    "beat_silph_co_10f_trainer_0": 0x771,
    "beat_silph_co_10f_trainer_1": 0x772,
    "silph_co_10_unlocked_door": 0x778,
    "beat_silph_co_11f_trainer_0": 0x784,
    "beat_silph_co_11f_trainer_1": 0x785,
    "silph_co_11_unlocked_door": 0x788,
    "got_master_ball": 0x78D,
    "beat_silph_co_giovanni": 0x78F,
    "beat_mansion_2_trainer_0": 0x801,
    "beat_mansion_3_trainer_0": 0x811,
    "beat_mansion_3_trainer_1": 0x812,
    "beat_mansion_4_trainer_0": 0x821,
    "beat_mansion_4_trainer_1": 0x822,
    "got_hm03": 0x880,
    "beat_mewtwo": 0x8C1,
    "beat_loreleis_room_trainer_0": 0x8E1,
    "autowalked_into_loreleis_room": 0x8E6,
    "beat_brunos_room_trainer_0": 0x8E9,
    "autowalked_into_brunos_room": 0x8EE,
    "beat_agathas_room_trainer_0": 0x8F1,
    "autowalked_into_agathas_room": 0x8F6,
    "beat_lances_room_trainer_0": 0x8F9,
    "beat_lance": 0x8FE,
    "lances_room_lock_door": 0x8FF,
    "beat_champion_rival": 0x901,
    "beat_victory_road_1_trainer_0": 0x911,
    "beat_victory_road_1_trainer_1": 0x912,
    "victory_road_1_boulder_on_switch": 0x917,
    "beat_rock_tunnel_2_trainer_0": 0x9B1,
    "beat_rock_tunnel_2_trainer_1": 0x9B2,
    "beat_rock_tunnel_2_trainer_2": 0x9B3,
    "beat_rock_tunnel_2_trainer_3": 0x9B4,
    "beat_rock_tunnel_2_trainer_4": 0x9B5,
    "beat_rock_tunnel_2_trainer_5": 0x9B6,
    "beat_rock_tunnel_2_trainer_6": 0x9B7,
    "beat_rock_tunnel_2_trainer_7": 0x9B8,
    "seafoam2_boulder1_down_hole": 0x9C0,
    "seafoam2_boulder2_down_hole": 0x9C1,
    "seafoam3_boulder1_down_hole": 0x9C8,
    "seafoam3_boulder2_down_hole": 0x9C9,
    "seafoam4_boulder1_down_hole": 0x9D0,
    "seafoam4_boulder2_down_hole": 0x9D1,
    "beat_articuno": 0x9DA,
}
"""Event flag names mapped to their pokered event IDs."""


POKEMON_TEXT_ENCODING = {
    "<NULL>": 0x00,
    "<PAGE>": 0x49,
    "<PKMN>": 0x4A,
    "<_CONT>": 0x4B,
    "<SCROLL>": 0x4C,
    "<NEXT>": 0x4E,
    "<LINE>": 0x4F,
    "@": 0x50,
    "<PARA>": 0x51,
    "<PLAYER>": 0x52,
    "<RIVAL>": 0x53,
    "#": 0x54,
    "<CONT>": 0x55,
    "<……>": 0x56,
    "<DONE>": 0x57,
    "<PROMPT>": 0x58,
    "<TARGET>": 0x59,
    "<USER>": 0x5A,
    "<PC>": 0x5B,
    "<TM>": 0x5C,
    "<TRAINER>": 0x5D,
    "<ROCKET>": 0x5E,
    "<DEXEND>": 0x5F,
    " ": 0x7F,
    "(": 0x9A,
    ")": 0x9B,
    ":": 0x9C,
    ";": 0x9D,
    "[": 0x9E,
    "]": 0x9F,
    "é": 0xBA,
    "'d": 0xBB,
    "'l": 0xBC,
    "'s": 0xBD,
    "'t": 0xBE,
    "'v": 0xBF,
    "'": 0xE0,
    "<PK>": 0xE1,
    "<MN>": 0xE2,
    "-": 0xE3,
    "'r": 0xE4,
    "'m": 0xE5,
    "?": 0xE6,
    "!": 0xE7,
    ".": 0xE8,
    "▷": 0xEC,
    "▶": 0xED,
    "▼": 0xEE,
    "♂": 0xEF,
    "¥": 0xF0,
    "×": 0xF1,
    "<DOT>": 0xF2,
    "/": 0xF3,
    ",": 0xF4,
    "♀": 0xF5,
    **{chr(ord("A") + index): 0x80 + index for index in range(26)},
    **{chr(ord("a") + index): 0xA0 + index for index in range(26)},
    **{str(index): 0xF6 + index for index in range(10)},
}
"""Pokemon text characters and control tokens mapped to encoded bytes."""

POKEMON_TEXT_DECODING = {value: key for key, value in POKEMON_TEXT_ENCODING.items()}
"""Encoded Pokemon text bytes mapped back to characters and control tokens."""
POKEMON_TEXT_DECODING[383] = " "  # Blank tile used as space in menus


POKEMON_SPECIES = {
    "NO_MON": 0x00,
    "RHYDON": 0x01,
    "KANGASKHAN": 0x02,
    "NIDORAN_M": 0x03,
    "CLEFAIRY": 0x04,
    "SPEAROW": 0x05,
    "VOLTORB": 0x06,
    "NIDOKING": 0x07,
    "SLOWBRO": 0x08,
    "IVYSAUR": 0x09,
    "EXEGGUTOR": 0x0A,
    "LICKITUNG": 0x0B,
    "EXEGGCUTE": 0x0C,
    "GRIMER": 0x0D,
    "GENGAR": 0x0E,
    "NIDORAN_F": 0x0F,
    "NIDOQUEEN": 0x10,
    "CUBONE": 0x11,
    "RHYHORN": 0x12,
    "LAPRAS": 0x13,
    "ARCANINE": 0x14,
    "MEW": 0x15,
    "GYARADOS": 0x16,
    "SHELLDER": 0x17,
    "TENTACOOL": 0x18,
    "GASTLY": 0x19,
    "SCYTHER": 0x1A,
    "STARYU": 0x1B,
    "BLASTOISE": 0x1C,
    "PINSIR": 0x1D,
    "TANGELA": 0x1E,
    "GROWLITHE": 0x21,
    "ONIX": 0x22,
    "FEAROW": 0x23,
    "PIDGEY": 0x24,
    "SLOWPOKE": 0x25,
    "KADABRA": 0x26,
    "GRAVELER": 0x27,
    "CHANSEY": 0x28,
    "MACHOKE": 0x29,
    "MR_MIME": 0x2A,
    "HITMONLEE": 0x2B,
    "HITMONCHAN": 0x2C,
    "ARBOK": 0x2D,
    "PARASECT": 0x2E,
    "PSYDUCK": 0x2F,
    "DROWZEE": 0x30,
    "GOLEM": 0x31,
    "MAGMAR": 0x33,
    "ELECTABUZZ": 0x35,
    "MAGNETON": 0x36,
    "KOFFING": 0x37,
    "MANKEY": 0x39,
    "SEEL": 0x3A,
    "DIGLETT": 0x3B,
    "TAUROS": 0x3C,
    "FARFETCHD": 0x40,
    "VENONAT": 0x41,
    "DRAGONITE": 0x42,
    "DODUO": 0x46,
    "POLIWAG": 0x47,
    "JYNX": 0x48,
    "MOLTRES": 0x49,
    "ARTICUNO": 0x4A,
    "ZAPDOS": 0x4B,
    "DITTO": 0x4C,
    "MEOWTH": 0x4D,
    "KRABBY": 0x4E,
    "VULPIX": 0x52,
    "NINETALES": 0x53,
    "PIKACHU": 0x54,
    "RAICHU": 0x55,
    "DRATINI": 0x58,
    "DRAGONAIR": 0x59,
    "KABUTO": 0x5A,
    "KABUTOPS": 0x5B,
    "HORSEA": 0x5C,
    "SEADRA": 0x5D,
    "SANDSHREW": 0x60,
    "SANDSLASH": 0x61,
    "OMANYTE": 0x62,
    "OMASTAR": 0x63,
    "JIGGLYPUFF": 0x64,
    "WIGGLYTUFF": 0x65,
    "EEVEE": 0x66,
    "FLAREON": 0x67,
    "JOLTEON": 0x68,
    "VAPOREON": 0x69,
    "MACHOP": 0x6A,
    "ZUBAT": 0x6B,
    "EKANS": 0x6C,
    "PARAS": 0x6D,
    "POLIWHIRL": 0x6E,
    "POLIWRATH": 0x6F,
    "WEEDLE": 0x70,
    "KAKUNA": 0x71,
    "BEEDRILL": 0x72,
    "DODRIO": 0x74,
    "PRIMEAPE": 0x75,
    "DUGTRIO": 0x76,
    "VENOMOTH": 0x77,
    "DEWGONG": 0x78,
    "CATERPIE": 0x7B,
    "METAPOD": 0x7C,
    "BUTTERFREE": 0x7D,
    "MACHAMP": 0x7E,
    "GOLDUCK": 0x80,
    "HYPNO": 0x81,
    "GOLBAT": 0x82,
    "MEWTWO": 0x83,
    "SNORLAX": 0x84,
    "MAGIKARP": 0x85,
    "MUK": 0x88,
    "KINGLER": 0x8A,
    "CLOYSTER": 0x8B,
    "ELECTRODE": 0x8D,
    "CLEFABLE": 0x8E,
    "WEEZING": 0x8F,
    "PERSIAN": 0x90,
    "MAROWAK": 0x91,
    "HAUNTER": 0x93,
    "ABRA": 0x94,
    "ALAKAZAM": 0x95,
    "PIDGEOTTO": 0x96,
    "PIDGEOT": 0x97,
    "STARMIE": 0x98,
    "BULBASAUR": 0x99,
    "VENUSAUR": 0x9A,
    "TENTACRUEL": 0x9B,
    "GOLDEEN": 0x9D,
    "SEAKING": 0x9E,
    "PONYTA": 0xA3,
    "RAPIDASH": 0xA4,
    "RATTATA": 0xA5,
    "RATICATE": 0xA6,
    "NIDORINO": 0xA7,
    "NIDORINA": 0xA8,
    "GEODUDE": 0xA9,
    "PORYGON": 0xAA,
    "AERODACTYL": 0xAB,
    "MAGNEMITE": 0xAD,
    "CHARMANDER": 0xB0,
    "SQUIRTLE": 0xB1,
    "CHARMELEON": 0xB2,
    "WARTORTLE": 0xB3,
    "CHARIZARD": 0xB4,
    "FOSSIL_KABUTOPS": 0xB6,
    "FOSSIL_AERODACTYL": 0xB7,
    "MON_GHOST": 0xB8,
    "ODDISH": 0xB9,
    "GLOOM": 0xBA,
    "VILEPLUME": 0xBB,
    "BELLSPROUT": 0xBC,
    "WEEPINBELL": 0xBD,
    "VICTREEBEL": 0xBE,
}
"""Pokemon species names mapped to their pokered species IDs."""

POKEMON_SPECIES_NAMES = {species: name.replace("_", " ") for name, species in POKEMON_SPECIES.items() if species}
"""Pokemon species IDs mapped back to display names."""


_MOVE_NAMES = """
NO_MOVE POUND KARATE_CHOP DOUBLESLAP COMET_PUNCH MEGA_PUNCH PAY_DAY FIRE_PUNCH
ICE_PUNCH THUNDERPUNCH SCRATCH VICEGRIP GUILLOTINE RAZOR_WIND SWORDS_DANCE CUT
GUST WING_ATTACK WHIRLWIND FLY BIND SLAM VINE_WHIP STOMP DOUBLE_KICK MEGA_KICK
JUMP_KICK ROLLING_KICK SAND_ATTACK HEADBUTT HORN_ATTACK FURY_ATTACK HORN_DRILL
TACKLE BODY_SLAM WRAP TAKE_DOWN THRASH DOUBLE_EDGE TAIL_WHIP POISON_STING
TWINEEDLE PIN_MISSILE LEER BITE GROWL ROAR SING SUPERSONIC SONICBOOM DISABLE
ACID EMBER FLAMETHROWER MIST WATER_GUN HYDRO_PUMP SURF ICE_BEAM BLIZZARD PSYBEAM
BUBBLEBEAM AURORA_BEAM HYPER_BEAM PECK DRILL_PECK SUBMISSION LOW_KICK COUNTER
SEISMIC_TOSS STRENGTH ABSORB MEGA_DRAIN LEECH_SEED GROWTH RAZOR_LEAF SOLARBEAM
POISONPOWDER STUN_SPORE SLEEP_POWDER PETAL_DANCE STRING_SHOT DRAGON_RAGE FIRE_SPIN
THUNDERSHOCK THUNDERBOLT THUNDER_WAVE THUNDER ROCK_THROW EARTHQUAKE FISSURE DIG
TOXIC CONFUSION PSYCHIC_M HYPNOSIS MEDITATE AGILITY QUICK_ATTACK RAGE TELEPORT
NIGHT_SHADE MIMIC SCREECH DOUBLE_TEAM RECOVER HARDEN MINIMIZE SMOKESCREEN
CONFUSE_RAY WITHDRAW DEFENSE_CURL BARRIER LIGHT_SCREEN HAZE REFLECT FOCUS_ENERGY
BIDE METRONOME MIRROR_MOVE SELFDESTRUCT EGG_BOMB LICK SMOG SLUDGE BONE_CLUB
FIRE_BLAST WATERFALL CLAMP SWIFT SKULL_BASH SPIKE_CANNON CONSTRICT AMNESIA KINESIS
SOFTBOILED HI_JUMP_KICK GLARE DREAM_EATER POISON_GAS BARRAGE LEECH_LIFE LOVELY_KISS
SKY_ATTACK TRANSFORM BUBBLE DIZZY_PUNCH SPORE FLASH PSYWAVE SPLASH ACID_ARMOR
CRABHAMMER EXPLOSION FURY_SWIPES BONEMERANG REST ROCK_SLIDE HYPER_FANG SHARPEN
CONVERSION TRI_ATTACK SUPER_FANG SLASH SUBSTITUTE STRUGGLE
"""

POKEMON_MOVES = {name: index for index, name in enumerate(_MOVE_NAMES.split())}
"""Pokemon move names mapped to their pokered move IDs."""

Global variables

var BADGES

Badge names mapped to their bit positions in the obtained-badges byte.

var ITEMS

Pokémon Red/Blue item names mapped to their pokered item IDs.

var TRAINER_CLASSES

Trainer class names mapped to their pokered class IDs.

var TRAINER_CLASS_NAMES

Trainer class IDs mapped back to their names.

var TRAINER_SET_COUNTS

Number of party sets available for each trainer class.

var MAPS

Map names mapped to their pokered map IDs.

var EVENT_FLAGS

Event flag names mapped to their pokered event IDs.

var POKEMON_TEXT_ENCODING

Pokemon text characters and control tokens mapped to encoded bytes.

var POKEMON_TEXT_DECODING

Encoded Pokemon text bytes mapped back to characters and control tokens.

var POKEMON_SPECIES

Pokemon species names mapped to their pokered species IDs.

var POKEMON_SPECIES_NAMES

Pokemon species IDs mapped back to display names.

var POKEMON_MOVES

Pokemon move names mapped to their pokered move IDs.